Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
13d4c293
Commit
13d4c293
authored
Mar 13, 2024
by
suhuiguang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.告知类修改并发问题
parent
bff0eab0
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
328 additions
and
105 deletions
+328
-105
JgMaintainNoticeDto.java
...join/amos/boot/module/jg/api/dto/JgMaintainNoticeDto.java
+0
-2
JgReformNoticeDto.java
...eejoin/amos/boot/module/jg/api/dto/JgReformNoticeDto.java
+7
-4
ApplicationRunnerImpl.java
...n/amos/boot/module/jg/biz/init/ApplicationRunnerImpl.java
+14
-1
JgInstallationNoticeServiceImpl.java
.../jg/biz/service/impl/JgInstallationNoticeServiceImpl.java
+68
-22
JgMaintainNoticeServiceImpl.java
...dule/jg/biz/service/impl/JgMaintainNoticeServiceImpl.java
+73
-20
JgReformNoticeServiceImpl.java
...module/jg/biz/service/impl/JgReformNoticeServiceImpl.java
+82
-28
JgTransferNoticeServiceImpl.java
...dule/jg/biz/service/impl/JgTransferNoticeServiceImpl.java
+84
-28
No files found.
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/dto/JgMaintainNoticeDto.java
View file @
13d4c293
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
...
...
@@ -162,7 +161,6 @@ public class JgMaintainNoticeDto extends BaseDto {
@ApiModelProperty
(
value
=
"接收机构机构代码"
)
private
String
receiveOrgCode
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
value
=
"告知设备列表"
)
private
List
<
Map
<
String
,
Object
>>
deviceList
;
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/dto/JgReformNoticeDto.java
View file @
13d4c293
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
dto
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
...
...
@@ -131,11 +130,9 @@ public class JgReformNoticeDto extends BaseDto {
private
String
entrustingUnitName
;
@ApiModelProperty
(
value
=
"委托书附件"
)
@TableField
(
typeHandler
=
FastjsonTypeHandler
.
class
)
private
List
<
JSONObject
>
powerOfAttorney
;
@ApiModelProperty
(
value
=
"施工合同附件"
)
@TableField
(
typeHandler
=
FastjsonTypeHandler
.
class
)
private
List
<
JSONObject
>
constructionContract
;
@ApiModelProperty
(
value
=
"施工合同是否本单位与甲方直接签署"
)
...
...
@@ -163,7 +160,6 @@ public class JgReformNoticeDto extends BaseDto {
private
String
equCategory
;
/* ---------------- -------------- */
@TableField
(
exist
=
false
)
@ApiModelProperty
(
value
=
"告知设备列表"
)
private
List
<
Map
<
String
,
Object
>>
deviceList
;
...
...
@@ -228,4 +224,11 @@ public class JgReformNoticeDto extends BaseDto {
@ApiModelProperty
(
value
=
"其他附件"
)
private
String
otherAccessories
;
/**
*工作流下一节点任务id
*/
@ApiModelProperty
(
value
=
"工作流下一节点任务id"
)
private
String
nextTaskId
;
}
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/init/ApplicationRunnerImpl.java
View file @
13d4c293
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
init
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgInstallationNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration
;
import
com.yeejoin.amos.boot.module.jg.biz.service.impl.CommonServiceImpl
;
import
com.yeejoin.amos.boot.module.jg.biz.service.impl.JgInstallationNoticeServiceImpl
;
import
com.yeejoin.amos.boot.module.jg.biz.service.impl.JgUseRegistrationServiceImpl
;
import
com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum
;
import
org.springframework.boot.ApplicationArguments
;
...
...
@@ -20,18 +22,29 @@ public class ApplicationRunnerImpl implements ApplicationRunner {
private
CommonServiceImpl
commonService
;
public
ApplicationRunnerImpl
(
JgUseRegistrationServiceImpl
useRegistrationService
,
CommonServiceImpl
commonService
)
{
private
JgInstallationNoticeServiceImpl
installationNoticeService
;
public
ApplicationRunnerImpl
(
JgUseRegistrationServiceImpl
useRegistrationService
,
CommonServiceImpl
commonService
,
JgInstallationNoticeServiceImpl
installationNoticeService
)
{
this
.
commonService
=
commonService
;
this
.
useRegistrationService
=
useRegistrationService
;
this
.
installationNoticeService
=
installationNoticeService
;
}
@Override
public
void
run
(
ApplicationArguments
args
)
{
// TODO 增加删除启动时, 完成时
// 使用登记数据初始化
List
<
JgUseRegistration
>
jgUseRegistrations
=
useRegistrationService
.
list
(
new
LambdaQueryWrapper
<
JgUseRegistration
>().
ne
(
JgUseRegistration:
:
getStatus
,
FlowStatusEnum
.
TO_BE_FINISHED
.
getName
()));
jgUseRegistrations
.
forEach
(
jgUseRegistration
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgUseRegistration
.
getInstanceId
(),
useRegistrationService
.
buildInstanceRuntimeData
(
jgUseRegistration
));
});
// 安装告知数据初始化
List
<
JgInstallationNotice
>
jgInstallationNotices
=
installationNoticeService
.
list
(
new
LambdaQueryWrapper
<
JgInstallationNotice
>().
ne
(
JgInstallationNotice:
:
getNoticeStatus
,
FlowStatusEnum
.
TO_BE_FINISHED
.
getCode
()));
jgInstallationNotices
.
forEach
(
jgInstallation
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgInstallation
.
getInstanceId
(),
installationNoticeService
.
buildInstanceRuntimeData
(
jgInstallation
));
});
}
}
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/JgInstallationNoticeServiceImpl.java
View file @
13d4c293
...
...
@@ -7,18 +7,17 @@ import com.alibaba.fastjson.JSONObject;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.pagehelper.util.StringUtil
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper
;
import
com.yeejoin.amos.boot.biz.common.entity.DataDictionary
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisKey
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisUtils
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgInstallationNoticeDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskMessageDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskModelDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.WorkflowResultDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.*
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgInstallationNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgInstallationNoticeEq
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration
;
import
com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum
;
import
com.yeejoin.amos.boot.module.jg.api.enums.CompanyTypeEnum
;
import
com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper
;
...
...
@@ -46,6 +45,8 @@ import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
import
com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO
;
import
com.yeejoin.amos.feign.workflow.model.TaskResultDTO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -65,6 +66,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import
javax.servlet.http.HttpServletResponse
;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
...
...
@@ -159,6 +161,9 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
@Autowired
private
CommonServiceImpl
commonService
;
@Autowired
private
RedissonClient
redissonClient
;
/**
* 根据sequenceNbr查询
*
...
...
@@ -332,7 +337,7 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
commonService
.
buildTaskModel
(
Collections
.
singletonList
(
taskModelDto
));
}
}
commonService
.
saveExecuteFlowData2Redis
(
notice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
notice
));
}
else
{
JgInstallationNotice
bean
=
new
JgInstallationNotice
();
BeanUtils
.
copyProperties
(
noticeDto
,
bean
);
...
...
@@ -377,13 +382,6 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
}
/**
* 列表查询 示例
*/
public
List
<
JgInstallationNoticeDto
>
queryForJgInstallationNoticeList
()
{
return
this
.
queryForList
(
""
,
false
);
}
/**
* 批量删除
*
* @param sequenceNbrs 主键
...
...
@@ -533,16 +531,22 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
// 暂存任务
buildTaskDraft
(
list
);
}
List
<
JgInstallationNoticeEq
>
jgRelationEquipList
=
equipList
.
stream
().
map
(
jgRelationEquip
->
{
List
<
JgInstallationNotice
>
collect
=
list
.
stream
().
filter
(
jgInstallationNotice
->
jgRelationEquip
.
getEquipTransferId
().
equals
(
jgInstallationNotice
.
getApplyNo
())).
collect
(
Collectors
.
toList
());
Long
sequenceNbr
=
collect
.
get
(
0
).
getSequenceNbr
();
return
jgRelationEquip
.
setEquipTransferId
(
String
.
valueOf
(
sequenceNbr
));
}).
collect
(
Collectors
.
toList
());
jgInstallationNoticeEqMapper
.
insertBatchSomeColumn
(
jgRelationEquipList
);
this
.
updateRedisBatch
(
list
);
return
list
;
}
private
void
updateRedisBatch
(
List
<
JgInstallationNotice
>
jgInstallationNotices
)
{
jgInstallationNotices
.
stream
().
filter
(
n
->
StringUtil
.
isNotEmpty
(
n
.
getInstanceId
())).
forEach
(
jgInstallationNotice
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgInstallationNotice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
jgInstallationNotice
));
});
}
/**
* 暂存任务生成待办
* @param list 业务信息
...
...
@@ -777,12 +781,21 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
}
@Transactional
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
cancel
(
JgInstallationNoticeDto
noticeDto
)
{
String
instanceId
=
noticeDto
.
getInstanceId
();
String
nextTaskId
=
noticeDto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
){
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForRevocationFlow
(
nextTaskId
,
instanceId
);
JgInstallationNotice
jgInstallationNotice
=
this
.
baseMapper
.
selectById
(
noticeDto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
jgInstallationNotice
.
getNoticeStatus
());
ProcessTaskDTO
processTaskDTO
=
iCmWorkflowService
.
rollBack
(
jgInstallationNotice
.
getInstanceId
());
// 提取节点等信息
WorkflowResultDto
workflowResultDto
=
commonService
.
buildWorkFlowInfo
(
Collections
.
singletonList
(
processTaskDTO
)).
get
(
0
);
...
...
@@ -801,15 +814,32 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
jsonObject
.
put
(
"flowStatus"
,
FlowStatusEnum
.
ROLLBACK
.
getCode
());
jsonObject
.
put
(
"nextTaskId"
,
jgInstallationNotice
.
getNextTaskId
());
commonService
.
rollbackTask
(
jgInstallationNotice
.
getInstanceId
(),
jsonObject
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgInstallationNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
()){
lock
.
unlock
();
}
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
accept
(
JgInstallationNoticeDto
dto
,
String
op
)
{
ReginParams
reginParams
=
JSONObject
.
parseObject
(
redisUtils
.
get
(
RedisKey
.
buildReginKey
(
RequestContext
.
getExeUserId
(),
RequestContext
.
getToken
())).
toString
(),
ReginParams
.
class
);
JgInstallationNotice
jgInstallationNotice
=
this
.
getById
(
dto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
jgInstallationNotice
.
getNoticeStatus
());
String
instanceId
=
dto
.
getInstanceId
();
String
nextTaskId
=
dto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
){
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForExecuteFlow
(
nextTaskId
,
instanceId
);
JgInstallationNotice
jgInstallationNotice
=
this
.
getById
(
dto
.
getSequenceNbr
());
jgInstallationNotice
.
setProcessAdvice
(
dto
.
getProcessAdvice
());
// 组装设备注册代码
StringBuilder
stringBuffer
=
new
StringBuilder
();
...
...
@@ -821,7 +851,7 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
}
// 执行工作流并返回组装好的工作流信息
WorkflowResultDto
workflowResultDto
=
getWorkflowResultDto
(
op
,
jgInstallationNotice
);
jgInstallationNotice
.
setPromoter
(
reginParams
.
getUserModel
().
get
UserId
());
jgInstallationNotice
.
setPromoter
(
RequestContext
.
getExe
UserId
());
jgInstallationNotice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
TaskV2Model
taskV2Model
=
new
TaskV2Model
();
if
(
"0"
.
equals
(
op
))
{
...
...
@@ -1004,6 +1034,22 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
jgInstallationNotice
.
setNextExecuteUserIds
(
workflowResultDto
.
getNextExecutorUserIds
());
jgInstallationNotice
.
setNextExecuteIds
(
workflowResultDto
.
getNextExecutorRoleIds
());
this
.
updateById
(
jgInstallationNotice
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgInstallationNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
()){
lock
.
unlock
();
}
}
}
public
InstanceRuntimeData
buildInstanceRuntimeData
(
JgInstallationNotice
jgInstallationNotice
)
{
return
InstanceRuntimeData
.
builder
()
.
nextExecuteUserIds
(
jgInstallationNotice
.
getNextExecuteUserIds
())
.
promoter
(
jgInstallationNotice
.
getPromoter
())
.
nextTaskId
(
jgInstallationNotice
.
getNextTaskId
())
.
build
();
}
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/JgMaintainNoticeServiceImpl.java
View file @
13d4c293
...
...
@@ -7,16 +7,14 @@ import com.alibaba.fastjson.JSONObject;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.pagehelper.util.StringUtil
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.biz.common.entity.DataDictionary
;
import
com.yeejoin.amos.boot.biz.common.service.IDataDictionaryService
;
import
com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisUtils
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgMaintainNoticeDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskMessageDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskModelDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.WorkflowResultDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.*
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgMaintainNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgMaintainNoticeEq
;
import
com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum
;
...
...
@@ -30,10 +28,15 @@ import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils;
import
com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo
;
import
com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum
;
import
com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.*
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.OtherInfoMapper
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.RegistrationInfoMapper
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.SupervisoryCodeInfoMapper
;
import
com.yeejoin.amos.feign.systemctl.model.TaskV2Model
;
import
com.yeejoin.amos.feign.workflow.Workflow
;
import
com.yeejoin.amos.feign.workflow.model.*
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -49,6 +52,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -95,9 +99,6 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
DataDictionaryServiceImpl
iDataDictionaryService
;
@Autowired
private
TzBaseUnitLicenceMapper
baseUnitLicenceMapper
;
@Autowired
private
CommonServiceImpl
commonService
;
@Autowired
...
...
@@ -109,6 +110,9 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
@Autowired
JgInstallationNoticeServiceImpl
jgInstallationNoticeService
;
@Autowired
private
RedissonClient
redissonClient
;
/**
* 根据sequenceNbr查询
*
...
...
@@ -142,7 +146,7 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
// 设备信息 "equCategory", "equDefine", "equRegisterCode", "produceCountry", "produceLicenseNum",
JgMaintainNoticeEq
jgMaintainNoticeEq
=
jgMaintainNoticeEqMapper
.
selectOne
(
new
LambdaQueryWrapper
<
JgMaintainNoticeEq
>().
eq
(
JgMaintainNoticeEq:
:
getEquipTransferId
,
sequenceNbr
));
Map
<
String
,
Object
>
map
=
idxBizJgRegisterInfoService
.
getDetailFieldCamelCaseByRecord
(
jgMaintainNoticeEq
.
getEquId
());
map
.
put
(
"uuseUnitCreditCode"
,
map
.
get
(
"useUnitCreditCode"
));
map
.
put
(
"uuseUnitCreditCode"
,
map
.
get
(
"useUnitCreditCode"
));
map
.
remove
(
"useUnitCreditCode"
);
map
.
remove
(
"address"
);
map
.
remove
(
"sequenceNbr"
);
...
...
@@ -266,6 +270,7 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
commonService
.
buildTaskModel
(
Collections
.
singletonList
(
taskModelDto
));
}
}
commonService
.
saveExecuteFlowData2Redis
(
notice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
notice
));
}
else
{
JgMaintainNotice
bean
=
new
JgMaintainNotice
();
BeanUtils
.
copyProperties
(
noticeDto
,
bean
);
...
...
@@ -288,7 +293,7 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
String
type
=
reginParams
.
getCompany
().
getLevel
();
String
userId
=
reginParams
.
getUserModel
().
getUserId
();
List
<
DataDictionary
>
dictionaries
=
dataDictionaryService
.
getByType
(
"WXLX"
);
Page
<
JgMaintainNotice
>
noticePage
=
jgMaintainNoticeMapper
.
queryForPage
(
page
,
model
,
type
,
orgCode
,
userId
);
Page
<
JgMaintainNotice
>
noticePage
=
jgMaintainNoticeMapper
.
queryForPage
(
page
,
model
,
type
,
orgCode
,
userId
);
Page
<
JgMaintainNoticeDto
>
noticeDtoPage
=
new
Page
<>();
BeanUtils
.
copyProperties
(
noticePage
,
noticeDtoPage
,
"records"
);
List
<
JgMaintainNoticeDto
>
records
=
noticePage
.
getRecords
().
stream
().
map
(
notice
->
{
...
...
@@ -433,7 +438,7 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
dto
.
setCreateUserName
(
reginParams
.
getUserModel
().
getRealName
());
dto
.
setCreateUserId
(
reginParams
.
getUserModel
().
getUserId
());
DataDictionary
dictionary
=
iDataDictionaryService
.
getByCode
(
dto
.
getMaintainType
(),
"WXLX"
);
DataDictionary
dictionary
=
iDataDictionaryService
.
getByCode
(
dto
.
getMaintainType
(),
"WXLX"
);
dto
.
setMaintainTypeDesc
(
dictionary
.
getName
());
dto
.
setFullAddress
(
dto
.
getProvinceName
()
+
dto
.
getCityName
()
+
dto
.
getCountyName
()
+
dto
.
getStreetName
()
+
dto
.
getAddress
());
list
.
add
(
dto
);
...
...
@@ -446,16 +451,22 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
// 暂存任务
buildTaskDraft
(
list
);
}
List
<
JgMaintainNoticeEq
>
jgRelationEquipList
=
equipList
.
stream
().
map
(
jgRelationEquip
->
{
List
<
JgMaintainNotice
>
collect
=
list
.
stream
().
filter
(
JgMaintainNotice
->
jgRelationEquip
.
getEquipTransferId
().
equals
(
JgMaintainNotice
.
getApplyNo
())).
collect
(
Collectors
.
toList
());
Long
sequenceNbr
=
collect
.
get
(
0
).
getSequenceNbr
();
return
jgRelationEquip
.
setEquipTransferId
(
String
.
valueOf
(
sequenceNbr
));
}).
collect
(
Collectors
.
toList
());
jgMaintainNoticeEqMapper
.
insertBatchSomeColumn
(
jgRelationEquipList
);
this
.
updateRedisBatch
(
list
);
return
list
;
}
private
void
updateRedisBatch
(
List
<
JgMaintainNotice
>
jgMaintainNotices
)
{
jgMaintainNotices
.
stream
().
filter
(
n
->
StringUtil
.
isNotEmpty
(
n
.
getInstanceId
())).
forEach
(
jgMaintainNotice
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgMaintainNotice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
jgMaintainNotice
));
});
}
/**
* 暂存任务生成待办
*
...
...
@@ -563,8 +574,9 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
}
private
void
convertField
(
JgMaintainNoticeDto
model
)
{
if
(
null
==
model
)
if
(
null
==
model
)
{
return
;
}
// 处理附件
if
(!
ValidationUtil
.
isEmpty
(
model
.
getPowerOfAttorneyList
()))
{
model
.
setPowerOfAttorney
(
JSON
.
toJSONString
(
model
.
getPowerOfAttorneyList
()));
...
...
@@ -675,9 +687,19 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
}
public
void
cancel
(
JgMaintainNoticeDto
noticeDto
)
{
String
instanceId
=
noticeDto
.
getInstanceId
();
String
nextTaskId
=
noticeDto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
)
{
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForRevocationFlow
(
nextTaskId
,
instanceId
);
JgMaintainNotice
jgMaintainNotice
=
this
.
baseMapper
.
selectById
(
noticeDto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
jgMaintainNotice
.
getNoticeStatus
());
ProcessTaskDTO
processTaskDTO
=
cmWorkflowService
.
rollBack
(
jgMaintainNotice
.
getInstanceId
());
// 提取节点等信息
WorkflowResultDto
workflowResultDto
=
commonService
.
buildWorkFlowInfo
(
Collections
.
singletonList
(
processTaskDTO
)).
get
(
0
);
...
...
@@ -687,7 +709,6 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
jgMaintainNotice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
jgMaintainNotice
.
setNextExecuteUserIds
(
workflowResultDto
.
getNextExecutorUserIds
());
updateById
(
jgMaintainNotice
);
// 删除待办
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
jgMaintainNotice
));
jsonObject
.
put
(
"nextExecuteUser"
,
jgMaintainNotice
.
getNextExecuteIds
());
...
...
@@ -696,15 +717,39 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
jsonObject
.
put
(
"flowStatus"
,
FlowStatusEnum
.
ROLLBACK
.
getCode
());
commonService
.
rollbackTask
(
jgMaintainNotice
.
getInstanceId
(),
jsonObject
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgMaintainNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
public
InstanceRuntimeData
buildInstanceRuntimeData
(
JgMaintainNotice
jgMaintainNotice
)
{
return
InstanceRuntimeData
.
builder
()
.
nextExecuteUserIds
(
jgMaintainNotice
.
getNextExecuteUserIds
())
.
promoter
(
jgMaintainNotice
.
getPromoter
())
.
nextTaskId
(
jgMaintainNotice
.
getNextTaskId
())
.
build
();
}
@Transactional
public
void
accept
(
JgMaintainNoticeDto
dto
,
String
op
,
String
opinion
)
{
String
instanceId
=
dto
.
getInstanceId
();
String
nextTaskId
=
dto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
)
{
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForExecuteFlow
(
nextTaskId
,
instanceId
);
JgMaintainNotice
jgMaintainNotice
=
this
.
jgMaintainNoticeMapper
.
selectById
(
dto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
jgMaintainNotice
.
getNoticeStatus
());
// 组装设备注册代码
StringBuilder
stringBuffer
=
new
StringBuilder
();
String
ym
=
null
;
...
...
@@ -821,6 +866,14 @@ public class JgMaintainNoticeServiceImpl extends BaseService<JgMaintainNoticeDto
jgMaintainNotice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
jgMaintainNoticeMapper
.
updateById
(
jgMaintainNotice
);
}
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgMaintainNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/JgReformNoticeServiceImpl.java
View file @
13d4c293
...
...
@@ -6,14 +6,13 @@ import com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.pagehelper.util.StringUtil
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisKey
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisUtils
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgReformNoticeDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskMessageDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskModelDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.WorkflowResultDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.*
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgInstallationNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgReformNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgReformNoticeEq
;
import
com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum
;
...
...
@@ -26,13 +25,18 @@ import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils;
import
com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo
;
import
com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum
;
import
com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.*
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.OtherInfoMapper
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.RegistrationInfoMapper
;
import
com.yeejoin.amos.boot.module.ymt.api.mapper.SupervisoryCodeInfoMapper
;
import
com.yeejoin.amos.feign.systemctl.model.TaskV2Model
;
import
com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO
;
import
com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO
;
import
com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO
;
import
com.yeejoin.amos.feign.workflow.model.TaskResultDTO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -48,6 +52,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
...
...
@@ -89,8 +94,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
RedisUtils
redisUtils
;
@Autowired
private
JgReformNoticeMapper
jgReformNoticeMapper
;
@Autowired
private
TzBaseUnitLicenceMapper
baseUnitLicenceMapper
;
@Autowired
private
CommonServiceImpl
commonService
;
@Autowired
...
...
@@ -101,6 +105,9 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
@Autowired
JgInstallationNoticeServiceImpl
jgInstallationNoticeService
;
@Autowired
private
RedissonClient
redissonClient
;
/**
* 根据sequenceNbr查询
*
...
...
@@ -130,7 +137,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
}
String
[]
fields
=
{
"productPhoto"
,
"designDoc"
,
"designStandard"
,
"factoryStandard"
,
"productQualityYieldProve"
,
"insUseMaintainExplain"
,
"inspectReport"
,
"proxyStatementAttachment"
,
"installContractAttachment"
,
"otherAccessories"
};
"proxyStatementAttachment"
,
"installContractAttachment"
,
"otherAccessories"
};
// 设备信息
List
<
Map
<
String
,
Object
>>
equipmentInfos
=
jgReformNoticeMapper
.
queryEquipInformation
(
sequenceNbr
);
Map
<
String
,
Object
>
equipMap
=
null
;
...
...
@@ -206,10 +213,10 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
jgReformNoticeMapper
.
updateById
(
notice
);
//删除暂存
commonService
.
deleteTaskModel
(
notice
.
getSequenceNbr
()
+
""
);
commonService
.
deleteTaskModel
(
notice
.
getSequenceNbr
()
+
""
);
// 如果为保存并提交,则创建代办
this
.
buildTask
(
Collections
.
singletonList
(
notice
),
Collections
.
singletonList
(
workflowResultDto
));
}
else
{
}
else
{
TaskResultDTO
dto
=
new
TaskResultDTO
();
dto
.
setResultCode
(
"approvalStatus"
);
dto
.
setTaskId
(
notice
.
getNextTaskId
());
...
...
@@ -243,6 +250,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
// 创建新的代办
this
.
createNewTodo
(
notice
,
workflowResultDto
,
taskV2Model
,
FlowStatusEnum
.
TO_BE_PROCESSED
);
}
commonService
.
saveExecuteFlowData2Redis
(
notice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
notice
));
}
else
{
JgReformNotice
bean
=
new
JgReformNotice
();
BeanUtils
.
copyProperties
(
noticeDto
,
bean
);
...
...
@@ -385,11 +393,11 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
dto
.
setCreateUserName
(
reginParams
.
getUserModel
().
getRealName
());
dto
.
setCreateUserId
(
reginParams
.
getUserModel
().
getUserId
());
dto
.
setCreateUserCompanyName
(
reginParams
.
getCompany
().
getCompanyName
());
dto
.
setEquCategory
(
Objects
.
toString
(
obj
.
get
(
"EQU_CATEGORY"
),
""
));
dto
.
setEquListCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_DEFINE"
),
""
));
dto
.
setSupervisoryCode
(
Objects
.
toString
(
obj
.
get
(
"SUPERVISORY_CODE"
),
""
));
dto
.
setEquList
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST"
),
""
));
dto
.
setFullAddress
(
Objects
.
toString
(
obj
.
get
(
"ADDRESS"
),
""
));
dto
.
setEquCategory
(
Objects
.
toString
(
obj
.
get
(
"EQU_CATEGORY"
),
""
));
dto
.
setEquListCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_DEFINE"
),
""
));
dto
.
setSupervisoryCode
(
Objects
.
toString
(
obj
.
get
(
"SUPERVISORY_CODE"
),
""
));
dto
.
setEquList
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST"
),
""
));
dto
.
setFullAddress
(
Objects
.
toString
(
obj
.
get
(
"ADDRESS"
),
""
));
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
WorkflowResultDto
workflowResult
=
workflowResultList
.
get
(
i
);
...
...
@@ -398,7 +406,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
dto
.
setPromoter
(
reginParams
.
getUserModel
().
getUserId
());
dto
.
setNextTaskId
(
workflowResult
.
getNextTaskId
());
dto
.
setNextExecuteUserIds
(
workflowResult
.
getNextExecutorUserIds
());
}
else
{
}
else
{
dto
.
setNextExecuteUserIds
(
RequestContext
.
getExeUserId
());
}
dto
.
setInstallUnitName
(
reginParams
.
getCompany
().
getCompanyName
());
...
...
@@ -423,22 +431,28 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
this
.
buildTask
(
list
,
workflowResultList
);
}
else
{
}
else
{
this
.
saveTempReformNotice
(
list
);
}
List
<
JgReformNoticeEq
>
jgRelationEquipList
=
equipList
.
stream
().
map
(
jgRelationEquip
->
{
List
<
JgReformNotice
>
collect
=
list
.
stream
().
filter
(
JgReformNotice
->
jgRelationEquip
.
getEquipTransferId
().
equals
(
JgReformNotice
.
getApplyNo
())).
collect
(
Collectors
.
toList
());
Long
sequenceNbr
=
collect
.
get
(
0
).
getSequenceNbr
();
return
jgRelationEquip
.
setEquipTransferId
(
String
.
valueOf
(
sequenceNbr
));
}).
collect
(
Collectors
.
toList
());
jgReformNoticeEqMapper
.
insertBatchSomeColumn
(
jgRelationEquipList
);
this
.
updateRedisBatch
(
list
);
return
list
;
}
private
void
updateRedisBatch
(
List
<
JgReformNotice
>
jgReformNotices
)
{
jgReformNotices
.
stream
().
filter
(
n
->
StringUtil
.
isNotEmpty
(
n
.
getInstanceId
())).
forEach
(
jgReformNotice
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgReformNotice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
jgReformNotice
));
});
}
/**
* 批量暂存
*
* @param noticeList 移交信息
*/
private
void
saveTempReformNotice
(
List
<
JgReformNotice
>
noticeList
)
{
...
...
@@ -456,7 +470,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
.
taskContent
(
String
.
format
(
"来自%s【%s】的业务办理,【申请单号:%s】"
,
item
.
getEquList
(),
Objects
.
toString
(
item
.
getSupervisoryCode
(),
""
),
item
.
getApplyNo
()))
.
taskCode
(
item
.
getApplyNo
())
.
taskType
(
BusinessTypeEnum
.
JG_MODIFICATION_NOTIFICATION
.
getCode
())
.
relationId
(
item
.
getSequenceNbr
()
+
""
)
.
relationId
(
item
.
getSequenceNbr
()
+
""
)
.
build
();
}
...
...
@@ -634,13 +648,22 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
*
* @param noticeDto 改造信息
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
cancel
(
JgReformNoticeDto
noticeDto
)
{
String
instanceId
=
noticeDto
.
getInstanceId
();
String
nextTaskId
=
noticeDto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
)
{
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForRevocationFlow
(
nextTaskId
,
instanceId
);
// 查询 改造信息
JgReformNotice
notice
=
baseMapper
.
selectById
(
noticeDto
.
getSequenceNbr
());
if
(
notice
!=
null
)
{
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
notice
.
getNoticeStatus
());
// 回滚工作流
ProcessTaskDTO
processTaskDTO
=
cmWorkflowService
.
rollBack
(
noticeDto
.
getInstanceId
());
WorkflowResultDto
workflowResultDto
=
commonService
.
buildWorkFlowInfo
(
Collections
.
singletonList
(
processTaskDTO
)).
get
(
0
);
...
...
@@ -650,13 +673,19 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
notice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
notice
.
setNextExecuteUserIds
(
workflowResultDto
.
getNextExecutorUserIds
());
baseMapper
.
updateById
(
notice
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
notice
));
jsonObject
.
put
(
"nextExecuteUser"
,
notice
.
getNextExecuteIds
());
jsonObject
.
put
(
"taskType"
,
BusinessTypeEnum
.
JG_MODIFICATION_NOTIFICATION
.
getCode
());
jsonObject
.
put
(
"flowStatus"
,
FlowStatusEnum
.
ROLLBACK
.
getCode
());
jsonObject
.
put
(
"flowStatusLabel"
,
FlowStatusEnum
.
ROLLBACK
.
getName
());
commonService
.
rollbackTask
(
notice
.
getInstanceId
(),
jsonObject
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
notice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
...
...
@@ -667,12 +696,21 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
* @param op 通过或驳回
*/
public
void
accept
(
JgReformNoticeDto
dto
,
String
op
)
{
String
instanceId
=
dto
.
getInstanceId
();
String
nextTaskId
=
dto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
)
{
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForExecuteFlow
(
nextTaskId
,
instanceId
);
ReginParams
reginParams
=
JSONObject
.
parseObject
(
redisUtils
.
get
(
RedisKey
.
buildReginKey
(
RequestContext
.
getExeUserId
(),
RequestContext
.
getToken
())).
toString
(),
ReginParams
.
class
);
JgReformNotice
jgReformNotice
=
baseMapper
.
selectById
(
dto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
jgReformNotice
.
getNoticeStatus
());
jgReformNotice
.
setCreateUserCompanyName
(
reginParams
.
getCompany
().
getCompanyName
());
// 组装设备注册代码
StringBuilder
stringBuffer
=
new
StringBuilder
();
...
...
@@ -752,6 +790,22 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
this
.
createNewTodo
(
jgReformNotice
,
workflowResultDto
,
taskV2Model
,
FlowStatusEnum
.
REJECTED
);
jgReformNoticeMapper
.
updateById
(
jgReformNotice
);
}
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgReformNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
public
InstanceRuntimeData
buildInstanceRuntimeData
(
JgReformNotice
jgReformNotice
)
{
return
InstanceRuntimeData
.
builder
()
.
nextExecuteUserIds
(
jgReformNotice
.
getNextExecuteUserIds
())
.
promoter
(
jgReformNotice
.
getPromoter
())
.
nextTaskId
(
jgReformNotice
.
getNextTaskId
())
.
build
();
}
/**
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/JgTransferNoticeServiceImpl.java
View file @
13d4c293
...
...
@@ -7,14 +7,13 @@ import com.alibaba.fastjson.JSONObject;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.pagehelper.util.StringUtil
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisKey
;
import
com.yeejoin.amos.boot.biz.common.utils.RedisUtils
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgTransferNoticeDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskMessageDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.TaskModelDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.WorkflowResultDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.*
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgMaintainNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgTransferNotice
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgTransferNoticeEq
;
import
com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum
;
...
...
@@ -35,6 +34,8 @@ import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO;
import
com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO
;
import
com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO
;
import
com.yeejoin.amos.feign.workflow.model.TaskResultDTO
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -45,9 +46,12 @@ import org.springframework.util.StringUtils;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
org.typroject.tyboot.core.restful.exception.instance.BadRequest
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -92,6 +96,9 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
@Autowired
private
CommonServiceImpl
commonService
;
@Autowired
private
RedissonClient
redissonClient
;
/**
* 根据sequenceNbr查询
*
...
...
@@ -313,6 +320,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
commonService
.
buildTaskModel
(
Collections
.
singletonList
(
taskModelDto
));
}
}
commonService
.
saveExecuteFlowData2Redis
(
notice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
notice
));
}
else
{
JgTransferNotice
bean
=
new
JgTransferNotice
();
BeanUtils
.
copyProperties
(
noticeDto
,
bean
);
...
...
@@ -324,10 +332,9 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
/**
* 分页查询
*/
@Override
public
Page
<
JgTransferNoticeDto
>
queryForJgTransferNoticePage
(
Page
<
JgTransferNotice
>
page
,
JgTransferNoticeDto
model
,
String
type
,
ReginParams
reginParams
)
{
String
orgCode
;
orgCode
=
reginParams
.
getCompany
().
getCompanyCode
();
// model.setReceiveOrgCode(orgCode);
String
orgCode
=
reginParams
.
getCompany
().
getCompanyCode
();
model
.
setTransferToUserIds
(
reginParams
.
getUserModel
().
getUserId
());
Page
<
JgTransferNotice
>
noticePage
=
jgTransferNoticeMapper
.
queryForPage
(
page
,
model
,
type
,
orgCode
);
...
...
@@ -384,11 +391,17 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
Long
sequenceNbr
=
collect
.
get
(
0
).
getSequenceNbr
();
return
jgRelationEquip
.
setEquipTransferId
(
String
.
valueOf
(
sequenceNbr
));
}).
collect
(
Collectors
.
toList
());
jgTransferNoticeEqMapper
.
insertBatchSomeColumn
(
jgRelationEquipList
);
this
.
updateRedisBatch
(
list
);
return
list
;
}
private
void
updateRedisBatch
(
List
<
JgTransferNotice
>
jgTransferNotices
)
{
jgTransferNotices
.
stream
().
filter
(
n
->
StringUtil
.
isNotEmpty
(
n
.
getInstanceId
())).
forEach
(
jgTransferNotice
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgTransferNotice
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
jgTransferNotice
));
});
}
/**
* 暂存任务生成待办
*
...
...
@@ -602,38 +615,73 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
}
@Transactional
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
cancel
(
JgTransferNoticeDto
noticeDto
)
{
JgTransferNotice
jgInstallationNotice
=
this
.
baseMapper
.
selectById
(
noticeDto
.
getSequenceNbr
());
if
(
jgInstallationNotice
!=
null
)
{
//检查实际状态是否不是待受理状态
commonService
.
checkExpectedStatus
(
jgInstallationNotice
.
getNoticeStatus
());
String
instanceId
=
noticeDto
.
getInstanceId
();
String
nextTaskId
=
noticeDto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
)
{
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForRevocationFlow
(
nextTaskId
,
instanceId
);
JgTransferNotice
jgTransferNotice
=
this
.
baseMapper
.
selectById
(
noticeDto
.
getSequenceNbr
());
ProcessTaskDTO
processTaskDTO
=
iCmWorkflowService
.
rollBack
(
jg
Installation
Notice
.
getInstanceId
());
ProcessTaskDTO
processTaskDTO
=
iCmWorkflowService
.
rollBack
(
jg
Transfer
Notice
.
getInstanceId
());
// 提取节点等信息
WorkflowResultDto
workflowResultDto
=
commonService
.
buildWorkFlowInfo
(
Collections
.
singletonList
(
processTaskDTO
)).
get
(
0
);
jg
Installation
Notice
.
setPromoter
(
""
);
jg
Installation
Notice
.
setNextExecuteIds
(
workflowResultDto
.
getNextExecutorRoleIds
());
jg
Installation
Notice
.
setNextExecuteUserIds
(
workflowResultDto
.
getNextExecutorUserIds
());
jg
Installation
Notice
.
setNoticeStatus
(
String
.
valueOf
(
FlowStatusEnum
.
ROLLBACK
.
getCode
()));
jg
Installation
Notice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
jgTransferNoticeMapper
.
updateById
(
jg
Installation
Notice
);
jg
Transfer
Notice
.
setPromoter
(
""
);
jg
Transfer
Notice
.
setNextExecuteIds
(
workflowResultDto
.
getNextExecutorRoleIds
());
jg
Transfer
Notice
.
setNextExecuteUserIds
(
workflowResultDto
.
getNextExecutorUserIds
());
jg
Transfer
Notice
.
setNoticeStatus
(
String
.
valueOf
(
FlowStatusEnum
.
ROLLBACK
.
getCode
()));
jg
Transfer
Notice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
jgTransferNoticeMapper
.
updateById
(
jg
Transfer
Notice
);
TaskMessageDto
taskMessageDto
=
new
TaskMessageDto
();
BeanUtils
.
copyProperties
(
jg
Installation
Notice
,
taskMessageDto
);
BeanUtils
.
copyProperties
(
jg
Transfer
Notice
,
taskMessageDto
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
taskMessageDto
));
jsonObject
.
put
(
"taskType"
,
BusinessTypeEnum
.
JG_ADVICE_REMOVAL
.
getCode
());
jsonObject
.
put
(
"nextExecuteUser"
,
jg
Installation
Notice
.
getNextExecuteIds
());
jsonObject
.
put
(
"nextExecuteUser"
,
jg
Transfer
Notice
.
getNextExecuteIds
());
jsonObject
.
put
(
"flowStatusLabel"
,
FlowStatusEnum
.
ROLLBACK
.
getName
());
jsonObject
.
put
(
"flowStatus"
,
FlowStatusEnum
.
ROLLBACK
.
getCode
());
jsonObject
.
put
(
"nextTaskId"
,
jgInstallationNotice
.
getNextTaskId
());
commonService
.
rollbackTask
(
jgInstallationNotice
.
getInstanceId
(),
jsonObject
);
jsonObject
.
put
(
"nextTaskId"
,
jgTransferNotice
.
getNextTaskId
());
commonService
.
rollbackTask
(
jgTransferNotice
.
getInstanceId
(),
jsonObject
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgTransferNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
@Transactional
public
void
accept
(
JgTransferNoticeDto
dto
,
String
op
,
String
opinion
)
{
ReginParams
reginParams
=
JSONObject
.
parseObject
(
redisUtils
.
get
(
RedisKey
.
buildReginKey
(
RequestContext
.
getExeUserId
(),
RequestContext
.
getToken
())).
toString
(),
ReginParams
.
class
);
public
InstanceRuntimeData
buildInstanceRuntimeData
(
JgTransferNotice
jgTransferNotice
)
{
return
InstanceRuntimeData
.
builder
()
.
nextExecuteUserIds
(
jgTransferNotice
.
getNextExecuteUserIds
())
.
promoter
(
jgTransferNotice
.
getPromoter
())
.
nextTaskId
(
jgTransferNotice
.
getNextTaskId
())
.
build
();
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
accept
(
JgTransferNoticeDto
dto
,
String
op
,
String
opinion
)
{
String
instanceId
=
dto
.
getInstanceId
();
String
nextTaskId
=
dto
.
getNextTaskId
();
String
lockKey
=
CommonServiceImpl
.
buildJgExecuteLockKey
(
instanceId
);
RLock
lock
=
redissonClient
.
getLock
(
lockKey
);
try
{
boolean
isLocked
=
lock
.
tryLock
(
0
,
180
,
TimeUnit
.
SECONDS
);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if
(!
isLocked
)
{
throw
new
BadRequest
(
"当前流程已经被执行!"
);
}
// 流程执行时,状态及权限校验
commonService
.
checkForExecuteFlow
(
nextTaskId
,
instanceId
);
JgTransferNotice
jgTransferNotice
=
this
.
jgTransferNoticeMapper
.
selectById
(
dto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
...
...
@@ -650,7 +698,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
// 执行工作流并返回组装好的工作流信息
WorkflowResultDto
workflowResultDto
=
getWorkflowResultDto
(
op
,
opinion
,
jgTransferNotice
);
jgTransferNotice
.
setPromoter
(
reginParams
.
getUserModel
().
get
UserId
());
jgTransferNotice
.
setPromoter
(
RequestContext
.
getExe
UserId
());
jgTransferNotice
.
setNextTaskId
(
workflowResultDto
.
getNextTaskId
());
TaskV2Model
taskV2Model
=
new
TaskV2Model
();
if
(
"0"
.
equals
(
op
))
{
...
...
@@ -776,6 +824,14 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
jgTransferNotice
.
setNextExecuteIds
(
workflowResultDto
.
getNextExecutorRoleIds
());
jgTransferNoticeMapper
.
updateById
(
jgTransferNotice
);
}
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgTransferNotice
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
/**
...
...
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