From 6358674e34cdc5ffc78cf9e5d0424d6073fd3c1c Mon Sep 17 00:00:00 2001 From: sunchenliang <2532527871@qq.com> Date: Sun, 14 Jul 2024 19:54:39 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BB=BB=E5=8A=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FlowInstanceServiceImpl.java | 43 +++++++++++-------- .../service/impl/FlowTaskServiceImpl.java | 35 +++++++++++++-- .../ocr/dataobject/OcrContractorTask.java | 10 ++++- .../impl/OcrTaskchildPictureServiceImpl.java | 15 +------ 4 files changed, 67 insertions(+), 36 deletions(-) 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 b2ace869..01676554 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 @@ -16,6 +16,9 @@ import cn.jyjz.xiaoyao.common.base.util.SpringUtils; 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 cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture; +import cn.jyjz.xiaoyao.ocr.service.OcrPictureService; +import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.MultiInstanceLoopCharacteristics; import org.flowable.bpmn.model.UserTask; @@ -46,15 +49,16 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow private IFlowTaskService flowTaskService; @Resource private UserViewapproeService userViewApproeService; + @Resource + private OcrTaskchildPictureService ocrTaskchildPictureService; @Override - public boolean startProcessInstanceById(String procDefId, Map variables, HttpServletRequest request, String formid, String servicename,String deptid) { + public boolean startProcessInstanceById(String procDefId, Map variables, HttpServletRequest request, String formid, String servicename, String deptid) { IFormCustomService iFormCustomService = null; if (StringUtils.isNotBlank(servicename)) { iFormCustomService = SpringUtils.getBean(servicename); } - if (StringUtils.isBlank(formid)) { //表单主键 formid = iFormCustomService.saveForm(request); @@ -87,24 +91,27 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow try { variables.put("businessKey", businessKey); - + //获取下一个节点 UserTask userTask = this.flowTaskService.getNextTasks(procDefId); - if(null != userTask){ + 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); + List loginnames = flowTaskService.getAssignee(userTask, userName); + if (null != loginnames && !loginnames.isEmpty()) { + variables.put("persons", loginnames); } } } - - processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); + processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); + OcrTaskchildPicture taskchildPicture = ocrTaskchildPictureService.getById(formid); + taskchildPicture.setProcessdefinitionid(processInstance.getProcessDefinitionId()); + taskchildPicture.setProcessinstanceid(processInstance.getProcessInstanceId()); + ocrTaskchildPictureService.updateById(taskchildPicture); if (null != iFormCustomService) { - FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(),deptid); + FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(), deptid); if (null == flowTaskCompleteVO) { throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey); @@ -145,7 +152,7 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow } @Override - public boolean startProcessInstanceById(String procDefId, String userName, String createuser, String formid, String servicename,String depti) { + public boolean startProcessInstanceById(String procDefId, String userName, String createuser, String formid, String servicename, String depti) { IFormCustomService iFormCustomService = null; if (StringUtils.isNotBlank(servicename)) { @@ -173,24 +180,24 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow try { variables.put("businessKey", businessKey); - + //获取下一个节点 UserTask userTask = this.flowTaskService.getNextTasks(procDefId); - if(null != userTask){ + 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); + List loginnames = flowTaskService.getAssignee(userTask, userName); + if (null != loginnames && !loginnames.isEmpty()) { + variables.put("persons", loginnames); } } } - + processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); if (null != iFormCustomService) { - FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(),depti); + FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(), depti); if (null == flowTaskCompleteVO) { throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey); 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 30ae4e81..710828ed 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 @@ -48,6 +48,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.SneakyThrows; import org.apache.commons.lang3.ObjectUtils; import org.flowable.bpmn.constants.BpmnXMLConstants; import org.flowable.bpmn.model.*; @@ -70,12 +71,14 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -122,6 +125,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask private OcrPrevailCloudLogService prevailCloudLogService; @Resource private PrevailCloudApi prevailCloudApi; + @Autowired + private OcrContractorTaskService contractorTaskService; @Override public void myTodoTaskList(PageUtils vo, HttpServletRequest request) { @@ -837,6 +842,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask * * @param processInstanceId */ + @SneakyThrows public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId, String deptid) { FlowTaskCompleteVO flowTaskCompleteVO = null; @@ -901,7 +907,30 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask List candidateUsers = userTask.getCandidateUsers(); if (null != candidateUsers && !candidateUsers.isEmpty()) { Random rand = new Random(); - taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + 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)) { + 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 = new ArrayList<>(); + 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()))); + }else { + taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + } + } else { + taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + } } //得到候选组 @@ -1963,7 +1992,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask @Override public ResultVo repetitionTask(Integer type, String tenantId, Map query) { - query.put("type",type); + query.put("type", type); List repeatedContentVoList = flowableccMybatisDao.repetitionTaskNew(query); List formIdsToUpdate = new ArrayList<>(); if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(repeatedContentVoList)) { @@ -1998,7 +2027,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask } } - if(!CollectionUtils.isEmpty(checkDescribeHis)){ + if (!CollectionUtils.isEmpty(checkDescribeHis)) { ocrCheckDescribeHisService.saveOrUpdateBatch(checkDescribeHis); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.in("PICTUREID", formIdsToUpdate) diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrContractorTask.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrContractorTask.java index cee17234..89012596 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrContractorTask.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrContractorTask.java @@ -10,7 +10,7 @@ import lombok.NoArgsConstructor; /** * ClassName: $className$.java - * Description: + * Description: * Author: scl. * Date: 2024/6/23 上午11:20 */ @@ -51,4 +51,10 @@ public class OcrContractorTask { */ @TableField(value = "task_user_name") private String taskUserName; -} \ No newline at end of file + + /** + * 厂商字段名 + */ + @TableField(value = "field") + private String field; +} 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 02290ac3..7311a222 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 @@ -228,22 +228,11 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper); List pictureList = ocrPictureService.listByIds(list.stream().map(OcrTaskchildPicture::getPictureid).collect(Collectors.toList())); - Map> picMap = pictureList.stream().collect(Collectors.groupingBy(OcrPicture::getId)); //目前没有做其他信息返回,如果需要再做修改 for (OcrTaskchildPicture ocrTaskchildPicture : list) { - boolean result = true; - OcrPicture first = pictureList.stream().filter(pic -> pic.getId().equals(ocrTaskchildPicture.getPictureid())).findFirst().get(); - if (StringUtils.isNotBlank(first.getField5())) { - List contractorList = contractorTaskService.list(new LambdaQueryWrapper().eq(OcrContractorTask::getContractor, first.getField5()).eq(OcrContractorTask::getTenantId, ocrTaskchildPicture.getTenantid())); - if (CollectionUtils.isNotEmpty(contractorList)) { - List collect = contractorList.stream().map(OcrContractorTask::getTaskUserAssignee).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(collect) && !collect.contains(userToken.getLoginname())) { - result = false; - } - } - } + //判断审批人是否为当前登录用户 - if (result && ocrTaskchildPicture.getAssignee().contains(userToken.getLoginname()) && + if (ocrTaskchildPicture.getAssignee().contains(userToken.getLoginname()) && (ocrTaskchildPicture.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_END && ocrTaskchildPicture.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE)) { formIds.add(ocrTaskchildPicture.getId().toString());