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
62d022b9
Commit
62d022b9
authored
Dec 21, 2023
by
LiuLin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(jg):设备移交代码提交
parent
2d094de9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
494 additions
and
21 deletions
+494
-21
JgEquipTransferDto.java
...ejoin/amos/boot/module/jg/api/dto/JgEquipTransferDto.java
+12
-1
JgEquipTransfer.java
...ejoin/amos/boot/module/jg/api/entity/JgEquipTransfer.java
+6
-0
JgEquipTransferEqMapper.java
...os/boot/module/jg/api/mapper/JgEquipTransferEqMapper.java
+1
-2
JgEquipTransferMapper.java
...amos/boot/module/jg/api/mapper/JgEquipTransferMapper.java
+3
-1
JgEquipTransferByWorkFlowController.java
...g/biz/controller/JgEquipTransferByWorkFlowController.java
+69
-0
JgEquipTransferController.java
...t/module/jg/biz/controller/JgEquipTransferController.java
+31
-5
JgEquipTransferServiceImpl.java
...odule/jg/biz/service/impl/JgEquipTransferServiceImpl.java
+370
-10
CreateCodeServiceImpl.java
...ot/module/ymt/api/service/impl/CreateCodeServiceImpl.java
+1
-1
GenerateCodeServiceImpl.java
.../module/ymt/biz/service/impl/GenerateCodeServiceImpl.java
+1
-1
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 @
62d022b9
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
dto
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* 设备移交
* 设备移交
...
@@ -20,7 +23,6 @@ public class JgEquipTransferDto extends BaseDto {
...
@@ -20,7 +23,6 @@ public class JgEquipTransferDto extends BaseDto {
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"申请编号"
)
@ApiModelProperty
(
value
=
"申请编号"
)
private
String
applyNo
;
private
String
applyNo
;
...
@@ -78,4 +80,13 @@ public class JgEquipTransferDto extends BaseDto {
...
@@ -78,4 +80,13 @@ public class JgEquipTransferDto extends BaseDto {
@ApiModelProperty
(
value
=
"任务发起人id"
)
@ApiModelProperty
(
value
=
"任务发起人id"
)
private
String
promoter
;
private
String
promoter
;
@ApiModelProperty
(
value
=
"任务名称"
)
private
String
taskName
;
@ApiModelProperty
(
value
=
"流程执行角色"
)
private
String
instanceRoles
;
@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/entity/JgEquipTransfer.java
View file @
62d022b9
...
@@ -136,4 +136,10 @@ public class JgEquipTransfer extends BaseEntity {
...
@@ -136,4 +136,10 @@ public class JgEquipTransfer extends BaseEntity {
@TableField
(
value
=
"task_name"
)
@TableField
(
value
=
"task_name"
)
private
String
taskName
;
private
String
taskName
;
/**
* 任务发起人id
*/
@TableField
(
value
=
"instance_roles"
)
private
String
instanceRoles
;
}
}
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/mapper/JgEquipTransferEqMapper.java
View file @
62d022b9
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
mapper
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
mapper
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransferEq
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransferEq
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
/**
/**
* 设备移交关系表 Mapper 接口
* 设备移交关系表 Mapper 接口
...
@@ -9,6 +8,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
...
@@ -9,6 +8,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @author system_generator
* @author system_generator
* @date 2023-12-20
* @date 2023-12-20
*/
*/
public
interface
JgEquipTransferEqMapper
extends
BaseMapper
<
JgEquipTransferEq
>
{
public
interface
JgEquipTransferEqMapper
extends
Custom
BaseMapper
<
JgEquipTransferEq
>
{
}
}
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/mapper/JgEquipTransferMapper.java
View file @
62d022b9
...
@@ -2,7 +2,9 @@ package com.yeejoin.amos.boot.module.jg.api.mapper;
...
@@ -2,7 +2,9 @@ package com.yeejoin.amos.boot.module.jg.api.mapper;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgEquipTransferDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgEquipTransferDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgInstallationNoticeDto
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgInstallationNotice
;
import
org.apache.ibatis.annotations.MapKey
;
import
org.apache.ibatis.annotations.MapKey
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
import
java.util.List
;
...
@@ -15,7 +17,7 @@ import java.util.Map;
...
@@ -15,7 +17,7 @@ import java.util.Map;
* @date 2023-12-20
* @date 2023-12-20
*/
*/
public
interface
JgEquipTransferMapper
extends
CustomBaseMapper
<
JgEquipTransfer
>
{
public
interface
JgEquipTransferMapper
extends
CustomBaseMapper
<
JgEquipTransfer
>
{
Page
<
JgEquipTransfer
>
queryForPage
(
Page
<
JgEquipTransfer
>
page
,
JgEquipTransferDto
dto
,
String
type
,
String
companyCode
);
Page
<
JgEquipTransfer
>
queryForPage
(
Page
<
JgEquipTransfer
>
page
,
@Param
(
"param"
)
JgEquipTransferDto
model
,
@Param
(
"type"
)
String
type
,
@Param
(
"companyCode"
)
String
companyCode
);
void
updatePromoter
(
@Param
(
"id"
)
Long
id
);
void
updatePromoter
(
@Param
(
"id"
)
Long
id
);
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/controller/JgEquipTransferByWorkFlowController.java
0 → 100644
View file @
62d022b9
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
controller
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgEquipTransferDto
;
import
com.yeejoin.amos.boot.module.jg.biz.service.impl.JgEquipTransferServiceImpl
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.typroject.tyboot.core.foundation.enumeration.UserType
;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.Objects
;
/**
* 设备移交
*
* @author system_generator
* @date 2023-12-20
*/
@RestController
@Api
(
tags
=
"设备移交Api"
)
@RequestMapping
(
value
=
"/jg-equip-transfer"
)
public
class
JgEquipTransferByWorkFlowController
extends
BaseController
{
@Autowired
JgEquipTransferServiceImpl
jgEquipTransferServiceImpl
;
private
static
final
String
TABLE_PAGE_ID
=
"1734141426742095873"
;
/**
* 受理
*
* @return
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/accept"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"设备移交受理"
,
notes
=
"设备移交受理"
)
public
ResponseModel
<
JgEquipTransferDto
>
accept
(
@RequestBody
Map
<
String
,
Object
>
model
,
String
op
)
{
LinkedHashMap
model1
=
(
LinkedHashMap
)
model
.
get
(
"model"
);
LinkedHashMap
equipTransferInfo
=
(
LinkedHashMap
)
model1
.
get
(
TABLE_PAGE_ID
);
JgEquipTransferDto
jgEquipTransferDto
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
equipTransferInfo
),
JgEquipTransferDto
.
class
);
jgEquipTransferServiceImpl
.
accept
(
jgEquipTransferDto
,
op
);
return
ResponseHelper
.
buildResponse
(
null
);
}
/**
* 设备移交撤销
*
* @return
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/cancel"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"设备移交撤销"
,
notes
=
"设备移交撤销"
)
public
ResponseModel
<
JgEquipTransferDto
>
cancel
(
@RequestBody
Map
<
String
,
Object
>
model
)
{
JgEquipTransferDto
equipTransferInfo
=
BeanUtil
.
mapToBean
(((
LinkedHashMap
)
model
.
get
(
TABLE_PAGE_ID
)),
JgEquipTransferDto
.
class
,
true
);
if
(
Objects
.
isNull
(
equipTransferInfo
))
{
throw
new
IllegalArgumentException
(
"参数equipTransferInfo不能为空"
);
}
jgEquipTransferServiceImpl
.
cancel
(
equipTransferInfo
);
return
ResponseHelper
.
buildResponse
(
equipTransferInfo
);
}
}
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/controller/JgEquipTransferController.java
View file @
62d022b9
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
controller
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
controller
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer
;
import
io.swagger.annotations.ApiParam
;
import
io.swagger.annotations.ApiParam
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
@@ -8,8 +9,7 @@ import io.swagger.annotations.ApiOperation;
...
@@ -8,8 +9,7 @@ import io.swagger.annotations.ApiOperation;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
java.util.Arrays
;
import
java.util.*
;
import
java.util.Map
;
import
com.yeejoin.amos.boot.module.jg.biz.service.impl.JgEquipTransferServiceImpl
;
import
com.yeejoin.amos.boot.module.jg.biz.service.impl.JgEquipTransferServiceImpl
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
...
@@ -31,6 +31,8 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
...
@@ -31,6 +31,8 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
@RequestMapping
(
value
=
"/jg-equip-transfer"
)
@RequestMapping
(
value
=
"/jg-equip-transfer"
)
public
class
JgEquipTransferController
extends
BaseController
{
public
class
JgEquipTransferController
extends
BaseController
{
private
static
final
String
TABLE_PAGE_ID
=
"1734141426742095873"
;
@Autowired
@Autowired
JgEquipTransferServiceImpl
jgEquipTransferServiceImpl
;
JgEquipTransferServiceImpl
jgEquipTransferServiceImpl
;
...
@@ -42,8 +44,32 @@ public class JgEquipTransferController extends BaseController {
...
@@ -42,8 +44,32 @@ public class JgEquipTransferController extends BaseController {
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/save"
)
@PostMapping
(
value
=
"/save"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"新增设备移交"
,
notes
=
"新增设备移交"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"新增设备移交"
,
notes
=
"新增设备移交"
)
public
ResponseModel
<
JgEquipTransferDto
>
save
(
@RequestParam
String
submitType
,
@RequestBody
Map
<
String
,
JgEquipTransferDto
>
dto
)
{
public
ResponseModel
<
Object
>
save
(
@RequestParam
String
submitType
,
@RequestBody
Map
<
String
,
JgEquipTransferDto
>
modelMap
)
{
return
ResponseHelper
.
buildResponse
(
jgEquipTransferServiceImpl
.
saveOrUpdateModel
(
dto
,
false
));
jgEquipTransferServiceImpl
.
saveOrUpdateModel
(
submitType
,
modelMap
.
get
(
TABLE_PAGE_ID
),
getSelectedOrgInfo
());
return
ResponseHelper
.
buildResponse
(
"ok"
);
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PutMapping
(
value
=
"/update"
)
@ApiOperation
(
httpMethod
=
"PUT"
,
value
=
"根据sequenceNbr更新设备移交"
,
notes
=
"根据sequenceNbr更新设备移交"
)
public
ResponseModel
<
JgEquipTransferDto
>
updateBySequenceNbr
(
@RequestParam
String
submitType
,
@RequestBody
Map
<
String
,
Object
>
modelMap
,
@RequestParam
(
value
=
"op"
,
required
=
false
)
String
op
)
{
JgEquipTransferDto
equipTransferDto
=
BeanUtil
.
mapToBean
(((
LinkedHashMap
)
modelMap
.
get
(
TABLE_PAGE_ID
)),
JgEquipTransferDto
.
class
,
true
);
if
(
Objects
.
isNull
(
equipTransferDto
))
{
throw
new
IllegalArgumentException
(
"参数equipTransferDto不能为空"
);
}
return
ResponseHelper
.
buildResponse
(
jgEquipTransferServiceImpl
.
updateEquipTransfer
(
submitType
,
equipTransferDto
,
op
));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@DeleteMapping
(
value
=
"/delete"
)
@ApiOperation
(
httpMethod
=
"DELETE"
,
value
=
"根据sequenceNbr删除设备移交"
,
notes
=
"根据sequenceNbr删除设备移交"
)
public
ResponseModel
<
Boolean
>
deleteBySequenceNbr
(
@RequestParam
(
value
=
"sequenceNbr"
)
Long
[]
sequenceNbr
)
{
return
ResponseHelper
.
buildResponse
(
jgEquipTransferServiceImpl
.
removeById
(
sequenceNbr
));
}
}
/**
/**
...
@@ -54,7 +80,7 @@ public class JgEquipTransferController extends BaseController {
...
@@ -54,7 +80,7 @@ public class JgEquipTransferController extends BaseController {
*/
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@DeleteMapping
(
value
=
"/deleteBatch"
)
@DeleteMapping
(
value
=
"/deleteBatch"
)
@ApiOperation
(
httpMethod
=
"
POST
"
,
value
=
"批量删除设备移交"
,
notes
=
"批量删除设备移交"
)
@ApiOperation
(
httpMethod
=
"
DELETE
"
,
value
=
"批量删除设备移交"
,
notes
=
"批量删除设备移交"
)
public
ResponseModel
<
Object
>
deleteBySequenceNbr
(
@RequestParam
String
ids
)
{
public
ResponseModel
<
Object
>
deleteBySequenceNbr
(
@RequestParam
String
ids
)
{
if
(
StringUtils
.
isEmpty
(
ids
))
{
if
(
StringUtils
.
isEmpty
(
ids
))
{
throw
new
RuntimeException
(
"请选择需要删除的行!"
);
throw
new
RuntimeException
(
"请选择需要删除的行!"
);
...
...
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 @
62d022b9
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
service
.
impl
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.map.MapBuilder
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.biz.common.bo.ReginParams
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer
;
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.entity.*
;
import
com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferEqMapper
;
import
com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferMapper
;
import
com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferMapper
;
import
com.yeejoin.amos.boot.module.jg.api.service.IJgEquipTransferService
;
import
com.yeejoin.amos.boot.module.jg.api.service.IJgEquipTransferService
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgEquipTransferDto
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgEquipTransferDto
;
import
com.yeejoin.amos.boot.module.ymt.api.common.BaseException
;
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.boot.module.ymt.api.enums.FlowStatusEnum
;
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.service.ICreateCodeService
;
import
com.yeejoin.amos.component.feign.model.FeignClientResult
;
import
com.yeejoin.amos.feign.workflow.Workflow
;
import
com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO
;
import
com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO
;
import
com.yeejoin.amos.feign.workflow.model.AjaxResult
;
import
com.yeejoin.amos.feign.workflow.model.TaskResultDTO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
java.util.HashMap
;
import
java.text.ParseException
;
import
java.util.List
;
import
java.util.*
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.Objects
;
/**
/**
* 设备移交服务实现类
* 设备移交服务实现类
...
@@ -25,19 +48,223 @@ import java.util.Objects;
...
@@ -25,19 +48,223 @@ import java.util.Objects;
* @author system_generator
* @author system_generator
* @date 2023-12-20
* @date 2023-12-20
*/
*/
@Slf4j
@Service
@Service
public
class
JgEquipTransferServiceImpl
extends
BaseService
<
JgEquipTransferDto
,
JgEquipTransfer
,
JgEquipTransferMapper
>
implements
IJgEquipTransferService
{
public
class
JgEquipTransferServiceImpl
extends
BaseService
<
JgEquipTransferDto
,
JgEquipTransfer
,
JgEquipTransferMapper
>
implements
IJgEquipTransferService
{
@Value
(
"${workflow.process-definition-key.equip-transfer:}"
)
private
String
equipTransferProcessKey
;
private
static
final
String
SUBMIT_TYPE_FLOW
=
"1"
;
@Autowired
private
ICreateCodeService
iCreateCodeService
;
@Autowired
JgEquipTransferEqMapper
jgEquipTransferEqMapper
;
@Autowired
OtherInfoMapper
tzsJgOtherInfoMapper
;
@Autowired
RegistrationInfoMapper
tzsJgRegistrationInfoMapper
;
@Autowired
RedisUtils
redisUtils
;
@Transactional
(
rollbackFor
=
{
Exception
.
class
,
BaseException
.
class
})
@Transactional
(
rollbackFor
=
{
Exception
.
class
,
BaseException
.
class
})
public
JgEquipTransferDto
saveOrUpdateModel
(
Map
<
String
,
JgEquipTransferDto
>
dto
,
Boolean
enableStartFlow
)
{
public
void
saveOrUpdateModel
(
String
submitType
,
JgEquipTransferDto
model
,
ReginParams
reginParams
)
{
String
[]
taskName
=
new
String
[]{
"流程结束"
};
String
[]
taskName
=
new
String
[]{
"流程结束"
};
boolean
isUpdate
=
false
;
// 字段转换
String
instanceId
=
null
;
convertField
(
model
);
JgEquipTransfer
entity
=
null
;
// 获取告知设备列表
List
<
Map
<
String
,
Object
>>
deviceList
=
model
.
getDeviceList
();
if
(
CollectionUtils
.
isEmpty
(
deviceList
))
{
return
;
}
return
null
;
// 获取设备移交顺序号
List
<
String
>
applyNoList
=
iCreateCodeService
.
createApplicationFormCode
(
ApplicationFormTypeEnum
.
SBYJ
.
getCode
(),
deviceList
.
size
());
if
(
CollectionUtils
.
isEmpty
(
applyNoList
))
{
return
;
}
ArrayList
<
String
>
roleListFirst
=
new
ArrayList
<>();
ArrayList
<
String
>
roleListSecond
=
new
ArrayList
<>();
// 判断当前是否为提交
List
<
String
>
instanceIdList
=
new
ArrayList
<>();
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
// 发起流程
ActWorkflowBatchDTO
actWorkflowBatchDTO
=
new
ActWorkflowBatchDTO
();
List
<
ActWorkflowStartDTO
>
list
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
deviceList
.
size
()
;
i
++
)
{
ActWorkflowStartDTO
dto
=
new
ActWorkflowStartDTO
();
dto
.
setProcessDefinitionKey
(
equipTransferProcessKey
);
dto
.
setBusinessKey
(
String
.
valueOf
(
i
));
list
.
add
(
dto
);
}
actWorkflowBatchDTO
.
setProcess
(
list
);
try
{
FeignClientResult
result
=
Workflow
.
taskV2Client
.
startByVariableBatch
(
actWorkflowBatchDTO
);
List
<
Object
>
returnList
=
(
List
<
Object
>)
result
.
getResult
();
for
(
Object
obj
:
returnList
)
{
JSONObject
jsonObject
=
JSON
.
parseObject
(
JSONObject
.
toJSONString
(
obj
));
String
instanceId
=
jsonObject
.
getString
(
"id"
);
instanceIdList
.
add
(
instanceId
);
// 查询下节点任务
if
(
returnList
.
get
(
0
).
equals
(
obj
))
{
getNext
(
roleListFirst
,
instanceId
,
taskName
);
}
// 推动下一个节点
AjaxResult
ajaxResult
=
Workflow
.
taskClient
.
getTask
(
instanceId
);
JSONObject
dataObject
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
ajaxResult
.
get
(
"data"
)));
String
taskId
=
dataObject
.
getString
(
"id"
);
//组装信息
TaskResultDTO
dto
=
new
TaskResultDTO
();
dto
.
setResultCode
(
"approvalStatus"
);
dto
.
setTaskId
(
taskId
);
dto
.
setComment
(
"提交流程"
);
HashMap
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"approvalStatus"
,
"0"
);
dto
.
setVariable
(
map
);
//执行流程
AjaxResult
ajaxResult1
;
try
{
ajaxResult1
=
Workflow
.
taskClient
.
completeByTask
(
taskId
,
dto
);
if
(
ajaxResult1
.
get
(
"code"
).
equals
(
200
))
{
getNext
(
roleListSecond
,
instanceId
,
taskName
);
}
else
{
log
.
error
(
"提交失败"
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"提交失败:{}"
,
e
.
getMessage
());
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"提交失败:{}"
,
e
.
getMessage
());
}
}
List
<
JgEquipTransfer
>
list
=
new
ArrayList
<>();
List
<
JgEquipTransferEq
>
equipTransferEqList
=
new
ArrayList
<>();
deviceList
.
forEach
(
obj
->
{
JgEquipTransferEq
jgEquipTransferEq
=
new
JgEquipTransferEq
();
JgEquipTransfer
dto
=
new
JgEquipTransfer
();
BeanUtils
.
copyProperties
(
model
,
dto
);
int
i
=
deviceList
.
indexOf
(
obj
);
String
applyNo
=
applyNoList
.
get
(
i
);
dto
.
setApplyNo
(
applyNo
);
dto
.
setApplyDate
(
new
Date
());
dto
.
setNextExecuteIds
(
String
.
join
(
","
,
roleListSecond
));
dto
.
setInstanceStatus
(
String
.
join
(
","
,
roleListFirst
));
dto
.
setPromoter
(
reginParams
.
getUserModel
().
getUserId
());
dto
.
setApplyStatus
(
taskName
[
0
]);
dto
.
setInstallUnitName
(
reginParams
.
getCompany
().
getCompanyName
());
dto
.
setInstallUnitCreditCode
(
reginParams
.
getCompany
().
getCompanyCode
());
jgEquipTransferEq
.
setEquId
(
String
.
valueOf
(
obj
.
get
(
"SEQUENCE_NBR"
)));
jgEquipTransferEq
.
setEquipTransferId
(
applyNo
);
if
(!
CollectionUtils
.
isEmpty
(
instanceIdList
))
{
dto
.
setInstanceId
(
instanceIdList
.
get
(
i
));
dto
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_PROCESSED
.
getCode
()));
}
else
{
dto
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_SUBMITTED
.
getCode
()));
}
}
list
.
add
(
dto
);
equipTransferEqList
.
add
(
jgEquipTransferEq
);
});
this
.
baseMapper
.
insertBatchSomeColumn
(
list
);
List
<
JgEquipTransferEq
>
jgEquipTransferEqList
=
equipTransferEqList
.
stream
().
map
(
transferEq
->
{
List
<
JgEquipTransfer
>
collect
=
list
.
stream
().
filter
(
transfer
->
transferEq
.
getEquipTransferId
().
equals
(
transfer
.
getApplyNo
())).
collect
(
Collectors
.
toList
());
Long
sequenceNbr
=
collect
.
get
(
0
).
getSequenceNbr
();
return
transferEq
.
setEquipTransferId
(
String
.
valueOf
(
sequenceNbr
));
}).
collect
(
Collectors
.
toList
());
jgEquipTransferEqMapper
.
insertBatchSomeColumn
(
jgEquipTransferEqList
);
}
private
void
convertField
(
JgEquipTransferDto
model
)
{
if
(
null
==
model
)
return
;
// 分割单位
String
useUnitId
=
model
.
getUseUnitCreditCode
();
if
(!
ObjectUtils
.
isEmpty
(
useUnitId
))
{
String
[]
useUnitList
=
useUnitId
.
split
(
"_"
);
if
(
useUnitList
.
length
>
1
)
{
model
.
setUseUnitCreditCode
(
useUnitList
[
0
]);
model
.
setUseUnitName
(
useUnitList
[
1
]);
}
}
// 分割接收机构
String
installUnitId
=
model
.
getInstallUnitCreditCode
();
if
(!
ObjectUtils
.
isEmpty
(
installUnitId
))
{
String
[]
installUnitIdList
=
installUnitId
.
split
(
"_"
);
if
(
installUnitIdList
.
length
>
1
)
{
model
.
setInstallUnitCreditCode
(
installUnitIdList
[
0
]);
model
.
setInstallUnitName
(
installUnitIdList
[
1
]);
}
}
}
public
Map
<
String
,
Object
>
getNextWorkflowNode
(
String
instanceId
)
{
String
role
=
""
;
String
taskName
=
"流程结束"
;
ArrayList
<
String
>
roleList
=
new
ArrayList
<>();
AjaxResult
taskNoAuth
=
Workflow
.
taskClient
.
getTaskNoAuth
(
instanceId
);
if
(!
org
.
springframework
.
util
.
ObjectUtils
.
isEmpty
(
taskNoAuth
.
get
(
"data"
)))
{
JSONObject
nextTask
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
taskNoAuth
.
get
(
"data"
)));
String
nextTaskId
=
nextTask
.
getString
(
"id"
);
taskName
=
nextTask
.
getString
(
"name"
);
AjaxResult
taskGroupName
=
Workflow
.
taskClient
.
getTaskGroupName
(
nextTaskId
);
JSONArray
data
=
JSON
.
parseArray
(
JSON
.
toJSONString
(
taskGroupName
.
get
(
"data"
)));
for
(
Object
datum
:
data
)
{
if
(((
Map
)
datum
).
containsKey
(
"groupId"
))
{
roleList
.
add
(((
Map
)
datum
).
get
(
"groupId"
).
toString
());
}
}
}
role
=
String
.
join
(
","
,
roleList
);
return
MapBuilder
.<
String
,
Object
>
create
().
put
(
"taskName"
,
taskName
).
put
(
"role"
,
role
).
build
();
}
void
getNext
(
ArrayList
<
String
>
roleListFirst
,
String
instanceId
,
String
[]
taskName
)
{
AjaxResult
aj
=
Workflow
.
taskClient
.
getTaskNoAuth
(
instanceId
);
JSONObject
taskNoAuth
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
aj
.
get
(
"data"
)));
if
(!
org
.
springframework
.
util
.
ObjectUtils
.
isEmpty
(
taskNoAuth
))
{
String
nextTaskId
=
taskNoAuth
.
getString
(
"id"
);
AjaxResult
taskGroupName
=
Workflow
.
taskClient
.
getTaskGroupName
(
nextTaskId
);
taskName
[
0
]
=
taskNoAuth
.
getString
(
"name"
);
JSONArray
data
=
JSON
.
parseArray
(
JSON
.
toJSONString
(
taskGroupName
.
get
(
"data"
)));
for
(
Object
datum
:
data
)
{
if
(((
Map
)
datum
).
containsKey
(
"groupId"
))
{
roleListFirst
.
add
(((
Map
)
datum
).
get
(
"groupId"
).
toString
());
}
}
}
}
/**
* 启动工作流
* @param businessKey businessKey
* @return s
* @throws Exception e
*/
public
String
startFlow
(
String
businessKey
)
throws
Exception
{
// 重新开启工作流
ActWorkflowStartDTO
dto
=
new
ActWorkflowStartDTO
();
dto
.
setProcessDefinitionKey
(
equipTransferProcessKey
);
dto
.
setBusinessKey
(
StringUtils
.
defaultString
(
businessKey
,
"1"
));
AjaxResult
ajaxResult
=
Workflow
.
taskClient
.
startByVariable
(
dto
);
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"开启工作流结果:{}"
,
ajaxResult
);
}
if
(
ajaxResult
==
null
||
(
ajaxResult
.
get
(
AjaxResult
.
CODE_TAG
)
!=
null
&&
!
"200"
.
equals
(
ajaxResult
.
get
(
AjaxResult
.
CODE_TAG
).
toString
())))
{
throw
new
BaseException
(
"开启工作流错误"
);
}
return
((
Map
<?,
?>)
ajaxResult
.
get
(
"data"
)).
get
(
"id"
).
toString
();
}
@Override
@Override
public
Page
<
JgEquipTransferDto
>
queryForJgEquipTransferPage
(
Page
<
JgEquipTransfer
>
page
,
JgEquipTransferDto
dto
,
String
type
,
ReginParams
reginParams
)
{
public
Page
<
JgEquipTransferDto
>
queryForJgEquipTransferPage
(
Page
<
JgEquipTransfer
>
page
,
JgEquipTransferDto
dto
,
String
type
,
ReginParams
reginParams
)
{
...
@@ -103,4 +330,136 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,J
...
@@ -103,4 +330,136 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,J
map
.
computeIfPresent
(
field
,
(
key
,
value
)
->
JSON
.
parseArray
(
value
.
toString
()));
map
.
computeIfPresent
(
field
,
(
key
,
value
)
->
JSON
.
parseArray
(
value
.
toString
()));
}
}
}
}
public
void
accept
(
JgEquipTransferDto
jgEquipTransferDto
,
String
op
)
{
String
[]
taskName
=
new
String
[]{
"流程结束"
};
String
userId
=
RequestContext
.
getExeUserId
();
JgEquipTransfer
jgEquipTransfer
=
this
.
baseMapper
.
selectById
(
jgEquipTransferDto
.
getSequenceNbr
());
// 组装设备注册代码
StringBuffer
stringBuffer
=
new
StringBuffer
();
String
ym
=
null
;
try
{
ym
=
DateUtils
.
dateFormat
(
new
Date
(),
DateUtils
.
DATE_PATTERN_MM
);
}
catch
(
ParseException
e
)
{
log
.
error
(
"日期转换失败:{}"
,
e
.
getMessage
());
}
ArrayList
<
String
>
roleList
=
new
ArrayList
<>();
boolean
submit
=
submit
(
jgEquipTransfer
,
op
);
if
(
submit
)
{
getNext
(
roleList
,
jgEquipTransferDto
.
getInstanceId
(),
taskName
);
jgEquipTransfer
.
setApplyStatus
(
taskName
[
0
]);
if
(
"0"
.
equals
(
op
))
{
if
(
roleList
.
isEmpty
())
{
jgEquipTransfer
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_FINISHED
.
getCode
()));
jgEquipTransfer
.
setPromoter
(
""
);
//TODO
}
else
{
jgEquipTransfer
.
setNextExecuteIds
(
String
.
join
(
","
,
roleList
));
if
(!
ObjectUtils
.
isEmpty
(
jgEquipTransfer
.
getInstanceStatus
()))
{
jgEquipTransfer
.
setInstanceStatus
(
jgEquipTransfer
.
getInstanceStatus
()
+
","
+
String
.
join
(
","
,
roleList
));
}
else
{
jgEquipTransfer
.
setInstanceStatus
(
String
.
join
(
","
,
roleList
));
}
jgEquipTransfer
.
setPromoter
(
userId
);
jgEquipTransfer
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_PROCESSED
.
getCode
()));
}
}
else
{
//驳回
jgEquipTransfer
.
setPromoter
(
""
);
jgEquipTransfer
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_SUBMITTED
.
getCode
()));
jgEquipTransfer
.
setInstanceStatus
(
String
.
valueOf
(
FlowStatusEnum
.
REJECTED
.
getCode
()));
}
updateById
(
jgEquipTransfer
);
}
}
public
boolean
submit
(
JgEquipTransfer
transfer
,
String
op
)
{
AjaxResult
ajaxResult
=
Workflow
.
taskClient
.
getTask
(
transfer
.
getInstanceId
());
JSONObject
dataObject
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
ajaxResult
.
get
(
"data"
)));
String
taskId
=
dataObject
.
getString
(
"id"
);
//组装信息
TaskResultDTO
dto
=
new
TaskResultDTO
();
dto
.
setResultCode
(
"approvalStatus"
);
dto
.
setTaskId
(
taskId
);
dto
.
setComment
(
"提交流程"
);
HashMap
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"approvalStatus"
,
op
);
dto
.
setVariable
(
map
);
//执行流程
AjaxResult
ajaxResult1
=
null
;
try
{
ajaxResult1
=
Workflow
.
taskClient
.
completeByTask
(
taskId
,
dto
);
return
ajaxResult1
.
get
(
"code"
).
equals
(
200
);
}
catch
(
Exception
e
)
{
log
.
error
(
"提交失败:{}"
,
e
.
getMessage
());
return
false
;
}
}
public
void
cancel
(
JgEquipTransferDto
equipTransferInfo
)
{
FeignClientResult
ajaxResult
=
Workflow
.
taskV2Client
.
rollBack
(
equipTransferInfo
.
getInstanceId
());
JgEquipTransfer
equipTransfer
=
this
.
baseMapper
.
selectById
(
equipTransferInfo
.
getSequenceNbr
());
if
(
ajaxResult
.
getStatus
()
==
200
)
{
equipTransfer
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_SUBMITTED
.
getCode
()));
this
.
baseMapper
.
updateById
(
equipTransfer
);
}
}
public
JgEquipTransferDto
updateEquipTransfer
(
String
submitType
,
JgEquipTransferDto
equipTransferDto
,
String
op
)
{
if
(
Objects
.
isNull
(
equipTransferDto
)
||
StringUtils
.
isEmpty
(
submitType
))
throw
new
IllegalArgumentException
(
"参数不能为空"
);
String
[]
taskName
=
new
String
[]{
"流程结束"
};
ReginParams
reginParams
=
JSONObject
.
parseObject
(
redisUtils
.
get
(
RedisKey
.
buildReginKey
(
RequestContext
.
getExeUserId
(),
RequestContext
.
getToken
())).
toString
(),
ReginParams
.
class
);
// 字段转换
this
.
convertField
(
equipTransferDto
);
ArrayList
<
String
>
roleListFirst
=
new
ArrayList
<>();
ArrayList
<
String
>
roleListSecond
=
new
ArrayList
<>();
if
(
SUBMIT_TYPE_FLOW
.
equals
(
submitType
))
{
AjaxResult
ajaxResult
;
// 发起流程
if
(!
org
.
springframework
.
util
.
StringUtils
.
hasText
(
equipTransferDto
.
getInstanceId
()))
{
ActWorkflowStartDTO
dto
=
new
ActWorkflowStartDTO
();
dto
.
setProcessDefinitionKey
(
equipTransferProcessKey
);
dto
.
setBusinessKey
(
"1"
);
try
{
ajaxResult
=
Workflow
.
taskClient
.
startByVariable
(
dto
);
String
instanceId
=
((
Map
)
ajaxResult
.
get
(
"data"
)).
get
(
"id"
).
toString
();
equipTransferDto
.
setInstanceId
(
instanceId
);
// 查询下节点任务
getNext
(
roleListFirst
,
instanceId
,
taskName
);
equipTransferDto
.
setInstanceStatus
(
String
.
join
(
","
,
roleListFirst
));
}
catch
(
Exception
e
)
{
log
.
error
(
"提交失败:{}"
,
e
.
getMessage
());
throw
new
RuntimeException
(
e
);
}
}
JgEquipTransfer
transfer
=
new
JgEquipTransfer
();
BeanUtils
.
copyProperties
(
equipTransferDto
,
transfer
);
boolean
submit
=
submit
(
transfer
,
op
);
if
(
submit
)
{
// 查询下节点任务
getNext
(
roleListSecond
,
transfer
.
getInstanceId
(),
taskName
);
transfer
.
setApplyStatus
(
taskName
[
0
]);
if
(!
org
.
springframework
.
util
.
ObjectUtils
.
isEmpty
(
transfer
.
getInstanceStatus
()))
{
transfer
.
setInstanceStatus
(
transfer
.
getInstanceStatus
()
+
","
+
roleListSecond
);
}
else
{
transfer
.
setInstanceStatus
(
String
.
join
(
","
,
roleListSecond
));
}
transfer
.
setPromoter
(
RequestContext
.
getExeUserId
());
transfer
.
setNextExecuteIds
(
String
.
join
(
","
,
roleListSecond
));
transfer
.
setApplyStatus
(
String
.
valueOf
(
FlowStatusEnum
.
TO_BE_PROCESSED
.
getCode
()));
updateById
(
transfer
);
}
}
else
{
JgEquipTransfer
bean
=
new
JgEquipTransfer
();
BeanUtils
.
copyProperties
(
equipTransferDto
,
bean
);
updateById
(
bean
);
}
return
equipTransferDto
;
}
}
}
\ No newline at end of file
amos-boot-system-tzs/amos-boot-module-ymt/amos-boot-module-ymt-api/src/main/java/com/yeejoin/amos/boot/module/ymt/api/service/impl/CreateCodeServiceImpl.java
View file @
62d022b9
...
@@ -74,7 +74,7 @@ public class CreateCodeServiceImpl implements ICreateCodeService {
...
@@ -74,7 +74,7 @@ public class CreateCodeServiceImpl implements ICreateCodeService {
@Override
@Override
public
String
createUseRegistrationCode
(
String
key
)
{
public
String
createUseRegistrationCode
(
String
key
)
{
rulePrefix
=
"("
+
LocalDate
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yy"
))
+
")"
;
rulePrefix
=
"("
+
LocalDate
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yy"
))
+
")"
;
return
generateSequence
(
key
,
SEQUENCE_TYPE_UR
,
LOCK_KEY_UR
)
;
return
(
key
.
length
()
==
5
)
?
generateSequence
(
key
,
SEQUENCE_TYPE_UR
,
LOCK_KEY_UR
):
"生成码规则不对!"
;
}
}
@Override
@Override
...
...
amos-boot-system-tzs/amos-boot-module-ymt/amos-boot-module-ymt-biz/src/main/java/com/yeejoin/amos/boot/module/ymt/biz/service/impl/GenerateCodeServiceImpl.java
View file @
62d022b9
...
@@ -75,7 +75,7 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
...
@@ -75,7 +75,7 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
@Override
@Override
public
String
createUseRegistrationCode
(
String
key
)
{
public
String
createUseRegistrationCode
(
String
key
)
{
rulePrefix
=
"("
+
LocalDate
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yy"
))
+
")"
;
rulePrefix
=
"("
+
LocalDate
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yy"
))
+
")"
;
return
generateSequence
(
key
,
SEQUENCE_TYPE_UR
,
LOCK_KEY_UR
)
;
return
(
key
.
length
()
==
5
)
?
generateSequence
(
key
,
SEQUENCE_TYPE_UR
,
LOCK_KEY_UR
)
:
"生成码规则不对!"
;
}
}
@Override
@Override
...
...
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