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 f4ebeef5..86be13c6 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 @@ -440,9 +440,7 @@ public class FlowTaskController extends BaseController { searchQuery.addEqual("states", izstatus); } } - if (Boolean.parseBoolean(isFail)) { - searchQuery.addEqual("isFail", "1"); - } + if (org.springframework.util.StringUtils.hasText(iztaskrrom)) { if (iztaskrrom.contains(",")) { String[] taskrromIds = iztaskrrom.split(","); // 以逗号拆分字符串 @@ -485,6 +483,14 @@ public class FlowTaskController extends BaseController { if (org.apache.commons.lang3.StringUtils.isBlank(tenantId)) { return ResultVoUtil.error("租户主键不能为空"); } + + //开启终审历史数据查询 + if (Boolean.parseBoolean(isFail)) { + searchQuery.addEqual("isFail", "1"); + UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request)); + //终审历史数据查询,要根据权限进行过滤,过滤不属于当前任务的数据。 + searchQuery = contractorTaskService.getUserAuditBySearchQuery(searchQuery,userToken.getLoginname(),tenantId); + } User user = this.userService.getSessionUser(request); if (user.isUserIsSys(xiaoyaoConfig.getWebconfig().getSysLoginUser().split(","))) { } else { @@ -500,11 +506,11 @@ public class FlowTaskController extends BaseController { disSearchQuery(searchQuery, userSearch); } } - List contractorTask = contractorTaskService.list(new LambdaQueryWrapper().eq(OcrContractorTask::getTenantId,tenantId )); - if (!org.springframework.util.CollectionUtils.isEmpty(contractorTask)) { - OcrContractorTask ocrContractorTask = contractorTask.get(0); - searchQuery.addEqual("contractor", ocrContractorTask.getField()); - } +// List contractorTask = contractorTaskService.list(new LambdaQueryWrapper().eq(OcrContractorTask::getTenantId,tenantId )); +// if (!org.springframework.util.CollectionUtils.isEmpty(contractorTask)) { +// OcrContractorTask ocrContractorTask = contractorTask.get(0); +// searchQuery.addEqual("contractor", ocrContractorTask.getField()); +// } Map query = searchQuery.getQuery(); flowTaskService.getFinalProcessInstances(query, pageUtils, user); 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 f0fea157..17c7f2bc 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 @@ -37,6 +37,7 @@ import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo; import cn.jyjz.xiaoyao.oa.from.vo.RepeatedContentVo; import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi; import cn.jyjz.xiaoyao.ocr.dataobject.*; +import cn.jyjz.xiaoyao.ocr.enums.UserAuditTypeEnum; import cn.jyjz.xiaoyao.ocr.service.*; import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting; import cn.jyjz.xiaoyao.ocr.vo.OcrTaskchildPictureApproVo; @@ -905,36 +906,29 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask if (StringUtils.isBlank(userTask.getAssignee())) { //得到候选人 List candidateUsers = userTask.getCandidateUsers(); + List availableUsers = new ArrayList<>(); + List defaultUsers = new ArrayList<>(); + Map> auditMap = null; if (null != candidateUsers && !candidateUsers.isEmpty()) { - Random rand = new Random(); + //1.获取任务id OcrTaskchildPicture taskchildPicture = ocrTaskchildPictureService.getOne(new LambdaQueryWrapper().eq(OcrTaskchildPicture::getProcessinstanceid, processInstanceId).eq(OcrTaskchildPicture::getProcessdefinitionid, processDefinitionId)); - OcrPicture first = ocrPictureService.getOne(new LambdaQueryWrapper().eq(OcrPicture::getId, taskchildPicture.getPictureid())); - List contractorList = contractorTaskService.list(new LambdaQueryWrapper().eq(OcrContractorTask::getTenantId, taskchildPicture.getTenantid())); - if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(contractorList)) { - List userList = contractorList.stream().map(OcrContractorTask::getTaskUserAssignee).collect(Collectors.toList()); - Class aClass = first.getClass(); - Field field = aClass.getDeclaredField(contractorList.get(0).getField()); - field.setAccessible(true); - String fieldValue = (String) field.get(first); - log.info("厂商名称------{}", fieldValue); - List collect = contractorList.stream().filter(contractorTask -> contractorTask.getContractor().equals(fieldValue)).map(OcrContractorTask::getTaskUserAssignee).collect(Collectors.toList()); - List assigneeList = getUserCollect(candidateUsers,collect,true); -// for (String str : candidateUsers) { -// if (collect.contains(str)) { -// assigneeList.add(str); -// } -// } - if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(assigneeList)) { - taskService.claim(task.getId(), assigneeList.get(rand.nextInt(assigneeList.size()))); - } - if (CollectionUtils.isEmpty(assigneeList) && org.apache.commons.collections4.CollectionUtils.isNotEmpty(collect)) { - List userCollect = getUserCollect(candidateUsers, collect, false); - taskService.claim(task.getId(), userCollect.get(rand.nextInt(userCollect.size()))); - } else { - taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + if (taskchildPicture!=null){ + //2.任务审核鉴权,(确定由那个用户进行审核) + auditMap = ocrPictureService.userAuditRights(taskchildPicture.getPictureid(),candidateUsers); + if (auditMap!=null){ + availableUsers = auditMap.get(UserAuditTypeEnum.AvailableUser); + defaultUsers = auditMap.get(UserAuditTypeEnum.DefaultUser); } - } else { - taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + } + + //3.检查是否由可用审核 + Random rand = new Random(); + if(!availableUsers.isEmpty()){ + taskService.claim(task.getId(),availableUsers.size()==1? availableUsers.get(0) : availableUsers.get(rand.nextInt(availableUsers.size()))); + }else if (!defaultUsers.isEmpty()){ + taskService.claim(task.getId(), defaultUsers.size()==1? defaultUsers.get(0) : defaultUsers.get(rand.nextInt(defaultUsers.size()))); + }else{ + taskService.claim(task.getId(), candidateUsers.size()==1? candidateUsers.get(0) : candidateUsers.get(rand.nextInt(candidateUsers.size()))); } } @@ -1260,92 +1254,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask Long count = ocrTaskchildPictureService.listFinalCount(query); List list = ocrTaskchildPictureService.listFinal(query); -// for (OcrTaskchildPicture taskchildPicture : list) { -// //查询对应的流程分类 -// Category category = categoryService.selectDtoById(taskchildPicture.getCategoryid()); -// taskchildPicture.setCategoryDto(category); -// -// if (StringUtils.isNotBlank(taskchildPicture.getProcessdefinitionid())) { -// -// List taskList = this.nowRunTask(taskchildPicture.getProcessinstanceid(), taskchildPicture.getProcessdefinitionid()); -// if (null != taskList && !taskList.isEmpty()) { -// taskchildPicture.setTaskId(taskList.get(0).getId()); -// -// Task tasknow = taskService.createTaskQuery().taskId(taskchildPicture.getTaskId()).singleResult(); -// BpmnModel bpmnModel = repositoryService.getBpmnModel(tasknow.getProcessDefinitionId()); -// // 获取节点定义id -// String taskDefinitionKey = tasknow.getTaskDefinitionKey(); -// // 根据节点定义id获取节点元素 -// FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey); -// if (flowElement instanceof UserTask) { -// UserTask userTask = (UserTask) flowElement; -// -// taskchildPicture.setDocumentation(userTask.getDocumentation()); -// } -// } -// -// //查询历史 -// List historicTaskInstanceDtos = new ArrayList<>(); -// // 查询当前任务的流转信息 -// List taskHiInstances = historyService.createHistoricTaskInstanceQuery() -// .processInstanceId(taskchildPicture.getProcessinstanceid()) -// .includeProcessVariables() -// .orderByHistoricTaskInstanceStartTime() -// .asc() -// .list(); -// for (HistoricTaskInstance taskHiInstance : taskHiInstances) { -// HistoricTaskInstanceDto dto = new HistoricTaskInstanceDto(); -// dto.setTaskId(taskHiInstance.getId()); -// dto.setTaskName(taskHiInstance.getName()); -// dto.setFinishTime(taskHiInstance.getEndTime()); -// if (taskHiInstance.getDurationInMillis() != null) { -// dto.setDuration(taskHiInstance.getDurationInMillis() / 1000 + "秒"); -// } -// dto.setTaskDefKey(taskHiInstance.getTaskDefinitionKey()); -// -// //Map variables = taskHiInstance.getTaskLocalVariables(); -// -// Map variables = taskHiInstance.getProcessVariables(); -// -// if (null != variables && null != variables.get("approvd")) { -// dto.setState(variables.get("approvd").toString()); -// } -// -// if (StringUtils.isNotBlank(taskHiInstance.getAssignee())) { -// if (SystemConstantsOa.OA_TASK_SKIP_ASSIGINE.equals(taskHiInstance.getAssignee())) { -// dto.setAssigneeName(taskHiInstance.getAssignee()); -// } else { -// User user1 = userService.findByLoginname(taskHiInstance.getAssignee()); -// -// dto.setAssigneeName(user1.getUsername()); -// } -// -// } -// -// BpmnModel bpmnModel = repositoryService.getBpmnModel(taskchildPicture.getProcessdefinitionid()); -// -//// // 根据节点定义id获取节点元素 -// FlowElement flowElement = bpmnModel.getFlowElement(taskHiInstance.getTaskDefinitionKey()); -// if (flowElement instanceof UserTask) { -// UserTask userTask = (UserTask) flowElement; -// -// taskchildPicture.setDocumentation(userTask.getDocumentation()); -// } -// // 还需要根据 HistoricTaskInstance 找到对应的 审批意见 -// List processInstanceComments = taskService.getProcessInstanceComments(taskchildPicture.getProcessinstanceid()); -// for (Comment comment : processInstanceComments) { -// -// if (comment.getTaskId().equals(taskHiInstance.getId())) { -// // 审批意见 -// String fullMessage = comment.getFullMessage(); -// dto.setComment(fullMessage); -// } -// } -// historicTaskInstanceDtos.add(dto); -// } -// taskchildPicture.setTransferRecords(historicTaskInstanceDtos); -// } -// } for (OcrTaskchildPicture ocrTaskchildPicture : list) { String assignee = ocrTaskchildPicture.getAssignee(); if (assignee.contains(",")) { @@ -1357,6 +1265,11 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask } } } + if (ocrTaskchildPicture.getIsRepeat() !=null &&ocrTaskchildPicture.getIsRepeat()==1){ + ocrTaskchildPicture.setField14("重复"); + }else{ + ocrTaskchildPicture.setField14("不重复"); + } } pageUtils.setTotalCount(count.intValue()); pageUtils.setList(list); 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 00048ebd..b8127861 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 @@ -21,7 +21,10 @@ import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpMethod; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.serializer.PropertyFilter; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; import lombok.SneakyThrows; @@ -102,7 +105,7 @@ public class PrevailCloudApiImpl implements PrevailCloudApi { if (resultData.getStatus() == 100) { //解析基础数据 String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData); - ApiPage apiPage = JSONUtil.toBean(data, ApiPage.class); + ApiPage apiPage = JSON.parseObject(data, new TypeReference>() {}); //日志增加拉取数量 prevailCloudLog.setResponseParam(prevailCloudLog.getResponseParam()+",拉取数量:"+apiPage.getTotal()); if(!isRetry && apiPage.getTotal()==0){ @@ -110,7 +113,15 @@ public class PrevailCloudApiImpl implements PrevailCloudApi { return null; } //解析数据结果为List - List listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()), PictureSourceResult.class); + // 创建 PropertyFilter 实例,用于过滤掉值为 null 的字段 + PropertyFilter filter = new PropertyFilter() { + @Override + public boolean apply(Object object, String name, Object value) { + return value != null; // 过滤掉值为 null 的字段 + } + }; +// List listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()), PictureSourceResult.class); + List listResult = apiPage.getRecords(); ApiPage resultApiPage = new ApiPage<>(); resultApiPage.setPageNo(apiPage.getPageNo()); resultApiPage.setPageSize(apiPage.getPageSize()); @@ -248,7 +259,6 @@ public class PrevailCloudApiImpl implements PrevailCloudApi { //解析基础数据 String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData); ApiPage apiPage = JSONUtil.toBean(data, ApiPage.class); - System.out.println(apiPage); //解析数据结果为List // List listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class); // ApiPage resultApiPage = new ApiPage<>(); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPicture.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPicture.java index 8e0b1348..3d43b350 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPicture.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPicture.java @@ -265,11 +265,19 @@ public class OcrTaskchildPicture implements BaseDto, java.io.Serializable { @ApiModelProperty(value = "拜访终端") @TableField(exist = false) - private String field3 = "测试拜访终端"; + private String field3; + + @ApiModelProperty(value = "子计划名称") + @TableField(exist = false) + private String planchildname; @ApiModelProperty(value = "是否重复") @TableField(exist = false) - private String field14 = "重复"; + private String field14; + + @Schema(description = "是否图片重复") + @TableField(exist = false) + private Integer isRepeat; @ApiModelProperty(value = "历史状态") @TableField(exist = false) diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dto/ApproveNodeDto.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dto/ApproveNodeDto.java index 9e86bbfc..90950d18 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dto/ApproveNodeDto.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dto/ApproveNodeDto.java @@ -56,4 +56,8 @@ public class ApproveNodeDto { * 小结重复(是、否) */ private Integer isBriefRepeat; + /** + * 审批时间 + */ + private Long approveDate; } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/enums/UserAuditTypeEnum.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/enums/UserAuditTypeEnum.java new file mode 100644 index 00000000..f227783c --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/enums/UserAuditTypeEnum.java @@ -0,0 +1,12 @@ +package cn.jyjz.xiaoyao.ocr.enums; + +/** + * TODO + * + * @author shuli.Yao + * @version 1.0 + * @date 2024/8/6 19:12 + */ +public enum UserAuditTypeEnum { + AvailableUser,DefaultUser,NoAuditUser +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrContractorTaskService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrContractorTaskService.java index 512fbdaa..d44ce9d9 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrContractorTaskService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrContractorTaskService.java @@ -1,14 +1,35 @@ package cn.jyjz.xiaoyao.ocr.service; +import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery; import cn.jyjz.xiaoyao.ocr.dataobject.OcrContractorTask; +import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; +import cn.jyjz.xiaoyao.ocr.enums.UserAuditTypeEnum; import com.baomidou.mybatisplus.extension.service.IService; - /** + +import java.util.List; +import java.util.Map; + +/** * ClassName: $className$.java - * Description: + * Description: * Author: scl. * Date: 2024/6/23 上午11:20 */ public interface OcrContractorTaskService extends IService{ + /** + * 检查当前任务是否符合用户配置的审核权限 + * @param picture + * @param userName + * @return + */ + UserAuditTypeEnum checkUsersAuditByPicture(OcrPicture picture, String userName); - + /** + * 根据用户获取用户审核权限,组装为searchQuery + * @param searchQuery + * @param username + * @param tenantId + * @return + */ + SearchQuery getUserAuditBySearchQuery(SearchQuery searchQuery, String username, String tenantId); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java index 1754000b..240d8f4e 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java @@ -5,6 +5,7 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken; import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture; +import cn.jyjz.xiaoyao.ocr.enums.UserAuditTypeEnum; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -95,4 +96,13 @@ public interface OcrPictureService extends BaseService { OcrTaskchildPicture getOcrTaskChildPictureByPictureId(String pictureId); IPage pagePictureSimilarity(String pictureId, Page page, QueryWrapper queryWrapper); + + /** + * 根据任务id,检查任务审核配置,应分配给那个用户 + * + * @param pictureid + * @param candidateUsers 候选分配用户集合 + * @return + */ + Map> userAuditRights(Long pictureid, List candidateUsers); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDuplicateServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDuplicateServiceImpl.java index 5198f8c1..ee63559b 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDuplicateServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDuplicateServiceImpl.java @@ -324,6 +324,9 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl pictures = new ArrayList<>(); pictures.add(ocrPicture); try { + if ("287798960352200777".equals(ocrPicture.getId()) || "287798960268309961".equals(ocrPicture.getId())) { + System.out.println("adsd"); + } this.saveCheckDuplicateData(checkDuplicateId,saveList,pictures,ocrPictureList.get(0).getTenantId().toString(),sysUser); } catch (Exception e) { logger.error("比对结果入库异常! error:{}",e.getMessage()); @@ -349,6 +352,7 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl saveList,List ocrPictureList, String tenantId,UserToken sysUser) throws Exception { + //1.批量入库 logger.debug("查重任务:{},开启批量入库任务",checkDuplicateId); boolean b = checkDuplicateResultService.saveOrUpdateBatch(saveList); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrContractorTaskServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrContractorTaskServiceImpl.java index 1ede56b7..7c25d5ef 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrContractorTaskServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrContractorTaskServiceImpl.java @@ -1,19 +1,87 @@ package cn.jyjz.xiaoyao.ocr.service.impl; +import cn.hutool.core.util.ArrayUtil; +import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery; +import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; +import cn.jyjz.xiaoyao.ocr.enums.UserAuditTypeEnum; +import cn.jyjz.xiaoyao.ocr.service.OcrPictureService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; -import java.util.List; + +import java.util.*; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.jyjz.xiaoyao.ocr.dataobject.OcrContractorTask; import cn.jyjz.xiaoyao.ocr.dataDao.OcrContractorTaskMapper; import cn.jyjz.xiaoyao.ocr.service.OcrContractorTaskService; + +import javax.annotation.Resource; + /** * ClassName: $className$.java - * Description: + * Description: * Author: scl. * Date: 2024/6/23 上午11:20 */ @Service public class OcrContractorTaskServiceImpl extends ServiceImpl implements OcrContractorTaskService{ + @Resource + private OcrPictureService pictureService; + + @Override + public UserAuditTypeEnum checkUsersAuditByPicture(OcrPicture picture, String userName) { + //获取当前用户的审核权限 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("task_user_assignee",userName); + queryWrapper.eq("tenant_id",picture.getTenantId()); + List contractorTasks = baseMapper.selectList(queryWrapper); + if (contractorTasks.isEmpty()){ + return UserAuditTypeEnum.DefaultUser; + } + + //组装检索sql + QueryWrapper checkWrapper = new QueryWrapper(); + for (OcrContractorTask contractorTask : contractorTasks) { + String queryVal = contractorTask.getContractor(); + //检查是否可能时多个结果 + if (queryVal.indexOf(",") >0) { + //多个筛选值,以 xxx,xxx拼接 + String [] queryValues = queryVal.split(","); + checkWrapper.in(contractorTask.getField(),queryValues); + }else{ + //单个值直接进行筛选即可 + checkWrapper.eq(contractorTask.getField(),queryVal); + } + } + checkWrapper.eq("id",picture.getId()); + + if(pictureService.list(checkWrapper).isEmpty()){ + return UserAuditTypeEnum.NoAuditUser; + } + return UserAuditTypeEnum.AvailableUser; + } + + @Override + public SearchQuery getUserAuditBySearchQuery(SearchQuery searchQuery, String username, String tenantId) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("task_user_assignee",username); + queryWrapper.eq("tenant_id",tenantId); + List contractorTasks = baseMapper.selectList(queryWrapper); + for (OcrContractorTask contractorTask : contractorTasks) { + String queryVal = contractorTask.getContractor(); + //检查是否可能时多个结果 + if (queryVal.indexOf(",") >0) { + //多个筛选值,以 xxx,xxx拼接 + String [] queryValues = queryVal.split(","); + searchQuery.addIn(contractorTask.getField(), Arrays.asList(queryValues)); + }else{ + //单个值直接进行筛选即可 + searchQuery.addEqual(contractorTask.getField(),queryVal); + } + } + return searchQuery; + } + } 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 46550148..8f9b2866 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 @@ -16,6 +16,7 @@ import cn.jyjz.xiaoyao.oa.from.service.UserapproveService; import cn.jyjz.xiaoyao.ocr.api.utils.ApiConfig; import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureMybatisDao; import cn.jyjz.xiaoyao.ocr.dataobject.*; +import cn.jyjz.xiaoyao.ocr.enums.UserAuditTypeEnum; import cn.jyjz.xiaoyao.ocr.service.*; import cn.jyjz.xiaoyao.ocr.thread.TaskQueue; import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity; @@ -91,6 +92,10 @@ public class OcrPictureServiceImpl extends BaseServiceImpl> userAuditRights(Long pictureid,List candidateUsers) { + List availableAuditUsers = new ArrayList<>(); + List defaultAuditUsers = new ArrayList<>(); + List noAuditUsers = new ArrayList<>(); + OcrPicture picture = baseMapper.selectById(pictureid); + for (String userName : candidateUsers) { + UserAuditTypeEnum userAuditTypeEnum = contractorTaskService.checkUsersAuditByPicture(picture,userName); + if (UserAuditTypeEnum.AvailableUser == userAuditTypeEnum){ + availableAuditUsers.add(userName); + }else if (UserAuditTypeEnum.NoAuditUser == userAuditTypeEnum){ + noAuditUsers.add(userName); + }else{ + defaultAuditUsers.add(userName); + } + } + Map> result = new HashMap<>(); + result.put(UserAuditTypeEnum.AvailableUser,availableAuditUsers); + result.put(UserAuditTypeEnum.DefaultUser,defaultAuditUsers); + result.put(UserAuditTypeEnum.NoAuditUser,noAuditUsers); + return result; + } + // @Override // public Long getPhotoDateTime(OcrPicture picture) { // long timestamp = 0L; 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 0afd8ba1..afa497be 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 @@ -851,14 +851,17 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl().eq(Userapprove::getFormid, userApprove.getFormid()).eq(Userapprove::getTaskname,userApprove.getTaskname())); ApproveNodeDto approveNode = new ApproveNodeDto(); approveNode.setApproveRemark(userApprove.getTaskcomment()); approveNode.setApproveResult(userApprove.getStatshis() == 2 ? 0 : 1); - approveNode.setApproveWay(0); + approveNode.setApproveWay(approveCount>1?1:2); approveNode.setNodeName(userApprove.getTaskname()); approveNode.setReason(userApprove.getReason()); approveNode.setApproveByName(userApprove.getUsername()); + approveNode.setApproveDate(userApprove.getCreatedate()); //审批不通过出来方式 approveNode.setProcessMethod(1); return approveNode; 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 2b083c56..94d8bf65 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 @@ -222,11 +222,9 @@ public class PictureDisposeTask implements Runnable { //图片创建时间 // picture.setPhotoDateTimestamp(System.currentTimeMillis()); - System.out.println("SubmitDateTimestamp1=================>>>>>>>" + pictureSourceResult.getSubmitTime()); - System.out.println("SubmitDateTimestamp2=================>>>>>>>" + picture.getSubmitDateTimestamp()); - //定位距离 if (StringUtils.isNotBlank(pictureSourceResult.getDistance())) { + picture.setField12(pictureSourceResult.getDistance()); } //设置图片信息 if (map.get("imgName") != null) { diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrTaskchildPictureMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrTaskchildPictureMapper.xml index cffb52f8..8d3a59ce 100644 --- a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrTaskchildPictureMapper.xml +++ b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrTaskchildPictureMapper.xml @@ -188,7 +188,7 @@ - and OCPICTUREID ${ocpictureid.dataOp} ${ocpictureid.likestar}#{ocpictureid.value}${ocpictureid.likeend} + and OCPICTUREID ${ocpictureid.dataOp} ${ocpictureid.likestar}#{ocpictureid.value}${ocpictureid.likeend} and PICTURERESULT ${pictureresult.dataOp} ${pictureresult.likestar}#{pictureresult.value}${pictureresult.likeend} @@ -309,7 +309,7 @@ - and tcp.OCPICTUREID ${ocpictureid.dataOp} ${ocpictureid.likestar}#{ocpictureid.value}${ocpictureid.likeend} + and tcp.OCPICTUREID ${ocpictureid.dataOp} ${ocpictureid.likestar}#{ocpictureid.value}${ocpictureid.likeend} and tcp.PICTURERESULT ${pictureresult.dataOp} ${pictureresult.likestar}#{pictureresult.value}${pictureresult.likeend} @@ -487,6 +487,147 @@ OR tcp.FROMTASKNAME LIKE CONCAT('%', #{fuzzyRetrieval.value}, '%') ) + + + + and pic.tenantname ${tenantname.dataOp} ${tenantname.likestar} + + + + #{item} + + + + #{tenantname.value} + + ${tenantname.likeend} + + + + and pic.projectId ${projectId.dataOp} ${projectId.likestar} + + + + #{item} + + + + #{projectId.value} + + ${projectId.likeend} + + + + and pic.projectIdName ${projectIdName.dataOp} ${projectIdName.likestar} + + + + #{item} + + + + #{projectIdName.value} + + ${projectIdName.likeend} + + + + and pic.planId ${planId.dataOp} ${planId.likestar} + + + + #{item} + + + + #{planId.value} + + ${planId.likeend} + + + + and pic.planName ${planName.dataOp} ${planName.likestar} + + + + #{item} + + + + #{planName.value} + + ${planName.likeend} + + + + and pic.releaseArea ${releaseArea.dataOp} ${releaseArea.likestar} + + + + #{item} + + + + #{releaseArea.value} + + ${releaseArea.likeend} + + + + and pic.field5 ${field5.dataOp} ${field5.likestar} + + + + #{item} + + + + #{field5.value} + + ${field5.likeend} + + + + and pic.field3 ${field3.dataOp} ${field3.likestar} + + + + #{item} + + + + #{field3.value} + + ${field3.likeend} + + + + and pic.field1 ${field1.dataOp} ${field1.likestar} + + + + #{item} + + + + #{field1.value} + + ${field1.likeend} + + + + and pic.field2 ${field2.dataOp} ${field2.likestar} + + + + #{item} + + + + #{field2.value} + + ${field2.likeend} + @@ -561,7 +702,7 @@ and (tcp.FROMUPTIME ${izuptimeStart.dataOp} '${izuptimeStart.value}' - or tcp.FROMUPTIME ${izuptimeEnd.dataOp} '${izuptimeEnd.value}') + or tcp.FROMUPTIME ${izuptimeEnd.dataOp} '${izuptimeEnd.value}') @@ -581,19 +722,19 @@ select tcp.*, pic.field11 reporttime, pic.similarity_score similarityscore from ( select tc.* from ocr_taskchild_picture tc, - OA_USERFINAL_T uf + OA_USERFINAL_T uf where tc.ID = uf.FORMID and uf.USERID ${thisLoginUserid.dataOp} ${thisLoginUserid.likestar}#{thisLoginUserid.value}${thisLoginUserid.likeend} UNION select - tc.* + tc.* from ocr_taskchild_picture tc where tc.STATES = 5 ) as tcp - left join ocr_picture pic - on tcp.PICTUREID = pic.ID + left join ocr_picture pic + on tcp.PICTUREID = pic.ID and pic.suspiciousfile = 0 @@ -644,44 +785,60 @@ parameterType="java.util.Map"> select tcp.* from ( select tc.*, - uf.COMMENTHIS, - uf.TASKNAME as TASKNAMEHIS, - uf.STATSHIS, - uf.TASKNO, - uf.TASKINDEX as taskNodeIndex, - op.field6 as fromCustomerLevel, - op.releaseArea as fromCity, - op.is_repeat, - tc.is_repeated_nodules as isRepeatedNodules + uf.COMMENTHIS, + uf.TASKNAME as TASKNAMEHIS, + uf.STATSHIS, + uf.TASKNO, + uf.TASKINDEX as taskNodeIndex, + op.field6 as fromCustomerLevel, + op.releaseArea as fromCity, + op.is_repeat, + tc.is_repeated_nodules as isRepeatedNodules from ocr_taskchild_picture tc - LEFT JOIN OA_USERAPPROVE_T uf ON tc.ID = uf.ID - left join ocr_picture op on tc.PICTUREID = op.ID + LEFT JOIN OA_USERAPPROVE_T uf ON tc.ID = uf.ID + left join ocr_picture op on tc.PICTUREID = op.ID where FIND_IN_SET(#{searchassignee}, tc.ASSIGNEE) - and tc.TENANTID = #{searchtenantid} - and tc.STATES = 2 - and op.suspiciousfile = 0 + and tc.TENANTID = #{searchtenantid} + and tc.STATES = 2 + and op.suspiciousfile = 0 ${izApprovalStatus.rulesOp} - ( #{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE (uf.STATSHIS - , 1) - ) + ( + + + #{item} = COALESCE (uf.STATSHIS, 1) + + + + + #{izApprovalStatus.value} = COALESCE (uf.STATSHIS, 1) + + ) UNION select - tc.*, uf.COMMENTHIS, uf.TASKNAME as TASKNAMEHIS, uf.STATSHIS, uf.TASKNO, uf.TASKINDEX as taskNodeIndex, op.field6 as fromCustomerLevel, op.releaseArea as fromCity, op.is_repeat, tc.is_repeated_nodules as isRepeatedNodules + tc.*, uf.COMMENTHIS, uf.TASKNAME as TASKNAMEHIS, uf.STATSHIS, uf.TASKNO, uf.TASKINDEX as taskNodeIndex, op.field6 as fromCustomerLevel, op.releaseArea as fromCity, op.is_repeat, tc.is_repeated_nodules as isRepeatedNodules from ocr_taskchild_picture tc, OA_USERAPPROVE_T uf, ocr_picture op where tc.ID = uf.FORMID - and tc.PICTUREID = op.ID - and op.suspiciousfile = 0 - and tc.TENANTID = #{searchtenantid} + and tc.PICTUREID = op.ID + and op.suspiciousfile = 0 + and tc.TENANTID = #{searchtenantid} and uf.USERID = #{thisLoginUserid} ${izApprovalStatus.rulesOp} - ( #{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE (uf.STATSHIS - , 1) - ) + ( + + + #{item} = COALESCE (uf.STATSHIS, 1) + + + + + #{izApprovalStatus.value} = COALESCE (uf.STATSHIS, 1) + + ) ) as tcp @@ -714,8 +871,16 @@ and op.suspiciousfile = 0 ${izApprovalStatus.rulesOp} - ( #{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE (uf.STATSHIS - , 1) + ( + + + #{item} = COALESCE (uf.STATSHIS, 1) + + + + + #{izApprovalStatus.value} = COALESCE (uf.STATSHIS, 1) + ) UNION @@ -730,8 +895,16 @@ ${izApprovalStatus.rulesOp} - ( #{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE (uf.STATSHIS - , 1) + ( + + + #{item} = COALESCE (uf.STATSHIS, 1) + + + + + #{izApprovalStatus.value} = COALESCE (uf.STATSHIS, 1) + ) ) as tcp @@ -764,16 +937,16 @@ SELECT distinct t2.ID id, - t2.PICTUREID pictureId, - t2.STATES states, - t2.PROCESSINSTANCEID processInstanceId, - t2.PROCESSDEFINITIONID processDefinitionId, - t2.DEPLOYMENTID deploymentId, - t2.ASSIGNEENAME assigneeName, - t2.ASSIGNEE assignee, - t2.FILEANNEX fileAnnex, - t2.GUIDANG guiDang, - t2.CREATEUSER createUser, - t2.CREATEUSERNAME createUserName, - t2.CREATEDATE createDate, - t2.USERID userId, - t2.USERNAME userName, - t2.FROMTASKID fromTaskId, - t2.FROMTASKNAME fromTaskName, - t2.FROMUSERID fromUserId, - t2.FROMPROJECTID fromProjectId, - t2.FROMPLANID fromPlanId, - t2.FROMUPTIME fromupTime, - t2.FROMSOURCEID fromSourceId, - t2.HAVEPOINTS havePoints, - t2.TASKNAME taskName, - t2.TASKID taskId, - t2.FROMUSERNAME fromUserName, - t2.FROMPROJECTNAME fromProjectName, - t2.FINISHTIME finishTime, - t1.imgUrl, - t1.submit_date_timestamp submitDateTimestamp, - t1.photo_date_timestamp photoDateTimestamp, - t1.similarity_score similarityScore, - t1.server_thumbnail_url serverThumbnailUrl, - IF(EXISTS (SELECT STATSHIS - FROM oa_userapprove_t - WHERE FORMID = t2.ID and STATSHIS = 3 and 'finale_judgment' = #{taskNode}), 3, - IFNULL((SELECT t3.STATSHIS - FROM oa_userapprove_t t3 - WHERE t3.FORMID = t2.ID - and t3.TASKINDEX = #{taskNode} - LIMIT 1), 1)) AS historyStates + t2.PICTUREID pictureId, + t2.STATES states, + t2.PROCESSINSTANCEID processInstanceId, + t2.PROCESSDEFINITIONID processDefinitionId, + t2.DEPLOYMENTID deploymentId, + t2.ASSIGNEENAME assigneeName, + t2.ASSIGNEE assignee, + t2.FILEANNEX fileAnnex, + t2.GUIDANG guiDang, + t2.CREATEUSER createUser, + t2.CREATEUSERNAME createUserName, + t2.CREATEDATE createDate, + t2.USERID userId, + t2.USERNAME userName, + t2.FROMTASKID fromTaskId, + t2.FROMTASKNAME fromTaskName, + t2.FROMUSERID fromUserId, + t2.FROMPROJECTID fromProjectId, + t2.FROMPLANID fromPlanId, + t2.FROMUPTIME fromupTime, + t2.FROMSOURCEID fromSourceId, + t2.HAVEPOINTS havePoints, + t2.TASKNAME taskName, + t2.TASKID taskId, + t2.FROMUSERNAME fromUserName, + t2.FROMPROJECTNAME fromProjectName, + t2.FINISHTIME finishTime, + t1.imgUrl, + t1.submit_date_timestamp submitDateTimestamp, + t1.photo_date_timestamp photoDateTimestamp, + t1.similarity_score similarityScore, + t1.server_thumbnail_url serverThumbnailUrl, + IF(EXISTS (SELECT STATSHIS + FROM oa_userapprove_t + WHERE FORMID = t2.ID and STATSHIS = 3 and 'finale_judgment' = #{taskNode}), 3, + IFNULL((SELECT t3.STATSHIS + FROM oa_userapprove_t t3 + WHERE t3.FORMID = t2.ID + and t3.TASKINDEX = #{taskNode} + LIMIT 1), 1)) AS historyStates FROM ocr_picture t1 - LEFT JOIN ocr_taskchild_picture t2 - on t1.ID = t2.PICTUREID + LEFT JOIN ocr_taskchild_picture t2 + on t1.ID = t2.PICTUREID where t1.suspiciousfile = 0 - and t1.ID in + and t1.ID in #{item} @@ -914,50 +1087,50 @@ SELECT t2.ID id, - t2.PICTUREID pictureId, - t2.STATES states, - t2.PROCESSINSTANCEID processInstanceId, - t2.PROCESSDEFINITIONID processDefinitionId, - t2.DEPLOYMENTID deploymentId, - t2.ASSIGNEENAME assigneeName, - t2.ASSIGNEE assignee, - t2.FILEANNEX fileAnnex, - t2.GUIDANG guiDang, - t2.CREATEUSER createUser, - t2.CREATEUSERNAME createUserName, - t2.CREATEDATE createDate, - t2.USERID userId, - t2.USERNAME userName, - t2.FROMTASKID fromTaskId, - t2.FROMTASKNAME fromTaskName, - t2.FROMUSERID fromUserId, - t2.FROMPROJECTID fromProjectId, - t2.FROMPLANID fromPlanId, - t2.FROMUPTIME fromupTime, - t2.FROMSOURCEID fromSourceId, - t2.HAVEPOINTS havePoints, - t2.TASKNAME taskName, - t2.TASKID taskId, - t2.FROMUSERNAME fromUserName, - t2.FROMPROJECTNAME fromProjectName, - t2.FINISHTIME finishTime, - t1.imgUrl, - t1.server_thumbnail_url serverThumbnailUrl, - ifnull(t3.STATSHIS, 1) historyStates, - t1.submit_date_timestamp submitDateTimestamp, - t1.photo_date_timestamp photoDateTimestamp, - t1.similarity_score similarityScore + t2.PICTUREID pictureId, + t2.STATES states, + t2.PROCESSINSTANCEID processInstanceId, + t2.PROCESSDEFINITIONID processDefinitionId, + t2.DEPLOYMENTID deploymentId, + t2.ASSIGNEENAME assigneeName, + t2.ASSIGNEE assignee, + t2.FILEANNEX fileAnnex, + t2.GUIDANG guiDang, + t2.CREATEUSER createUser, + t2.CREATEUSERNAME createUserName, + t2.CREATEDATE createDate, + t2.USERID userId, + t2.USERNAME userName, + t2.FROMTASKID fromTaskId, + t2.FROMTASKNAME fromTaskName, + t2.FROMUSERID fromUserId, + t2.FROMPROJECTID fromProjectId, + t2.FROMPLANID fromPlanId, + t2.FROMUPTIME fromupTime, + t2.FROMSOURCEID fromSourceId, + t2.HAVEPOINTS havePoints, + t2.TASKNAME taskName, + t2.TASKID taskId, + t2.FROMUSERNAME fromUserName, + t2.FROMPROJECTNAME fromProjectName, + t2.FINISHTIME finishTime, + t1.imgUrl, + t1.server_thumbnail_url serverThumbnailUrl, + ifnull(t3.STATSHIS, 1) historyStates, + t1.submit_date_timestamp submitDateTimestamp, + t1.photo_date_timestamp photoDateTimestamp, + t1.similarity_score similarityScore FROM ocr_picture t1 - LEFT JOIN ocr_taskchild_picture t2 - on t1.ID = t2.PICTUREID - LEFT JOIN oa_userapprove_t t3 on t2.ID = t3.FORMID and t3.TASKNAME = '${taskname}' + LEFT JOIN ocr_taskchild_picture t2 + on t1.ID = t2.PICTUREID + LEFT JOIN oa_userapprove_t t3 on t2.ID = t3.FORMID and t3.TASKNAME = '${taskname}' where t1.ID in #{item} @@ -1016,33 +1189,32 @@