Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
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
youjj
cloud-platform
Commits
299603ff
Commit
299603ff
authored
Dec 18, 2019
by
libin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
169aae70
3dbdf86c
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
254 additions
and
159 deletions
+254
-159
AppUserPositionTempDTO.java
...ub/wxiaoqi/security/admin/dto/AppUserPositionTempDTO.java
+4
-2
AppUserPositionTemp.java
...ub/wxiaoqi/security/admin/entity/AppUserPositionTemp.java
+4
-0
AppUserPositionTempVo.java
...thub/wxiaoqi/security/admin/vo/AppUserPositionTempVo.java
+3
-0
AppStaffUserBiz.java
...om/github/wxiaoqi/security/admin/biz/AppStaffUserBiz.java
+2
-2
AppUserPositionChangeRecordBiz.java
...qi/security/admin/biz/AppUserPositionChangeRecordBiz.java
+1
-1
AppUserPositionTempBiz.java
...ub/wxiaoqi/security/admin/biz/AppUserPositionTempBiz.java
+2
-2
ActivityLuckDrawFindDTO.java
...m/xxfc/platform/activity/dto/ActivityLuckDrawFindDTO.java
+2
-0
ActivityLuckyDrawListVo.java
...om/xxfc/platform/activity/vo/ActivityLuckyDrawListVo.java
+11
-0
ActivityLuckyDrawBiz.java
.../com/xxfc/platform/activity/biz/ActivityLuckyDrawBiz.java
+18
-6
ActivityPopularizeBiz.java
...com/xxfc/platform/activity/biz/ActivityPopularizeBiz.java
+162
-137
PopularizeMQHandler.java
...m/xxfc/platform/activity/handler/PopularizeMQHandler.java
+0
-4
ActivityLuckyDrawMapper.java
...xfc/platform/activity/mapper/ActivityLuckyDrawMapper.java
+4
-0
ActivityPopularizeController.java
.../platform/activity/rest/ActivityPopularizeController.java
+9
-0
ActivityLuckyDrawAdminController.java
...activity/rest/admin/ActivityLuckyDrawAdminController.java
+4
-5
ActivityLuckyDrawMapper.xml
...ver/src/main/resources/mapper/ActivityLuckyDrawMapper.xml
+28
-0
No files found.
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/dto/AppUserPositionTempDTO.java
View file @
299603ff
...
@@ -26,8 +26,7 @@ public class AppUserPositionTempDTO {
...
@@ -26,8 +26,7 @@ public class AppUserPositionTempDTO {
@ApiModelProperty
(
value
=
"姓名"
)
@ApiModelProperty
(
value
=
"姓名"
)
private
String
name
;
private
String
name
;
@ApiModelProperty
(
value
=
"身份id"
)
@ApiModelProperty
(
value
=
"身份id"
)
private
Integer
positionId
;
private
Integer
positionId
;
@ApiModelProperty
(
value
=
"员工职位id"
)
@ApiModelProperty
(
value
=
"员工职位id"
)
...
@@ -48,6 +47,9 @@ public class AppUserPositionTempDTO {
...
@@ -48,6 +47,9 @@ public class AppUserPositionTempDTO {
@ApiModelProperty
(
value
=
"是否删除:0-正常;1-删除"
)
@ApiModelProperty
(
value
=
"是否删除:0-正常;1-删除"
)
private
Integer
isDel
;
private
Integer
isDel
;
@ApiModelProperty
(
value
=
"员工职位状态:0-正常;1-离职"
)
private
Integer
isQuit
;
@ApiModelProperty
(
value
=
"用户id"
)
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userId
;
private
Integer
userId
;
...
...
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/entity/AppUserPositionTemp.java
View file @
299603ff
...
@@ -76,4 +76,8 @@ public class AppUserPositionTemp implements Serializable {
...
@@ -76,4 +76,8 @@ public class AppUserPositionTemp implements Serializable {
private
Integer
isDel
;
private
Integer
isDel
;
@Column
(
name
=
"is_quit"
)
@ApiModelProperty
(
value
=
"员工职位状态:0-正常;1-离职"
)
private
Integer
isQuit
;
}
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/AppUserPositionTempVo.java
View file @
299603ff
...
@@ -51,4 +51,7 @@ public class AppUserPositionTempVo {
...
@@ -51,4 +51,7 @@ public class AppUserPositionTempVo {
@ApiModelProperty
(
value
=
"分公司名称"
)
@ApiModelProperty
(
value
=
"分公司名称"
)
private
String
companyName
;
private
String
companyName
;
@ApiModelProperty
(
value
=
"员工职位状态 0:在职 1:离职"
)
private
Integer
idQuit
;
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppStaffUserBiz.java
View file @
299603ff
...
@@ -66,14 +66,14 @@ public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> {
...
@@ -66,14 +66,14 @@ public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> {
BeanUtils
.
copyProperties
(
staffUser
,
appStaffUserVo
);
BeanUtils
.
copyProperties
(
staffUser
,
appStaffUserVo
);
Integer
suId
=
staffUser
.
getSuId
();
Integer
suId
=
staffUser
.
getSuId
();
//上级员工信息
//上级员工信息
if
(
suId
!=
null
||
suId
!=
0
||
appStaffUser
.
getPhone
()!=
null
){
if
(
suId
!=
null
&&
suId
!=
0
&&
appStaffUser
.
getPhone
()
!=
null
){
AppUserVo
spuser
=
appUserDetailBiz
.
getUserInfoById
(
suId
);
AppUserVo
spuser
=
appUserDetailBiz
.
getUserInfoById
(
suId
);
appStaffUserVo
.
setEmployeeName
(
spuser
.
getRealname
());
appStaffUserVo
.
setEmployeeName
(
spuser
.
getRealname
());
appStaffUserVo
.
setEmployeePhone
(
spuser
.
getUsername
());
appStaffUserVo
.
setEmployeePhone
(
spuser
.
getUsername
());
}
}
//客户信息
//客户信息
Integer
uid
=
staffUser
.
getUid
();
Integer
uid
=
staffUser
.
getUid
();
if
(
uid
!=
null
||
uid
!=
0
){
if
(
uid
!=
null
&&
uid
>
0
){
AppUserVo
user
=
appUserDetailBiz
.
getUserInfoById
(
uid
);
AppUserVo
user
=
appUserDetailBiz
.
getUserInfoById
(
uid
);
appStaffUserVo
.
setUName
(
StringUtil
.
isEmpty
(
user
.
getRealname
())?
user
.
getNickname
():
user
.
getRealname
());
appStaffUserVo
.
setUName
(
StringUtil
.
isEmpty
(
user
.
getRealname
())?
user
.
getNickname
():
user
.
getRealname
());
appStaffUserVo
.
setPhone
(
user
.
getUsername
());
appStaffUserVo
.
setPhone
(
user
.
getUsername
());
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppUserPositionChangeRecordBiz.java
View file @
299603ff
...
@@ -49,7 +49,7 @@ public class AppUserPositionChangeRecordBiz extends BaseBiz<AppUserPositionChang
...
@@ -49,7 +49,7 @@ public class AppUserPositionChangeRecordBiz extends BaseBiz<AppUserPositionChang
public
void
addPositionChangeRecord
(
AppUserPositionTemp
userPositionTemp
,
AppUserPositionTemp
oldData
,
Integer
operatorId
,
Timestamp
relTime
)
{
public
void
addPositionChangeRecord
(
AppUserPositionTemp
userPositionTemp
,
AppUserPositionTemp
oldData
,
Integer
operatorId
,
Timestamp
relTime
)
{
AppUserPositionChangeRecord
appUserPositionChangeRecord
=
new
AppUserPositionChangeRecord
();
AppUserPositionChangeRecord
appUserPositionChangeRecord
=
new
AppUserPositionChangeRecord
();
if
(!(
userPositionTemp
.
getIs
Del
().
equals
(
oldData
.
getIsDel
())))
{
if
(!(
userPositionTemp
.
getIs
Quit
().
equals
(
oldData
.
getIsQuit
())))
{
appUserPositionChangeRecord
.
setJobRemark
(
USER_LEAVE_COMPANT
);
appUserPositionChangeRecord
.
setJobRemark
(
USER_LEAVE_COMPANT
);
}
}
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppUserPositionTempBiz.java
View file @
299603ff
...
@@ -168,6 +168,7 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A
...
@@ -168,6 +168,7 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A
String
jobName
=
jobMap
==
null
?
""
:
jobMap
.
get
(
appUserPositionTemp
.
getJobId
())
==
null
?
""
:
jobMap
.
get
(
appUserPositionTemp
.
getJobId
()).
getName
();
String
jobName
=
jobMap
==
null
?
""
:
jobMap
.
get
(
appUserPositionTemp
.
getJobId
())
==
null
?
""
:
jobMap
.
get
(
appUserPositionTemp
.
getJobId
()).
getName
();
appUserPositionTempVo
.
setPositionName
(
postionName
);
appUserPositionTempVo
.
setPositionName
(
postionName
);
appUserPositionTempVo
.
setJobName
(
jobName
);
appUserPositionTempVo
.
setJobName
(
jobName
);
appUserPositionTempVo
.
setIdQuit
(
appUserPositionTemp
.
getIsQuit
());
appUserPositionTempVo
.
setStatus
(
appUserPositionTemp
.
getUserId
()
==
null
?
DataStatus
.
NO_USERED
.
code
:
appUserPositionTemp
.
getUserId
()
==
0
?
DataStatus
.
NO_USERED
.
code
:
DataStatus
.
USERED
.
code
);
appUserPositionTempVo
.
setStatus
(
appUserPositionTemp
.
getUserId
()
==
null
?
DataStatus
.
NO_USERED
.
code
:
appUserPositionTemp
.
getUserId
()
==
0
?
DataStatus
.
NO_USERED
.
code
:
DataStatus
.
USERED
.
code
);
appUserPositionTempVos
.
add
(
appUserPositionTempVo
);
appUserPositionTempVos
.
add
(
appUserPositionTempVo
);
}
}
...
@@ -421,8 +422,7 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A
...
@@ -421,8 +422,7 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A
* 员工复职
* 员工复职
*/
*/
public
ObjectRestResponse
andAddUserPositionChangeRecord
(
AppUserPositionTempDTO
appUserPositionTempDTO
,
Integer
operatorId
)
{
public
ObjectRestResponse
andAddUserPositionChangeRecord
(
AppUserPositionTempDTO
appUserPositionTempDTO
,
Integer
operatorId
)
{
if
(
appUserPositionTempDTO
==
null
||
StringUtils
.
isBlank
(
appUserPositionTempDTO
.
getPhone
())
||
StringUtils
.
isBlank
(
appUserPositionTempDTO
.
getName
())
if
(
appUserPositionTempDTO
==
null
||
StringUtils
.
isBlank
(
appUserPositionTempDTO
.
getPhone
()))
{
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NOTEXIST_CODE
,
"参数不能为空"
);
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NOTEXIST_CODE
,
"参数不能为空"
);
}
}
AppUserPositionTemp
userPositionTemp
=
new
AppUserPositionTemp
();
AppUserPositionTemp
userPositionTemp
=
new
AppUserPositionTemp
();
...
...
xx-activity/xx-activity-api/src/main/java/com/xxfc/platform/activity/dto/ActivityLuckDrawFindDTO.java
View file @
299603ff
...
@@ -24,4 +24,6 @@ public class ActivityLuckDrawFindDTO extends PageParam {
...
@@ -24,4 +24,6 @@ public class ActivityLuckDrawFindDTO extends PageParam {
private
Date
endTime
;
private
Date
endTime
;
private
String
phone
;
private
String
phone
;
private
Integer
activityId
;
private
Integer
activityId
;
private
String
parentPhone
;
}
}
xx-activity/xx-activity-api/src/main/java/com/xxfc/platform/activity/vo/ActivityLuckyDrawListVo.java
0 → 100644
View file @
299603ff
package
com
.
xxfc
.
platform
.
activity
.
vo
;
import
com.xxfc.platform.activity.entity.ActivityLuckyDraw
;
import
lombok.Data
;
@Data
public
class
ActivityLuckyDrawListVo
extends
ActivityLuckyDraw
{
private
String
positionName
;
private
String
parentPhone
;
private
String
parentName
;
}
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityLuckyDrawBiz.java
View file @
299603ff
package
com
.
xxfc
.
platform
.
activity
.
biz
;
package
com
.
xxfc
.
platform
.
activity
.
biz
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.Query
;
import
com.github.wxiaoqi.security.common.util.excel.ExcelUtils
;
import
com.github.wxiaoqi.security.common.util.excel.ExcelUtils
;
import
com.github.wxiaoqi.security.common.vo.PageDataVO
;
import
com.github.wxiaoqi.security.common.vo.PageDataVO
;
import
com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO
;
import
com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO
;
import
com.xxfc.platform.activity.entity.ActivityLuckyDraw
;
import
com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper
;
import
com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.xssf.usermodel.XSSFRow
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
com.xxfc.platform.activity.entity.ActivityLuckyDraw
;
import
com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.ServletOutputStream
;
...
@@ -50,7 +51,7 @@ public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, Activ
...
@@ -50,7 +51,7 @@ public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, Activ
*
*
* @param activityLuckDrawFindDTO
* @param activityLuckDrawFindDTO
* @return
* @return
*/
*/
public
PageDataVO
<
ActivityLuckyDraw
>
listLuckDrawWithPage
(
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
)
{
public
PageDataVO
<
ActivityLuckyDraw
>
listLuckDrawWithPage
(
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
)
{
PageDataVO
<
ActivityLuckyDraw
>
dataVO
=
PageDataVO
.
pageInfo
(
activityLuckDrawFindDTO
.
getPage
(),
activityLuckDrawFindDTO
.
getLimit
(),
()
->
mapper
.
listLuckDrawWithPage
(
activityLuckDrawFindDTO
));
PageDataVO
<
ActivityLuckyDraw
>
dataVO
=
PageDataVO
.
pageInfo
(
activityLuckDrawFindDTO
.
getPage
(),
activityLuckDrawFindDTO
.
getLimit
(),
()
->
mapper
.
listLuckDrawWithPage
(
activityLuckDrawFindDTO
));
List
<
ActivityLuckyDraw
>
data
=
dataVO
.
getData
();
List
<
ActivityLuckyDraw
>
data
=
dataVO
.
getData
();
...
@@ -106,4 +107,15 @@ public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, Activ
...
@@ -106,4 +107,15 @@ public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, Activ
}
}
return
activityLuckyDraws
;
return
activityLuckyDraws
;
}
}
public
ObjectRestResponse
<
PageDataVO
<
ActivityLuckyDrawListVo
>>
getAll
(
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
)
{
Integer
page
=
activityLuckDrawFindDTO
.
getPage
()
==
null
?
1
:
activityLuckDrawFindDTO
.
getPage
();
Integer
limit
=
activityLuckDrawFindDTO
.
getLimit
()
==
null
?
10
:
activityLuckDrawFindDTO
.
getLimit
();
activityLuckDrawFindDTO
.
setPage
(
page
);
activityLuckDrawFindDTO
.
setLimit
(
limit
);
Query
query
=
new
Query
(
activityLuckDrawFindDTO
);
PageDataVO
<
ActivityLuckyDrawListVo
>
pageDataVO
=
PageDataVO
.
pageInfo
(
query
,
()
->
mapper
.
getAllByPage
(
query
.
getSuper
()));
return
ObjectRestResponse
.
succ
(
pageDataVO
);
//添加个人积分状态
}
}
}
\ No newline at end of file
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityPopularizeBiz.java
View file @
299603ff
...
@@ -11,18 +11,22 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
...
@@ -11,18 +11,22 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant
;
import
com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant
;
import
com.xxfc.platform.activity.config.RedissonLock
;
import
com.xxfc.platform.activity.dto.ApLogDTO
;
import
com.xxfc.platform.activity.dto.ApLogDTO
;
import
com.xxfc.platform.activity.entity.*
;
import
com.xxfc.platform.activity.entity.*
;
import
com.xxfc.platform.activity.mapper.ActivityPopularizeMapper
;
import
com.xxfc.platform.activity.mapper.ActivityPopularizeMapper
;
import
com.xxfc.platform.universal.feign.MQSenderFeign
;
import
com.xxfc.platform.universal.feign.MQSenderFeign
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.redisson.api.RLock
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_FALSE
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_FALSE
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_TRUE
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_TRUE
;
...
@@ -36,144 +40,165 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TR
...
@@ -36,144 +40,165 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TR
*/
*/
@Service
@Service
@Slf4j
@Slf4j
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
ActivityPopularizeBiz
extends
BaseBiz
<
ActivityPopularizeMapper
,
ActivityPopularize
>
{
public
class
ActivityPopularizeBiz
extends
BaseBiz
<
ActivityPopularizeMapper
,
ActivityPopularize
>
{
@Autowired
@Autowired
ActivityPopularizeRelationBiz
relationBiz
;
ActivityPopularizeRelationBiz
relationBiz
;
@Autowired
@Autowired
ActivityPopularizeBiz
popularizeBiz
;
ActivityPopularizeBiz
popularizeBiz
;
@Autowired
@Autowired
ActivityPopularizeUserBiz
popularizeUserBiz
;
ActivityPopularizeUserBiz
popularizeUserBiz
;
@Autowired
@Autowired
ActivityPopularizeLogBiz
popularizeLogBiz
;
ActivityPopularizeLogBiz
popularizeLogBiz
;
@Autowired
@Autowired
ActivityPopularizeItemBiz
activityPopularizeItemBiz
;
ActivityPopularizeItemBiz
activityPopularizeItemBiz
;
@Autowired
private
final
RedissonLock
redissonLock
;
UserFeign
userFeign
;
@Autowired
@Autowired
MQSenderFeign
mqSenderFeign
;
UserFeign
userFeign
;
public
static
final
String
POPULARIZE_0101
=
"0101"
;
@Autowired
MQSenderFeign
mqSenderFeign
;
public
static
final
String
PREFIX
=
"P"
;
public
static
final
String
POPULARIZE_0101
=
"0101"
;
public
static
final
Integer
INVITE_ITEMID
=
3
;
public
static
final
String
PREFIX
=
"P"
;
public
void
handleRegister
(
RegisterQueueDTO
registerQueueDTO
)
{
log
.
info
(
"活动码注册成功:registerQueueDTO = {}"
,
registerQueueDTO
.
toString
());
public
static
final
Integer
INVITE_ITEMID
=
3
;
if
(
StringUtils
.
isNotBlank
(
registerQueueDTO
.
getInParamDTO
().
getActivityCode
()))
{
String
activityCode
=
registerQueueDTO
.
getInParamDTO
().
getActivityCode
().
replace
(
PREFIX
,
""
).
replace
(
"p"
,
""
);
public
void
handleRegister
(
RegisterQueueDTO
registerQueueDTO
)
{
AppUserDTO
appUserDTO
=
userFeign
.
userDetailById
(
registerQueueDTO
.
getAppUserId
()).
getData
();
log
.
info
(
"活动码注册成功:registerQueueDTO = {}"
,
registerQueueDTO
.
toString
());
//获取活动code,并且注册来源是app 并且 非普通登录
if
(
StringUtils
.
isNotBlank
(
registerQueueDTO
.
getInParamDTO
().
getActivityCode
()))
{
if
(!
RegisterQueueDTO
.
SIGN_LOGIN
.
equals
(
registerQueueDTO
.
getSign
())
&&
StringUtils
.
isNotBlank
(
activityCode
))
{
String
activityCode
=
registerQueueDTO
.
getInParamDTO
().
getActivityCode
().
replace
(
PREFIX
,
""
).
replace
(
"p"
,
""
);
//查询出活动
AppUserDTO
appUserDTO
=
userFeign
.
userDetailById
(
registerQueueDTO
.
getAppUserId
()).
getData
();
ActivityPopularize
activityPopularize
=
popularizeBiz
.
selectOne
(
new
ActivityPopularize
()
{{
//获取活动code,并且注册来源是app 并且 非普通登录
setCode
(
activityCode
);
if
(!
RegisterQueueDTO
.
SIGN_LOGIN
.
equals
(
registerQueueDTO
.
getSign
())
&&
StringUtils
.
isNotBlank
(
activityCode
))
{
}});
//查询出活动
log
.
info
(
"活动邀请注册:activityPopularize = {}"
,
activityPopularize
.
toString
());
ActivityPopularize
activityPopularize
=
popularizeBiz
.
selectOne
(
new
ActivityPopularize
()
{{
if
(
activityPopularize
!=
null
)
{
setCode
(
activityCode
);
List
<
ActivityPopularizeItem
>
activityPopularizeItems
=
activityPopularizeItemBiz
.
selectByPopularizeId
(
activityPopularize
.
getId
());
}});
ActivityPopularizeItem
activityPopularizeItem
=
activityPopularizeItems
.
get
(
activityPopularizeItems
.
size
()
-
1
);
log
.
info
(
"活动邀请注册:activityPopularize = {}"
,
activityPopularize
.
toString
());
Date
now
=
DateUtil
.
date
();
if
(
activityPopularize
!=
null
)
{
Date
start
=
DateUtil
.
date
(
activityPopularize
.
getStartTime
());
String
lockKey
=
String
.
format
(
"%s%d:%d:%d"
,
registerQueueDTO
.
getAppUserId
(),
registerQueueDTO
.
getInParamDTO
().
getUsername
(),
activityPopularize
.
getId
());
Date
end
=
DateUtil
.
date
(
activityPopularize
.
getEndTime
());
RLock
rLock
=
redissonLock
.
getRLock
(
lockKey
);
try
{
//判断是否活动超时
boolean
isSuccess
=
rLock
.
tryLock
(
5
,
5
,
TimeUnit
.
SECONDS
);
if
(
now
.
before
(
start
)
||
now
.
after
(
end
))
{
if
(
isSuccess
)
{
log
.
error
(
"不在活动范围内 入参Json:"
+
JSONUtil
.
toJsonStr
(
registerQueueDTO
));
List
<
ActivityPopularizeItem
>
activityPopularizeItems
=
activityPopularizeItemBiz
.
selectByPopularizeId
(
activityPopularize
.
getId
());
return
;
ActivityPopularizeItem
activityPopularizeItem
=
activityPopularizeItems
.
get
(
activityPopularizeItems
.
size
()
-
1
);
}
Date
now
=
DateUtil
.
date
();
Date
start
=
DateUtil
.
date
(
activityPopularize
.
getStartTime
());
Integer
majorUserId
=
Integer
.
valueOf
(
appUserDTO
.
getInviterAccount
());
Date
end
=
DateUtil
.
date
(
activityPopularize
.
getEndTime
());
ActivityPopularizeRelation
activityPopularizeRelation
=
new
ActivityPopularizeRelation
()
{{
setMajorUserId
(
majorUserId
);
//判断是否活动超时
setPopularizeId
(
activityPopularize
.
getId
());
if
(
now
.
before
(
start
)
||
now
.
after
(
end
))
{
}};
log
.
error
(
"不在活动范围内 入参Json:"
+
JSONUtil
.
toJsonStr
(
registerQueueDTO
));
return
;
//新增第几个邀请人和邀请金额字段
}
Integer
num
=
relationBiz
.
getByUserIdAndPopularizeId
(
activityPopularizeRelation
);
Integer
majorUserId
=
Integer
.
valueOf
(
appUserDTO
.
getInviterAccount
());
double
amount
=
0
;
ActivityPopularizeRelation
activityPopularizeRelation
=
new
ActivityPopularizeRelation
()
{{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
activityPopularizeItem
.
getDetail
());
setMajorUserId
(
majorUserId
);
if
(
jsonObject
!=
null
&&
StringUtils
.
isNotBlank
(
jsonObject
.
getString
(
"detail"
)))
{
setPopularizeId
(
activityPopularize
.
getId
());
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
jsonObject
.
getString
(
"detail"
));
}};
if
(
jsonArray
!=
null
)
{
JSONObject
jsonObject1
=
jsonArray
.
getJSONObject
(
num
-
1
);
//新增第几个邀请人和邀请金额字段
if
(
jsonObject1
!=
null
)
{
Integer
num
=
relationBiz
.
getByUserIdAndPopularizeId
(
activityPopularizeRelation
);
double
amountString
=
jsonObject1
.
getDouble
(
"amount"
);
amount
=
amount
+
amountString
;
double
amount
=
0
;
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
activityPopularizeItem
.
getDetail
());
}
if
(
jsonObject
!=
null
&&
StringUtils
.
isNotBlank
(
jsonObject
.
getString
(
"detail"
)))
{
}
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
jsonObject
.
getString
(
"detail"
));
double
a
=
amount
;
if
(
jsonArray
!=
null
)
{
//添加活动关系
JSONObject
jsonObject1
=
jsonArray
.
getJSONObject
(
num
-
1
);
relationBiz
.
insertSelective
(
new
ActivityPopularizeRelation
()
{{
if
(
jsonObject1
!=
null
)
{
setPopularizeId
(
activityPopularize
.
getId
());
double
amountString
=
jsonObject1
.
getDouble
(
"amount"
);
setMajorUserId
(
majorUserId
);
amount
=
amount
+
amountString
;
setMinorUserId
(
appUserDTO
.
getUserid
());
}
setNum
(
num
);
}
setAmount
(
new
BigDecimal
(
a
));
}
}});
double
a
=
amount
;
//添加活动关系
ApLogDTO
apLogDTO
=
popularizeLogBiz
.
selectOneApLogDTO
(
new
ActivityPopularizeLog
()
{{
relationBiz
.
insertSelective
(
new
ActivityPopularizeRelation
()
{{
setUserId
(
majorUserId
);
setPopularizeId
(
activityPopularize
.
getId
());
setItemId
(
activityPopularizeItem
.
getId
());
setMajorUserId
(
majorUserId
);
}});
setMinorUserId
(
appUserDTO
.
getUserid
());
setNum
(
num
);
//生成任务项
setAmount
(
new
BigDecimal
(
a
));
if
(
null
==
apLogDTO
)
{
}});
popularizeLogBiz
.
insertSelectiveRe
(
new
ActivityPopularizeLog
()
{{
setItemId
(
activityPopularizeItem
.
getId
());
ApLogDTO
apLogDTO
=
popularizeLogBiz
.
selectOneApLogDTO
(
new
ActivityPopularizeLog
()
{{
setUserId
(
majorUserId
);
setUserId
(
majorUserId
);
setStatus
(
SYS_FALSE
);
setItemId
(
activityPopularizeItem
.
getId
());
setPopularizeId
(
activityPopularize
.
getId
());
}});
}});
}
//生成任务项
if
(
null
==
apLogDTO
)
{
//查出majorUser参与活动信息
popularizeLogBiz
.
insertSelectiveRe
(
new
ActivityPopularizeLog
()
{{
ActivityPopularizeUser
activityPopularizeUser
=
popularizeUserBiz
.
selectOne
(
new
ActivityPopularizeUser
()
{{
setItemId
(
activityPopularizeItem
.
getId
());
setUserId
(
majorUserId
);
setUserId
(
majorUserId
);
setPopularizeId
(
activityPopularize
.
getId
());
setStatus
(
SYS_FALSE
);
}});
setPopularizeId
(
activityPopularize
.
getId
());
double
currentProgress
=
activityPopularizeUser
.
getCurrentProgress
().
doubleValue
();
}});
log
.
info
(
"用户原活动进度:currentProgress = {}"
,
activityPopularizeUser
.
toString
());
}
currentProgress
+=
Double
.
parseDouble
(
a
+
""
);
BigDecimal
bigDecimal
=
new
BigDecimal
(
currentProgress
);
//查出majorUser参与活动信息
log
.
info
(
"用户现活动进度:newCurrentProgress = {}"
,
currentProgress
);
ActivityPopularizeUser
activityPopularizeUser
=
popularizeUserBiz
.
selectOne
(
new
ActivityPopularizeUser
()
{{
//修改当前进度
setUserId
(
majorUserId
);
activityPopularizeUser
.
setCurrentProgress
(
bigDecimal
);
setPopularizeId
(
activityPopularize
.
getId
());
popularizeUserBiz
.
updateSelectiveById
(
activityPopularizeUser
);
}});
//任务没有完成
double
currentProgress
=
activityPopularizeUser
.
getCurrentProgress
().
doubleValue
();
if
(!
SYS_TRUE
.
equals
(
activityPopularizeUser
.
getStatus
()))
{
log
.
info
(
"用户原活动进度:currentProgress = {}"
,
currentProgress
);
currentProgress
+=
Double
.
parseDouble
(
a
+
""
);
BigDecimal
bigDecimal
=
new
BigDecimal
(
currentProgress
);
log
.
info
(
"用户现活动进度:newCurrentProgress = {}"
,
currentProgress
);
//修改当前进度
activityPopularizeUser
.
setCurrentProgress
(
bigDecimal
);
popularizeUserBiz
.
updateSelectiveById
(
activityPopularizeUser
);
//任务没有完成 加锁
if
(!
SYS_TRUE
.
equals
(
activityPopularizeUser
.
getStatus
()))
{
// AwardDTO awardDTO = JSONUtil.toBean(activityPopularize.getValue(), AwardDTO.class);
// AwardDTO awardDTO = JSONUtil.toBean(activityPopularize.getValue(), AwardDTO.class);
//检查是否满足奖励
//检查是否满足奖励
if
(
relationBiz
.
selectList
(
new
ActivityPopularizeRelation
()
{{
if
(
relationBiz
.
selectList
(
new
ActivityPopularizeRelation
()
{{
setMajorUserId
(
majorUserId
);
setMajorUserId
(
majorUserId
);
setPopularizeId
(
activityPopularize
.
getId
());
setPopularizeId
(
activityPopularize
.
getId
());
}}).
size
()
>=
10
)
{
}}).
size
()
>=
10
&&
popularizeUserBiz
.
selectCount
(
new
ActivityPopularizeUser
()
{{
apLogDTO
.
setStatus
(
SYS_TRUE
);
setPopularizeId
(
activityPopularize
.
getId
());
popularizeLogBiz
.
updateSelectiveById
(
BeanUtil
.
toBean
(
apLogDTO
,
ActivityPopularizeLog
.
class
));
setCurrentProgress
(
new
BigDecimal
(
"50"
));
activityPopularizeUser
.
setStatus
(
SYS_TRUE
);
}})
<=
activityPopularize
.
getNumLimit
())
{
popularizeUserBiz
.
updateSelectiveById
(
activityPopularizeUser
);
apLogDTO
.
setStatus
(
SYS_TRUE
);
mqSenderFeign
.
sendMessage
(
RabbitConstant
.
ADMIN_TOPIC
,
RabbitConstant
.
KEY_WALLET_ADD
,
JSONUtil
.
toJsonStr
(
new
MyWalletDetail
()
{{
popularizeLogBiz
.
updateSelectiveById
(
BeanUtil
.
toBean
(
apLogDTO
,
ActivityPopularizeLog
.
class
));
setAmount
(
new
BigDecimal
(
"50"
));
activityPopularizeUser
.
setStatus
(
SYS_TRUE
);
setSource
(
SOURCE_ACTIVITY
);
popularizeUserBiz
.
updateSelectiveById
(
activityPopularizeUser
);
setUserId
(
majorUserId
);
setActivityId
(
activityPopularize
.
getId
());
mqSenderFeign
.
sendMessage
(
RabbitConstant
.
ADMIN_TOPIC
,
RabbitConstant
.
KEY_WALLET_ADD
,
JSONUtil
.
toJsonStr
(
new
MyWalletDetail
()
{{
setActivityName
(
activityPopularize
.
getName
());
setAmount
(
new
BigDecimal
(
"50"
));
setType
(
TYPE_POPULARIZE
);
setSource
(
SOURCE_ACTIVITY
);
setItype
(
ITYPE_IN
);
setUserId
(
majorUserId
);
}}));
setActivityId
(
activityPopularize
.
getId
());
}
setActivityName
(
activityPopularize
.
getName
());
}
setType
(
TYPE_POPULARIZE
);
}
setItype
(
ITYPE_IN
);
}
}}));
}
}
}
}
}
else
{
// 获取锁失败
log
.
info
(
"tryLock fail, key = [{}]"
,
lockKey
);
}
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"tryLock fail, key = [{}]"
,
lockKey
);
}
}
}
}
}
}
}
\ No newline at end of file
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/handler/PopularizeMQHandler.java
View file @
299603ff
...
@@ -2,15 +2,11 @@ package com.xxfc.platform.activity.handler;
...
@@ -2,15 +2,11 @@ package com.xxfc.platform.activity.handler;
import
cn.hutool.json.JSONUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.wxiaoqi.security.admin.dto.RegisterQueueDTO
;
import
com.github.wxiaoqi.security.admin.dto.RegisterQueueDTO
;
import
com.rabbitmq.client.Channel
;
import
com.rabbitmq.client.Channel
;
import
com.xxfc.platform.activity.biz.ActivityPopularizeBiz
;
import
com.xxfc.platform.activity.biz.ActivityPopularizeBiz
;
import
com.xxfc.platform.activity.biz.ActivityUserJoinBiz
;
import
com.xxfc.platform.activity.biz.ActivityUserJoinBiz
;
import
com.xxfc.platform.activity.biz.IntegralUserRecordBiz
;
import
com.xxfc.platform.activity.config.RabbitActivityConfig
;
import
com.xxfc.platform.activity.config.RabbitActivityConfig
;
import
com.xxfc.platform.activity.entity.ActivityPopularize
;
import
com.xxfc.platform.activity.vo.IntegralUserRecordDto
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.core.Message
;
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/mapper/ActivityLuckyDrawMapper.java
View file @
299603ff
...
@@ -2,9 +2,11 @@ package com.xxfc.platform.activity.mapper;
...
@@ -2,9 +2,11 @@ package com.xxfc.platform.activity.mapper;
import
com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO
;
import
com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO
;
import
com.xxfc.platform.activity.entity.ActivityLuckyDraw
;
import
com.xxfc.platform.activity.entity.ActivityLuckyDraw
;
import
com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo
;
import
tk.mybatis.mapper.common.Mapper
;
import
tk.mybatis.mapper.common.Mapper
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* 活动抽奖报名表
* 活动抽奖报名表
...
@@ -16,4 +18,6 @@ import java.util.List;
...
@@ -16,4 +18,6 @@ import java.util.List;
public
interface
ActivityLuckyDrawMapper
extends
Mapper
<
ActivityLuckyDraw
>
{
public
interface
ActivityLuckyDrawMapper
extends
Mapper
<
ActivityLuckyDraw
>
{
List
<
ActivityLuckyDraw
>
listLuckDrawWithPage
(
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
);
List
<
ActivityLuckyDraw
>
listLuckDrawWithPage
(
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
);
List
<
ActivityLuckyDrawListVo
>
getAllByPage
(
Map
<
String
,
Object
>
param
);
}
}
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/rest/ActivityPopularizeController.java
View file @
299603ff
package
com
.
xxfc
.
platform
.
activity
.
rest
;
package
com
.
xxfc
.
platform
.
activity
.
rest
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.date.DateUtil
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface
;
import
com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface
;
...
@@ -29,6 +30,7 @@ import tk.mybatis.mapper.entity.Example;
...
@@ -29,6 +30,7 @@ import tk.mybatis.mapper.entity.Example;
import
tk.mybatis.mapper.weekend.WeekendSqls
;
import
tk.mybatis.mapper.weekend.WeekendSqls
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -156,7 +158,14 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
...
@@ -156,7 +158,14 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
setUserId
(
getAppUser
().
getUserid
());
setUserId
(
getAppUser
().
getUserid
());
setPopularizeId
(
itemAddDTO
.
getPopularizeId
());
setPopularizeId
(
itemAddDTO
.
getPopularizeId
());
}});
}});
Date
now
=
DateUtil
.
date
();
Date
start
=
DateUtil
.
date
(
ap
.
getStartTime
());
Date
end
=
DateUtil
.
date
(
ap
.
getEndTime
());
//判断是否活动超时
if
(
now
.
before
(
start
)
||
now
.
after
(
end
))
{
return
ObjectRestResponse
.
createFailedResult
(
2005
,
"活动已结束"
);
}
//添加用户活动关系
//添加用户活动关系
if
(
null
==
activityPopularizeUser
)
{
if
(
null
==
activityPopularizeUser
)
{
activityPopularizeUser
=
popularizeUserBiz
.
insertSelectiveReT
(
new
ActivityPopularizeUser
(){{
activityPopularizeUser
=
popularizeUserBiz
.
insertSelectiveReT
(
new
ActivityPopularizeUser
(){{
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/rest/admin/ActivityLuckyDrawAdminController.java
View file @
299603ff
package
com
.
xxfc
.
platform
.
activity
.
rest
.
admin
;
package
com
.
xxfc
.
platform
.
activity
.
rest
.
admin
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.vo.PageDataVO
;
import
com.github.wxiaoqi.security.common.vo.PageDataVO
;
import
com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz
;
import
com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz
;
import
com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO
;
import
com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO
;
import
com.xxfc.platform.activity.entity.ActivityLuckyDraw
;
import
com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
@@ -38,9 +38,8 @@ public class ActivityLuckyDrawAdminController {
...
@@ -38,9 +38,8 @@ public class ActivityLuckyDrawAdminController {
* @return
* @return
*/
*/
@PostMapping
(
"/page"
)
@PostMapping
(
"/page"
)
public
ObjectRestResponse
<
PageDataVO
<
ActivityLuckyDraw
>>
listActivtyLuckyDrawWithPage
(
@RequestBody
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
)
{
public
ObjectRestResponse
<
PageDataVO
<
ActivityLuckyDrawListVo
>>
listActivtyLuckyDrawWithPage
(
@RequestBody
ActivityLuckDrawFindDTO
activityLuckDrawFindDTO
)
{
PageDataVO
<
ActivityLuckyDraw
>
activityLuckyDrawPageDataVO
=
activityLuckyDrawBiz
.
listLuckDrawWithPage
(
activityLuckDrawFindDTO
);
return
activityLuckyDrawBiz
.
getAll
(
activityLuckDrawFindDTO
);
return
ObjectRestResponse
.
succ
(
activityLuckyDrawPageDataVO
);
}
}
@PostMapping
(
"/export"
)
@PostMapping
(
"/export"
)
...
...
xx-activity/xx-activity-server/src/main/resources/mapper/ActivityLuckyDrawMapper.xml
View file @
299603ff
...
@@ -39,4 +39,32 @@
...
@@ -39,4 +39,32 @@
order by `crt_time` desc
order by `crt_time` desc
</select>
</select>
<select
id=
"getAllByPage"
resultType=
"com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo"
parameterType=
"Map"
>
select * from `activity_lucky_draw_list` where 1=1
<if
test=
"activityId != null"
>
and `activity_id`=#{activityId}
</if>
<if
test=
"phone != null and phone != ''"
>
and `phone`=#{phone}
</if>
<if
test=
"parentPhone!=null and parentPhone!=''"
>
and `parentPhone`=#{parentPhone}
</if>
<if
test=
"startTime != null and endTime != null"
>
and `crt_time` between #{startTime} and #{endTime}
</if>
<if
test=
"startTime != null and endTime == null"
>
and
<![CDATA[
`crt_time` >
= #{startTime}
]]>
</if>
<if
test=
"startTime==null and endTime!=null"
>
and
<![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
order by `crt_time` desc
</select>
</mapper>
</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