Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
zjsgfa_mysql
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jiangyun
zjsgfa_mysql
Commits
0399f36b
Commit
0399f36b
authored
Feb 13, 2026
by
jiang'yun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改
parent
60d42294
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1255 additions
and
129 deletions
+1255
-129
pom.xml
+57
-0
src/main/java/com/zjsgfa/project/system/service/ISysUserService.java
+1
-0
src/main/java/com/zjsgfa/project/system/service/impl/SysUserServiceImpl.java
+13
-0
src/main/java/com/zjsgfa/project/zjsgfa/controller/BizTodoItemController.java
+2
-0
src/main/java/com/zjsgfa/project/zjsgfa/controller/DjjcLcController.java
+760
-0
src/main/java/com/zjsgfa/project/zjsgfa/controller/SjDjjcController.java
+33
-34
src/main/java/com/zjsgfa/project/zjsgfa/domain/BizTodoItem.java
+4
-0
src/main/java/com/zjsgfa/project/zjsgfa/domain/SjDjjc.java
+37
-1
src/main/java/com/zjsgfa/project/zjsgfa/mapper/BizTodoItemMapper.java
+3
-0
src/main/java/com/zjsgfa/project/zjsgfa/mapper/SjDjjcMapper.java
+5
-0
src/main/java/com/zjsgfa/project/zjsgfa/service/IBizTodoItemService.java
+5
-1
src/main/java/com/zjsgfa/project/zjsgfa/service/ProcessService.java
+10
-0
src/main/java/com/zjsgfa/project/zjsgfa/service/impl/BizTodoItemServiceImpl.java
+66
-56
src/main/java/com/zjsgfa/project/zjsgfa/service/impl/ProcessServiceImpl.java
+86
-0
src/main/java/com/zjsgfa/project/zjsgfa/service/impl/SjFdsgcsServiceImpl.java
+2
-2
src/main/resources/mybatis/zjsgfa/BizTodoItemMapper.xml
+34
-1
src/main/resources/mybatis/zjsgfa/SjDjjcMapper.xml
+137
-34
No files found.
pom.xml
View file @
0399f36b
...
@@ -40,6 +40,9 @@
...
@@ -40,6 +40,9 @@
<logback.version>
1.2.13
</logback.version>
<logback.version>
1.2.13
</logback.version>
<spring-security.version>
5.7.12
</spring-security.version>
<spring-security.version>
5.7.12
</spring-security.version>
<spring-framework.version>
5.3.39
</spring-framework.version>
<spring-framework.version>
5.3.39
</spring-framework.version>
<activiti-spring-boot-starter.version>
7.1.0.M6
</activiti-spring-boot-starter.version>
<batik-transcoder.version>
1.17
</batik-transcoder.version>
<batik-codec.version>
1.17
</batik-codec.version>
</properties>
</properties>
<dependencies>
<dependencies>
...
@@ -323,6 +326,60 @@
...
@@ -323,6 +326,60 @@
<artifactId>
httpclient5
</artifactId>
<artifactId>
httpclient5
</artifactId>
</dependency>
</dependency>
<!-- activiti -->
<dependency>
<groupId>
org.activiti
</groupId>
<artifactId>
activiti-spring-boot-starter
</artifactId>
<version>
${activiti-spring-boot-starter.version}
</version>
<exclusions>
<exclusion>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-actuator-autoconfigure
</artifactId>
</exclusion>
<exclusion>
<artifactId>
mybatis
</artifactId>
<groupId>
org.mybatis
</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- activiti json 转换器 -->
<dependency>
<groupId>
org.activiti
</groupId>
<artifactId>
activiti-json-converter
</artifactId>
<version>
${activiti-spring-boot-starter.version}
</version>
</dependency>
<!-- 流程图预览 -->
<dependency>
<groupId>
org.activiti
</groupId>
<artifactId>
activiti-image-generator
</artifactId>
<version>
${activiti-spring-boot-starter.version}
</version>
<exclusions>
<exclusion>
<groupId>
org.apache.xmlgraphics
</groupId>
<artifactId>
batik-awt-util
</artifactId>
</exclusion>
<exclusion>
<groupId>
org.apache.xmlgraphics
</groupId>
<artifactId>
batik-dom
</artifactId>
</exclusion>
<exclusion>
<groupId>
org.apache.xmlgraphics
</groupId>
<artifactId>
batik-svggen
</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 流程图设计 -->
<dependency>
<groupId>
org.apache.xmlgraphics
</groupId>
<artifactId>
batik-transcoder
</artifactId>
<version>
${batik-transcoder.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.xmlgraphics
</groupId>
<artifactId>
batik-codec
</artifactId>
<version>
${batik-codec.version}
</version>
</dependency>
</dependencies>
</dependencies>
...
...
src/main/java/com/zjsgfa/project/system/service/ISysUserService.java
View file @
0399f36b
...
@@ -208,4 +208,5 @@ public interface ISysUserService
...
@@ -208,4 +208,5 @@ public interface ISysUserService
List
<
String
>
selectUserLoginNamesByRoleKeyDept
(
Long
secondaryUnit
,
String
lcsp1
);
List
<
String
>
selectUserLoginNamesByRoleKeyDept
(
Long
secondaryUnit
,
String
lcsp1
);
List
<
String
>
selectUserLoginNamesByRoleKeyDept2
(
Long
secondaryUnit
,
String
s
);
}
}
src/main/java/com/zjsgfa/project/system/service/impl/SysUserServiceImpl.java
View file @
0399f36b
...
@@ -557,6 +557,19 @@ public class SysUserServiceImpl implements ISysUserService
...
@@ -557,6 +557,19 @@ public class SysUserServiceImpl implements ISysUserService
public
List
<
String
>
selectUserLoginNamesByRoleKeyDept
(
Long
deptId
,
String
roleKey
)
{
public
List
<
String
>
selectUserLoginNamesByRoleKeyDept
(
Long
deptId
,
String
roleKey
)
{
List
<
SysUser
>
userList
=
userMapper
.
selectUserLoginNamesByRoleKeyDept
(
deptId
,
roleKey
);
List
<
SysUser
>
userList
=
userMapper
.
selectUserLoginNamesByRoleKeyDept
(
deptId
,
roleKey
);
List
<
String
>
collect
=
userList
.
stream
().
map
(
SysUser:
:
getUserName
).
collect
(
Collectors
.
toList
());
List
<
String
>
collect
=
userList
.
stream
().
map
(
SysUser:
:
getUserName
).
collect
(
Collectors
.
toList
());
if
(
collect
.
size
()==
0
){
collect
.
add
(
"chenggq58"
);
}
return
collect
;
}
@Override
public
List
<
String
>
selectUserLoginNamesByRoleKeyDept2
(
Long
deptId
,
String
roleKey
)
{
List
<
SysUser
>
userList
=
userMapper
.
selectUserLoginNamesByRoleKeyDept
(
deptId
,
roleKey
);
List
<
String
>
collect
=
userList
.
stream
().
map
(
SysUser:
:
getNickName
).
collect
(
Collectors
.
toList
());
if
(
collect
.
size
()==
0
){
collect
.
add
(
"成冠琪"
);
}
return
collect
;
return
collect
;
}
}
}
}
src/main/java/com/zjsgfa/project/zjsgfa/controller/BizTodoItemController.java
View file @
0399f36b
...
@@ -46,6 +46,7 @@ public class BizTodoItemController extends BaseController
...
@@ -46,6 +46,7 @@ public class BizTodoItemController extends BaseController
startPage
();
startPage
();
bizTodoItem
.
setIsHandle
(
"0"
);
bizTodoItem
.
setIsHandle
(
"0"
);
bizTodoItem
.
setTodoUserId
(
SecurityUtils
.
getUsername
());
bizTodoItem
.
setTodoUserId
(
SecurityUtils
.
getUsername
());
bizTodoItem
.
setOrderBy
(
"todo_time"
);
List
<
BizTodoItem
>
list
=
bizTodoItemService
.
selectBizTodoItemList
(
bizTodoItem
);
List
<
BizTodoItem
>
list
=
bizTodoItemService
.
selectBizTodoItemList
(
bizTodoItem
);
return
getDataTable
(
list
);
return
getDataTable
(
list
);
}
}
...
@@ -57,6 +58,7 @@ public class BizTodoItemController extends BaseController
...
@@ -57,6 +58,7 @@ public class BizTodoItemController extends BaseController
startPage
();
startPage
();
bizTodoItem
.
setIsHandle
(
"1"
);
bizTodoItem
.
setIsHandle
(
"1"
);
bizTodoItem
.
setTodoUserId
(
SecurityUtils
.
getUsername
());
bizTodoItem
.
setTodoUserId
(
SecurityUtils
.
getUsername
());
bizTodoItem
.
setOrderBy
(
"handle_time"
);
List
<
BizTodoItem
>
list
=
bizTodoItemService
.
selectBizTodoItemList
(
bizTodoItem
);
List
<
BizTodoItem
>
list
=
bizTodoItemService
.
selectBizTodoItemList
(
bizTodoItem
);
return
getDataTable
(
list
);
return
getDataTable
(
list
);
}
}
...
...
src/main/java/com/zjsgfa/project/zjsgfa/controller/DjjcLcController.java
0 → 100644
View file @
0399f36b
package
com
.
zjsgfa
.
project
.
zjsgfa
.
controller
;
import
com.zjsgfa.common.utils.DateUtils
;
import
com.zjsgfa.common.utils.SecurityUtils
;
import
com.zjsgfa.common.utils.ServletUtils
;
import
com.zjsgfa.common.utils.StringUtils
;
import
com.zjsgfa.framework.web.domain.AjaxResult
;
import
com.zjsgfa.project.system.domain.SysDept
;
import
com.zjsgfa.project.system.mapper.SysDeptMapper
;
import
com.zjsgfa.project.system.service.ISysUserService
;
import
com.zjsgfa.project.zjsgfa.domain.BizTodoItem
;
import
com.zjsgfa.project.zjsgfa.domain.SjDjjc
;
import
com.zjsgfa.project.zjsgfa.mapper.SjDjjcMapper
;
import
com.zjsgfa.project.zjsgfa.service.IBizTodoItemService
;
import
com.zjsgfa.project.zjsgfa.service.ProcessService
;
import
org.activiti.engine.RuntimeService
;
import
org.activiti.engine.TaskService
;
import
org.activiti.engine.runtime.ProcessInstance
;
import
org.activiti.engine.task.Task
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.xml.ws.soap.Addressing
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@RestController
@RequestMapping
(
"/sjdjlc"
)
public
class
DjjcLcController
{
//流程id
private
String
processDefinitionKey
=
"_e666525e-07bb-11f1-9537-803049cc3d25"
;
//钻井液
private
String
processDefinitionKeyZjy
=
"_f2e34959-07db-11f1-9537-803049cc3d25"
;
private
String
processTrend
=
"flowTrend"
;
/** 流程节点 任务书编辑 参数名 */
private
String
taskEditParamName
=
"editor"
;
private
String
Complete_Module
=
"system/sjdjlc"
;
/** 流程节点 审核节点 审核人 参数名 */
private
String
paramName_audit_user
=
"assigneeList"
;
public
static
final
String
GC_AQSP
=
"gc_aqsp"
;
/**
* 工程_站长审批
*/
public
static
final
String
GC_ZZSP
=
"gc_zzsp"
;
/**
* 工程_专家审批
*/
public
static
final
String
GC_ZJSP
=
"gc_zjsp"
;
/**
* 工程_首席专家
*/
public
static
final
String
GC_SXZJ
=
"gc_sxzj"
;
/**
* 工程_分管领导
*/
public
static
final
String
GC_FGLD
=
"gc_fgld"
;
/**
* 钻井液_安全审批
*/
public
static
final
String
ZJY_AQSP
=
"zjy_aqsp"
;
/**
* 钻井液_站长审批
*/
public
static
final
String
ZJY_ZZSP
=
"zjy_zzsp"
;
/**
* 钻井液_专家审批
*/
public
static
final
String
ZJY_ZJSP
=
"zjy_zjsp"
;
/**
* 钻井液_首席专家
*/
public
static
final
String
ZJY_SXZJ
=
"zjy_sxzj"
;
/**
* 钻井液_分管领导
*/
public
static
final
String
ZJY_FGLD
=
"zjy_fgld"
;
@Autowired
private
SjDjjcMapper
sjDjjcMapper
;
@Autowired
RuntimeService
runtimeService
;
@Autowired
private
TaskService
taskService
;
@Autowired
private
ISysUserService
userService
;
@Autowired
private
SysDeptMapper
sysDeptMapper
;
@Autowired
private
IBizTodoItemService
bizTodoItemService
;
@Autowired
private
ProcessService
processService
;
/**
* 根据流程id查询详情
* @param instanceId
* @return
*/
@GetMapping
(
"/getInfo/{instanceId}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"instanceId"
)
String
instanceId
)
{
SjDjjc
sjDjjc
=
sjDjjcMapper
.
selectSjDjjcByinstanceId
(
instanceId
);
return
AjaxResult
.
success
(
sjDjjc
);
}
/**
* 根据流程id查询详情
* @param instanceId
* @return
*/
@GetMapping
(
"/getInfoZjy/{instanceId}"
)
public
AjaxResult
getInfoZjy
(
@PathVariable
(
"instanceId"
)
String
instanceId
)
{
SjDjjc
sjDjjc
=
sjDjjcMapper
.
selectSjDjjcByinstanceIdZjy
(
instanceId
);
return
AjaxResult
.
success
(
sjDjjc
);
}
@GetMapping
(
"/submitApply"
)
public
AjaxResult
getDjjcLc
(
Long
ID
)
{
SjDjjc
sjDjjc
=
sjDjjcMapper
.
selectSjDjjcById
(
ID
);
String
businessKey
=
sjDjjc
.
getId
().
toString
();
String
applyUserId
=
SecurityUtils
.
getUsername
();
String
itemName
=
"工程方案审核"
;
String
itemContent
=
sjDjjc
.
getJh
()+
"工程方案审核"
;
Map
<
String
,
Object
>
variables
=
new
HashMap
<>();
// 设置下一节点处理人
// 下一节点任务书编辑 处理人为提交者
variables
.
put
(
taskEditParamName
,
applyUserId
);
// 设置下一节点审核人 设置userId
// 启动流程时设置业务 key
ProcessInstance
instance
=
runtimeService
.
startProcessInstanceByKey
(
processDefinitionKey
,
businessKey
,
variables
);
String
processInstanceId
=
instance
.
getId
();
sjDjjc
.
setInstanceId
(
processInstanceId
);
// 建立双向关系
sjDjjc
.
setApplyUser
(
applyUserId
);
sjDjjc
.
setApplyTime
(
DateUtils
.
getNowDate
());
sjDjjc
.
setProcessStatus
(
"审核中"
);
//流程状态1 已经提交
sjDjjc
.
setType
(
processDefinitionKey
);
//流程定义key
sjDjjcMapper
.
updateSjDjjc
(
sjDjjc
);
String
comment
=
""
;
// 下一节点处理人待办事项
bizTodoItemService
.
insertTodoItem
(
instance
.
getProcessInstanceId
(),
itemName
,
itemContent
,
Complete_Module
,
comment
);
autoCompleteFirstSubmit
(
applyUserId
,
processDefinitionKey
,
processInstanceId
,
sjDjjc
);
return
AjaxResult
.
success
();
}
/**
* 完成任务
* @param sjDjjc
* @return
*/
@PostMapping
(
"/complete"
)
public
AjaxResult
complete
(
@RequestBody
SjDjjc
sjDjjc
)
{
try
{
SjDjjc
entity
=
sjDjjcMapper
.
selectSjDjjcByinstanceId
(
sjDjjc
.
getInstanceId
());
String
taskId
=
sjDjjc
.
getTaskId
();
String
instanceId
=
sjDjjc
.
getInstanceId
();
// 使用任务ID,查询任务对象
Task
task
=
taskService
.
createTaskQuery
().
taskId
(
taskId
).
singleResult
();
// 获取当前节点 活动id
String
act_id
=
task
.
getTaskDefinitionKey
();
// 获取审核用户选择的走向 同意 退修 驳回
String
flowTrendOption
=
sjDjjc
.
getFlowTrendOption
();
// 流程的显示标题 取课题名称接后缀任务书审核
String
itemName
=
"工程方案审核"
;
String
itemContent
=
entity
.
getJh
()+
"工程方案审核"
;
// 审核节点每次提交,需要更新业务表信息
SjDjjc
tmpProject
=
new
SjDjjc
();
tmpProject
.
setId
(
entity
.
getId
());
// 获取流程发起人、和所属部门id
String
applyUserId
=
entity
.
getApplyUser
();
Long
applyUserDeptId
=
userService
.
selectUserByLoginName
(
applyUserId
).
getDeptId
();
SysDept
sysDept
=
sysDeptMapper
.
selectDeptById
(
applyUserDeptId
);
Long
secondaryUnit
=
getSecondaryUnit
(
applyUserDeptId
,
sysDept
.
getAncestors
());
if
(
secondaryUnit
==
null
){
secondaryUnit
=
applyUserDeptId
;
}
Map
<
String
,
Object
>
variables
=
new
HashMap
<>();
String
ndxsjg
=
entity
.
getNdxsjg
();
if
(
StringUtils
.
isEmpty
(
ndxsjg
)){
ndxsjg
=
"3"
;
}
// 先判断走向
if
(
"back"
.
equals
(
flowTrendOption
))
{
// 退修
variables
.
put
(
processTrend
,
"退修"
);
// 下一节点任务书编辑 处理人为提交者
variables
.
put
(
taskEditParamName
,
entity
.
getApplyUser
());
// 设置下一节点审核人 设置userId
// 更新 驳回原因字段 存放退修原因
tmpProject
.
setRefuseContent
(
sjDjjc
.
getP_COM_comment
());
tmpProject
.
setProcessStatus
(
"退修"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
if
(
"true"
.
equals
(
flowTrendOption
))
{
// 同意
variables
.
put
(
processTrend
,
"同意"
);
// 根据当前不同的节点,下一节点不同,需要设置的处理人不同
// 下一节点审核节点 处理人为根据角色code取多人 一人处理即可通过
if
(
GC_AQSP
.
equals
(
act_id
))
{
//当前节点 安全审批
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
GC_AQSP
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
else
if
(
GC_ZZSP
.
equals
(
act_id
))
{
//当前节点 站长审批
if
(
ndxsjg
.
equals
(
"3"
)){
variables
.
put
(
processTrend
,
"结束"
);
tmpProject
.
setProcessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
{
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
GC_ZZSP
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
}
else
if
(
GC_ZJSP
.
equals
(
act_id
))
{
//当前节点 站长审批
if
(
ndxsjg
.
equals
(
"5"
)){
variables
.
put
(
processTrend
,
"结束"
);
tmpProject
.
setProcessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
{
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
GC_ZJSP
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
}
else
if
(
GC_SXZJ
.
equals
(
act_id
))
{
//当前节点 站长审批
if
(
ndxsjg
.
equals
(
"7"
)){
variables
.
put
(
processTrend
,
"结束"
);
tmpProject
.
setProcessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
{
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
GC_SXZJ
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
}
else
if
(
GC_FGLD
.
equals
(
act_id
))
{
//当前节点 站长审批
tmpProject
.
setProcessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
}
String
comment
=
""
;
if
(
"true"
.
equals
(
flowTrendOption
))
{
comment
=
"【同意】"
+
sjDjjc
.
getP_COM_comment
();
}
else
if
(
"back"
.
equals
(
flowTrendOption
))
{
comment
=
"【退修】"
+
sjDjjc
.
getP_COM_comment
();
}
else
if
(
"reject"
.
equals
(
flowTrendOption
))
{
comment
=
"【驳回】"
+
sjDjjc
.
getP_COM_comment
();
}
else
{
comment
=
"【提交】"
+
sjDjjc
.
getP_COM_comment
();
}
processService
.
complete
(
sjDjjc
.
getTaskId
(),
instanceId
,
itemName
,
itemContent
,
Complete_Module
,
variables
,
ServletUtils
.
getRequest
(),
comment
);
}
catch
(
Exception
e
)
{
return
AjaxResult
.
error
(
"办理失败"
);
}
return
AjaxResult
.
success
();
}
@GetMapping
(
"/submitApplyZjy"
)
public
AjaxResult
submitApplyZjy
(
Long
ID
)
{
try
{
SjDjjc
sjDjjc
=
sjDjjcMapper
.
selectSjDjjcById
(
ID
);
String
businessKey
=
sjDjjc
.
getId
().
toString
();
String
applyUserId
=
SecurityUtils
.
getUsername
();
String
itemName
=
"钻井液方案审核"
;
String
itemContent
=
sjDjjc
.
getJh
()+
"钻井液方案审核"
;
Map
<
String
,
Object
>
variables
=
new
HashMap
<>();
// 设置下一节点处理人
// 下一节点任务书编辑 处理人为提交者
variables
.
put
(
taskEditParamName
,
applyUserId
);
// 设置下一节点审核人 设置userId
// 启动流程时设置业务 key
ProcessInstance
instance
=
runtimeService
.
startProcessInstanceByKey
(
processDefinitionKeyZjy
,
businessKey
,
variables
);
String
processInstanceId
=
instance
.
getId
();
sjDjjc
.
setZjyinstanceId
(
processInstanceId
);
// 建立双向关系
sjDjjc
.
setZjyapplyUser
(
applyUserId
);
sjDjjc
.
setZjyapplyTime
(
DateUtils
.
getNowDate
());
sjDjjc
.
setZjyprocessStatus
(
"审核中"
);
//流程状态1 已经提交
sjDjjc
.
setZjytype
(
processDefinitionKeyZjy
);
//流程定义key
sjDjjcMapper
.
updateSjDjjc
(
sjDjjc
);
String
comment
=
""
;
// 下一节点处理人待办事项
bizTodoItemService
.
insertTodoItem
(
instance
.
getProcessInstanceId
(),
itemName
,
itemContent
,
Complete_Module
,
comment
);
autoCompleteFirstSubmitZjy
(
applyUserId
,
processDefinitionKeyZjy
,
processInstanceId
,
sjDjjc
);
return
AjaxResult
.
success
();
}
catch
(
Exception
e
)
{
return
AjaxResult
.
error
(
"提交失败"
);
}
}
/**
* 完成任务
* @param sjDjjc
* @return
*/
@PostMapping
(
"/completeZjy"
)
public
AjaxResult
completeZjy
(
@RequestBody
SjDjjc
sjDjjc
)
{
try
{
SjDjjc
entity
=
sjDjjcMapper
.
selectSjDjjcByinstanceIdZjy
(
sjDjjc
.
getInstanceId
());
String
taskId
=
sjDjjc
.
getTaskId
();
String
instanceId
=
sjDjjc
.
getInstanceId
();
// 使用任务ID,查询任务对象
Task
task
=
taskService
.
createTaskQuery
().
taskId
(
taskId
).
singleResult
();
// 获取当前节点 活动id
String
act_id
=
task
.
getTaskDefinitionKey
();
// 获取审核用户选择的走向 同意 退修 驳回
String
flowTrendOption
=
sjDjjc
.
getFlowTrendOption
();
// 流程的显示标题 取课题名称接后缀任务书审核
String
itemName
=
"钻井液方案审核"
;
String
itemContent
=
entity
.
getJh
()+
"钻井液方案审核"
;
// 审核节点每次提交,需要更新业务表信息
SjDjjc
tmpProject
=
new
SjDjjc
();
tmpProject
.
setId
(
entity
.
getId
());
// 获取流程发起人、和所属部门id
String
applyUserId
=
entity
.
getZjyapplyUser
();
Long
applyUserDeptId
=
userService
.
selectUserByLoginName
(
applyUserId
).
getDeptId
();
SysDept
sysDept
=
sysDeptMapper
.
selectDeptById
(
applyUserDeptId
);
Long
secondaryUnit
=
getSecondaryUnit
(
applyUserDeptId
,
sysDept
.
getAncestors
());
if
(
secondaryUnit
==
null
){
secondaryUnit
=
applyUserDeptId
;
}
Map
<
String
,
Object
>
variables
=
new
HashMap
<>();
String
ndxsjg
=
entity
.
getNdxsjg
();
if
(
StringUtils
.
isEmpty
(
ndxsjg
)){
ndxsjg
=
"3"
;
}
// 先判断走向
if
(
"back"
.
equals
(
flowTrendOption
))
{
// 退修
variables
.
put
(
processTrend
,
"退修"
);
// 下一节点任务书编辑 处理人为提交者
variables
.
put
(
taskEditParamName
,
entity
.
getApplyUser
());
// 设置下一节点审核人 设置userId
// 更新 驳回原因字段 存放退修原因
tmpProject
.
setZjyrefuseContent
(
sjDjjc
.
getP_COM_comment
());
tmpProject
.
setZjyprocessStatus
(
"退修"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
if
(
"true"
.
equals
(
flowTrendOption
))
{
// 同意
variables
.
put
(
processTrend
,
"同意"
);
// 根据当前不同的节点,下一节点不同,需要设置的处理人不同
// 下一节点审核节点 处理人为根据角色code取多人 一人处理即可通过
if
(
ZJY_AQSP
.
equals
(
act_id
))
{
//当前节点 安全审批
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
ZJY_AQSP
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
else
if
(
ZJY_ZZSP
.
equals
(
act_id
))
{
//当前节点 站长审批
if
(
ndxsjg
.
equals
(
"3"
)){
variables
.
put
(
processTrend
,
"结束"
);
tmpProject
.
setZjyprocessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
{
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
ZJY_ZZSP
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
}
else
if
(
ZJY_ZJSP
.
equals
(
act_id
))
{
//当前节点 站长审批
if
(
ndxsjg
.
equals
(
"5"
)){
variables
.
put
(
processTrend
,
"结束"
);
tmpProject
.
setZjyprocessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
{
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
ZJY_ZJSP
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
}
else
if
(
ZJY_SXZJ
.
equals
(
act_id
))
{
//当前节点 站长审批
if
(
ndxsjg
.
equals
(
"7"
)){
variables
.
put
(
processTrend
,
"结束"
);
tmpProject
.
setZjyprocessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
else
{
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
ZJY_SXZJ
);
variables
.
put
(
paramName_audit_user
,
assignee
);
}
}
else
if
(
ZJY_FGLD
.
equals
(
act_id
))
{
//当前节点 站长审批
tmpProject
.
setZjyprocessStatus
(
"通过"
);
sjDjjcMapper
.
updateSjDjjcById
(
tmpProject
);
}
}
String
comment
=
""
;
if
(
"true"
.
equals
(
flowTrendOption
))
{
comment
=
"【同意】"
+
sjDjjc
.
getP_COM_comment
();
}
else
if
(
"back"
.
equals
(
flowTrendOption
))
{
comment
=
"【退修】"
+
sjDjjc
.
getP_COM_comment
();
}
else
if
(
"reject"
.
equals
(
flowTrendOption
))
{
comment
=
"【驳回】"
+
sjDjjc
.
getP_COM_comment
();
}
else
{
comment
=
"【提交】"
+
sjDjjc
.
getP_COM_comment
();
}
processService
.
complete
(
sjDjjc
.
getTaskId
(),
instanceId
,
itemName
,
itemContent
,
Complete_Module
,
variables
,
ServletUtils
.
getRequest
(),
comment
);
}
catch
(
Exception
e
)
{
return
AjaxResult
.
error
(
"办理失败"
);
}
return
AjaxResult
.
success
();
}
/**
* 获取流程历史
* @param instanceId
* @return
*/
@GetMapping
(
"/getLcls/{instanceId}"
)
public
AjaxResult
getLcls
(
@PathVariable
(
"instanceId"
)
String
instanceId
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
// 获取审批历史表格数据
List
<
BizTodoItem
>
bizTodoItems
=
getApprovalHistory
(
instanceId
);
resultMap
.
put
(
"table"
,
bizTodoItems
);
if
(
bizTodoItems
.
isEmpty
())
{
return
AjaxResult
.
success
(
resultMap
);
}
String
type
=
bizTodoItems
.
get
(
0
).
getItemName
();
boolean
isEngineeringType
=
"工程方案审核"
.
equals
(
type
);
// 获取审批相关信息
ApprovalInfo
approvalInfo
=
getApprovalInfo
(
instanceId
,
isEngineeringType
);
String
ndjg
=
StringUtils
.
isEmpty
(
approvalInfo
.
getNdxsjg
())
?
"3"
:
approvalInfo
.
getNdxsjg
();
// 构建流程节点列表
List
<
Map
<
String
,
Object
>>
jdList
=
buildProcessNodes
(
isEngineeringType
,
ndjg
,
approvalInfo
.
getApplyUserName
());
// 查询审批人员并设置节点状态
populateNodeUserInfo
(
jdList
,
bizTodoItems
,
approvalInfo
.
getSecondaryUnit
());
resultMap
.
put
(
"jdList"
,
jdList
);
return
AjaxResult
.
success
(
resultMap
);
}
/**
* 获取审批历史记录
*/
private
List
<
BizTodoItem
>
getApprovalHistory
(
String
instanceId
)
{
BizTodoItem
bizTodoItem
=
new
BizTodoItem
();
bizTodoItem
.
setInstanceId
(
instanceId
);
List
<
BizTodoItem
>
bizTodoItems
=
bizTodoItemService
.
selectBizTodoItemList2
(
bizTodoItem
);
return
bizTodoItems
;
}
/**
* 审批信息封装类
*/
private
static
class
ApprovalInfo
{
private
String
ndxsjg
;
private
String
applyUserName
;
private
Long
secondaryUnit
;
// getters and setters
public
String
getNdxsjg
()
{
return
ndxsjg
;
}
public
void
setNdxsjg
(
String
ndxsjg
)
{
this
.
ndxsjg
=
ndxsjg
;
}
public
String
getApplyUserName
()
{
return
applyUserName
;
}
public
void
setApplyUserName
(
String
applyUserName
)
{
this
.
applyUserName
=
applyUserName
;
}
public
Long
getSecondaryUnit
()
{
return
secondaryUnit
;
}
public
void
setSecondaryUnit
(
Long
secondaryUnit
)
{
this
.
secondaryUnit
=
secondaryUnit
;
}
}
/**
* 获取审批相关信息
*/
private
ApprovalInfo
getApprovalInfo
(
String
instanceId
,
boolean
isEngineeringType
)
{
ApprovalInfo
info
=
new
ApprovalInfo
();
SjDjjc
sjDjjc
=
isEngineeringType
?
sjDjjcMapper
.
selectSjDjjcByinstanceId
(
instanceId
)
:
sjDjjcMapper
.
selectSjDjjcByinstanceIdZjy
(
instanceId
);
info
.
setNdxsjg
(
sjDjjc
.
getNdxsjg
());
String
applyUserId
=
isEngineeringType
?
sjDjjc
.
getApplyUser
()
:
sjDjjc
.
getZjyapplyUser
();
info
.
setApplyUserName
(
isEngineeringType
?
sjDjjc
.
getApplyUserName
()
:
sjDjjc
.
getZjyapplyUserName
());
// 获取二级单位
Long
applyUserDeptId
=
userService
.
selectUserByLoginName
(
applyUserId
).
getDeptId
();
SysDept
sysDept
=
sysDeptMapper
.
selectDeptById
(
applyUserDeptId
);
Long
secondaryUnit
=
getSecondaryUnit
(
applyUserDeptId
,
sysDept
.
getAncestors
());
info
.
setSecondaryUnit
(
secondaryUnit
!=
null
?
secondaryUnit
:
applyUserDeptId
);
return
info
;
}
/**
* 构建流程节点列表
*/
private
List
<
Map
<
String
,
Object
>>
buildProcessNodes
(
boolean
isEngineeringType
,
String
ndjg
,
String
applyUserName
)
{
List
<
Map
<
String
,
Object
>>
jdList
=
new
ArrayList
<>();
// 开始节点
jdList
.
add
(
createNode
(
"开始"
,
isEngineeringType
?
GC_AQSP
:
ZJY_AQSP
,
Arrays
.
asList
(
applyUserName
)));
// 安全审批节点
jdList
.
add
(
createNode
(
"安全审批"
,
isEngineeringType
?
GC_AQSP
:
ZJY_AQSP
,
null
));
// 站长审批节点
jdList
.
add
(
createNode
(
"站长审批"
,
isEngineeringType
?
GC_ZZSP
:
ZJY_ZZSP
,
null
));
// 根据ndjg值添加相应节点
switch
(
ndjg
)
{
case
"5"
:
jdList
.
add
(
createNode
(
"专家审批"
,
isEngineeringType
?
GC_ZJSP
:
ZJY_ZJSP
,
null
));
break
;
case
"7"
:
jdList
.
add
(
createNode
(
"专家审批"
,
isEngineeringType
?
GC_ZJSP
:
ZJY_ZJSP
,
null
));
jdList
.
add
(
createNode
(
"首席专家"
,
isEngineeringType
?
GC_SXZJ
:
ZJY_SXZJ
,
null
));
break
;
case
"8"
:
jdList
.
add
(
createNode
(
"专家审批"
,
isEngineeringType
?
GC_ZJSP
:
ZJY_ZJSP
,
null
));
jdList
.
add
(
createNode
(
"首席专家"
,
isEngineeringType
?
GC_SXZJ
:
ZJY_SXZJ
,
null
));
jdList
.
add
(
createNode
(
"分管领导"
,
isEngineeringType
?
GC_FGLD
:
ZJY_FGLD
,
null
));
break
;
}
return
jdList
;
}
/**
* 创建节点
*/
private
Map
<
String
,
Object
>
createNode
(
String
name
,
String
roleKey
,
List
<
String
>
userList
)
{
Map
<
String
,
Object
>
node
=
new
HashMap
<>();
node
.
put
(
"name"
,
name
);
node
.
put
(
"roleKye"
,
roleKey
);
if
(
userList
!=
null
)
{
node
.
put
(
"userList"
,
userList
);
}
return
node
;
}
/**
* 填充节点用户信息和状态
*/
private
void
populateNodeUserInfo
(
List
<
Map
<
String
,
Object
>>
jdList
,
List
<
BizTodoItem
>
bizTodoItems
,
Long
secondaryUnit
)
{
for
(
Map
<
String
,
Object
>
item
:
jdList
)
{
String
nodeName
=
item
.
get
(
"name"
).
toString
();
// 设置审批人员(除开始节点外)
if
(!
"开始"
.
equals
(
nodeName
))
{
String
roleKey
=
item
.
get
(
"roleKye"
).
toString
();
List
<
String
>
userList
=
userService
.
selectUserLoginNamesByRoleKeyDept2
(
secondaryUnit
,
roleKey
);
item
.
put
(
"userList"
,
userList
);
// 设置节点执行状态
boolean
isExecuted
=
bizTodoItems
.
stream
()
.
anyMatch
(
todo
->
todo
.
getNodeName
().
equals
(
nodeName
)
&&
"1"
.
equals
(
todo
.
getIsHandle
()));
item
.
put
(
"jdxz"
,
isExecuted
);
}
else
{
item
.
put
(
"jdxz"
,
true
);
}
}
}
/**
* 特殊化
* 自动完成第一个节点(任务书填报)的提交
*/
private
void
autoCompleteFirstSubmit
(
String
userId
,
String
key
,
String
processInstanceId
,
SjDjjc
entity
)
{
// 根据当前人的ID查询
List
<
Task
>
todoList
=
taskService
.
createTaskQuery
()
.
processDefinitionKey
(
key
)
.
taskAssignee
(
userId
)
.
processInstanceId
(
processInstanceId
)
.
list
();
// 获取task
if
(
todoList
.
size
()
<=
0
)
{
//没有待办 流程实例异常
System
.
out
.
println
(
"\n流程实例异常!没有生成Task数据。autoCompleteFirstSubmit()方法。\n"
);
return
;
}
Task
task
=
todoList
.
get
(
0
);
String
taskId
=
task
.
getId
();
// 流程的显示标题 取课题名称接后缀任务书审核
String
itemName
=
"工程方案审核"
;
String
itemContent
=
entity
.
getJh
()+
"工程方案审核"
;
// 获取流程发起人、和所属部门id
String
applyUserId
=
entity
.
getApplyUser
();
Long
applyUserDeptId
=
userService
.
selectUserByLoginName
(
applyUserId
).
getDeptId
();
SysDept
sysDept
=
sysDeptMapper
.
selectDeptById
(
applyUserDeptId
);
Long
secondaryUnit
=
getSecondaryUnit
(
applyUserDeptId
,
sysDept
.
getAncestors
());
// 设置下一节点处理人
Map
<
String
,
Object
>
variables
=
new
HashMap
<>();
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
GC_AQSP
);
// 下一节点审核节点 处理人为根据角色code取多人 一人处理即可通过
variables
.
put
(
paramName_audit_user
,
assignee
);
// 设置下一节点审核人 设置userId
String
comment
=
"【提交】"
;
processService
.
complete
(
taskId
,
processInstanceId
,
itemName
,
itemContent
,
Complete_Module
,
variables
,
ServletUtils
.
getRequest
(),
comment
);
}
/**
* 特殊化
* 自动完成第一个节点(任务书填报)的提交
*/
private
void
autoCompleteFirstSubmitZjy
(
String
userId
,
String
key
,
String
processInstanceId
,
SjDjjc
entity
)
{
// 根据当前人的ID查询
List
<
Task
>
todoList
=
taskService
.
createTaskQuery
()
.
processDefinitionKey
(
key
)
.
taskAssignee
(
userId
)
.
processInstanceId
(
processInstanceId
)
.
list
();
// 获取task
if
(
todoList
.
size
()
<=
0
)
{
//没有待办 流程实例异常
System
.
out
.
println
(
"\n流程实例异常!没有生成Task数据。autoCompleteFirstSubmit()方法。\n"
);
return
;
}
Task
task
=
todoList
.
get
(
0
);
String
taskId
=
task
.
getId
();
// 流程的显示标题 取课题名称接后缀任务书审核
String
itemName
=
"钻井液方案审核"
;
String
itemContent
=
entity
.
getJh
()+
"钻井液方案审核"
;
// 获取流程发起人、和所属部门id
String
applyUserId
=
entity
.
getZjyapplyUser
();
Long
applyUserDeptId
=
userService
.
selectUserByLoginName
(
applyUserId
).
getDeptId
();
SysDept
sysDept
=
sysDeptMapper
.
selectDeptById
(
applyUserDeptId
);
Long
secondaryUnit
=
getSecondaryUnit
(
applyUserDeptId
,
sysDept
.
getAncestors
());
// 设置下一节点处理人
Map
<
String
,
Object
>
variables
=
new
HashMap
<>();
List
<
String
>
assignee
=
userService
.
selectUserLoginNamesByRoleKeyDept
(
secondaryUnit
,
GC_AQSP
);
// 下一节点审核节点 处理人为根据角色code取多人 一人处理即可通过
variables
.
put
(
paramName_audit_user
,
assignee
);
// 设置下一节点审核人 设置userId
String
comment
=
"【提交】"
;
processService
.
complete
(
taskId
,
processInstanceId
,
itemName
,
itemContent
,
Complete_Module
,
variables
,
ServletUtils
.
getRequest
(),
comment
);
}
/**
* 根据传入的 deptId 和 ancestors 字符串,获取对应的二级单位 ID
*
* @param deptId 当前部门ID
* @param ancestors 祖先部门ID字符串,以逗号分隔,如 "0,100,101" 或 "0,100"
* @return 二级单位ID:
* - 若 ancestors 长度大于2(即包含超过2个ID),则返回第三个ID(索引为2)
* - 若 ancestors 长度等于2,则返回 deptId
* - 若 ancestors 格式不合法,则返回 null
*/
public
static
Long
getSecondaryUnit
(
Long
deptId
,
String
ancestors
)
{
if
(
ancestors
==
null
||
ancestors
.
isEmpty
())
{
return
null
;
}
// 1. 分割字符串并转换为数字列表
List
<
Long
>
ancestorList
=
Arrays
.
stream
(
ancestors
.
split
(
","
))
.
map
(
String:
:
trim
)
.
filter
(
s
->
!
s
.
isEmpty
())
.
map
(
Long:
:
parseLong
)
.
collect
(
Collectors
.
toList
());
// 2. 根据列表长度判断返回值
if
(
ancestorList
.
size
()
>
2
)
{
// 祖先列表长度大于2,返回第三个元素(索引2)
return
ancestorList
.
get
(
2
);
}
else
if
(
ancestorList
.
size
()
==
2
)
{
// 祖先列表长度等于2,返回传入的 deptId
return
deptId
;
}
else
{
// 格式不合法,返回null
return
null
;
}
}
}
src/main/java/com/zjsgfa/project/zjsgfa/controller/SjDjjcController.java
View file @
0399f36b
...
@@ -416,13 +416,12 @@ public class SjDjjcController extends BaseController
...
@@ -416,13 +416,12 @@ public class SjDjjcController extends BaseController
@ResponseBody
@ResponseBody
public
AjaxResult
importData
(
MultipartFile
file
,
boolean
updateSupport
,
SjDjjc
sjDjjc
)
throws
Exception
public
AjaxResult
importData
(
MultipartFile
file
,
boolean
updateSupport
,
SjDjjc
sjDjjc
)
throws
Exception
{
{
System
.
out
.
println
(
"--------------执行插入"
);
SjDjjc
sjDjjc1
=
sjDjjcService
.
selectSjDjjcById
(
sjDjjc
.
getId
());
SjDjjc
sjDjjc1
=
sjDjjcService
.
selectSjDjjcById
(
sjDjjc
.
getId
());
XSSFWorkbook
workbook
=
null
;
XSSFWorkbook
workbook
=
null
;
try
{
//
try {
//装载流
//装载流
workbook
=
new
XSSFWorkbook
(
file
.
getInputStream
());
workbook
=
new
XSSFWorkbook
(
file
.
getInputStream
());
// 获取井基础信息表,下标从0开始
// 获取井基础信息表,下标从0开始
...
@@ -454,47 +453,47 @@ public class SjDjjcController extends BaseController
...
@@ -454,47 +453,47 @@ public class SjDjjcController extends BaseController
// }
// }
info
.
setJh
(
jh
);
info
.
setJh
(
jh
);
String
qk
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
1
));
String
qk
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
1
));
if
(
StringUtils
.
isEmpty
(
qk
)){
//
if(StringUtils.isEmpty(qk)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行区块不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行区块不能为空");
}
//
}
info
.
setQk
(
qk
);
info
.
setQk
(
qk
);
String
jb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
2
));
String
jb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
2
));
if
(
StringUtils
.
isEmpty
(
jb
)){
//
if(StringUtils.isEmpty(jb)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行井别不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行井别不能为空");
}
//
}
info
.
setJb
(
jb
);
info
.
setJb
(
jb
);
String
jx
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
3
));
String
jx
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
3
));
if
(
StringUtils
.
isEmpty
(
jx
)){
//
if(StringUtils.isEmpty(jx)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行井型不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行井型不能为空");
}
//
}
info
.
setJx
(
jx
);
info
.
setJx
(
jx
);
String
jkhzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
4
));
String
jkhzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
4
));
if
(
StringUtils
.
isEmpty
(
jkhzb
)){
//
if(StringUtils.isEmpty(jkhzb)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行井口横坐标不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行井口横坐标不能为空");
}
//
}
info
.
setJkhzb
(
Double
.
parseDouble
(
jkhzb
));
info
.
setJkhzb
(
Double
.
parseDouble
(
jkhzb
));
jkhzbB
=
jkhzbB
+
Double
.
parseDouble
(
jkhzb
);
jkhzbB
=
jkhzbB
+
Double
.
parseDouble
(
jkhzb
);
String
jkzzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
5
));
String
jkzzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
5
));
if
(
StringUtils
.
isEmpty
(
jkzzb
)){
//
if(StringUtils.isEmpty(jkzzb)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行井口纵坐标不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行井口纵坐标不能为空");
}
//
}
info
.
setJkzzb
(
Double
.
parseDouble
(
jkzzb
));
info
.
setJkzzb
(
Double
.
parseDouble
(
jkzzb
));
jkzzbB
=
jkzzbB
+
Double
.
parseDouble
(
jkzzb
);
jkzzbB
=
jkzzbB
+
Double
.
parseDouble
(
jkzzb
);
String
jdhzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
6
));
String
jdhzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
6
));
if
(
StringUtils
.
isEmpty
(
jdhzb
)){
//
if(StringUtils.isEmpty(jdhzb)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行井底横坐标不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行井底横坐标不能为空");
}
//
}
info
.
setJdhzb
(
Double
.
parseDouble
(
jdhzb
));
info
.
setJdhzb
(
Double
.
parseDouble
(
jdhzb
));
jdhzbB
=
jdhzbB
+
Double
.
parseDouble
(
jdhzb
);
jdhzbB
=
jdhzbB
+
Double
.
parseDouble
(
jdhzb
);
String
jdzzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
7
));
String
jdzzb
=
new
DataFormatter
().
formatCellValue
(
row
.
getCell
(
7
));
if
(
StringUtils
.
isEmpty
(
jdzzb
)){
//
if(StringUtils.isEmpty(jdzzb)){
return
AjaxResult
.
error
(
"井基础信息中第"
+(
i
+
1
)+
"行井底纵坐标不能为空"
);
//
return AjaxResult.error("井基础信息中第"+(i+1)+"行井底纵坐标不能为空");
}
//
}
info
.
setJdzzb
(
Double
.
parseDouble
(
jdzzb
));
info
.
setJdzzb
(
Double
.
parseDouble
(
jdzzb
));
jdzzbB
=
jdzzbB
+
Double
.
parseDouble
(
jdzzb
);
jdzzbB
=
jdzzbB
+
Double
.
parseDouble
(
jdzzb
);
...
@@ -1955,14 +1954,14 @@ public class SjDjjcController extends BaseController
...
@@ -1955,14 +1954,14 @@ public class SjDjjcController extends BaseController
//高指标井
//高指标井
sjDjjcService
.
getGzbjList
(
jh
);
sjDjjcService
.
getGzbjList
(
jh
);
}
catch
(
IOException
e
)
{
//
} catch (IOException e) {
e
.
getMessage
();
//
e.getMessage();
e
.
printStackTrace
();
//
e.printStackTrace();
throw
new
Exception
(
"导入Excel失败,请联系网站管理员!"
);
//
throw new Exception("导入Excel失败,请联系网站管理员!");
//
}
finally
{
//
} finally {
workbook
.
close
();
//
workbook.close();
}
//
}
...
@@ -2177,8 +2176,8 @@ public class SjDjjcController extends BaseController
...
@@ -2177,8 +2176,8 @@ public class SjDjjcController extends BaseController
String
param
=
gson
.
toJson
(
map2
);
String
param
=
gson
.
toJson
(
map2
);
// System.out.println("最终参数"+param);
// System.out.println("最终参数"+param);
//调用接口
//调用接口
// String body = HttpRequest.post("http://10.68.202.238:12001/api/pdf2xlsx").body(param).execute().body();
String
body
=
HttpRequest
.
post
(
"http://10.68.202.238:12001/api/pdf2xlsx"
).
body
(
param
).
execute
().
body
();
//测试
String
body
=
HttpRequest
.
post
(
"http://10.68.249.11:12001/api/pdf2xlsx"
).
body
(
param
).
execute
().
body
();
// String body = HttpRequest.post("http://10.68.249.11:5174/api/pdf2xlsx").body(param).execute().body();//正式
System
.
out
.
println
(
"接口返回数据"
+
body
);
System
.
out
.
println
(
"接口返回数据"
+
body
);
JsonObject
root
=
gson
.
fromJson
(
body
,
JsonObject
.
class
);
JsonObject
root
=
gson
.
fromJson
(
body
,
JsonObject
.
class
);
JsonObject
outerData
=
root
.
getAsJsonObject
(
"message"
);
JsonObject
outerData
=
root
.
getAsJsonObject
(
"message"
);
...
...
src/main/java/com/zjsgfa/project/zjsgfa/domain/BizTodoItem.java
View file @
0399f36b
...
@@ -82,7 +82,11 @@ public class BizTodoItem extends BaseEntity
...
@@ -82,7 +82,11 @@ public class BizTodoItem extends BaseEntity
@Excel
(
name
=
"处理时间"
,
width
=
30
,
dateFormat
=
"yyyy-MM-dd HH:mm:ss"
)
@Excel
(
name
=
"处理时间"
,
width
=
30
,
dateFormat
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
handleTime
;
private
Date
handleTime
;
private
String
comment
;
private
String
searchOtherTodoFlag
;
private
String
searchOtherTodoFlag
;
private
String
orderBy
;
}
}
src/main/java/com/zjsgfa/project/zjsgfa/domain/SjDjjc.java
View file @
0399f36b
...
@@ -215,7 +215,7 @@ public class SjDjjc extends ProcessBaseEntity
...
@@ -215,7 +215,7 @@ public class SjDjjc extends ProcessBaseEntity
private
String
applyUser
;
private
String
applyUser
;
/** 申请时间 流程 */
/** 申请时间 流程 */
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
// @Excel(name = "申请时间 流程", width = 30, dateFormat = "yyyy-MM-dd")
// @Excel(name = "申请时间 流程", width = 30, dateFormat = "yyyy-MM-dd")
private
Date
applyTime
;
private
Date
applyTime
;
...
@@ -224,5 +224,41 @@ public class SjDjjc extends ProcessBaseEntity
...
@@ -224,5 +224,41 @@ public class SjDjjc extends ProcessBaseEntity
private
String
taskId
;
private
String
taskId
;
private
String
applyUserName
;
private
String
zjyapplyUserName
;
private
String
ndxsjg
;
/** 钻井液流程实例id */
@Excel
(
name
=
"钻井液流程实例id"
)
private
String
zjyinstanceId
;
/** 钻井液流程状态 */
@Excel
(
name
=
"钻井液流程状态"
)
private
String
zjyprocessStatus
;
/** 钻井液驳回意见原因 */
@Excel
(
name
=
"钻井液驳回意见原因"
)
private
String
zjyrefuseContent
;
/** 钻井液类型 流程 */
@Excel
(
name
=
"钻井液类型 流程"
)
private
String
zjytype
;
/** 钻井液申请人 流程 */
@Excel
(
name
=
"钻井液申请人 流程"
)
private
String
zjyapplyUser
;
/** 钻井液申请时间 流程 */
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
@Excel
(
name
=
"钻井液申请时间 流程"
,
width
=
30
,
dateFormat
=
"yyyy-MM-dd"
)
private
Date
zjyapplyTime
;
}
}
src/main/java/com/zjsgfa/project/zjsgfa/mapper/BizTodoItemMapper.java
View file @
0399f36b
...
@@ -66,4 +66,7 @@ public interface BizTodoItemMapper
...
@@ -66,4 +66,7 @@ public interface BizTodoItemMapper
String
selectTodoUserByTaskId
(
String
taskId
);
String
selectTodoUserByTaskId
(
String
taskId
);
List
<
BizTodoItem
>
selectBizTodoItemList2
(
BizTodoItem
bizTodoItem
);
}
}
src/main/java/com/zjsgfa/project/zjsgfa/mapper/SjDjjcMapper.java
View file @
0399f36b
...
@@ -67,4 +67,9 @@ public interface SjDjjcMapper
...
@@ -67,4 +67,9 @@ public interface SjDjjcMapper
SjDjjc
selectSjDjjcByinstanceId
(
String
instanceId
);
SjDjjc
selectSjDjjcByinstanceId
(
String
instanceId
);
int
updateSjDjjcById
(
SjDjjc
sjDjjc
);
SjDjjc
selectSjDjjcByinstanceIdZjy
(
String
instanceId
);
}
}
src/main/java/com/zjsgfa/project/zjsgfa/service/IBizTodoItemService.java
View file @
0399f36b
...
@@ -60,5 +60,9 @@ public interface IBizTodoItemService
...
@@ -60,5 +60,9 @@ public interface IBizTodoItemService
public
int
deleteBizTodoItemById
(
Long
id
);
public
int
deleteBizTodoItemById
(
Long
id
);
// int insertTodoItem(String instanceId, String itemName, String itemContent, String module);
int
insertTodoItem
(
String
instanceId
,
String
itemName
,
String
itemContent
,
String
module
,
String
comment
);
List
<
BizTodoItem
>
selectBizTodoItemList2
(
BizTodoItem
bizTodoItem
);
}
}
src/main/java/com/zjsgfa/project/zjsgfa/service/ProcessService.java
0 → 100644
View file @
0399f36b
package
com
.
zjsgfa
.
project
.
zjsgfa
.
service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Map
;
public
interface
ProcessService
{
void
complete
(
String
taskId
,
String
processInstanceId
,
String
itemName
,
String
itemContent
,
String
complete_module
,
Map
<
String
,
Object
>
variables
,
HttpServletRequest
request
,
String
comment
);
}
src/main/java/com/zjsgfa/project/zjsgfa/service/impl/BizTodoItemServiceImpl.java
View file @
0399f36b
...
@@ -6,6 +6,8 @@ import com.zjsgfa.common.utils.DateUtils;
...
@@ -6,6 +6,8 @@ import com.zjsgfa.common.utils.DateUtils;
import
com.zjsgfa.common.utils.StringUtils
;
import
com.zjsgfa.common.utils.StringUtils
;
import
com.zjsgfa.project.system.domain.SysUser
;
import
com.zjsgfa.project.system.domain.SysUser
;
import
com.zjsgfa.project.system.mapper.SysUserMapper
;
import
com.zjsgfa.project.system.mapper.SysUserMapper
;
import
org.activiti.engine.TaskService
;
import
org.activiti.engine.task.Task
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -26,8 +28,8 @@ public class BizTodoItemServiceImpl implements IBizTodoItemService
...
@@ -26,8 +28,8 @@ public class BizTodoItemServiceImpl implements IBizTodoItemService
@Autowired
@Autowired
private
BizTodoItemMapper
bizTodoItemMapper
;
private
BizTodoItemMapper
bizTodoItemMapper
;
//
@Autowired
@Autowired
//
private TaskService taskService;
private
TaskService
taskService
;
@Autowired
@Autowired
private
SysUserMapper
userMapper
;
private
SysUserMapper
userMapper
;
...
@@ -104,58 +106,66 @@ public class BizTodoItemServiceImpl implements IBizTodoItemService
...
@@ -104,58 +106,66 @@ public class BizTodoItemServiceImpl implements IBizTodoItemService
return
bizTodoItemMapper
.
deleteBizTodoItemById
(
id
);
return
bizTodoItemMapper
.
deleteBizTodoItemById
(
id
);
}
}
// @Override
@Override
// public int insertTodoItem(String instanceId, String itemName, String itemContent, String module) {
public
int
insertTodoItem
(
String
instanceId
,
String
itemName
,
String
itemContent
,
String
module
,
String
comment
)
{
// BizTodoItem todoItem = new BizTodoItem();
BizTodoItem
todoItem
=
new
BizTodoItem
();
// todoItem.setItemName(itemName);
todoItem
.
setItemName
(
itemName
);
// todoItem.setItemContent(itemContent);
todoItem
.
setItemContent
(
itemContent
);
// todoItem.setIsView("0");
todoItem
.
setIsView
(
"0"
);
// todoItem.setIsHandle("0");
todoItem
.
setIsHandle
(
"0"
);
// todoItem.setModule(module);
todoItem
.
setModule
(
module
);
// todoItem.setTodoTime(DateUtils.getNowDate());
todoItem
.
setTodoTime
(
DateUtils
.
getNowDate
());
// List<Task> taskList = taskService.createTaskQuery().processInstanceId(instanceId).active().list();
List
<
Task
>
taskList
=
taskService
.
createTaskQuery
().
processInstanceId
(
instanceId
).
active
().
list
();
// int counter = 0;
int
counter
=
0
;
// for (Task task: taskList) {
for
(
Task
task:
taskList
)
{
//
// // todoitem 去重
// todoitem 去重
// BizTodoItem bizTodoItem = bizTodoItemMapper.selectTodoItemByTaskId(task.getId());
BizTodoItem
bizTodoItem
=
bizTodoItemMapper
.
selectTodoItemByTaskId
(
task
.
getId
());
// if (bizTodoItem != null) continue;
if
(
bizTodoItem
!=
null
)
continue
;
//
// BizTodoItem newItem = new BizTodoItem();
BizTodoItem
newItem
=
new
BizTodoItem
();
// BeanUtils.copyProperties(todoItem, newItem);
BeanUtils
.
copyProperties
(
todoItem
,
newItem
);
// newItem.setInstanceId(instanceId);
newItem
.
setInstanceId
(
instanceId
);
// newItem.setTaskId(task.getId());
newItem
.
setTaskId
(
task
.
getId
());
// newItem.setTaskName("task" + task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1));
newItem
.
setTaskName
(
"task"
+
task
.
getTaskDefinitionKey
().
substring
(
0
,
1
).
toUpperCase
()
+
task
.
getTaskDefinitionKey
().
substring
(
1
));
// newItem.setNodeName(task.getName());
newItem
.
setNodeName
(
task
.
getName
());
// String assignee = task.getAssignee();
String
assignee
=
task
.
getAssignee
();
// if (StringUtils.isNotBlank(assignee)) {
if
(
StringUtils
.
isNotBlank
(
assignee
))
{
// newItem.setTodoUserId(assignee);
newItem
.
setTodoUserId
(
assignee
);
// SysUser user = userMapper.selectUserByLoginName(assignee);
SysUser
user
=
userMapper
.
selectUserByLoginName
(
assignee
);
// newItem.setTodoUserName(user.getNickName());
newItem
.
setTodoUserName
(
user
.
getNickName
());
// bizTodoItemMapper.insertBizTodoItem(newItem);
newItem
.
setComment
(
comment
);
// counter++;
bizTodoItemMapper
.
insertBizTodoItem
(
newItem
);
// } else {
counter
++;
// // 查询候选用户组
}
else
{
// List<String> todoUserIdList = bizTodoItemMapper.selectTodoUserListByTaskId(task.getId());
// 查询候选用户组
// if (!CollectionUtils.isEmpty(todoUserIdList)) {
List
<
String
>
todoUserIdList
=
bizTodoItemMapper
.
selectTodoUserListByTaskId
(
task
.
getId
());
// for (String todoUserId: todoUserIdList) {
if
(!
CollectionUtils
.
isEmpty
(
todoUserIdList
))
{
// SysUser todoUser = userMapper.selectUserByLoginName(todoUserId);
for
(
String
todoUserId:
todoUserIdList
)
{
// newItem.setTodoUserId(todoUser.getUserName());
SysUser
todoUser
=
userMapper
.
selectUserByLoginName
(
todoUserId
);
// newItem.setTodoUserName(todoUser.getNickName());
newItem
.
setTodoUserId
(
todoUser
.
getUserName
());
// bizTodoItemMapper.insertBizTodoItem(newItem);
newItem
.
setTodoUserName
(
todoUser
.
getNickName
());
// counter++;
newItem
.
setComment
(
comment
);
// }
bizTodoItemMapper
.
insertBizTodoItem
(
newItem
);
// } else {
counter
++;
// // 查询候选用户
}
// String todoUserId = bizTodoItemMapper.selectTodoUserByTaskId(task.getId());
}
else
{
// SysUser todoUser = userMapper.selectUserByLoginName(todoUserId);
// 查询候选用户
// newItem.setTodoUserId(todoUser.getUserName());
String
todoUserId
=
bizTodoItemMapper
.
selectTodoUserByTaskId
(
task
.
getId
());
// newItem.setTodoUserName(todoUser.getNickName());
SysUser
todoUser
=
userMapper
.
selectUserByLoginName
(
todoUserId
);
// bizTodoItemMapper.insertBizTodoItem(newItem);
newItem
.
setTodoUserId
(
todoUser
.
getUserName
());
// counter++;
newItem
.
setTodoUserName
(
todoUser
.
getNickName
());
// }
newItem
.
setComment
(
comment
);
// }
bizTodoItemMapper
.
insertBizTodoItem
(
newItem
);
// }
counter
++;
// return counter;
}
// }
}
}
return
counter
;
}
@Override
public
List
<
BizTodoItem
>
selectBizTodoItemList2
(
BizTodoItem
bizTodoItem
)
{
return
bizTodoItemMapper
.
selectBizTodoItemList2
(
bizTodoItem
);
}
}
}
src/main/java/com/zjsgfa/project/zjsgfa/service/impl/ProcessServiceImpl.java
0 → 100644
View file @
0399f36b
package
com
.
zjsgfa
.
project
.
zjsgfa
.
service
.
impl
;
import
com.zjsgfa.common.utils.DateUtils
;
import
com.zjsgfa.common.utils.SecurityUtils
;
import
com.zjsgfa.common.utils.StringUtils
;
import
com.zjsgfa.project.zjsgfa.domain.BizTodoItem
;
import
com.zjsgfa.project.zjsgfa.service.IBizTodoItemService
;
import
com.zjsgfa.project.zjsgfa.service.ProcessService
;
import
org.activiti.engine.TaskService
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
javax.servlet.http.HttpServletRequest
;
import
java.text.SimpleDateFormat
;
import
java.util.Enumeration
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
ProcessServiceImpl
implements
ProcessService
{
protected
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ProcessServiceImpl
.
class
);
@Autowired
private
TaskService
taskService
;
@Autowired
private
IBizTodoItemService
bizTodoItemService
;
@Override
public
void
complete
(
String
taskId
,
String
instanceId
,
String
itemName
,
String
itemContent
,
String
module
,
Map
<
String
,
Object
>
variables
,
HttpServletRequest
request
,
String
comment
)
{
Enumeration
<
String
>
parameterNames
=
request
.
getParameterNames
();
boolean
agree
=
true
;
// taskService.addComment(taskId, instanceId, comment);
// 被委派人处理完成任务
// p.s. 被委托的流程需要先 resolved 这个任务再提交。
// 所以在 complete 之前需要先 resolved
// resolveTask() 要在 claim() 之前,不然 act_hi_taskinst 表的 assignee 字段会为 null
taskService
.
resolveTask
(
taskId
,
variables
);
// 只有签收任务,act_hi_taskinst 表的 assignee 字段才不为 null (经过测试这里有点慢)
taskService
.
claim
(
taskId
,
SecurityUtils
.
getUsername
());
taskService
.
complete
(
taskId
,
variables
);
//慢
// 更新待办事项状态
BizTodoItem
query
=
new
BizTodoItem
();
/* 2021/12/28 edit by wj 同一个节点多处理人时,task_id 是相同的,无法用来查询当前节点的其他待办,需要单独写查询条件。 start */
// query.setTaskId(taskId);
query
.
setSearchOtherTodoFlag
(
taskId
);
// 查询其他待办任务 flag 。有值时 表示:传入task_id查询当前节点的其他处理人的待办数据
query
.
setOrderBy
(
"todo_time"
);
// 查询其他待办任务 flag 。有值时 表示:传入task_id查询当前节点的其他处理人的待办数据
/* 2021/12/28 edit by wj 同一个节点多处理人时,task_id 是相同的,无法用来查询当前节点的其他待办,需要单独写查询条件。 end */
// 考虑到候选用户组,会有多个 todoitem 办理同个 task
List
<
BizTodoItem
>
updateList
=
CollectionUtils
.
isEmpty
(
bizTodoItemService
.
selectBizTodoItemList
(
query
))
?
null
:
bizTodoItemService
.
selectBizTodoItemList
(
query
);
for
(
BizTodoItem
update:
updateList
)
{
// 找到当前登录用户的 todoitem,置为已办
if
(
update
.
getTodoUserId
().
equals
(
SecurityUtils
.
getUsername
()))
{
update
.
setIsView
(
"1"
);
update
.
setIsHandle
(
"1"
);
update
.
setHandleUserId
(
SecurityUtils
.
getUsername
());
update
.
setHandleUserName
(
SecurityUtils
.
getLoginUser
().
getUser
().
getNickName
());
update
.
setHandleTime
(
DateUtils
.
getNowDate
());
update
.
setComment
(
comment
);
bizTodoItemService
.
updateBizTodoItem
(
update
);
}
else
{
/* 2021/12/28 edit by wj 其他处理人不删除而是置位已办。 start */
// bizTodoItemService.deleteBizTodoItemById(update.getId()); // 删除候选用户组其他 todoitem
update
.
setIsHandle
(
"1"
);
// update.setHandleUserId(ShiroUtils.getLoginName());
// update.setHandleUserName(ShiroUtils.getSysUser().getUserName());
bizTodoItemService
.
updateBizTodoItem
(
update
);
/* 2021/12/28 edit by wj 其他处理人不删除而是置位已办。 end */
}
}
// 下一节点处理人待办事项
bizTodoItemService
.
insertTodoItem
(
instanceId
,
itemName
,
itemContent
,
module
,
null
);
}
}
src/main/java/com/zjsgfa/project/zjsgfa/service/impl/SjFdsgcsServiceImpl.java
View file @
0399f36b
...
@@ -329,8 +329,8 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
...
@@ -329,8 +329,8 @@ public class SjFdsgcsServiceImpl implements ISjFdsgcsService
Gson
gson
=
new
GsonBuilder
().
setPrettyPrinting
().
create
();
Gson
gson
=
new
GsonBuilder
().
setPrettyPrinting
().
create
();
String
json
=
gson
.
toJson
(
map
);
String
json
=
gson
.
toJson
(
map
);
//调用httpsPost请求获取数据
//调用httpsPost请求获取数据
// String url = "https://10.68.249.59
:12001/api/ljzjymd";
String
url
=
"http://10.68.202.238
:12001/api/ljzjymd"
;
String
url
=
"http://10.68.249.11:12001
/api/ljzjymd"
;
// String url = "http://10.68.249.11:5174
/api/ljzjymd";
System
.
out
.
println
(
json
);
System
.
out
.
println
(
json
);
String
result
=
HttpRequest
.
post
(
url
).
body
(
json
).
execute
().
body
();
String
result
=
HttpRequest
.
post
(
url
).
body
(
json
).
execute
().
body
();
System
.
out
.
println
(
result
);
System
.
out
.
println
(
result
);
...
...
src/main/resources/mybatis/zjsgfa/BizTodoItemMapper.xml
View file @
0399f36b
...
@@ -21,10 +21,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -21,10 +21,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"handleUserName"
column=
"handle_user_name"
/>
<result
property=
"handleUserName"
column=
"handle_user_name"
/>
<result
property=
"todoTime"
column=
"todo_time"
/>
<result
property=
"todoTime"
column=
"todo_time"
/>
<result
property=
"handleTime"
column=
"handle_time"
/>
<result
property=
"handleTime"
column=
"handle_time"
/>
<result
property=
"comment"
column=
"comment"
/>
</resultMap>
</resultMap>
<sql
id=
"selectBizTodoItemVo"
>
<sql
id=
"selectBizTodoItemVo"
>
select id, item_name, item_content, module, task_id, instance_id, task_name, node_name, is_view, is_handle, todo_user_id, todo_user_name, handle_user_id, handle_user_name, todo_time, handle_time from biz_todo_item
select id, item_name, item_content, module, task_id, instance_id, task_name, node_name, is_view, is_handle, todo_user_id, todo_user_name, handle_user_id, handle_user_name, todo_time, handle_time
,comment
from biz_todo_item
</sql>
</sql>
<select
id=
"selectBizTodoItemList"
parameterType=
"BizTodoItem"
resultMap=
"BizTodoItemResult"
>
<select
id=
"selectBizTodoItemList"
parameterType=
"BizTodoItem"
resultMap=
"BizTodoItemResult"
>
...
@@ -45,12 +46,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -45,12 +46,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"handleUserName != null and handleUserName != ''"
>
and handle_user_name like concat('%', #{handleUserName}, '%')
</if>
<if
test=
"handleUserName != null and handleUserName != ''"
>
and handle_user_name like concat('%', #{handleUserName}, '%')
</if>
<if
test=
"todoTime != null "
>
and todo_time = #{todoTime}
</if>
<if
test=
"todoTime != null "
>
and todo_time = #{todoTime}
</if>
<if
test=
"handleTime != null "
>
and handle_time = #{handleTime}
</if>
<if
test=
"handleTime != null "
>
and handle_time = #{handleTime}
</if>
<if
test=
"comment != null and comment!='' "
>
and comment = #{comment}
</if>
<if
test=
"searchOtherTodoFlag != null and searchOtherTodoFlag != ''"
>
<if
test=
"searchOtherTodoFlag != null and searchOtherTodoFlag != ''"
>
and instance_id = ( select instance_id from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and instance_id = ( select instance_id from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and task_name = ( select task_name from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and task_name = ( select task_name from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and node_name = ( select node_name from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and node_name = ( select node_name from biz_todo_item where task_id = #{searchOtherTodoFlag} )
</if>
</if>
</where>
</where>
order by ${orderBy} desc
</select>
</select>
<select
id=
"selectBizTodoItemById"
parameterType=
"Long"
resultMap=
"BizTodoItemResult"
>
<select
id=
"selectBizTodoItemById"
parameterType=
"Long"
resultMap=
"BizTodoItemResult"
>
...
@@ -68,6 +71,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -68,6 +71,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select
id=
"selectTodoUserByTaskId"
resultType=
"java.lang.String"
>
<select
id=
"selectTodoUserByTaskId"
resultType=
"java.lang.String"
>
SELECT USER_ID_ FROM ACT_ID_MEMBERSHIP WHERE USER_ID_ = (SELECT USER_ID_ FROM ACT_RU_IDENTITYLINK WHERE TASK_ID_ = #{taskId})
SELECT USER_ID_ FROM ACT_ID_MEMBERSHIP WHERE USER_ID_ = (SELECT USER_ID_ FROM ACT_RU_IDENTITYLINK WHERE TASK_ID_ = #{taskId})
</select>
</select>
<select
id=
"selectBizTodoItemList2"
resultType=
"com.zjsgfa.project.zjsgfa.domain.BizTodoItem"
>
<include
refid=
"selectBizTodoItemVo"
/>
<where>
<if
test=
"itemName != null and itemName != ''"
>
and item_name like concat('%', #{itemName}, '%')
</if>
<if
test=
"itemContent != null and itemContent != ''"
>
and item_content like concat('%', #{itemContent}, '%')
</if>
<if
test=
"module != null and module != ''"
>
and module = #{module}
</if>
<if
test=
"taskId != null and taskId != ''"
>
and task_id = #{taskId}
</if>
<if
test=
"instanceId != null and instanceId != ''"
>
and instance_id = #{instanceId}
</if>
<if
test=
"taskName != null and taskName != ''"
>
and task_name like concat('%', #{taskName}, '%')
</if>
<if
test=
"nodeName != null and nodeName != ''"
>
and node_name like concat('%', #{nodeName}, '%')
</if>
<if
test=
"isView != null and isView != ''"
>
and is_view = #{isView}
</if>
<if
test=
"isHandle != null and isHandle != ''"
>
and is_handle = #{isHandle}
</if>
<if
test=
"todoUserId != null and todoUserId != ''"
>
and todo_user_id = #{todoUserId}
</if>
<if
test=
"todoUserName != null and todoUserName != ''"
>
and todo_user_name like concat('%', #{todoUserName}, '%')
</if>
<if
test=
"handleUserId != null and handleUserId != ''"
>
and handle_user_id = #{handleUserId}
</if>
<if
test=
"handleUserName != null and handleUserName != ''"
>
and handle_user_name like concat('%', #{handleUserName}, '%')
</if>
<if
test=
"todoTime != null "
>
and todo_time = #{todoTime}
</if>
<if
test=
"handleTime != null "
>
and handle_time = #{handleTime}
</if>
<if
test=
"comment != null and comment!='' "
>
and comment = #{comment}
</if>
<if
test=
"searchOtherTodoFlag != null and searchOtherTodoFlag != ''"
>
and instance_id = ( select instance_id from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and task_name = ( select task_name from biz_todo_item where task_id = #{searchOtherTodoFlag} )
and node_name = ( select node_name from biz_todo_item where task_id = #{searchOtherTodoFlag} )
</if>
</where>
ORDER BY handle_time IS NULL DESC, handle_time DESC
</select>
<insert
id=
"insertBizTodoItem"
parameterType=
"BizTodoItem"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
<insert
id=
"insertBizTodoItem"
parameterType=
"BizTodoItem"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into biz_todo_item
insert into biz_todo_item
...
@@ -87,6 +117,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -87,6 +117,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"handleUserName != null"
>
handle_user_name,
</if>
<if
test=
"handleUserName != null"
>
handle_user_name,
</if>
<if
test=
"todoTime != null"
>
todo_time,
</if>
<if
test=
"todoTime != null"
>
todo_time,
</if>
<if
test=
"handleTime != null"
>
handle_time,
</if>
<if
test=
"handleTime != null"
>
handle_time,
</if>
<if
test=
"comment != null"
>
comment,
</if>
</trim>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"itemName != null"
>
#{itemName},
</if>
<if
test=
"itemName != null"
>
#{itemName},
</if>
...
@@ -104,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -104,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"handleUserName != null"
>
#{handleUserName},
</if>
<if
test=
"handleUserName != null"
>
#{handleUserName},
</if>
<if
test=
"todoTime != null"
>
#{todoTime},
</if>
<if
test=
"todoTime != null"
>
#{todoTime},
</if>
<if
test=
"handleTime != null"
>
#{handleTime},
</if>
<if
test=
"handleTime != null"
>
#{handleTime},
</if>
<if
test=
"comment != null"
>
#{comment},
</if>
</trim>
</trim>
</insert>
</insert>
...
@@ -125,6 +157,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -125,6 +157,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"handleUserName != null"
>
handle_user_name = #{handleUserName},
</if>
<if
test=
"handleUserName != null"
>
handle_user_name = #{handleUserName},
</if>
<if
test=
"todoTime != null"
>
todo_time = #{todoTime},
</if>
<if
test=
"todoTime != null"
>
todo_time = #{todoTime},
</if>
<if
test=
"handleTime != null"
>
handle_time = #{handleTime},
</if>
<if
test=
"handleTime != null"
>
handle_time = #{handleTime},
</if>
<if
test=
"comment != null"
>
comment = #{comment},
</if>
</trim>
</trim>
where id = #{id}
where id = #{id}
</update>
</update>
...
...
src/main/resources/mybatis/zjsgfa/SjDjjcMapper.xml
View file @
0399f36b
...
@@ -55,45 +55,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -55,45 +55,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"type"
column=
"type"
/>
<result
property=
"type"
column=
"type"
/>
<result
property=
"applyUser"
column=
"apply_user"
/>
<result
property=
"applyUser"
column=
"apply_user"
/>
<result
property=
"applyTime"
column=
"apply_time"
/>
<result
property=
"applyTime"
column=
"apply_time"
/>
<result
property=
"applyUserName"
column=
"apply_user_name"
/>
<result
property=
"ndxsjg"
column=
"ndxsjg"
/>
<result
property=
"zjyinstanceId"
column=
"zjyinstance_id"
/>
<result
property=
"zjyprocessStatus"
column=
"zjyprocess_status"
/>
<result
property=
"zjyrefuseContent"
column=
"zjyrefuse_content"
/>
<result
property=
"zjytype"
column=
"zjytype"
/>
<result
property=
"zjyapplyUser"
column=
"zjyapply_user"
/>
<result
property=
"zjyapplyTime"
column=
"zjyapply_time"
/>
<result
property=
"zjyapplyUserName"
column=
"zjyapply_user_name"
/>
</resultMap>
</resultMap>
<sql
id=
"selectSjDjjcVo"
>
<sql
id=
"selectSjDjjcVo"
>
select a.id,
select a.id,
jh,
jh,
jb,
jb,
jx,
a.jx,
jkhzb,
jkhzb,
jkzzb,
jkzzb,
gzwz,
gzwz,
wzcw,
wzcw,
ztmd,
ztmd,
wzyz,
wzyz,
wjfa,
wjfa,
a.created_by,
a.created_by,
a.created_time,
a.created_time,
a.update_by,
a.update_by,
a.update_time,
a.update_time,
a.zjgs,
a.zjgs,
a.zjd,
a.zjd,
b.zjjd zjdmc,
b.zjjd zjdmc,
jdhzb,
jdhzb,
jdzzb,
jdzzb,
zt,
zt,
qk,
qk,
sjzt,
sjzt,
ljzlzt,
ljzlzt,
dzfxzt,
dzfxzt,
fxtszt,
fxtszt,
sggyzt,
sggyzt,
fdsgzt,
fdsgzt,
jkzt,
jkzt,
hsezt,
hsezt,
jhjdzt,
jhjdzt,
flzt,
flzt,
faid,famc,u.nick_name as cjrmc,a.deptid,d.dept_name, jfdw, bxg, yctglrgd, dlwz, gzmc, ahzb, azzb, bhzb, bzzb, instance_id, process_status, refuse_content, type, apply_user, apply_time
faid,famc,u.nick_name as cjrmc,a.deptid,d.dept_name, jfdw, bxg, yctglrgd, dlwz, gzmc,
ahzb, azzb, bhzb, bzzb, instance_id, process_status, refuse_content, type, apply_user, apply_time,u1.nick_name apply_user_name,n.ndxsjg
, zjyinstance_id, zjyprocess_status, zjyrefuse_content, zjytype, zjyapply_user, zjyapply_time,u2.nick_name zjyapply_user_name
from sj_djjc a left join jcxx_jdxx b on a.zjd=b.id
from sj_djjc a left join jcxx_jdxx b on a.zjd=b.id
left join sys_user u on a.created_by=u.user_name
left join sys_user u on a.created_by=u.user_name
left join sys_dept d on a.deptid = d.dept_id
left join sys_user u1 on a.apply_user=u1.user_name
left join sys_user u2 on a.zjyapply_user=u2.user_name
left join sys_dept d on a.deptid = d.dept_id
left join sj_ndxm n on a.id = n.zbid
</sql>
</sql>
<select
id=
"selectSjDjjcList"
parameterType=
"SjDjjc"
resultMap=
"SjDjjcResult"
>
<select
id=
"selectSjDjjcList"
parameterType=
"SjDjjc"
resultMap=
"SjDjjcResult"
>
...
@@ -143,6 +159,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -143,6 +159,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"type != null and type != ''"
>
and type = #{type}
</if>
<if
test=
"type != null and type != ''"
>
and type = #{type}
</if>
<if
test=
"applyUser != null and applyUser != ''"
>
and apply_user = #{applyUser}
</if>
<if
test=
"applyUser != null and applyUser != ''"
>
and apply_user = #{applyUser}
</if>
<if
test=
"applyTime != null "
>
and apply_time = #{applyTime}
</if>
<if
test=
"applyTime != null "
>
and apply_time = #{applyTime}
</if>
<if
test=
"zjyinstanceId != null and zjyinstanceId != ''"
>
and zjyinstance_id = #{zjyinstanceId}
</if>
<if
test=
"zjyprocessStatus != null and zjyprocessStatus != ''"
>
and zjyprocess_status = #{zjyprocessStatus}
</if>
<if
test=
"zjyrefuseContent != null and zjyrefuseContent != ''"
>
and zjyrefuse_content = #{zjyrefuseContent}
</if>
<if
test=
"zjytype != null and zjytype != ''"
>
and zjytype = #{zjytype}
</if>
<if
test=
"zjyapplyUser != null and zjyapplyUser != ''"
>
and zjyapply_user = #{zjyapplyUser}
</if>
<if
test=
"zjyapplyTime != null "
>
and zjyapply_time = #{zjyapplyTime}
</if>
<!-- 数据范围过滤 -->
<!-- 数据范围过滤 -->
${params.dataScope}
${params.dataScope}
</where>
</where>
...
@@ -162,6 +184,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -162,6 +184,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include
refid=
"selectSjDjjcVo"
/>
<include
refid=
"selectSjDjjcVo"
/>
where a.instance_id = #{instanceId}
where a.instance_id = #{instanceId}
</select>
</select>
<select
id=
"selectSjDjjcByinstanceIdZjy"
resultType=
"com.zjsgfa.project.zjsgfa.domain.SjDjjc"
>
<include
refid=
"selectSjDjjcVo"
/>
where a.zjyinstance_id = #{instanceId}
</select>
<insert
id=
"insertSjDjjc"
parameterType=
"SjDjjc"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
<insert
id=
"insertSjDjjc"
parameterType=
"SjDjjc"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into sj_djjc
insert into sj_djjc
...
@@ -214,6 +240,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -214,6 +240,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"type != null"
>
type,
</if>
<if
test=
"type != null"
>
type,
</if>
<if
test=
"applyUser != null"
>
apply_user,
</if>
<if
test=
"applyUser != null"
>
apply_user,
</if>
<if
test=
"applyTime != null"
>
apply_time,
</if>
<if
test=
"applyTime != null"
>
apply_time,
</if>
<if
test=
"zjyinstanceId != null"
>
zjyinstance_id,
</if>
<if
test=
"zjyprocessStatus != null"
>
zjyprocess_status,
</if>
<if
test=
"zjyrefuseContent != null"
>
zjyrefuse_content,
</if>
<if
test=
"zjytype != null"
>
zjytype,
</if>
<if
test=
"zjyapplyUser != null"
>
zjyapply_user,
</if>
<if
test=
"zjyapplyTime != null"
>
zjyapply_time,
</if>
</trim>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"jh != null"
>
#{jh},
</if>
<if
test=
"jh != null"
>
#{jh},
</if>
...
@@ -264,6 +296,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -264,6 +296,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"type != null"
>
#{type},
</if>
<if
test=
"type != null"
>
#{type},
</if>
<if
test=
"applyUser != null"
>
#{applyUser},
</if>
<if
test=
"applyUser != null"
>
#{applyUser},
</if>
<if
test=
"applyTime != null"
>
#{applyTime},
</if>
<if
test=
"applyTime != null"
>
#{applyTime},
</if>
<if
test=
"zjyinstanceId != null"
>
#{zjyinstanceId},
</if>
<if
test=
"zjyprocessStatus != null"
>
#{zjyprocessStatus},
</if>
<if
test=
"zjyrefuseContent != null"
>
#{zjyrefuseContent},
</if>
<if
test=
"zjytype != null"
>
#{zjytype},
</if>
<if
test=
"zjyapplyUser != null"
>
#{zjyapplyUser},
</if>
<if
test=
"zjyapplyTime != null"
>
#{zjyapplyTime},
</if>
</trim>
</trim>
</insert>
</insert>
...
@@ -317,9 +355,74 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -317,9 +355,74 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"type != null"
>
type = #{type},
</if>
<if
test=
"type != null"
>
type = #{type},
</if>
<if
test=
"applyUser != null"
>
apply_user = #{applyUser},
</if>
<if
test=
"applyUser != null"
>
apply_user = #{applyUser},
</if>
<if
test=
"applyTime != null"
>
apply_time = #{applyTime},
</if>
<if
test=
"applyTime != null"
>
apply_time = #{applyTime},
</if>
<if
test=
"zjyinstanceId != null"
>
zjyinstance_id = #{zjyinstanceId},
</if>
<if
test=
"zjyprocessStatus != null"
>
zjyprocess_status = #{zjyprocessStatus},
</if>
<if
test=
"zjyrefuseContent != null"
>
zjyrefuse_content = #{zjyrefuseContent},
</if>
<if
test=
"zjytype != null"
>
zjytype = #{zjytype},
</if>
<if
test=
"zjyapplyUser != null"
>
zjyapply_user = #{zjyapplyUser},
</if>
<if
test=
"zjyapplyTime != null"
>
zjyapply_time = #{zjyapplyTime},
</if>
</trim>
</trim>
where jh = #{jh}
where jh = #{jh}
</update>
</update>
<update
id=
"updateSjDjjcById"
>
update sj_djjc
<trim
prefix=
"SET"
suffixOverrides=
","
>
<if
test=
"jb != null"
>
jb = #{jb},
</if>
<if
test=
"jx != null"
>
jx = #{jx},
</if>
<if
test=
"jkhzb != null"
>
jkhzb = #{jkhzb},
</if>
<if
test=
"jkzzb != null"
>
jkzzb = #{jkzzb},
</if>
<if
test=
"gzwz != null"
>
gzwz = #{gzwz},
</if>
<if
test=
"wzcw != null"
>
wzcw = #{wzcw},
</if>
<if
test=
"ztmd != null"
>
ztmd = #{ztmd},
</if>
<if
test=
"wzyz != null"
>
wzyz = #{wzyz},
</if>
<if
test=
"wjfa != null"
>
wjfa = #{wjfa},
</if>
<if
test=
"createdBy != null"
>
created_by = #{createdBy},
</if>
<if
test=
"createdTime != null"
>
created_time = #{createdTime},
</if>
<if
test=
"updateBy != null"
>
update_by = #{updateBy},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime},
</if>
<if
test=
"zjgs != null"
>
zjgs = #{zjgs},
</if>
<if
test=
"zjd != null"
>
zjd = #{zjd},
</if>
<if
test=
"jdhzb != null"
>
jdhzb = #{jdhzb},
</if>
<if
test=
"jdzzb != null"
>
jdzzb = #{jdzzb},
</if>
<if
test=
"zt != null"
>
zt = #{zt},
</if>
<if
test=
"qk != null"
>
qk = #{qk},
</if>
<if
test=
"sjzt != null"
>
sjzt = #{sjzt},
</if>
<if
test=
"ljzlzt != null"
>
ljzlzt = #{ljzlzt},
</if>
<if
test=
"dzfxzt != null"
>
dzfxzt = #{dzfxzt},
</if>
<if
test=
"fxtszt != null"
>
fxtszt = #{fxtszt},
</if>
<if
test=
"sggyzt != null"
>
sggyzt = #{sggyzt},
</if>
<if
test=
"fdsgzt != null"
>
fdsgzt = #{fdsgzt},
</if>
<if
test=
"jkzt != null"
>
jkzt = #{jkzt},
</if>
<if
test=
"hsezt != null"
>
hsezt = #{hsezt},
</if>
<if
test=
"jhjdzt != null"
>
jhjdzt = #{jhjdzt},
</if>
<if
test=
"flzt != null"
>
flzt = #{flzt},
</if>
<if
test=
"faid != null"
>
faid = #{faid},
</if>
<if
test=
"famc != null"
>
famc = #{famc},
</if>
<if
test=
"deptid != null"
>
deptid = #{deptid},
</if>
<if
test=
"jfdw != null"
>
jfdw = #{jfdw},
</if>
<if
test=
"bxg != null"
>
bxg = #{bxg},
</if>
<if
test=
"yctglrgd != null"
>
yctglrgd = #{yctglrgd},
</if>
<if
test=
"dlwz != null"
>
dlwz = #{dlwz},
</if>
<if
test=
"gzmc != null"
>
gzmc = #{gzmc},
</if>
<if
test=
"ahzb != null"
>
ahzb = #{ahzb},
</if>
<if
test=
"azzb != null"
>
azzb = #{azzb},
</if>
<if
test=
"bhzb != null"
>
bhzb = #{bhzb},
</if>
<if
test=
"bzzb != null"
>
bzzb = #{bzzb},
</if>
<if
test=
"instanceId != null"
>
instance_id = #{instanceId},
</if>
<if
test=
"processStatus != null"
>
process_status = #{processStatus},
</if>
<if
test=
"refuseContent != null"
>
refuse_content = #{refuseContent},
</if>
<if
test=
"type != null"
>
type = #{type},
</if>
<if
test=
"applyUser != null"
>
apply_user = #{applyUser},
</if>
<if
test=
"applyTime != null"
>
apply_time = #{applyTime},
</if>
<if
test=
"zjyinstanceId != null"
>
zjyinstance_id = #{zjyinstanceId},
</if>
<if
test=
"zjyprocessStatus != null"
>
zjyprocess_status = #{zjyprocessStatus},
</if>
<if
test=
"zjyrefuseContent != null"
>
zjyrefuse_content = #{zjyrefuseContent},
</if>
<if
test=
"zjytype != null"
>
zjytype = #{zjytype},
</if>
<if
test=
"zjyapplyUser != null"
>
zjyapply_user = #{zjyapplyUser},
</if>
<if
test=
"zjyapplyTime != null"
>
zjyapply_time = #{zjyapplyTime},
</if>
</trim>
where id = #{id}
</update>
<delete
id=
"deleteSjDjjcById"
parameterType=
"Long"
>
<delete
id=
"deleteSjDjjcById"
parameterType=
"Long"
>
delete from sj_djjc where id = #{id}
delete from sj_djjc where id = #{id}
...
...
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