Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
workflow
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
2
议题
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
黄夏豪
workflow
Commits
7e9c9a9b
提交
7e9c9a9b
authored
5月 10, 2021
作者:
黄夏豪
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[工作流模块] 修复了 MapUtil工具合并出现线程不安全的问题
上级
bd829f52
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
104 行增加
和
34 行删除
+104
-34
pom.xml
pom.xml
+8
-8
WorkflowCoreApplication.java
...n/java/com/tykj/workflowcore/WorkflowCoreApplication.java
+1
-2
ApiService.java
...in/java/com/tykj/workflowcore/api/service/ApiService.java
+22
-3
SpringBeanService.java
.../com/tykj/workflowcore/api/service/SpringBeanService.java
+17
-0
WebMvcConfig.java
.../java/com/tykj/workflowcore/base/config/WebMvcConfig.java
+0
-2
WorkflowCoreRunner.java
...com/tykj/workflowcore/base/config/WorkflowCoreRunner.java
+0
-3
WorkFlowController.java
...owcore/workflow_editer/controller/WorkFlowController.java
+9
-1
WorkFlowUser.java
...ykj/workflowcore/workflow_editer/entity/WorkFlowUser.java
+1
-0
ProcessEndListener.java
...flowcore/workflow_editer/listener/ProcessEndListener.java
+3
-2
WorkFlowService.java
...workflowcore/workflow_editer/service/WorkFlowService.java
+4
-0
WorkFlowServiceImpl.java
...ore/workflow_editer/service/impl/WorkFlowServiceImpl.java
+12
-10
MapUtils.java
.../com/tykj/workflowcore/workflow_editer/util/MapUtils.java
+24
-0
application.yml
src/main/resources/application.yml
+1
-1
index.html
src/main/resources/workflow/index.html
+2
-2
没有找到文件。
pom.xml
浏览文件 @
7e9c9a9b
...
@@ -124,16 +124,16 @@
...
@@ -124,16 +124,16 @@
<!-- </excludes>-->
<!-- </excludes>-->
<!-- <filtering>false</filtering>-->
<!-- <filtering>false</filtering>-->
<!-- </resource>-->
<!-- </resource>-->
<!-- <resource>--
>
<resource
>
<!-- <directory>${project.basedir}/src/main/resources</directory>--
>
<directory>
${project.basedir}/src/main/resources
</directory
>
<!-- <targetPath>META-INF/resources/</targetPath>--
>
<targetPath>
META-INF/resources/
</targetPath
>
<!-- </resource>--
>
</resource
>
</resources>
</resources>
<plugins>
<plugins>
<plugin
>
<!-- <plugin>--
>
<groupId>
org.springframework.boot
</groupId
>
<!-- <groupId>org.springframework.boot</groupId>--
>
<artifactId>
spring-boot-maven-plugin
</artifactId
>
<!-- <artifactId>spring-boot-maven-plugin</artifactId>--
>
</plugin
>
<!-- </plugin>--
>
<plugin>
<plugin>
<artifactId>
maven-surefire-plugin
</artifactId>
<artifactId>
maven-surefire-plugin
</artifactId>
...
...
src/main/java/com/tykj/workflowcore/WorkflowCoreApplication.java
浏览文件 @
7e9c9a9b
...
@@ -2,6 +2,7 @@ package com.tykj.workflowcore;
...
@@ -2,6 +2,7 @@ package com.tykj.workflowcore;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
/**
/**
...
@@ -13,8 +14,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
...
@@ -13,8 +14,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
public
class
WorkflowCoreApplication
{
public
class
WorkflowCoreApplication
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
WorkflowCoreApplication
.
class
,
args
);
SpringApplication
.
run
(
WorkflowCoreApplication
.
class
,
args
);
System
.
out
.
println
(
System
.
out
.
println
(
"█▀▀▀▀▀▀▀█▀▀▀█▀▀▀█▀▀▀█▀█▀▀▀▀▀▀▀█\n"
+
"█▀▀▀▀▀▀▀█▀▀▀█▀▀▀█▀▀▀█▀█▀▀▀▀▀▀▀█\n"
+
...
...
src/main/java/com/tykj/workflowcore/api/service/ApiService.java
浏览文件 @
7e9c9a9b
package
com
.
tykj
.
workflowcore
.
api
.
service
;
package
com
.
tykj
.
workflowcore
.
api
.
service
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.tykj.workflowcore.api.annotations.Callable
;
import
com.tykj.workflowcore.api.annotations.Callable
;
import
com.tykj.workflowcore.api.annotations.CallableApi
;
import
com.tykj.workflowcore.api.annotations.CallableApi
;
import
com.tykj.workflowcore.api.entity.ApiInfo
;
import
com.tykj.workflowcore.api.entity.ApiInfo
;
import
com.tykj.workflowcore.api.entity.EntityInfo
;
import
com.tykj.workflowcore.api.entity.EntityInfo
;
import
com.tykj.workflowcore.api.entity.Parameter
;
import
com.tykj.workflowcore.api.entity.Parameter
;
import
com.tykj.workflowcore.base.result.ApiException
;
import
com.tykj.workflowcore.base.util.ClassUtil
;
import
com.tykj.workflowcore.base.util.ClassUtil
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
...
@@ -28,6 +31,8 @@ public class ApiService {
...
@@ -28,6 +31,8 @@ public class ApiService {
private
final
SpringBeanService
springBeanService
;
private
final
SpringBeanService
springBeanService
;
private
static
ObjectMapper
objectMapper
=
new
ObjectMapper
();
public
ApiService
(
SpringBeanService
springBeanService
)
{
public
ApiService
(
SpringBeanService
springBeanService
)
{
this
.
springBeanService
=
springBeanService
;
this
.
springBeanService
=
springBeanService
;
}
}
...
@@ -138,7 +143,12 @@ public class ApiService {
...
@@ -138,7 +143,12 @@ public class ApiService {
.
map
(
this
::
getClass
)
.
map
(
this
::
getClass
)
.
toArray
(
Class
[]::
new
);
.
toArray
(
Class
[]::
new
);
Method
method
=
clz
.
getMethod
(
apiName
,
parameterTypes
);
Method
method
=
clz
.
getMethod
(
apiName
,
parameterTypes
);
Object
bean
=
springBeanService
.
getBean
(
clz
);
Object
bean
=
null
;
try
{
bean
=
springBeanService
.
getBean
(
clz
);
}
catch
(
Exception
e
){
bean
=
springBeanService
.
getBeanByClassName
(
clz
.
getName
());
}
Object
[]
params
=
parameters
.
stream
()
Object
[]
params
=
parameters
.
stream
()
.
map
(
parameter
->
toBean
(
parameter
.
getInstance
(),
getClass
(
parameter
.
getClassName
())))
.
map
(
parameter
->
toBean
(
parameter
.
getInstance
(),
getClass
(
parameter
.
getClassName
())))
.
toArray
();
.
toArray
();
...
@@ -161,8 +171,16 @@ public class ApiService {
...
@@ -161,8 +171,16 @@ public class ApiService {
/**
/**
* 把map转成指定类型的JavaBean对象
* 把map转成指定类型的JavaBean对象
*/
*/
public
static
<
T
>
T
toBean
(
Object
o
,
Class
<
T
>
clazz
)
{
public
static
<
T
>
T
toBean
(
Object
o
,
Class
<
T
>
clazz
)
{
return
JSON
.
parseObject
(
JSON
.
toJSONString
(
o
),
clazz
);
T
t
=
null
;
try
{
t
=
objectMapper
.
readValue
(
JSON
.
toJSONString
(
o
),
clazz
);
}
catch
(
JsonProcessingException
e
)
{
e
.
printStackTrace
();
throw
new
ApiException
(
"填充入参失败,json转换时发生错误"
);
}
return
t
;
}
}
}
}
\ No newline at end of file
src/main/java/com/tykj/workflowcore/api/service/SpringBeanService.java
浏览文件 @
7e9c9a9b
package
com
.
tykj
.
workflowcore
.
api
.
service
;
package
com
.
tykj
.
workflowcore
.
api
.
service
;
import
com.tykj.workflowcore.api.controller.ApiController
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.StringUtils
;
import
java.util.Locale
;
import
static
java
.
util
.
Objects
.
isNull
;
import
static
java
.
util
.
Objects
.
isNull
;
...
@@ -26,6 +30,19 @@ public class SpringBeanService implements ApplicationContextAware {
...
@@ -26,6 +30,19 @@ public class SpringBeanService implements ApplicationContextAware {
return
this
.
applicationContext
;
return
this
.
applicationContext
;
}
}
/**
* 通过name获取 Bean.
*/
public
Object
getBeanByClassName
(
String
className
){
if
(
StringUtils
.
isEmpty
(
className
)){
return
null
;
}
int
lastPoint
=
className
.
lastIndexOf
(
"."
);
className
=
className
.
substring
(
lastPoint
+
1
);
className
=
className
.
substring
(
0
,
1
).
toLowerCase
(
Locale
.
ROOT
)+
className
.
substring
(
1
);
return
getApplicationContext
().
getBean
(
className
);
}
/**
/**
* 通过name获取 Bean.
* 通过name获取 Bean.
*/
*/
...
...
src/main/java/com/tykj/workflowcore/base/config/WebMvcConfig.java
浏览文件 @
7e9c9a9b
...
@@ -39,8 +39,6 @@ public class WebMvcConfig {
...
@@ -39,8 +39,6 @@ public class WebMvcConfig {
registry
.
addResourceHandler
(
"/xml/**"
)
registry
.
addResourceHandler
(
"/xml/**"
)
.
addResourceLocations
(
"file:"
+
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
"xml"
+
File
.
separator
);
.
addResourceLocations
(
"file:"
+
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
"xml"
+
File
.
separator
);
// .addResourceLocations("file:" + System.getProperty("user.dir") + "\\xml\\");
// .addResourceLocations("file:" + System.getProperty("user.dir") + "\\xml\\");
registry
.
addResourceHandler
(
"/**"
)
.
addResourceLocations
(
"classpath:/workflow/"
);
}
}
};
};
}
}
...
...
src/main/java/com/tykj/workflowcore/base/config/WorkflowCoreRunner.java
浏览文件 @
7e9c9a9b
...
@@ -41,9 +41,6 @@ public class WorkflowCoreRunner implements CommandLineRunner {
...
@@ -41,9 +41,6 @@ public class WorkflowCoreRunner implements CommandLineRunner {
@Autowired
@Autowired
RuntimeService
runtimeService
;
RuntimeService
runtimeService
;
@Autowired
ProcessEndListener
processEndListener
;
@Bean
@Bean
ClassLoader
initClassLoader
(){
ClassLoader
initClassLoader
(){
return
getClass
().
getClassLoader
();
return
getClass
().
getClassLoader
();
...
...
src/main/java/com/tykj/workflowcore/workflow_editer/controller/WorkFlowController.java
浏览文件 @
7e9c9a9b
package
com
.
tykj
.
workflowcore
.
workflow_editer
.
controller
;
package
com
.
tykj
.
workflowcore
.
workflow_editer
.
controller
;
import
com.tykj.workflowcore.base.result.ResultUtil
;
import
com.tykj.workflowcore.base.result.ResultUtil
;
import
com.tykj.workflowcore.workflow_editer.entity.WorkFlowUser
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.*
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.*
;
import
com.tykj.workflowcore.workflow_editer.service.FlowInfoService
;
import
com.tykj.workflowcore.workflow_editer.service.FlowInfoService
;
import
com.tykj.workflowcore.workflow_editer.service.WorkFlowService
;
import
com.tykj.workflowcore.workflow_editer.service.WorkFlowService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.flowable.engine.history.HistoricActivityInstance
;
import
org.flowable.engine.history.HistoricProcessInstance
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
@@ -98,6 +101,11 @@ public class WorkFlowController {
...
@@ -98,6 +101,11 @@ public class WorkFlowController {
return
workFlowService
.
findHistoryTask
();
return
workFlowService
.
findHistoryTask
();
}
}
@GetMapping
(
"/findStartByUser"
)
@ApiOperation
(
"查询我发起的流程"
)
public
List
<
HistoricProcessInstance
>
findStartByUser
(
String
userId
)
{
List
<
HistoricProcessInstance
>
startByUser
=
workFlowService
.
findStartByUser
(
userId
);
return
startByUser
;
}
}
}
src/main/java/com/tykj/workflowcore/workflow_editer/entity/WorkFlowUser.java
浏览文件 @
7e9c9a9b
...
@@ -29,4 +29,5 @@ public class WorkFlowUser implements Serializable {
...
@@ -29,4 +29,5 @@ public class WorkFlowUser implements Serializable {
private
String
userName
;
private
String
userName
;
}
}
src/main/java/com/tykj/workflowcore/workflow_editer/listener/ProcessEndListener.java
浏览文件 @
7e9c9a9b
...
@@ -4,13 +4,14 @@ import com.tykj.workflowcore.api.controller.ApiController;
...
@@ -4,13 +4,14 @@ import com.tykj.workflowcore.api.controller.ApiController;
import
com.tykj.workflowcore.api.entity.InvokeRequest
;
import
com.tykj.workflowcore.api.entity.InvokeRequest
;
import
com.tykj.workflowcore.api.entity.Parameter
;
import
com.tykj.workflowcore.api.entity.Parameter
;
import
com.tykj.workflowcore.base.result.ApiException
;
import
com.tykj.workflowcore.base.result.ApiException
;
import
com.tykj.workflowcore.workflow_editer.entity.JavaTypeEnum
;
import
com.tykj.workflowcore.workflow_editer.entity.
enums.
JavaTypeEnum
;
import
com.tykj.workflowcore.workflow_editer.entity.VariableStorage
;
import
com.tykj.workflowcore.workflow_editer.entity.VariableStorage
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.ParameterVo
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.ParameterVo
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.SearchVariableStorageVo
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.SearchVariableStorageVo
;
import
com.tykj.workflowcore.workflow_editer.service.DataHistoryService
;
import
com.tykj.workflowcore.workflow_editer.service.DataHistoryService
;
import
com.tykj.workflowcore.workflow_editer.service.VariableStorageService
;
import
com.tykj.workflowcore.workflow_editer.service.VariableStorageService
;
import
org.flowable.bpmn.model.EndEvent
;
import
org.flowable.bpmn.model.EndEvent
;
import
org.flowable.bpmn.model.UserTask
;
import
org.flowable.common.engine.api.delegate.Expression
;
import
org.flowable.common.engine.api.delegate.Expression
;
import
org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEvent
;
...
@@ -79,7 +80,7 @@ public class ProcessEndListener extends AbstractFlowableEngineEventListener {
...
@@ -79,7 +80,7 @@ public class ProcessEndListener extends AbstractFlowableEngineEventListener {
super
.
activityCompleted
(
event
);
super
.
activityCompleted
(
event
);
if
(
event
instanceof
FlowableActivityEventImpl
){
if
(
event
instanceof
FlowableActivityEventImpl
){
DelegateExecution
execution
=
((
FlowableActivityEventImpl
)
event
).
getExecution
();
DelegateExecution
execution
=
((
FlowableActivityEventImpl
)
event
).
getExecution
();
if
(
execution
.
getCurrentFlowElement
()
instanceof
EndEvent
){
if
(
execution
.
getCurrentFlowElement
()
instanceof
EndEvent
||
execution
.
getCurrentFlowElement
()
instanceof
UserTask
){
System
.
out
.
println
(
"流程结束了"
);
System
.
out
.
println
(
"流程结束了"
);
//拿到流程定义ID
//拿到流程定义ID
String
processDefinitionId
=
execution
.
getProcessDefinitionId
();
String
processDefinitionId
=
execution
.
getProcessDefinitionId
();
...
...
src/main/java/com/tykj/workflowcore/workflow_editer/service/WorkFlowService.java
浏览文件 @
7e9c9a9b
...
@@ -2,6 +2,7 @@ package com.tykj.workflowcore.workflow_editer.service;
...
@@ -2,6 +2,7 @@ package com.tykj.workflowcore.workflow_editer.service;
import
com.tykj.workflowcore.workflow_editer.entity.FlowsInfo
;
import
com.tykj.workflowcore.workflow_editer.entity.FlowsInfo
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.*
;
import
com.tykj.workflowcore.workflow_editer.entity.vo.*
;
import
org.flowable.engine.history.HistoricProcessInstance
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
...
@@ -156,5 +157,8 @@ public interface WorkFlowService {
...
@@ -156,5 +157,8 @@ public interface WorkFlowService {
String
getCurrentProcId
(
String
taskId
);
String
getCurrentProcId
(
String
taskId
);
List
<
HistoricProcessInstance
>
findStartByUser
(
String
userId
);
}
}
src/main/java/com/tykj/workflowcore/workflow_editer/service/impl/WorkFlowServiceImpl.java
浏览文件 @
7e9c9a9b
...
@@ -20,6 +20,7 @@ import org.flowable.bpmn.model.*;
...
@@ -20,6 +20,7 @@ import org.flowable.bpmn.model.*;
import
org.flowable.bpmn.model.Process
;
import
org.flowable.bpmn.model.Process
;
import
org.flowable.common.engine.impl.identity.Authentication
;
import
org.flowable.common.engine.impl.identity.Authentication
;
import
org.flowable.engine.*
;
import
org.flowable.engine.*
;
import
org.flowable.engine.history.HistoricProcessInstance
;
import
org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl
;
import
org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl
;
import
org.flowable.engine.repository.Deployment
;
import
org.flowable.engine.repository.Deployment
;
import
org.flowable.engine.runtime.ProcessInstance
;
import
org.flowable.engine.runtime.ProcessInstance
;
...
@@ -313,9 +314,9 @@ public class WorkFlowServiceImpl implements WorkFlowService {
...
@@ -313,9 +314,9 @@ public class WorkFlowServiceImpl implements WorkFlowService {
public
void
startFlow
(
@RequestBody
StartFlowVo
startFlowVo
)
{
public
void
startFlow
(
@RequestBody
StartFlowVo
startFlowVo
)
{
//设置流程发起人
//设置流程发起人
WorkFlowUser
currentUser
=
userService
.
getCurrentUser
();
WorkFlowUser
currentUser
=
userService
.
getCurrentUser
();
Authentication
.
setAuthenticatedUserId
(
currentUser
.
getId
()
+
""
);
ProcessInstance
processInstance
=
runtimeService
.
startProcessInstanceByKey
(
startFlowVo
.
getFlowKey
(),
currentUser
.
getId
(),
ProcessInstance
processInstance
=
runtimeService
.
startProcessInstanceByKey
(
startFlowVo
.
getFlowKey
(),
startFlowVo
.
getFlowKey
(),
startFlowVo
.
getMap
());
startFlowVo
.
getMap
());
// 存储流程实例id
// 存储流程实例id
// 根据flowKey查询出一个FlowInfo
// 根据flowKey查询出一个FlowInfo
// FlowsInfo flowsInfo = flowsInfoMapper.findByFlowKey(startFlowVo.getFlowKey());
// FlowsInfo flowsInfo = flowsInfoMapper.findByFlowKey(startFlowVo.getFlowKey());
...
@@ -431,8 +432,6 @@ public class WorkFlowServiceImpl implements WorkFlowService {
...
@@ -431,8 +432,6 @@ public class WorkFlowServiceImpl implements WorkFlowService {
//归还
//归还
taskService
.
setAssignee
(
task
.
getId
(),
null
);
taskService
.
setAssignee
(
task
.
getId
(),
null
);
}
}
}
}
@Override
@Override
...
@@ -540,7 +539,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
...
@@ -540,7 +539,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
// List<HistoricTaskInstance> taskInstanceList =
// List<HistoricTaskInstance> taskInstanceList =
// historyService.createHistoricTaskInstanceQuery().taskCandidateUser(userId).finished().list();
// historyService.createHistoricTaskInstanceQuery().taskCandidateUser(userId).finished().list();
List
<
HistoricTaskInstance
>
taskInstanceList
=
List
<
HistoricTaskInstance
>
taskInstanceList
=
historyService
.
createHistoricTaskInstanceQuery
().
taskAssignee
(
userService
.
getCurrentUser
().
getId
()+
""
).
orderBy
TaskCreate
Time
().
desc
().
list
();
historyService
.
createHistoricTaskInstanceQuery
().
taskAssignee
(
userService
.
getCurrentUser
().
getId
()+
""
).
orderBy
HistoricTaskInstanceStart
Time
().
desc
().
list
();
ArrayList
<
Object
>
arrayList
=
new
ArrayList
<>();
ArrayList
<
Object
>
arrayList
=
new
ArrayList
<>();
arrayList
.
addAll
(
taskInstanceList
);
arrayList
.
addAll
(
taskInstanceList
);
return
arrayList
;
return
arrayList
;
...
@@ -562,6 +561,14 @@ public class WorkFlowServiceImpl implements WorkFlowService {
...
@@ -562,6 +561,14 @@ public class WorkFlowServiceImpl implements WorkFlowService {
return
null
;
return
null
;
}
}
@Override
public
List
<
HistoricProcessInstance
>
findStartByUser
(
String
userId
)
{
//先获取流程的businesskey
List
<
HistoricProcessInstance
>
historicProcessInstances
=
historyService
.
createHistoricProcessInstanceQuery
().
processInstanceBusinessKey
(
userId
).
list
();
return
historicProcessInstances
;
}
@Override
@Override
public
Map
<
String
,
Object
>
setVariables
(
@RequestBody
Map
<
String
,
Object
>
maxMap
)
{
public
Map
<
String
,
Object
>
setVariables
(
@RequestBody
Map
<
String
,
Object
>
maxMap
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
...
@@ -569,9 +576,4 @@ public class WorkFlowServiceImpl implements WorkFlowService {
...
@@ -569,9 +576,4 @@ public class WorkFlowServiceImpl implements WorkFlowService {
return
map
;
return
map
;
}
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"1"
);
}
}
}
src/main/java/com/tykj/workflowcore/workflow_editer/util/MapUtils.java
浏览文件 @
7e9c9a9b
...
@@ -2,8 +2,10 @@ package com.tykj.workflowcore.workflow_editer.util;
...
@@ -2,8 +2,10 @@ package com.tykj.workflowcore.workflow_editer.util;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
/**
* ClassName: MapUtils
* ClassName: MapUtils
...
@@ -14,6 +16,21 @@ import java.util.Set;
...
@@ -14,6 +16,21 @@ import java.util.Set;
* @Author: zsp
* @Author: zsp
*/
*/
public
class
MapUtils
{
public
class
MapUtils
{
public
static
void
main
(
String
[]
args
)
{
ConcurrentHashMap
concurrentHashMap1
=
new
ConcurrentHashMap
();
ConcurrentHashMap
concurrentHashMap2
=
new
ConcurrentHashMap
();
LinkedHashMap
linkedHashMapa
=
new
LinkedHashMap
();
LinkedHashMap
linkedHashMapb
=
new
LinkedHashMap
();
linkedHashMapa
.
put
(
"b"
,
"a"
);
linkedHashMapb
.
put
(
"c"
,
"a"
);
concurrentHashMap1
.
put
(
"a"
,
linkedHashMapa
);
concurrentHashMap2
.
put
(
"a"
,
linkedHashMapb
);
loopMap
(
concurrentHashMap1
,
""
,
concurrentHashMap2
);
System
.
out
.
println
(
"1"
);
}
public
static
void
loopMap
(
Map
m1
,
String
p
,
Map
m2
)
{
public
static
void
loopMap
(
Map
m1
,
String
p
,
Map
m2
)
{
m1
.
forEach
((
key
,
value
)
->
{
m1
.
forEach
((
key
,
value
)
->
{
Set
mapKeySetByPath
=
getMapKeySetByPath
(
m2
,
p
+
"."
+
key
);
Set
mapKeySetByPath
=
getMapKeySetByPath
(
m2
,
p
+
"."
+
key
);
...
@@ -27,6 +44,13 @@ public class MapUtils {
...
@@ -27,6 +44,13 @@ public class MapUtils {
});
});
}
}
if
(
value
instanceof
Map
)
{
if
(
value
instanceof
Map
)
{
//转为ConcurrentMap不然合并的时候回出错
if
(!(
value
instanceof
ConcurrentHashMap
)){
ConcurrentHashMap
concurrentHashMapValue
=
new
ConcurrentHashMap
();
concurrentHashMapValue
.
putAll
((
Map
)
value
);
value
=
concurrentHashMapValue
;
m1
.
put
(
key
,
value
);
}
String
path
;
String
path
;
if
(
StringUtils
.
isEmpty
(
p
))
{
if
(
StringUtils
.
isEmpty
(
p
))
{
path
=
(
String
)
key
;
path
=
(
String
)
key
;
...
...
src/main/resources/application.yml
浏览文件 @
7e9c9a9b
...
@@ -2,7 +2,7 @@ spring:
...
@@ -2,7 +2,7 @@ spring:
datasource
:
datasource
:
username
:
root
username
:
root
password
:
Huang123+
password
:
Huang123+
url
:
jdbc:mysql://47.106.142.73:3306/www
3
?useSSL=false&serverTimezone=GMT%2b8&characterEncoding=utf-8&nullCatalogMeansCurrent=true
url
:
jdbc:mysql://47.106.142.73:3306/www
_hxh
?useSSL=false&serverTimezone=GMT%2b8&characterEncoding=utf-8&nullCatalogMeansCurrent=true
driver-class-name
:
com.mysql.cj.jdbc.Driver
driver-class-name
:
com.mysql.cj.jdbc.Driver
jpa
:
jpa
:
show-sql
:
true
show-sql
:
true
...
...
src/main/resources/workflow/index.html
浏览文件 @
7e9c9a9b
<!doctype html>
<html
lang=
"zh"
><head><meta
charset=
"utf-8"
><meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
><meta
name=
"viewport"
content=
"width=device-width,initial-scale=0,maximum-scale=0,user-scalable=yes,shrink-to-fit=no"
><link
rel=
"icon"
href=
"favicon.ico"
><title>
workFlow
</title><style>
.pre-loader
{
position
:
absolute
;
top
:
calc
(
50%
-
32px
);
left
:
calc
(
50%
-
32px
);
width
:
64px
;
height
:
64px
;
border-radius
:
50%
;
perspective
:
800px
}
.pre-loader
.inner
{
position
:
absolute
;
box-sizing
:
border-box
;
width
:
100%
;
height
:
100%
;
border-radius
:
50%
}
.pre-loader
.inner.one
{
left
:
0
;
top
:
0
;
-webkit-animation
:
rotate-one
1s
linear
infinite
;
animation
:
rotate-one
1s
linear
infinite
;
border-bottom
:
3px
solid
#bc9048
}
.pre-loader
.inner.two
{
right
:
0
;
top
:
0
;
-webkit-animation
:
rotate-two
1s
linear
infinite
;
animation
:
rotate-two
1s
linear
infinite
;
border-right
:
3px
solid
#74aeff
}
.pre-loader
.inner.three
{
right
:
0
;
bottom
:
0
;
-webkit-animation
:
rotate-three
1s
linear
infinite
;
animation
:
rotate-three
1s
linear
infinite
;
border-top
:
3px
solid
#caef74
}
@keyframes
rotate-one
{
0
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
0
);
transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
0
)}
100
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
360deg
);
transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
360deg
)}}
@keyframes
rotate-two
{
0
%
{
-webkit-transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
0
);
transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
0
)}
100
%
{
-webkit-transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
360deg
);
transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
360deg
)}}
@keyframes
rotate-three
{
0
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
0
);
transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
0
)}
100
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
360deg
);
transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
360deg
)}}
</style><link
href=
"https://lib.baomitu.com/element-ui/2.13.2/theme-chalk/index.css"
rel=
"stylesheet"
><link
href=
"https://lib.baomitu.com/monaco-editor/0.19.3/min/vs/editor/editor.main.css"
rel=
"stylesheet"
><script
src=
"https://lib.baomitu.com/vue/2.6.11/vue.min.js"
></script><script
src=
"https://lib.baomitu.com/vue-router/3.1.3/vue-router.min.js"
></script><script
src=
"https://lib.baomitu.com/element-ui/2.13.2/index.js"
></script><link
href=
"css/chunk-3490531b.f21179c2.css"
rel=
"prefetch"
><link
href=
"css/chunk-61bf0148.dfa0bf94.css"
rel=
"prefetch"
><link
href=
"css/chunk-79a2a6d4.f7ea5f40.css"
rel=
"prefetch"
><link
href=
"css/chunk-7c52297c.61b80532.css"
rel=
"prefetch"
><link
href=
"css/chunk-8214a130.1828ab11.css"
rel=
"prefetch"
><link
href=
"css/chunk-b5da06ba.7a6ae39b.css"
rel=
"prefetch"
><link
href=
"css/chunk-d7adda04.ef613c84.css"
rel=
"prefetch"
><link
href=
"css/parser-home.137a6b9f.css"
rel=
"prefetch"
><link
href=
"css/tinymce-example.0e433876.css"
rel=
"prefetch"
><link
href=
"js/chunk-3490531b.dccf3627.js"
rel=
"prefetch"
><link
href=
"js/chunk-61bf0148.806d1258.js"
rel=
"prefetch"
><link
href=
"js/chunk-79a2a6d4.b1d5b12d.js"
rel=
"prefetch"
><link
href=
"js/chunk-7c52297c.c0a80b51.js"
rel=
"prefetch"
><link
href=
"js/chunk-8214a130.971aff55.js"
rel=
"prefetch"
><link
href=
"js/chunk-b5da06ba.6d3fd328.js"
rel=
"prefetch"
><link
href=
"js/chunk-d7adda04.cddad5a4.js"
rel=
"prefetch"
><link
href=
"js/chunk-fec0be80.0583a8a1.js"
rel=
"prefetch"
><link
href=
"js/parser-home.8d475fe7.js"
rel=
"prefetch"
><link
href=
"js/tinymce-example.0cafa1e6.js"
rel=
"prefetch"
><link
href=
"css/index.b75d9c3c.css"
rel=
"preload"
as=
"style"
><link
href=
"js/chunk-vendors.b6d9e7af.js"
rel=
"preload"
as=
"script"
><link
href=
"js/index.c1637e00.js"
rel=
"preload"
as=
"script"
><link
href=
"css/index.b75d9c3c.css"
rel=
"stylesheet"
></head><body><noscript><strong>
抱歉,javascript被禁用,请开启后重试。
</strong></noscript><div
id=
"app"
></div><div
class=
"pre-loader"
id=
"pre-loader"
><div
class=
"inner one"
></div><div
class=
"inner two"
></div><div
class=
"inner three"
></div></div><script
src=
"js/chunk-vendors.b6d9e7af.js"
></script><script
src=
"js/index.c1637e00.js"
></script></body></html>
<!doctype html>
<html
lang=
"zh"
><head><meta
charset=
"utf-8"
><meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
><meta
name=
"viewport"
content=
"width=device-width,initial-scale=0,maximum-scale=0,user-scalable=yes,shrink-to-fit=no"
><link
rel=
"icon"
href=
"favicon.ico"
><title>
form-generator
</title><style>
.pre-loader
{
position
:
absolute
;
top
:
calc
(
50%
-
32px
);
left
:
calc
(
50%
-
32px
);
width
:
64px
;
height
:
64px
;
border-radius
:
50%
;
perspective
:
800px
}
.pre-loader
.inner
{
position
:
absolute
;
box-sizing
:
border-box
;
width
:
100%
;
height
:
100%
;
border-radius
:
50%
}
.pre-loader
.inner.one
{
left
:
0
;
top
:
0
;
-webkit-animation
:
rotate-one
1s
linear
infinite
;
animation
:
rotate-one
1s
linear
infinite
;
border-bottom
:
3px
solid
#bc9048
}
.pre-loader
.inner.two
{
right
:
0
;
top
:
0
;
-webkit-animation
:
rotate-two
1s
linear
infinite
;
animation
:
rotate-two
1s
linear
infinite
;
border-right
:
3px
solid
#74aeff
}
.pre-loader
.inner.three
{
right
:
0
;
bottom
:
0
;
-webkit-animation
:
rotate-three
1s
linear
infinite
;
animation
:
rotate-three
1s
linear
infinite
;
border-top
:
3px
solid
#caef74
}
@keyframes
rotate-one
{
0
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
0
);
transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
0
)}
100
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
360deg
);
transform
:
rotateX
(
35deg
)
rotateY
(
-45deg
)
rotateZ
(
360deg
)}}
@keyframes
rotate-two
{
0
%
{
-webkit-transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
0
);
transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
0
)}
100
%
{
-webkit-transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
360deg
);
transform
:
rotateX
(
50deg
)
rotateY
(
10deg
)
rotateZ
(
360deg
)}}
@keyframes
rotate-three
{
0
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
0
);
transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
0
)}
100
%
{
-webkit-transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
360deg
);
transform
:
rotateX
(
35deg
)
rotateY
(
55deg
)
rotateZ
(
360deg
)}}
</style><link
href=
"https://lib.baomitu.com/element-ui/2.13.2/theme-chalk/index.css"
rel=
"stylesheet"
><link
href=
"https://lib.baomitu.com/monaco-editor/0.19.3/min/vs/editor/editor.main.css"
rel=
"stylesheet"
><script
src=
"https://lib.baomitu.com/vue/2.6.11/vue.min.js"
></script><script
src=
"https://lib.baomitu.com/vue-router/3.1.3/vue-router.min.js"
></script><script
src=
"https://lib.baomitu.com/element-ui/2.13.2/index.js"
></script><link
href=
"css/chunk-1cb74270.df914389.css"
rel=
"prefetch"
><link
href=
"css/chunk-2073d156.c465d3db.css"
rel=
"prefetch"
><link
href=
"css/chunk-7c2866c4.7b2248cd.css"
rel=
"prefetch"
><link
href=
"css/chunk-7c52297c.61b80532.css"
rel=
"prefetch"
><link
href=
"css/chunk-b5da06ba.7a6ae39b.css"
rel=
"prefetch"
><link
href=
"css/chunk-cf704b6c.88ae3788.css"
rel=
"prefetch"
><link
href=
"css/chunk-e449bc78.2eef857d.css"
rel=
"prefetch"
><link
href=
"css/parser-home.53fe4753.css"
rel=
"prefetch"
><link
href=
"css/tinymce-example.0e433876.css"
rel=
"prefetch"
><link
href=
"js/chunk-1cb74270.2f2d988b.js"
rel=
"prefetch"
><link
href=
"js/chunk-2073d156.841cd6cc.js"
rel=
"prefetch"
><link
href=
"js/chunk-7c2866c4.dccd339b.js"
rel=
"prefetch"
><link
href=
"js/chunk-7c52297c.c0a80b51.js"
rel=
"prefetch"
><link
href=
"js/chunk-b5da06ba.6d3fd328.js"
rel=
"prefetch"
><link
href=
"js/chunk-cf704b6c.61cc1cc8.js"
rel=
"prefetch"
><link
href=
"js/chunk-e449bc78.f5c7b876.js"
rel=
"prefetch"
><link
href=
"js/chunk-fec0be80.0583a8a1.js"
rel=
"prefetch"
><link
href=
"js/parser-home.4f810414.js"
rel=
"prefetch"
><link
href=
"js/tinymce-example.0cafa1e6.js"
rel=
"prefetch"
><link
href=
"css/index.a25a2b8f.css"
rel=
"preload"
as=
"style"
><link
href=
"js/chunk-vendors.b6d9e7af.js"
rel=
"preload"
as=
"script"
><link
href=
"js/index.95019dd8.js"
rel=
"preload"
as=
"script"
><link
href=
"css/index.a25a2b8f.css"
rel=
"stylesheet"
></head><body><noscript><strong>
抱歉,javascript被禁用,请开启后重试。
</strong></noscript><div
id=
"app"
></div><div
class=
"pre-loader"
id=
"pre-loader"
><div
class=
"inner one"
></div><div
class=
"inner two"
></div><div
class=
"inner three"
></div></div><script
src=
"js/chunk-vendors.b6d9e7af.js"
></script><script
src=
"js/index.95019dd8.js"
></script></body></html>
\ No newline at end of file
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论