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
5c01536e
Commit
5c01536e
authored
Mar 13, 2024
by
suhuiguang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.设备移交并发修改
parent
7995e161
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
105 additions
and
31 deletions
+105
-31
JgEquipTransferDto.java
...ejoin/amos/boot/module/jg/api/dto/JgEquipTransferDto.java
+7
-4
JgEquipTransferServiceImpl.java
...odule/jg/biz/service/impl/JgEquipTransferServiceImpl.java
+98
-27
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/JgEquipTransferDto.java
View file @
5c01536e
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -19,7 +19,7 @@ import java.util.Map;
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"JgEquipTransferDto"
,
description
=
"设备移交"
)
@ApiModel
(
value
=
"JgEquipTransferDto"
,
description
=
"设备移交"
)
public
class
JgEquipTransferDto
extends
BaseDto
{
private
static
final
long
serialVersionUID
=
1L
;
...
...
@@ -91,7 +91,6 @@ public class JgEquipTransferDto extends BaseDto {
@ApiModelProperty
(
value
=
"流程执行角色"
)
private
String
instanceRoles
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
value
=
"告知设备列表"
)
private
List
<
Map
<
String
,
Object
>>
deviceList
;
...
...
@@ -139,4 +138,8 @@ public class JgEquipTransferDto extends BaseDto {
@ApiModelProperty
(
value
=
"转办人"
)
private
String
transferToUserIds
;
@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/service/impl/JgEquipTransferServiceImpl.java
View file @
5c01536e
...
...
@@ -5,12 +5,16 @@ import cn.hutool.core.map.MapBuilder;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.pagehelper.util.StringUtil
;
import
com.yeejoin.amos.boot.biz.common.bo.CompanyBo
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
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.*
;
import
com.yeejoin.amos.boot.module.jg.api.entity.*
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransferEq
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgMaintainNotice
;
import
com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum
;
import
com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferEqMapper
;
import
com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferMapper
;
...
...
@@ -22,24 +26,30 @@ import com.yeejoin.amos.boot.module.ymt.api.common.BaseException;
import
com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum
;
import
com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum
;
import
com.yeejoin.amos.feign.systemctl.model.TaskV2Model
;
import
com.yeejoin.amos.feign.workflow.model.*
;
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.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.
springframework.context.annotation.Lazy
;
import
org.
springframework.util.StringUtils
;
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.context.annotation.Lazy
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
org.springframework.stereotype.Service
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.typroject.tyboot.core.restful.exception.instance.BadRequest
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
import
java.util.stream.IntStream
;
import
java.util.stream.Stream
;
...
...
@@ -66,6 +76,10 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
@Lazy
private
final
CommonServiceImpl
commonService
;
@Autowired
private
RedissonClient
redissonClient
;
/**
* 保存和保存并提交
*
...
...
@@ -101,15 +115,15 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
JgEquipTransferEq
jgEquipTransferEq
=
buildJgEquipTransferEq
(
obj
,
applyNo
);
JgEquipTransfer
transfer
=
buildJgEquipTransfer
(
model
,
applyNo
,
reginParams
,
submitType
,
workflowResultList
,
i
);
transfer
.
setSupervisoryCode
(
String
.
valueOf
(
obj
.
get
(
"SUPERVISORY_CODE"
)));
transfer
.
setEquList
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST"
),
""
));
transfer
.
setEquDefine
(
Objects
.
toString
(
obj
.
get
(
"EQU_DEFINE"
),
""
));
transfer
.
setEquCategory
(
Objects
.
toString
(
obj
.
get
(
"EQU_CATEGORY"
),
""
));
transfer
.
setProductName
(
Objects
.
toString
(
obj
.
get
(
"PRODUCT_NAME"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setEquList
(
Objects
.
toString
(
obj
.
get
(
"EQU_LIST"
),
""
));
transfer
.
setEquDefine
(
Objects
.
toString
(
obj
.
get
(
"EQU_DEFINE"
),
""
));
transfer
.
setEquCategory
(
Objects
.
toString
(
obj
.
get
(
"EQU_CATEGORY"
),
""
));
transfer
.
setProductName
(
Objects
.
toString
(
obj
.
get
(
"PRODUCT_NAME"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setUseRegistCode
(
Objects
.
toString
(
obj
.
get
(
"USE_ORG_CODE"
),
""
));
transfer
.
setUseInnerCode
(
Objects
.
toString
(
obj
.
get
(
"USE_INNER_CODE"
),
""
));
transfer
.
setEquAddress
(
Objects
.
toString
(
obj
.
get
(
"ADDRESS"
),
""
));
transfer
.
setEquCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_CODE"
),
""
));
transfer
.
setUseInnerCode
(
Objects
.
toString
(
obj
.
get
(
"USE_INNER_CODE"
),
""
));
transfer
.
setEquAddress
(
Objects
.
toString
(
obj
.
get
(
"ADDRESS"
),
""
));
transfer
.
setEquCode
(
Objects
.
toString
(
obj
.
get
(
"EQU_CODE"
),
""
));
transferList
.
add
(
transfer
);
equipTransferEqList
.
add
(
jgEquipTransferEq
);
});
...
...
@@ -117,18 +131,27 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
baseMapper
.
insertBatchSomeColumn
(
transferList
);
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
this
.
buildTask
(
transferList
,
workflowResultList
);
}
else
{
}
else
{
//批量暂存
this
.
saveTempTransfer
(
transferList
);
}
List
<
JgEquipTransferEq
>
jgEquipTransferEqList
=
this
.
buildJgEquipTransferEqList
(
equipTransferEqList
,
transferList
);
jgEquipTransferEqMapper
.
insertBatchSomeColumn
(
jgEquipTransferEqList
);
this
.
updateRedisBatch
(
transferList
);
return
transferList
;
}
private
void
updateRedisBatch
(
List
<
JgEquipTransfer
>
transferList
)
{
transferList
.
stream
().
filter
(
n
->
StringUtil
.
isNotEmpty
(
n
.
getInstanceId
())).
forEach
(
jgEquipTransfer
->
{
commonService
.
saveExecuteFlowData2Redis
(
jgEquipTransfer
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
jgEquipTransfer
));
});
}
/**
* 批量暂存
*
* @param transferList 移交信息
*/
private
void
saveTempTransfer
(
List
<
JgEquipTransfer
>
transferList
)
{
...
...
@@ -146,7 +169,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
.
taskContent
(
String
.
format
(
"来自%s【%s】的业务办理,【申请单号:%s】"
,
item
.
getEquList
(),
Objects
.
toString
(
item
.
getSupervisoryCode
(),
""
),
item
.
getApplyNo
()))
.
taskCode
(
item
.
getApplyNo
())
.
taskType
(
BusinessTypeEnum
.
JG_EQUIPMENT_HANDOVER
.
getCode
())
.
relationId
(
item
.
getSequenceNbr
()
+
""
)
.
relationId
(
item
.
getSequenceNbr
()
+
""
)
.
build
();
}
...
...
@@ -163,7 +186,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
.
put
(
"flowStatus"
,
statusEnum
.
getCode
())
.
put
(
"flowStatusLabel"
,
statusEnum
.
getName
())
.
put
(
"relationId"
,
transfer
.
getInstanceId
())
.
put
(
"model"
,
transfer
)
.
put
(
"model"
,
transfer
)
.
build
());
}
...
...
@@ -248,8 +271,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
*/
@Transactional
(
rollbackFor
=
{
Exception
.
class
,
BaseException
.
class
})
public
JgEquipTransferDto
updateEquipTransfer
(
String
submitType
,
JgEquipTransferDto
equipTransferDto
,
String
op
)
{
if
(
Objects
.
isNull
(
equipTransferDto
)
||
StringUtils
.
isEmpty
(
submitType
))
if
(
Objects
.
isNull
(
equipTransferDto
)
||
StringUtils
.
isEmpty
(
submitType
))
{
throw
new
IllegalArgumentException
(
"参数不能为空"
);
}
this
.
convertField
(
equipTransferDto
);
JgEquipTransfer
transfer
=
this
.
getById
(
equipTransferDto
.
getSequenceNbr
());
...
...
@@ -284,7 +308,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
updateById
(
transfer
);
//删除暂存
commonService
.
deleteTaskModel
(
transfer
.
getSequenceNbr
()
+
""
);
commonService
.
deleteTaskModel
(
transfer
.
getSequenceNbr
()
+
""
);
// 如果为保存并提交,则创建代办
this
.
buildTask
(
Collections
.
singletonList
(
transfer
),
Collections
.
singletonList
(
workflowResultDto
));
...
...
@@ -323,6 +347,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
// 创建新的代办
this
.
createNewTodo
(
transfer
,
workflowResultDto
,
taskV2Model
,
FlowStatusEnum
.
TO_BE_PROCESSED
);
}
commonService
.
saveExecuteFlowData2Redis
(
transfer
.
getInstanceId
(),
this
.
buildInstanceRuntimeData
(
transfer
));
}
else
{
JgEquipTransfer
equipTransfer
=
new
JgEquipTransfer
();
BeanUtils
.
copyProperties
(
equipTransferDto
,
equipTransfer
);
...
...
@@ -338,10 +363,20 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
* @param op 通过或驳回
*/
public
void
accept
(
JgEquipTransferDto
jgEquipTransferDto
,
String
op
)
{
String
instanceId
=
jgEquipTransferDto
.
getInstanceId
();
String
nextTaskId
=
jgEquipTransferDto
.
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
);
JgEquipTransfer
jgEquipTransfer
=
baseMapper
.
selectById
(
jgEquipTransferDto
.
getSequenceNbr
());
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
jgEquipTransfer
.
getApplyStatus
());
TaskResultDTO
workDto
=
new
TaskResultDTO
();
workDto
.
setResultCode
(
"approvalStatus"
);
...
...
@@ -411,6 +446,22 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
this
.
createNewTodo
(
jgEquipTransfer
,
workflowResultDto
,
taskV2Model
,
FlowStatusEnum
.
REJECTED
);
}
updateById
(
jgEquipTransfer
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
jgEquipTransfer
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
public
InstanceRuntimeData
buildInstanceRuntimeData
(
JgEquipTransfer
jgEquipTransfer
)
{
return
InstanceRuntimeData
.
builder
()
.
nextExecuteUserIds
(
jgEquipTransfer
.
getNextExecuteUserIds
())
.
promoter
(
jgEquipTransfer
.
getPromoter
())
.
nextTaskId
(
jgEquipTransfer
.
getNextTaskId
())
.
build
();
}
/**
...
...
@@ -419,11 +470,21 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
* @param equipTransferInfo 设备移交信息
*/
public
void
cancel
(
JgEquipTransferDto
equipTransferInfo
)
{
String
instanceId
=
equipTransferInfo
.
getInstanceId
();
String
nextTaskId
=
equipTransferInfo
.
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
);
// 查询装备移交信息
JgEquipTransfer
equipTransfer
=
baseMapper
.
selectById
(
equipTransferInfo
.
getSequenceNbr
());
if
(
equipTransfer
!=
null
)
{
// 检查实际状态是否不等于期望状态
commonService
.
checkExpectedStatus
(
equipTransfer
.
getApplyStatus
());
// 回滚工作流
ProcessTaskDTO
processTaskDTO
=
cmWorkflowService
.
rollBack
(
equipTransferInfo
.
getInstanceId
());
WorkflowResultDto
workflowResultDto
=
commonService
.
buildWorkFlowInfo
(
Collections
.
singletonList
(
processTaskDTO
)).
get
(
0
);
...
...
@@ -439,8 +500,16 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
jsonObject
.
put
(
"flowStatus"
,
FlowStatusEnum
.
ROLLBACK
.
getCode
());
jsonObject
.
put
(
"flowStatusLabel"
,
FlowStatusEnum
.
ROLLBACK
.
getName
());
commonService
.
rollbackTask
(
equipTransfer
.
getInstanceId
(),
jsonObject
);
commonService
.
saveExecuteFlowData2Redis
(
instanceId
,
this
.
buildInstanceRuntimeData
(
equipTransfer
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
}
private
String
getStringFromMap
(
Map
<
String
,
Object
>
map
,
String
key
)
{
return
map
.
getOrDefault
(
key
,
""
).
toString
();
}
...
...
@@ -481,8 +550,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
public
Map
<
String
,
Object
>
queryBySequenceNbr
(
Long
sequenceNbr
)
{
JgEquipTransfer
equipTransfer
=
baseMapper
.
selectById
(
sequenceNbr
);
if
(
Objects
.
isNull
(
equipTransfer
))
if
(
Objects
.
isNull
(
equipTransfer
))
{
return
null
;
}
String
[]
fields
=
{
"productPhoto"
,
"designDoc"
,
"designStandard"
,
"factoryStandard"
,
"productQualityYieldProve"
,
"insUseMaintainExplain"
,
"inspectReport"
,
...
...
@@ -562,8 +632,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
* @param model 设备信息
*/
private
void
convertField
(
JgEquipTransferDto
model
)
{
if
(
null
==
model
)
if
(
null
==
model
)
{
return
;
}
String
installUnitId
=
model
.
getInstallUnitCreditCode
();
if
(!
ObjectUtils
.
isEmpty
(
installUnitId
))
{
String
[]
installUnitIdList
=
installUnitId
.
split
(
"_"
);
...
...
@@ -598,7 +669,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
dto
.
setPromoter
(
reginParams
.
getUserModel
().
getUserId
());
dto
.
setNextTaskId
(
workflowResult
.
getNextTaskId
());
dto
.
setNextExecuteUserIds
(
workflowResult
.
getNextExecutorUserIds
());
}
else
{
}
else
{
dto
.
setNextExecuteUserIds
(
RequestContext
.
getExeUserId
());
}
if
(!
CollectionUtils
.
isEmpty
(
workflowResultList
))
{
...
...
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