记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
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
董敬伟
liquidnet-bus-v1
Commits
28288f25
Commit
28288f25
authored
Dec 09, 2021
by
胡佳晨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改猫登天空数据
parent
dae4f2d0
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
64 additions
and
53 deletions
+64
-53
SweetWechatMaoDengController.java
...ervice/sweet/controller/SweetWechatMaoDengController.java
+13
-13
MaoDengImageHandler.java
.../liquidnet/service/sweet/handler/MaoDengImageHandler.java
+21
-6
SweetWechatMaoDengServiceImpl.java
...ice/sweet/service/impl/SweetWechatMaoDengServiceImpl.java
+23
-27
WechatUsersRedisUtils.java
.../liquidnet/service/sweet/utils/WechatUsersRedisUtils.java
+6
-6
sqlmap.properties
...uidnet-service-sweet/src/main/resources/sqlmap.properties
+1
-1
No files found.
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/controller/SweetWechatMaoDengController.java
View file @
28288f25
...
@@ -31,16 +31,15 @@ public class SweetWechatMaoDengController {
...
@@ -31,16 +31,15 @@ public class SweetWechatMaoDengController {
private
SweetWechatMaoDengServiceImpl
sweetWechatMaoDengService
;
private
SweetWechatMaoDengServiceImpl
sweetWechatMaoDengService
;
@GetMapping
(
"/backData"
)
@GetMapping
(
"/backData"
)
@ApiOperation
(
"返回文字图片"
)
@ApiOperation
(
"返回文字图片"
)
public
ResponseDto
<
SweetMaoDengVo
>
backDatas
(
String
userId
)
{
public
ResponseDto
<
SweetMaoDengVo
>
backDatas
(
String
userId
,
String
maoId
)
{
SweetWechatUsersVo
wechatUsers
=
redisUtils
.
getSweetWechatUsersOfUnionId
(
userId
,
1
);
SweetWechatUsersVo
wechatUsers
=
redisUtils
.
getSweetWechatUsersOfUnionId
(
userId
,
1
);
if
(
null
==
wechatUsers
)
{
if
(
null
==
wechatUsers
)
{
return
ResponseDto
.
failure
(
"获取信息失败"
);
return
ResponseDto
.
failure
(
"获取信息失败"
);
}
}
SweetMaoDengVo
sweetMaoDeng
=
redisUtils
.
getSweetMaoDeng
(
wechatUsers
.
getOpenId
()
);
SweetMaoDengVo
sweetMaoDeng
=
redisUtils
.
getSweetMaoDeng
(
userId
,
maoId
);
if
(
sweetMaoDeng
!=
null
)
{
if
(
sweetMaoDeng
!=
null
)
{
String
textMsg
=
sweetMaoDeng
.
getTextMsg
();
String
textMsg
=
sweetMaoDeng
.
getTextMsg
();
String
image
=
sweetMaoDeng
.
getPicUrl
();
String
image
=
sweetMaoDeng
.
getPicUrl
();
if
(
StringUtil
.
isEmpty
(
textMsg
)
&&
StringUtil
.
isEmpty
(
image
))
{
if
(
StringUtil
.
isEmpty
(
textMsg
)
&&
StringUtil
.
isEmpty
(
image
))
{
...
@@ -58,9 +57,10 @@ public class SweetWechatMaoDengController {
...
@@ -58,9 +57,10 @@ public class SweetWechatMaoDengController {
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"userId"
,
value
=
"userId"
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"userId"
,
value
=
"userId"
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"imgUrl"
,
value
=
"imgUrl"
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"imgUrl"
,
value
=
"imgUrl"
),
})
})
public
ResponseDto
addBuilderImg
(
@RequestParam
(
value
=
"userId"
,
required
=
false
)
String
userId
,
public
ResponseDto
addBuilderImg
(
@RequestParam
(
value
=
"userId"
,
required
=
false
)
String
userId
,
@RequestParam
(
value
=
"imgUrl"
,
required
=
false
)
String
imgUrl
){
@RequestParam
(
value
=
"imgUrl"
,
required
=
false
)
String
imgUrl
,
return
sweetWechatMaoDengService
.
addBuilderImg
(
userId
,
imgUrl
);
@RequestParam
(
value
=
"maoId"
,
required
=
false
)
String
maoId
)
{
return
sweetWechatMaoDengService
.
addBuilderImg
(
userId
,
imgUrl
,
maoId
);
}
}
}
}
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/handler/MaoDengImageHandler.java
View file @
28288f25
...
@@ -6,8 +6,11 @@ import com.liquidnet.common.third.shumei.util.ShumeiUtil;
...
@@ -6,8 +6,11 @@ import com.liquidnet.common.third.shumei.util.ShumeiUtil;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.adam.dto.vo.AdamUserInfoVo
;
import
com.liquidnet.service.adam.dto.vo.AdamUserInfoVo
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.kylin.dto.vo.basicServices.UploadVo
;
import
com.liquidnet.service.kylin.dto.vo.basicServices.UploadVo
;
import
com.liquidnet.service.sweet.config.WechatMaConfigure
;
import
com.liquidnet.service.sweet.config.WechatMaConfigure
;
import
com.liquidnet.service.sweet.utils.QueueUtils
;
import
com.liquidnet.service.sweet.utils.WechatUsersRedisUtils
;
import
com.liquidnet.service.sweet.utils.WechatUsersRedisUtils
;
import
com.liquidnet.service.sweet.vo.SweetMaoDengVo
;
import
com.liquidnet.service.sweet.vo.SweetMaoDengVo
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -25,6 +28,8 @@ import org.springframework.stereotype.Component;
...
@@ -25,6 +28,8 @@ import org.springframework.stereotype.Component;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.MultiValueMap
;
import
org.springframework.util.MultiValueMap
;
import
java.time.LocalDateTime
;
import
java.util.LinkedList
;
import
java.util.Map
;
import
java.util.Map
;
@Component
@Component
...
@@ -39,15 +44,14 @@ public class MaoDengImageHandler implements WxMpMessageHandler {
...
@@ -39,15 +44,14 @@ public class MaoDengImageHandler implements WxMpMessageHandler {
private
ShumeiUtil
shumeiUtil
;
private
ShumeiUtil
shumeiUtil
;
@Autowired
@Autowired
WechatMaConfigure
maConfigure
;
WechatMaConfigure
maConfigure
;
@Autowired
QueueUtils
queueUtils
;
@Override
@Override
public
WxMpXmlOutMessage
handle
(
WxMpXmlMessage
wxMessage
,
Map
<
String
,
Object
>
map
,
WxMpService
wxMpService
,
WxSessionManager
wxSessionManager
)
throws
WxErrorException
{
public
WxMpXmlOutMessage
handle
(
WxMpXmlMessage
wxMessage
,
Map
<
String
,
Object
>
map
,
WxMpService
wxMpService
,
WxSessionManager
wxSessionManager
)
throws
WxErrorException
{
String
fromUser
=
wxMessage
.
getFromUser
();
//用户id
String
fromUser
=
wxMessage
.
getFromUser
();
//用户id
String
picUrl
=
wxMessage
.
getPicUrl
().
replace
(
"http"
,
"https"
);
//图片urlmao
String
picUrl
=
wxMessage
.
getPicUrl
().
replace
(
"http"
,
"https"
);
//图片urlmao
log
.
debug
(
"[openId] = "
+
wxMessage
.
getOpenId
());
log
.
debug
(
"[unionId] = "
+
wxMessage
.
getUnionId
());
//猫登天空活动开启
//猫登天空活动开启
if
(
StringUtil
.
isNotEmpty
(
redisUtils
.
getSweetMaoDengOpen
(
fromUser
)))
{
if
(
StringUtil
.
isNotEmpty
(
redisUtils
.
getSweetMaoDengOpen
(
fromUser
)))
{
...
@@ -79,12 +83,23 @@ public class MaoDengImageHandler implements WxMpMessageHandler {
...
@@ -79,12 +83,23 @@ public class MaoDengImageHandler implements WxMpMessageHandler {
sweetMaoDengVo
.
setPicUrl
(
picUrl
);
sweetMaoDengVo
.
setPicUrl
(
picUrl
);
//活动已开启 持久化 redis
//活动已开启 持久化 redis
SweetMaoDengVo
sweetMaoDeng
=
redisUtils
.
getSweetMaoDengTransfer
(
fromUser
);
SweetMaoDengVo
sweetMaoDeng
=
redisUtils
.
getSweetMaoDengTransfer
(
fromUser
);
String
textMsg
=
null
;
if
(
sweetMaoDeng
!=
null
)
{
if
(
sweetMaoDeng
!=
null
)
{
String
textMsg
=
sweetMaoDeng
.
getTextMsg
();
textMsg
=
sweetMaoDeng
.
getTextMsg
();
sweetMaoDengVo
.
setTextMsg
(
textMsg
);
sweetMaoDengVo
.
setTextMsg
(
textMsg
);
}
}
redisUtils
.
setSweetMaoDeng
(
sweetMaoDengVo
);
String
maoId
=
IDGenerator
.
nextSnowId
();
redisUtils
.
setSweetMaoDeng
(
sweetMaoDengVo
,
maoId
);
if
(
StringUtil
.
isNotEmpty
(
textMsg
)
&&
StringUtil
.
isNotEmpty
(
picUrl
))
{
//redis队列入库
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"sweet_wechat_maodeng.insert"
));
sqlsDataA
.
add
(
new
Object
[]{
maoId
,
fromUser
,
textMsg
,
picUrl
,
""
,
LocalDateTime
.
now
()});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_WECHAT_MAODENG_TEXT_INSERT
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
}
WxMpXmlOutTextMessage
build
=
WxMpXmlOutMessage
.
TEXT
().
content
(
"成了!点击上方小程序卡片查看猫咪的隐藏音乐技能。"
)
WxMpXmlOutTextMessage
build
=
WxMpXmlOutMessage
.
TEXT
().
content
(
"成了!点击上方小程序卡片查看猫咪的隐藏音乐技能。"
)
.
fromUser
(
wxMessage
.
getToUser
()).
toUser
(
wxMessage
.
getFromUser
())
.
fromUser
(
wxMessage
.
getToUser
()).
toUser
(
wxMessage
.
getFromUser
())
...
@@ -92,7 +107,7 @@ public class MaoDengImageHandler implements WxMpMessageHandler {
...
@@ -92,7 +107,7 @@ public class MaoDengImageHandler implements WxMpMessageHandler {
// 发送活动小程序卡片
// 发送活动小程序卡片
WxMpKefuMessage
message
=
WxMpKefuMessage
.
MINIPROGRAMPAGE
()
WxMpKefuMessage
message
=
WxMpKefuMessage
.
MINIPROGRAMPAGE
()
.
appId
(
maConfigure
.
getWxMaAppid
(
4
))
.
appId
(
maConfigure
.
getWxMaAppid
(
4
))
.
pagePath
(
"pages/webview?query=catActivity
"
)
//小程序路径
.
pagePath
(
"pages/webview?query=catActivity
&maoId="
+
maoId
)
//小程序路径
.
thumbMediaId
(
"ov08q51In7bXX6tXv7Few-ud2-J-hyXnDC5NCNSfc_4"
)
// 正在
.
thumbMediaId
(
"ov08q51In7bXX6tXv7Few-ud2-J-hyXnDC5NCNSfc_4"
)
// 正在
// .thumbMediaId("ttUDFdcsOTnGFPBt5xp-vaYe_hS9Jae5C_YUboXmb4c") //test
// .thumbMediaId("ttUDFdcsOTnGFPBt5xp-vaYe_hS9Jae5C_YUboXmb4c") //test
// .thumbMediaId("OFjnPjluDGoHH1KOAdxQ_iMyWpBe_c48V40LlN6VmAQ") //图片地址
// .thumbMediaId("OFjnPjluDGoHH1KOAdxQ_iMyWpBe_c48V40LlN6VmAQ") //图片地址
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/service/impl/SweetWechatMaoDengServiceImpl.java
View file @
28288f25
...
@@ -30,31 +30,27 @@ public class SweetWechatMaoDengServiceImpl {
...
@@ -30,31 +30,27 @@ public class SweetWechatMaoDengServiceImpl {
@Autowired
@Autowired
WechatMaConfigure
maConfigure
;
WechatMaConfigure
maConfigure
;
public
ResponseDto
addBuilderImg
(
String
userId
,
String
imgUrl
)
{
public
ResponseDto
addBuilderImg
(
String
userId
,
String
imgUrl
,
String
maoId
)
{
LocalDateTime
localDateTime
=
DateUtil
.
asLocalDateTime
(
DateUtil
.
now
()
);
//生成创建时间
LocalDateTime
localDateTime
=
LocalDateTime
.
now
(
);
//生成创建时间
try
{
try
{
log
.
error
(
"[userId] = {}"
,
userId
);
log
.
error
(
"[imgUrl] = {}"
,
imgUrl
);
String
maoId
=
IDGenerator
.
nextSnowId
();
SweetWechatUsersVo
wechatUsers
=
redisUtils
.
getSweetWechatUsersOfUnionId
(
userId
,
1
);
SweetWechatUsersVo
wechatUsers
=
redisUtils
.
getSweetWechatUsersOfUnionId
(
userId
,
1
);
if
(
null
==
wechatUsers
)
{
if
(
null
==
wechatUsers
)
{
return
ResponseDto
.
failure
(
"请求失败"
);
return
ResponseDto
.
failure
(
"请求失败"
);
}
}
SweetMaoDengVo
sweetMaoDeng
=
redisUtils
.
getSweetMaoDeng
(
wechatUsers
.
getOpenId
()
);
SweetMaoDengVo
sweetMaoDeng
=
redisUtils
.
getSweetMaoDeng
(
wechatUsers
.
getOpenId
(),
maoId
);
if
(
sweetMaoDeng
!=
null
)
{
if
(
sweetMaoDeng
!=
null
)
{
sweetMaoDeng
.
setImgUrl
(
imgUrl
);
sweetMaoDeng
.
setImgUrl
(
imgUrl
);
}
}
String
textMsg
=
sweetMaoDeng
.
getTextMsg
();
String
textMsg
=
sweetMaoDeng
.
getTextMsg
();
String
picUrl
=
sweetMaoDeng
.
getPicUrl
();
String
picUrl
=
sweetMaoDeng
.
getPicUrl
();
sweetMaoDeng
.
setCreatedAt
(
localDateTime
);
sweetMaoDeng
.
setCreatedAt
(
localDateTime
);
redisUtils
.
setSweetMaoDeng
(
sweetMaoDeng
);
redisUtils
.
setSweetMaoDeng
(
sweetMaoDeng
,
maoId
);
if
(
StringUtil
.
isNotEmpty
(
textMsg
)
&&
StringUtil
.
isNotEmpty
(
picUrl
))
{
if
(
StringUtil
.
isNotEmpty
(
textMsg
)
&&
StringUtil
.
isNotEmpty
(
picUrl
))
{
//redis队列入库
//redis队列入库
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"sweet_wechat_maodeng.insert
"
));
sqls
.
add
(
SqlMapping
.
get
(
"sweet_wechat_maodeng.img.update
"
));
sqlsDataA
.
add
(
new
Object
[]{
maoId
,
userId
,
textMsg
,
picUrl
,
imgUrl
,
localDateTime
});
sqlsDataA
.
add
(
new
Object
[]{
imgUrl
,
userId
,
maoId
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_WECHAT_MAODENG_TEXT_INSERT
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_WECHAT_MAODENG_TEXT_INSERT
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
return
ResponseDto
.
failure
(
"请求成功"
);
return
ResponseDto
.
failure
(
"请求成功"
);
}
}
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/utils/WechatUsersRedisUtils.java
View file @
28288f25
...
@@ -133,8 +133,8 @@ public class WechatUsersRedisUtils {
...
@@ -133,8 +133,8 @@ public class WechatUsersRedisUtils {
}
}
//整体取
//整体取
public
SweetMaoDengVo
getSweetMaoDeng
(
String
fromUser
)
{
public
SweetMaoDengVo
getSweetMaoDeng
(
String
userId
,
String
maoId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER
.
concat
(
":"
+
fromUser
);
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER
.
concat
(
":"
+
userId
+
":"
+
maoId
);
SweetMaoDengVo
obj
=
(
SweetMaoDengVo
)
redisUtil
.
get
(
redisKey
);
SweetMaoDengVo
obj
=
(
SweetMaoDengVo
)
redisUtil
.
get
(
redisKey
);
if
(
null
==
obj
)
{
if
(
null
==
obj
)
{
return
null
;
return
null
;
...
@@ -144,8 +144,8 @@ public class WechatUsersRedisUtils {
...
@@ -144,8 +144,8 @@ public class WechatUsersRedisUtils {
}
}
//整体存
//整体存
public
void
setSweetMaoDeng
(
SweetMaoDengVo
sweetMaoDengVo
)
{
public
void
setSweetMaoDeng
(
SweetMaoDengVo
sweetMaoDengVo
,
String
maoId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER
.
concat
(
":"
+
sweetMaoDengVo
.
getUserId
());
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER
.
concat
(
":"
+
sweetMaoDengVo
.
getUserId
()
+
":"
+
maoId
);
redisUtil
.
set
(
redisKey
,
sweetMaoDengVo
);
redisUtil
.
set
(
redisKey
,
sweetMaoDengVo
);
}
}
...
@@ -162,13 +162,13 @@ public class WechatUsersRedisUtils {
...
@@ -162,13 +162,13 @@ public class WechatUsersRedisUtils {
//临时数据中转
//临时数据中转
public
void
setSweetMaoDengTransfer
(
SweetMaoDengVo
sweetMaoDengVo
,
long
expire
)
{
public
void
setSweetMaoDengTransfer
(
SweetMaoDengVo
sweetMaoDengVo
,
long
expire
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER
.
concat
(
":"
+
sweetMaoDengVo
.
getUserId
());
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER
.
concat
(
":"
+
sweetMaoDengVo
.
getUserId
());
redisUtil
.
set
(
redisKey
,
sweetMaoDengVo
,
expire
);
redisUtil
.
set
(
redisKey
,
sweetMaoDengVo
,
expire
);
}
}
//临时数据中转
//临时数据中转
public
SweetMaoDengVo
getSweetMaoDengTransfer
(
String
fromUser
)
{
public
SweetMaoDengVo
getSweetMaoDengTransfer
(
String
fromUser
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER
.
concat
(
":"
+
fromUser
);
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER
.
concat
(
":"
+
fromUser
);
SweetMaoDengVo
obj
=
(
SweetMaoDengVo
)
redisUtil
.
get
(
redisKey
);
SweetMaoDengVo
obj
=
(
SweetMaoDengVo
)
redisUtil
.
get
(
redisKey
);
if
(
null
==
obj
)
{
if
(
null
==
obj
)
{
return
null
;
return
null
;
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/resources/sqlmap.properties
View file @
28288f25
...
@@ -60,7 +60,7 @@ sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(line
...
@@ -60,7 +60,7 @@ sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(line
#---------------------------猫登天空--------------------------------
#---------------------------猫登天空--------------------------------
sweet_wechat_maodeng.insert
=
INSERT INTO sweet_wechat_maodeng(mao_id,user_id,text_msg,pic_url,img_url,created_at) VALUES (?,?,?,?,?,?)
sweet_wechat_maodeng.insert
=
INSERT INTO sweet_wechat_maodeng(mao_id,user_id,text_msg,pic_url,img_url,created_at) VALUES (?,?,?,?,?,?)
sweet_wechat_maodeng.text.update
=
UPDATE sweet_wechat_maodeng SET text_msg=? WHERE user_id=? AND mao_id=?
sweet_wechat_maodeng.text.update
=
UPDATE sweet_wechat_maodeng SET text_msg=? WHERE user_id=? AND mao_id=?
sweet_wechat_maodeng.img.update
=
UPDATE sweet_wechat_maodeng SET
pic
_url=? WHERE user_id=? AND mao_id=?
sweet_wechat_maodeng.img.update
=
UPDATE sweet_wechat_maodeng SET
img
_url=? WHERE user_id=? AND mao_id=?
...
...
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