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
Aug 11, 2021
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
工作流添加websocket相关
parent
b41bafcd
Changes
88
Hide 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>
...
...
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
;
}
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
;
}
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
;
}
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,12 +43,13 @@ 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
);
/**
* 启动流程
*
* @param procDefId
部署的流程 Id,来自 ACT_RE_PROCDEF
* @param procDefId 部署的流程 Id,来自 ACT_RE_PROCDEF
* @param userId 业务发起人
* @param dataKey 业务数据 Key,业务键,一般为表单数据的 ID,仅作为表单数据与流程实例关联的依据
* @param variables 变量集合,json对象
...
...
@@ -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
);
/**
* 删除流程
...
...
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
);
/**
...
...
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);
}
*/
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;
// }
// }
//}
//
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"
,
...
...
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>
...
...
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',
...
...
@@ -89,7 +85,9 @@ 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',
...
...
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',
...
...
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',
...
...
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',
...
...
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
,
...
...
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
'
},
{
...
...
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
'
),
// 设备管理-连接历史
//在此添加业务模块
...
...
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
.
title
=
"
流程图
"
;
this
.
readImage
.
open
=
true
;
// this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
// 发送请求,获取xml
// readXml(deploymentId).then(res =>{
// this.xmlData = res.data
// })
// 发送请求,获取xml
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
}
...
...
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"
>
...
...
@@ -23,48 +27,59 @@
</pre>
</div>
</el-dialog>
</div>
</div>
</
template
>
<
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],
// 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
);
// 发送请求,获取xml
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 =>{
// 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.groups = res.data;
// });
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.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
>
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
},
{
...
...
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
();
})
},
...
...
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
();
}
},
...
...
government-manage-ui/admin/src/views/system/param/show.vue
View file @
9f3b8ca8
<
template
>
<layout-form>
<el-form
:model=
"form"
:loading=
"loading"
:rules=
"rules"
size=
'small'
label-width=
'100px'
ref=
"form"
:model=
"form"
:loading=
"loading"
:rules=
"rules"
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
],
async
created
()
{
this
.
$post
(
"
/data/area/list
"
,
{
"
query.id
"
:
1431
},
{})
.
then
((
res
)
=>
{
const
data
=
res
.
data
.
result
.
map
((
i
)
=>
{
console
.
log
(
i
);
return
{
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
{
toString
:
[
'
validStatus
'
,
'
modStatus
'
,
'
displayType
'
],
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
'
},],
name
:
[{
required
:
true
,
message
:
"
请输入参数名称
"
,
trigger
:
"
blur
"
}],
paramKey
:
[
{
required
:
true
,
message
:
"
请输入参数键
"
,
trigger
:
"
blur
"
},
],
paramValue
:
[
{
required
:
true
,
message
:
"
请输入参数值
"
,
trigger
:
"
blur
"
},
],
},
}
}
}
}
;
}
,
}
;
</
script
>
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'
/>
...
...
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"
>
...
...
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"
/>
...
...
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
=
"
添加表单
"
;
...
...
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"
...
...
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>
...
...
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
)
{
...
...
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
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
;
}
}
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
)
{
...
...
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
<>();
...
...
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
();
}
}
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
;
}
}
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
();
}
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
;
}
}
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
;
}
}
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
;
}
}
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
;
}
}
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
{
}
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
;
}
}
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
;
}
}
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
;
}
}
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
;
}
}
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
;
}
}
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
);
}
}
}
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
();
}
}
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
();
}
}
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
);
...
...
government-manager/src/main/java/com/mortals/xhx/base/system/upload/web/UploadController.java
View file @
9f3b8ca8
...
...
@@ -32,7 +32,7 @@ public class UploadController extends BaseController {
private
UploadService
uploadService
;
@RequestMapping
(
value
=
"upload"
)
public
String
doFileUpload
(
HttpServletRequest
request
,
HttpServletResponse
response
,
UploadForm
form
)
{
public
String
doFileUpload
(
HttpServletRequest
request
,
HttpServletResponse
response
,
UploadForm
form
)
{
Map
<
String
,
Object
>
model
=
new
HashMap
<>();
String
jsonStr
=
""
;
try
{
...
...
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
);
...
...
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
>{
}
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
{
}
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
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
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
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
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
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
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
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
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
;
...
...
@@ -97,7 +98,7 @@ public class FlowableDefinitionController extends BaseCRUDJsonMappingController<
byte
[]
bytes
=
Base64
.
decode
(
base64
);
// uploadService.saveFileUpload()
// uploadService.saveFileUpload()
jsonObject
.
put
(
"src"
,
VALUE_RESULT_SUCCESS
);
jsonObject
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
}
catch
(
Exception
e
)
{
...
...
@@ -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
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
>{
}
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
{
}
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
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
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
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
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
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
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
());
...
...
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
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
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
)));
}
/**
...
...
@@ -112,8 +119,8 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
*/
@PostMapping
(
value
=
"flowRecord"
)
public
String
flowRecord
(
HttpServletRequest
request
,
HttpServletResponse
response
,
@ApiParam
(
value
=
"流程实例id"
)
@RequestParam
(
value
=
"procInsId"
,
required
=
false
)
String
procInsId
,
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"deployId"
,
required
=
false
)
String
deployId
)
{
@ApiParam
(
value
=
"流程实例id"
)
@RequestParam
(
value
=
"procInsId"
,
required
=
false
)
String
procInsId
,
@ApiParam
(
value
=
"流程定义id"
)
@RequestParam
(
value
=
"deployId"
,
required
=
false
)
String
deployId
)
{
log
.
info
(
"receive flowRecord,procInsId:"
+
procInsId
+
" deployId:"
+
deployId
);
Map
<
String
,
Object
>
model
=
new
HashMap
();
...
...
@@ -121,7 +128,7 @@ public class TaskProcessController extends BaseCRUDJsonMappingController<TaskPro
int
code
=
VALUE_RESULT_SUCCESS
;
String
busiDesc
=
"查询"
+
this
.
getModuleDesc
();
try
{
Map
<
String
,
Object
>
record
=
this
.
service
.
flowRecord
(
procInsId
,
deployId
,
getContext
());
Map
<
String
,
Object
>
record
=
this
.
service
.
flowRecord
(
procInsId
,
deployId
,
getContext
());
ret
.
put
(
KEY_RESULT_DATA
,
record
);
this
.
recordSysLog
(
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
...
...
@@ -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
)
{
...
...
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
)));
}
/**
* 查询代办列表
...
...
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刷新页面消息
}
}
}
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}
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
)
{
...
...
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
(
"全局监听配置"
);
}
}
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
;
}
}
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
;
}
}
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
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
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
;
}
}
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
);
...
...
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
)
{
...
...
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