feat:修改创建任务逻辑

pull/165/head
sunchenliang 11 months ago
parent c5690c74b3
commit 6358674e34

@ -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.util.StringUtils;
import cn.jyjz.xiaoyao.common.base.vo.UserToken; import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.service.UserViewapproeService; 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 lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.MultiInstanceLoopCharacteristics; import org.flowable.bpmn.model.MultiInstanceLoopCharacteristics;
import org.flowable.bpmn.model.UserTask; import org.flowable.bpmn.model.UserTask;
@ -46,15 +49,16 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
private IFlowTaskService flowTaskService; private IFlowTaskService flowTaskService;
@Resource @Resource
private UserViewapproeService userViewApproeService; private UserViewapproeService userViewApproeService;
@Resource
private OcrTaskchildPictureService ocrTaskchildPictureService;
@Override @Override
public boolean startProcessInstanceById(String procDefId, Map<String, Object> variables, HttpServletRequest request, String formid, String servicename,String deptid) { public boolean startProcessInstanceById(String procDefId, Map<String, Object> variables, HttpServletRequest request, String formid, String servicename, String deptid) {
IFormCustomService iFormCustomService = null; IFormCustomService iFormCustomService = null;
if (StringUtils.isNotBlank(servicename)) { if (StringUtils.isNotBlank(servicename)) {
iFormCustomService = SpringUtils.getBean(servicename); iFormCustomService = SpringUtils.getBean(servicename);
} }
if (StringUtils.isBlank(formid)) { if (StringUtils.isBlank(formid)) {
//表单主键 //表单主键
formid = iFormCustomService.saveForm(request); formid = iFormCustomService.saveForm(request);
@ -87,24 +91,27 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
try { try {
variables.put("businessKey", businessKey); variables.put("businessKey", businessKey);
//获取下一个节点 //获取下一个节点
UserTask userTask = this.flowTaskService.getNextTasks(procDefId); UserTask userTask = this.flowTaskService.getNextTasks(procDefId);
if(null != userTask){ if (null != userTask) {
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
// 会签节点 // 会签节点
if (Objects.nonNull(multiInstance)) { if (Objects.nonNull(multiInstance)) {
List<String> loginnames = flowTaskService.getAssignee(userTask,userName); List<String> loginnames = flowTaskService.getAssignee(userTask, userName);
if(null != loginnames && !loginnames.isEmpty()){ if (null != loginnames && !loginnames.isEmpty()) {
variables.put("persons",loginnames); 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) { if (null != iFormCustomService) {
FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(),deptid); FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(), deptid);
if (null == flowTaskCompleteVO) { if (null == flowTaskCompleteVO) {
throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey); throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey);
@ -145,7 +152,7 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
} }
@Override @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; IFormCustomService iFormCustomService = null;
if (StringUtils.isNotBlank(servicename)) { if (StringUtils.isNotBlank(servicename)) {
@ -173,24 +180,24 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
try { try {
variables.put("businessKey", businessKey); variables.put("businessKey", businessKey);
//获取下一个节点 //获取下一个节点
UserTask userTask = this.flowTaskService.getNextTasks(procDefId); UserTask userTask = this.flowTaskService.getNextTasks(procDefId);
if(null != userTask){ if (null != userTask) {
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
// 会签节点 // 会签节点
if (Objects.nonNull(multiInstance)) { if (Objects.nonNull(multiInstance)) {
List<String> loginnames = flowTaskService.getAssignee(userTask,userName); List<String> loginnames = flowTaskService.getAssignee(userTask, userName);
if(null != loginnames && !loginnames.isEmpty()){ if (null != loginnames && !loginnames.isEmpty()) {
variables.put("persons",loginnames); variables.put("persons", loginnames);
} }
} }
} }
processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables);
if (null != iFormCustomService) { if (null != iFormCustomService) {
FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(),depti); FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId(), depti);
if (null == flowTaskCompleteVO) { if (null == flowTaskCompleteVO) {
throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey); throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey);

@ -48,6 +48,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.SneakyThrows;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.flowable.bpmn.constants.BpmnXMLConstants; import org.flowable.bpmn.constants.BpmnXMLConstants;
import org.flowable.bpmn.model.*; 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.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -122,6 +125,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
private OcrPrevailCloudLogService prevailCloudLogService; private OcrPrevailCloudLogService prevailCloudLogService;
@Resource @Resource
private PrevailCloudApi prevailCloudApi; private PrevailCloudApi prevailCloudApi;
@Autowired
private OcrContractorTaskService contractorTaskService;
@Override @Override
public void myTodoTaskList(PageUtils vo, HttpServletRequest request) { public void myTodoTaskList(PageUtils vo, HttpServletRequest request) {
@ -837,6 +842,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
* *
* @param processInstanceId * @param processInstanceId
*/ */
@SneakyThrows
public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId, String deptid) { public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId, String deptid) {
FlowTaskCompleteVO flowTaskCompleteVO = null; FlowTaskCompleteVO flowTaskCompleteVO = null;
@ -901,7 +907,30 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
List<String> candidateUsers = userTask.getCandidateUsers(); List<String> candidateUsers = userTask.getCandidateUsers();
if (null != candidateUsers && !candidateUsers.isEmpty()) { if (null != candidateUsers && !candidateUsers.isEmpty()) {
Random rand = new Random(); Random rand = new Random();
taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); OcrTaskchildPicture taskchildPicture = ocrTaskchildPictureService.getOne(new LambdaQueryWrapper<OcrTaskchildPicture>().eq(OcrTaskchildPicture::getProcessinstanceid, processInstanceId).eq(OcrTaskchildPicture::getProcessdefinitionid, processDefinitionId));
OcrPicture first = ocrPictureService.getOne(new LambdaQueryWrapper<OcrPicture>().eq(OcrPicture::getId, taskchildPicture.getPictureid()));
List<OcrContractorTask> contractorList = contractorTaskService.list(new LambdaQueryWrapper<OcrContractorTask>().eq(OcrContractorTask::getTenantId, taskchildPicture.getTenantid()));
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(contractorList)) {
Class<? extends OcrPicture> aClass = first.getClass();
Field field = aClass.getDeclaredField(contractorList.get(0).getField());
field.setAccessible(true);
String fieldValue = (String) field.get(first);
log.info("厂商名称------{}",fieldValue);
List<String> collect = contractorList.stream().filter(contractorTask -> contractorTask.getContractor().equals(fieldValue)).map(OcrContractorTask::getTaskUserAssignee).collect(Collectors.toList());
List<String> 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 @Override
public ResultVo repetitionTask(Integer type, String tenantId, Map<String, Object> query) { public ResultVo repetitionTask(Integer type, String tenantId, Map<String, Object> query) {
query.put("type",type); query.put("type", type);
List<RepeatedContentVo> repeatedContentVoList = flowableccMybatisDao.repetitionTaskNew(query); List<RepeatedContentVo> repeatedContentVoList = flowableccMybatisDao.repetitionTaskNew(query);
List<String> formIdsToUpdate = new ArrayList<>(); List<String> formIdsToUpdate = new ArrayList<>();
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(repeatedContentVoList)) { 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); ocrCheckDescribeHisService.saveOrUpdateBatch(checkDescribeHis);
UpdateWrapper<OcrTaskchildPicture> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<OcrTaskchildPicture> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("PICTUREID", formIdsToUpdate) updateWrapper.in("PICTUREID", formIdsToUpdate)

@ -10,7 +10,7 @@ import lombok.NoArgsConstructor;
/** /**
* ClassName $className$.java * ClassName $className$.java
* Description: * Description:
* Author scl. * Author scl.
* Date 2024/6/23 11:20 * Date 2024/6/23 11:20
*/ */
@ -51,4 +51,10 @@ public class OcrContractorTask {
*/ */
@TableField(value = "task_user_name") @TableField(value = "task_user_name")
private String taskUserName; private String taskUserName;
}
/**
*
*/
@TableField(value = "field")
private String field;
}

@ -228,22 +228,11 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
queryWrapper.in("ID", formid); queryWrapper.in("ID", formid);
List<OcrTaskchildPicture> list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper); List<OcrTaskchildPicture> list = this.ocrtaskchildpicturemybatisdao.selectList(queryWrapper);
List<OcrPicture> pictureList = ocrPictureService.listByIds(list.stream().map(OcrTaskchildPicture::getPictureid).collect(Collectors.toList())); List<OcrPicture> pictureList = ocrPictureService.listByIds(list.stream().map(OcrTaskchildPicture::getPictureid).collect(Collectors.toList()));
Map<Long, List<OcrPicture>> picMap = pictureList.stream().collect(Collectors.groupingBy(OcrPicture::getId));
//目前没有做其他信息返回,如果需要再做修改 //目前没有做其他信息返回,如果需要再做修改
for (OcrTaskchildPicture ocrTaskchildPicture : list) { 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<OcrContractorTask> contractorList = contractorTaskService.list(new LambdaQueryWrapper<OcrContractorTask>().eq(OcrContractorTask::getContractor, first.getField5()).eq(OcrContractorTask::getTenantId, ocrTaskchildPicture.getTenantid()));
if (CollectionUtils.isNotEmpty(contractorList)) {
List<String> 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_END
&& ocrTaskchildPicture.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE)) { && ocrTaskchildPicture.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE)) {
formIds.add(ocrTaskchildPicture.getId().toString()); formIds.add(ocrTaskchildPicture.getId().toString());

Loading…
Cancel
Save