From 84c1b0e221fcd945f69039773a8742ae6d0d075a Mon Sep 17 00:00:00 2001
From: sunchenliang <2532527871@qq.com>
Date: Sat, 16 Mar 2024 20:57:59 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E9=94=AE=E6=9F=A5?=
=?UTF-8?q?=E9=87=8D=E5=90=AF=E5=8A=A8=E6=B5=81=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jyjz-system/jyjz-system-oa/pom.xml | 4 +
.../controller/FlowTaskController.java | 16 +-
.../flowable/service/IFlowTaskService.java | 59 +-
.../service/impl/FlowInstanceServiceImpl.java | 159 +-
.../service/impl/FlowTaskServiceImpl.java | 8 +-
.../oa/from/dataDao/FlowableccMybatisDao.java | 2 +
.../ocr/service/OcrPictureService.java | 2 +
.../service/impl/OcrPictureServiceImpl.java | 1403 +++++++++--------
.../ocr/thread/tasks/PictureDownloadTask.java | 64 +-
.../resources/mapper/oa/FlowableccMapper.xml | 9 +
10 files changed, 973 insertions(+), 753 deletions(-)
diff --git a/jyjz-system/jyjz-system-oa/pom.xml b/jyjz-system/jyjz-system-oa/pom.xml
index 52f8e371..0107465e 100644
--- a/jyjz-system/jyjz-system-oa/pom.xml
+++ b/jyjz-system/jyjz-system-oa/pom.xml
@@ -120,6 +120,10 @@
lombok
${lombok.version}
+
+ org.springframework
+ spring-test
+
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 74353c65..1c26642a 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
@@ -295,7 +295,7 @@ public class FlowTaskController extends BaseController {
//如果assigneeId 为空查询发起流程,否则查询待办流程
if(StringUtils.isNotBlank(assigneeId) && assigneeId.equals(user.getId().toString())){
searchQuery.addEqual("assignee",user.getLoginname());
-// searchQuery.addEqual("states",SystemConstantsOa.OA_STATUS_TYPE_ING.toString());
+ searchQuery.addEqual("states",SystemConstantsOa.OA_STATUS_TYPE_ING.toString());
}else{
searchQuery.addEqual("createuser",user.getLoginname());
}
@@ -501,4 +501,18 @@ public class FlowTaskController extends BaseController {
//return ResultVoUtil.success();
}
+
+ /**
+ * 重复任务
+ * @return
+ */
+ @ApiOperation(value="重复流程", notes="重复流程")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true),
+ })
+ @GetMapping("/repetitionTask")
+ @ResponseBody
+ public ResultVo repetitionTask(HttpServletRequest request){
+ return flowTaskService.repetitionTask();
+ }
}
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 a93a4838..466e0295 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
@@ -27,12 +27,12 @@ public interface IFlowTaskService {
InputStream diagram(String processId);
- InputStream myDiagram(String processId,HttpServletRequest request);
-
+ InputStream myDiagram(String processId, HttpServletRequest request);
+
Category viewForm(String processId, HttpServletRequest request);
- Boolean complete(FlowTaskVO taskVO,HttpServletRequest request);
-
+ Boolean complete(FlowTaskVO taskVO, HttpServletRequest request);
+
/**
* 获取当前任务的可回退的流程集合
*
@@ -40,85 +40,106 @@ public interface IFlowTaskService {
* @return 可以回退的节点列表
*/
public List getReturnTaskList(String taskId);
-
+
/**
* 更新当前节点处理人信息
+ *
* @param
* @param processDefinition
*/
- public void updateAssignee(String processInstanceId,String processDefinitionId, ProcessDefinition processDefinition);
+ public void updateAssignee(String processInstanceId, String processDefinitionId, ProcessDefinition processDefinition);
+
+ void finishedList(PageUtils pageUtils, HttpServletRequest request);
- void finishedList(PageUtils pageUtils,HttpServletRequest request);
/**
* 查询我发起的流程实例
*
- * @param query 搜索条件
- * @param pageUtils 分页参数
+ * @param query 搜索条件
+ * @param pageUtils 分页参数
* @return
*/
- public void getMyProcessInstances( Map query, PageUtils pageUtils);
-
+ public void getMyProcessInstances(Map query, PageUtils pageUtils);
+
/**
* 查询最终审批数据
*
- * @param query 搜索条件
- * @param pageUtils 分页参数
+ * @param query 搜索条件
+ * @param pageUtils 分页参数
* @return
*/
- public void getFinalProcessInstances( Map query, PageUtils pageUtils);
-
+ public void getFinalProcessInstances(Map query, PageUtils pageUtils);
+
/**
* 查询我发起的流程实例
* 不做分类
+ *
* @param query 查询条件
* @return
*/
public List getMyProcessInstances(Map query);
+
/**
* 抄送给我的
*
* @return
*/
public IPage getMyListCc(Map query, UserToken userToken, ParamterPage paramterPage);
+
/**
* 查看任务的流程记录
+ *
* @return
*/
public List listHistoriceTask(String processInstanceId);
-
+
/**
* 获取当前活动节点列表
+ *
* @param processInstanceId 实例主键
* @return
*/
public List listTask(String processInstanceId);
+
/**
* 设置当前审批节点的审批人
* 目前只多候选组和多个候选人起作用
+ *
* @param processInstanceId
*/
public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId);
+
/**
* 查看当前执行人列表
+ *
* @param processInstanceId
* @return
*/
public List getApprovers(String processInstanceId);
-
+
/**
* 设置当前审批节点的
*/
public List nowRunTask(String processInstanceId, String processDefinitionId);
+
/**
* 撤销流程
+ *
* @param taskId
* @param reason
*/
public void cancelTask(String taskId, String reason);
-
+
/**
* 重置流程
+ *
* @param fromid 任务表主键
*/
- public ResultVo removeTask(String fromid,String taskid );
+ public ResultVo removeTask(String fromid, String taskid);
+
+ /**
+ * 查询重复流程
+ *
+ * @return
+ */
+ ResultVo repetitionTask();
}
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 df7d5aa6..58fc82d0 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
@@ -15,19 +15,14 @@ import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
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.framework.security.model.AdminUserModel;
-import cn.jyjz.xiaoyao.framework.security.service.FlowableUserLoginService;
import cn.jyjz.xiaoyao.oa.from.service.UserViewapproeService;
import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.*;
import org.flowable.engine.RepositoryService;
-import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.context.request.RequestContextHolder;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -48,148 +43,154 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
private IFlowTaskService flowTaskService;
@Resource
private UserViewapproeService userViewApproeService;
+
@Override
- public boolean startProcessInstanceById(String procDefId, Map variables, HttpServletRequest request,String formid,String servicename) {
-
+ public boolean startProcessInstanceById(String procDefId, Map variables, HttpServletRequest request, String formid, String servicename) {
+
IFormCustomService iFormCustomService = null;
- if(StringUtils.isNotBlank(servicename)){
+ if (StringUtils.isNotBlank(servicename)) {
iFormCustomService = SpringUtils.getBean(servicename);
}
-
- if(StringUtils.isBlank(formid) ){
+
+ if (StringUtils.isBlank(formid)) {
//表单主键
formid = iFormCustomService.saveForm(request);
}
-
- UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
-
-
- String userName = userToken.getLoginname();
+ String token = RequestBaseUtil.getToken(request);
+ String userName = "";
+ if (StringUtils.isBlank(token)) {
+ userName = "admin";
+ } else {
+ UserToken userToken = this.userTokenService.getUserToken(token);
+ userName = userToken.getLoginname();
+ }
// 绑定当前认证的账号 我们的认证系统如果使用的是 SpringSecurity的话,默认就会设置当前登录的账号
//identityService.setAuthenticatedUserId(userName);
- if(null == variables){
+ if (null == variables) {
variables = new HashMap<>();
}
- variables.put("loginUser",userName);
+ variables.put("loginUser", userName);
//根据流程定义信息
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
-
-
+
+
//业务key 用于待办已办 扩展字段 展示使用
//我这里以 流程定义key(oa_category_t定义的关键字,逻辑唯一) + 业务表主键(请假表、调岗表等) + 业务表对应的servicename
- String businessKey= userToken.getLoginname() + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT+ formid + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT+ servicename;
-
+ String businessKey = userName + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT + formid + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT + servicename;
+
ProcessInstance processInstance = null;
-
+
//启动了一个流程实例
try {
-
- variables.put("businessKey",businessKey);
- processInstance = runtimeService.startProcessInstanceById(procDefId,businessKey,variables) ;
-
- if(null != iFormCustomService){
- FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(),processInstance.getProcessDefinitionId());
-
- if(null == flowTaskCompleteVO){
+
+ variables.put("businessKey", businessKey);
+ processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables);
+
+ if (null != iFormCustomService) {
+ FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId());
+
+ if (null == flowTaskCompleteVO) {
throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey);
}
- List list = this.flowTaskService.nowRunTask(processInstance.getProcessInstanceId(),processInstance.getProcessDefinitionId());
+ List list = this.flowTaskService.nowRunTask(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId());
String taskname = "";
- if(null != list && !list.isEmpty()){
+ if (null != list && !list.isEmpty()) {
taskname = list.get(0).getName();
}
//保存instanceId到数据库,需要根据流程分类进行,判断更新
- boolean isupdate = iFormCustomService.updateForm(formid,processDefinition.getDeploymentId(),processDefinition.getId(),flowTaskCompleteVO.getAssignee(),flowTaskCompleteVO.getTaskId(),processInstance.getProcessInstanceId(),taskname);
- if(isupdate){
+ boolean isupdate = iFormCustomService.updateForm(formid, processDefinition.getDeploymentId(), processDefinition.getId(), flowTaskCompleteVO.getAssignee(), flowTaskCompleteVO.getTaskId(), processInstance.getProcessInstanceId(), taskname);
+ if (isupdate) {
FlowModelVO flowModelVO = iFormCustomService.getForm(formid);
//增加未查看记录
- userViewApproeService.saveUserViewApproe(flowTaskCompleteVO.getAssignee(),formid,flowModelVO.getTenantid().toString());
+ userViewApproeService.saveUserViewApproe(flowTaskCompleteVO.getAssignee(), formid, flowModelVO.getTenantid().toString());
}
-
+
}
-
- log.info("流程启动成功:procDefId:{}",procDefId);
+
+ log.info("流程启动成功:procDefId:{}", procDefId);
return true;
- }catch (Exception e){
- log.error("流程启动失败:procDefId:{}",procDefId);
- log.error("流程启动失败:e:{}",e);
-
+ } catch (Exception e) {
+ log.error("流程启动失败:procDefId:{}", procDefId);
+ log.error("流程启动失败:e:{}", e);
+
//删除流程
- if(null != processInstance){
+ if (null != processInstance) {
runtimeService.deleteProcessInstance(processInstance.getProcessInstanceId(), SystemMessage.SYS_OA_START_ERROR);
historyService.deleteHistoricProcessInstance(processInstance.getProcessInstanceId());
}
- if(StringUtils.isNotBlank(servicename) && StringUtils.isNotBlank(formid)){
+ if (StringUtils.isNotBlank(servicename) && StringUtils.isNotBlank(formid)) {
iFormCustomService.delForm(formid);
}
+ }finally {
+ RequestContextHolder.resetRequestAttributes();
}
return false;
}
-
+
@Override
- public boolean startProcessInstanceById(String procDefId, String userName,String createuser, String formid,String servicename) {
-
+ public boolean startProcessInstanceById(String procDefId, String userName, String createuser, String formid, String servicename) {
+
IFormCustomService iFormCustomService = null;
- if(StringUtils.isNotBlank(servicename)){
+ if (StringUtils.isNotBlank(servicename)) {
iFormCustomService = SpringUtils.getBean(servicename);
}
-
- if(StringUtils.isBlank(formid) ){
+
+ if (StringUtils.isBlank(formid)) {
//表单主键
return false;
}
Map variables = new HashMap<>();
- variables.put("loginUser",userName);
+ variables.put("loginUser", userName);
//根据流程定义信息
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
-
-
+
+
//业务key 用于待办已办 扩展字段 展示使用
//我这里以 流程定义key(oa_category_t定义的关键字,逻辑唯一) + 业务表主键(请假表、调岗表等) + 业务表对应的servicename
- String businessKey= createuser + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT+ formid + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT+ servicename;
-
+ String businessKey = createuser + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT + formid + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT + servicename;
+
ProcessInstance processInstance = null;
-
+
//启动了一个流程实例
try {
-
- variables.put("businessKey",businessKey);
- processInstance = runtimeService.startProcessInstanceById(procDefId,businessKey,variables) ;
-
- if(null != iFormCustomService){
- FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(),processInstance.getProcessDefinitionId());
-
- if(null == flowTaskCompleteVO){
+
+ variables.put("businessKey", businessKey);
+ processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables);
+
+ if (null != iFormCustomService) {
+ FlowTaskCompleteVO flowTaskCompleteVO = flowTaskService.updateNowTaskAssignee(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId());
+
+ if (null == flowTaskCompleteVO) {
throw new ServiceException("没有审批人,请联系管理员,流程定义:" + businessKey);
}
- List list = this.flowTaskService.nowRunTask(processInstance.getProcessInstanceId(),processInstance.getProcessDefinitionId());
+ List list = this.flowTaskService.nowRunTask(processInstance.getProcessInstanceId(), processInstance.getProcessDefinitionId());
String taskname = "";
- if(null != list && !list.isEmpty()){
+ if (null != list && !list.isEmpty()) {
taskname = list.get(0).getName();
}
//保存instanceId到数据库,需要根据流程分类进行,判断更新
- boolean isupdate = iFormCustomService.updateForm(formid,processDefinition.getDeploymentId(),processDefinition.getId(),flowTaskCompleteVO.getAssignee(),flowTaskCompleteVO.getTaskId(),processInstance.getProcessInstanceId(),taskname);
- if(isupdate){
+ boolean isupdate = iFormCustomService.updateForm(formid, processDefinition.getDeploymentId(), processDefinition.getId(), flowTaskCompleteVO.getAssignee(), flowTaskCompleteVO.getTaskId(), processInstance.getProcessInstanceId(), taskname);
+ if (isupdate) {
FlowModelVO flowModelVO = iFormCustomService.getForm(formid);
//增加未查看记录
- userViewApproeService.saveUserViewApproe(flowTaskCompleteVO.getAssignee(),formid,flowModelVO.getTenantid().toString());
+ userViewApproeService.saveUserViewApproe(flowTaskCompleteVO.getAssignee(), formid, flowModelVO.getTenantid().toString());
}
-
+
}
-
- log.info("流程启动成功:procDefId:{}",procDefId);
+
+ log.info("流程启动成功:procDefId:{}", procDefId);
return true;
- }catch (Exception e){
- log.error("流程启动失败:procDefId:{}",procDefId);
- log.error("流程启动失败:e:{}",e);
-
+ } catch (Exception e) {
+ log.error("流程启动失败:procDefId:{}", procDefId);
+ log.error("流程启动失败:e:{}", e);
+
//删除流程
- if(null != processInstance){
+ if (null != processInstance) {
runtimeService.deleteProcessInstance(processInstance.getProcessInstanceId(), SystemMessage.SYS_OA_START_ERROR);
historyService.deleteHistoricProcessInstance(processInstance.getProcessInstanceId());
}
- if(StringUtils.isNotBlank(servicename) && StringUtils.isNotBlank(formid)){
+ if (StringUtils.isNotBlank(servicename) && StringUtils.isNotBlank(formid)) {
iFormCustomService.delForm(formid);
}
}
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 45a7626a..5500bb2a 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
@@ -1122,6 +1122,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
HistoricTaskInstanceDto dto = new HistoricTaskInstanceDto();
dto.setTaskId(taskHiInstance.getId());
dto.setTaskName(taskHiInstance.getName());
+ flowUnionVo.setNodeName(taskHiInstance.getName());
dto.setFinishTime(taskHiInstance.getEndTime());
if(taskHiInstance.getDurationInMillis() != null){
dto.setDuration(taskHiInstance.getDurationInMillis()/1000 + "秒");
@@ -1457,5 +1458,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
return ResultVoUtil.success();
}
-
+
+ @Override
+ public ResultVo repetitionTask() {
+ return ResultVoUtil.success(flowableccMybatisDao.repetitionTask());
+ }
+
}
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 eff86359..fbbce38c 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
@@ -35,4 +35,6 @@ public interface FlowableccMybatisDao extends BaseMapper {
* @return
*/
List selectUserByFromid(String fromid);
+
+ List