Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
huhu-partner
Project
Overview
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guanchen
huhu-partner
Commits
1a141efa
Commit
1a141efa
authored
Jul 12, 2019
by
guanchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新汇总拓展用户
parent
b5d62299
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
91 additions
and
80 deletions
+91
-80
RedisConfiguration.java
...va/com/lanren/huhu/partner/config/RedisConfiguration.java
+3
-1
Constants.java
...ain/java/com/lanren/huhu/partner/constants/Constants.java
+0
-1
PartnerInviteRelationMapper.java
.../lanren/huhu/partner/dao/PartnerInviteRelationMapper.java
+15
-5
PartnerInviteRelationSqlProvider.java
...en/huhu/partner/dao/PartnerInviteRelationSqlProvider.java
+0
-22
UserAgentMapper.java
...ain/java/com/lanren/huhu/partner/dao/UserAgentMapper.java
+1
-1
AgentManager.java
...in/java/com/lanren/huhu/partner/manager/AgentManager.java
+1
-0
AgentRewardMessage.java
...ava/com/lanren/huhu/partner/model/AgentRewardMessage.java
+1
-0
AgentDailyExpandTask.java
...om/lanren/huhu/partner/schedule/AgentDailyExpandTask.java
+38
-25
AgentRewardQueueTask.java
...om/lanren/huhu/partner/schedule/AgentRewardQueueTask.java
+5
-2
PartnerSettleTask.java
...a/com/lanren/huhu/partner/schedule/PartnerSettleTask.java
+1
-2
PartnerInviteRelationService.java
...en/huhu/partner/service/PartnerInviteRelationService.java
+5
-7
PartnerInviteRelationServiceImpl.java
...artner/service/impl/PartnerInviteRelationServiceImpl.java
+13
-10
UserServiceImpl.java
...com/lanren/huhu/partner/service/impl/UserServiceImpl.java
+0
-0
application.yml
src/main/resources/application.yml
+1
-1
logback.xml
src/main/resources/logback.xml
+3
-3
PartnerInviteRelationMapper.xml
src/main/resources/mapper/PartnerInviteRelationMapper.xml
+4
-0
No files found.
src/main/java/com/lanren/huhu/partner/config/RedisConfiguration.java
View file @
1a141efa
...
...
@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.data.redis.cache.RedisCacheConfiguration
;
import
org.springframework.data.redis.cache.RedisCacheManager
;
import
org.springframework.data.redis.cache.RedisCacheWriter
;
...
...
@@ -19,7 +20,6 @@ import org.springframework.data.redis.connection.lettuce.LettucePoolingClientCon
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.serializer.RedisSerializationContext
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
org.springframework.util.ObjectUtils
;
/**
* @author houseme
...
...
@@ -47,6 +47,7 @@ public class RedisConfiguration {
}
@Bean
@Scope
(
"prototype"
)
public
RedisTemplate
redisTemplate
(
RedisConnectionFactory
redisConnectionFactory
)
{
RedisTemplate
redisTemplate
=
new
RedisTemplate
();
redisTemplate
.
setConnectionFactory
(
redisConnectionFactory
);
...
...
@@ -68,6 +69,7 @@ public class RedisConfiguration {
}
@Bean
@Scope
(
"prototype"
)
public
RedisTemplate
redisTemplatePush
(
@Value
(
"${spring.redis.database2}"
)
int
pushDb
,
@Value
(
"${spring.redis.host}"
)
String
host
,
@Value
(
"${spring.redis.port}"
)
int
port
,
...
...
src/main/java/com/lanren/huhu/partner/constants/Constants.java
View file @
1a141efa
...
...
@@ -35,7 +35,6 @@ public class Constants {
public
static
final
int
AGENT_LEVEL_2
=
2
;
public
static
final
int
AGENT_LEVEL_3
=
3
;
public
static
final
int
AGENT_LEVEL_4
=
4
;
public
static
final
String
DATE_FORMAT
=
"yyyy-MM-dd hh:mm:ss"
;
public
static
final
String
DISTRIBUTE_REDIS_LOCK_KEY
=
"huhu:partner:distribute:redis:key"
;
public
static
final
String
PARENT_COLUMN_NAME_CENGJI
=
"parent_agent_id"
;
public
static
final
String
PARENT_COLUMN_NAME_PINGTUI
=
"presenter_id"
;
...
...
src/main/java/com/lanren/huhu/partner/dao/PartnerInviteRelationMapper.java
View file @
1a141efa
package
com
.
lanren
.
huhu
.
partner
.
dao
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.lanren.huhu.partner.domain.PartnerInviteRelation
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.SelectProvider
;
import
java.util.List
;
@Mapper
public
interface
PartnerInviteRelationMapper
extends
BaseMapper
<
PartnerInviteRelation
>
{
...
...
@@ -18,6 +19,14 @@ public interface PartnerInviteRelationMapper extends BaseMapper<PartnerInviteRel
int
insertOrUpdateSelective
(
PartnerInviteRelation
record
);
@SelectProvider
(
type
=
PartnerInviteRelationSqlProvider
.
class
,
method
=
"getPartnerInviteRelationListByRegDay"
)
List
<
PartnerInviteRelation
>
getPartnerInviteRelationListByRegDay
(
String
datStr
);
/**
* <p>
* 查询 : 根据state状态查询用户列表,分页显示
* 注意!!: 如果入参是有多个,需要加注解指定参数名才能在xml中取值
* </p>
*
* @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
* @return 分页对象
*/
IPage
<
PartnerInviteRelation
>
selectPageByTs
(
Page
<
PartnerInviteRelation
>
page
,
@Param
(
"beginTs"
)
Long
beginTs
,
@Param
(
"endTs"
)
Long
endTs
);
}
\ No newline at end of file
src/main/java/com/lanren/huhu/partner/dao/PartnerInviteRelationSqlProvider.java
deleted
100644 → 0
View file @
b5d62299
package
com
.
lanren
.
huhu
.
partner
.
dao
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
/**
* @author chen
* @title: PartnerInviteRelationSqlProvider
* @projectName partner
* @description: TODO
* @package com.lanren.huhu.partner.dao
* @date 2019-07-08 17:57
*/
public
class
PartnerInviteRelationSqlProvider
{
public
String
getPartnerInviteRelationListByRegDay
(
@Param
(
"datStr"
)
String
datStr
)
{
return
"SELECT * "
+
"FROM partner_invite_relation "
+
"WHERE regiter_time "
+
"BETWEEN UNIX_TIMESTAMP('"
+
datStr
+
" 00:00:00') "
+
"AND UNIX_TIMESTAMP('"
+
datStr
+
" 23:59:59');"
;
}
}
src/main/java/com/lanren/huhu/partner/dao/UserAgentMapper.java
View file @
1a141efa
...
...
@@ -39,7 +39,7 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
// @Select("SELECT b.* " +
// "FROM user_agent a " +
// "JOIN user_agent b on a.#{parentColumnName}=b.agent_id " +
// "WHERE
a
.user_id=#{userId}")
// "WHERE
b
.user_id=#{userId}")
// List<UserAgent> getChildListByUserId(Integer userId, String parentColumnName);
@SelectProvider
(
type
=
UserAgentSqlProvider
.
class
,
method
=
"getChildListByUserId"
)
...
...
src/main/java/com/lanren/huhu/partner/manager/AgentManager.java
View file @
1a141efa
...
...
@@ -71,6 +71,7 @@ public class AgentManager {
agentRewardMessage
.
setOrderSn
(
"507596802910534728"
);
agentRewardMessage
.
setSubOrderSn
(
"507596802910534728"
);
agentRewardMessage
.
setOrderCommission
(
new
BigDecimal
(
"35.400000"
));
agentRewardMessage
.
setSourceOrder
(
"8888"
);
logger
.
info
(
"写入队列"
);
ops
.
leftPush
(
AGENT_REWARD_QUEUE_KEY
,
JSON
.
toJSONString
(
agentRewardMessage
));
return
new
Result
<>();
...
...
src/main/java/com/lanren/huhu/partner/model/AgentRewardMessage.java
View file @
1a141efa
...
...
@@ -31,6 +31,7 @@ public class AgentRewardMessage extends BaseModel {
String
orderTitle
;
String
rewardTypeChild
;
String
orderRateArray
;
String
sourceOrder
;
// public AgentRewardMessage(int rewardType, String rechargeTime, int sourceUserId, String referenceId, int agentId, BigDecimal agentReward, int settleState, String orderType, String orderSn, String subOrderSn, BigDecimal orderCommission) {
// this.rewardType = rewardType;
// this.rechargeTime = rechargeTime;
...
...
src/main/java/com/lanren/huhu/partner/schedule/AgentDailyExpandTask.java
View file @
1a141efa
package
com
.
lanren
.
huhu
.
partner
.
schedule
;
import
com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties
;
import
com.lanren.huhu.partner.constants.Constants
;
import
com.lanren.huhu.partner.domain.AgentExpandDaily
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.lanren.huhu.partner.domain.AgentExpandDetail
;
import
com.lanren.huhu.partner.domain.PartnerInviteRelation
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.model.User
;
import
com.lanren.huhu.partner.model.ParentAgent
;
import
com.lanren.huhu.partner.service.AgentExpandDailyService
;
import
com.lanren.huhu.partner.service.AgentExpandDetailService
;
import
com.lanren.huhu.partner.service.PartnerInviteRelationService
;
import
com.lanren.huhu.partner.service.UserService
;
import
com.lanren.huhu.partner.util.DateUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -18,9 +17,6 @@ import org.springframework.scheduling.annotation.Async;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -37,6 +33,8 @@ import static com.lanren.huhu.partner.constants.Constants.PARENT_COLUMN_NAME_CEN
@Component
public
class
AgentDailyExpandTask
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
AgentDailyExpandTask
.
class
);
private
static
final
int
PAGE_SIZE
=
1000
;
private
static
final
long
DELAY
=
2
*
60
*
60
*
1000L
;
@Autowired
PartnerInviteRelationService
partnerInviteRelationService
;
...
...
@@ -46,32 +44,39 @@ public class AgentDailyExpandTask {
AgentExpandDetailService
agentExpandDetailService
;
@Autowired
AgentExpandDailyService
agentExpandDailyService
;
@Autowired
MybatisPlusProperties
mybatisPlusProperties
;
// @Scheduled(cron="0 5 */2 * * *")
@Scheduled
(
fixedDelay
=
10000L
)
@Scheduled
(
fixedDelay
=
DELAY
)
public
void
runScheduledTask
()
{
logger
.
info
(
"MapperLocations is: {}"
,
mybatisPlusProperties
.
getMapperLocations
());
// logger.info("run AgentDailyExpandTask");
// runSummary();
try
{
Date
dat
=
new
Date
(
System
.
currentTimeMillis
()
-
DELAY
);
String
datStr
=
DateUtils
.
format
(
dat
,
DateUtils
.
FORMAT_SHORT
);
logger
.
info
(
"run AgentDailyExpandTask {}"
,
datStr
);
runSummary
(
datStr
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
@Async
public
void
runSummary
()
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
public
void
runSummary
(
String
datStr
)
{
try
{
Date
dat
=
DateUtils
.
parse
(
datStr
,
DateUtils
.
FORMAT_SHORT
);
int
now
=
(
int
)(
System
.
currentTimeMillis
()
/
1000L
);
Date
dat
=
new
Date
(
System
.
currentTimeMillis
()
-
10
*
60
*
1000L
);
String
datStr
=
df
.
format
(
dat
);
datStr
=
"2019-07-06"
;
List
<
PartnerInviteRelation
>
partnerInviteRelationList
=
partnerInviteRelationService
.
getPartnerInviteRelationListByRegDay
(
datStr
);
int
pageNo
=
1
;
long
beginTs
=
DateUtils
.
parse
(
datStr
,
DateUtils
.
FORMAT_SHORT
).
getTime
()
/
1000L
;
long
endTs
=
beginTs
+
24
*
60
*
60L
-
1L
;
while
(
true
)
{
Page
<
PartnerInviteRelation
>
page
=
new
Page
<
PartnerInviteRelation
>(
pageNo
,
PAGE_SIZE
);
IPage
<
PartnerInviteRelation
>
ipage
=
partnerInviteRelationService
.
selectPageByTs
(
page
,
beginTs
,
endTs
);
List
<
PartnerInviteRelation
>
partnerInviteRelationList
=
ipage
.
getRecords
();
if
(
partnerInviteRelationList
!=
null
&&
partnerInviteRelationList
.
size
()
>
0
)
{
for
(
PartnerInviteRelation
partnerInviteRelation
:
partnerInviteRelationList
)
{
List
<
UserAgent
>
userAgentList
=
userService
.
getUserAgentChild
ListByUserId
(
partnerInviteRelation
.
getUserId
(),
PARENT_COLUMN_NAME_CENGJI
);
for
(
UserAgent
userAgent
:
user
AgentList
)
{
List
<
ParentAgent
>
parentAgentList
=
userService
.
getAgent
ListByUserId
(
partnerInviteRelation
.
getUserId
(),
PARENT_COLUMN_NAME_CENGJI
);
for
(
ParentAgent
parentAgent
:
parent
AgentList
)
{
AgentExpandDetail
detail
=
new
AgentExpandDetail
();
detail
.
setDat
(
dat
);
detail
.
setAgentId
(
user
Agent
.
getAgentId
());
detail
.
setUserId
(
user
Agent
.
getUserId
());
detail
.
setAgentId
(
parent
Agent
.
getAgentId
());
detail
.
setUserId
(
parent
Agent
.
getUserId
());
detail
.
setExpandUserId
(
partnerInviteRelation
.
getUserId
());
detail
.
setExpandUserRegTime
(
new
Date
(
partnerInviteRelation
.
getRegiterTime
()
*
1000L
));
detail
.
setCreatedAt
(
now
);
...
...
@@ -82,5 +87,13 @@ public class AgentDailyExpandTask {
if
(
partnerInviteRelationList
.
size
()
>
0
)
{
agentExpandDailyService
.
updateByDatByDetail
(
datStr
);
}
pageNo
++;
}
else
{
break
;
}
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
}
src/main/java/com/lanren/huhu/partner/schedule/AgentRewardQueueTask.java
View file @
1a141efa
...
...
@@ -25,8 +25,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.TransactionDefinition
;
import
org.springframework.transaction.TransactionStatus
;
import
org.springframework.transaction.annotation.Transactional
;
import
sun.management.resources.agent
;
import
org.springframework.util.StringUtils
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
...
...
@@ -240,7 +239,11 @@ public class AgentRewardQueueTask {
agentReward
.
setAgentLevel
(
agent
.
getLevel
());
agentReward
.
setUserId
(
agent
.
getUserId
());
agentReward
.
setRewardRemark
(
AGENT_REWARD_REMARK
.
get
(
message
.
getRewardType
()));
if
(
StringUtils
.
isEmpty
(
message
.
getSourceOrder
()))
{
agentReward
.
setSourceOrder
(
message
.
getReferenceId
());
}
else
{
agentReward
.
setSourceOrder
(
message
.
getSourceOrder
());
}
agentReward
.
setSourceUserLevel
(
sourceUserLevel
);
agentReward
.
setCreatedAt
(
System
.
currentTimeMillis
()
/
1000L
);
agentReward
.
setCommissionRate
(
commissionRate
);
...
...
src/main/java/com/lanren/huhu/partner/schedule/PartnerSettleTask.java
View file @
1a141efa
...
...
@@ -2,7 +2,6 @@ package com.lanren.huhu.partner.schedule;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
/**
* @author chen
...
...
@@ -12,7 +11,7 @@ import org.springframework.stereotype.Component;
* @package com.lanren.huhu.partner.schedule
* @date 2019-07-02 15:45
*/
@Component
//
@Component
public
class
PartnerSettleTask
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
PartnerSettleTask
.
class
);
...
...
src/main/java/com/lanren/huhu/partner/service/PartnerInviteRelationService.java
View file @
1a141efa
package
com
.
lanren
.
huhu
.
partner
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.lanren.huhu.partner.domain.PartnerInviteRelation
;
import
java.util.List
;
import
com.baomidou.mybatisplus.extension.service.IService
;
/**
* @title: ${NAME}
* @projectName partner
...
...
@@ -22,10 +25,5 @@ public interface PartnerInviteRelationService extends IService<PartnerInviteRela
int
insertOrUpdateSelective
(
PartnerInviteRelation
record
);
/**
* 根据日期查找新增用户
* @param datStr
* @return
*/
List
<
PartnerInviteRelation
>
getPartnerInviteRelationListByRegDay
(
String
datStr
);
IPage
<
PartnerInviteRelation
>
selectPageByTs
(
Page
<
PartnerInviteRelation
>
page
,
Long
beginTs
,
Long
endTs
);
}
src/main/java/com/lanren/huhu/partner/service/impl/PartnerInviteRelationServiceImpl.java
View file @
1a141efa
package
com
.
lanren
.
huhu
.
partner
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.lanren.huhu.partner.dao.PartnerInviteRelationMapper
;
import
com.lanren.huhu.partner.domain.PartnerInviteRelation
;
import
com.lanren.huhu.partner.service.PartnerInviteRelationService
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.lanren.huhu.partner.domain.PartnerInviteRelation
;
import
java.util.List
;
import
com.lanren.huhu.partner.dao.PartnerInviteRelationMapper
;
import
com.lanren.huhu.partner.service.PartnerInviteRelationService
;
/**
* @title: ${NAME}
* @projectName partner
...
...
@@ -41,8 +41,11 @@ public class PartnerInviteRelationServiceImpl extends ServiceImpl<PartnerInviteR
}
@Override
public
List
<
PartnerInviteRelation
>
getPartnerInviteRelationListByRegDay
(
String
datStr
)
{
logger
.
info
(
"datStr is: {}"
,
datStr
);
return
baseMapper
.
getPartnerInviteRelationListByRegDay
(
datStr
);
public
IPage
<
PartnerInviteRelation
>
selectPageByTs
(
Page
<
PartnerInviteRelation
>
page
,
Long
beginTs
,
Long
endTs
)
{
// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
// page.setOptimizeCountSql(false);
// 当 total 为非 0 时(默认为 0),分页插件不会进行 count 查询
// 要点!! 分页返回的对象与传入的对象是同一个
return
baseMapper
.
selectPageByTs
(
page
,
beginTs
,
endTs
);
}
}
src/main/java/com/lanren/huhu/partner/service/impl/UserServiceImpl.java
View file @
1a141efa
This diff is collapsed.
Click to expand it.
src/main/resources/application.yml
View file @
1a141efa
...
...
@@ -102,7 +102,7 @@ mybatis-plus:
logging
:
level
:
#打印SQL信息
com.lanren.huhu.partner.dao
:
debug
com.lanren.huhu.partner.dao
:
info
...
...
src/main/resources/logback.xml
View file @
1a141efa
...
...
@@ -2,9 +2,9 @@
<configuration>
<property
name=
"pattern"
value=
"[%level] %d{yy-MM-dd HH:mm:ss.SSS} [%thread] %logger{50}:%line - %msg%n"
/>
<property
name=
"log_file"
value=
"@logfile_path@/@profiles.active@/@artifactId@-@profiles.active@"
/>
<property
name=
"MaxHistory"
value=
"
15
"
/>
<!--日志保留天数-->
<property
name=
"MaxFileSize"
value=
"
1024
MB"
/>
<!--单个文件大小-->
<property
name=
"totalSizeCap"
value=
"
1024
MB"
/>
<!--单个文件大小-->
<property
name=
"MaxHistory"
value=
"
7
"
/>
<!--日志保留天数-->
<property
name=
"MaxFileSize"
value=
"
256
MB"
/>
<!--单个文件大小-->
<property
name=
"totalSizeCap"
value=
"
256
MB"
/>
<!--单个文件大小-->
<appender
name=
"stdout"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<encoder
class=
"ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
...
...
src/main/resources/mapper/PartnerInviteRelationMapper.xml
View file @
1a141efa
...
...
@@ -627,4 +627,7 @@
</if>
</trim>
</insert>
<select
id=
"selectPageByTs"
resultType=
"com.lanren.huhu.partner.domain.PartnerInviteRelation"
>
SELECT * FROM partner_invite_relation WHERE regiter_time BETWEEN #{beginTs} AND #{endTs}
</select>
</mapper>
\ 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