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
a1047513
Commit
a1047513
authored
Dec 14, 2023
by
H2T
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
监管维保接口修改
parent
2262df40
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
201 additions
and
50 deletions
+201
-50
JgMaintenanceContractDto.java
...amos/boot/module/jg/api/dto/JgMaintenanceContractDto.java
+14
-8
JgMaintenanceContract.java
...amos/boot/module/jg/api/entity/JgMaintenanceContract.java
+18
-12
FlowStatusEnum.java
...yeejoin/amos/boot/module/jg/api/enums/FlowStatusEnum.java
+1
-1
MaintenanceEnum.java
...eejoin/amos/boot/module/jg/api/enums/MaintenanceEnum.java
+12
-0
JgMaintenanceContractMapper.xml
...src/main/resources/mapper/JgMaintenanceContractMapper.xml
+26
-14
JgMaintenanceContractController.java
...le/jg/biz/controller/JgMaintenanceContractController.java
+47
-0
JgMaintenanceContractServiceImpl.java
...jg/biz/service/impl/JgMaintenanceContractServiceImpl.java
+83
-15
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/JgMaintenanceContractDto.java
View file @
a1047513
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
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
org.checkerframework.checker.formatter.qual.Format
;
import
java.util.Date
;
/**
...
...
@@ -27,26 +30,29 @@ public class JgMaintenanceContractDto extends BaseDto {
@ApiModelProperty
(
value
=
"办理状态"
)
private
String
applyStatus
;
@ApiModelProperty
(
value
=
"流程实例id"
)
private
String
instanceId
;
@ApiModelProperty
(
value
=
"维保备案日期"
)
private
Date
applyDate
;
@ApiModelProperty
(
value
=
"设备类型"
)
private
String
equType
;
@ApiModelProperty
(
value
=
"使用单位
ID
"
)
private
String
useUnit
Id
;
@ApiModelProperty
(
value
=
"使用单位
统一信用代码
"
)
private
String
useUnit
Code
;
@ApiModelProperty
(
value
=
"使用单位"
)
private
String
useUnitName
;
@ApiModelProperty
(
value
=
"接收机构
ID
"
)
private
String
receiveOrg
Id
;
@ApiModelProperty
(
value
=
"接收机构
统一信用代码
"
)
private
String
receiveOrg
Code
;
@ApiModelProperty
(
value
=
"接收机构"
)
private
String
receiveOrgName
;
@ApiModelProperty
(
value
=
"维保单位
ID
"
)
private
String
maintenanceUnit
Id
;
@ApiModelProperty
(
value
=
"维保单位
统一信用代码
"
)
private
String
maintenanceUnit
Code
;
@ApiModelProperty
(
value
=
"维保单位名称"
)
private
String
maintenanceUnitName
;
...
...
@@ -69,8 +75,8 @@ public class JgMaintenanceContractDto extends BaseDto {
@ApiModelProperty
(
value
=
"24小时维保电话"
)
private
String
maintenance24Tel
;
@ApiModelProperty
(
value
=
"
状态
"
)
private
String
status
;
@ApiModelProperty
(
value
=
"
办理流程
"
)
private
String
applyFlow
;
@ApiModelProperty
(
value
=
"备注"
)
private
String
remark
;
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/entity/JgMaintenanceContract.java
View file @
a1047513
...
...
@@ -29,6 +29,12 @@ public class JgMaintenanceContract extends BaseEntity {
private
String
applyNo
;
/**
* 流程实例id
*/
@TableField
(
"instance_id"
)
private
String
instanceId
;
/**
* 办理状态
*/
@TableField
(
"apply_status"
)
...
...
@@ -47,10 +53,10 @@ public class JgMaintenanceContract extends BaseEntity {
private
String
equType
;
/**
* 使用单位
ID
* 使用单位
统一信用代码
*/
@TableField
(
"use_unit_
id
"
)
private
String
useUnit
Id
;
@TableField
(
"use_unit_
code
"
)
private
String
useUnit
Code
;
/**
* 使用单位
...
...
@@ -59,10 +65,10 @@ public class JgMaintenanceContract extends BaseEntity {
private
String
useUnitName
;
/**
* 接收机构
ID
* 接收机构
统一信用代码
*/
@TableField
(
"receive_org_
id
"
)
private
String
receiveOrg
Id
;
@TableField
(
"receive_org_
code
"
)
private
String
receiveOrg
Code
;
/**
* 接收机构
...
...
@@ -71,10 +77,10 @@ public class JgMaintenanceContract extends BaseEntity {
private
String
receiveOrgName
;
/**
* 维保单位
ID
* 维保单位
统一信用代码
*/
@TableField
(
"maintenance_unit_
id
"
)
private
String
maintenanceUnit
Id
;
@TableField
(
"maintenance_unit_
code
"
)
private
String
maintenanceUnit
Code
;
/**
* 维保单位名称
...
...
@@ -119,10 +125,10 @@ public class JgMaintenanceContract extends BaseEntity {
private
String
maintenance24Tel
;
/**
*
状态
*
办理流程
*/
@TableField
(
"
status
"
)
private
String
status
;
@TableField
(
"
apply_flow
"
)
private
String
applyFlow
;
/**
* 备注
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/enums/FlowStatusEnum.java
View file @
a1047513
...
...
@@ -3,7 +3,7 @@ package com.yeejoin.amos.boot.module.jg.api.enums;
/**
* 办理状态枚举
*/
public
enum
FlowStatusEnum
{
public
enum
FlowStatusEnum
{
/**
* 待提交
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/java/com/yeejoin/amos/boot/module/jg/api/enums/MaintenanceEnum.java
View file @
a1047513
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
api
.
enums
;
import
io.swagger.models.auth.In
;
/**
* 维保备案使用单位枚举
*/
...
...
@@ -15,6 +17,16 @@ public enum MaintenanceEnum {
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
static
String
getMsgByCode
(
Integer
code
)
{
String
name
=
null
;
for
(
MaintenanceEnum
enumOne
:
MaintenanceEnum
.
values
())
{
if
(
enumOne
.
getCode
()
==
code
)
{
name
=
enumOne
.
getMsg
();
break
;
}
}
return
name
;
}
public
Integer
getCode
()
{
return
code
;
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-api/src/main/resources/mapper/JgMaintenanceContractMapper.xml
View file @
a1047513
...
...
@@ -16,20 +16,20 @@
<if
test=
"dto.equType != null and dto.equType != ''"
>
tjmc.equ_type = #{dto.equType},
</if>
<if
test=
"dto.useUnit
Id != null and dto.useUnitId
!= ''"
>
tjmc.use_unit_
id = #{dto.useUnitId
},
<if
test=
"dto.useUnit
Code != null and dto.useUnitCode
!= ''"
>
tjmc.use_unit_
code = #{dto.useUnitCode
},
</if>
<if
test=
"dto.useUnitName != null and dto.useUnitName != ''"
>
tjmc.use_unit_name = #{dto.useUnitName},
</if>
<if
test=
"dto.receiveOrg
Id != null and dto.receiveOrgId
!= ''"
>
tjmc.receive_org_
id = #{dto.receiveOrgId
},
<if
test=
"dto.receiveOrg
Code != null and dto.receiveOrgCode
!= ''"
>
tjmc.receive_org_
code = #{dto.receiveOrgCode
},
</if>
<if
test=
"dto.receiveOrgName != null and dto.receiveOrgName != ''"
>
tjmc.receive_org_name = #{dto.receiveOrgName},
</if>
<if
test=
"dto.maintenanceUnit
Id != null and dto.maintenanceUnitId
!= ''"
>
tjmc.maintenance_unit_
id = #{dto.maintenanceUnitId
},
<if
test=
"dto.maintenanceUnit
Code != null and dto.maintenanceUnitCode
!= ''"
>
tjmc.maintenance_unit_
code = #{dto.maintenanceUnitCode
},
</if>
<if
test=
"dto.maintenanceUnitName != null and dto.maintenanceUnitName != ''"
>
tjmc.maintenance_unit_name = #{dto.maintenanceUnitName},
...
...
@@ -52,8 +52,8 @@
<if
test=
"dto.maintenance24Tel != null and dto.maintenance24Tel != ''"
>
tjmc.maintenance_24_tel = #{dto.maintenance24Tel},
</if>
<if
test=
"dto.
status != null and dto.status
!= ''"
>
tjmc.
status = #{dto.status
},
<if
test=
"dto.
applyFlow != null and dto.applyFlow
!= ''"
>
tjmc.
apply_flow = #{dto.applyFlow
},
</if>
<if
test=
"dto.remark != null and dto.remark != ''"
>
tjmc.remark = #{dto.remark},
...
...
@@ -97,19 +97,19 @@
apply_status,
apply_date,
equ_type,
use_unit_
id
,
use_unit_
code
,
use_unit_name,
receive_org_
id
,
receive_org_
code
,
receive_org_name,
maintenance_unit_
id
,
maintenance_unit_
code
,
maintenance_unit_name,
date_format(
inform_start
,'%Y-%m-%d') informStart,
date_format(
inform_end
,'%Y-%m-%d') informEnd,
date_format(
IFNULL(inform_start, null)
,'%Y-%m-%d') informStart,
date_format(
IFNULL(inform_end, null)
,'%Y-%m-%d') informEnd,
maintenance_manager_id,
maintenance_manager_card_no,
emergency_call,
maintenance_24_tel,
status
,
apply_flow
,
remark,
is_delete,
input_unit_no,
...
...
@@ -137,6 +137,18 @@
<if
test=
"contractDto.applyStatus != '' and contractDto.applyStatus != null"
>
and apply_status like concat('%',#{contractDto.applyStatus},'%')
</if>
<if
test=
"contractDto.applyFlow != '' and contractDto.applyFlow != null"
>
and apply_flow like concat('%',#{contractDto.applyFlow},'%')
</if>
<if
test=
"contractDto.useUnitCode != '' and contractDto.useUnitCode != null"
>
and use_unit_code = #{contractDto.useUnitCode}
</if>
<if
test=
"contractDto.maintenanceUnitCode != '' and contractDto.maintenanceUnitCode != null"
>
and maintenance_unit_code = #{contractDto.maintenanceUnitCode}
</if>
<if
test=
"contractDto.receiveOrgCode != '' and contractDto.receiveOrgCode != null"
>
and receive_org_code = #{contractDto.receiveOrgCode}
</if>
</where>
</select>
<select
id=
"queryBySequenceNbr"
...
...
amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/controller/JgMaintenanceContractController.java
View file @
a1047513
...
...
@@ -45,6 +45,53 @@ public class JgMaintenanceContractController extends BaseController {
}
/**
* 提交
*
* @return
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/submit"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"维保合同提交"
,
notes
=
"维保合同提交"
)
public
ResponseModel
<
Object
>
submit
(
@RequestBody
JgMaintenanceContractDto
model
)
{
return
ResponseHelper
.
buildResponse
(
jgMaintenanceContractServiceImpl
.
submit
(
model
));
}
/**
* 撤回
*
* @return
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/revocation"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"维保合同撤回"
,
notes
=
"维保合同撤回"
)
public
ResponseModel
<
Object
>
revocation
(
@RequestBody
JgMaintenanceContractDto
model
)
{
return
ResponseHelper
.
buildResponse
(
jgMaintenanceContractServiceImpl
.
revocation
(
model
));
}
/**
* 维保合同驳回
*
* @return
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/rejected"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"维保合同驳回"
,
notes
=
"维保合同驳回"
)
public
ResponseModel
<
Object
>
rejected
(
@RequestBody
JgMaintenanceContractDto
model
)
{
return
ResponseHelper
.
buildResponse
(
jgMaintenanceContractServiceImpl
.
rejected
(
model
));
}
/**
* 维保合同受理
*
* @return
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@PostMapping
(
value
=
"/accepted"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"维保合同受理"
,
notes
=
"维保合同受理"
)
public
ResponseModel
<
Object
>
accepted
(
@RequestBody
JgMaintenanceContractDto
model
)
{
return
ResponseHelper
.
buildResponse
(
jgMaintenanceContractServiceImpl
.
accepted
(
model
));
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
...
...
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/JgMaintenanceContractServiceImpl.java
View file @
a1047513
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jg
.
biz
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
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.entity.DataDictionary
;
import
com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl
;
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.common.StringUtil
;
import
com.yeejoin.amos.boot.module.jg.api.dto.JgMaintenanceContractDto
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgMaintenanceContract
;
import
com.yeejoin.amos.boot.module.jg.api.entity.JgRelationEquip
;
...
...
@@ -21,6 +25,7 @@ import org.springframework.beans.BeanUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
java.util.Arrays
;
...
...
@@ -64,17 +69,21 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
*/
public
Page
<
JgMaintenanceContractDto
>
queryForPage
(
Page
<
JgMaintenanceContract
>
page
,
int
phase
,
JgMaintenanceContractDto
dto
,
ReginParams
reginParams
)
{
Page
<
JgMaintenanceContractDto
>
contractList
=
new
Page
<>();
CompanyBo
company
=
reginParams
.
getCompany
();
if
(
MaintenanceEnum
.
SHIYONG
.
getCode
().
equals
(
phase
))
{
//使用单位用"使用单位id"匹配数据
// TODO
//使用单位用"使用单位统一信用代码"匹配数据
dto
.
setUseUnitCode
(
company
.
getCompanyOrgCode
().
toString
());
dto
.
setApplyFlow
(
MaintenanceEnum
.
SHIYONG
.
getMsg
());
contractList
=
maintenanceContractMapper
.
getContractList
(
page
,
dto
);
}
else
if
(
MaintenanceEnum
.
WEIBAO
.
getCode
().
equals
(
phase
))
{
//维保单位用"维保单位id"匹配数据
// TODO
//维保单位用"维保单位统一信用代码"匹配数据
dto
.
setMaintenanceUnitCode
(
company
.
getCompanyCode
());
dto
.
setApplyFlow
(
MaintenanceEnum
.
WEIBAO
.
getMsg
());
contractList
=
maintenanceContractMapper
.
getContractList
(
page
,
dto
);
}
else
if
(
MaintenanceEnum
.
JIANGUAN
.
getCode
().
equals
(
phase
))
{
//监管单位用""
// TODO
//监管单位用"接收机构统一使用代码"匹配
dto
.
setReceiveOrgCode
(
company
.
getOrgCode
());
dto
.
setApplyFlow
(
MaintenanceEnum
.
JIANGUAN
.
getMsg
());
contractList
=
maintenanceContractMapper
.
getContractList
(
page
,
dto
);
}
return
contractList
;
...
...
@@ -84,11 +93,7 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
* 根据sequenceNbr查询数据
*/
public
JgMaintenanceContractDto
queryBySequenceNbr
(
Long
sequenceNbr
)
{
JgMaintenanceContractDto
contractDto
=
maintenanceContractMapper
.
queryBySequenceNbr
(
sequenceNbr
);
String
code
=
contractDto
.
getStatus
().
split
(
"-"
)[
1
];
DataDictionary
dict
=
getDict
(
HANDLING_STATUS_DICTIONARY
,
code
);
contractDto
.
setStatus
(
dict
.
getName
());
return
contractDto
;
return
maintenanceContractMapper
.
queryBySequenceNbr
(
sequenceNbr
);
}
/**
...
...
@@ -109,6 +114,53 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
}
/**
* 维保合同提交
*/
@Transactional
public
Boolean
submit
(
JgMaintenanceContractDto
dto
){
String
[]
split
=
dto
.
getApplyFlow
().
split
(
"-"
);
String
lastFlowName
=
split
[
split
.
length
-
1
];
String
applyFlow
=
dto
.
getApplyFlow
()
+
"-"
+
MaintenanceEnum
.
getMsgByCode
(
MaintenanceEnum
.
valueOf
(
lastFlowName
).
getCode
()+
1
);
dto
.
setApplyFlow
(
applyFlow
);
dto
.
setApplyStatus
(
FlowStatusEnum
.
TO_BE_PROCESSED
.
getName
());
return
this
.
updateBySequenceNbr
(
dto
);
}
/**
* 维保合同撤回
*/
@Transactional
public
Boolean
revocation
(
JgMaintenanceContractDto
dto
){
dto
.
setApplyStatus
(
FlowStatusEnum
.
TO_BE_SUBMITTED
.
getName
());
return
this
.
updateBySequenceNbr
(
dto
);
}
/**
* 维保合同驳回
*/
@Transactional
public
Boolean
rejected
(
JgMaintenanceContractDto
dto
){
String
[]
split
=
dto
.
getApplyFlow
().
split
(
"-"
);
String
lastFlowName
=
split
[
split
.
length
-
1
];
String
applyFlow
=
dto
.
getApplyFlow
()
+
"-"
+
MaintenanceEnum
.
getMsgByCode
(
MaintenanceEnum
.
valueOf
(
lastFlowName
).
getCode
()
-
1
);
dto
.
setApplyFlow
(
applyFlow
);
dto
.
setApplyStatus
(
FlowStatusEnum
.
REJECTED
.
getName
());
return
this
.
updateBySequenceNbr
(
dto
);
}
/**
* 维保合同受理
*/
@Transactional
public
Boolean
accepted
(
JgMaintenanceContractDto
dto
){
String
[]
split
=
dto
.
getApplyFlow
().
split
(
"-"
);
String
lastFlowName
=
split
[
split
.
length
-
1
];
String
applyFlow
=
dto
.
getApplyFlow
()
+
"-"
+
MaintenanceEnum
.
getMsgByCode
(
MaintenanceEnum
.
valueOf
(
lastFlowName
).
getCode
()
+
1
);
dto
.
setApplyFlow
(
applyFlow
);
dto
.
setApplyStatus
(
FlowStatusEnum
.
TO_BE_PROCESSED
.
getName
());
return
this
.
updateBySequenceNbr
(
dto
);
}
/**
* 根据设备批量插入
*/
@Transactional
...
...
@@ -117,15 +169,31 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
CompanyBo
company
=
reginParams
.
getCompany
();
JgMaintenanceContract
contract
=
new
JgMaintenanceContract
();
BeanUtils
.
copyProperties
(
dto
,
contract
);
contract
.
setUseUnitId
(
company
.
getOrgCode
());
contract
.
setUseUnitName
(
company
.
getCompanyName
());
contract
.
setStatus
(
MaintenanceEnum
.
SHIYONG
.
getCode
()
+
"-"
+
FlowStatusEnum
.
TO_BE_SUBMITTED
.
getCode
());
if
(
StringUtil
.
isNotEmpty
(
contract
.
getApplyNo
())){
//更新操作
LambdaQueryWrapper
<
JgRelationEquip
>
queryWrapper
=
new
LambdaQueryWrapper
<
JgRelationEquip
>()
.
eq
(
JgRelationEquip:
:
getBusinessId
,
contract
.
getApplyNo
())
.
eq
(
JgRelationEquip:
:
getIsDelete
,
false
);
List
<
Long
>
list
=
jgRelationEquipServiceImpl
.
list
(
queryWrapper
).
stream
().
map
(
JgRelationEquip:
:
getSequenceNbr
).
collect
(
Collectors
.
toList
());
jgRelationEquipServiceImpl
.
deleteBatchSeq
(
list
);
}
else
{
//新增操作
//维保备案编号
//TODO
contract
.
setApplyNo
(
"维保备案编号"
);
contract
.
setUseUnitCode
(
company
.
getCompanyCode
());
contract
.
setUseUnitName
(
company
.
getCompanyName
());
contract
.
setApplyFlow
(
MaintenanceEnum
.
SHIYONG
.
getMsg
());
contract
.
setApplyStatus
(
FlowStatusEnum
.
TO_BE_SUBMITTED
.
getName
());
contract
.
setEquNum
(
collect
.
size
());
this
.
save
(
contract
);
}
collect
.
forEach
(
x
->
{
JgRelationEquip
equip
=
new
JgRelationEquip
();
equip
.
setBusinessId
(
contract
.
getApplyNo
());
equip
.
setEquipId
(
String
.
valueOf
(
x
));
equip
.
setBusinessType
(
BusinessTypeEnum
.
MAINTENANCE_RECORD
.
getName
());
jgRelationEquipServiceImpl
.
save
(
equip
);
this
.
saveOrUpdate
(
contract
);
});
return
true
;
}
...
...
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