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
91853405
Commit
91853405
authored
Aug 29, 2024
by
韩桐桐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(tcm):人员添加,修改,详情接口修改
parent
44ebdfec
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
229 additions
and
13 deletions
+229
-13
TzsUserPermissionDto.java
...amos/boot/module/common/api/dto/TzsUserPermissionDto.java
+6
-1
TzsUserPermission.java
...amos/boot/module/common/api/entity/TzsUserPermission.java
+9
-3
TzsUserInfoDto.java
.../yeejoin/amos/boot/module/tcm/api/dto/TzsUserInfoDto.java
+9
-1
TzsUserInfo.java
.../yeejoin/amos/boot/module/tcm/api/entity/TzsUserInfo.java
+12
-0
TzsUserInfoVo.java
...om/yeejoin/amos/boot/module/tcm/api/vo/TzsUserInfoVo.java
+5
-0
TzsUserInfoMapper.xml
...e-tcm-api/src/main/resources/mapper/TzsUserInfoMapper.xml
+2
-2
TzsUserInfoController.java
...boot/module/tcm/biz/controller/TzsUserInfoController.java
+0
-0
TzsUserInfoServiceImpl.java
...t/module/tcm/biz/service/impl/TzsUserInfoServiceImpl.java
+0
-0
TzsUserPermissionServiceImpl.java
...le/tcm/biz/service/impl/TzsUserPermissionServiceImpl.java
+186
-6
No files found.
amos-boot-system-tzs/amos-boot-module-common/amos-boot-module-common-api/src/main/java/com/yeejoin/amos/boot/module/common/api/dto/TzsUserPermissionDto.java
View file @
91853405
package
com
.
yeejoin
.
amos
.
boot
.
module
.
common
.
api
.
dto
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
common
.
api
.
dto
;
import
com.alibaba.fastjson.JSONArray
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
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
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
java.util.Date
;
import
java.util.Date
;
/**
/**
...
@@ -54,6 +56,9 @@ public class TzsUserPermissionDto extends BaseDto {
...
@@ -54,6 +56,9 @@ public class TzsUserPermissionDto extends BaseDto {
@ApiModelProperty
(
value
=
"作业项目"
)
@ApiModelProperty
(
value
=
"作业项目"
)
private
String
jobItem
;
private
String
jobItem
;
@ApiModelProperty
(
"项目代号"
)
private
JSONArray
itemCode
;
@ApiModelProperty
(
value
=
"其他作业项目"
)
@ApiModelProperty
(
value
=
"其他作业项目"
)
private
String
otherItem
;
private
String
otherItem
;
...
...
amos-boot-system-tzs/amos-boot-module-common/amos-boot-module-common-api/src/main/java/com/yeejoin/amos/boot/module/common/api/entity/TzsUserPermission.java
View file @
91853405
...
@@ -2,11 +2,11 @@ package com.yeejoin.amos.boot.module.common.api.entity;
...
@@ -2,11 +2,11 @@ package com.yeejoin.amos.boot.module.common.api.entity;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.yeejoin.amos.boot.biz.common.entity.BaseEntity
;
import
com.yeejoin.amos.boot.biz.common.entity.BaseRelationEntity
;
import
com.yeejoin.amos.boot.biz.common.entity.BaseRelationEntity
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
import
java.util.Date
;
/**
/**
...
@@ -30,13 +30,13 @@ public class TzsUserPermission extends BaseRelationEntity {
...
@@ -30,13 +30,13 @@ public class TzsUserPermission extends BaseRelationEntity {
private
Long
userSeq
;
private
Long
userSeq
;
/**
/**
* 检验专用-级别
* 检验
检测
专用-级别
*/
*/
@TableField
(
"permission_level"
)
@TableField
(
"permission_level"
)
private
String
permissionLevel
;
private
String
permissionLevel
;
/**
/**
* 检验专用-资质项目
* 检验
检测
专用-资质项目
*/
*/
@TableField
(
"permission_item"
)
@TableField
(
"permission_item"
)
private
String
permissionItem
;
private
String
permissionItem
;
...
@@ -90,6 +90,12 @@ public class TzsUserPermission extends BaseRelationEntity {
...
@@ -90,6 +90,12 @@ public class TzsUserPermission extends BaseRelationEntity {
private
String
jobItem
;
private
String
jobItem
;
/**
/**
* 项目代号,多个用逗号分割
*/
@TableField
(
"item_code"
)
private
String
itemCode
;
/**
* 其他作业项目
* 其他作业项目
*/
*/
@TableField
(
"other_item"
)
@TableField
(
"other_item"
)
...
...
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-api/src/main/java/com/yeejoin/amos/boot/module/tcm/api/dto/TzsUserInfoDto.java
View file @
91853405
package
com
.
yeejoin
.
amos
.
boot
.
module
.
tcm
.
api
.
dto
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
tcm
.
api
.
dto
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONArray
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
...
@@ -34,6 +33,9 @@ public class TzsUserInfoDto extends BaseDto {
...
@@ -34,6 +33,9 @@ public class TzsUserInfoDto extends BaseDto {
@ApiModelProperty
(
value
=
"岗位"
)
@ApiModelProperty
(
value
=
"岗位"
)
private
String
post
;
private
String
post
;
@ApiModelProperty
(
"新岗位(后期post迁移数组至此)"
)
private
String
newPost
;
@ApiModelProperty
(
value
=
"岗位名称"
)
@ApiModelProperty
(
value
=
"岗位名称"
)
private
String
postName
;
private
String
postName
;
...
@@ -102,4 +104,10 @@ public class TzsUserInfoDto extends BaseDto {
...
@@ -102,4 +104,10 @@ public class TzsUserInfoDto extends BaseDto {
@ApiModelProperty
(
value
=
"检测资质json,固定前缀permissionData,入库时数据存放到permissionData"
)
@ApiModelProperty
(
value
=
"检测资质json,固定前缀permissionData,入库时数据存放到permissionData"
)
private
JSONArray
permissionData66152
;
private
JSONArray
permissionData66152
;
@ApiModelProperty
(
value
=
"作业人员资质信息json,固定前缀permissionData,入库时数据存放到permissionData"
)
private
JSONArray
permissionData6552
;
@ApiModelProperty
(
value
=
"职称"
)
private
String
jobTitle
;
}
}
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-api/src/main/java/com/yeejoin/amos/boot/module/tcm/api/entity/TzsUserInfo.java
View file @
91853405
...
@@ -53,6 +53,12 @@ public class TzsUserInfo extends BaseEntity {
...
@@ -53,6 +53,12 @@ public class TzsUserInfo extends BaseEntity {
private
String
post
;
private
String
post
;
/**
/**
* 新岗位(后期post迁移数组至此)
*/
@TableField
(
"new_post"
)
private
String
newPost
;
/**
* 岗位名称
* 岗位名称
*/
*/
@TableField
(
"post_name"
)
@TableField
(
"post_name"
)
...
@@ -183,4 +189,10 @@ public class TzsUserInfo extends BaseEntity {
...
@@ -183,4 +189,10 @@ public class TzsUserInfo extends BaseEntity {
@TableField
(
value
=
"permission_data"
)
@TableField
(
value
=
"permission_data"
)
private
String
permissionData
;
private
String
permissionData
;
/**
* 职称
*/
@TableField
(
value
=
"job_title"
)
private
String
jobTitle
;
}
}
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-api/src/main/java/com/yeejoin/amos/boot/module/tcm/api/vo/TzsUserInfoVo.java
View file @
91853405
...
@@ -145,4 +145,9 @@ public class TzsUserInfoVo {
...
@@ -145,4 +145,9 @@ public class TzsUserInfoVo {
* */
* */
private
String
companyType
;
private
String
companyType
;
/**
* 职称
*/
private
String
jobTitle
;
}
}
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-api/src/main/resources/mapper/TzsUserInfoMapper.xml
View file @
91853405
...
@@ -218,11 +218,11 @@
...
@@ -218,11 +218,11 @@
FROM
FROM
"cb_data_dictionary"
"cb_data_dictionary"
WHERE
WHERE
type in
is_delete = false
and type in
<foreach
collection=
"typeList"
separator=
","
item=
"type"
open=
"("
close=
")"
>
<foreach
collection=
"typeList"
separator=
","
item=
"type"
open=
"("
close=
")"
>
#{type}
#{type}
</foreach>
</foreach>
</select>
</select>
<select
id=
"selectCompanyTypeById"
resultType=
"java.lang.String"
>
<select
id=
"selectCompanyTypeById"
resultType=
"java.lang.String"
>
...
...
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-biz/src/main/java/com/yeejoin/amos/boot/module/tcm/biz/controller/TzsUserInfoController.java
View file @
91853405
This diff is collapsed.
Click to expand it.
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-biz/src/main/java/com/yeejoin/amos/boot/module/tcm/biz/service/impl/TzsUserInfoServiceImpl.java
View file @
91853405
This diff is collapsed.
Click to expand it.
amos-boot-system-tzs/amos-boot-module-tcm/amos-boot-module-tcm-biz/src/main/java/com/yeejoin/amos/boot/module/tcm/biz/service/impl/TzsUserPermissionServiceImpl.java
View file @
91853405
package
com
.
yeejoin
.
amos
.
boot
.
module
.
tcm
.
biz
.
service
.
impl
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
tcm
.
biz
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
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.yeejoin.amos.boot.module.common.api.dto.TzsUserPermissionDto
;
import
com.yeejoin.amos.boot.module.common.api.entity.TzsUserPermission
;
import
com.yeejoin.amos.boot.module.common.api.entity.TzsUserPermission
;
import
com.yeejoin.amos.boot.module.tcm.api.dto.TzsUserInfoDto
;
import
com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserPermissionMapper
;
import
com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserPermissionMapper
;
import
com.yeejoin.amos.boot.module.tcm.api.service.ITzsUserPermissionService
;
import
com.yeejoin.amos.boot.module.tcm.api.service.ITzsUserPermissionService
;
import
com.yeejoin.amos.boot.module.common.api.dto.TzsUserPermissionDto
;
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
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeFormatterBuilder
;
import
java.time.temporal.ChronoField
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
/**
* 用户资质信息表服务实现类
* 用户资质信息表服务实现类
...
@@ -16,7 +32,25 @@ import java.util.List;
...
@@ -16,7 +32,25 @@ import java.util.List;
* @date 2024-08-27
* @date 2024-08-27
*/
*/
@Service
@Service
public
class
TzsUserPermissionServiceImpl
extends
BaseService
<
TzsUserPermissionDto
,
TzsUserPermission
,
TzsUserPermissionMapper
>
implements
ITzsUserPermissionService
{
public
class
TzsUserPermissionServiceImpl
extends
BaseService
<
TzsUserPermissionDto
,
TzsUserPermission
,
TzsUserPermissionMapper
>
implements
ITzsUserPermissionService
{
/**
* 检验人员资质类型
*/
private
final
String
JYRY_TYPE
=
"permissionData66151"
;
/**
* 检测人员资质类型
*/
private
final
String
JCRY_TYPE
=
"permissionData66152"
;
/**
* 工作人员资质类型
*/
private
final
String
ZYRY_TYPE
=
"permissionData6552"
;
/**
* 需要转换的附件字段 jsonString化字段
*/
private
final
String
[]
ATTACHMENTS
=
{
"certAttachment"
,
"otherItem"
,
"itemCode"
};
/**
/**
* 分页查询
* 分页查询
*/
*/
...
@@ -28,6 +62,151 @@ public class TzsUserPermissionServiceImpl extends BaseService<TzsUserPermissionD
...
@@ -28,6 +62,151 @@ public class TzsUserPermissionServiceImpl extends BaseService<TzsUserPermissionD
* 列表查询 示例
* 列表查询 示例
*/
*/
public
List
<
TzsUserPermissionDto
>
queryForTzsUserPermissionList
()
{
public
List
<
TzsUserPermissionDto
>
queryForTzsUserPermissionList
()
{
return
this
.
queryForList
(
""
,
false
);
return
this
.
queryForList
(
""
,
false
);
}
/**
* 更新资质权限数据
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updatePermissionData
(
TzsUserInfoDto
tzsUserInfo
)
{
// 1,删除对应资质
LambdaQueryWrapper
<
TzsUserPermission
>
lambda
=
new
QueryWrapper
<
TzsUserPermission
>().
lambda
();
lambda
.
eq
(
TzsUserPermission:
:
getUserSeq
,
tzsUserInfo
.
getSequenceNbr
());
this
.
getBaseMapper
().
delete
(
lambda
);
// 2,保存对应资质
this
.
savePermissionData
(
tzsUserInfo
);
}
/**
* 保存资质权限数据
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
savePermissionData
(
TzsUserInfoDto
userInfoDto
)
{
ArrayList
<
TzsUserPermission
>
tzsUserPermissions
=
new
ArrayList
<>();
// permissionData66151 检验资质
JSONArray
permissionData66151
=
userInfoDto
.
getPermissionData66151
();
if
(!
ValidationUtil
.
isEmpty
(
permissionData66151
))
{
permissionData66151
.
forEach
(
x
->
tzsUserPermissions
.
add
(
buildPermission
(
JYRY_TYPE
,
(
JSONObject
)
x
,
userInfoDto
)));
}
// permissionData66152 检测资质
JSONArray
permissionData66152
=
userInfoDto
.
getPermissionData66152
();
if
(!
ValidationUtil
.
isEmpty
(
permissionData66152
))
{
permissionData66152
.
forEach
(
x
->
tzsUserPermissions
.
add
(
buildPermission
(
JCRY_TYPE
,
(
JSONObject
)
x
,
userInfoDto
)));
}
// permissionData6552 作业人员资质
JSONArray
permissionData6552
=
userInfoDto
.
getPermissionData6552
();
if
(!
ValidationUtil
.
isEmpty
(
permissionData6552
))
{
permissionData6552
.
forEach
(
x
->
tzsUserPermissions
.
add
(
buildPermission
(
ZYRY_TYPE
,
(
JSONObject
)
x
,
userInfoDto
)));
}
this
.
saveBatch
(
tzsUserPermissions
);
}
/**
* 构建资质信息实体
*
* @param type 人员资质类型
* @param permissionData 入参
* @param userInfo 人员信息
* @return permission
*/
private
TzsUserPermission
buildPermission
(
String
type
,
JSONObject
permissionData
,
TzsUserInfoDto
userInfo
)
{
TzsUserPermission
permission
=
new
TzsUserPermission
();
permission
.
setUserSeq
(
userInfo
.
getSequenceNbr
());
permission
.
setPermissionLevel
(!
ZYRY_TYPE
.
equals
(
type
)
?
(
String
)
permissionData
.
get
(
"permissionLevel"
)
:
null
);
permission
.
setPermissionItem
(!
ZYRY_TYPE
.
equals
(
type
)
?
JSONArray
.
toJSONString
(
permissionData
.
get
(
"permissionItem"
))
:
null
);
permission
.
setPermissionPost
(
type
);
permission
.
setCertNo
((
String
)
permissionData
.
get
(
"certNo"
));
DateTimeFormatter
formatter
=
new
DateTimeFormatterBuilder
()
.
appendPattern
(
"yyyy-MM-dd"
)
.
optionalStart
()
.
appendPattern
(
" HH:mm:ss"
)
.
optionalEnd
()
.
parseDefaulting
(
ChronoField
.
HOUR_OF_DAY
,
0
)
.
parseDefaulting
(
ChronoField
.
MINUTE_OF_HOUR
,
0
)
.
parseDefaulting
(
ChronoField
.
SECOND_OF_MINUTE
,
0
)
.
toFormatter
();
String
expiryDateString
=
String
.
valueOf
(
permissionData
.
get
(
"expiryDate"
));
LocalDate
localDate1
=
LocalDate
.
parse
(
expiryDateString
,
formatter
);
LocalDateTime
localDateTime1
=
localDate1
.
atStartOfDay
();
Date
expiryDate
=
Date
.
from
(
localDateTime1
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
());
permission
.
setExpiryDate
(
expiryDate
);
String
issueDateString
=
String
.
valueOf
(
permissionData
.
get
(
"issueDate"
));
LocalDate
localDate2
=
LocalDate
.
parse
(
issueDateString
,
formatter
);
LocalDateTime
localDateTime2
=
localDate2
.
atStartOfDay
();
Date
issueDate
=
Date
.
from
(
localDateTime2
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
());
permission
.
setIssueDate
(
issueDate
);
permission
.
setApprovedOrgan
((
String
)
permissionData
.
get
(
"approvedOrgan"
));
permission
.
setCertAttachment
(
JSONArray
.
toJSONString
(
permissionData
.
get
(
"certAttachment"
)));
permission
.
setCertType
(
ZYRY_TYPE
.
equals
(
type
)
?
String
.
valueOf
(
permissionData
.
get
(
"certType"
))
:
null
);
permission
.
setJobItem
(
ZYRY_TYPE
.
equals
(
type
)
?
String
.
valueOf
(
permissionData
.
get
(
"jobItem"
))
:
null
);
permission
.
setOtherItem
(
ZYRY_TYPE
.
equals
(
type
)
?
JSONArray
.
toJSONString
(
permissionData
.
get
(
"otherItem"
))
:
null
);
permission
.
setItemCode
(
ZYRY_TYPE
.
equals
(
type
)
?
JSONArray
.
toJSONString
(
permissionData
.
get
(
"itemCode"
))
:
null
);
return
permission
;
}
/**
* 根据人员的seq 组织可供子表单使用的资质信息数据
*
* @param userSeq 人员的seq
* @return result
*/
public
Map
<?
extends
String
,
?>
queryForSubFormByUserSeq
(
String
userSeq
)
{
Map
<
String
,
List
<
JSONObject
>>
result
=
new
HashMap
<>();
List
<
JSONObject
>
JYRYList
=
new
ArrayList
<>();
List
<
JSONObject
>
JCRYList
=
new
ArrayList
<>();
List
<
JSONObject
>
ZYRYList
=
new
ArrayList
<>();
LambdaQueryWrapper
<
TzsUserPermission
>
lambda
=
new
QueryWrapper
<
TzsUserPermission
>().
lambda
();
lambda
.
eq
(
TzsUserPermission:
:
getUserSeq
,
userSeq
);
List
<
TzsUserPermission
>
permissionList
=
this
.
getBaseMapper
().
selectList
(
lambda
);
for
(
TzsUserPermission
permission
:
permissionList
)
{
String
permissionPost
=
permission
.
getPermissionPost
();
if
(
JYRY_TYPE
.
equals
(
permissionPost
))
{
JYRYList
.
add
(
this
.
convertPermissionToJson
(
permission
));
continue
;
}
if
(
JCRY_TYPE
.
equals
(
permissionPost
))
{
JCRYList
.
add
(
this
.
convertPermissionToJson
(
permission
));
continue
;
}
if
(
ZYRY_TYPE
.
equals
(
permissionPost
))
{
ZYRYList
.
add
(
this
.
convertPermissionToJson
(
permission
));
}
}
result
.
putIfAbsent
(
JYRY_TYPE
,
JYRYList
);
result
.
putIfAbsent
(
JCRY_TYPE
,
JCRYList
);
result
.
putIfAbsent
(
ZYRY_TYPE
,
ZYRYList
);
return
result
;
}
/**
* 实体转化为jsonObject 并转化附件
*
* @param permission 入参
* @return result
*/
public
JSONObject
convertPermissionToJson
(
TzsUserPermission
permission
)
{
JSONObject
json
=
(
JSONObject
)
JSONObject
.
toJSON
(
permission
);
for
(
String
field
:
ATTACHMENTS
)
{
if
(
json
.
get
(
field
)
!=
null
&&
json
.
get
(
field
)
instanceof
String
)
{
json
.
put
(
field
,
JSON
.
parse
(
json
.
get
(
field
).
toString
()));
}
}
// 作业项目【jobItem】 字段特殊处理
JSONArray
jobItem
=
JSON
.
parseArray
(
String
.
valueOf
(
json
.
get
(
"jobItem"
)));
json
.
put
(
"jobItem"
,
jobItem
);
if
(!(
jobItem
==
null
||
jobItem
.
isEmpty
()))
{
json
.
put
(
"doNotDelJobItem"
,
jobItem
.
stream
().
map
(
Object:
:
toString
).
collect
(
Collectors
.
joining
(
","
)));
}
return
json
;
}
}
}
}
\ No newline at end of file
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