Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
midjourney-proxy
Overview
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
徐少华
midjourney-proxy
Commits
37983128
Commit
37983128
authored
Feb 12, 2020
by
1244575290@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
全局退订
parent
7461c1ba
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
555 additions
and
6 deletions
+555
-6
PcloudRobotWakeUpBizImpl.java
.../pcloud/book/guide/biz/impl/PcloudRobotWakeUpBizImpl.java
+6
-0
BookKeywordBizImpl.java
...com/pcloud/book/keywords/biz/impl/BookKeywordBizImpl.java
+8
-0
PcloudRobotBiz.java
...ava/com/pcloud/book/pcloudkeyword/biz/PcloudRobotBiz.java
+15
-0
PcloudRobotBizImpl.java
...cloud/book/pcloudkeyword/biz/impl/PcloudRobotBizImpl.java
+182
-6
PcloudTdDao.java
...n/java/com/pcloud/book/pcloudkeyword/dao/PcloudTdDao.java
+17
-0
PcloudTdRecordDao.java
.../com/pcloud/book/pcloudkeyword/dao/PcloudTdRecordDao.java
+9
-0
PcloudTdDaoImpl.java
...m/pcloud/book/pcloudkeyword/dao/impl/PcloudTdDaoImpl.java
+33
-0
PcloudTdRecordDaoImpl.java
...ud/book/pcloudkeyword/dao/impl/PcloudTdRecordDaoImpl.java
+16
-0
PcloudTdDTO.java
...n/java/com/pcloud/book/pcloudkeyword/dto/PcloudTdDTO.java
+22
-0
PcloudTdReplyDTO.java
...a/com/pcloud/book/pcloudkeyword/dto/PcloudTdReplyDTO.java
+42
-0
PcloudTd.java
...n/java/com/pcloud/book/pcloudkeyword/entity/PcloudTd.java
+25
-0
PcloudTdRecord.java
.../com/pcloud/book/pcloudkeyword/entity/PcloudTdRecord.java
+16
-0
PcloudRobotFacade.java
...m/pcloud/book/pcloudkeyword/facade/PcloudRobotFacade.java
+29
-0
SelfPushBizImpl.java
...n/java/com/pcloud/book/push/biz/impl/SelfPushBizImpl.java
+6
-0
PcloudKeywordName.xml
...main/resources/mapper/pcloudkeyword/PcloudKeywordName.xml
+8
-0
PcloudRobot.Mapper.xml
...ain/resources/mapper/pcloudkeyword/PcloudRobot.Mapper.xml
+1
-0
PcloudTd.Mapper.xml
...c/main/resources/mapper/pcloudkeyword/PcloudTd.Mapper.xml
+58
-0
PcloudTdRecord.Mapper.xml
.../resources/mapper/pcloudkeyword/PcloudTdRecord.Mapper.xml
+62
-0
No files found.
pcloud-service-book/src/main/java/com/pcloud/book/guide/biz/impl/PcloudRobotWakeUpBizImpl.java
View file @
37983128
...
@@ -12,6 +12,7 @@ import com.pcloud.book.guide.vo.ClassifyInfoVO;
...
@@ -12,6 +12,7 @@ import com.pcloud.book.guide.vo.ClassifyInfoVO;
import
com.pcloud.book.guide.vo.RobotWakeUpConfigVO
;
import
com.pcloud.book.guide.vo.RobotWakeUpConfigVO
;
import
com.pcloud.book.guide.vo.RobotWakeUpMsgVO
;
import
com.pcloud.book.guide.vo.RobotWakeUpMsgVO
;
import
com.pcloud.book.guide.vo.RobotWakeUpShowVO
;
import
com.pcloud.book.guide.vo.RobotWakeUpShowVO
;
import
com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudRobotDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudRobotDao
;
import
com.pcloud.book.pcloudkeyword.facade.response.PcloudRobotClassifyResponseVO
;
import
com.pcloud.book.pcloudkeyword.facade.response.PcloudRobotClassifyResponseVO
;
import
com.pcloud.common.utils.DateUtils
;
import
com.pcloud.common.utils.DateUtils
;
...
@@ -52,6 +53,9 @@ public class PcloudRobotWakeUpBizImpl implements PcloudRobotWakeUpBiz {
...
@@ -52,6 +53,9 @@ public class PcloudRobotWakeUpBizImpl implements PcloudRobotWakeUpBiz {
@Autowired
@Autowired
private
ScheduleService
scheduleService
;
private
ScheduleService
scheduleService
;
@Autowired
private
PcloudRobotBiz
pcloudRobotBiz
;
@Override
@Override
public
void
robotWakeUpConfig
(
RobotWakeUpConfigVO
robotWakeUpConfigVO
)
{
public
void
robotWakeUpConfig
(
RobotWakeUpConfigVO
robotWakeUpConfigVO
)
{
Integer
cycle
=
robotWakeUpConfigVO
.
getCycle
();
Integer
cycle
=
robotWakeUpConfigVO
.
getCycle
();
...
@@ -236,6 +240,8 @@ public class PcloudRobotWakeUpBizImpl implements PcloudRobotWakeUpBiz {
...
@@ -236,6 +240,8 @@ public class PcloudRobotWakeUpBizImpl implements PcloudRobotWakeUpBiz {
Date
date
=
dto
.
getTime
();
Date
date
=
dto
.
getTime
();
String
ip
=
dto
.
getIp
();
String
ip
=
dto
.
getIp
();
if
(
DateUtils
.
getDateDiff
(
date
,
new
Date
())
>
pcloudRobotWakeup
.
getLast
())
{
if
(
DateUtils
.
getDateDiff
(
date
,
new
Date
())
>
pcloudRobotWakeup
.
getLast
())
{
//修改全局订阅状态
pcloudRobotBiz
.
updateUserTdState
(
robot
,
wxid
,
0
);
for
(
PcloudWakeupMessage
msg
:
list
)
{
for
(
PcloudWakeupMessage
msg
:
list
)
{
if
(
"text"
.
equals
(
msg
.
getType
()))
{
if
(
"text"
.
equals
(
msg
.
getType
()))
{
SendTextMessageVO
txt
=
new
SendTextMessageVO
();
SendTextMessageVO
txt
=
new
SendTextMessageVO
();
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/biz/impl/BookKeywordBizImpl.java
View file @
37983128
...
@@ -62,6 +62,7 @@ import com.pcloud.book.keywords.vo.QrWeixinParam;
...
@@ -62,6 +62,7 @@ import com.pcloud.book.keywords.vo.QrWeixinParam;
import
com.pcloud.book.keywords.vo.SetKeywordVO
;
import
com.pcloud.book.keywords.vo.SetKeywordVO
;
import
com.pcloud.book.keywords.vo.SetRankVO
;
import
com.pcloud.book.keywords.vo.SetRankVO
;
import
com.pcloud.book.keywords.vo.UpdateKeywordVO
;
import
com.pcloud.book.keywords.vo.UpdateKeywordVO
;
import
com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordClassifyDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordClassifyDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordReplyDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordReplyDao
;
...
@@ -220,6 +221,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
...
@@ -220,6 +221,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
@Value
(
"${wechat.group.link.prefix}"
)
@Value
(
"${wechat.group.link.prefix}"
)
private
String
wechatGroupLinkPrefix
;
private
String
wechatGroupLinkPrefix
;
@Autowired
private
PcloudRobotBiz
pcloudRobotBiz
;
/**
/**
* 字符串切割长度
* 字符串切割长度
*/
*/
...
@@ -555,6 +558,11 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
...
@@ -555,6 +558,11 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
//判断是否是平台端配置的小号,如果是,走平台端
//判断是否是平台端配置的小号,如果是,走平台端
PcloudRobot
pcloudRobot
=
pcloudRobotDao
.
getByWxId
(
sendTextDTO
.
getWxId
());
PcloudRobot
pcloudRobot
=
pcloudRobotDao
.
getByWxId
(
sendTextDTO
.
getWxId
());
if
(
pcloudRobot
!=
null
){
if
(
pcloudRobot
!=
null
){
//如果是全局退订关键词
if
(
sendTextDTO
.
getTextContent
().
equals
(
pcloudRobotBiz
.
getTdKeyword
()))
{
pcloudRobotBiz
.
handlePcloudTdReply
(
sendTextDTO
);
return
;
}
// 小睿对话索要出版社信息
// 小睿对话索要出版社信息
boolean
_continue
=
replySelfKeywordTemplate
(
sendTextDTO
);
boolean
_continue
=
replySelfKeywordTemplate
(
sendTextDTO
);
// 判断是否需要继续走下去
// 判断是否需要继续走下去
...
...
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/biz/PcloudRobotBiz.java
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
biz
;
package
com
.
pcloud
.
book
.
pcloudkeyword
.
biz
;
import
com.pcloud.book.pcloudKeyword.dto.RobotClassifyDTO
;
import
com.pcloud.book.pcloudKeyword.dto.RobotClassifyDTO
;
import
com.pcloud.book.pcloudkeyword.dto.PcloudTdDTO
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudClassifyTemplate
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudClassifyTemplate
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobot
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobot
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -38,4 +40,17 @@ public interface PcloudRobotBiz {
...
@@ -38,4 +40,17 @@ public interface PcloudRobotBiz {
List
<
RobotClassifyDTO
>
getAllPcloudRobot
();
List
<
RobotClassifyDTO
>
getAllPcloudRobot
();
PcloudRobot
getPcloudRobotByWxId
(
String
robotId
);
PcloudRobot
getPcloudRobotByWxId
(
String
robotId
);
void
editPcloudTd
(
PcloudTdDTO
pcloudTdDTO
);
PcloudTdDTO
getPcloudTdInfo
();
void
handlePcloudTdReply
(
SendTextDTO
sendTextDTO
);
void
updateUserTdState
(
String
robotWxId
,
String
userWxId
,
Integer
tdState
);
Integer
getUserTdState
(
String
robotWxId
,
String
userWxId
);
String
getTdKeyword
();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/biz/impl/PcloudRobotBizImpl.java
View file @
37983128
...
@@ -18,29 +18,34 @@ import com.pcloud.book.pcloudkeyword.entity.PcloudKeywordClassify;
...
@@ -18,29 +18,34 @@ import com.pcloud.book.pcloudkeyword.entity.PcloudKeywordClassify;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobot
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobot
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotQrcode
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotQrcode
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome
;
import
com.pcloud.book.pcloudkeyword.dao.*
;
import
com.pcloud.book.pcloudkeyword.dto.PcloudTdDTO
;
import
com.pcloud.book.pcloudkeyword.dto.PcloudTdReplyDTO
;
import
com.pcloud.book.pcloudkeyword.entity.*
;
import
com.pcloud.book.pcloudkeyword.enums.WelcomeReplyTypeEnum
;
import
com.pcloud.book.pcloudkeyword.enums.WelcomeReplyTypeEnum
;
import
com.pcloud.book.pcloudkeyword.facade.response.PcloudRobotClassifyResponseVO
;
import
com.pcloud.book.pcloudkeyword.facade.response.PcloudRobotClassifyResponseVO
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.page.PageParam
;
import
com.pcloud.common.page.PageParam
;
import
com.pcloud.common.utils.BeanUtils
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.QrcodeUtils
;
import
com.pcloud.common.utils.QrcodeUtils
;
import
com.pcloud.common.utils.httpclient.UrlUtils
;
import
com.pcloud.common.utils.httpclient.UrlUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.contentcenter.resource.dto.ResourceDTO
;
import
com.pcloud.contentcenter.resource.dto.ResourceDTO
;
import
com.sdk.wxgroup.SendFileVO
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
com.sdk.wxgroup.*
;
import
com.sdk.wxgroup.SendPicMessageVO
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@Component
(
"pcloudRobotBiz"
)
@Component
(
"pcloudRobotBiz"
)
public
class
PcloudRobotBizImpl
implements
PcloudRobotBiz
{
public
class
PcloudRobotBizImpl
implements
PcloudRobotBiz
{
...
@@ -63,6 +68,12 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
...
@@ -63,6 +68,12 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
private
PcloudClassifyTemplateDao
pcloudClassifyTemplateDao
;
private
PcloudClassifyTemplateDao
pcloudClassifyTemplateDao
;
@Autowired
@Autowired
private
PcloudRobotClassifyBiz
pcloudRobotClassifyBiz
;
private
PcloudRobotClassifyBiz
pcloudRobotClassifyBiz
;
@Autowired
private
PcloudTdDao
pcloudTdDao
;
@Autowired
private
PcloudTdRecordDao
pcloudTdRecordDao
;
@Autowired
private
PcloudKeywordNameDao
pcloudKeywordNameDao
;
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
@@ -254,7 +265,149 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
...
@@ -254,7 +265,149 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
@Override
@Override
public
PcloudRobot
getPcloudRobotByWxId
(
String
robotId
)
{
public
PcloudRobot
getPcloudRobotByWxId
(
String
robotId
)
{
return
pcloudRobotDao
.
getByWxId
(
robotId
);
return
pcloudRobotDao
.
getByWxId
(
robotId
);
}
@ParamLog
(
"编辑全局退订信息"
)
public
void
editPcloudTd
(
PcloudTdDTO
pcloudTdDTO
)
{
if
(
StringUtil
.
isEmpty
(
pcloudTdDTO
.
getTdKeyword
())
||
StringUtil
.
isEmpty
(
pcloudTdDTO
.
getTdGuide
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"引导语或关键词为空!"
);
}
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"keywordName"
,
pcloudTdDTO
.
getTdKeyword
());
Object
obj
=
pcloudKeywordNameDao
.
getBy
(
paramMap
,
"getByKeywordName"
);
if
(
obj
!=
null
)
{
throw
new
BookBizException
(
BookBizException
.
ERROR
,
"退订关键词与全平台关键词冲突!"
);
}
pcloudTdDao
.
deleteAll
();
List
<
PcloudTdReplyDTO
>
replyDTOList
=
pcloudTdDTO
.
getTdReplyDTOS
();
List
<
PcloudTd
>
pcloudTdList
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
replyDTOList
))
{
for
(
PcloudTdReplyDTO
replyDTO
:
replyDTOList
)
{
PcloudTd
pcloudTd
=
new
PcloudTd
();
BeanUtils
.
copyProperties
(
replyDTO
,
pcloudTd
);
pcloudTd
.
setTdGuide
(
pcloudTdDTO
.
getTdGuide
());
pcloudTd
.
setTdKeyword
(
pcloudTdDTO
.
getTdKeyword
());
pcloudTdList
.
add
(
pcloudTd
);
}
}
else
{
PcloudTd
pcloudTd
=
new
PcloudTd
();
pcloudTd
.
setTdGuide
(
pcloudTdDTO
.
getTdGuide
());
pcloudTd
.
setTdKeyword
(
pcloudTdDTO
.
getTdKeyword
());
pcloudTdList
.
add
(
pcloudTd
);
}
pcloudTdDao
.
batchInsert
(
pcloudTdList
);
}
@Override
@ParamLog
(
"获取全局退订信息"
)
public
PcloudTdDTO
getPcloudTdInfo
()
{
List
<
PcloudTd
>
pcloudTdList
=
pcloudTdDao
.
listAll
();
PcloudTd
pcloudTd
=
pcloudTdList
.
get
(
0
);
PcloudTdDTO
pcloudTdDTO
=
new
PcloudTdDTO
();
pcloudTdDTO
.
setTdGuide
(
pcloudTd
.
getTdGuide
());
pcloudTdDTO
.
setTdKeyword
(
pcloudTd
.
getTdKeyword
());
List
<
PcloudTdReplyDTO
>
replyDTOS
=
new
ArrayList
<>();
for
(
PcloudTd
td
:
pcloudTdList
)
{
PcloudTdReplyDTO
replyDTO
=
new
PcloudTdReplyDTO
();
BeanUtils
.
copyProperties
(
td
,
replyDTO
);
replyDTOS
.
add
(
replyDTO
);
}
this
.
fillTdReplyResource
(
replyDTOS
);
pcloudTdDTO
.
setTdReplyDTOS
(
replyDTOS
);
return
pcloudTdDTO
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
handlePcloudTdReply
(
SendTextDTO
sendTextDTO
)
{
String
robotWxId
=
sendTextDTO
.
getWxId
();
String
userWxId
=
sendTextDTO
.
getWechatUserId
();
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"robotWxId"
,
robotWxId
);
paramMap
.
put
(
"userWxId"
,
userWxId
);
PcloudTdRecord
pcloudTdRecord
=
(
PcloudTdRecord
)
pcloudTdRecordDao
.
getBy
(
paramMap
,
"getByUserAndRobotWxId"
);
if
(
pcloudTdRecord
!=
null
&&
pcloudTdRecord
.
getTdState
()
==
1
)
{
return
;
}
//修改退订记录
PcloudTdRecord
tdRecord
=
new
PcloudTdRecord
();
tdRecord
.
setRobotWxId
(
robotWxId
);
tdRecord
.
setUserWxId
(
userWxId
);
tdRecord
.
setTdState
(
1
);
if
(
pcloudTdRecord
==
null
)
{
pcloudTdRecordDao
.
insert
(
tdRecord
);
}
else
{
pcloudTdRecordDao
.
updateUserTdState
(
tdRecord
);
}
//发送退订回复
List
<
PcloudTd
>
pcloudTdList
=
pcloudTdDao
.
listAll
();
List
<
PcloudTdReplyDTO
>
replyDTOS
=
new
ArrayList
<>();
for
(
PcloudTd
td
:
pcloudTdList
)
{
PcloudTdReplyDTO
replyDTO
=
new
PcloudTdReplyDTO
();
BeanUtils
.
copyProperties
(
td
,
replyDTO
);
replyDTOS
.
add
(
replyDTO
);
}
this
.
fillTdReplyResource
(
replyDTOS
);
this
.
sendTdReplyMessage
(
sendTextDTO
.
getIp
(),
robotWxId
,
userWxId
,
replyDTOS
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updateUserTdState
(
String
robotWxId
,
String
userWxId
,
Integer
tdState
)
{
//修改退订记录
PcloudTdRecord
tdRecord
=
new
PcloudTdRecord
();
tdRecord
.
setRobotWxId
(
robotWxId
);
tdRecord
.
setUserWxId
(
userWxId
);
tdRecord
.
setTdState
(
tdState
);
pcloudTdRecordDao
.
updateUserTdState
(
tdRecord
);
}
@Override
public
Integer
getUserTdState
(
String
robotWxId
,
String
userWxId
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"robotWxId"
,
robotWxId
);
paramMap
.
put
(
"userWxId"
,
userWxId
);
Integer
tdState
=
(
Integer
)
pcloudTdRecordDao
.
getBy
(
paramMap
,
"getUserTdState"
);
return
tdState
==
null
?
0
:
tdState
;
}
@Override
public
String
getTdKeyword
()
{
String
tdKeyword
=
pcloudTdDao
.
getTdKeyword
();
return
StringUtil
.
isEmpty
(
tdKeyword
)
?
""
:
tdKeyword
;
}
private
void
sendTdReplyMessage
(
String
ip
,
String
robotWxId
,
String
userWxId
,
List
<
PcloudTdReplyDTO
>
replyDTOS
)
{
for
(
PcloudTdReplyDTO
tdReplyDTO
:
replyDTOS
)
{
Integer
replyType
=
tdReplyDTO
.
getReplyType
();
if
(
WelcomeReplyTypeEnum
.
TEXT
.
value
.
equals
(
replyType
))
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
tdReplyDTO
.
getContent
());
sendTextMessageVO
.
setAltId
(
robotWxId
);
sendTextMessageVO
.
setWxGroupId
(
userWxId
);
sendTextMessageVO
.
setIp
(
ip
);
sendTextMessageVO
.
setCode
(
SendMessageTypeEnum
.
SELF
.
getCode
());
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
}
else
if
(
WelcomeReplyTypeEnum
.
IMAGE
.
value
.
equals
(
replyType
))
{
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setWxGroupId
(
userWxId
);
sendPicMessageVO
.
setAltId
(
robotWxId
);
sendPicMessageVO
.
setPicUrl
(
tdReplyDTO
.
getPicUrl
());
sendPicMessageVO
.
setIp
(
ip
);
sendPicMessageVO
.
setCode
(
SendMessageTypeEnum
.
SELF
.
getCode
());
WxGroupSDK
.
sendPicMessage
(
sendPicMessageVO
);
}
else
if
(
WelcomeReplyTypeEnum
.
RESOURCE
.
value
.
equals
(
replyType
))
{
SendFileVO
sendFileVO
=
new
SendFileVO
();
sendFileVO
.
setFileUrl
(
tdReplyDTO
.
getResourceUrl
());
sendFileVO
.
setFileName
(
tdReplyDTO
.
getResourceName
());
sendFileVO
.
setIp
(
ip
);
sendFileVO
.
setAltId
(
robotWxId
);
sendFileVO
.
setWxId
(
userWxId
);
sendFileVO
.
setCode
(
SendMessageTypeEnum
.
SELF
.
getCode
());
WxGroupSDK
.
sendFile
(
sendFileVO
);
}
}
}
}
@ParamLog
(
"填充欢迎语回复"
)
@ParamLog
(
"填充欢迎语回复"
)
...
@@ -290,4 +443,27 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
...
@@ -290,4 +443,27 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
}
}
}
}
}
}
private
void
fillTdReplyResource
(
List
<
PcloudTdReplyDTO
>
tdReplyDTOS
)
{
if
(
ListUtils
.
isEmpty
(
tdReplyDTOS
)){
return
;
}
List
<
Long
>
resourceIds
=
tdReplyDTOS
.
stream
().
filter
(
s
->
s
.
getResourceId
()
!=
null
).
map
(
PcloudTdReplyDTO:
:
getResourceId
).
distinct
().
collect
(
Collectors
.
toList
());
if
(!
ListUtils
.
isEmpty
(
resourceIds
)){
Map
<
Long
,
ResourceDTO
>
resourceDTOMap
=
resourceConsr
.
mapByIds
(
resourceIds
);
for
(
PcloudTdReplyDTO
replyDTO
:
tdReplyDTOS
){
if
(
replyDTO
.
getReplyType
()
!=
null
&&
WelcomeReplyTypeEnum
.
RESOURCE
.
value
.
equals
(
replyDTO
.
getReplyType
())){
ResourceDTO
resourceDTO
=
resourceDTOMap
.
get
(
replyDTO
.
getResourceId
());
if
(
resourceDTO
!=
null
){
replyDTO
.
setResourceName
(
resourceDTO
.
getResourceName
());
replyDTO
.
setResourceUrl
(
resourceDTO
.
getFileUrl
());
replyDTO
.
setResourceTypeCode
(
resourceDTO
.
getTypeCode
());
replyDTO
.
setResourceTypeName
(
resourceDTO
.
getTypeName
());
replyDTO
.
setFileType
(
resourceDTO
.
getFileType
());
replyDTO
.
setFileSize
(
resourceDTO
.
getFileSize
());
}
}
}
}
}
}
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/dao/PcloudTdDao.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
dao
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudTd
;
import
com.pcloud.common.core.dao.BaseDao
;
import
java.util.List
;
public
interface
PcloudTdDao
extends
BaseDao
<
PcloudTd
>
{
void
deleteAll
();
Integer
batchInsert
(
List
<
PcloudTd
>
pcloudTdList
);
List
<
PcloudTd
>
listAll
();
String
getTdKeyword
();
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/dao/PcloudTdRecordDao.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
dao
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudTdRecord
;
import
com.pcloud.common.core.dao.BaseDao
;
public
interface
PcloudTdRecordDao
extends
BaseDao
<
PcloudTdRecord
>
{
void
updateUserTdState
(
PcloudTdRecord
tdRecord
);
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/dao/impl/PcloudTdDaoImpl.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
dao
.
impl
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudTdDao
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudTd
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
@Component
(
"pcloudTdDao"
)
public
class
PcloudTdDaoImpl
extends
BaseDaoImpl
<
PcloudTd
>
implements
PcloudTdDao
{
@Override
public
void
deleteAll
()
{
super
.
getSqlSession
().
delete
(
getStatement
(
"deleteAll"
));
}
@Override
public
Integer
batchInsert
(
List
<
PcloudTd
>
list
)
{
return
super
.
getSqlSession
().
insert
(
getStatement
(
"batchInsert"
),
list
);
}
@Override
public
List
<
PcloudTd
>
listAll
()
{
return
super
.
getSqlSession
().
selectList
(
getStatement
(
"listAll"
));
}
@Override
public
String
getTdKeyword
()
{
return
super
.
getSqlSession
().
selectOne
(
getStatement
(
"getTdKeyword"
));
}
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/dao/impl/PcloudTdRecordDaoImpl.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
dao
.
impl
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudTdRecordDao
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudTdRecord
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
@Component
(
"pcloudTdRecordDao"
)
public
class
PcloudTdRecordDaoImpl
extends
BaseDaoImpl
<
PcloudTdRecord
>
implements
PcloudTdRecordDao
{
@Override
public
void
updateUserTdState
(
PcloudTdRecord
tdRecord
)
{
super
.
getSessionTemplate
().
update
(
getStatement
(
"updateUserTdState"
),
tdRecord
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/dto/PcloudTdDTO.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
dto
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.pcloud.wechatgroup.base.dto.BaseDTO
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.List
;
@Data
@ApiModel
(
"全平台关键词分类"
)
public
class
PcloudTdDTO
extends
BaseDTO
{
private
String
tdGuide
;
private
String
tdKeyword
;
private
List
<
PcloudTdReplyDTO
>
tdReplyDTOS
;
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/dto/PcloudTdReplyDTO.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
dto
;
import
com.pcloud.wechatgroup.base.dto.BaseDTO
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@Data
@ApiModel
(
"全平台退订回复"
)
public
class
PcloudTdReplyDTO
extends
BaseDTO
{
@ApiModelProperty
(
"回复类型"
)
private
Integer
replyType
;
@ApiModelProperty
(
"文本内容"
)
private
String
content
;
@ApiModelProperty
(
"图片url"
)
private
String
picUrl
;
@ApiModelProperty
(
"资源ID"
)
private
Long
resourceId
;
@ApiModelProperty
(
"资源链接"
)
private
String
resourceUrl
;
@ApiModelProperty
(
"资源名称"
)
private
String
resourceName
;
@ApiModelProperty
(
"资源类型编码"
)
private
String
resourceTypeCode
;
@ApiModelProperty
(
"资源类型名称"
)
private
String
resourceTypeName
;
@ApiModelProperty
(
"文件类型"
)
private
String
fileType
;
@ApiModelProperty
(
"文件大小"
)
private
Long
fileSize
;
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/entity/PcloudTd.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
@Data
@ApiModel
(
"全平台退订"
)
public
class
PcloudTd
extends
BaseEntity
{
private
String
tdGuide
;
private
String
tdKeyword
;
private
Integer
replyType
;
private
String
content
;
private
String
picUrl
;
private
Long
resourceId
;
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/entity/PcloudTdRecord.java
0 → 100644
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
@Data
@ApiModel
(
"全平台退订记录"
)
public
class
PcloudTdRecord
extends
BaseEntity
{
private
String
robotWxId
;
private
String
userWxId
;
private
Integer
tdState
;
}
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/facade/PcloudRobotFacade.java
View file @
37983128
package
com
.
pcloud
.
book
.
pcloudkeyword
.
facade
;
package
com
.
pcloud
.
book
.
pcloudkeyword
.
facade
;
import
com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz
;
import
com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz
;
import
com.pcloud.book.pcloudkeyword.dto.PcloudTdDTO
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobot
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobot
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome
;
import
com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.permission.PermissionException
;
import
com.pcloud.common.permission.PermissionException
;
import
com.pcloud.common.utils.SessionUtil
;
import
com.pcloud.common.utils.SessionUtil
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
io.swagger.annotations.ApiParam
;
...
@@ -130,4 +132,31 @@ public class PcloudRobotFacade {
...
@@ -130,4 +132,31 @@ public class PcloudRobotFacade {
)
throws
BizException
,
PermissionException
{
)
throws
BizException
,
PermissionException
{
return
new
ResponseDto
<>(
pcloudRobotBiz
.
getTemplateByClassifyId
(
classifyId
));
return
new
ResponseDto
<>(
pcloudRobotBiz
.
getTemplateByClassifyId
(
classifyId
));
}
}
@ApiOperation
(
"修改平台退订"
)
@PostMapping
(
"/editPcloudTd"
)
ResponseDto
<?>
editPcloudTd
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestBody
@ApiParam
(
"全局退订"
)
PcloudTdDTO
pcloudTdDTO
)
throws
BizException
,
PermissionException
{
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
pcloudRobotBiz
.
editPcloudTd
(
pcloudTdDTO
);
return
new
ResponseDto
<>();
}
@ApiOperation
(
"获取退订信息"
)
@GetMapping
(
"/getPcloudTdInfo"
)
ResponseDto
<?>
getPcloudTd
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
)
throws
BizException
,
PermissionException
{
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
return
new
ResponseDto
<>(
pcloudRobotBiz
.
getPcloudTdInfo
());
}
@PostMapping
(
"/handlePcloudTdReply"
)
ResponseDto
<?>
handlePcloudTdReply
(
@RequestBody
SendTextDTO
sendTextDTO
)
throws
BizException
,
PermissionException
{
pcloudRobotBiz
.
handlePcloudTdReply
(
sendTextDTO
);
return
new
ResponseDto
<>();
}
}
}
pcloud-service-book/src/main/java/com/pcloud/book/push/biz/impl/SelfPushBizImpl.java
View file @
37983128
...
@@ -12,6 +12,7 @@ import com.pcloud.book.group.dto.SelfRobotBookGroupDTO;
...
@@ -12,6 +12,7 @@ import com.pcloud.book.group.dto.SelfRobotBookGroupDTO;
import
com.pcloud.book.group.entity.WeixinQrcodeGeneration
;
import
com.pcloud.book.group.entity.WeixinQrcodeGeneration
;
import
com.pcloud.book.group.set.GroupSet
;
import
com.pcloud.book.group.set.GroupSet
;
import
com.pcloud.book.group.vo.UserBookInfoVO
;
import
com.pcloud.book.group.vo.UserBookInfoVO
;
import
com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz
;
import
com.pcloud.book.push.biz.SelfPushBiz
;
import
com.pcloud.book.push.biz.SelfPushBiz
;
import
com.pcloud.book.push.constant.PushConstant
;
import
com.pcloud.book.push.constant.PushConstant
;
import
com.pcloud.book.push.dao.SelfPushDao
;
import
com.pcloud.book.push.dao.SelfPushDao
;
...
@@ -83,6 +84,8 @@ public class SelfPushBizImpl implements SelfPushBiz {
...
@@ -83,6 +84,8 @@ public class SelfPushBizImpl implements SelfPushBiz {
private
BookGroupDao
bookGroupDao
;
private
BookGroupDao
bookGroupDao
;
@Autowired
@Autowired
private
PartyConsr
partyConsr
;
private
PartyConsr
partyConsr
;
@Autowired
private
PcloudRobotBiz
pcloudRobotBiz
;
private
static
final
String
self_push_SCHEDULE_PRE
=
"self_push_"
;
private
static
final
String
self_push_SCHEDULE_PRE
=
"self_push_"
;
...
@@ -359,6 +362,9 @@ public class SelfPushBizImpl implements SelfPushBiz {
...
@@ -359,6 +362,9 @@ public class SelfPushBizImpl implements SelfPushBiz {
if
(
StringUtil
.
isEmpty
(
userWxId
)
||
StringUtil
.
isEmpty
(
altId
)){
if
(
StringUtil
.
isEmpty
(
userWxId
)
||
StringUtil
.
isEmpty
(
altId
)){
return
;
return
;
}
}
if
(
pcloudRobotBiz
.
getUserTdState
(
altId
,
userWxId
)
==
1
)
{
return
;
}
Integer
code
=
SendMessageTypeEnum
.
SELF
.
getCode
();
Integer
code
=
SendMessageTypeEnum
.
SELF
.
getCode
();
Integer
itemType
=
selfPushItem
.
getItemType
();
Integer
itemType
=
selfPushItem
.
getItemType
();
if
(
ItemTypeEnum
.
TEXT
.
value
.
equals
(
itemType
))
{
if
(
ItemTypeEnum
.
TEXT
.
value
.
equals
(
itemType
))
{
...
...
pcloud-service-book/src/main/resources/mapper/pcloudkeyword/PcloudKeywordName.xml
View file @
37983128
...
@@ -95,4 +95,11 @@
...
@@ -95,4 +95,11 @@
AND k.id != #{keywordId}
AND k.id != #{keywordId}
</if>
</if>
</select>
</select>
<select
id=
"getByKeywordName"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from pcloud_keyword_name
where name = #{keywordName}
limit 1
</select>
</mapper>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/pcloudkeyword/PcloudRobot.Mapper.xml
View file @
37983128
...
@@ -136,6 +136,7 @@
...
@@ -136,6 +136,7 @@
select
<include
refid=
"Base_Column_List"
/>
select
<include
refid=
"Base_Column_List"
/>
from pcloud_robot
from pcloud_robot
where robot_type = #{robotType}
where robot_type = #{robotType}
and state = 1
limit 1
limit 1
</select>
</select>
...
...
pcloud-service-book/src/main/resources/mapper/pcloudkeyword/PcloudTd.Mapper.xml
0 → 100644
View file @
37983128
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.pcloudkeyword.dao.impl.PcloudTdDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"PcloudTd"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"td_guide"
jdbcType=
"VARCHAR"
property=
"tdGuide"
/>
<result
column=
"td_keyword"
jdbcType=
"VARCHAR"
property=
"tdKeyword"
/>
<result
column=
"reply_type"
jdbcType=
"INTEGER"
property=
"replyType"
/>
<result
column=
"content"
jdbcType=
"VARCHAR"
property=
"content"
/>
<result
column=
"pic_url"
jdbcType=
"VARCHAR"
property=
"picUrl"
/>
<result
column=
"resource_id"
jdbcType=
"INTEGER"
property=
"resourceId"
/>
<result
column=
"create_time"
jdbcType=
"TIMESTAMP"
property=
"createTime"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, td_guide, td_keyword, reply_type, content, pic_url, resource_id, create_time
</sql>
<insert
id=
"batchInsert"
parameterType=
"PcloudTd"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into pcloud_td (
td_guide,
td_keyword,
reply_type,
content,
pic_url,
resource_id,
create_time
) values
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(
#{item.tdGuide,jdbcType=VARCHAR},
#{item.tdKeyword,jdbcType=VARCHAR},
#{item.replyType,jdbcType=INTEGER},
#{item.content,jdbcType=VARCHAR},
#{item.picUrl,jdbcType=VARCHAR},
#{item.resourceId,jdbcType=INTEGER},
NOW()
)
</foreach>
</insert>
<delete
id=
"deleteAll"
>
delete from pcloud_td
</delete>
<select
id=
"listAll"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from pcloud_td
</select>
<select
id=
"getTdKeyword"
resultType=
"string"
>
select td_keyword
from pcloud_td
limit 1
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/pcloudkeyword/PcloudTdRecord.Mapper.xml
0 → 100644
View file @
37983128
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.pcloudkeyword.dao.impl.PcloudTdRecordDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"PcloudTdRecord"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"robot_wx_id"
jdbcType=
"VARCHAR"
property=
"robotWxId"
/>
<result
column=
"user_wx_id"
jdbcType=
"VARCHAR"
property=
"userWxId"
/>
<result
column=
"td_state"
jdbcType=
"INTEGER"
property=
"tdState"
/>
<result
column=
"create_time"
jdbcType=
"TIMESTAMP"
property=
"createTime"
/>
<result
column=
"update_time"
jdbcType=
"TIMESTAMP"
property=
"updateTime"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, robot_wx_id, user_wx_id, td_state, create_time, update_time
</sql>
<insert
id=
"insert"
parameterType=
"PcloudTdRecord"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into pcloud_td_record (
robot_wx_id,
user_wx_id,
td_state,
create_time,
update_time
)
values
(
#{robotWxId,jdbcType=VARCHAR},
#{userWxId,jdbcType=VARCHAR},
#{tdState,jdbcType=INTEGER},
NOW(),
NOW()
)
</insert>
<update
id=
"updateUserTdState"
parameterType=
"PcloudTdRecord"
>
update pcloud_td_record
set
td_state = #{tdState,jdbcType=INTEGER},
update_time = NOW()
where
robot_wx_id = #{robotWxId,jdbcType=VARCHAR}
and user_wx_id = #{userWxId,jdbcType=VARCHAR}
</update>
<select
id=
"getUserTdState"
resultType=
"int"
>
select td_state
from pcloud_td_record
where
robot_wx_id = #{robotWxId,jdbcType=VARCHAR}
and user_wx_id = #{userWxId,jdbcType=VARCHAR}
</select>
<select
id=
"getByUserAndRobotWxId"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from pcloud_td_record
where
robot_wx_id = #{robotWxId}
and user_wx_id = #{userWxId,}
</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