Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
government-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
government-platform
Commits
9f3b8ca8
Commit
9f3b8ca8
authored
3 years ago
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
工作流添加websocket相关
parent
b41bafcd
master
first-branch
No related merge requests found
Changes
88
Show whitespace changes
Inline
Side-by-side
Showing
88 changed files
with
3914 additions
and
392 deletions
+3914
-392
common-lib/pom.xml
common-lib/pom.xml
+6
-0
common-lib/src/main/java/com/mortals/xhx/common/pdu/flow/FlowTaskPdu.java
...ain/java/com/mortals/xhx/common/pdu/flow/FlowTaskPdu.java
+4
-1
common-lib/src/main/java/com/mortals/xhx/common/pdu/flow/FlowTaskVoPdu.java
...n/java/com/mortals/xhx/common/pdu/flow/FlowTaskVoPdu.java
+3
-0
common-lib/src/main/java/com/mortals/xhx/common/pdu/flow/FlowUserTaskPdu.java
...java/com/mortals/xhx/common/pdu/flow/FlowUserTaskPdu.java
+12
-0
common-lib/src/main/java/com/mortals/xhx/feign/flowable/IApiFlowDefinitionFeign.java
...m/mortals/xhx/feign/flowable/IApiFlowDefinitionFeign.java
+9
-4
common-lib/src/main/java/com/mortals/xhx/feign/flowable/IApiFlowTaskFeign.java
...ava/com/mortals/xhx/feign/flowable/IApiFlowTaskFeign.java
+6
-2
common-lib/src/main/java/com/mortals/xhx/tools/message/service/IMessageService.java
...om/mortals/xhx/tools/message/service/IMessageService.java
+0
-43
common-lib/src/main/java/com/mortals/xhx/tools/message/service/impl/DefaultMessageServiceImpl.java
...tools/message/service/impl/DefaultMessageServiceImpl.java
+0
-39
government-manage-ui/admin/package.json
government-manage-ui/admin/package.json
+3
-1
government-manage-ui/admin/public/index.html
government-manage-ui/admin/public/index.html
+1
-1
government-manage-ui/admin/src/api/flowable/definition.js
government-manage-ui/admin/src/api/flowable/definition.js
+6
-7
government-manage-ui/admin/src/api/flowable/finished.js
government-manage-ui/admin/src/api/flowable/finished.js
+2
-1
government-manage-ui/admin/src/api/flowable/form.js
government-manage-ui/admin/src/api/flowable/form.js
+4
-0
government-manage-ui/admin/src/api/flowable/todo.js
government-manage-ui/admin/src/api/flowable/todo.js
+6
-18
government-manage-ui/admin/src/assets/utils/tree.js
government-manage-ui/admin/src/assets/utils/tree.js
+7
-5
government-manage-ui/admin/src/components/Process/components/nodePanel/task.vue
...dmin/src/components/Process/components/nodePanel/task.vue
+2
-2
government-manage-ui/admin/src/router.js
government-manage-ui/admin/src/router.js
+3
-1
government-manage-ui/admin/src/views/flowable/definition/list.vue
...nt-manage-ui/admin/src/views/flowable/definition/list.vue
+63
-31
government-manage-ui/admin/src/views/flowable/definition/model.vue
...t-manage-ui/admin/src/views/flowable/definition/model.vue
+93
-67
government-manage-ui/admin/src/views/flowable/task/process/list.vue
...-manage-ui/admin/src/views/flowable/task/process/list.vue
+3
-2
government-manage-ui/admin/src/views/flowable/task/record/index.vue
...-manage-ui/admin/src/views/flowable/task/record/index.vue
+23
-5
government-manage-ui/admin/src/views/system/area/show.vue
government-manage-ui/admin/src/views/system/area/show.vue
+1
-0
government-manage-ui/admin/src/views/system/param/show.vue
government-manage-ui/admin/src/views/system/param/show.vue
+221
-24
government-manage-ui/admin/src/views/system/task/show.vue
government-manage-ui/admin/src/views/system/task/show.vue
+7
-0
government-manage-ui/admin/src/views/system/user/list.vue
government-manage-ui/admin/src/views/system/user/list.vue
+1
-1
government-manage-ui/admin/src/views/system/user/show.vue
government-manage-ui/admin/src/views/system/user/show.vue
+1
-1
government-manage-ui/admin/src/views/tool/build/index.vue
government-manage-ui/admin/src/views/tool/build/index.vue
+1
-1
government-manage-ui/admin/yarn.lock
government-manage-ui/admin/yarn.lock
+109
-3
government-manager/pom.xml
government-manager/pom.xml
+6
-0
government-manager/src/main/java/com/mortals/xhx/ManagerApplication.java
...ger/src/main/java/com/mortals/xhx/ManagerApplication.java
+4
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/annotation/LogPrint.java
...a/com/mortals/xhx/base/framework/annotation/LogPrint.java
+11
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/aspect/LogPrintAspect.java
...com/mortals/xhx/base/framework/aspect/LogPrintAspect.java
+144
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/aspect/OperlogAspect.java
.../com/mortals/xhx/base/framework/aspect/OperlogAspect.java
+0
-20
government-manager/src/main/java/com/mortals/xhx/base/framework/config/InterceptorConfig.java
.../mortals/xhx/base/framework/config/InterceptorConfig.java
+9
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/WebSocketConfiguration.java
...mortals/xhx/base/framework/ws/WebSocketConfiguration.java
+32
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/AuthMessageHandler.java
...als/xhx/base/framework/ws/handler/AuthMessageHandler.java
+46
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/MessageHandler.java
...mortals/xhx/base/framework/ws/handler/MessageHandler.java
+24
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/SendToAllHandler.java
...rtals/xhx/base/framework/ws/handler/SendToAllHandler.java
+32
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/SendToOneHandler.java
...rtals/xhx/base/framework/ws/handler/SendToOneHandler.java
+31
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/AuthRequest.java
...om/mortals/xhx/base/framework/ws/message/AuthRequest.java
+24
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/AuthResponse.java
...m/mortals/xhx/base/framework/ws/message/AuthResponse.java
+37
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/Message.java
...va/com/mortals/xhx/base/framework/ws/message/Message.java
+7
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendResponse.java
...m/mortals/xhx/base/framework/ws/message/SendResponse.java
+50
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendToAllRequest.java
...rtals/xhx/base/framework/ws/message/SendToAllRequest.java
+37
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendToOneRequest.java
...rtals/xhx/base/framework/ws/message/SendToOneRequest.java
+49
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendToUserRequest.java
...tals/xhx/base/framework/ws/message/SendToUserRequest.java
+37
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/UserJoinNoticeRequest.java
.../xhx/base/framework/ws/message/UserJoinNoticeRequest.java
+24
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/util/WebSocketUtil.java
...com/mortals/xhx/base/framework/ws/util/WebSocketUtil.java
+147
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/websocket/WebSocketHandler.java
...als/xhx/base/framework/ws/websocket/WebSocketHandler.java
+136
-0
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/websocket/WebSocketShakeInterceptor.java
...ase/framework/ws/websocket/WebSocketShakeInterceptor.java
+36
-0
government-manager/src/main/java/com/mortals/xhx/base/system/area/web/AreaController.java
.../com/mortals/xhx/base/system/area/web/AreaController.java
+3
-3
government-manager/src/main/java/com/mortals/xhx/base/system/upload/web/UploadController.java
.../mortals/xhx/base/system/upload/web/UploadController.java
+1
-1
government-manager/src/main/java/com/mortals/xhx/daemon/demo/RequestDispatchController.java
...om/mortals/xhx/daemon/demo/RequestDispatchController.java
+1
-1
government-manager/src/main/java/com/mortals/xhx/module/data/dao/DataAreaDao.java
...ain/java/com/mortals/xhx/module/data/dao/DataAreaDao.java
+15
-0
government-manager/src/main/java/com/mortals/xhx/module/data/dao/ibatis/DataAreaDaoImpl.java
...m/mortals/xhx/module/data/dao/ibatis/DataAreaDaoImpl.java
+17
-0
government-manager/src/main/java/com/mortals/xhx/module/data/model/DataAreaEntity.java
...ava/com/mortals/xhx/module/data/model/DataAreaEntity.java
+359
-0
government-manager/src/main/java/com/mortals/xhx/module/data/model/DataAreaQuery.java
...java/com/mortals/xhx/module/data/model/DataAreaQuery.java
+344
-0
government-manager/src/main/java/com/mortals/xhx/module/data/service/DataAreaService.java
.../com/mortals/xhx/module/data/service/DataAreaService.java
+15
-0
government-manager/src/main/java/com/mortals/xhx/module/data/service/impl/DataAreaServiceImpl.java
...als/xhx/module/data/service/impl/DataAreaServiceImpl.java
+18
-0
government-manager/src/main/java/com/mortals/xhx/module/data/web/DataAreaController.java
...a/com/mortals/xhx/module/data/web/DataAreaController.java
+66
-0
government-manager/src/main/java/com/mortals/xhx/module/data/web/DataAreaForm.java
...in/java/com/mortals/xhx/module/data/web/DataAreaForm.java
+40
-0
government-manager/src/main/java/com/mortals/xhx/module/flowable/service/FlowableDefinitionService.java
...hx/module/flowable/service/FlowableDefinitionService.java
+7
-2
government-manager/src/main/java/com/mortals/xhx/module/flowable/service/impl/FlowableDefinitionServiceImpl.java
.../flowable/service/impl/FlowableDefinitionServiceImpl.java
+39
-6
government-manager/src/main/java/com/mortals/xhx/module/flowable/web/FlowableDefinitionController.java
...xhx/module/flowable/web/FlowableDefinitionController.java
+86
-17
government-manager/src/main/java/com/mortals/xhx/module/task/dao/TaskFinishDao.java
...n/java/com/mortals/xhx/module/task/dao/TaskFinishDao.java
+15
-0
government-manager/src/main/java/com/mortals/xhx/module/task/dao/ibatis/TaskFinishDaoImpl.java
...mortals/xhx/module/task/dao/ibatis/TaskFinishDaoImpl.java
+17
-0
government-manager/src/main/java/com/mortals/xhx/module/task/model/TaskFinishEntity.java
...a/com/mortals/xhx/module/task/model/TaskFinishEntity.java
+213
-0
government-manager/src/main/java/com/mortals/xhx/module/task/model/TaskFinishQuery.java
...va/com/mortals/xhx/module/task/model/TaskFinishQuery.java
+294
-0
government-manager/src/main/java/com/mortals/xhx/module/task/service/TaskFinishService.java
...om/mortals/xhx/module/task/service/TaskFinishService.java
+24
-0
government-manager/src/main/java/com/mortals/xhx/module/task/service/TaskProcessService.java
...m/mortals/xhx/module/task/service/TaskProcessService.java
+3
-4
government-manager/src/main/java/com/mortals/xhx/module/task/service/impl/TaskFinishServiceImpl.java
...s/xhx/module/task/service/impl/TaskFinishServiceImpl.java
+75
-0
government-manager/src/main/java/com/mortals/xhx/module/task/service/impl/TaskProcessServiceImpl.java
.../xhx/module/task/service/impl/TaskProcessServiceImpl.java
+98
-13
government-manager/src/main/java/com/mortals/xhx/module/task/service/impl/TaskTodoServiceImpl.java
...als/xhx/module/task/service/impl/TaskTodoServiceImpl.java
+4
-15
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskFinishController.java
...com/mortals/xhx/module/task/web/TaskFinishController.java
+64
-0
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskFinishForm.java
.../java/com/mortals/xhx/module/task/web/TaskFinishForm.java
+40
-0
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskProcessController.java
...om/mortals/xhx/module/task/web/TaskProcessController.java
+40
-13
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskTodoController.java
...a/com/mortals/xhx/module/task/web/TaskTodoController.java
+16
-0
government-manager/src/main/java/com/mortals/xhx/stream/TaskProcessStreamListener.java
...ava/com/mortals/xhx/stream/TaskProcessStreamListener.java
+35
-0
government-manager/src/main/resources/bootstrap.yml
government-manager/src/main/resources/bootstrap.yml
+4
-3
government-workflow/src/main/java/com/mortals/flowable/WorkFlowApplication.java
...c/main/java/com/mortals/flowable/WorkFlowApplication.java
+3
-9
government-workflow/src/main/java/com/mortals/flowable/common/config/FlowableGlobListenerConfig.java
...ls/flowable/common/config/FlowableGlobListenerConfig.java
+48
-0
government-workflow/src/main/java/com/mortals/flowable/common/config/FlowableListenerConfig.java
...ortals/flowable/common/config/FlowableListenerConfig.java
+69
-0
government-workflow/src/main/java/com/mortals/flowable/listener/ProcessEndListener.java
...ava/com/mortals/flowable/listener/ProcessEndListener.java
+72
-0
government-workflow/src/main/java/com/mortals/flowable/listener/ProcessInstanceCompleteListener.java
...ls/flowable/listener/ProcessInstanceCompleteListener.java
+57
-0
government-workflow/src/main/java/com/mortals/flowable/listener/ProcessInstanceStartListener.java
...rtals/flowable/listener/ProcessInstanceStartListener.java
+53
-0
government-workflow/src/main/java/com/mortals/flowable/listener/TaskCreateListener.java
...ava/com/mortals/flowable/listener/TaskCreateListener.java
+95
-0
government-workflow/src/main/java/com/mortals/flowable/service/FlowDefinitionServiceImpl.java
...m/mortals/flowable/service/FlowDefinitionServiceImpl.java
+9
-9
government-workflow/src/main/java/com/mortals/flowable/service/FlowTaskServiceImpl.java
...ava/com/mortals/flowable/service/FlowTaskServiceImpl.java
+35
-16
No files found.
common-lib/pom.xml
View file @
9f3b8ca8
...
...
@@ -44,6 +44,12 @@
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-bus-kafka
</artifactId>
</dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
...
...
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/common/pdu/flow/FlowTaskPdu.java
View file @
9f3b8ca8
...
...
@@ -89,7 +89,7 @@ public class FlowTaskPdu implements Serializable {
private
String
candidate
;
@ApiModelProperty
(
"任务创建时间"
)
//
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private
Date
createTime
;
@ApiModelProperty
(
"任务完成时间"
)
...
...
@@ -110,4 +110,7 @@ public class FlowTaskPdu implements Serializable {
@ApiModelProperty
(
"审批组"
)
private
List
<
String
>
candidateGroups
;
@ApiModelProperty
(
"租户Id"
)
private
String
tenantId
;
}
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/common/pdu/flow/FlowTaskVoPdu.java
View file @
9f3b8ca8
...
...
@@ -48,4 +48,7 @@ public class FlowTaskVoPdu implements Serializable {
@ApiModelProperty
(
"审批组"
)
private
List
<
String
>
candidateGroups
;
@ApiModelProperty
(
"租户Id"
)
private
String
tenantId
;
}
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/common/pdu/flow/FlowUserTaskPdu.java
View file @
9f3b8ca8
package
com.mortals.xhx.common.pdu.flow
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
...
...
@@ -7,8 +8,19 @@ import java.io.Serializable;
@Data
public
class
FlowUserTaskPdu
implements
Serializable
{
/**
* 用户id
*/
private
String
id
;
/**
* 用户名称
*/
private
String
name
;
/**
* 租户Id
*/
private
String
tenantId
;
}
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/feign/flowable/IApiFlowDefinitionFeign.java
View file @
9f3b8ca8
...
...
@@ -28,7 +28,9 @@ public interface IApiFlowDefinitionFeign extends IFeign {
* @return
*/
@PostMapping
(
"/flowable/def/list"
)
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
list
(
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestBody
PageInfo
pageInfo
);
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
list
(
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestParam
(
value
=
"tenantId"
)
String
tenantId
,
@RequestBody
PageInfo
pageInfo
);
/**
* 保存流程设计器内的xml文件
...
...
@@ -41,7 +43,8 @@ public interface IApiFlowDefinitionFeign extends IFeign {
@PostMapping
(
"/flowable/def/save"
)
ApiRespPdu
<
String
>
save
(
@RequestParam
(
required
=
false
)
String
name
,
@RequestParam
(
required
=
false
)
String
category
,
@RequestParam
(
required
=
false
)
String
bpmnXml
);
@RequestParam
(
required
=
false
)
String
bpmnXml
,
@RequestParam
(
required
=
false
)
String
tenantId
);
/**
* 启动流程
...
...
@@ -55,6 +58,7 @@ public interface IApiFlowDefinitionFeign extends IFeign {
*/
@PostMapping
(
"/flowable/def/start"
)
ApiRespPdu
<
String
>
start
(
@RequestParam
(
value
=
"procDefId"
)
String
procDefId
,
@RequestParam
(
value
=
"tenantId"
)
String
tenantId
,
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestParam
(
value
=
"dataKey"
)
String
dataKey
,
@RequestBody
Map
<
String
,
Object
>
variables
);
...
...
@@ -68,7 +72,8 @@ public interface IApiFlowDefinitionFeign extends IFeign {
*/
@PostMapping
(
value
=
"/flowable/def/updateState"
)
ApiRespPdu
<
String
>
updateState
(
@RequestParam
Integer
state
,
@RequestParam
String
deployId
);
@RequestParam
String
deployId
,
@RequestParam
String
tenantId
);
/**
* 删除流程
...
...
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/feign/flowable/IApiFlowTaskFeign.java
View file @
9f3b8ca8
...
...
@@ -32,7 +32,9 @@ public interface IApiFlowTaskFeign extends IFeign {
* @return
*/
@PostMapping
(
"/flowable/task/myProcess"
)
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
myProcess
(
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestBody
PageInfo
pageInfo
);
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
myProcess
(
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestParam
(
value
=
"tenantId"
)
String
tenantId
,
@RequestBody
PageInfo
pageInfo
);
/**
...
...
@@ -65,6 +67,7 @@ public interface IApiFlowTaskFeign extends IFeign {
*/
@PostMapping
(
"/flowable/task/todoList"
)
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
todoList
(
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestParam
(
value
=
"tenantId"
)
String
tenantId
,
@RequestBody
PageInfo
pageInfo
);
...
...
@@ -78,6 +81,7 @@ public interface IApiFlowTaskFeign extends IFeign {
*/
@PostMapping
(
"/flowable/task/finishedList"
)
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
finishedList
(
@RequestParam
(
value
=
"userId"
)
String
userId
,
@RequestParam
(
value
=
"tenantId"
)
String
tenantId
,
@RequestBody
PageInfo
pageInfo
);
...
...
@@ -89,7 +93,7 @@ public interface IApiFlowTaskFeign extends IFeign {
* @return
*/
@PostMapping
(
"/flowable/task/flowRecord"
)
ApiRespPdu
<
List
<
FlowTaskPdu
>>
flowRecord
(
@RequestParam
(
required
=
false
)
String
procInsId
,
ApiRespPdu
<
List
<
FlowTaskPdu
>>
flowRecord
(
@RequestParam
(
required
=
false
)
String
procInsId
,
@RequestParam
(
required
=
false
)
String
deployId
);
/**
...
...
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/tools/message/service/IMessageService.java
deleted
100644 → 0
View file @
b41bafcd
/*
package com.mortals.coops.tools.message.service;
import org.springframework.messaging.MessageChannel;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
*/
/**
* 发送消息到消息中间件
*
* @author karlhoo
*//*
@Validated
public interface IMessageService {
*/
/**
* 向指定通道发送消息
*
* @param messageChannel
* @param message
* @return true: 成功
*//*
boolean sendMessage(@NotNull(message = "messageChannel不能为null") MessageChannel messageChannel, @NotBlank(message = "message不能为空") String message);
*/
/**
* 向指定通道发送消息(带messageKey)
*
* @param messageChannel
* @param message
* @param messageKey
* @return true: 成功
*//*
boolean sendMessage(@NotNull(message = "messageChannel不能为null") MessageChannel messageChannel, @NotBlank(message = "message不能为空") String message, String messageKey);
}
*/
This diff is collapsed.
Click to expand it.
common-lib/src/main/java/com/mortals/xhx/tools/message/service/impl/DefaultMessageServiceImpl.java
deleted
100644 → 0
View file @
b41bafcd
//package com.mortals.coops.tools.message.service.impl;
//
//import com.mortals.coops.tools.message.service.IMessageService;
//import lombok.extern.apachecommons.CommonsLog;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
//import org.springframework.kafka.support.KafkaHeaders;
//import org.springframework.messaging.Message;
//import org.springframework.messaging.MessageChannel;
//import org.springframework.messaging.support.MessageBuilder;
//import org.springframework.stereotype.Service;
//
///**
// * @author karlhoo
// */
//
//@CommonsLog
//@Service
//@ConditionalOnProperty("spring.cloud.stream.kafka.binder.brokers")
//public class DefaultMessageServiceImpl implements IMessageService {
// @Override
// public boolean sendMessage(MessageChannel messageChannel, String message) {
// return sendMessage(messageChannel, message, null);
// }
//
// @Override
// public boolean sendMessage(MessageChannel messageChannel, String message, String messageKey) {
// return sendMessage(messageChannel, MessageBuilder.withPayload(message).setHeader(KafkaHeaders.MESSAGE_KEY, messageKey == null ? messageKey : messageKey.getBytes()).build());
// }
//
// private boolean sendMessage(MessageChannel messageChannel, Message message) {
// try {
// return messageChannel.send(message);
// } catch (Exception e) {
// log.error(String.format("提交消息出错 messageChannel: %s, message: %s", messageChannel.toString(), message.getPayload()), e);
// return false;
// }
// }
//}
//
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/package.json
View file @
9f3b8ca8
...
...
@@ -23,11 +23,13 @@
"js-beautify"
:
"1.13.0"
,
"js-cookie"
:
"2.2.1"
,
"jsencrypt"
:
"3.0.0-rc.1"
,
"json-bigint"
:
"^0.3.0"
,
"nprogress"
:
"0.2.0"
,
"quill"
:
"1.3.7"
,
"screenfull"
:
"5.0.2"
,
"sockjs-client"
:
"^1.5.1"
,
"sortablejs"
:
"1.10.2"
,
"
json-bigint"
:
"^0.3.0
"
,
"
stompjs"
:
"^2.3.3
"
,
"v-charts"
:
"^1.17.10"
,
"vkbeautify"
:
"^0.99.3"
,
"vue"
:
"^2.6.14"
,
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/public/index.html
View file @
9f3b8ca8
...
...
@@ -5,7 +5,7 @@
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
name=
"viewport"
content=
"width=device-width,initial-scale=1.0"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>favicon.ico"
>
<title>
哎欧梯智能-产品生产周期管理PLM
</title>
<title>
工作流管理平台
</title>
<link
rel=
"stylesheet"
href=
"https://unpkg.com/element-ui@2.13.2/lib/theme-chalk/index.css"
>
</head>
<body>
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/api/flowable/definition.js
View file @
9f3b8ca8
...
...
@@ -22,11 +22,6 @@ export function getProcessVariables(taskId) {
// 激活/挂起流程
export
function
updateState
(
params
)
{
return
normalCallPost
(
'
/flowable/definition/updateState
'
,
params
)
// return request({
// url: '/flowable/definition/updateState',
// method: 'put',
// params: params
// })
}
// 指定流程办理人员列表
...
...
@@ -39,8 +34,9 @@ export function userList(query) {
// })
}
// 指定流程办理组列表
// 指定流程办理组列表
(由角色确定)
export
function
roleList
(
query
)
{
return
normalCallPost
(
'
/role/list
'
,
query
)
// return request({
// url: '/flowable/definition/roleList',
// method: 'get',
...
...
@@ -90,6 +86,8 @@ export function updateDeployment(data) {
// 删除流程定义
export
function
delDeployment
(
query
)
{
// /{id:[formId]}
return
normalCallPost
(
'
/flowable/definition/deleteDefinition
'
,
{
deployId
:[
query
.
deployId
]})
// return request({
// url: '/flowable/definition/delete/',
// method: 'delete',
...
...
@@ -99,6 +97,7 @@ export function delDeployment(query) {
// 导出流程定义
export
function
exportDeployment
(
query
)
{
return
normalCallPost
(
'
/flowable/definition/export
'
,
query
)
// return request({
// url: '/system/deployment/export',
// method: 'get',
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/api/flowable/finished.js
View file @
9f3b8ca8
...
...
@@ -4,7 +4,7 @@ import {normalCallPost} from '@/assets/utils/index';
// 查询已办任务列表
export
function
finishedList
(
query
)
{
return
normalCallPost
(
'
/
flowable/definition
/list
'
,
query
)
return
normalCallPost
(
'
/
task/finish
/list
'
,
query
)
// return request({
// url: '/flowable/task/finishedList',
...
...
@@ -26,6 +26,7 @@ export function flowRecord(query) {
// 撤回任务
export
function
revokeProcess
(
data
)
{
return
normalCallPost
(
'
/task/process/revokeProcess
'
,
query
)
// return request({
// url: '/flowable/task/revokeProcess',
// method: 'post',
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/api/flowable/form.js
View file @
9f3b8ca8
...
...
@@ -61,6 +61,10 @@ export function addDeployForm(data) {
// 导出流程表单
export
function
exportForm
(
query
)
{
return
normalCallPost
(
"
/form/export
"
,
query
)
// return request({
// url: '/flowable/form/export',
// method: 'get',
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/api/flowable/todo.js
View file @
9f3b8ca8
import
{
normalCallPost
}
from
'
@/assets/utils/index
'
;
// 查询待办任务列表
export
function
todoList
(
query
)
{
// return request({
// url: '/flowable/task/todoList',
// method: 'get',
// params: query
// })
}
// 完成任务
export
function
complete
(
data
)
{
return
normalCallPost
(
'
/task/process/complete
'
,
data
)
// return request({
// url: '/flowable/task/complete',
// method: 'post',
// data: data
// })
}
// 委派任务
export
function
delegate
(
data
)
{
return
normalCallPost
(
'
/task/process/delegate
'
,
data
)
// return request({
// url: '/flowable/task/delegate',
// method: 'post',
...
...
@@ -30,6 +19,7 @@ export function delegate(data) {
// 退回任务
export
function
returnTask
(
data
)
{
return
normalCallPost
(
'
/task/process/return
'
,
data
)
// return request({
// url: '/flowable/task/return',
// method: 'post',
...
...
@@ -39,15 +29,13 @@ export function returnTask(data) {
// 驳回任务
export
function
rejectTask
(
data
)
{
// return request({
// url: '/flowable/task/reject',
// method: 'post',
// data: data
// })
return
normalCallPost
(
'
/task/process/reject
'
,
data
)
}
// 可退回任务列表
export
function
returnList
(
data
)
{
return
normalCallPost
(
'
/task/process/returnList
'
,
data
)
// return request({
// url: '/flowable/task/returnList',
// method: 'post',
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/assets/utils/tree.js
View file @
9f3b8ca8
...
...
@@ -20,11 +20,12 @@ export class TreeCache extends Cache {
}
async
getData
()
{
const
result
=
await
super
.
getData
();
const
data
=
result
.
map
(
i
=>
{
if
(
!
i
.
parentId
)
{
i
.
parentId
=
-
1
;
const
data
=
result
.
map
(
item
=>
{
//console.log(i)
if
(
!
item
.
parentId
)
{
item
.
parentId
=
-
1
;
}
return
i
;
return
i
tem
;
});
return
this
.
cache
.
data
=
data
;
}
...
...
@@ -69,7 +70,7 @@ export class TreeCache extends Cache {
export
const
treeCache
=
new
TreeCache
(
'
/area/list
'
,
6000
);
export
const
treeCache
=
new
TreeCache
(
'
/
data/
area/list
'
,
6000
);
/**
* 获取父级节点的id列表
...
...
@@ -136,6 +137,7 @@ export function getParentName(id, list, arr, name) {
*/
export
function
buildTree
(
pid
,
list
)
{
const
data
=
list
.
filter
(
i
=>
pid
==
i
.
parentId
);
return
data
.
length
?
data
.
map
(
i
=>
{
return
{
value
:
i
.
id
,
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/components/Process/components/nodePanel/task.vue
View file @
9f3b8ca8
...
...
@@ -152,7 +152,7 @@ export default {
label
:
'
指定人员
'
,
allowCreate
:
true
,
filterable
:
true
,
dic
:
{
data
:
_this
.
users
,
label
:
'
nickName
'
,
value
:
'
userI
d
'
},
dic
:
{
data
:
_this
.
users
,
label
:
'
realName
'
,
value
:
'
i
d
'
},
show
:
!!
_this
.
showConfig
.
assignee
&&
_this
.
formData
.
userType
===
'
assignee
'
},
{
...
...
@@ -162,7 +162,7 @@ export default {
multiple
:
true
,
allowCreate
:
true
,
filterable
:
true
,
dic
:
{
data
:
_this
.
users
,
label
:
'
nickName
'
,
value
:
'
userI
d
'
},
dic
:
{
data
:
_this
.
users
,
label
:
'
realName
'
,
value
:
'
i
d
'
},
show
:
!!
_this
.
showConfig
.
candidateUsers
&&
_this
.
formData
.
userType
===
'
candidateUsers
'
},
{
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/router.js
View file @
9f3b8ca8
...
...
@@ -36,12 +36,14 @@ const router = new Router({
builder
(
'
tool/build/index
'
,
'
tool/build/index
'
),
//表单设计器
builder
(
'
flowable/task/record/index
'
,
'
flowable/task/record/index
'
),
//流程申请
...
restBuilder
(
'
task/process
'
,
'
flowable/task/process
'
),
//我的流程
...
restBuilder
(
'
task/todo
'
,
'
flowable/task/todo
'
),
//代办列表
...
restBuilder
(
'
task/finish
'
,
'
flowable/task/finished
'
),
//已办列表
...
restBuilder
(
'
device
'
,
'
device
'
),
// 设备管理-连接历史
//在此添加业务模块
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/flowable/definition/list.vue
View file @
9f3b8ca8
...
...
@@ -25,6 +25,7 @@
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
disabled
@
click=
"handleExport"
>
导出
</el-button
>
...
...
@@ -65,6 +66,22 @@
提示:仅允许导入“bpmn20.xml”格式文件!
</div>
</el-upload>
<el-form-item
label=
"区域"
prop=
"parentId"
>
<el-cascader
@
change=
'treeSelected'
:options=
"treeData"
change-on-select
v-model=
"selectedTreeID"
></el-cascader>
</el-form-item>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitFileForm"
>
确 定
</el-button>
<el-button
@
click=
"upload.open = false"
>
取 消
</el-button>
...
...
@@ -78,7 +95,7 @@
width=
"70%"
append-to-body
>
<
el-image
:src=
"readImage.src"
></el-image
>
<
!--
<el-image
:src=
"readImage.src"
></el-image>
--
>
<flow
:xmlData=
"xmlData"
/>
</el-dialog>
...
...
@@ -115,6 +132,7 @@
</
template
>
<
script
>
import
{
treeCache
}
from
"
@/assets/utils/tree
"
;
import
{
listDefinition
,
updateState
,
...
...
@@ -148,6 +166,7 @@ export default {
// });
// },
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
();
...
...
@@ -186,25 +205,17 @@ export default {
});
},
/** 流程图查看 */
handleReadImage
(
deploymentId
)
{
handleReadImage
(
row
)
{
console
.
log
(
"
流程图查看
"
);
this
.
$post
(
"
/flowable/definition/readImage
"
,
{
deployId
:
deploymentId
,
}).
then
(({
data
})
=>
{
this
.
readImage
.
title
=
"
流程图
"
;
this
.
readImage
.
open
=
true
;
this
.
readImage
.
src
=
data
.
src
;
// this.data = data.result;
});
// this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
// 发送请求,获取xml
// readXml(deploymentId).then(res =>{
// this.xmlData = res.data
// })
readXml
(
row
.
deploymentId
).
then
(
res
=>
{
this
.
xmlData
=
res
.
data
})
},
/** 表单查看 */
handleForm
(
formId
)
{
...
...
@@ -216,6 +227,14 @@ export default {
this
.
formConf
=
JSON
.
parse
(
res
.
data
.
entity
.
formContent
);
});
},
readXml
(
row
)
{
definitionStart
(
row
.
id
).
then
((
res
)
=>
{
this
.
msgSuccess
(
res
.
msg
);
});
},
/** 启动流程 */
handleDefinitionStart
(
row
)
{
console
.
log
(
"
启动流程
"
);
...
...
@@ -276,7 +295,7 @@ export default {
state
:
state
}
updateState
(
params
).
then
(
res
=>
{
this
.
message
.
success
(
"
修改成功
"
);
this
.
$message
.
success
(
"
更新成功!
"
);
this
.
getData
();
});
},
...
...
@@ -324,8 +343,9 @@ export default {
}).
then
(
function
()
{
return
delDeployment
(
params
);
}).
then
(()
=>
{
this
.
getList
();
this
.
msgSuccess
(
"
删除成功
"
);
this
.
$message
.
success
(
"
删除成功
"
);
this
.
getData
();
})
},
/** 导出按钮操作 */
...
...
@@ -348,20 +368,20 @@ export default {
},
// 文件上传中处理
handleFileUploadProgress
(
event
,
file
,
fileList
)
{
//
this.upload.isUploading = true;
this
.
upload
.
isUploading
=
true
;
},
// 文件上传成功处理
handleFileSuccess
(
response
,
file
,
fileList
)
{
//
this.upload.open = false;
//
this.upload.isUploading = false;
//
this.$refs.upload.clearFiles();
// this.$message
(response.msg);
// this.getList
();
this
.
upload
.
open
=
false
;
this
.
upload
.
isUploading
=
false
;
this
.
$refs
.
upload
.
clearFiles
();
this
.
$message
.
success
(
response
.
msg
);
this
.
getData
();
},
// 提交上传文件
submitFileForm
()
{
console
.
log
(
"
上传附件
"
);
//
this.$refs.upload.submit();
this
.
$refs
.
upload
.
submit
();
},
},
data
()
{
...
...
@@ -407,8 +427,8 @@ export default {
// 设置上传的请求头部
// headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
//url: process.env.VUE_APP_BASE_API + "/flowable/definition/import"
url
:
""
,
url
:
"
/m/flowable/definition/upload
"
,
},
// 查询参数
queryParams
:
{
...
...
@@ -465,7 +485,19 @@ export default {
{
prop
:
"
name
"
,
label
:
"
流程名称
"
,
label
:
"
流程名称(流程图)
"
,
formatter
:
row
=>
{
return
(
<
el
-
button
type
=
"
text
"
onClick
=
{()
=>
{
this
.
handleReadImage
(
row
);
}}
>
{
row
.
name
}
<
/el-button
>
)
}
},
{
...
...
@@ -482,7 +514,7 @@ export default {
<
el
-
button
type
=
"
text
"
onClick
=
{()
=>
{
this
.
handle
ReadImage
(
row
.
deployment
Id
);
this
.
handle
Form
(
row
.
form
Id
);
}}
>
{
row
.
formName
}
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/flowable/definition/model.vue
View file @
9f3b8ca8
<
template
>
<div>
<Breadcrumb
slot=
'breadcrumb'
:list=
'breadcrumbList'
></Breadcrumb>
<div>
<Breadcrumb
slot=
"breadcrumb"
:list=
"breadcrumbList"
></Breadcrumb>
<bpmn-modeler
ref=
"refNode"
:xml=
"xml"
...
...
@@ -14,7 +13,12 @@
@
dataType=
"dataType"
/>
<!--在线查看xml-->
<el-dialog
:title=
"xmlTitle"
:visible.sync=
"xmlOpen"
width=
"60%"
append-to-body
>
<el-dialog
:title=
"xmlTitle"
:visible.sync=
"xmlOpen"
width=
"60%"
append-to-body
>
<div>
<pre
v-highlight
>
<code
class=
"xml"
>
...
...
@@ -28,43 +32,54 @@
<
script
>
//import form from "@/assets/mixins/form";
import
table
from
"
@/assets/mixins/table
"
;
import
{
readXml
,
roleList
,
saveXml
,
userList
}
from
"
@/api/flowable/definition
"
;
import
bpmnModeler
from
'
@/components/Process/index
'
import
vkbeautify
from
'
vkbeautify
'
import
Hljs
from
'
highlight.js
'
import
'
highlight.js/styles/atom-one-dark.css
'
import
{
readXml
,
roleList
,
saveXml
,
userList
,
}
from
"
@/api/flowable/definition
"
;
import
bpmnModeler
from
"
@/components/Process/index
"
;
import
vkbeautify
from
"
vkbeautify
"
;
import
Hljs
from
"
highlight.js
"
;
import
"
highlight.js/styles/atom-one-dark.css
"
;
export
default
{
name
:
"
Model
"
,
// mixins: [form],
components
:
{
bpmnModeler
,
vkbeautify
vkbeautify
,
},
// 自定义指令
directives
:
{
highlight
:(
el
)
=>
{
let
blocks
=
el
.
querySelectorAll
(
'
pre code
'
);
highlight
:
(
el
)
=>
{
let
blocks
=
el
.
querySelectorAll
(
"
pre code
"
);
blocks
.
forEach
((
block
)
=>
{
Hljs
.
highlightBlock
(
block
)
})
}
Hljs
.
highlightBlock
(
block
)
;
})
;
}
,
},
data
()
{
return
{
breadcrumbList
:[{
name
:
'
测试1
'
},{
name
:
'
测试2
'
}],
breadcrumbList
:
[
{
name
:
"
流程管理
"
,
path
:
""
},
{
name
:
"
流程定义
"
,
path
:
"
/flowable/definition/list
"
},
{
name
:
"
流程
"
,
path
:
""
},
],
xml
:
""
,
// 后端查询到的xml
modeler
:
""
,
modeler
:
""
,
xmlOpen
:
false
,
xmlTitle
:
''
,
xmlContent
:
''
,
xmlTitle
:
""
,
xmlContent
:
""
,
users
:
[],
groups
:
[],
categorys
:
[],
categorys
:
[
{
dictLabel
:
"
测试分类一
"
,
dictValue
:
"
测试分类一
"
},
{
dictLabel
:
"
测试分类二
"
,
dictValue
:
"
测试分类二
"
},
],
};
},
created
()
{
created
()
{
const
deployId
=
this
.
$route
.
query
&&
this
.
$route
.
query
.
deployId
;
// 查询流程xml
if
(
deployId
)
{
...
...
@@ -72,22 +87,22 @@ export default {
this
.
getModelDetail
(
deployId
);
}
console
.
log
(
"
新增
"
);
// this.getDicts("sys_process_category").then(res => {
// this.getDicts("processCategory").then(res => {
// console.log(res);
// this.categorys = res.data;
// });
// this.getDataList()
this
.
getDataList
();
},
methods
:
{
/** xml 文件 */
getModelDetail
(
deployId
)
{
console
.
log
(
"
发送请求,获取xml
"
);
// 发送请求,获取xml
readXml
(
deployId
).
then
(
res
=>
{
console
.
log
(
res
);
readXml
(
deployId
).
then
(
(
res
)
=>
{
//
console.log(res);
this
.
xml
=
res
.
data
;
this
.
modeler
=
res
.
data
})
this
.
modeler
=
res
.
data
;
})
;
},
/** 保存xml */
save
(
data
)
{
...
...
@@ -95,15 +110,14 @@ export default {
const
params
=
{
name
:
data
.
process
.
name
,
category
:
data
.
process
.
category
,
xml
:
data
.
xml
}
saveXml
(
params
).
then
(
res
=>
{
xml
:
data
.
xml
,
};
saveXml
(
params
).
then
((
res
)
=>
{
this
.
$message
.
success
(
res
.
msg
);
// 关闭当前标签页并返回上个页面
this
.
$store
.
dispatch
(
"
tagsView/delView
"
,
this
.
$route
);
this
.
$router
.
go
(
-
1
)
})
this
.
$router
.
go
(
-
1
)
;
})
;
},
/** 指定流程办理人员列表 */
getDataList
()
{
...
...
@@ -112,50 +126,62 @@ export default {
// const params = {
//
// }
// userList().then(res =>{
// res.data.forEach(val =>{
userList
().
then
((
res
)
=>
{
console
.
log
(
"
userList
"
,
res
);
res
.
data
.
result
.
forEach
((
item
)
=>
{
let
arr
=
{
realName
:
item
.
realName
,
id
:
item
.
id
+
""
};
this
.
users
.
push
(
arr
);
// val.userId = val.userId.toString();
// })
// this.users = res.data;
// let arr = {nickName: "流程发起人", userId: "${INITIATOR}"}
// this.users.push(arr)
// });
// roleList().then(res =>{
// res.data.forEach(val =>{
// val.roleId = val.roleId.toString();
// })
});
//this.users = res.data.result;
let
arr
=
{
realName
:
"
流程发起人
"
,
id
:
"
${INITIATOR}
"
};
this
.
users
.
push
(
arr
);
console
.
log
(
"
users:
"
+
this
.
users
);
});
roleList
().
then
(
res
=>
{
res
.
data
.
result
.
forEach
(
item
=>
{
let
arr
=
{
roleName
:
item
.
name
,
roleId
:
item
.
id
.
toString
()};
this
.
groups
.
push
(
arr
);
})
// this.groups = res.data;
//
});
});
},
/** 展示xml */
showXML
(
data
){
showXML
(
data
)
{
console
.
log
(
"
展示xml
"
);
this
.
xmlTitle
=
'
xml查看
'
;
this
.
xmlTitle
=
"
xml查看
"
;
this
.
xmlOpen
=
true
;
debugger
//
debugger
this
.
xmlContent
=
vkbeautify
.
xml
(
data
);
},
/** 获取数据类型 */
dataType
(
data
){
console
.
log
(
"
获取数据类型
"
);
dataType
(
data
)
{
console
.
log
(
"
获取数据类型
"
,
data
);
this
.
users
=
[];
this
.
groups
=
[];
if
(
data
)
{
if
(
data
.
dataType
===
'
dynamic
'
)
{
if
(
data
.
userType
===
'
assignee
'
)
{
this
.
users
=
[{
nickName
:
"
${INITIATOR}
"
,
userId
:
"
${INITIATOR}
"
},
{
nickName
:
"
#{approval}
"
,
userId
:
"
#{approval}
"
}
]
}
else
if
(
data
.
userType
===
'
candidateUsers
'
)
{
this
.
users
=
[
{
nickName
:
"
#{approval}
"
,
userId
:
"
#{approval}
"
}]
if
(
data
.
dataType
===
"
dynamic
"
)
{
if
(
data
.
userType
===
"
assignee
"
)
{
this
.
users
=
[
{
realName
:
"
${INITIATOR}
"
,
id
:
"
${INITIATOR}
"
},
{
realName
:
"
#{approval}
"
,
id
:
"
#{approval}
"
},
];
}
else
if
(
data
.
userType
===
"
candidateUsers
"
)
{
this
.
users
=
[
{
realName
:
"
#{approval}
"
,
id
:
"
#{approval}
"
},
];
}
else
{
this
.
groups
=
[{
roleName
:
"
#{approval}
"
,
roleId
:
"
#{approval}
"
}]
this
.
groups
=
[{
roleName
:
"
#{approval}
"
,
roleId
:
"
#{approval}
"
}];
}
}
else
{
this
.
getDataList
()
}
this
.
getDataList
();
}
}
},
},
};
</
script
>
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/flowable/task/process/list.vue
View file @
9f3b8ca8
...
...
@@ -32,7 +32,7 @@
<el-table-column
label=
"流程名称"
align=
"center"
prop=
"name"
/>
<el-table-column
label=
"流程版本"
align=
"center"
>
<template
slot-scope=
"scope"
>
<el-tag
size=
"medium"
>
v
{{
scope
.
row
.
version
}}
</el-tag>
<el-tag
size=
"medium"
>
{{
scope
.
row
.
version
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"流程分类"
align=
"center"
prop=
"category"
/>
...
...
@@ -344,8 +344,9 @@ export default {
},
{
prop
:
"
assignee
"
,
prop
:
"
assignee
Name
"
,
label
:
"
办理人
"
,
formatter
:
this
.
formatter
},
{
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/flowable/task/record/index.vue
View file @
9f3b8ca8
...
...
@@ -29,9 +29,9 @@
<el-select
style=
"width: 50%"
v-model=
"assignee"
@
change=
"handleCheckChange"
:multiple=
"taskForm.multiple"
placeholder=
"请选择"
>
<el-option
v-for=
"item in userDataList"
:key=
"item.
userId
"
:label=
"item.
nick
Name"
:value=
"item.
userId
"
>
:key=
"item.
loginName
"
:label=
"item.
real
Name"
:value=
"item.
loginName
"
>
</el-option>
</el-select>
</el-form-item>
...
...
@@ -86,7 +86,7 @@
<el-card
:body-style=
"
{ padding: '10px' }">
<label
v-if=
"item.assigneeName"
style=
"font-weight: normal;margin-right: 30px;"
>
实际办理:
{{
item
.
assigneeName
}}
<el-tag
type=
"info"
size=
"mini"
>
{{
item
.
deptName
}}
</el-tag></label>
<label
v-if=
"item.candidate"
style=
"font-weight: normal;margin-right: 30px;"
>
候选办理:
{{
item
.
candidate
}}
</label>
<label
style=
"font-weight: normal"
>
接收时间:
</label><label
style=
"color:#8a909c;font-weight: normal"
>
{{
item
.
createTime
}}
</label>
<label
style=
"font-weight: normal"
>
接收时间:
</label><label
style=
"color:#8a909c;font-weight: normal"
>
{{
formatterDate
(
item
.
createTime
)
}}
</label>
<label
v-if=
"item.finishTime"
style=
"margin-left: 30px;font-weight: normal"
>
办结时间:
</label><label
style=
"color:#8a909c;font-weight: normal"
>
{{
item
.
finishTime
}}
</label>
<label
v-if=
"item.duration"
style=
"margin-left: 30px;font-weight: normal"
>
耗时:
</label><label
style=
"color:#8a909c;font-weight: normal"
>
{{
item
.
duration
}}
</label>
...
...
@@ -220,6 +220,25 @@ export default {
// }, 1000)
},
methods
:
{
formatterDate
(
time
)
{
let
date
=
new
Date
(
Number
(
time
));
let
Y
=
date
.
getFullYear
()
+
'
-
'
;
let
M
=
(
date
.
getMonth
()
+
1
<
10
?
'
0
'
+
(
date
.
getMonth
()
+
1
)
:
date
.
getMonth
()
+
1
)
+
'
-
'
;
let
D
=
this
.
panLeft
(
date
.
getDate
())
+
'
'
;
let
h
=
this
.
panLeft
(
date
.
getHours
())
+
'
:
'
;
let
m
=
this
.
panLeft
(
date
.
getMinutes
())
+
'
:
'
;
let
s
=
this
.
panLeft
(
date
.
getSeconds
());
return
Y
+
M
+
D
+
h
+
m
+
s
;
},
panLeft
(
num
){
return
num
<
10
?
'
0
'
+
num
:
num
;
},
/** xml 文件 */
getModelDetail
(
deployId
)
{
// 发送请求,获取xml
...
...
@@ -274,7 +293,6 @@ export default {
this
.
formConfOpen
=
true
}
}).
catch
(
res
=>
{
console
.
log
(
2222
);
this
.
goBack
();
})
},
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/system/area/show.vue
View file @
9f3b8ca8
...
...
@@ -90,6 +90,7 @@ export default {
return
form
;
},
treeSelected
(
val
)
{
console
.
log
(
val
);
this
.
form
.
parentId
=
val
.
slice
().
pop
();
}
},
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/system/param/show.vue
View file @
9f3b8ca8
...
...
@@ -4,40 +4,237 @@
:model=
"form"
:loading=
"loading"
:rules=
"rules"
size=
'small'
label-width=
'100px'
size=
"small"
label-width=
"100px"
ref=
"form"
>
<el-row>
<Field
label=
"参数名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
label=
"一级组织"
prop=
"firstOrganize"
v-model=
"form.firstOrganize"
/>
<Field
label=
"二级组织"
prop=
"secondOrganize"
v-model=
"form.secondOrganize"
/>
<Field
label=
"参数有效状态"
prop=
"validStatus"
v-model=
"form.validStatus"
:enumData=
'dict.validStatus'
type=
'select'
/>
<Field
label=
"参数修改状态"
prop=
"modStatus"
v-model=
"form.modStatus"
:enumData=
'dict.modStatus'
type=
'select'
/>
<Field
label=
"展现类型"
prop=
"displayType"
v-model=
"form.displayType"
:enumData=
'dict.displayType'
type=
'select'
/>
<Field
label=
"参数键"
prop=
"paramKey"
v-model=
"form.paramKey"
:span=
'24'
/>
<Field
label=
"参数值"
prop=
"paramValue"
v-model=
"form.paramValue"
:span=
'24'
/>
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
:span=
'24'
/>
<Field
label=
"参数名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
label=
"一级组织"
prop=
"firstOrganize"
v-model=
"form.firstOrganize"
/>
<Field
label=
"二级组织"
prop=
"secondOrganize"
v-model=
"form.secondOrganize"
/>
<Field
label=
"参数有效状态"
prop=
"validStatus"
v-model=
"form.validStatus"
:enumData=
"dict.validStatus"
type=
"select"
/>
<Field
label=
"参数修改状态"
prop=
"modStatus"
v-model=
"form.modStatus"
:enumData=
"dict.modStatus"
type=
"select"
/>
<Field
label=
"展现类型"
prop=
"displayType"
v-model=
"form.displayType"
:enumData=
"dict.displayType"
type=
"select"
/>
<Field
label=
"参数键"
prop=
"paramKey"
v-model=
"form.paramKey"
:span=
"24"
/>
<Field
label=
"参数值"
prop=
"paramValue"
v-model=
"form.paramValue"
:span=
"24"
/>
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
:span=
"24"
/>
<el-col
:span=
"12"
>
<el-form-item
label=
"区域"
prop=
"parentId"
>
<el-cascader
@
change=
"treeSelected"
@
active-item-change=
"handleAreaChange"
:options=
"treeData"
change-on-select
v-model=
"selectedTreeID"
></el-cascader>
</el-form-item>
</el-col>
</el-row>
<form-buttons
@
submit=
'submitForm'
/>
<form-buttons
@
submit=
"submitForm"
/>
</el-form>
</layout-form>
</
template
>
<
script
>
import
form
from
'
@/assets/mixins/form
'
;
import
form
from
"
@/assets/mixins/form
"
;
export
default
{
mixins
:
[
form
],
data
()
{
async
created
()
{
this
.
$post
(
"
/data/area/list
"
,
{
"
query.id
"
:
1431
},
{})
.
then
((
res
)
=>
{
const
data
=
res
.
data
.
result
.
map
((
i
)
=>
{
console
.
log
(
i
);
return
{
toString
:
[
'
validStatus
'
,
'
modStatus
'
,
'
displayType
'
],
rules
:
{
name
:
[{
required
:
true
,
message
:
'
请输入参数名称
'
,
trigger
:
'
blur
'
},],
paramKey
:
[{
required
:
true
,
message
:
'
请输入参数键
'
,
trigger
:
'
blur
'
},],
paramValue
:
[{
required
:
true
,
message
:
'
请输入参数值
'
,
trigger
:
'
blur
'
},],
value
:
i
.
id
,
label
:
i
.
areaName
,
level
:
i
.
areaLevel
,
children
:
[],
};
});
console
.
log
(
data
);
this
.
treeData
=
data
;
// for (let area of this.areaData) {
// if (val[0] === area.id) {
// area.childList = res.data.area;
// break;
// }
// }
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
//this.treeData = await treeCache.getTree();
//this.form.parentId = this.query.pid;
},
methods
:
{
afterRender
()
{},
beforeSubmit
(
form
)
{
form
.
parentId
=
this
.
selectedTreeID
.
slice
().
pop
();
return
form
;
},
treeSelected
(
val
)
{
console
.
log
(
val
);
let
id
=
val
.
slice
().
pop
();
console
.
log
(
id
);
this
.
$post
(
"
/data/area/view
"
,
{
"
id
"
:
[
val
.
slice
().
pop
()]
},
{}).
then
((
res
)
=>
{
console
.
log
(
res
);
let
areaCode
=
res
.
entity
.
areaCode
;
console
.
log
(
"
areaCode:
"
+
areaCode
);
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
this
.
form
.
parentId
=
val
.
slice
().
pop
();
},
handleAreaChange
(
val
)
{
this
.
loading
=
true
;
if
(
val
.
length
<=
1
)
{
this
.
$post
(
"
/data/area/list
"
,
{
"
query.parentAreaId
"
:
val
[
0
]
},
{})
.
then
((
res
)
=>
{
console
.
log
(
res
);
for
(
let
area
of
this
.
treeData
)
{
if
(
val
[
0
]
===
area
.
value
)
{
const
data
=
res
.
data
.
result
.
map
((
i
)
=>
{
return
{
value
:
i
.
id
,
label
:
i
.
areaName
,
level
:
i
.
areaLevel
,
children
:
[],
};
});
area
.
children
=
data
;
break
;
}
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
}
else
if
(
val
.
length
<=
2
)
{
this
.
$post
(
"
/data/area/list
"
,
{
"
query.parentAreaId
"
:
val
[
1
]
},
{})
.
then
((
res
)
=>
{
for
(
let
area
of
this
.
treeData
)
{
if
(
val
[
0
]
===
area
.
value
)
{
for
(
let
temp
of
area
.
children
)
{
if
(
val
[
1
]
===
temp
.
value
)
{
const
data
=
res
.
data
.
result
.
map
((
i
)
=>
{
return
{
value
:
i
.
id
,
label
:
i
.
areaName
,
level
:
i
.
areaLevel
,
children
:
[],
};
});
temp
.
children
=
data
;
break
;
}
}
}
}
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
}
else
if
(
val
.
length
<=
3
)
{
this
.
$post
(
"
/data/area/list
"
,
{
"
query.parentAreaId
"
:
val
[
2
]
},
{})
.
then
((
res
)
=>
{
for
(
let
area
of
this
.
treeData
)
{
if
(
val
[
0
]
===
area
.
value
)
{
for
(
let
temp
of
area
.
children
)
{
if
(
val
[
1
]
===
temp
.
value
)
{
for
(
let
temp1
of
temp
.
children
)
{
if
(
val
[
2
]
===
temp1
.
value
)
{
const
data
=
res
.
data
.
result
.
map
((
i
)
=>
{
return
{
value
:
i
.
id
,
label
:
i
.
areaName
,
level
:
i
.
areaLevel
,
};
});
temp1
.
children
=
data
;
break
;
}
}
}
}
}
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
}
this
.
loading
=
false
;
},
},
data
()
{
return
{
treeData
:
[],
selectedTreeID
:
[],
toString
:
[
"
validStatus
"
,
"
modStatus
"
,
"
displayType
"
],
rules
:
{
name
:
[{
required
:
true
,
message
:
"
请输入参数名称
"
,
trigger
:
"
blur
"
}],
paramKey
:
[
{
required
:
true
,
message
:
"
请输入参数键
"
,
trigger
:
"
blur
"
},
],
paramValue
:
[
{
required
:
true
,
message
:
"
请输入参数值
"
,
trigger
:
"
blur
"
},
],
},
};
},
};
</
script
>
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/system/task/show.vue
View file @
9f3b8ca8
...
...
@@ -8,8 +8,15 @@
label-width=
'120px'
ref=
"form"
>
<el-row>
<Field
label=
"任务名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
label=
"关键字"
prop=
"taskKey"
v-model=
"form.taskKey"
/>
<Field
label=
"执行服务"
prop=
"excuteService"
v-model=
"form.excuteService"
:enumData=
'dict.excuteService'
type=
'select'
/>
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/system/user/list.vue
View file @
9f3b8ca8
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
'tableData'
:config=
'tableConfig'
notAdd
notDel
/>
<LayoutTable
:data=
'tableData'
:config=
'tableConfig'
notDel
/>
<el-dialog
title=
"用户已分配的角色"
:visible.sync=
"role.visible"
>
<el-form
:model=
"role.form"
>
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/system/user/show.vue
View file @
9f3b8ca8
...
...
@@ -10,7 +10,7 @@
ref=
"form"
>
<el-row>
<Field
label=
"登录名称"
prop=
"loginName"
v-model=
"form.loginName"
disabled
/>
<Field
label=
"登录名称"
prop=
"loginName"
v-model=
"form.loginName"
/>
<Field
label=
"登录密码"
prop=
"loginPwd"
v-model=
"form.loginPwd"
v-if=
'pageInfo.type === "add"'
/>
<Field
label=
"用户昵称"
prop=
"realName"
v-model=
"form.realName"
/>
<Field
label=
"手机号码"
prop=
"mobile"
v-model=
"form.mobile"
/>
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/src/views/tool/build/index.vue
View file @
9f3b8ca8
...
...
@@ -524,7 +524,7 @@ export default {
...
this
.
formConf
}
console
.
log
(
"
表单JSON:
"
,
JSON
.
stringify
(
this
.
formData
));
//
console.log("表单JSON:",JSON.stringify(this.formData));
this
.
form
.
formContent
=
JSON
.
stringify
(
this
.
formData
);
this
.
formOpen
=
true
;
this
.
formTitle
=
"
添加表单
"
;
...
...
This diff is collapsed.
Click to expand it.
government-manage-ui/admin/yarn.lock
View file @
9f3b8ca8
...
...
@@ -2183,6 +2183,13 @@ buffer@^5.4.3:
base64-js "^1.3.1"
ieee754 "^1.1.13"
bufferutil@^4.0.1:
version "4.0.3"
resolved "https://registry.npm.taobao.org/bufferutil/download/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b"
integrity sha1-ZnJLdWvtI818KMTTBteZT5lDzGs=
dependencies:
node-gyp-build "^4.2.0"
builtin-status-codes@^3.0.0:
version "3.0.0"
resolved "https://registry.nlark.com/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
...
...
@@ -3173,6 +3180,14 @@ cyclist@^1.0.1:
resolved "https://registry.nlark.com/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
d@1, d@^1.0.1:
version "1.0.1"
resolved "https://registry.nlark.com/d/download/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
integrity sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=
dependencies:
es5-ext "^0.10.50"
type "^1.0.1"
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.nlark.com/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
...
...
@@ -3746,6 +3761,32 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
es5-ext@^0.10.35, es5-ext@^0.10.50:
version "0.10.53"
resolved "https://registry.nlark.com/es5-ext/download/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
integrity sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=
dependencies:
es6-iterator "~2.0.3"
es6-symbol "~3.1.3"
next-tick "~1.0.0"
es6-iterator@~2.0.3:
version "2.0.3"
resolved "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
dependencies:
d "1"
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
es6-symbol@^3.1.1, es6-symbol@~3.1.3:
version "3.1.3"
resolved "https://registry.nlark.com/es6-symbol/download/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
integrity sha1-utXTwbzawoJp9MszHkMceKxwXRg=
dependencies:
d "^1.0.1"
ext "^1.1.2"
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.nlark.com/escalade/download/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
...
...
@@ -4056,6 +4097,13 @@ express@^4.16.3, express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
ext@^1.1.2:
version "1.4.0"
resolved "https://registry.nlark.com/ext/download/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
integrity sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=
dependencies:
type "^2.0.0"
extend-shallow@^2.0.1:
version "2.0.1"
resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
...
...
@@ -5458,7 +5506,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
is-typedarray@~1.0.0:
is-typedarray@
^1.0.0, is-typedarray@
~1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
...
...
@@ -6479,6 +6527,11 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
resolved "https://registry.nlark.com/neo-async/download/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8=
next-tick@~1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.nlark.com/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
...
...
@@ -6496,6 +6549,11 @@ node-forge@^0.10.0:
resolved "https://registry.nlark.com/node-forge/download/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
integrity sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=
node-gyp-build@^4.2.0:
version "4.2.3"
resolved "https://registry.npm.taobao.org/node-gyp-build/download/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
integrity sha1-zmJ3+FODX3GIKe+0fbIPPk2cRzk=
node-gyp@^7.1.0:
version "7.1.2"
resolved "https://registry.nlark.com/node-gyp/download/node-gyp-7.1.2.tgz?cache=0&sync_timestamp=1622168177958&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-gyp%2Fdownload%2Fnode-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae"
...
...
@@ -8559,9 +8617,9 @@ snapdragon@^0.8.1:
source-map-resolve "^0.5.0"
use "^3.1.0"
sockjs-client@^1.5.0:
sockjs-client@^1.5.0
, sockjs-client@^1.5.1
:
version "1.5.1"
resolved "https://registry.n
lark.com/sockjs-client/download/
sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6"
resolved "https://registry.n
pm.taobao.org/sockjs-client/download/sockjs-client-1.5.1.tgz?cache=0&sync_timestamp=1616686625852&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2F
sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6"
integrity sha1-JWkI9tWt+5Tau9vQLGY2LMoPnqY=
dependencies:
debug "^3.2.6"
...
...
@@ -8769,6 +8827,13 @@ stdout-stream@^1.4.0:
dependencies:
readable-stream "^2.0.1"
stompjs@^2.3.3:
version "2.3.3"
resolved "https://registry.npm.taobao.org/stompjs/download/stompjs-2.3.3.tgz#34178ac7bb8ee294cc5d554ad8b50f7f5459fd8e"
integrity sha1-NBeKx7uO4pTMXVVK2LUPf1RZ/Y4=
optionalDependencies:
websocket latest
stream-browserify@^2.0.1:
version "2.0.2"
resolved "https://registry.nlark.com/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
...
...
@@ -9348,6 +9413,23 @@ type-is@~1.6.17, type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
type@^1.0.1:
version "1.2.0"
resolved "https://registry.nlark.com/type/download/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
integrity sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=
type@^2.0.0:
version "2.5.0"
resolved "https://registry.nlark.com/type/download/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d"
integrity sha1-Ci54wud5B7JSq+XymMGwHGPw2z0=
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=
dependencies:
is-typedarray "^1.0.0"
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.nlark.com/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
...
...
@@ -9522,6 +9604,13 @@ use@^3.1.0:
resolved "https://registry.nlark.com/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=
utf-8-validate@^5.0.2:
version "5.0.5"
resolved "https://registry.nlark.com/utf-8-validate/download/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1"
integrity sha1-3TLC6CxyAC3J8C62e6Z2H0NFbKE=
dependencies:
node-gyp-build "^4.2.0"
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
...
...
@@ -9903,6 +9992,18 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.nlark.com/websocket-extensions/download/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI=
websocket@latest:
version "1.0.34"
resolved "https://registry.npm.taobao.org/websocket/download/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"
integrity sha1-K9wmAsCL8sgiU7cwZVwO99yrMRE=
dependencies:
bufferutil "^4.0.1"
debug "^2.2.0"
es5-ext "^0.10.50"
typedarray-to-buffer "^3.1.5"
utf-8-validate "^5.0.2"
yaeti "^0.0.6"
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.nlark.com/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
...
...
@@ -10026,6 +10127,11 @@ y18n@^5.0.5:
resolved "https://registry.nlark.com/y18n/download/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=
yaeti@^0.0.6:
version "0.0.6"
resolved "https://registry.npm.taobao.org/yaeti/download/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.nlark.com/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
...
...
This diff is collapsed.
Click to expand it.
government-manager/pom.xml
View file @
9f3b8ca8
...
...
@@ -61,6 +61,12 @@
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-websocket
</artifactId>
<version>
2.5.2
</version>
</dependency>
</dependencies>
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/ManagerApplication.java
View file @
9f3b8ca8
package
com.mortals.xhx
;
import
com.mortals.framework.springcloud.boot.BaseWebApplication
;
import
com.mortals.xhx.utils.stream.messaging.ProcessTaskSink
;
import
com.mortals.xhx.utils.stream.messaging.ProcessTaskSource
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.web.servlet.ServletComponentScan
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.cloud.stream.annotation.EnableBinding
;
import
org.springframework.context.annotation.ImportResource
;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;
...
...
@@ -12,6 +15,7 @@ import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
(
scanBasePackages
=
{
"com.mortals"
})
@ServletComponentScan
(
"com.mortals"
)
@ImportResource
(
locations
=
{
"classpath:config/spring-config.xml"
})
@EnableBinding
({
ProcessTaskSink
.
class
})
public
class
ManagerApplication
extends
BaseWebApplication
{
public
static
void
main
(
String
[]
args
)
{
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/annotation/LogPrint.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.annotation
;
import
java.lang.annotation.*
;
@Retention
(
RetentionPolicy
.
RUNTIME
)
//注解不仅被保存到class文件中,jvm加载class文件之后,仍存在
@Target
(
ElementType
.
METHOD
)
//注解添加的位置
@Documented
public
@interface
LogPrint
{
String
description
()
default
""
;
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/aspect/LogPrintAspect.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.aspect
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.xhx.base.framework.annotation.LogPrint
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.*
;
import
org.springframework.context.annotation.Profile
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.lang.reflect.Method
;
@Aspect
@Component
@Profile
({
"dev"
,
"test"
})
//一般生产环境不允许日志打印参数
@Slf4j
public
class
LogPrintAspect
{
/**
* 换行符
*/
private
static
final
String
LINE_SEPARATOR
=
System
.
lineSeparator
();
/**
* 以自定义 @LogPrint 注解为切点
*/
//@Pointcut("@annotation(com.*.*.config.annotation.LogPrint)")
@Pointcut
(
"execution(public * com.mortals.xhx..*Controller.*(..))"
)
public
void
logPrint
()
{
}
/**
* 在切点之前织入
*
* @param joinPoint
* @throws Throwable
*/
@Before
(
"logPrint()"
)
public
void
doBefore
(
JoinPoint
joinPoint
)
throws
Throwable
{
// 开始打印请求日志
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
HttpServletRequest
request
=
attributes
.
getRequest
();
// 获取 @WebLog 注解的描述信息
String
methodDescription
=
getAspectLogDescription
(
joinPoint
);
// 打印请求相关参数
log
.
info
(
"========================================== Start =========================================="
);
// 打印请求 url
log
.
info
(
"URL : {}"
,
request
.
getRequestURL
().
toString
());
// 打印描述信息
log
.
info
(
"Description : {}"
,
methodDescription
);
// 打印 Http method
log
.
info
(
"HTTP Method : {}"
,
request
.
getMethod
());
// 打印调用 controller 的全路径以及执行方法
log
.
info
(
"Class Method : {}.{}"
,
joinPoint
.
getSignature
().
getDeclaringTypeName
(),
joinPoint
.
getSignature
().
getName
());
// 打印请求的 IP
log
.
info
(
"IP : {}"
,
request
.
getRemoteAddr
());
// 打印请求入参
log
.
info
(
"Request Args : {}"
,
getParams
(
joinPoint
));
}
/**
* 在切点之后织入
*
* @throws Throwable
*/
@After
(
"logPrint()"
)
public
void
doAfter
()
throws
Throwable
{
// 接口结束后换行,方便分割查看
log
.
info
(
"=========================================== End ==========================================="
+
LINE_SEPARATOR
);
}
/**
* 环绕
*
* @param proceedingJoinPoint
* @return
* @throws Throwable
*/
@Around
(
"logPrint()"
)
public
Object
doAround
(
ProceedingJoinPoint
proceedingJoinPoint
)
throws
Throwable
{
long
startTime
=
System
.
currentTimeMillis
();
Object
result
=
proceedingJoinPoint
.
proceed
();
// 打印出参
log
.
info
(
"Response Args : {}"
,
JSONObject
.
toJSONString
(
result
));
// 执行耗时
log
.
info
(
"Time-Consuming : {} ms"
,
System
.
currentTimeMillis
()
-
startTime
);
return
result
;
}
/**
* 获取切面注解的描述
*
* @param joinPoint 切点
* @return 描述信息
* @throws Exception
*/
public
String
getAspectLogDescription
(
JoinPoint
joinPoint
)
throws
Exception
{
String
targetName
=
joinPoint
.
getTarget
().
getClass
().
getName
();
String
methodName
=
joinPoint
.
getSignature
().
getName
();
Object
[]
arguments
=
joinPoint
.
getArgs
();
Class
targetClass
=
Class
.
forName
(
targetName
);
Method
[]
methods
=
targetClass
.
getMethods
();
StringBuilder
description
=
new
StringBuilder
(
""
);
for
(
Method
method
:
methods
)
{
if
(
method
.
getName
().
equals
(
methodName
))
{
Class
[]
clazzs
=
method
.
getParameterTypes
();
if
(
clazzs
.
length
==
arguments
.
length
)
{
description
.
append
(
method
.
getAnnotation
(
LogPrint
.
class
).
description
());
break
;
}
}
}
return
description
.
toString
();
}
private
String
getParams
(
JoinPoint
joinPoint
)
{
String
params
=
""
;
if
(
joinPoint
.
getArgs
()
!=
null
&&
joinPoint
.
getArgs
().
length
>
0
)
{
for
(
int
i
=
0
;
i
<
joinPoint
.
getArgs
().
length
;
i
++)
{
Object
arg
=
joinPoint
.
getArgs
()[
i
];
if
((
arg
instanceof
HttpServletResponse
)
||
(
arg
instanceof
HttpServletRequest
)
||
(
arg
instanceof
MultipartFile
)
||
(
arg
instanceof
MultipartFile
[]))
{
continue
;
}
try
{
params
+=
JSONObject
.
toJSONString
(
joinPoint
.
getArgs
()[
i
]);
}
catch
(
Exception
e1
)
{
log
.
error
(
e1
.
getMessage
());
}
}
}
return
params
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/aspect/OperlogAspect.java
View file @
9f3b8ca8
...
...
@@ -62,28 +62,8 @@ public class OperlogAspect extends FileLogServiceImpl implements ILogService {
}
else
{
logger
.
info
(
"args={}"
,
joinPoint
.
getArgs
());
}
// logger.info("url={}", request.getRequestURL());
//
// // method
// logger.info("method={}", request.getMethod());
//
// // ip
// logger.info("ip={}", request.getRemoteAddr());
//
// // 类方法
// logger.info("class_method={}",
// joinPoint.getSignature().getDeclaringTypeName() + "." +
// joinPoint.getSignature().getName());
//
// // 参数
// logger.info("args={}", joinPoint.getArgs());
}
// @After("sign()")
// public void doAfter() {
// logger.info("222222222222");
// }
@AfterReturning
(
returning
=
"object"
,
pointcut
=
"accessLog()"
)
public
void
doAfterReturning
(
Object
object
)
{
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/config/InterceptorConfig.java
View file @
9f3b8ca8
...
...
@@ -5,6 +5,7 @@ import java.util.Set;
import
javax.annotation.PostConstruct
;
import
lombok.Getter
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Configuration
;
...
...
@@ -30,6 +31,14 @@ public class InterceptorConfig {
@Value
(
"${application.auth.uncheckUrl}"
)
private
String
uncheckAuthUrl
;
/**
* 工作流租户id
*/
@Value
(
"${application.workflow.tenantId}"
)
@Getter
private
String
tenantId
;
private
Set
<
String
>
uncheckLoginUrls
=
new
HashSet
<>();
private
Set
<
String
>
uncheckAuthUrls
=
new
HashSet
<>();
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/WebSocketConfiguration.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws
;
import
com.mortals.xhx.base.framework.ws.websocket.WebSocketHandler
;
import
com.mortals.xhx.base.framework.ws.websocket.WebSocketShakeInterceptor
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.socket.config.annotation.EnableWebSocket
;
import
org.springframework.web.socket.config.annotation.WebSocketConfigurer
;
import
org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
;
@Configuration
@EnableWebSocket
// 开启 Spring WebSocket
public
class
WebSocketConfiguration
implements
WebSocketConfigurer
{
@Override
public
void
registerWebSocketHandlers
(
WebSocketHandlerRegistry
registry
)
{
registry
.
addHandler
(
this
.
webSocketHandler
(),
"/ws"
)
// 配置处理器
.
addInterceptors
(
new
WebSocketShakeInterceptor
())
// 配置拦截器
.
setAllowedOrigins
(
"*"
);
// 解决跨域问题
}
@Bean
public
WebSocketHandler
webSocketHandler
()
{
return
new
WebSocketHandler
();
}
@Bean
public
WebSocketShakeInterceptor
webSocketShakeInterceptor
()
{
return
new
WebSocketShakeInterceptor
();
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/AuthMessageHandler.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.handler
;
import
com.alibaba.fastjson.JSON
;
import
com.mortals.xhx.base.framework.ws.message.AuthRequest
;
import
com.mortals.xhx.base.framework.ws.message.AuthResponse
;
import
com.mortals.xhx.base.framework.ws.message.UserJoinNoticeRequest
;
import
com.mortals.xhx.base.framework.ws.util.WebSocketUtil
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.socket.WebSocketSession
;
@Component
@CommonsLog
public
class
AuthMessageHandler
implements
MessageHandler
<
AuthRequest
>
{
@Override
public
void
execute
(
WebSocketSession
session
,
AuthRequest
message
)
{
log
.
info
(
"receive message:"
+
JSON
.
toJSONString
(
message
));
// 如果未传递 accessToken
if
(
StringUtils
.
isEmpty
(
message
.
getAccessToken
()))
{
WebSocketUtil
.
send
(
session
,
AuthResponse
.
TYPE
,
new
AuthResponse
().
setCode
(
1
).
setMessage
(
"认证 accessToken 未传入"
));
return
;
}
// 添加到 WebSocketUtil 中
WebSocketUtil
.
addSession
(
session
,
message
.
getAccessToken
());
// 考虑到代码简化,我们先直接使用 accessToken 作为 User
// 判断是否认证成功。这里,假装直接成功
WebSocketUtil
.
send
(
session
,
AuthResponse
.
TYPE
,
new
AuthResponse
().
setCode
(
0
));
// 通知所有人,某个人加入了。这个是可选逻辑,仅仅是为了演示
// WebSocketUtil.broadcast(UserJoinNoticeRequest.TYPE,
// new UserJoinNoticeRequest().setNickname(message.getAccessToken())); // 考虑到代码简化,我们先直接使用 accessToken 作为 User
//
}
@Override
public
String
getType
()
{
return
AuthRequest
.
TYPE
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/MessageHandler.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.handler
;
import
com.mortals.xhx.base.framework.ws.message.Message
;
import
org.springframework.web.socket.WebSocketSession
;
/**
* 消息处理器接口
*/
public
interface
MessageHandler
<
T
extends
Message
>
{
/**
* 执行处理消息
*
* @param session 会话
* @param message 消息
*/
void
execute
(
WebSocketSession
session
,
T
message
);
/**
* @return 消息类型,即每个 Message 实现类上的 TYPE 静态字段
*/
String
getType
();
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/SendToAllHandler.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.handler
;
import
com.mortals.xhx.base.framework.ws.message.SendResponse
;
import
com.mortals.xhx.base.framework.ws.message.SendToAllRequest
;
import
com.mortals.xhx.base.framework.ws.message.SendToUserRequest
;
import
com.mortals.xhx.base.framework.ws.util.WebSocketUtil
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.socket.WebSocketSession
;
@Component
public
class
SendToAllHandler
implements
MessageHandler
<
SendToAllRequest
>
{
@Override
public
void
execute
(
WebSocketSession
session
,
SendToAllRequest
message
)
{
// 这里,假装直接成功
SendResponse
sendResponse
=
new
SendResponse
().
setMsgId
(
message
.
getMsgId
()).
setCode
(
0
);
WebSocketUtil
.
send
(
session
,
SendResponse
.
TYPE
,
sendResponse
);
// 创建转发的消息
SendToUserRequest
sendToUserRequest
=
new
SendToUserRequest
().
setMsgId
(
message
.
getMsgId
())
.
setContent
(
message
.
getContent
());
// 广播发送
WebSocketUtil
.
broadcast
(
SendToUserRequest
.
TYPE
,
sendToUserRequest
);
}
@Override
public
String
getType
()
{
return
SendToAllRequest
.
TYPE
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/handler/SendToOneHandler.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.handler
;
import
com.mortals.xhx.base.framework.ws.message.SendResponse
;
import
com.mortals.xhx.base.framework.ws.message.SendToOneRequest
;
import
com.mortals.xhx.base.framework.ws.message.SendToUserRequest
;
import
com.mortals.xhx.base.framework.ws.util.WebSocketUtil
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.socket.WebSocketSession
;
@Component
public
class
SendToOneHandler
implements
MessageHandler
<
SendToOneRequest
>
{
@Override
public
void
execute
(
WebSocketSession
session
,
SendToOneRequest
message
)
{
// 这里,假装直接成功
SendResponse
sendResponse
=
new
SendResponse
().
setMsgId
(
message
.
getMsgId
()).
setCode
(
0
);
WebSocketUtil
.
send
(
session
,
SendResponse
.
TYPE
,
sendResponse
);
// 创建转发的消息
SendToUserRequest
sendToUserRequest
=
new
SendToUserRequest
().
setMsgId
(
message
.
getMsgId
())
.
setContent
(
message
.
getContent
());
// 广播发送
WebSocketUtil
.
send
(
message
.
getToUser
(),
SendToUserRequest
.
TYPE
,
sendToUserRequest
);
}
@Override
public
String
getType
()
{
return
SendToOneRequest
.
TYPE
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/AuthRequest.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 用户认证请求
*/
public
class
AuthRequest
implements
Message
{
public
static
final
String
TYPE
=
"AUTH_REQUEST"
;
/**
* 认证 Token
*/
private
String
accessToken
;
public
String
getAccessToken
()
{
return
accessToken
;
}
public
AuthRequest
setAccessToken
(
String
accessToken
)
{
this
.
accessToken
=
accessToken
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/AuthResponse.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 用户认证响应
*/
public
class
AuthResponse
implements
Message
{
public
static
final
String
TYPE
=
"AUTH_RESPONSE"
;
/**
* 响应状态码
*/
private
Integer
code
;
/**
* 响应提示
*/
private
String
message
;
public
Integer
getCode
()
{
return
code
;
}
public
AuthResponse
setCode
(
Integer
code
)
{
this
.
code
=
code
;
return
this
;
}
public
String
getMessage
()
{
return
message
;
}
public
AuthResponse
setMessage
(
String
message
)
{
this
.
message
=
message
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/Message.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 基础消息体
*/
public
interface
Message
{
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendResponse.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 发送消息响应结果的 Message
*/
public
class
SendResponse
implements
Message
{
public
static
final
String
TYPE
=
"SEND_RESPONSE"
;
/**
* 消息编号
*/
private
String
msgId
;
/**
* 响应状态码
*/
private
Integer
code
;
/**
* 响应提示
*/
private
String
message
;
public
String
getMsgId
()
{
return
msgId
;
}
public
SendResponse
setMsgId
(
String
msgId
)
{
this
.
msgId
=
msgId
;
return
this
;
}
public
Integer
getCode
()
{
return
code
;
}
public
SendResponse
setCode
(
Integer
code
)
{
this
.
code
=
code
;
return
this
;
}
public
String
getMessage
()
{
return
message
;
}
public
SendResponse
setMessage
(
String
message
)
{
this
.
message
=
message
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendToAllRequest.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 发送给所有人的群聊消息的 Message
*/
public
class
SendToAllRequest
implements
Message
{
public
static
final
String
TYPE
=
"SEND_TO_ALL_REQUEST"
;
/**
* 消息编号
*/
private
String
msgId
;
/**
* 内容
*/
private
String
content
;
public
String
getContent
()
{
return
content
;
}
public
SendToAllRequest
setContent
(
String
content
)
{
this
.
content
=
content
;
return
this
;
}
public
String
getMsgId
()
{
return
msgId
;
}
public
SendToAllRequest
setMsgId
(
String
msgId
)
{
this
.
msgId
=
msgId
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendToOneRequest.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 发送给指定人的私聊消息的 Message
*/
public
class
SendToOneRequest
implements
Message
{
public
static
final
String
TYPE
=
"SEND_TO_ONE_REQUEST"
;
/**
* 发送给的用户
*/
private
String
toUser
;
/**
* 消息编号
*/
private
String
msgId
;
/**
* 内容
*/
private
String
content
;
public
String
getToUser
()
{
return
toUser
;
}
public
SendToOneRequest
setToUser
(
String
toUser
)
{
this
.
toUser
=
toUser
;
return
this
;
}
public
String
getMsgId
()
{
return
msgId
;
}
public
SendToOneRequest
setMsgId
(
String
msgId
)
{
this
.
msgId
=
msgId
;
return
this
;
}
public
String
getContent
()
{
return
content
;
}
public
SendToOneRequest
setContent
(
String
content
)
{
this
.
content
=
content
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/SendToUserRequest.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 发送消息给一个用户的 Message
*/
public
class
SendToUserRequest
implements
Message
{
public
static
final
String
TYPE
=
"SEND_TO_USER_REQUEST"
;
/**
* 消息编号
*/
private
String
msgId
;
/**
* 内容
*/
private
String
content
;
public
String
getMsgId
()
{
return
msgId
;
}
public
SendToUserRequest
setMsgId
(
String
msgId
)
{
this
.
msgId
=
msgId
;
return
this
;
}
public
String
getContent
()
{
return
content
;
}
public
SendToUserRequest
setContent
(
String
content
)
{
this
.
content
=
content
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/message/UserJoinNoticeRequest.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.message
;
/**
* 用户加入群聊的通知 Message
*/
public
class
UserJoinNoticeRequest
implements
Message
{
public
static
final
String
TYPE
=
"USER_JOIN_NOTICE_REQUEST"
;
/**
* 昵称
*/
private
String
nickname
;
public
String
getNickname
()
{
return
nickname
;
}
public
UserJoinNoticeRequest
setNickname
(
String
nickname
)
{
this
.
nickname
=
nickname
;
return
this
;
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/util/WebSocketUtil.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.util
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.xhx.base.framework.ws.message.Message
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.web.socket.TextMessage
;
import
org.springframework.web.socket.WebSocketSession
;
import
java.io.IOException
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* WebSocket 工具类,提供客户端连接的管理等功能
*/
public
class
WebSocketUtil
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
WebSocketUtil
.
class
);
// ========== 会话相关 ==========
/**
* Session 与用户的映射
*/
private
static
final
Map
<
WebSocketSession
,
String
>
SESSION_USER_MAP
=
new
ConcurrentHashMap
<>();
/**
* 用户与 Session 的映射
*/
private
static
final
Map
<
String
,
WebSocketSession
>
USER_SESSION_MAP
=
new
ConcurrentHashMap
<>();
/**
* 添加 Session 。在这个方法中,会添加用户和 Session 之间的映射
*
* @param session Session
* @param user 用户
*/
public
static
void
addSession
(
WebSocketSession
session
,
String
user
)
{
// 更新 USER_SESSION_MAP
USER_SESSION_MAP
.
put
(
user
,
session
);
// 更新 SESSION_USER_MAP
SESSION_USER_MAP
.
put
(
session
,
user
);
}
/**
* 移除 Session 。
*
* @param session Session
*/
public
static
void
removeSession
(
WebSocketSession
session
)
{
// 从 SESSION_USER_MAP 中移除
String
user
=
SESSION_USER_MAP
.
remove
(
session
);
// 从 USER_SESSION_MAP 中移除
if
(
user
!=
null
&&
user
.
length
()
>
0
)
{
USER_SESSION_MAP
.
remove
(
user
);
}
}
// ========== 消息相关 ==========
/**
* 广播发送消息给所有在线用户
*
* @param type 消息类型
* @param message 消息体
* @param <T> 消息类型
*/
public
static
<
T
extends
Message
>
void
broadcast
(
String
type
,
T
message
)
{
// 创建消息
TextMessage
textMessage
=
buildTextMessage
(
type
,
message
);
// 遍历 SESSION_USER_MAP ,进行逐个发送
for
(
WebSocketSession
session
:
SESSION_USER_MAP
.
keySet
())
{
sendTextMessage
(
session
,
textMessage
);
}
}
/**
* 发送消息给单个用户的 Session
*
* @param session Session
* @param type 消息类型
* @param message 消息体
* @param <T> 消息类型
*/
public
static
<
T
extends
Message
>
void
send
(
WebSocketSession
session
,
String
type
,
T
message
)
{
// 创建消息
TextMessage
textMessage
=
buildTextMessage
(
type
,
message
);
// 遍历给单个 Session ,进行逐个发送
sendTextMessage
(
session
,
textMessage
);
}
/**
* 发送消息给指定用户
*
* @param user 指定用户
* @param type 消息类型
* @param message 消息体
* @param <T> 消息类型
* @return 发送是否成功你那个
*/
public
static
<
T
extends
Message
>
boolean
send
(
String
user
,
String
type
,
T
message
)
{
// 获得用户对应的 Session
WebSocketSession
session
=
USER_SESSION_MAP
.
get
(
user
);
if
(
session
==
null
)
{
LOGGER
.
error
(
"[send][user({}) 不存在对应的 session]"
,
user
);
return
false
;
}
// 发送消息
send
(
session
,
type
,
message
);
return
true
;
}
/**
* 构建完整的消息
*
* @param type 消息类型
* @param message 消息体
* @param <T> 消息类型
* @return 消息
*/
private
static
<
T
extends
Message
>
TextMessage
buildTextMessage
(
String
type
,
T
message
)
{
JSONObject
messageObject
=
new
JSONObject
();
messageObject
.
put
(
"type"
,
type
);
messageObject
.
put
(
"body"
,
message
);
return
new
TextMessage
(
messageObject
.
toString
());
}
/**
* 真正发送消息
*
* @param session Session
* @param textMessage 消息
*/
private
static
void
sendTextMessage
(
WebSocketSession
session
,
TextMessage
textMessage
)
{
if
(
session
==
null
)
{
LOGGER
.
error
(
"[sendTextMessage][session 为 null]"
);
return
;
}
try
{
session
.
sendMessage
(
textMessage
);
}
catch
(
IOException
e
)
{
LOGGER
.
error
(
"[sendTextMessage][session({}) 发送消息{}) 发生异常"
,
session
,
textMessage
,
e
);
}
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/websocket/WebSocketHandler.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.websocket
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.xhx.base.framework.ws.handler.MessageHandler
;
import
com.mortals.xhx.base.framework.ws.message.AuthRequest
;
import
com.mortals.xhx.base.framework.ws.message.Message
;
import
com.mortals.xhx.base.framework.ws.util.WebSocketUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.aop.framework.AopProxyUtils
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.web.socket.CloseStatus
;
import
org.springframework.web.socket.TextMessage
;
import
org.springframework.web.socket.WebSocketSession
;
import
org.springframework.web.socket.handler.TextWebSocketHandler
;
import
java.lang.reflect.ParameterizedType
;
import
java.lang.reflect.Type
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Objects
;
public
class
WebSocketHandler
extends
TextWebSocketHandler
implements
InitializingBean
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
/**
* 消息类型与 MessageHandler 的映射
*
* 无需设置成静态变量
*/
private
final
Map
<
String
,
MessageHandler
>
HANDLERS
=
new
HashMap
<>();
@Autowired
private
ApplicationContext
applicationContext
;
@Override
// 对应 open 事件
public
void
afterConnectionEstablished
(
WebSocketSession
session
)
throws
Exception
{
logger
.
info
(
"[afterConnectionEstablished][session({}) 接入]"
,
session
);
// 解析 accessToken
String
accessToken
=
(
String
)
session
.
getAttributes
().
get
(
"accessToken"
);
// 创建 AuthRequest 消息类型
AuthRequest
authRequest
=
new
AuthRequest
().
setAccessToken
(
accessToken
);
// 获得消息处理器
MessageHandler
<
AuthRequest
>
messageHandler
=
HANDLERS
.
get
(
AuthRequest
.
TYPE
);
if
(
messageHandler
==
null
)
{
logger
.
error
(
"[onOpen][认证消息类型,不存在消息处理器]"
);
return
;
}
messageHandler
.
execute
(
session
,
authRequest
);
}
@Override
// 对应 message 事件
public
void
handleTextMessage
(
WebSocketSession
session
,
TextMessage
textMessage
)
throws
Exception
{
logger
.
info
(
"[handleMessage][session({}) 接收到一条消息({})]"
,
session
,
textMessage
);
// 生产环境下,请设置成 debug 级别
try
{
// 获得消息类型
JSONObject
jsonMessage
=
JSON
.
parseObject
(
textMessage
.
getPayload
());
String
messageType
=
jsonMessage
.
getString
(
"type"
);
// 获得消息处理器
MessageHandler
messageHandler
=
HANDLERS
.
get
(
messageType
);
if
(
messageHandler
==
null
)
{
logger
.
error
(
"[onMessage][消息类型({}) 不存在消息处理器]"
,
messageType
);
return
;
}
// 解析消息
Class
<?
extends
Message
>
messageClass
=
this
.
getMessageClass
(
messageHandler
);
// 处理消息
Message
messageObj
=
JSON
.
parseObject
(
jsonMessage
.
getString
(
"body"
),
messageClass
);
messageHandler
.
execute
(
session
,
messageObj
);
}
catch
(
Throwable
throwable
)
{
logger
.
info
(
"[onMessage][session({}) message({}) 发生异常]"
,
session
,
throwable
);
}
}
@Override
// 对应 close 事件
public
void
afterConnectionClosed
(
WebSocketSession
session
,
CloseStatus
status
)
throws
Exception
{
logger
.
info
(
"[afterConnectionClosed][session({}) 连接关闭。关闭原因是({})}]"
,
session
,
status
);
WebSocketUtil
.
removeSession
(
session
);
}
@Override
// 对应 error 事件
public
void
handleTransportError
(
WebSocketSession
session
,
Throwable
exception
)
throws
Exception
{
logger
.
info
(
"[handleTransportError][session({}) 发生异常]"
,
session
,
exception
);
}
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
// 通过 ApplicationContext 获得所有 MessageHandler Bean
applicationContext
.
getBeansOfType
(
MessageHandler
.
class
).
values
()
// 获得所有 MessageHandler Bean
.
forEach
(
messageHandler
->
HANDLERS
.
put
(
messageHandler
.
getType
(),
messageHandler
));
// 添加到 handlers 中
logger
.
info
(
"[afterPropertiesSet][消息处理器数量:{}]"
,
HANDLERS
.
size
());
}
private
Class
<?
extends
Message
>
getMessageClass
(
MessageHandler
handler
)
{
// 获得 Bean 对应的 Class 类名。因为有可能被 AOP 代理过。
Class
<?>
targetClass
=
AopProxyUtils
.
ultimateTargetClass
(
handler
);
// 获得接口的 Type 数组
Type
[]
interfaces
=
targetClass
.
getGenericInterfaces
();
Class
<?>
superclass
=
targetClass
.
getSuperclass
();
while
((
Objects
.
isNull
(
interfaces
)
||
0
==
interfaces
.
length
)
&&
Objects
.
nonNull
(
superclass
))
{
// 此处,是以父类的接口为准
interfaces
=
superclass
.
getGenericInterfaces
();
superclass
=
targetClass
.
getSuperclass
();
}
if
(
Objects
.
nonNull
(
interfaces
))
{
// 遍历 interfaces 数组
for
(
Type
type
:
interfaces
)
{
// 要求 type 是泛型参数
if
(
type
instanceof
ParameterizedType
)
{
ParameterizedType
parameterizedType
=
(
ParameterizedType
)
type
;
// 要求是 MessageHandler 接口
if
(
Objects
.
equals
(
parameterizedType
.
getRawType
(),
MessageHandler
.
class
))
{
Type
[]
actualTypeArguments
=
parameterizedType
.
getActualTypeArguments
();
// 取首个元素
if
(
Objects
.
nonNull
(
actualTypeArguments
)
&&
actualTypeArguments
.
length
>
0
)
{
return
(
Class
<
Message
>)
actualTypeArguments
[
0
];
}
else
{
throw
new
IllegalStateException
(
String
.
format
(
"类型(%s) 获得不到消息类型"
,
handler
));
}
}
}
}
}
throw
new
IllegalStateException
(
String
.
format
(
"类型(%s) 获得不到消息类型"
,
handler
));
}
public
static
void
main
(
String
[]
args
)
{
WebSocketHandler
webSocketHandler
=
new
WebSocketHandler
();
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/framework/ws/websocket/WebSocketShakeInterceptor.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.base.framework.ws.websocket
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.springframework.http.server.ServerHttpRequest
;
import
org.springframework.http.server.ServerHttpResponse
;
import
org.springframework.http.server.ServletServerHttpRequest
;
import
org.springframework.web.socket.WebSocketHandler
;
import
org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor
;
import
java.util.Map
;
/**
* 自定义 HttpSessionHandshakeInterceptor 拦截器
*
* 因为 WebSocketSession 无法获得 ws 地址上的请求参数,所以只好通过该拦截器,获得 accessToken 请求参数,设置到 attributes 中
*/
@CommonsLog
public
class
WebSocketShakeInterceptor
extends
HttpSessionHandshakeInterceptor
{
@Override
// 拦截 Handshake 事件
public
boolean
beforeHandshake
(
ServerHttpRequest
request
,
ServerHttpResponse
response
,
WebSocketHandler
wsHandler
,
Map
<
String
,
Object
>
attributes
)
throws
Exception
{
// 获得 accessToken
if
(
request
instanceof
ServletServerHttpRequest
)
{
ServletServerHttpRequest
serverRequest
=
(
ServletServerHttpRequest
)
request
;
attributes
.
put
(
"accessToken"
,
serverRequest
.
getServletRequest
().
getParameter
(
"accessToken"
));
}
// 调用父方法,继续执行逻辑
return
super
.
beforeHandshake
(
request
,
response
,
wsHandler
,
attributes
);
}
public
static
void
main
(
String
[]
args
)
{
WebSocketShakeInterceptor
webSocketShakeInterceptor
=
new
WebSocketShakeInterceptor
();
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/system/area/web/AreaController.java
View file @
9f3b8ca8
...
...
@@ -70,9 +70,9 @@ public class AreaController extends BaseCRUDJsonMappingController<AreaService, A
if
(
form
.
getQuery
().
getStatus
()
==
null
)
{
form
.
getQuery
().
setStatus
(
YesNo
.
YES
.
getValue
());
}
//
if(StringUtils.isEmpty(form.getQuery().getName())){
//
form.getQuery().setLevel(AreaLevelEnum.PROVINCE.getValue());
//
}
if
(
StringUtils
.
isEmpty
(
form
.
getQuery
().
getName
())){
form
.
getQuery
().
setLevel
(
AreaLevelEnum
.
PROVINCE
.
getValue
());
}
return
super
.
list
(
request
,
response
,
form
);
}
catch
(
Exception
e
){
log
.
error
(
"查询区域信息列表错误"
,
e
);
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/base/system/upload/web/UploadController.java
View file @
9f3b8ca8
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/daemon/demo/RequestDispatchController.java
View file @
9f3b8ca8
...
...
@@ -41,7 +41,7 @@ public class RequestDispatchController {
ApiRespPdu
<
String
>
respPdu
=
new
ApiRespPdu
<>();
try
{
String
xml
=
IoUtil
.
readUtf8
(
multipartFile
.
getInputStream
());
respPdu
=
apiFlowDefinitionFeign
.
save
(
"test"
,
"请假"
,
xml
);
respPdu
=
apiFlowDefinitionFeign
.
save
(
"test"
,
"请假"
,
xml
,
"test"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/dao/DataAreaDao.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.dao
;
import
com.mortals.framework.dao.ICRUDDao
;
import
com.mortals.xhx.module.data.model.DataAreaEntity
;
/**
* <p>Title: 地区表</p>
* <p>Description: DataAreaDao DAO接口 </p>
* @author
* @version 1.0.0
*/
public
interface
DataAreaDao
extends
ICRUDDao
<
DataAreaEntity
,
Long
>{
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/dao/ibatis/DataAreaDaoImpl.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.dao.ibatis
;
import
org.springframework.stereotype.Repository
;
import
com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis
;
import
com.mortals.xhx.module.data.dao.DataAreaDao
;
import
com.mortals.xhx.module.data.model.DataAreaEntity
;
/**
* <p>Title: 地区表</p>
* <p>Description: DataAreaDaoImpl DAO接口 </p>
* @author
* @version 1.0.0
*/
@Repository
(
"dataAreaDao"
)
public
class
DataAreaDaoImpl
extends
BaseCRUDDaoMybatis
<
DataAreaEntity
,
Long
>
implements
DataAreaDao
{
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/model/DataAreaEntity.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.model
;
import
com.mortals.framework.model.BaseEntityLong
;
/**
*
* Description:DataArea
* date: 2021-8-10 13:57:03
*/
public
class
DataAreaEntity
extends
BaseEntityLong
{
private
static
final
long
serialVersionUID
=
1628575023251L
;
/**
* 地区名称
*/
private
String
areaName
;
/**
* 地区简称
*/
private
String
areaSimpleName
;
/**
* 上级地区ID
*/
private
String
parentAreaId
;
/**
* 行政区域代码 行政区域代码
*/
private
String
areaCode
;
/**
* 删除标识
*/
private
String
deleteFlag
;
/**
* 创建人
*/
private
String
creatorId
;
/**
* 创建人名称
*/
private
String
creatorName
;
/**
* 创建时间
*/
private
String
createTimes
;
/**
* 更新时间
*/
private
String
updateTimes
;
/**
* 1省级,2市级,3区县级,4乡镇级,5村
*/
private
String
areaLevel
;
/**
* 排序
*/
private
String
sortKey
;
/**
* 地区层级编码
*/
private
String
areaLevelCode
;
/**
* 临时使用确认地区层级
*/
private
String
submitAreaLevel
;
/**
* 是否特殊区域:0.否,1.是
*/
private
String
isSpecial
;
/**
* 行政区域描述
*/
private
String
areaDesc
;
public
DataAreaEntity
(){
}
/**
* 获取 地区名称
* @return areaName
*/
public
String
getAreaName
()
{
return
this
.
areaName
;
}
/**
* 设置 地区名称
* @param areaName
*/
public
void
setAreaName
(
String
areaName
)
{
this
.
areaName
=
areaName
;
}
/**
* 获取 地区简称
* @return areaSimpleName
*/
public
String
getAreaSimpleName
()
{
return
this
.
areaSimpleName
;
}
/**
* 设置 地区简称
* @param areaSimpleName
*/
public
void
setAreaSimpleName
(
String
areaSimpleName
)
{
this
.
areaSimpleName
=
areaSimpleName
;
}
/**
* 获取 上级地区ID
* @return parentAreaId
*/
public
String
getParentAreaId
()
{
return
this
.
parentAreaId
;
}
/**
* 设置 上级地区ID
* @param parentAreaId
*/
public
void
setParentAreaId
(
String
parentAreaId
)
{
this
.
parentAreaId
=
parentAreaId
;
}
/**
* 获取 行政区域代码 行政区域代码
* @return areaCode
*/
public
String
getAreaCode
()
{
return
this
.
areaCode
;
}
/**
* 设置 行政区域代码 行政区域代码
* @param areaCode
*/
public
void
setAreaCode
(
String
areaCode
)
{
this
.
areaCode
=
areaCode
;
}
/**
* 获取 删除标识
* @return deleteFlag
*/
public
String
getDeleteFlag
()
{
return
this
.
deleteFlag
;
}
/**
* 设置 删除标识
* @param deleteFlag
*/
public
void
setDeleteFlag
(
String
deleteFlag
)
{
this
.
deleteFlag
=
deleteFlag
;
}
/**
* 获取 创建人
* @return creatorId
*/
public
String
getCreatorId
()
{
return
this
.
creatorId
;
}
/**
* 设置 创建人
* @param creatorId
*/
public
void
setCreatorId
(
String
creatorId
)
{
this
.
creatorId
=
creatorId
;
}
/**
* 获取 创建人名称
* @return creatorName
*/
public
String
getCreatorName
()
{
return
this
.
creatorName
;
}
/**
* 设置 创建人名称
* @param creatorName
*/
public
void
setCreatorName
(
String
creatorName
)
{
this
.
creatorName
=
creatorName
;
}
/**
* 获取 创建时间
* @return createTimes
*/
public
String
getCreateTimes
()
{
return
this
.
createTimes
;
}
/**
* 设置 创建时间
* @param createTimes
*/
public
void
setCreateTimes
(
String
createTimes
)
{
this
.
createTimes
=
createTimes
;
}
/**
* 获取 更新时间
* @return updateTimes
*/
public
String
getUpdateTimes
()
{
return
this
.
updateTimes
;
}
/**
* 设置 更新时间
* @param updateTimes
*/
public
void
setUpdateTimes
(
String
updateTimes
)
{
this
.
updateTimes
=
updateTimes
;
}
/**
* 获取 1省级,2市级,3区县级,4乡镇级,5村
* @return areaLevel
*/
public
String
getAreaLevel
()
{
return
this
.
areaLevel
;
}
/**
* 设置 1省级,2市级,3区县级,4乡镇级,5村
* @param areaLevel
*/
public
void
setAreaLevel
(
String
areaLevel
)
{
this
.
areaLevel
=
areaLevel
;
}
/**
* 获取 排序
* @return sortKey
*/
public
String
getSortKey
()
{
return
this
.
sortKey
;
}
/**
* 设置 排序
* @param sortKey
*/
public
void
setSortKey
(
String
sortKey
)
{
this
.
sortKey
=
sortKey
;
}
/**
* 获取 地区层级编码
* @return areaLevelCode
*/
public
String
getAreaLevelCode
()
{
return
this
.
areaLevelCode
;
}
/**
* 设置 地区层级编码
* @param areaLevelCode
*/
public
void
setAreaLevelCode
(
String
areaLevelCode
)
{
this
.
areaLevelCode
=
areaLevelCode
;
}
/**
* 获取 临时使用确认地区层级
* @return submitAreaLevel
*/
public
String
getSubmitAreaLevel
()
{
return
this
.
submitAreaLevel
;
}
/**
* 设置 临时使用确认地区层级
* @param submitAreaLevel
*/
public
void
setSubmitAreaLevel
(
String
submitAreaLevel
)
{
this
.
submitAreaLevel
=
submitAreaLevel
;
}
/**
* 获取 是否特殊区域:0.否,1.是
* @return isSpecial
*/
public
String
getIsSpecial
()
{
return
this
.
isSpecial
;
}
/**
* 设置 是否特殊区域:0.否,1.是
* @param isSpecial
*/
public
void
setIsSpecial
(
String
isSpecial
)
{
this
.
isSpecial
=
isSpecial
;
}
/**
* 获取 行政区域描述
* @return areaDesc
*/
public
String
getAreaDesc
()
{
return
this
.
areaDesc
;
}
/**
* 设置 行政区域描述
* @param areaDesc
*/
public
void
setAreaDesc
(
String
areaDesc
)
{
this
.
areaDesc
=
areaDesc
;
}
@Override
public
int
hashCode
()
{
return
this
.
getId
().
hashCode
();
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
==
null
)
return
false
;
if
(
obj
instanceof
DataAreaEntity
)
{
DataAreaEntity
tmp
=
(
DataAreaEntity
)
obj
;
if
(
this
.
getId
().
longValue
()
==
tmp
.
getId
().
longValue
())
{
return
true
;
}
}
return
false
;
}
public
String
toString
(){
StringBuilder
sb
=
new
StringBuilder
(
""
);
sb
.
append
(
",id:"
).
append
(
getId
())
.
append
(
",areaName:"
).
append
(
getAreaName
())
.
append
(
",areaSimpleName:"
).
append
(
getAreaSimpleName
())
.
append
(
",parentAreaId:"
).
append
(
getParentAreaId
())
.
append
(
",areaCode:"
).
append
(
getAreaCode
())
.
append
(
",deleteFlag:"
).
append
(
getDeleteFlag
())
.
append
(
",creatorId:"
).
append
(
getCreatorId
())
.
append
(
",creatorName:"
).
append
(
getCreatorName
())
.
append
(
",createTimes:"
).
append
(
getCreateTimes
())
.
append
(
",updateTimes:"
).
append
(
getUpdateTimes
())
.
append
(
",areaLevel:"
).
append
(
getAreaLevel
())
.
append
(
",sortKey:"
).
append
(
getSortKey
())
.
append
(
",areaLevelCode:"
).
append
(
getAreaLevelCode
())
.
append
(
",submitAreaLevel:"
).
append
(
getSubmitAreaLevel
())
.
append
(
",isSpecial:"
).
append
(
getIsSpecial
())
.
append
(
",areaDesc:"
).
append
(
getAreaDesc
())
;
return
sb
.
toString
();
}
public
void
initAttrValue
(){
this
.
areaName
=
null
;
this
.
areaSimpleName
=
null
;
this
.
parentAreaId
=
null
;
this
.
areaCode
=
null
;
this
.
deleteFlag
=
null
;
this
.
creatorId
=
null
;
this
.
creatorName
=
null
;
this
.
createTimes
=
null
;
this
.
updateTimes
=
null
;
this
.
areaLevel
=
null
;
this
.
sortKey
=
null
;
this
.
areaLevelCode
=
null
;
this
.
submitAreaLevel
=
null
;
this
.
isSpecial
=
null
;
this
.
areaDesc
=
null
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/model/DataAreaQuery.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.model
;
import
java.util.List
;
/**
*
* Description:DataArea
* date: 2021-8-10 13:57:03
*/
public
class
DataAreaQuery
extends
DataAreaEntity
{
private
static
final
long
serialVersionUID
=
1628575023258L
;
/** 主键ID */
private
List
<
String
>
idList
;
/** 地区名称 */
private
List
<
String
>
areaNameList
;
/** 地区简称 */
private
List
<
String
>
areaSimpleNameList
;
/** 上级地区ID */
private
List
<
String
>
parentAreaIdList
;
/** 行政区域代码 行政区域代码 */
private
List
<
String
>
areaCodeList
;
/** 删除标识 */
private
List
<
String
>
deleteFlagList
;
/** 创建人 */
private
List
<
String
>
creatorIdList
;
/** 创建人名称 */
private
List
<
String
>
creatorNameList
;
/** 创建时间 */
private
List
<
String
>
createTimesList
;
/** 更新时间 */
private
List
<
String
>
updateTimesList
;
/** 1省级,2市级,3区县级,4乡镇级,5村 */
private
List
<
String
>
areaLevelList
;
/** 排序 */
private
List
<
String
>
sortKeyList
;
/** 地区层级编码 */
private
List
<
String
>
areaLevelCodeList
;
/** 临时使用确认地区层级 */
private
List
<
String
>
submitAreaLevelList
;
/** 是否特殊区域:0.否,1.是 */
private
List
<
String
>
isSpecialList
;
/** 行政区域描述 */
private
List
<
String
>
areaDescList
;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private
List
<
DataAreaQuery
>
orConditionList
;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private
List
<
DataAreaQuery
>
andConditionList
;
public
DataAreaQuery
(){
}
/**
* 获取 主键ID
* @return idList
*/
public
List
<
String
>
getIdList
(){
return
this
.
idList
;
}
/**
* 设置 主键ID
* @param idList
*/
public
void
setIdList
(
List
<
String
>
idList
){
this
.
idList
=
idList
;
}
/**
* 获取 地区名称
* @return areaNameList
*/
public
List
<
String
>
getAreaNameList
(){
return
this
.
areaNameList
;
}
/**
* 设置 地区名称
* @param areaNameList
*/
public
void
setAreaNameList
(
List
<
String
>
areaNameList
){
this
.
areaNameList
=
areaNameList
;
}
/**
* 获取 地区简称
* @return areaSimpleNameList
*/
public
List
<
String
>
getAreaSimpleNameList
(){
return
this
.
areaSimpleNameList
;
}
/**
* 设置 地区简称
* @param areaSimpleNameList
*/
public
void
setAreaSimpleNameList
(
List
<
String
>
areaSimpleNameList
){
this
.
areaSimpleNameList
=
areaSimpleNameList
;
}
/**
* 获取 上级地区ID
* @return parentAreaIdList
*/
public
List
<
String
>
getParentAreaIdList
(){
return
this
.
parentAreaIdList
;
}
/**
* 设置 上级地区ID
* @param parentAreaIdList
*/
public
void
setParentAreaIdList
(
List
<
String
>
parentAreaIdList
){
this
.
parentAreaIdList
=
parentAreaIdList
;
}
/**
* 获取 行政区域代码 行政区域代码
* @return areaCodeList
*/
public
List
<
String
>
getAreaCodeList
(){
return
this
.
areaCodeList
;
}
/**
* 设置 行政区域代码 行政区域代码
* @param areaCodeList
*/
public
void
setAreaCodeList
(
List
<
String
>
areaCodeList
){
this
.
areaCodeList
=
areaCodeList
;
}
/**
* 获取 删除标识
* @return deleteFlagList
*/
public
List
<
String
>
getDeleteFlagList
(){
return
this
.
deleteFlagList
;
}
/**
* 设置 删除标识
* @param deleteFlagList
*/
public
void
setDeleteFlagList
(
List
<
String
>
deleteFlagList
){
this
.
deleteFlagList
=
deleteFlagList
;
}
/**
* 获取 创建人
* @return creatorIdList
*/
public
List
<
String
>
getCreatorIdList
(){
return
this
.
creatorIdList
;
}
/**
* 设置 创建人
* @param creatorIdList
*/
public
void
setCreatorIdList
(
List
<
String
>
creatorIdList
){
this
.
creatorIdList
=
creatorIdList
;
}
/**
* 获取 创建人名称
* @return creatorNameList
*/
public
List
<
String
>
getCreatorNameList
(){
return
this
.
creatorNameList
;
}
/**
* 设置 创建人名称
* @param creatorNameList
*/
public
void
setCreatorNameList
(
List
<
String
>
creatorNameList
){
this
.
creatorNameList
=
creatorNameList
;
}
/**
* 获取 创建时间
* @return createTimesList
*/
public
List
<
String
>
getCreateTimesList
(){
return
this
.
createTimesList
;
}
/**
* 设置 创建时间
* @param createTimesList
*/
public
void
setCreateTimesList
(
List
<
String
>
createTimesList
){
this
.
createTimesList
=
createTimesList
;
}
/**
* 获取 更新时间
* @return updateTimesList
*/
public
List
<
String
>
getUpdateTimesList
(){
return
this
.
updateTimesList
;
}
/**
* 设置 更新时间
* @param updateTimesList
*/
public
void
setUpdateTimesList
(
List
<
String
>
updateTimesList
){
this
.
updateTimesList
=
updateTimesList
;
}
/**
* 获取 1省级,2市级,3区县级,4乡镇级,5村
* @return areaLevelList
*/
public
List
<
String
>
getAreaLevelList
(){
return
this
.
areaLevelList
;
}
/**
* 设置 1省级,2市级,3区县级,4乡镇级,5村
* @param areaLevelList
*/
public
void
setAreaLevelList
(
List
<
String
>
areaLevelList
){
this
.
areaLevelList
=
areaLevelList
;
}
/**
* 获取 排序
* @return sortKeyList
*/
public
List
<
String
>
getSortKeyList
(){
return
this
.
sortKeyList
;
}
/**
* 设置 排序
* @param sortKeyList
*/
public
void
setSortKeyList
(
List
<
String
>
sortKeyList
){
this
.
sortKeyList
=
sortKeyList
;
}
/**
* 获取 地区层级编码
* @return areaLevelCodeList
*/
public
List
<
String
>
getAreaLevelCodeList
(){
return
this
.
areaLevelCodeList
;
}
/**
* 设置 地区层级编码
* @param areaLevelCodeList
*/
public
void
setAreaLevelCodeList
(
List
<
String
>
areaLevelCodeList
){
this
.
areaLevelCodeList
=
areaLevelCodeList
;
}
/**
* 获取 临时使用确认地区层级
* @return submitAreaLevelList
*/
public
List
<
String
>
getSubmitAreaLevelList
(){
return
this
.
submitAreaLevelList
;
}
/**
* 设置 临时使用确认地区层级
* @param submitAreaLevelList
*/
public
void
setSubmitAreaLevelList
(
List
<
String
>
submitAreaLevelList
){
this
.
submitAreaLevelList
=
submitAreaLevelList
;
}
/**
* 获取 是否特殊区域:0.否,1.是
* @return isSpecialList
*/
public
List
<
String
>
getIsSpecialList
(){
return
this
.
isSpecialList
;
}
/**
* 设置 是否特殊区域:0.否,1.是
* @param isSpecialList
*/
public
void
setIsSpecialList
(
List
<
String
>
isSpecialList
){
this
.
isSpecialList
=
isSpecialList
;
}
/**
* 获取 行政区域描述
* @return areaDescList
*/
public
List
<
String
>
getAreaDescList
(){
return
this
.
areaDescList
;
}
/**
* 设置 行政区域描述
* @param areaDescList
*/
public
void
setAreaDescList
(
List
<
String
>
areaDescList
){
this
.
areaDescList
=
areaDescList
;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public
List
<
DataAreaQuery
>
getOrConditionList
(){
return
this
.
orConditionList
;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public
void
setOrConditionList
(
List
<
DataAreaQuery
>
orConditionList
){
this
.
orConditionList
=
orConditionList
;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public
List
<
DataAreaQuery
>
getAndConditionList
(){
return
this
.
andConditionList
;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public
void
setAndConditionList
(
List
<
DataAreaQuery
>
andConditionList
){
this
.
andConditionList
=
andConditionList
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/service/DataAreaService.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.service
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.module.data.model.DataAreaEntity
;
/**
* <p>Title: 地区表</p>
* <p>Description: DataAreaService service接口 </p>
* <p>Copyright: Copyright ® </p>
* @version 1.0.0
*/
public
interface
DataAreaService
extends
ICRUDService
<
DataAreaEntity
,
Long
>{
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/service/impl/DataAreaServiceImpl.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.service.impl
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.xhx.module.data.dao.DataAreaDao
;
import
com.mortals.xhx.module.data.model.DataAreaEntity
;
import
com.mortals.xhx.module.data.service.DataAreaService
;
/**
* <p>Title: 地区表</p>
* <p>Description: DataAreaService service接口 </p>
* <p>Copyright: Copyright ® </p>
* @version 1.0.0
*/
@Service
(
"dataAreaService"
)
public
class
DataAreaServiceImpl
extends
AbstractCRUDServiceImpl
<
DataAreaDao
,
DataAreaEntity
,
Long
>
implements
DataAreaService
{
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/web/DataAreaController.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.web
;
import
com.alibaba.fastjson.JSON
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.xhx.base.system.area.web.AreaForm
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.module.data.model.DataAreaEntity
;
import
com.mortals.xhx.module.data.service.DataAreaService
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* <p>Title: 地区表</p>
* <p>Description: DataAreaController </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author zxfei
* @version 1.0.0
*/
@RestController
@RequestMapping
(
"data/area"
)
public
class
DataAreaController
extends
BaseCRUDJsonMappingController
<
DataAreaService
,
DataAreaForm
,
DataAreaEntity
,
Long
>
{
public
DataAreaController
(){
super
.
setFormClass
(
DataAreaForm
.
class
);
super
.
setModuleDesc
(
"地区表"
);
}
// @Override
// protected int doListAfter(HttpServletRequest request, HttpServletResponse response, DataAreaForm form, Map<String, Object> model, Context context) throws AppException {
//
// List<DataAreaEntity> result = (List<DataAreaEntity>) model.get("result");
// List<HashMap<String, String>> collect = result.parallelStream().map(item -> {
// HashMap<String, String> map = new HashMap<>();
//
// map.put("id", item.getId().toString());
// map.put("name", item.getAreaName());
// map.put("parentId", item.getParentAreaId());
// map.put("code", item.getAreaCode());
// map.put("level", item.getAreaLevel());
// return map;
//
// }).collect(Collectors.toList());
// model.put("result",collect);
//
// return super.doListAfter(request, response, form, model, context);
// }
public
static
void
main
(
String
[]
args
)
{
AreaForm
areaForm
=
new
AreaForm
();
areaForm
.
getEntity
().
setId
(
1L
);
System
.
out
.
println
(
JSON
.
toJSONString
(
areaForm
));
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/data/web/DataAreaForm.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.data.web
;
import
com.mortals.framework.web.BaseCRUDFormLong
;
import
com.mortals.xhx.module.data.model.DataAreaEntity
;
import
com.mortals.xhx.module.data.model.DataAreaQuery
;
/**
* <p>Title: 地区表</p>
* <p>Description: DataAreaForm </p>
* @author
* @version 1.0.0
*/
public
class
DataAreaForm
extends
BaseCRUDFormLong
<
DataAreaEntity
>
{
private
DataAreaEntity
dataarea
=
new
DataAreaEntity
();
private
DataAreaQuery
query
=
new
DataAreaQuery
();
public
DataAreaForm
(){
}
@Override
public
DataAreaEntity
getEntity
()
{
return
dataarea
;
}
public
DataAreaEntity
getDataArea
()
{
return
dataarea
;
}
public
void
setDataArea
(
DataAreaEntity
dataarea
)
{
this
.
dataarea
=
dataarea
;
}
@Override
public
DataAreaQuery
getQuery
()
{
return
query
;
}
public
void
setQuery
(
DataAreaQuery
query
)
{
this
.
query
=
query
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/flowable/service/FlowableDefinitionService.java
View file @
9f3b8ca8
...
...
@@ -5,6 +5,7 @@ import com.mortals.framework.model.PageInfo;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.common.pdu.api.ApiRespPdu
;
import
com.mortals.xhx.common.pdu.flow.DefinitionVoPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowProcDefPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowSaveXmlPdu
;
import
com.mortals.xhx.module.flowable.model.FlowableDefinitionEntity
;
...
...
@@ -31,8 +32,12 @@ public interface FlowableDefinitionService extends ICRUDService<FlowableDefiniti
String
readXml
(
String
deployId
);
String
saveXml
(
FlowSaveXmlPdu
flowSaveXmlPdu
);
String
saveXml
(
FlowSaveXmlPdu
flowSaveXmlPdu
,
Context
context
);
String
start
(
String
procDefId
,
String
data
,
Context
context
);
String
updateState
(
DefinitionVoPdu
definitionVoPdu
,
Context
context
);
String
deleteDefinition
(
DefinitionVoPdu
definitionVoPdu
,
Context
context
);
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/flowable/service/impl/FlowableDefinitionServiceImpl.java
View file @
9f3b8ca8
...
...
@@ -5,8 +5,10 @@ import com.mortals.framework.exception.AppException;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.xhx.base.framework.config.InterceptorConfig
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.pdu.api.ApiRespPdu
;
import
com.mortals.xhx.common.pdu.flow.DefinitionVoPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowProcDefPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowSaveXmlPdu
;
import
com.mortals.xhx.common.utils.BeanUtil
;
...
...
@@ -49,6 +51,8 @@ public class FlowableDefinitionServiceImpl extends AbstractCRUDServiceImpl<Flowa
private
FormService
formService
;
@Autowired
private
IApiFlowDefinitionFeign
apiFlowDefinitionFeign
;
@Autowired
private
InterceptorConfig
config
;
@Override
public
Result
<
FlowableDefinitionEntity
>
getDefinList
(
FlowableDefinitionQuery
query
,
PageInfo
pageInfo
,
Context
context
)
{
...
...
@@ -58,8 +62,7 @@ public class FlowableDefinitionServiceImpl extends AbstractCRUDServiceImpl<Flowa
if
(!
ObjectUtils
.
isEmpty
(
query
))
{
BeanUtils
.
copyProperties
(
query
,
flowProcDefPdu
,
BeanUtil
.
getNullPropertyNames
(
query
));
}
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
resp
=
apiFlowDefinitionFeign
.
list
(
context
.
getUser
().
getLoginName
(),
pageInfo
);
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
resp
=
apiFlowDefinitionFeign
.
list
(
context
.
getUser
().
getId
().
toString
(),
config
.
getTenantId
(),
pageInfo
);
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"获取流程定义列表异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"获取流程定义列表异常:"
+
resp
.
getMsg
());
...
...
@@ -129,9 +132,9 @@ public class FlowableDefinitionServiceImpl extends AbstractCRUDServiceImpl<Flowa
}
@Override
public
String
saveXml
(
FlowSaveXmlPdu
flowSaveXmlPdu
)
{
public
String
saveXml
(
FlowSaveXmlPdu
flowSaveXmlPdu
,
Context
context
)
{
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowDefinitionFeign
.
save
(
flowSaveXmlPdu
.
getName
(),
flowSaveXmlPdu
.
getCategory
(),
flowSaveXmlPdu
.
getXml
());
ApiRespPdu
<
String
>
resp
=
apiFlowDefinitionFeign
.
save
(
flowSaveXmlPdu
.
getName
(),
flowSaveXmlPdu
.
getCategory
(),
flowSaveXmlPdu
.
getXml
()
,
config
.
getTenantId
()
);
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"保存流程XML异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"保存流程XML异常:"
+
resp
.
getMsg
());
...
...
@@ -152,9 +155,9 @@ public class FlowableDefinitionServiceImpl extends AbstractCRUDServiceImpl<Flowa
Map
<
String
,
Object
>
variables
=
mapper
.
readValue
(
data
,
Map
.
class
);
// Map<String, Object> variables = new HashMap<>();
// variables.put("data", data);
String
busiKey
=
"
test
"
;
String
busiKey
=
"
busiKey
"
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowDefinitionFeign
.
start
(
procDefId
,
con
text
.
getUser
().
getLoginName
(),
busiKey
,
variables
);
ApiRespPdu
<
String
>
resp
=
apiFlowDefinitionFeign
.
start
(
procDefId
,
con
fig
.
getTenantId
(),
context
.
getUser
().
getId
().
toString
(),
busiKey
,
variables
);
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"流程实例化异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"流程实例化异常:"
+
resp
.
getMsg
());
...
...
@@ -165,4 +168,34 @@ public class FlowableDefinitionServiceImpl extends AbstractCRUDServiceImpl<Flowa
throw
new
AppException
(
"流程实例化异常:"
+
e
.
getMessage
());
}
}
@Override
public
String
updateState
(
DefinitionVoPdu
definitionVoPdu
,
Context
context
)
{
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowDefinitionFeign
.
updateState
(
definitionVoPdu
.
getState
(),
definitionVoPdu
.
getDeployId
(),
config
.
getTenantId
());
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"流程挂起/激活异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"流程挂起/激活异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
log
.
error
(
"流程挂起/激活异常"
,
e
);
throw
new
AppException
(
"流程挂起/激活异常:"
+
e
.
getMessage
());
}
}
@Override
public
String
deleteDefinition
(
DefinitionVoPdu
definitionVoPdu
,
Context
context
)
{
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowDefinitionFeign
.
delete
(
definitionVoPdu
.
getDeployId
());
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"删除流程异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"删除流程异常异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
log
.
error
(
"删除流程异常异常"
,
e
);
throw
new
AppException
(
e
.
getMessage
());
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/flowable/web/FlowableDefinitionController.java
View file @
9f3b8ca8
...
...
@@ -2,6 +2,7 @@ package com.mortals.xhx.module.flowable.web;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.codec.Base64
;
import
cn.hutool.core.io.IoUtil
;
import
cn.hutool.core.util.HashUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.common.IBaseEnum
;
...
...
@@ -12,6 +13,7 @@ import com.mortals.framework.web.BaseCRUDJsonController;
import
com.mortals.framework.web.BaseCRUDMappingController
;
import
com.mortals.xhx.base.system.upload.service.UploadService
;
import
com.mortals.xhx.common.code.FlowStateType
;
import
com.mortals.xhx.common.pdu.flow.DefinitionVoPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowSaveXmlPdu
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -19,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.module.flowable.model.FlowableDefinitionEntity
;
import
com.mortals.xhx.module.flowable.service.FlowableDefinitionService
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.imageio.ImageIO
;
import
javax.servlet.http.HttpServletRequest
;
...
...
@@ -63,14 +66,14 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
int
code
=
VALUE_RESULT_SUCCESS
;
String
busiDesc
=
"查询"
+
this
.
getModuleDesc
();
try
{
Result
<
FlowableDefinitionEntity
>
result
=
this
.
service
.
getDefinList
(
form
.
getQuery
(),
form
.
getPageInfo
(),
getContext
());
Result
<
FlowableDefinitionEntity
>
result
=
this
.
service
.
getDefinList
(
form
.
getQuery
(),
form
.
getPageInfo
(),
getContext
());
this
.
init
(
request
,
response
,
form
,
model
,
getContext
());
model
.
put
(
"result"
,
result
.
getList
());
model
.
put
(
"pageInfo"
,
result
.
getPageInfo
());
model
.
putAll
(
form
.
getModel
());
this
.
recordSysLog
(
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"查询流程列表异常"
,
e
);
log
.
error
(
"查询流程列表异常"
,
e
);
this
.
doException
(
request
,
busiDesc
,
model
,
e
);
code
=
VALUE_RESULT_FAILURE
;
}
...
...
@@ -82,13 +85,11 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
}
/**
* 读取流程图片
*/
@PostMapping
(
value
=
"readImage"
)
public
String
readImage
(
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"deployId"
)
String
deployId
)
{
public
String
readImage
(
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"deployId"
)
String
deployId
)
{
JSONObject
jsonObject
=
new
JSONObject
();
OutputStream
os
=
null
;
BufferedImage
image
=
null
;
...
...
@@ -112,9 +113,9 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
* 读取流程XML
*/
@PostMapping
(
value
=
"readXml"
)
public
String
readXml
(
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"deployId"
)
String
deployId
)
{
public
String
readXml
(
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"deployId"
)
String
deployId
)
{
log
.
info
(
"readXml,deployId:"
+
deployId
);
log
.
info
(
"readXml,deployId:"
+
deployId
);
JSONObject
ret
=
new
JSONObject
();
try
{
String
Xml
=
this
.
getService
().
readXml
(
deployId
);
...
...
@@ -132,14 +133,13 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
* 保存流程XML
*/
@PostMapping
(
value
=
"saveXml"
)
public
String
saveXml
(
@ApiParam
(
value
=
"流程定义类"
)
@RequestParam
Map
map
)
{
public
String
saveXml
(
@ApiParam
(
value
=
"流程定义类"
)
@RequestParam
Map
map
)
{
FlowSaveXmlPdu
flowSaveXmlPdu
=
BeanUtil
.
fillBeanWithMap
(
map
,
new
FlowSaveXmlPdu
(),
false
);
JSONObject
ret
=
new
JSONObject
();
try
{
String
definId
=
this
.
getService
().
saveXml
(
flowSaveXmlPdu
);
String
definId
=
this
.
getService
().
saveXml
(
flowSaveXmlPdu
,
getContext
()
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
ret
.
put
(
KEY_RESULT_MSG
,
"保存模型XML成功,definitionId:"
+
definId
);
ret
.
put
(
KEY_RESULT_MSG
,
"保存模型XML成功,definitionId:"
+
definId
);
}
catch
(
Exception
e
)
{
log
.
error
(
"保存XML异常"
,
e
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
...
...
@@ -149,19 +149,18 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
}
/**
* 启动流程定义的实例
*/
@PostMapping
(
value
=
"start"
)
public
String
start
(
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"procDefId"
)
String
procDefId
,
@ApiParam
(
value
=
"流程定义类"
)
@RequestParam
(
value
=
"data"
)
String
data
)
{
public
String
start
(
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"procDefId"
)
String
procDefId
,
@ApiParam
(
value
=
"流程定义类"
)
@RequestParam
(
value
=
"data"
)
String
data
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
String
proInstanceId
=
this
.
getService
().
start
(
procDefId
,
data
,
getContext
());
String
proInstanceId
=
this
.
getService
().
start
(
procDefId
,
data
,
getContext
());
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
ret
.
put
(
KEY_RESULT_MSG
,
"部署流程实例成功,proInstanceId:"
+
proInstanceId
);
ret
.
put
(
KEY_RESULT_MSG
,
"部署流程实例成功,proInstanceId:"
+
proInstanceId
);
}
catch
(
Exception
e
)
{
log
.
error
(
"部署流程实例异常"
,
e
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
...
...
@@ -170,4 +169,74 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
return
ret
.
toJSONString
();
}
/**
* 激活/挂起流程
*/
@PostMapping
(
value
=
"updateState"
)
public
String
updateState
(
@ApiParam
(
value
=
"流程定义实体类"
)
DefinitionVoPdu
definitionVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
String
proInstanceId
=
this
.
getService
().
updateState
(
definitionVoPdu
,
getContext
());
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
ret
.
put
(
KEY_RESULT_MSG
,
"挂起/激活流程成功,proInstanceId:"
+
proInstanceId
);
}
catch
(
Exception
e
)
{
log
.
error
(
"挂起/激活流程异常"
,
e
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
ret
.
put
(
KEY_RESULT_MSG
,
super
.
convertException
(
e
));
}
return
ret
.
toJSONString
();
}
/**
* 删除流程定义
*/
@PostMapping
(
value
=
"deleteDefinition"
)
public
String
deleteDefinition
(
@ApiParam
(
value
=
"流程定义实体类"
)
DefinitionVoPdu
definitionVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
String
deplyId
=
this
.
getService
().
deleteDefinition
(
definitionVoPdu
,
getContext
());
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
ret
.
put
(
KEY_RESULT_MSG
,
"删除流程成功,deplyId:"
+
deplyId
);
}
catch
(
Exception
e
)
{
log
.
error
(
"删除流程异常"
,
e
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
ret
.
put
(
KEY_RESULT_MSG
,
super
.
convertException
(
e
));
}
return
ret
.
toJSONString
();
}
/**
* 导入附件
*/
@PostMapping
(
value
=
"upload"
)
public
String
upload
(
@RequestParam
(
required
=
false
)
String
name
,
@RequestParam
(
required
=
false
)
String
category
,
MultipartFile
multipartFile
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
String
xml
=
IoUtil
.
readUtf8
(
multipartFile
.
getInputStream
());
FlowSaveXmlPdu
flowSaveXmlPdu
=
new
FlowSaveXmlPdu
();
flowSaveXmlPdu
.
setCategory
(
category
);
flowSaveXmlPdu
.
setName
(
name
);
flowSaveXmlPdu
.
setXml
(
xml
);
String
definId
=
this
.
getService
().
saveXml
(
flowSaveXmlPdu
,
getContext
());
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
ret
.
put
(
KEY_RESULT_MSG
,
"导入模型XML成功,definitionId:"
+
definId
);
}
catch
(
Exception
e
)
{
log
.
error
(
"挂起/激活流程异常"
,
e
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
ret
.
put
(
KEY_RESULT_MSG
,
super
.
convertException
(
e
));
}
return
ret
.
toJSONString
();
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/dao/TaskFinishDao.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.dao
;
import
com.mortals.framework.dao.ICRUDDao
;
import
com.mortals.xhx.module.task.model.TaskFinishEntity
;
/**
* <p>Title: 工作已办表</p>
* <p>Description: TaskFinishDao DAO接口 </p>
* @author
* @version 1.0.0
*/
public
interface
TaskFinishDao
extends
ICRUDDao
<
TaskFinishEntity
,
Long
>{
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/dao/ibatis/TaskFinishDaoImpl.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.dao.ibatis
;
import
org.springframework.stereotype.Repository
;
import
com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis
;
import
com.mortals.xhx.module.task.dao.TaskFinishDao
;
import
com.mortals.xhx.module.task.model.TaskFinishEntity
;
/**
* <p>Title: 工作已办表</p>
* <p>Description: TaskFinishDaoImpl DAO接口 </p>
* @author
* @version 1.0.0
*/
@Repository
(
"taskFinishDao"
)
public
class
TaskFinishDaoImpl
extends
BaseCRUDDaoMybatis
<
TaskFinishEntity
,
Long
>
implements
TaskFinishDao
{
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/model/TaskFinishEntity.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.model
;
import
java.util.Date
;
import
com.mortals.framework.model.BaseEntityLong
;
/**
*
* Description:TaskFinish
* date: 2021-8-9 9:22:48
*/
public
class
TaskFinishEntity
extends
BaseEntityLong
{
private
static
final
long
serialVersionUID
=
1628472168033L
;
/**
* 任务编号
*/
private
String
taskId
;
/**
* 任务节点
*/
private
String
taskName
;
/**
* 流程编号
*/
private
String
procInsId
;
/**
* 流程名称
*/
private
String
procDefName
;
/**
* 流程版本
*/
private
String
procDefVersion
;
/**
* 流程发起人
*/
private
String
startUserName
;
/**
* 流程发起认部门
*/
private
String
startDeptName
;
/**
* 接收时间
*/
private
Date
createTime
;
public
TaskFinishEntity
(){
}
/**
* 获取 任务编号
* @return taskId
*/
public
String
getTaskId
()
{
return
this
.
taskId
;
}
/**
* 设置 任务编号
* @param taskId
*/
public
void
setTaskId
(
String
taskId
)
{
this
.
taskId
=
taskId
;
}
/**
* 获取 任务节点
* @return taskName
*/
public
String
getTaskName
()
{
return
this
.
taskName
;
}
/**
* 设置 任务节点
* @param taskName
*/
public
void
setTaskName
(
String
taskName
)
{
this
.
taskName
=
taskName
;
}
/**
* 获取 流程编号
* @return procInsId
*/
public
String
getProcInsId
()
{
return
this
.
procInsId
;
}
/**
* 设置 流程编号
* @param procInsId
*/
public
void
setProcInsId
(
String
procInsId
)
{
this
.
procInsId
=
procInsId
;
}
/**
* 获取 流程名称
* @return procDefName
*/
public
String
getProcDefName
()
{
return
this
.
procDefName
;
}
/**
* 设置 流程名称
* @param procDefName
*/
public
void
setProcDefName
(
String
procDefName
)
{
this
.
procDefName
=
procDefName
;
}
/**
* 获取 流程版本
* @return procDefVersion
*/
public
String
getProcDefVersion
()
{
return
this
.
procDefVersion
;
}
/**
* 设置 流程版本
* @param procDefVersion
*/
public
void
setProcDefVersion
(
String
procDefVersion
)
{
this
.
procDefVersion
=
procDefVersion
;
}
/**
* 获取 流程发起人
* @return startUserName
*/
public
String
getStartUserName
()
{
return
this
.
startUserName
;
}
/**
* 设置 流程发起人
* @param startUserName
*/
public
void
setStartUserName
(
String
startUserName
)
{
this
.
startUserName
=
startUserName
;
}
/**
* 获取 流程发起认部门
* @return startDeptName
*/
public
String
getStartDeptName
()
{
return
this
.
startDeptName
;
}
/**
* 设置 流程发起认部门
* @param startDeptName
*/
public
void
setStartDeptName
(
String
startDeptName
)
{
this
.
startDeptName
=
startDeptName
;
}
/**
* 获取 接收时间
* @return createTime
*/
public
Date
getCreateTime
()
{
return
this
.
createTime
;
}
/**
* 设置 接收时间
* @param createTime
*/
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
@Override
public
int
hashCode
()
{
return
this
.
getId
().
hashCode
();
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
==
null
)
return
false
;
if
(
obj
instanceof
TaskFinishEntity
)
{
TaskFinishEntity
tmp
=
(
TaskFinishEntity
)
obj
;
if
(
this
.
getId
().
longValue
()
==
tmp
.
getId
().
longValue
())
{
return
true
;
}
}
return
false
;
}
public
String
toString
(){
StringBuilder
sb
=
new
StringBuilder
(
""
);
sb
.
append
(
",id:"
).
append
(
getId
())
.
append
(
",taskId:"
).
append
(
getTaskId
())
.
append
(
",taskName:"
).
append
(
getTaskName
())
.
append
(
",procInsId:"
).
append
(
getProcInsId
())
.
append
(
",procDefName:"
).
append
(
getProcDefName
())
.
append
(
",procDefVersion:"
).
append
(
getProcDefVersion
())
.
append
(
",startUserName:"
).
append
(
getStartUserName
())
.
append
(
",startDeptName:"
).
append
(
getStartDeptName
())
.
append
(
",createTime:"
).
append
(
getCreateTime
())
;
return
sb
.
toString
();
}
public
void
initAttrValue
(){
this
.
taskId
=
null
;
this
.
taskName
=
null
;
this
.
procInsId
=
null
;
this
.
procDefName
=
null
;
this
.
procDefVersion
=
null
;
this
.
startUserName
=
null
;
this
.
startDeptName
=
null
;
this
.
createTime
=
null
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/model/TaskFinishQuery.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.model
;
import
java.util.List
;
import
java.util.Date
;
/**
*
* Description:TaskFinish
* date: 2021-8-9 9:22:48
*/
public
class
TaskFinishQuery
extends
TaskFinishEntity
{
private
static
final
long
serialVersionUID
=
1628472168034L
;
/** 开始 ID,主键,自增长 */
private
Long
idStart
;
/** 结束 ID,主键,自增长 */
private
Long
idEnd
;
/** 增加 ID,主键,自增长 */
private
Long
idIncrement
;
/** ID,主键,自增长 */
private
List
<
Long
>
idList
;
/** 任务编号 */
private
List
<
String
>
taskIdList
;
/** 任务节点 */
private
List
<
String
>
taskNameList
;
/** 流程编号 */
private
List
<
String
>
procInsIdList
;
/** 流程名称 */
private
List
<
String
>
procDefNameList
;
/** 流程版本 */
private
List
<
String
>
procDefVersionList
;
/** 流程发起人 */
private
List
<
String
>
startUserNameList
;
/** 流程发起认部门 */
private
List
<
String
>
startDeptNameList
;
/** 开始 接收时间 */
private
String
createTimeStart
;
/** 结束 接收时间 */
private
String
createTimeEnd
;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private
List
<
TaskFinishQuery
>
orConditionList
;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private
List
<
TaskFinishQuery
>
andConditionList
;
public
TaskFinishQuery
(){
}
/**
* 获取 开始 ID,主键,自增长
* @return idStart
*/
public
Long
getIdStart
(){
return
this
.
idStart
;
}
/**
* 设置 开始 ID,主键,自增长
* @param idStart
*/
public
void
setIdStart
(
Long
idStart
){
this
.
idStart
=
idStart
;
}
/**
* 获取 结束 ID,主键,自增长
* @return idEnd
*/
public
Long
getIdEnd
(){
return
this
.
idEnd
;
}
/**
* 设置 结束 ID,主键,自增长
* @param idEnd
*/
public
void
setIdEnd
(
Long
idEnd
){
this
.
idEnd
=
idEnd
;
}
/**
* 获取 增加 ID,主键,自增长
* @return idIncrement
*/
public
Long
getIdIncrement
(){
return
this
.
idIncrement
;
}
/**
* 设置 增加 ID,主键,自增长
* @param idIncrement
*/
public
void
setIdIncrement
(
Long
idIncrement
){
this
.
idIncrement
=
idIncrement
;
}
/**
* 获取 ID,主键,自增长
* @return idList
*/
public
List
<
Long
>
getIdList
(){
return
this
.
idList
;
}
/**
* 设置 ID,主键,自增长
* @param idList
*/
public
void
setIdList
(
List
<
Long
>
idList
){
this
.
idList
=
idList
;
}
/**
* 获取 任务编号
* @return taskIdList
*/
public
List
<
String
>
getTaskIdList
(){
return
this
.
taskIdList
;
}
/**
* 设置 任务编号
* @param taskIdList
*/
public
void
setTaskIdList
(
List
<
String
>
taskIdList
){
this
.
taskIdList
=
taskIdList
;
}
/**
* 获取 任务节点
* @return taskNameList
*/
public
List
<
String
>
getTaskNameList
(){
return
this
.
taskNameList
;
}
/**
* 设置 任务节点
* @param taskNameList
*/
public
void
setTaskNameList
(
List
<
String
>
taskNameList
){
this
.
taskNameList
=
taskNameList
;
}
/**
* 获取 流程编号
* @return procInsIdList
*/
public
List
<
String
>
getProcInsIdList
(){
return
this
.
procInsIdList
;
}
/**
* 设置 流程编号
* @param procInsIdList
*/
public
void
setProcInsIdList
(
List
<
String
>
procInsIdList
){
this
.
procInsIdList
=
procInsIdList
;
}
/**
* 获取 流程名称
* @return procDefNameList
*/
public
List
<
String
>
getProcDefNameList
(){
return
this
.
procDefNameList
;
}
/**
* 设置 流程名称
* @param procDefNameList
*/
public
void
setProcDefNameList
(
List
<
String
>
procDefNameList
){
this
.
procDefNameList
=
procDefNameList
;
}
/**
* 获取 流程版本
* @return procDefVersionList
*/
public
List
<
String
>
getProcDefVersionList
(){
return
this
.
procDefVersionList
;
}
/**
* 设置 流程版本
* @param procDefVersionList
*/
public
void
setProcDefVersionList
(
List
<
String
>
procDefVersionList
){
this
.
procDefVersionList
=
procDefVersionList
;
}
/**
* 获取 流程发起人
* @return startUserNameList
*/
public
List
<
String
>
getStartUserNameList
(){
return
this
.
startUserNameList
;
}
/**
* 设置 流程发起人
* @param startUserNameList
*/
public
void
setStartUserNameList
(
List
<
String
>
startUserNameList
){
this
.
startUserNameList
=
startUserNameList
;
}
/**
* 获取 流程发起认部门
* @return startDeptNameList
*/
public
List
<
String
>
getStartDeptNameList
(){
return
this
.
startDeptNameList
;
}
/**
* 设置 流程发起认部门
* @param startDeptNameList
*/
public
void
setStartDeptNameList
(
List
<
String
>
startDeptNameList
){
this
.
startDeptNameList
=
startDeptNameList
;
}
/**
* 获取 开始 接收时间
* @return createTimeStart
*/
public
String
getCreateTimeStart
(){
return
this
.
createTimeStart
;
}
/**
* 设置 开始 接收时间
* @param createTimeStart
*/
public
void
setCreateTimeStart
(
String
createTimeStart
){
this
.
createTimeStart
=
createTimeStart
;
}
/**
* 获取 结束 接收时间
* @return createTimeEnd
*/
public
String
getCreateTimeEnd
(){
return
this
.
createTimeEnd
;
}
/**
* 设置 结束 接收时间
* @param createTimeEnd
*/
public
void
setCreateTimeEnd
(
String
createTimeEnd
){
this
.
createTimeEnd
=
createTimeEnd
;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public
List
<
TaskFinishQuery
>
getOrConditionList
(){
return
this
.
orConditionList
;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public
void
setOrConditionList
(
List
<
TaskFinishQuery
>
orConditionList
){
this
.
orConditionList
=
orConditionList
;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public
List
<
TaskFinishQuery
>
getAndConditionList
(){
return
this
.
andConditionList
;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public
void
setAndConditionList
(
List
<
TaskFinishQuery
>
andConditionList
){
this
.
andConditionList
=
andConditionList
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/service/TaskFinishService.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.service
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskPdu
;
import
com.mortals.xhx.module.task.model.TaskFinishEntity
;
import
com.mortals.xhx.module.task.model.TaskFinishQuery
;
import
com.mortals.xhx.module.task.model.TaskTodoQuery
;
/**
* <p>Title: 工作已办表</p>
* <p>Description: TaskFinishService service接口 </p>
* <p>Copyright: Copyright ® </p>
* @version 1.0.0
*/
public
interface
TaskFinishService
extends
ICRUDService
<
TaskFinishEntity
,
Long
>{
Result
<
FlowTaskPdu
>
finishList
(
TaskFinishQuery
query
,
PageInfo
pageInfo
,
Context
context
);
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/service/TaskProcessService.java
View file @
9f3b8ca8
...
...
@@ -4,10 +4,7 @@ import com.mortals.framework.model.Context;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.common.pdu.flow.FlowNextPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskVoPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowViewerPdu
;
import
com.mortals.xhx.common.pdu.flow.*
;
import
com.mortals.xhx.module.flowable.model.FlowableDefinitionEntity
;
import
com.mortals.xhx.module.task.model.TaskProcessEntity
;
import
com.mortals.xhx.module.task.model.TaskProcessQuery
;
...
...
@@ -55,4 +52,6 @@ public interface TaskProcessService extends ICRUDService<TaskProcessEntity,Long>
String
delegateTask
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
);
String
assignTask
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
);
List
<
FlowUserTaskPdu
>
getReturnList
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
);
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/service/impl/TaskFinishServiceImpl.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.service.impl
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.xhx.base.framework.config.InterceptorConfig
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.pdu.api.ApiRespPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskPdu
;
import
com.mortals.xhx.common.utils.BeanUtil
;
import
com.mortals.xhx.feign.flowable.IApiFlowTaskFeign
;
import
com.mortals.xhx.module.data.service.DataAreaService
;
import
com.mortals.xhx.module.task.model.TaskFinishQuery
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.xhx.module.task.dao.TaskFinishDao
;
import
com.mortals.xhx.module.task.model.TaskFinishEntity
;
import
com.mortals.xhx.module.task.service.TaskFinishService
;
import
org.springframework.util.ObjectUtils
;
/**
* <p>Title: 工作已办表</p>
* <p>Description: TaskFinishService service接口 </p>
* <p>Copyright: Copyright ® </p>
* @version 1.0.0
*/
@Service
(
"taskFinishService"
)
public
class
TaskFinishServiceImpl
extends
AbstractCRUDServiceImpl
<
TaskFinishDao
,
TaskFinishEntity
,
Long
>
implements
TaskFinishService
{
@Autowired
private
IApiFlowTaskFeign
apiFlowTaskFeign
;
@Autowired
private
InterceptorConfig
config
;
@Override
public
Result
<
FlowTaskPdu
>
finishList
(
TaskFinishQuery
query
,
PageInfo
pageInfo
,
Context
context
)
{
FlowTaskPdu
flowTaskPdu
=
new
FlowTaskPdu
();
flowTaskPdu
.
setUserId
(
context
.
getUser
().
getLoginName
());
try
{
if
(!
ObjectUtils
.
isEmpty
(
query
))
{
BeanUtils
.
copyProperties
(
query
,
flowTaskPdu
,
BeanUtil
.
getNullPropertyNames
(
query
));
}
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
resp
=
apiFlowTaskFeign
.
finishedList
(
context
.
getUser
().
getId
().
toString
(),
config
.
getTenantId
(),
pageInfo
);
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"获取已办列表异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"获取已办列表异常:"
+
resp
.
getMsg
());
}
// if (!ObjectUtils.isEmpty(resp.getData())) {
// List<TaskTodoEntity> collect = resp.getData().getList().stream().map(item -> {
// TaskTodoEntity taskTodoEntity = new TaskTodoEntity();
// BeanUtils.copyProperties(item, taskTodoEntity, BeanUtil.getNullPropertyNames(item));
// taskTodoEntity.setProcDefVersion("v" + item.getProcDefVersion());
//
// return taskTodoEntity;
// }).collect(Collectors.toList());
// result.setList(collect);
// result.setPageInfo(resp.getData().getPageInfo());
// } else {
// result.setList(Collections.emptyList());
// }
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/service/impl/TaskProcessServiceImpl.java
View file @
9f3b8ca8
...
...
@@ -5,6 +5,7 @@ import com.mortals.framework.exception.AppException;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.xhx.base.framework.config.InterceptorConfig
;
import
com.mortals.xhx.common.code.FlowStatusEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.pdu.api.ApiRespPdu
;
...
...
@@ -50,6 +51,9 @@ public class TaskProcessServiceImpl extends AbstractCRUDServiceImpl<TaskProcessD
@Autowired
private
FormService
formService
;
@Autowired
private
InterceptorConfig
config
;
@Override
public
Result
<
TaskProcessEntity
>
getProcessList
(
TaskProcessQuery
query
,
PageInfo
pageInfo
,
Context
context
)
{
...
...
@@ -60,7 +64,7 @@ public class TaskProcessServiceImpl extends AbstractCRUDServiceImpl<TaskProcessD
if
(!
ObjectUtils
.
isEmpty
(
query
))
{
BeanUtils
.
copyProperties
(
query
,
flowTaskPdu
,
BeanUtil
.
getNullPropertyNames
(
query
));
}
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
resp
=
apiFlowTaskFeign
.
myProcess
(
context
.
getUser
().
get
LoginName
(),
pageInfo
);
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
resp
=
apiFlowTaskFeign
.
myProcess
(
context
.
getUser
().
get
Id
().
toString
(),
config
.
getTenantId
(),
pageInfo
);
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"获取流程定义列表异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"获取流程定义列表异常:"
+
resp
.
getMsg
());
...
...
@@ -93,7 +97,7 @@ public class TaskProcessServiceImpl extends AbstractCRUDServiceImpl<TaskProcessD
@Override
public
List
<
FlowViewerPdu
>
getFlowViewer
(
String
procInsId
)
{
List
<
FlowViewerPdu
>
flowViewerList
=
n
ew
ArrayList
<>()
;
List
<
FlowViewerPdu
>
flowViewerList
=
n
ull
;
try
{
ApiRespPdu
<
List
<
FlowViewerPdu
>>
resp
=
iApiFlowInstanceFeign
.
getFlowViewer
(
procInsId
);
...
...
@@ -163,12 +167,9 @@ public class TaskProcessServiceImpl extends AbstractCRUDServiceImpl<TaskProcessD
}
// 第一次申请获取初始化表单
if
(!
ObjectUtils
.
isEmpty
(
deployId
))
{
DeployFormQuery
deployFormQuery
=
new
DeployFormQuery
();
deployFormQuery
.
setDeployId
(
deployId
);
FormEntity
formEntity
=
deployFormService
.
find
(
deployFormQuery
,
context
).
stream
().
findFirst
().
map
(
item
->
formService
.
get
(
item
.
getFormId
(),
context
)).
orElseGet
(()
->
null
);
if
(
ObjectUtils
.
isEmpty
(
formEntity
))
{
throw
new
AppException
(
"请先配置流程表单"
);
}
...
...
@@ -185,7 +186,6 @@ public class TaskProcessServiceImpl extends AbstractCRUDServiceImpl<TaskProcessD
@Override
public
String
stopProcess
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
try
{
//FlowTaskPdu flowTaskPdu = JSONObject.parseObject(data, FlowTaskPdu.class);
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
stopProcess
(
flowTaskVoPdu
);
log
.
info
(
"取消申请 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
...
...
@@ -215,36 +215,121 @@ public class TaskProcessServiceImpl extends AbstractCRUDServiceImpl<TaskProcessD
@Override
public
String
reject
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
reject
(
flowTaskVoPdu
);
log
.
info
(
"拒绝任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"拒绝任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"拒绝异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
String
taskReturn
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
taskReturn
(
flowTaskVoPdu
);
log
.
info
(
"回退任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"回退任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"回退任务异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
String
delete
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
delete
(
flowTaskVoPdu
);
log
.
info
(
"取消任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"取消任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"取消异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
String
claim
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
claim
(
flowTaskVoPdu
);
log
.
info
(
"签收任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"签收任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"签收异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
String
unClaim
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
unClaim
(
flowTaskVoPdu
);
log
.
info
(
"拒绝签收任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"拒绝签收任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"拒绝签收异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
String
delegateTask
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
delegateTask
(
flowTaskVoPdu
);
log
.
info
(
"委派任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"委派任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"委派异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
String
assignTask
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
return
null
;
try
{
ApiRespPdu
<
String
>
resp
=
apiFlowTaskFeign
.
assignTask
(
flowTaskVoPdu
);
log
.
info
(
"转办任务 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"转办任务异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"转办异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
@Override
public
List
<
FlowUserTaskPdu
>
getReturnList
(
FlowTaskVoPdu
flowTaskVoPdu
,
Context
context
)
{
try
{
ApiRespPdu
<
List
<
FlowUserTaskPdu
>>
resp
=
apiFlowTaskFeign
.
findReturnTaskList
(
flowTaskVoPdu
);
log
.
info
(
"获取所有可回退的节点 resp:"
+
JSONObject
.
toJSONString
(
resp
));
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"获取所有可回退的节点异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"拒获取所有可回退的节点异常:"
+
resp
.
getMsg
());
}
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
e
.
getMessage
());
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/service/impl/TaskTodoServiceImpl.java
View file @
9f3b8ca8
...
...
@@ -4,6 +4,7 @@ import com.mortals.framework.exception.AppException;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.xhx.base.framework.config.InterceptorConfig
;
import
com.mortals.xhx.common.code.FlowStatusEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.pdu.api.ApiRespPdu
;
...
...
@@ -47,6 +48,8 @@ public class TaskTodoServiceImpl extends AbstractCRUDServiceImpl<TaskTodoDao, Ta
private
DeployFormService
deployFormService
;
@Autowired
private
FormService
formService
;
@Autowired
private
InterceptorConfig
config
;
@Override
...
...
@@ -58,25 +61,11 @@ public class TaskTodoServiceImpl extends AbstractCRUDServiceImpl<TaskTodoDao, Ta
if
(!
ObjectUtils
.
isEmpty
(
query
))
{
BeanUtils
.
copyProperties
(
query
,
flowTaskPdu
,
BeanUtil
.
getNullPropertyNames
(
query
));
}
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
resp
=
apiFlowTaskFeign
.
todoList
(
context
.
getUser
().
get
LoginName
(),
pageInfo
);
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
resp
=
apiFlowTaskFeign
.
todoList
(
context
.
getUser
().
get
Id
().
toString
(),
config
.
getTenantId
(),
pageInfo
);
if
(
YesNoEnum
.
NO
.
getValue
()
==
resp
.
getCode
())
{
log
.
error
(
"获取代办列表异常:"
+
resp
.
getMsg
());
throw
new
AppException
(
"获取代办列表异常:"
+
resp
.
getMsg
());
}
// if (!ObjectUtils.isEmpty(resp.getData())) {
// List<TaskTodoEntity> collect = resp.getData().getList().stream().map(item -> {
// TaskTodoEntity taskTodoEntity = new TaskTodoEntity();
// BeanUtils.copyProperties(item, taskTodoEntity, BeanUtil.getNullPropertyNames(item));
// taskTodoEntity.setProcDefVersion("v" + item.getProcDefVersion());
//
// return taskTodoEntity;
// }).collect(Collectors.toList());
// result.setList(collect);
// result.setPageInfo(resp.getData().getPageInfo());
// } else {
// result.setList(Collections.emptyList());
// }
return
resp
.
getData
();
}
catch
(
Exception
e
)
{
throw
new
AppException
(
"获取代办列表异常:"
+
e
.
getMessage
());
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskFinishController.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.web
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.model.Result
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.module.task.model.TaskFinishEntity
;
import
com.mortals.xhx.module.task.service.TaskFinishService
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* <p>Title: 工作已办表</p>
* <p>Description: TaskFinishController </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
*
* @author zxfei
* @version 1.0.0
*/
@RestController
@RequestMapping
(
"task/finish"
)
public
class
TaskFinishController
extends
BaseCRUDJsonMappingController
<
TaskFinishService
,
TaskFinishForm
,
TaskFinishEntity
,
Long
>
{
public
TaskFinishController
()
{
super
.
setFormClass
(
TaskFinishForm
.
class
);
super
.
setModuleDesc
(
"工作已办表"
);
}
/**
* 查询已办列表
*/
@PostMapping
(
value
=
"list"
)
public
String
list
(
HttpServletRequest
request
,
HttpServletResponse
response
,
TaskFinishForm
form
)
{
Map
<
String
,
Object
>
model
=
new
HashMap
();
JSONObject
ret
=
new
JSONObject
();
int
code
=
VALUE_RESULT_SUCCESS
;
String
busiDesc
=
"查询"
+
this
.
getModuleDesc
();
try
{
Result
result
=
this
.
service
.
finishList
(
form
.
getQuery
(),
form
.
getPageInfo
(),
getContext
());
this
.
init
(
request
,
response
,
form
,
model
,
getContext
());
model
.
put
(
"result"
,
result
.
getList
());
model
.
put
(
"pageInfo"
,
result
.
getPageInfo
());
model
.
putAll
(
form
.
getModel
());
this
.
recordSysLog
(
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"查询已办列表异常"
,
e
);
this
.
doException
(
request
,
busiDesc
,
model
,
e
);
code
=
VALUE_RESULT_FAILURE
;
}
ret
.
put
(
"code"
,
code
);
ret
.
put
(
"query"
,
form
.
getQuery
());
ret
.
put
(
"data"
,
model
);
return
ret
.
toJSONString
();
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskFinishForm.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.web
;
import
com.mortals.framework.web.BaseCRUDFormLong
;
import
com.mortals.xhx.module.task.model.TaskFinishEntity
;
import
com.mortals.xhx.module.task.model.TaskFinishQuery
;
/**
* <p>Title: 工作已办表</p>
* <p>Description: TaskFinishForm </p>
* @author
* @version 1.0.0
*/
public
class
TaskFinishForm
extends
BaseCRUDFormLong
<
TaskFinishEntity
>
{
private
TaskFinishEntity
taskfinish
=
new
TaskFinishEntity
();
private
TaskFinishQuery
query
=
new
TaskFinishQuery
();
public
TaskFinishForm
(){
}
@Override
public
TaskFinishEntity
getEntity
()
{
return
taskfinish
;
}
public
TaskFinishEntity
getTaskFinish
()
{
return
taskfinish
;
}
public
void
setTaskFinish
(
TaskFinishEntity
taskfinish
)
{
this
.
taskfinish
=
taskfinish
;
}
@Override
public
TaskFinishQuery
getQuery
()
{
return
query
;
}
public
void
setQuery
(
TaskFinishQuery
query
)
{
this
.
query
=
query
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskProcessController.java
View file @
9f3b8ca8
...
...
@@ -4,14 +4,14 @@ import com.alibaba.fastjson.JSONObject;
import
com.mortals.framework.common.IBaseEnum
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.Result
;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
com.mortals.xhx.common.code.FlowStateType
;
import
com.mortals.xhx.common.code.FlowStatusEnum
;
import
com.mortals.xhx.common.pdu.flow.FlowNextPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskVoPdu
;
import
com.mortals.xhx.common.pdu.flow.FlowViewerPdu
;
import
com.mortals.xhx.common.pdu.flow.*
;
import
com.mortals.xhx.module.flowable.web.FlowableDefinitionForm
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -27,6 +27,7 @@ import java.util.Collections;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -42,6 +43,9 @@ import java.util.Map;
@RequestMapping
(
"task/process"
)
public
class
TaskProcessController
extends
BaseCRUDJsonMappingController
<
TaskProcessService
,
TaskProcessForm
,
TaskProcessEntity
,
Long
>
{
@Autowired
private
UserService
userService
;
public
TaskProcessController
()
{
super
.
setFormClass
(
TaskProcessForm
.
class
);
super
.
setModuleDesc
(
"流程实例表"
);
...
...
@@ -50,6 +54,9 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
@Override
protected
void
init
(
HttpServletRequest
request
,
HttpServletResponse
response
,
TaskProcessForm
form
,
Map
<
String
,
Object
>
model
,
Context
context
)
{
this
.
addDict
(
model
,
"flowStatus"
,
IBaseEnum
.
getEnumMap
(
FlowStatusEnum
.
class
));
this
.
addDict
(
model
,
"assigneeName"
,
userService
.
find
(
new
UserQuery
(),
getContext
()).
stream
()
.
collect
(
Collectors
.
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getRealName
(),
(
o
,
n
)
->
n
)));
}
/**
...
...
@@ -158,7 +165,7 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
* 获取下一个节点
*/
@PostMapping
(
value
=
"nextFlowNode"
)
public
String
nextFlowNode
(
@ApiParam
(
value
=
"任务数据类"
)
@RequestParam
(
value
=
"data"
)
String
data
)
{
public
String
nextFlowNode
(
@ApiParam
(
value
=
"任务数据类"
)
@RequestParam
(
value
=
"data"
)
String
data
)
{
log
.
info
(
"receive nextFlowNode map:"
+
JSONObject
.
toJSONString
(
data
));
JSONObject
ret
=
new
JSONObject
();
try
{
...
...
@@ -177,7 +184,7 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
* 取消申请
*/
@PostMapping
(
value
=
"stopProcess"
)
public
String
stopProcess
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
public
String
stopProcess
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
this
.
getService
().
stopProcess
(
flowTaskVoPdu
,
getContext
());
...
...
@@ -195,7 +202,7 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
* 审核
*/
@PostMapping
(
value
=
"complete"
)
public
String
complete
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
public
String
complete
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
this
.
getService
().
complete
(
flowTaskVoPdu
,
getContext
());
...
...
@@ -213,7 +220,7 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
* 委派任务
*/
@PostMapping
(
value
=
"delegate"
)
public
String
delegate
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
public
String
delegate
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
this
.
getService
().
delegateTask
(
flowTaskVoPdu
,
getContext
());
...
...
@@ -231,7 +238,7 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
* 退回任务
*/
@PostMapping
(
value
=
"return"
)
public
String
taskRreturn
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
public
String
taskRreturn
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
this
.
getService
().
taskReturn
(
flowTaskVoPdu
,
getContext
());
...
...
@@ -245,14 +252,34 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
return
ret
.
toJSONString
();
}
/**
* 退回任务
*/
@PostMapping
(
value
=
"returnList"
)
public
String
returnList
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
List
<
FlowUserTaskPdu
>
returnList
=
this
.
getService
().
getReturnList
(
flowTaskVoPdu
,
getContext
());
ret
.
put
(
KEY_RESULT_DATA
,
returnList
);
ret
.
put
(
KEY_RESULT_MSG
,
"退回任务成功!"
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
}
catch
(
Exception
e
)
{
log
.
error
(
"退回任务异常"
,
e
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
ret
.
put
(
KEY_RESULT_MSG
,
super
.
convertException
(
e
));
}
return
ret
.
toJSONString
();
}
/**
* 驳回任务
*/
@PostMapping
(
value
=
"reject"
)
public
String
rejectTask
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
public
String
rejectTask
(
@ApiParam
(
value
=
"任务数据类"
)
FlowTaskVoPdu
flowTaskVoPdu
)
{
JSONObject
ret
=
new
JSONObject
();
try
{
this
.
getService
().
reject
(
flowTaskVoPdu
,
getContext
());
ret
.
put
(
KEY_RESULT_MSG
,
"驳回成功!"
);
ret
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
}
catch
(
Exception
e
)
{
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/module/task/web/TaskTodoController.java
View file @
9f3b8ca8
package
com.mortals.xhx.module.task.web
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.common.IBaseEnum
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.Result
;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
com.mortals.xhx.common.code.FlowStatusEnum
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
...
...
@@ -13,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -27,11 +34,20 @@ import java.util.Map;
@RequestMapping
(
"task/todo"
)
public
class
TaskTodoController
extends
BaseCRUDJsonMappingController
<
TaskTodoService
,
TaskTodoForm
,
TaskTodoEntity
,
Long
>
{
@Autowired
private
UserService
userService
;
public
TaskTodoController
(){
super
.
setFormClass
(
TaskTodoForm
.
class
);
super
.
setModuleDesc
(
"工作代办表"
);
}
@Override
protected
void
init
(
HttpServletRequest
request
,
HttpServletResponse
response
,
TaskTodoForm
form
,
Map
<
String
,
Object
>
model
,
Context
context
)
{
this
.
addDict
(
model
,
"startUserName"
,
userService
.
find
(
new
UserQuery
(),
getContext
()).
stream
()
.
collect
(
Collectors
.
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getRealName
(),
(
o
,
n
)
->
n
)));
}
/**
* 查询代办列表
...
...
This diff is collapsed.
Click to expand it.
government-manager/src/main/java/com/mortals/xhx/stream/TaskProcessStreamListener.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.xhx.stream
;
import
com.alibaba.fastjson.JSON
;
import
com.mortals.xhx.base.framework.config.InterceptorConfig
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskNotifyPdu
;
import
com.mortals.xhx.utils.stream.messaging.ProcessTaskSink
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cloud.stream.annotation.StreamListener
;
import
org.springframework.stereotype.Component
;
/**
* @author karlhoo
*/
@CommonsLog
@Component
public
class
TaskProcessStreamListener
{
@Autowired
private
InterceptorConfig
interceptorConfig
;
/**
* 接收流程管理器任务
*/
@StreamListener
(
ProcessTaskSink
.
INPUT
)
public
void
receiveTask
(
FlowTaskNotifyPdu
task
)
{
log
.
info
(
"comsumer message processTask:"
+
JSON
.
toJSONString
(
task
));
if
(
interceptorConfig
.
getTenantId
().
equals
(
task
.
getTenantId
())){
log
.
info
(
"本节点代办任务通知事件"
);
// TODO 通过websocket刷新页面消息
}
}
}
This diff is collapsed.
Click to expand it.
government-manager/src/main/resources/bootstrap.yml
View file @
9f3b8ca8
...
...
@@ -30,6 +30,7 @@ mybatis:
application
:
auth
:
unloginUrl
:
/refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/test*,/api/asset/*,/api/*,/swagger-ui*
uncheckUrl
:
/refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/test*,/api/asset/*,/api/*,/swagger-ui*
unloginUrl
:
/refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/test*,/api/asset/*,/api/*,/ws/*,/swagger-ui*
uncheckUrl
:
/refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/test*,/api/asset/*,/api/*,/ws/*,/swagger-ui*
workflow
:
tenantId
:
${spring.application.name}
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/WorkFlowApplication.java
View file @
9f3b8ca8
...
...
@@ -2,6 +2,7 @@ package com.mortals.flowable;
import
com.mortals.framework.springcloud.boot.BaseWebApplication
;
import
com.mortals.xhx.utils.stream.messaging.ProcessTaskSource
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration
;
...
...
@@ -9,23 +10,16 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
;
import
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.cloud.stream.annotation.EnableBinding
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.ImportResource
;
//@Import(value={GlobalExceptionHandler.class,
// // 引入修改的配置
// ApplicationConfiguration.class,
// AppDispatcherServletConfiguration.class,
// // 引入 DatabaseConfiguration 表更新转换
// DatabaseConfiguration.class
// // 引入 DatabaseConfiguration 表更新转换
// //DatabaseAutoConfiguration.class
//})
@EnableFeignClients
@ComponentScan
(
basePackages
=
{
"com.mortals.*"
})
@MapperScan
(
"com.mortals.*.dao"
)
@SpringBootApplication
(
exclude
=
{
SecurityAutoConfiguration
.
class
,
ManagementWebSecurityAutoConfiguration
.
class
,
SecurityFilterAutoConfiguration
.
class
})
@ImportResource
(
locations
=
{
"classpath:config/spring-config.xml"
})
@EnableBinding
({
ProcessTaskSource
.
class
})
public
class
WorkFlowApplication
extends
BaseWebApplication
{
public
static
void
main
(
String
[]
args
)
{
...
...
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/common/config/FlowableGlobListenerConfig.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.flowable.common.config
;
import
com.mortals.flowable.listener.ProcessInstanceCompleteListener
;
import
com.mortals.flowable.listener.ProcessInstanceStartListener
;
import
com.mortals.flowable.listener.TaskCreateListener
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.flowable.common.engine.api.delegate.event.FlowableEngineEventType
;
import
org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher
;
import
org.flowable.engine.RuntimeService
;
import
org.flowable.engine.impl.event.logger.handler.ProcessInstanceStartedEventHandler
;
import
org.flowable.spring.SpringProcessEngineConfiguration
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationListener
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.event.ContextRefreshedEvent
;
/**
* 全局监听配置 ContextRefreshedEvent在类被初始化之后触发
*/
@Configuration
@CommonsLog
public
class
FlowableGlobListenerConfig
implements
ApplicationListener
<
ContextRefreshedEvent
>
{
@Autowired
private
SpringProcessEngineConfiguration
configuration
;
@Autowired
private
ProcessInstanceCompleteListener
processInstanceCompleteListener
;
@Autowired
private
ProcessInstanceStartListener
processInstanceStartListener
;
@Autowired
private
RuntimeService
runtimeService
;
@Autowired
private
TaskCreateListener
taskCreateListener
;
@Override
public
void
onApplicationEvent
(
ContextRefreshedEvent
event
)
{
FlowableEventDispatcher
dispatcher
=
configuration
.
getEventDispatcher
();
// 任务创建全局监听-待办消息发送
runtimeService
.
addEventListener
(
taskCreateListener
,
FlowableEngineEventType
.
TASK_CREATED
);
//任务完成全局监听
// dispatcher.addEventListener(activityCompleteListener, FlowableEngineEventType.TASK_CREATED);
runtimeService
.
addEventListener
(
processInstanceStartListener
,
FlowableEngineEventType
.
PROCESS_STARTED
);
runtimeService
.
addEventListener
(
processInstanceCompleteListener
,
FlowableEngineEventType
.
PROCESS_COMPLETED
);
log
.
info
(
"全局监听配置"
);
}
}
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/common/config/FlowableListenerConfig.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.flowable.common.config
;
import
com.google.common.collect.Maps
;
import
com.mortals.flowable.listener.ProcessEndListener
;
import
org.flowable.common.engine.api.delegate.event.FlowableEventListener
;
import
org.flowable.spring.SpringProcessEngineConfiguration
;
import
org.flowable.spring.boot.EngineConfigurationConfigurer
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author: zxfei
* @date: 2021/8/10 0:30
* @description:
**/
//@Configuration
public
class
FlowableListenerConfig
{
// flowable监听级别参照 {@link FlowableEngineEventType} org.flowable.common.engine.api.delegate.event
/**
* 任务节点前置监听
*/
private
static
final
String
FLOWABLE_TASK_NODE_REAR_LISTENER
=
"TASK_COMPLETED"
;
private
static
final
String
FLOWABLE_TASK_NODE_BEFORE_LISTENER
=
"TASK_COMPLETED"
;
// 自己建立监听类实现FlowableEventListener接口
/**
* 任务节点前置监听
*/
private
final
ProcessEndListener
taskBeforeListener
;
@Autowired
public
FlowableListenerConfig
(
ProcessEndListener
taskBeforeListener
)
{
this
.
taskBeforeListener
=
taskBeforeListener
;
}
/**
* 将自定义监听器纳入flowable监听
*
* @param
* @return org.flowable.spring.boot.EngineConfigurationConfigurer<org.flowable.spring.SpringProcessEngineConfiguration>
* @author: Lu Yang
* @date: 2019/5/4 21:05
*/
@Bean
public
EngineConfigurationConfigurer
<
SpringProcessEngineConfiguration
>
globalListenerConfigurer
()
{
return
engineConfiguration
->
{
engineConfiguration
.
setTypedEventListeners
(
this
.
customFlowableListeners
());
};
}
private
Map
<
String
,
List
<
FlowableEventListener
>>
customFlowableListeners
()
{
Map
<
String
,
List
<
FlowableEventListener
>>
listenerMap
=
Maps
.
newHashMap
();
listenerMap
.
put
(
FLOWABLE_TASK_NODE_BEFORE_LISTENER
,
new
ArrayList
<>(
Collections
.
singletonList
(
getTaskBeforeListener
())));
return
listenerMap
;
}
public
ProcessEndListener
getTaskBeforeListener
()
{
return
taskBeforeListener
;
}
}
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/listener/ProcessEndListener.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.flowable.listener
;
import
com.alibaba.fastjson.JSON
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.flowable.bpmn.model.FlowElement
;
import
org.flowable.common.engine.api.delegate.event.FlowableEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEventListener
;
import
org.flowable.common.engine.impl.event.FlowableEntityEventImpl
;
import
org.flowable.engine.impl.util.ProcessDefinitionUtil
;
import
org.flowable.task.service.impl.persistence.entity.TaskEntity
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* @author: zxfei
* @date: 2021/8/10 0:24
* @description: 全局监听器
**/
//@Component
@CommonsLog
public
class
ProcessEndListener
implements
FlowableEventListener
{
// @Autowired
// FlowableService flowableService;
@Override
public
void
onEvent
(
FlowableEvent
event
)
{
// 当前节点任务实体,
// TaskEntity taskEntity = (TaskEntity) ((FlowableEntityEventImpl) event).getEntity();
//String taskId = taskEntity.getId();
log
.
info
(
"event taskEntity taskId:"
);
// String curActId = flowableService.getNodeId(taskId);
// String procDefId = ProcUtils.getProcessDefinitionByTaskId(taskEntity.getId()).getId();
// Process process = ProcessDefinitionUtil.getProcess(procDefId);
// //遍历整个process,找到endEventId是什么,与当前taskId作对比
// List<FlowElement> flowElements = (List<FlowElement>) process.getFlowElements();
// for (FlowElement flowElement : flowElements) {
// if (flowElement instanceof SequenceFlow) {
// SequenceFlow flow = (SequenceFlow) flowElement;
// FlowElement sourceFlowElement = flow.getSourceFlowElement();
// FlowElement targetFlowElement = flow.getTargetFlowElement();
// //如果当前边的下一个节点是endEvent,那么获取当前边
// if(targetFlowElement instanceof EndEvent && sourceFlowElement.getId().equals(curActId))
// {
// System.out.println("下一个是结束节点!!");
// }
// }
// }
}
@Override
public
boolean
isFailOnException
()
{
return
false
;
}
@Override
public
boolean
isFireOnTransactionLifecycleEvent
()
{
return
false
;
}
@Override
public
String
getOnTransaction
()
{
return
null
;
}
}
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/listener/ProcessInstanceCompleteListener.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.flowable.listener
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEvent
;
import
org.flowable.engine.FormService
;
import
org.flowable.engine.RuntimeService
;
import
org.flowable.engine.TaskService
;
import
org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
/**
* @author: zxfei
* @date: 2021/8/10 7:23
* @description:
**/
@Component
@CommonsLog
public
class
ProcessInstanceCompleteListener
extends
AbstractFlowableEngineEventListener
{
@Autowired
private
TaskService
taskService
;
@Autowired
private
FormService
formService
;
@Autowired
private
RuntimeService
runtimeService
;
@Override
protected
void
processCompleted
(
FlowableEngineEntityEvent
event
)
{
log
.
info
(
"进入流程结束监听器……"
);
String
processInstanceId
=
event
.
getProcessInstanceId
();
Map
<
String
,
Object
>
variables
=
runtimeService
.
getVariables
(
processInstanceId
);
Map
<
String
,
Object
>
startForm
=
(
Map
<
String
,
Object
>)
variables
.
get
(
"startForm"
);
// Form form = formService..getById(new Long((String) startForm.get("formId")));
log
.
info
(
"variables: "
+
variables
);
log
.
info
(
"startForm: "
+
startForm
);
//System.out.println("form: " + form);
super
.
processCompleted
(
event
);
}
@Override
protected
void
taskCompleted
(
FlowableEngineEntityEvent
event
)
{
log
.
info
(
"进入taskCompleted监听器……"
);
super
.
taskCompleted
(
event
);
}
@Override
public
void
onEvent
(
FlowableEvent
flowableEvent
)
{
log
.
info
(
"进入taskCompleted监听器--onEvent……"
);
super
.
onEvent
(
flowableEvent
);
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/listener/ProcessInstanceStartListener.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.flowable.listener
;
import
lombok.extern.apachecommons.CommonsLog
;
import
org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEvent
;
import
org.flowable.engine.FormService
;
import
org.flowable.engine.RuntimeService
;
import
org.flowable.engine.TaskService
;
import
org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener
;
import
org.flowable.engine.delegate.event.FlowableProcessStartedEvent
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
/**
* @author: zxfei
* @date: 2021/8/10 7:23
* @description:
**/
@Component
@CommonsLog
public
class
ProcessInstanceStartListener
extends
AbstractFlowableEngineEventListener
{
@Autowired
private
TaskService
taskService
;
@Autowired
private
FormService
formService
;
@Autowired
private
RuntimeService
runtimeService
;
@Override
protected
void
processStarted
(
FlowableProcessStartedEvent
event
)
{
log
.
info
(
"流程开始监听器……"
);
super
.
processStarted
(
event
);
}
@Override
protected
void
taskCompleted
(
FlowableEngineEntityEvent
event
)
{
log
.
info
(
"进入taskCompleted监听器……"
);
super
.
taskCompleted
(
event
);
}
@Override
public
void
onEvent
(
FlowableEvent
flowableEvent
)
{
log
.
info
(
"进入taskCompleted监听器--onEvent……"
);
super
.
onEvent
(
flowableEvent
);
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/listener/TaskCreateListener.java
0 → 100644
View file @
9f3b8ca8
package
com.mortals.flowable.listener
;
import
com.alibaba.fastjson.JSON
;
import
com.mortals.xhx.common.pdu.flow.FlowTaskNotifyPdu
;
import
com.mortals.xhx.utils.stream.messaging.ProcessTaskSource
;
import
com.mortals.xhx.utils.stream.service.IMessageService
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.flowable.common.engine.api.delegate.event.FlowableEvent
;
import
org.flowable.common.engine.api.delegate.event.FlowableEventListener
;
import
org.flowable.common.engine.impl.event.FlowableEntityEventImpl
;
import
org.flowable.engine.TaskService
;
import
org.flowable.identitylink.api.IdentityLink
;
import
org.flowable.task.service.impl.persistence.entity.TaskEntity
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cloud.stream.annotation.EnableBinding
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 全局监听-工作流待办消息提醒
*
* @author azhuzhu
*/
@Slf4j
@Component
@RequiredArgsConstructor
@EnableBinding
(
ProcessTaskSource
.
class
)
public
class
TaskCreateListener
implements
FlowableEventListener
{
@Autowired
private
final
TaskService
taskService
;
@Autowired
@SuppressWarnings
(
"all"
)
private
IMessageService
messageService
;
@Autowired
@SuppressWarnings
(
"all"
)
private
ProcessTaskSource
processTaskSource
;
@Override
public
void
onEvent
(
FlowableEvent
flowableEvent
)
{
log
.
info
(
"任务创建事件全局监听!"
);
TaskEntity
taskEntity
=
(
TaskEntity
)
((
FlowableEntityEventImpl
)
flowableEvent
).
getEntity
();
String
taskId
=
taskEntity
.
getId
();
List
<
IdentityLink
>
idList
=
taskService
.
getIdentityLinksForTask
(
taskId
);
if
(
CollectionUtils
.
isEmpty
(
idList
))
{
log
.
info
(
"idList is null!"
);
return
;
}
List
<
String
>
userNameList
=
new
ArrayList
<>();
// 获取接收人,此处从Identity获取,实际情况会更复杂
idList
.
forEach
(
identityLink
->
{
if
(
StringUtils
.
isNotBlank
(
identityLink
.
getUserId
()))
{
userNameList
.
add
(
identityLink
.
getUserId
());
}
});
if
(
CollectionUtils
.
isNotEmpty
(
userNameList
))
{
// TODO: kafka发送提醒消息
String
tenantId
=
taskEntity
.
getTenantId
();
log
.
info
(
String
.
format
(
"userNameList:%s,tenantId:%s"
,
JSON
.
toJSONString
(
userNameList
),
tenantId
));
FlowTaskNotifyPdu
flowTaskNotifyPdu
=
new
FlowTaskNotifyPdu
();
flowTaskNotifyPdu
.
setUserNameList
(
userNameList
);
flowTaskNotifyPdu
.
setTaskId
(
taskEntity
.
getId
());
flowTaskNotifyPdu
.
setTaskName
(
taskEntity
.
getName
());
flowTaskNotifyPdu
.
setTenantId
(
tenantId
);
log
.
info
(
"发送代办任务消息:"
+
JSON
.
toJSONString
(
flowTaskNotifyPdu
));
messageService
.
sendMessage
(
processTaskSource
.
output
(),
JSON
.
toJSONString
(
flowTaskNotifyPdu
));
}
}
@Override
public
boolean
isFailOnException
()
{
return
false
;
}
@Override
public
boolean
isFireOnTransactionLifecycleEvent
()
{
return
false
;
}
@Override
public
String
getOnTransaction
()
{
return
null
;
}
}
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/service/FlowDefinitionServiceImpl.java
View file @
9f3b8ca8
...
...
@@ -42,7 +42,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IAp
private
static
final
String
BPMN_FILE_SUFFIX
=
".bpmn"
;
@Override
public
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
list
(
String
userId
,
PageInfo
pageInfo
)
{
public
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
list
(
String
userId
,
String
tenantId
,
PageInfo
pageInfo
)
{
log
.
info
(
String
.
format
(
"查询流程列表 userId:%s,PageInfo:%s"
,
JSON
.
toJSONString
(
userId
),
JSON
.
toJSONString
(
pageInfo
)));
ApiRespPdu
<
Result
<
FlowProcDefPdu
>>
rsp
=
new
ApiRespPdu
<>();
...
...
@@ -51,6 +51,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IAp
// 流程定义列表数据查询
ProcessDefinitionQuery
processDefinitionQuery
=
repositoryService
.
createProcessDefinitionQuery
()
.
processDefinitionTenantId
(
tenantId
)
.
orderByProcessDefinitionId
().
desc
();
Long
totalCount
=
processDefinitionQuery
.
count
();
pageInfo
.
setTotalResult
(
totalCount
.
intValue
());
...
...
@@ -80,13 +81,13 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IAp
}
@Override
public
ApiRespPdu
<
String
>
save
(
String
name
,
String
category
,
String
bpmnXml
)
{
public
ApiRespPdu
<
String
>
save
(
String
name
,
String
category
,
String
bpmnXml
,
String
tenantId
)
{
log
.
info
(
String
.
format
(
"保存bpmnXml!name:%s,category:%s"
,
name
,
category
));
ApiRespPdu
<
String
>
rsp
=
new
ApiRespPdu
<>();
rsp
.
setCode
(
YesNoEnum
.
YES
.
getValue
());
try
{
Deployment
deploy
=
repositoryService
.
createDeployment
().
addString
(
name
+
BPMN_FILE_SUFFIX
,
bpmnXml
).
name
(
name
).
category
(
category
).
deploy
();
Deployment
deploy
=
repositoryService
.
createDeployment
().
addString
(
name
+
BPMN_FILE_SUFFIX
,
bpmnXml
).
name
(
name
).
category
(
category
).
tenantId
(
tenantId
).
deploy
();
ProcessDefinition
definition
=
repositoryService
.
createProcessDefinitionQuery
().
deploymentId
(
deploy
.
getId
()).
singleResult
();
repositoryService
.
setProcessDefinitionCategory
(
definition
.
getId
(),
category
);
...
...
@@ -101,12 +102,13 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IAp
}
@Override
public
ApiRespPdu
<
String
>
start
(
String
deployId
,
String
userId
,
String
dataKey
,
Map
<
String
,
Object
>
variables
)
{
log
.
info
(
String
.
format
(
"启动!deployId:%s,userId:%s,dataKey:%s,variables:%s"
,
deployId
,
userId
,
dataKey
,
JSON
.
toJSONString
(
variables
)));
public
ApiRespPdu
<
String
>
start
(
String
deployId
,
String
tenantId
,
String
userId
,
String
dataKey
,
Map
<
String
,
Object
>
variables
)
{
log
.
info
(
String
.
format
(
"
流程实例
启动!deployId:%s,userId:%s,dataKey:%s,variables:%s"
,
deployId
,
userId
,
dataKey
,
JSON
.
toJSONString
(
variables
)));
ApiRespPdu
<
String
>
rsp
=
new
ApiRespPdu
<>();
rsp
.
setCode
(
YesNoEnum
.
YES
.
getValue
());
try
{
ProcessDefinition
processDefinition
=
repositoryService
.
createProcessDefinitionQuery
().
processDefinitionId
(
deployId
)
.
processDefinitionTenantId
(
tenantId
)
.
latestVersion
().
singleResult
();
if
(!
ObjectUtils
.
isEmpty
(
processDefinition
)
&&
processDefinition
.
isSuspended
())
{
rsp
.
setCode
(
YesNoEnum
.
NO
.
getValue
());
...
...
@@ -139,14 +141,12 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IAp
}
@Override
public
ApiRespPdu
<
String
>
updateState
(
Integer
state
,
String
deployId
)
{
public
ApiRespPdu
<
String
>
updateState
(
Integer
state
,
String
deployId
,
String
tenantId
)
{
log
.
info
(
String
.
format
(
"激活或挂起流程定义!deployId:%s,state:%s"
,
deployId
,
state
));
ApiRespPdu
<
String
>
rsp
=
new
ApiRespPdu
<>();
rsp
.
setCode
(
YesNoEnum
.
YES
.
getValue
());
try
{
ProcessDefinition
procDef
=
repositoryService
.
createProcessDefinitionQuery
().
deploymentId
(
deployId
).
singleResult
();
ProcessDefinition
procDef
=
repositoryService
.
createProcessDefinitionQuery
().
processDefinitionTenantId
(
tenantId
).
deploymentId
(
deployId
).
singleResult
();
// 激活
if
(
state
==
1
)
{
repositoryService
.
activateProcessDefinitionById
(
procDef
.
getId
(),
true
,
null
);
...
...
This diff is collapsed.
Click to expand it.
government-workflow/src/main/java/com/mortals/flowable/service/FlowTaskServiceImpl.java
View file @
9f3b8ca8
...
...
@@ -55,7 +55,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
@Override
public
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
myProcess
(
String
userId
,
PageInfo
pageInfo
)
{
public
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
myProcess
(
String
userId
,
String
tenantId
,
PageInfo
pageInfo
)
{
log
.
info
(
String
.
format
(
"查询我的流程列表!query userId:%s,PageInfo:%s"
,
JSON
.
toJSONString
(
userId
),
JSON
.
toJSONString
(
pageInfo
)));
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
rsp
=
new
ApiRespPdu
<>();
Result
<
FlowTaskPdu
>
result
=
new
Result
<>();
...
...
@@ -63,6 +63,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
try
{
List
<
HistoricProcessInstance
>
historicProcessInstances
=
historyService
.
createHistoricProcessInstanceQuery
()
.
startedBy
(
userId
)
.
processInstanceTenantId
(
tenantId
)
.
orderByProcessInstanceStartTime
()
.
desc
()
.
listPage
(
pageInfo
.
getCurrPage
()
-
1
,
pageInfo
.
getPrePageResult
());
...
...
@@ -85,6 +86,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
// 流程定义信息
ProcessDefinition
pd
=
repositoryService
.
createProcessDefinitionQuery
()
.
processDefinitionId
(
hisIns
.
getProcessDefinitionId
())
.
processDefinitionTenantId
(
tenantId
)
.
singleResult
();
flowTask
.
setDeployId
(
pd
.
getDeploymentId
());
flowTask
.
setProcDefName
(
pd
.
getName
());
...
...
@@ -127,7 +129,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
}
}
else
{
List
<
HistoricTaskInstance
>
historicTaskInstance
=
historyService
.
createHistoricTaskInstanceQuery
().
processInstanceId
(
hisIns
.
getId
()).
orderByHistoricTaskInstanceEndTime
().
desc
().
list
();
List
<
HistoricTaskInstance
>
historicTaskInstance
=
historyService
.
createHistoricTaskInstanceQuery
()
.
processInstanceId
(
hisIns
.
getId
())
.
orderByHistoricTaskInstanceEndTime
().
desc
().
list
();
flowTask
.
setTaskId
(
historicTaskInstance
.
get
(
0
).
getId
());
}
flowList
.
add
(
flowTask
);
...
...
@@ -253,16 +257,17 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
}
@Override
public
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
todoList
(
String
userId
,
PageInfo
pageInfo
)
{
log
.
info
(
String
.
format
(
"查询我的代办列表!query userId:%s,
PageInfo:%s"
,
JSON
.
toJSONString
(
userId
)
,
JSON
.
toJSONString
(
pageInfo
)));
public
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
todoList
(
String
userId
,
String
tenantId
,
PageInfo
pageInfo
)
{
log
.
info
(
String
.
format
(
"查询我的代办列表!query userId:%s,
tenantId:%s,PageInfo:%s"
,
JSON
.
toJSONString
(
userId
),
tenantId
,
JSON
.
toJSONString
(
pageInfo
)));
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
rsp
=
new
ApiRespPdu
<>();
Result
<
FlowTaskPdu
>
result
=
new
Result
<>();
rsp
.
setCode
(
YesNoEnum
.
YES
.
getValue
());
try
{
TaskQuery
taskQuery
=
taskService
.
createTaskQuery
()
.
active
()
.
taskTenantId
(
tenantId
)
.
includeProcessVariables
()
//
.taskAssignee(userId)
.
taskAssignee
(
userId
)
.
orderByTaskCreateTime
().
desc
();
pageInfo
.
setTotalResult
(((
Long
)
taskQuery
.
count
()).
intValue
());
...
...
@@ -306,18 +311,17 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
}
@Override
public
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
finishedList
(
String
userId
,
PageInfo
pageInfo
)
{
log
.
info
(
String
.
format
(
"查询我的已办列表!query userId:%s,
PageInfo:%s"
,
JSON
.
toJSONString
(
userId
)
,
JSON
.
toJSONString
(
pageInfo
)));
public
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
finishedList
(
String
userId
,
String
tenantId
,
PageInfo
pageInfo
)
{
log
.
info
(
String
.
format
(
"查询我的已办列表!query userId:%s,
tenantId:%s,PageInfo:%s"
,
JSON
.
toJSONString
(
userId
),
tenantId
,
JSON
.
toJSONString
(
pageInfo
)));
ApiRespPdu
<
Result
<
FlowTaskPdu
>>
rsp
=
new
ApiRespPdu
<>();
Result
<
FlowTaskPdu
>
result
=
new
Result
<>();
rsp
.
setCode
(
YesNoEnum
.
YES
.
getValue
());
try
{
HistoricTaskInstanceQuery
taskInstanceQuery
=
historyService
.
createHistoricTaskInstanceQuery
()
.
includeProcessVariables
()
.
finished
()
.
taskAssignee
(
userId
.
toString
())
.
taskTenantId
(
tenantId
)
.
taskAssignee
(
userId
)
.
orderByHistoricTaskInstanceEndTime
()
.
desc
();
List
<
HistoricTaskInstance
>
historicTaskInstanceList
=
taskInstanceQuery
.
listPage
(
pageInfo
.
getCurrPage
()
-
1
,
pageInfo
.
getPrePageResult
());
...
...
@@ -337,6 +341,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
// 流程定义信息
ProcessDefinition
pd
=
repositoryService
.
createProcessDefinitionQuery
()
.
processDefinitionId
(
histTask
.
getProcessDefinitionId
())
.
processDefinitionTenantId
(
tenantId
)
.
singleResult
();
flowTask
.
setDeployId
(
pd
.
getDeploymentId
());
flowTask
.
setProcDefName
(
pd
.
getName
());
...
...
@@ -347,6 +352,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
// 流程发起人信息
HistoricProcessInstance
historicProcessInstance
=
historyService
.
createHistoricProcessInstanceQuery
()
.
processInstanceId
(
histTask
.
getProcessInstanceId
())
.
processInstanceTenantId
(
tenantId
)
.
singleResult
();
flowTask
.
setStartUserId
(
historicProcessInstance
.
getStartUserId
());
flowTask
.
setStartUserName
(
historicProcessInstance
.
getStartUserId
());
...
...
@@ -437,7 +443,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
rsp
.
setCode
(
YesNoEnum
.
YES
.
getValue
());
try
{
// 流程变量
HistoricTaskInstance
historicTaskInstance
=
historyService
.
createHistoricTaskInstanceQuery
().
includeProcessVariables
().
finished
().
taskId
(
taskId
).
singleResult
();
HistoricTaskInstance
historicTaskInstance
=
historyService
.
createHistoricTaskInstanceQuery
()
.
includeProcessVariables
()
.
finished
()
.
taskId
(
taskId
).
singleResult
();
if
(
Objects
.
nonNull
(
historicTaskInstance
))
{
rsp
.
setData
(
historicTaskInstance
.
getProcessVariables
());
}
else
{
...
...
@@ -461,7 +470,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
try
{
Task
task
=
taskService
.
createTaskQuery
().
taskId
(
flowTaskPdu
.
getTaskId
()).
singleResult
();
Task
task
=
taskService
.
createTaskQuery
()
.
taskId
(
flowTaskPdu
.
getTaskId
())
// .taskTenantId(flowTaskPdu.getTenantId())
.
singleResult
();
if
(
ObjectUtils
.
isEmpty
(
task
))
{
log
.
error
(
"任务不存在"
);
rsp
.
setCode
(
YesNoEnum
.
NO
.
getValue
());
...
...
@@ -500,8 +512,12 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
}
// 当前任务 task
Task
task
=
taskService
.
createTaskQuery
().
taskId
(
flowTaskPdu
.
getTaskId
()).
singleResult
();
// 获取流程定义信息
ProcessDefinition
processDefinition
=
repositoryService
.
createProcessDefinitionQuery
().
processDefinitionId
(
task
.
getProcessDefinitionId
()).
singleResult
();
ProcessDefinition
processDefinition
=
repositoryService
.
createProcessDefinitionQuery
()
.
processDefinitionId
(
task
.
getProcessDefinitionId
())
.
processDefinitionTenantId
(
task
.
getTenantId
())
.
singleResult
();
// 获取所有节点信息
Process
process
=
repositoryService
.
getBpmnModel
(
processDefinition
.
getId
()).
getProcesses
().
get
(
0
);
// 获取全部节点列表,包含子节点
...
...
@@ -532,7 +548,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
List
<
String
>
parentUserTaskKeyList
=
new
ArrayList
<>();
parentUserTaskList
.
forEach
(
item
->
parentUserTaskKeyList
.
add
(
item
.
getId
()));
// 获取全部历史节点活动实例,即已经走过的节点历史,数据采用开始时间升序
List
<
HistoricTaskInstance
>
historicTaskInstanceList
=
historyService
.
createHistoricTaskInstanceQuery
().
processInstanceId
(
task
.
getProcessInstanceId
()).
orderByHistoricTaskInstanceStartTime
().
asc
().
list
();
List
<
HistoricTaskInstance
>
historicTaskInstanceList
=
historyService
.
createHistoricTaskInstanceQuery
()
.
processInstanceId
(
task
.
getProcessInstanceId
())
.
taskTenantId
(
task
.
getTenantId
())
.
orderByHistoricTaskInstanceStartTime
().
asc
().
list
();
// 数据清洗,将回滚导致的脏数据清洗掉
List
<
String
>
lastHistoricTaskInstanceList
=
FlowableUtils
.
historicTaskInstanceClean
(
allElements
,
historicTaskInstanceList
);
// 此时历史任务实例为倒序,获取最后走的节点
...
...
@@ -600,8 +619,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IApiFlowT
if
(
targetIds
.
size
()
>
1
)
{
// 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多)
runtimeService
.
createChangeActivityStateBuilder
()
.
processInstanceId
(
task
.
getProcessInstanceId
())
.
moveSingleActivityIdToActivityIds
(
currentIds
.
get
(
0
),
targetIds
).
changeState
();
.
processInstanceId
(
task
.
getProcessInstanceId
())
.
moveSingleActivityIdToActivityIds
(
currentIds
.
get
(
0
),
targetIds
).
changeState
();
}
// 如果父级任务只有一个,因此当前任务可能为网关中的任务
if
(
targetIds
.
size
()
==
1
)
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment