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
a60a1072
Commit
a60a1072
authored
Sep 06, 2019
by
高鹏
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat-riddle' into 'master'
猜谜语 See merge request rays/pcloud-book!138
parents
a1670ff6
6a3d5438
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
766 additions
and
99 deletions
+766
-99
RiddleConstant.java
...java/com/pcloud/book/riddle/constants/RiddleConstant.java
+8
-0
RiddleClickTypeEnum.java
...ava/com/pcloud/book/riddle/enums/RiddleClickTypeEnum.java
+36
-0
RiddleRecordStatusEnum.java
.../com/pcloud/book/riddle/enums/RiddleRecordStatusEnum.java
+7
-1
RiddleRecordBiz.java
...main/java/com/pcloud/book/riddle/biz/RiddleRecordBiz.java
+24
-0
RiddleRecordBizImpl.java
.../com/pcloud/book/riddle/biz/impl/RiddleRecordBizImpl.java
+206
-78
RiddleClickRecordDao.java
...java/com/pcloud/book/riddle/dao/RiddleClickRecordDao.java
+22
-0
RiddleDao.java
...k/src/main/java/com/pcloud/book/riddle/dao/RiddleDao.java
+6
-0
RiddleRecordDao.java
...main/java/com/pcloud/book/riddle/dao/RiddleRecordDao.java
+41
-1
RiddleClickRecordDaoImpl.java
...pcloud/book/riddle/dao/impl/RiddleClickRecordDaoImpl.java
+29
-0
RiddleDaoImpl.java
...n/java/com/pcloud/book/riddle/dao/impl/RiddleDaoImpl.java
+5
-0
RiddleRecordDaoImpl.java
.../com/pcloud/book/riddle/dao/impl/RiddleRecordDaoImpl.java
+43
-2
CouponClickDTO.java
.../main/java/com/pcloud/book/riddle/dto/CouponClickDTO.java
+46
-0
UserRankingDTO.java
.../main/java/com/pcloud/book/riddle/dto/UserRankingDTO.java
+45
-0
RiddleClickRecord.java
...java/com/pcloud/book/riddle/entity/RiddleClickRecord.java
+75
-0
RiddleFacade.java
...main/java/com/pcloud/book/riddle/facade/RiddleFacade.java
+36
-3
RiddleRedis.java
...c/main/java/com/pcloud/book/riddle/redis/RiddleRedis.java
+6
-6
RiddleClickRecordMapper.xml
.../main/resources/mapper/riddle/RiddleClickRecordMapper.xml
+35
-0
RiddleMapper.xml
...ce-book/src/main/resources/mapper/riddle/RiddleMapper.xml
+8
-1
RiddleRecordMapper.xml
...k/src/main/resources/mapper/riddle/RiddleRecordMapper.xml
+88
-7
No files found.
pcloud-facade-book/src/main/java/com/pcloud/book/riddle/constants/RiddleConstant.java
View file @
a60a1072
...
...
@@ -22,5 +22,13 @@ public class RiddleConstant {
*/
public
static
final
String
JOB_NAME_RIDDLE_EXPIRE
=
"judgeRiddleTime"
;
/**
* 每个谜语后的规则提示
*/
public
static
final
String
rule_notice
=
"敲重点!如果答错了,我是不会回复的哦。"
;
/**
* 关键词说明
*/
public
static
final
String
introduce
=
"猜谜语,简单有趣的小游戏。连续答对5题,所有群成员可获得精美礼券"
;
}
pcloud-facade-book/src/main/java/com/pcloud/book/riddle/enums/RiddleClickTypeEnum.java
0 → 100644
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
enums
;
/**
* @描述:点击记录
* @作者:zhuyajie
* @创建时间:16:39 2019/8/29
* @版本:1.0
*/
public
enum
RiddleClickTypeEnum
{
/**
* 点击链接
*/
link
(
1
),
/**
* 许愿
*/
wish
(
2
),
/**
* 立即使用
*/
use
(
3
);
private
Integer
code
;
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
RiddleClickTypeEnum
(
Integer
code
)
{
this
.
code
=
code
;
}
}
pcloud-facade-book/src/main/java/com/pcloud/book/riddle/enums/RiddleRecordStatusEnum.java
View file @
a60a1072
...
...
@@ -19,7 +19,11 @@ public enum RiddleRecordStatusEnum {
/**
*进行中
*/
underway
(
2
);
underway
(
2
),
/**
* 通关结束
*/
over
(
3
);
private
Integer
code
;
...
...
@@ -34,4 +38,6 @@ public enum RiddleRecordStatusEnum {
RiddleRecordStatusEnum
(
Integer
code
)
{
this
.
code
=
code
;
}
public
static
final
Integer
[]
GAME_END
=
{
end
.
code
,
over
.
code
};
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/biz/RiddleRecordBiz.java
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
biz
;
import
com.pcloud.book.riddle.dto.CouponClickDTO
;
import
com.pcloud.book.riddle.dto.GroupRedisDTO
;
import
com.pcloud.book.riddle.dto.GroupRiddleDTO
;
import
com.pcloud.book.riddle.entity.RiddleClickRecord
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
...
...
@@ -67,4 +69,26 @@ public interface RiddleRecordBiz {
* @param groupRedisDTO
*/
public
void
sendIncorrectMessage
(
GroupRedisDTO
groupRedisDTO
);
/**
* 发送优惠券链接
* @param wxGroupId
* @param wxId
* @param ip
*/
public
void
sendCouponLink
(
String
wxId
,
String
wxGroupId
,
String
ip
);
/**
* 礼券点击记录埋点
* @param riddleClickRecord
*/
void
addClickTrack
(
RiddleClickRecord
riddleClickRecord
);
/**
* 优惠券剩余领取次数
* @param wxGroupId
* @param wechatUserId
* @return
*/
CouponClickDTO
getGroupWishCount
(
String
wxGroupId
,
Long
wechatUserId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/biz/impl/RiddleRecordBizImpl.java
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
biz
.
impl
;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.biz.GroupQrcodeBiz
;
import
com.pcloud.book.group.dao.GroupQrcodeDao
;
import
com.pcloud.book.group.dto.GroupClassifyQrcodeDTO
;
import
com.pcloud.book.group.entity.GroupQrcode
;
import
com.pcloud.book.keywords.dao.BookKeywordDao
;
import
com.pcloud.book.keywords.dto.ReplyKeywordDTO
;
import
com.pcloud.book.riddle.biz.RiddleRecordBiz
;
import
com.pcloud.book.riddle.constants.RiddleConstant
;
import
com.pcloud.book.riddle.dao.RiddleClickRecordDao
;
import
com.pcloud.book.riddle.dao.RiddleDao
;
import
com.pcloud.book.riddle.dao.RiddleRecordDao
;
import
com.pcloud.book.riddle.dao.RiddleReplyDao
;
import
com.pcloud.book.riddle.dto.CouponClickDTO
;
import
com.pcloud.book.riddle.dto.GroupRedisDTO
;
import
com.pcloud.book.riddle.dto.GroupRiddleDTO
;
import
com.pcloud.book.riddle.dto.UserRankingDTO
;
import
com.pcloud.book.riddle.entity.Riddle
;
import
com.pcloud.book.riddle.entity.RiddleClickRecord
;
import
com.pcloud.book.riddle.entity.RiddleRecord
;
import
com.pcloud.book.riddle.enums.RiddleClickTypeEnum
;
import
com.pcloud.book.riddle.enums.RiddleRecordStatusEnum
;
import
com.pcloud.book.riddle.enums.RiddleReplyTypeEnum
;
import
com.pcloud.book.riddle.redis.RiddleRedis
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.httpclient.UrlUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.facade.quartz.entity.CallBackParam
;
import
com.pcloud.facade.quartz.entity.ScheduleJob
;
...
...
@@ -33,12 +35,17 @@ import com.sdk.wxgroup.SendMessageTypeEnum;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -56,7 +63,10 @@ import java.util.TimerTask;
public
class
RiddleRecordBizImpl
implements
RiddleRecordBiz
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
RiddleRecordBizImpl
.
class
);
@Value
(
"${wechat.group.link.prefix}"
)
private
String
wechatGroupLinkPrefix
;
@Value
(
"${system.env}"
)
private
String
envStr
;
@Autowired
private
RiddleDao
riddleDao
;
@Autowired
...
...
@@ -64,19 +74,15 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
@Autowired
private
RiddleReplyDao
riddleReplyDao
;
@Autowired
private
BookGroupClassifyBiz
bookGroupClassifyBiz
;
@Autowired
private
BookKeywordDao
bookKeywordDao
;
@Autowired
private
WechatGroupConsr
wechatGroupConsr
;
@Autowired
private
RiddleRedis
riddleRedis
;
@Autowired
private
GroupQrcodeBiz
groupQrcodeBiz
;
@Autowired
private
GroupQrcodeDao
groupQrcodeDao
;
@Autowired
private
ScheduleService
scheduleService
;
@Autowired
private
RiddleClickRecordDao
riddleClickRecordDao
;
@Override
...
...
@@ -101,40 +107,16 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
}
}
//历史记录
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
);
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
,
null
);
//1该群猜谜语没有记录或已结束
if
(
null
==
riddleRecord
||
(
null
!=
riddleRecord
&&
RiddleRecordStatusEnum
.
end
.
getCode
().
equals
(
riddleRecord
.
getStatus
())))
{
Riddle
currentRiddle
=
null
;
Integer
finishCount
=
0
;
if
(
null
!=
riddleRecord
)
{
currentRiddle
=
riddleDao
.
getById
(
riddleRecord
.
getRiddleId
());
finishCount
=
riddleRecord
.
getFinishCount
()
==
null
?
0
:
riddleRecord
.
getFinishCount
();
Integer
correctCount
=
riddleRecordDao
.
getCorrectCountByGroup
(
wxGroupId
,
finishCount
);
if
(
correctCount
==
180
)
{
//结束前答对180道,通关次数+1
currentRiddle
=
null
;
finishCount
=
finishCount
+
1
;
}
}
if
(
null
==
riddleRecord
||
(
null
!=
riddleRecord
&&
ArrayUtils
.
contains
(
RiddleRecordStatusEnum
.
GAME_END
,
riddleRecord
.
getStatus
())))
{
//1.1关键词“猜谜语” ,游戏开启,计时
if
(
textContent
.
equals
(
"猜谜语"
))
{
startGame
(
currentRiddle
,
wxGroupId
,
wxId
,
ip
,
finishCount
);
startGame
(
riddleRecord
,
wxGroupId
,
wxId
,
ip
);
}
}
//2猜谜语进行中
else
if
(
null
!=
riddleRecord
&&
!
RiddleRecordStatusEnum
.
end
.
getCode
().
equals
(
riddleRecord
.
getStatus
()))
{
//2.1是关键词,不处理
/*Boolean keyWord = false;
GroupClassifyQrcodeDTO classifyQrcodeInfo = bookGroupClassifyBiz.getClassifyQrcodeInfo(wxGroupId);
if (null != classifyQrcodeInfo) {
ReplyKeywordDTO replyKeywordDTO = bookKeywordDao.getKeywordId(classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getBookGroupId(), textContent);
if (null != replyKeywordDTO) {
keyWord = true;
}
}
if (keyWord) {
logger.info("该条信息为关键词,不处理,textContent=" + textContent);
return;
}*/
Integer
finishCount
=
riddleRecord
.
getFinishCount
()
==
null
?
0
:
riddleRecord
.
getFinishCount
();
Long
riddleId
=
riddleRecord
.
getRiddleId
();
Riddle
riddle
=
riddleDao
.
getById
(
riddleId
);
...
...
@@ -147,23 +129,23 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
insertRecord
.
setWxGroupId
(
wxGroupId
);
insertRecord
.
setWxUserId
(
wxUserId
);
insertRecord
.
setFinishCount
(
finishCount
);
//2.
2
包含“结束”、“不想玩”,结束游戏
//2.
1
包含“结束”、“不想玩”,结束游戏
if
(
textContent
.
contains
(
"结束"
)
||
textContent
.
contains
(
"不想玩"
)
||
textContent
.
contains
(
"不玩了"
))
{
endGame
(
insertRecord
,
wxGroupId
,
wxId
,
ip
,
riddle
.
getGrade
(),
finishCount
);
return
;
}
//2.
3
中途参与,上一条答对了发送下一题,否则发送当前题目
//2.
2
中途参与,上一条答对了发送下一题,否则发送当前题目
if
(
textContent
.
equals
(
"猜谜语"
))
{
midwayIn
(
riddle
,
riddleRecord
.
getCorrect
(),
wxGroupId
,
wxId
,
ip
,
wxUserId
,
finishCount
);
return
;
}
//2.
4
不知道、提示、答案、正确答案,给提示语
//2.
3
不知道、提示、答案、正确答案,给提示语
if
(
textContent
.
contains
(
"不知道"
)
||
textContent
.
contains
(
"提示"
)
||
textContent
.
contains
(
"答案"
)
||
textContent
.
contains
(
"正确答案"
))
{
String
before
=
"思考是件有趣的事哦,再想想吧。友情提示:可以问问其他人或者上网查询正确答案哦。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
before
,
ip
,
wxUserId
);
return
;
}
//2.
5
判断答题对错
//2.
4
判断答题对错
judgeCorrcet
(
textContent
,
riddle
,
insertRecord
,
wxGroupId
,
wxId
,
ip
,
wxUserId
,
finishCount
);
}
}
...
...
@@ -195,7 +177,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
sendTextMessageVO
.
setAtId
(
wxUserId
);
GroupUserDTO
groupUser
=
wechatGroupConsr
.
getWxUserInfoByWxUserId
(
wxUserId
);
if
(
null
!=
groupUser
&&
!
StringUtil
.
isEmpty
(
groupUser
.
getNickName
()))
{
content
=
"@"
+
groupUser
.
getNickName
()
+
"
。
"
+
content
;
content
=
"@"
+
groupUser
.
getNickName
()
+
"
,
"
+
content
;
}
}
sendTextMessageVO
.
setContent
(
content
);
...
...
@@ -212,7 +194,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
if
(
StringUtil
.
isEmpty
(
beforeContent
))
{
beforeContent
=
"接下来请听下一题:"
;
}
String
sendText
=
beforeContent
+
riddle
.
getRiddleContent
();
String
sendText
=
beforeContent
+
riddle
.
getRiddleContent
()
+
"\n"
+
RiddleConstant
.
rule_notice
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
sendText
,
ip
,
wxUserId
);
//添加记录
RiddleRecord
insertRecord
=
new
RiddleRecord
();
...
...
@@ -243,7 +225,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
riddleDTO
.
setUserNum
(
participateCountDTO
.
getUserNum
()
==
0
?
0
:
participateCountDTO
.
getUserNum
());
riddleDTO
.
setParticipateCount
(
participateCountDTO
.
getParticipateCount
()
==
0
?
0
:
participateCountDTO
.
getParticipateCount
());
}
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
riddleDTO
.
getWxGroupId
());
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
riddleDTO
.
getWxGroupId
()
,
null
);
if
(
null
!=
riddleRecord
)
{
Riddle
riddle
=
riddleDao
.
getById
(
riddleRecord
.
getRiddleId
());
riddleDTO
.
setGrade
(
riddle
.
getGrade
());
...
...
@@ -263,19 +245,37 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
/**
* 开启游戏
*/
public
void
startGame
(
Riddle
currentRiddle
,
String
wxGroupId
,
String
wxId
,
String
ip
,
Integer
finishCount
)
{
public
void
startGame
(
RiddleRecord
riddleRecord
,
String
wxGroupId
,
String
wxId
,
String
ip
)
{
Riddle
currentRiddle
=
null
;
//要发送的题目
Integer
finishCount
=
0
;
//通关次数
Integer
correctCount
=
0
;
//答对题数
if
(
null
!=
riddleRecord
)
{
finishCount
=
riddleRecord
.
getFinishCount
()
==
null
?
0
:
riddleRecord
.
getFinishCount
();
//结束取当前题
currentRiddle
=
riddleDao
.
getById
(
riddleRecord
.
getRiddleId
());
if
(
RiddleRecordStatusEnum
.
over
.
getCode
().
equals
(
riddleRecord
.
getStatus
()))
{
//通关结束取下一题
Riddle
nextRiddle
=
riddleDao
.
getRiddleByGradeAndSeq
(
currentRiddle
.
getGrade
(),
currentRiddle
.
getSeq
());
if
(
null
==
nextRiddle
&&
currentRiddle
.
getGrade
()
<
3
)
{
//从下一关第一题开始
nextRiddle
=
riddleDao
.
getRiddleByGradeAndSeq
(
currentRiddle
.
getGrade
()
+
1
,
0
);
}
currentRiddle
=
nextRiddle
;
}
correctCount
=
riddleRecordDao
.
getCorrectCountByGroup
(
wxGroupId
,
finishCount
);
Integer
total
=
riddleDao
.
getCount
();
if
(
correctCount
.
equals
(
total
))
{
//结束前答对所有题,通关次数+1
currentRiddle
=
null
;
finishCount
=
finishCount
+
1
;
correctCount
=
0
;
}
}
//发送规则
String
reply
=
getRandomReply
(
RiddleReplyTypeEnum
.
rule
.
getCode
());
Integer
correctCount
=
riddleRecordDao
.
getCorrectCountByGroup
(
wxGroupId
,
finishCount
);
if
(
null
!=
currentRiddle
)
{
reply
=
reply
+
"\n"
+
"目前处于第"
+
currentRiddle
.
getGrade
()
+
"关,已猜对"
+
correctCount
+
"题,大家加油。"
;
}
else
{
reply
=
reply
+
"\n"
+
"目前处于第1关,已猜对0题,大家加油。"
;
}
Integer
ranking
=
riddleRecordDao
.
getGroupRanking
(
wxGroupId
);
reply
=
reply
+
"\n"
+
"目前本群总共猜对"
+
correctCount
+
"题,群排名第"
+
ranking
+
"名,大家加油。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
reply
,
ip
,
null
);
//发送题目,保存该题目
if
(
null
!=
currentRiddle
)
{
//发送上次题目
String
content
=
"请听题:"
+
currentRiddle
.
getRiddleContent
();
String
content
=
"请听题:"
+
currentRiddle
.
getRiddleContent
()
+
"\n"
+
RiddleConstant
.
rule_notice
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
content
,
ip
,
null
);
RiddleRecord
insertRecord
=
new
RiddleRecord
();
insertRecord
.
setRiddleId
(
currentRiddle
.
getId
());
...
...
@@ -290,10 +290,9 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
}
else
{
//从第一题开始
sendNextRiddle
(
1
,
0
,
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
begin
,
"请听题:"
,
null
,
finishCount
);
}
//开始5分钟
/10s
计时
//开始5分钟计时
deleteJob
(
wxGroupId
);
addEndQuartzJob
(
wxGroupId
,
wxId
,
ip
,
wxId
);
riddleRedis
.
addUnderwayGroup
(
wxGroupId
,
wxId
,
ip
);
}
/**
...
...
@@ -301,7 +300,8 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
*/
public
void
endGame
(
RiddleRecord
insertRecord
,
String
wxGroupId
,
String
wxId
,
String
ip
,
Integer
grade
,
Integer
finishCount
)
{
Integer
correctCount
=
riddleRecordDao
.
getCorrectCountByGroup
(
wxGroupId
,
finishCount
);
String
text
=
"好嘞,再见,爱你们哦。目前本群猜对谜语数"
+
correctCount
+
"道,处于第"
+
grade
+
"关,大家加油。"
;
Integer
ranking
=
riddleRecordDao
.
getGroupRanking
(
wxGroupId
);
String
text
=
"好嘞,再见,爱你们哦。目前本群总共猜对"
+
correctCount
+
"题,群排名第"
+
ranking
+
"名,大家加油。"
;
//发送结束语
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
text
,
ip
,
null
);
//保存结束记录
...
...
@@ -310,7 +310,6 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
insertRecord
.
setCorrect
(
null
);
riddleRecordDao
.
insert
(
insertRecord
);
deleteJob
(
wxGroupId
);
riddleRedis
.
deleteUnderwayGroup
(
wxGroupId
);
}
/**
...
...
@@ -324,11 +323,12 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
if
(
riddle
.
getGrade
()
<
3
)
{
//从下一关第一题开始
sendNextRiddle
(
riddle
.
getGrade
()
+
1
,
0
,
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
underway
,
beforeContent
,
wxUserId
,
finishCount
);
}
else
{
//3关都答完,从头开始
sendNextRiddle
(
1
,
0
,
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
begin
,
beforeContent
,
wxUserId
,
finishCount
+
1
);
sendNextRiddle
(
1
,
0
,
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
underway
,
beforeContent
,
wxUserId
,
finishCount
+
1
);
}
}
}
else
{
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
beforeContent
+
riddle
.
getRiddleContent
(),
ip
,
wxUserId
);
}
else
{
//发送当前题
String
content
=
beforeContent
+
riddle
.
getRiddleContent
()
+
"\n"
+
RiddleConstant
.
rule_notice
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
content
,
ip
,
wxUserId
);
}
deleteJob
(
wxGroupId
);
addEndQuartzJob
(
wxGroupId
,
wxId
,
ip
,
wxId
);
...
...
@@ -343,24 +343,45 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
return
;
}
if
(
textContent
.
equals
(
riddle
.
getAnswer
())
||
textContent
.
equals
(
riddle
.
getOtherAnswer
()))
{
//答对
//答对文案
String
beforeContent
=
getRandomReply
(
RiddleReplyTypeEnum
.
correct
.
getCode
());
//保存答题记录
insertRecord
.
setMessageContent
(
textContent
);
insertRecord
.
setCorrect
(
true
);
insertRecord
.
setStatus
(
RiddleRecordStatusEnum
.
underway
.
getCode
());
riddleRecordDao
.
insert
(
insertRecord
);
//发送下一题
Boolean
sendNext
=
sendNextRiddle
(
riddle
.
getGrade
(),
riddle
.
getSeq
(),
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
underway
,
beforeContent
,
wxUserId
,
finishCount
);
if
(!
sendNext
)
{
//本关没有下一题
if
(
riddle
.
getGrade
()
<
3
)
{
//从下一关第一题开始
sendNextRiddle
(
riddle
.
getGrade
()
+
1
,
0
,
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
underway
,
beforeContent
,
wxUserId
,
finishCount
);
}
else
{
//3关都答完
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
getRandomReply
(
RiddleReplyTypeEnum
.
finish_end
.
getCode
()),
ip
,
wxUserId
);
//游戏开始的记录
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
,
RiddleRecordStatusEnum
.
begin
.
getCode
());
Integer
correctCount
=
riddleRecordDao
.
getCorrectCountByTime
(
wxGroupId
,
riddleRecord
.
getCreateTime
());
//连续答对5题发送成绩单及优惠券并结束游戏
if
(
correctCount
!=
0
&&
correctCount
%
5
==
0
)
{
Integer
count
=
riddleRecordDao
.
getCorrectCountByGroup
(
wxGroupId
,
finishCount
);
sendResult
(
wxId
,
wxGroupId
,
ip
,
count
,
insertRecord
,
riddleRecord
.
getCreateTime
(),
wxUserId
);
sendCouponLink
(
wxId
,
wxGroupId
,
ip
);
}
else
{
//发送下一题
String
correctContent
=
getRandomReply
(
RiddleReplyTypeEnum
.
correct
.
getCode
());
Boolean
sendNext
=
sendNextRiddle
(
riddle
.
getGrade
(),
riddle
.
getSeq
(),
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
underway
,
correctContent
,
wxUserId
,
finishCount
);
if
(!
sendNext
)
{
//本关没有下一题
if
(
riddle
.
getGrade
()
<
3
)
{
//从下一关第一题开始
sendNextRiddle
(
riddle
.
getGrade
()
+
1
,
0
,
wxGroupId
,
wxId
,
ip
,
RiddleRecordStatusEnum
.
underway
,
correctContent
,
wxUserId
,
finishCount
);
}
else
{
//3关都答完
String
content
=
getRandomReply
(
RiddleReplyTypeEnum
.
finish_end
.
getCode
())
+
"\n\n回复关键词“猜谜语”,可重新开始游戏。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
content
,
ip
,
wxUserId
);
sendCouponLink
(
wxId
,
wxGroupId
,
ip
);
//结束游戏
RiddleRecord
insert
=
new
RiddleRecord
();
BeanUtils
.
copyProperties
(
insertRecord
,
insert
);
insert
.
setMessageContent
(
content
);
insert
.
setStatus
(
RiddleRecordStatusEnum
.
over
.
getCode
());
insert
.
setCorrect
(
null
);
insert
.
setWxUserId
(
wxId
);
riddleRecordDao
.
insert
(
insert
);
}
}
deleteJob
(
wxGroupId
);
addEndQuartzJob
(
wxGroupId
,
wxId
,
ip
,
wxUserId
);
}
deleteJob
(
wxGroupId
);
addEndQuartzJob
(
wxGroupId
,
wxId
,
ip
,
wxUserId
);
}
else
if
(
riddle
.
getAnswer
().
contains
(
textContent
)
||
textContent
.
contains
(
riddle
.
getAnswer
())
//部分答对
||
(!
StringUtil
.
isEmpty
(
riddle
.
getOtherAnswer
())
&&
textContent
.
contains
(
riddle
.
getOtherAnswer
())))
{
//保存答题记录
...
...
@@ -370,6 +391,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
riddleRecordDao
.
insert
(
insertRecord
);
//发送部分答对文案
String
beforeContent
=
getRandomReply
(
RiddleReplyTypeEnum
.
partly_correct
.
getCode
());
beforeContent
=
beforeContent
+
"谜底是"
+
riddle
.
getAnswer
().
length
()
+
"个字哦。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
beforeContent
,
ip
,
null
);
}
else
{
//答错
...
...
@@ -390,7 +412,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
* 自动结束
*/
public
void
autoEnd
(
String
wxGroupId
,
String
wxId
,
String
ip
,
String
wxUserId
)
{
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
);
RiddleRecord
riddleRecord
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
,
null
);
if
(
null
==
riddleRecord
)
{
logger
.
info
(
"微信群="
+
wxGroupId
+
"没有猜谜语游戏记录"
);
return
;
...
...
@@ -401,11 +423,13 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
logger
.
info
(
"谜语="
+
riddleId
+
"不存在"
);
return
;
}
Integer
grade
=
riddle
.
getGrade
();
Integer
correctCount
=
riddleRecordDao
.
getCorrectCountByGroup
(
wxGroupId
,
riddleRecord
.
getFinishCount
());
Integer
ranking
=
riddleRecordDao
.
getGroupRanking
(
wxGroupId
);
String
reply
=
getRandomReply
(
RiddleReplyTypeEnum
.
no_reply_end
.
getCode
());
String
text
=
reply
+
"目前本群猜对谜语数"
+
correctCount
+
"道,处于第"
+
grade
+
"关。"
+
"\n"
+
"大家想玩记得回复关键词“猜谜语”,我等你们哦。"
;
String
text
=
reply
+
"目前本群总共猜对"
+
correctCount
+
"题,群排名第"
+
ranking
+
"名,大家加油。"
;
if
(!
text
.
contains
(
"关键词"
))
{
text
=
text
+
"想玩记得回复关键词“猜谜语”就可以召唤我啦。"
;
}
//发送结束语
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
text
,
ip
,
null
);
//保存结束记录
...
...
@@ -418,7 +442,6 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
record
.
setCorrect
(
null
);
record
.
setFinishCount
(
riddleRecord
.
getFinishCount
());
riddleRecordDao
.
insert
(
record
);
riddleRedis
.
deleteUnderwayGroup
(
wxGroupId
);
}
...
...
@@ -474,7 +497,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
return
;
}
String
wxGroupId
=
groupRedisDTO
.
getWxGroupId
();
RiddleRecord
record
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
);
RiddleRecord
record
=
riddleRecordDao
.
getLastRecordByWxGroupId
(
wxGroupId
,
null
);
if
(
null
==
record
)
{
return
;
}
...
...
@@ -496,6 +519,86 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
}
}
@Override
public
void
sendCouponLink
(
String
wxId
,
String
wxGroupId
,
String
ip
)
{
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
){
logger
.
error
(
"线程休眠失败"
);
}
String
link
=
"https://wechat666."
+
getDomain
(
envStr
)
+
"/groupGuessing/guessing?wxGroupId="
+
wxGroupId
;
link
=
UrlUtils
.
getShortUrl4Own
(
wechatGroupLinkPrefix
+
"/link?url="
+
URLEncoder
.
encode
(
link
));
String
content
=
"优惠券领取链接(@所有人均可领取哦):\n"
+
link
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
content
,
ip
,
null
);
}
private
String
getDomain
(
String
envStr
)
{
String
domain
=
"5rs.me"
;
switch
(
envStr
)
{
case
"dev"
:
domain
=
"chubanyun.me"
;
break
;
case
"test"
:
domain
=
"raysgo.com"
;
break
;
case
"uat"
:
domain
=
"raysyun.com"
;
break
;
case
"pro"
:
domain
=
"5rs.me"
;
break
;
}
return
domain
;
}
/**
* 发送成绩单并结束游戏
* @param wxId
* @param wxGroupId
* @param ip
* @param correctCount
*/
@ParamLog
(
"发送用户成绩单"
)
private
void
sendResult
(
String
wxId
,
String
wxGroupId
,
String
ip
,
Integer
correctCount
,
RiddleRecord
record
,
Date
startTime
,
String
wxUserId
)
{
Integer
total
=
riddleDao
.
getCount
();
String
reply
;
if
(
correctCount
.
equals
(
total
))
{
//答对所有题
reply
=
getRandomReply
(
RiddleReplyTypeEnum
.
finish_end
.
getCode
())
+
"\n\n回复关键词“猜谜语”,可重新开始游戏。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
reply
,
ip
,
wxUserId
);
}
else
{
String
correctContent
=
"给你点赞,答对本轮游戏最后一题,现在发成绩单咯,下一轮游戏我们不见不散哦。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
correctContent
,
ip
,
wxUserId
);
Integer
ranking
=
riddleRecordDao
.
getGroupRanking
(
wxGroupId
);
String
before
=
"目前本群总共猜对"
+
correctCount
+
"题,群排名第"
+
ranking
+
"名,大家加油。\n"
+
"--------------------------------\n本轮成绩如下:\n"
;
List
<
UserRankingDTO
>
rankingDTOS
=
riddleRecordDao
.
getUserRanking
(
wxGroupId
,
startTime
);
if
(
ListUtils
.
isEmpty
(
rankingDTOS
))
{
logger
.
error
(
"查询用户排名失败"
);
return
;
}
String
content
=
""
;
for
(
int
i
=
0
;
i
<
rankingDTOS
.
size
();
i
++)
{
UserRankingDTO
rankingDTO
=
rankingDTOS
.
get
(
i
);
GroupUserDTO
groupUser
=
wechatGroupConsr
.
getWxUserInfoByWxUserId
(
rankingDTO
.
getWxUserId
());
int
rank
=
i
+
1
;
if
(
rank
==
1
)
{
content
=
"第1名:"
+
rankingDTO
.
getCount
()
+
"分,@"
+
groupUser
.
getNickName
()
+
",恭喜成为本轮的谜语达人。【鼓掌】【鼓掌】【鼓掌】"
;
}
else
{
content
=
content
+
"\n第"
+
rank
+
"名,"
+
rankingDTO
.
getCount
()
+
"分,@"
+
groupUser
.
getNickName
();
}
}
reply
=
before
+
content
+
"\n\n回复关键词“猜谜语”可继续游戏哦。"
;
sendWeixinTextMessage
(
wxId
,
wxGroupId
,
reply
,
ip
,
null
);
}
//结束游戏
RiddleRecord
insertRecord
=
new
RiddleRecord
();
BeanUtils
.
copyProperties
(
record
,
insertRecord
);
insertRecord
.
setMessageContent
(
reply
);
insertRecord
.
setStatus
(
RiddleRecordStatusEnum
.
over
.
getCode
());
insertRecord
.
setCorrect
(
null
);
insertRecord
.
setWxUserId
(
wxId
);
riddleRecordDao
.
insert
(
insertRecord
);
deleteJob
(
wxGroupId
);
}
/**
* 10s后发送答错文案
...
...
@@ -517,4 +620,29 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
}
}
@Override
public
void
addClickTrack
(
RiddleClickRecord
riddleClickRecord
)
{
if
(
RiddleClickTypeEnum
.
wish
.
getCode
().
equals
(
riddleClickRecord
.
getClickType
()))
{
Integer
totalCount
=
riddleRecordDao
.
getOverTime
(
riddleClickRecord
.
getWxGroupId
());
Integer
useCount
=
riddleClickRecordDao
.
getCountByType
(
riddleClickRecord
.
getWxGroupId
(),
riddleClickRecord
.
getWechatUserId
(),
RiddleClickTypeEnum
.
wish
.
getCode
());
if
(
useCount
>=
totalCount
)
{
throw
new
BookBizException
(
BookBizException
.
ERROR
,
"抽奖次数已使用完"
);
}
}
riddleClickRecordDao
.
insert
(
riddleClickRecord
);
}
@Override
public
CouponClickDTO
getGroupWishCount
(
String
wxGroupId
,
Long
wechatUserId
)
{
Integer
totalCount
=
riddleRecordDao
.
getOverTime
(
wxGroupId
);
Integer
useCount
=
riddleClickRecordDao
.
getCountByType
(
wxGroupId
,
wechatUserId
,
RiddleClickTypeEnum
.
wish
.
getCode
());
Integer
remainCount
=
0
;
if
(
useCount
<
totalCount
)
{
remainCount
=
totalCount
-
useCount
;
}
CouponClickDTO
dto
=
new
CouponClickDTO
();
dto
.
setTotalCount
(
totalCount
);
dto
.
setRemainCount
(
remainCount
);
return
dto
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dao/RiddleClickRecordDao.java
0 → 100644
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
dao
;
import
com.pcloud.book.riddle.entity.RiddleClickRecord
;
import
com.pcloud.common.core.dao.BaseDao
;
/**
* @描述:点击记录
* @作者:zhuyajie
* @创建时间:18:27 2019/8/29
* @版本:1.0
*/
public
interface
RiddleClickRecordDao
extends
BaseDao
<
RiddleClickRecord
>
{
/**
* 根据类型查使用次数
* @param wxGroupId
* @param wechatUserId
* @param code
* @return
*/
Integer
getCountByType
(
String
wxGroupId
,
Long
wechatUserId
,
Integer
code
);
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dao/RiddleDao.java
View file @
a60a1072
...
...
@@ -19,4 +19,10 @@ public interface RiddleDao extends BaseDao<Riddle> {
* @return
*/
Riddle
getRiddleByGradeAndSeq
(
Integer
grade
,
Integer
seq
);
/**
* 获取所有题目数量
* @return
*/
Integer
getCount
();
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dao/RiddleRecordDao.java
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
dao
;
import
com.pcloud.book.riddle.dto.GroupRiddleDTO
;
import
com.pcloud.book.riddle.dto.UserRankingDTO
;
import
com.pcloud.book.riddle.entity.RiddleRecord
;
import
com.pcloud.common.core.dao.BaseDao
;
import
java.util.Date
;
import
java.util.List
;
/**
* @描述:猜谜记录
* @作者:zhuyajie
...
...
@@ -16,9 +20,10 @@ public interface RiddleRecordDao extends BaseDao<RiddleRecord> {
/**
* 获取上一条猜谜记录
* @param wxGroupId
* @param status 状态
* @return
*/
RiddleRecord
getLastRecordByWxGroupId
(
String
wxGroupId
);
RiddleRecord
getLastRecordByWxGroupId
(
String
wxGroupId
,
Integer
status
);
/**
* 获得答对题目数量
...
...
@@ -33,4 +38,39 @@ public interface RiddleRecordDao extends BaseDao<RiddleRecord> {
* @return
*/
public
GroupRiddleDTO
getParticipateCount
(
String
wxGroupId
);
/**
* 获得群排名
* @param wxGroupId
* @return
*/
public
Integer
getGroupRanking
(
String
wxGroupId
);
/**
* 获得用户答题排名
* @param wxGroupId
* @return
*/
public
List
<
UserRankingDTO
>
getUserRanking
(
String
wxGroupId
,
Date
createTime
);
/**
* 根据时间查答对题数
* @param wxGroupId
* @param createTime
* @return
*/
public
Integer
getCorrectCountByTime
(
String
wxGroupId
,
Date
createTime
);
/**
* 连答对5题过关次数
* @param wxGroupId
* @return
*/
public
Integer
getOverTime
(
String
wxGroupId
);
/**
* 获得答对过题目群数
* @return
*/
public
Integer
getCorrectGroupCount
();
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dao/impl/RiddleClickRecordDaoImpl.java
0 → 100644
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
dao
.
impl
;
import
com.pcloud.book.riddle.dao.RiddleClickRecordDao
;
import
com.pcloud.book.riddle.entity.RiddleClickRecord
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @描述:点击记录
* @作者:zhuyajie
* @创建时间:18:27 2019/8/29
* @版本:1.0
*/
@Component
(
"riddleClickRecordDao"
)
public
class
RiddleClickRecordDaoImpl
extends
BaseDaoImpl
<
RiddleClickRecord
>
implements
RiddleClickRecordDao
{
@Override
public
Integer
getCountByType
(
String
wxGroupId
,
Long
wechatUserId
,
Integer
code
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wxGroupId"
,
wxGroupId
);
map
.
put
(
"wechatUserId"
,
wechatUserId
);
map
.
put
(
"type"
,
code
);
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getCountByType"
),
map
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dao/impl/RiddleDaoImpl.java
View file @
a60a1072
...
...
@@ -26,4 +26,9 @@ public class RiddleDaoImpl extends BaseDaoImpl<Riddle> implements RiddleDao {
map
.
put
(
"seq"
,
seq
);
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getRiddleByGradeAndSeq"
),
map
);
}
@Override
public
Integer
getCount
()
{
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getCount"
));
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dao/impl/RiddleRecordDaoImpl.java
View file @
a60a1072
...
...
@@ -2,12 +2,15 @@ package com.pcloud.book.riddle.dao.impl;
import
com.pcloud.book.riddle.dao.RiddleRecordDao
;
import
com.pcloud.book.riddle.dto.GroupRiddleDTO
;
import
com.pcloud.book.riddle.dto.UserRankingDTO
;
import
com.pcloud.book.riddle.entity.RiddleRecord
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
...
...
@@ -21,8 +24,11 @@ public class RiddleRecordDaoImpl extends BaseDaoImpl<RiddleRecord> implements Ri
@Override
public
RiddleRecord
getLastRecordByWxGroupId
(
String
wxGroupId
)
{
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getLastRecordByWxGroupId"
),
wxGroupId
);
public
RiddleRecord
getLastRecordByWxGroupId
(
String
wxGroupId
,
Integer
status
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wxGroupId"
,
wxGroupId
);
map
.
put
(
"status"
,
status
);
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getLastRecordByWxGroupId"
),
map
);
}
@Override
...
...
@@ -37,4 +43,39 @@ public class RiddleRecordDaoImpl extends BaseDaoImpl<RiddleRecord> implements Ri
public
GroupRiddleDTO
getParticipateCount
(
String
wxGroupId
)
{
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getParticipateCount"
),
wxGroupId
);
}
@Override
public
Integer
getGroupRanking
(
String
wxGroupId
)
{
Integer
ranking
=
getSessionTemplate
().
selectOne
(
getStatement
(
"getGroupRanking"
),
wxGroupId
);
if
(
null
==
ranking
)
{
ranking
=
getCorrectGroupCount
()
+
1
;
}
return
ranking
;
}
@Override
public
List
<
UserRankingDTO
>
getUserRanking
(
String
wxGroupId
,
Date
createTime
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wxGroupId"
,
wxGroupId
);
map
.
put
(
"createTime"
,
createTime
);
return
getSessionTemplate
().
selectList
(
getStatement
(
"getUserRanking"
),
map
);
}
@Override
public
Integer
getCorrectCountByTime
(
String
wxGroupId
,
Date
createTime
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wxGroupId"
,
wxGroupId
);
map
.
put
(
"createTime"
,
createTime
);
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getCorrectCountByTime"
),
map
);
}
@Override
public
Integer
getOverTime
(
String
wxGroupId
)
{
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getOverTime"
),
wxGroupId
);
}
@Override
public
Integer
getCorrectGroupCount
()
{
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getCorrectGroupCount"
));
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dto/CouponClickDTO.java
0 → 100644
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
dto
;
import
com.pcloud.common.dto.BaseDto
;
/**
* @描述:优惠券领取次数
* @作者:zhuyajie
* @创建时间:14:38 2019/8/30
* @版本:1.0
*/
public
class
CouponClickDTO
extends
BaseDto
{
/**
* 总次数
*/
private
Integer
totalCount
;
/**
* 剩余次数
*/
private
Integer
remainCount
;
public
Integer
getTotalCount
()
{
return
totalCount
;
}
public
void
setTotalCount
(
Integer
totalCount
)
{
this
.
totalCount
=
totalCount
;
}
public
Integer
getRemainCount
()
{
return
remainCount
;
}
public
void
setRemainCount
(
Integer
remainCount
)
{
this
.
remainCount
=
remainCount
;
}
@Override
public
String
toString
()
{
return
"CouponClickDTO{"
+
"totalCount="
+
totalCount
+
", remainCount="
+
remainCount
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/dto/UserRankingDTO.java
0 → 100644
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
dto
;
import
com.pcloud.common.dto.BaseDto
;
/**
* @描述:答题排名
* @作者:zhuyajie
* @创建时间:9:52 2019/8/29
* @版本:1.0
*/
public
class
UserRankingDTO
extends
BaseDto
{
/**
* 数量
*/
private
Integer
count
;
/**
* 用户id
*/
private
String
wxUserId
;
public
Integer
getCount
()
{
return
count
;
}
public
void
setCount
(
Integer
count
)
{
this
.
count
=
count
;
}
public
String
getWxUserId
()
{
return
wxUserId
;
}
public
void
setWxUserId
(
String
wxUserId
)
{
this
.
wxUserId
=
wxUserId
;
}
@Override
public
String
toString
()
{
return
"UserRankingDTO{"
+
"count="
+
count
+
", wxUserId='"
+
wxUserId
+
'\''
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/entity/RiddleClickRecord.java
0 → 100644
View file @
a60a1072
package
com
.
pcloud
.
book
.
riddle
.
entity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.pcloud.common.entity.BaseEntity
;
import
java.util.Date
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
/**
* 点击记录
*/
@ApiModel
(
"猜谜语-埋点"
)
public
class
RiddleClickRecord
extends
BaseEntity
{
@ApiModelProperty
(
"微信群id"
)
private
String
wxGroupId
;
@ApiModelProperty
(
"微信用户id"
)
private
Long
wechatUserId
;
@ApiModelProperty
(
"点击类型(1点击链接2许愿3奖品立即使用)"
)
private
Integer
clickType
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@ApiModelProperty
(
"创建时间"
)
private
Date
createTime
;
public
String
getWxGroupId
()
{
return
wxGroupId
;
}
public
void
setWxGroupId
(
String
wxGroupId
)
{
this
.
wxGroupId
=
wxGroupId
==
null
?
null
:
wxGroupId
.
trim
();
}
public
Long
getWechatUserId
()
{
return
wechatUserId
;
}
public
void
setWechatUserId
(
Long
wechatUserId
)
{
this
.
wechatUserId
=
wechatUserId
;
}
public
Integer
getClickType
()
{
return
clickType
;
}
public
void
setClickType
(
Integer
clickType
)
{
this
.
clickType
=
clickType
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
@Override
public
String
toString
()
{
return
"RiddleClickRecord{"
+
"wxGroupId='"
+
wxGroupId
+
'\''
+
", wechatUserId="
+
wechatUserId
+
", clickType="
+
clickType
+
", createTime="
+
createTime
+
'}'
;
}
}
\ No newline at end of file
pcloud-service-book/src/main/java/com/pcloud/book/riddle/facade/RiddleFacade.java
View file @
a60a1072
...
...
@@ -2,15 +2,20 @@ package com.pcloud.book.riddle.facade;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.book.riddle.biz.RiddleRecordBiz
;
import
com.pcloud.book.riddle.dto.CouponClickDTO
;
import
com.pcloud.book.riddle.dto.GroupRiddleDTO
;
import
com.pcloud.book.riddle.dto.RiddleOpenDTO
;
import
com.pcloud.book.riddle.entity.RiddleClickRecord
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.permission.PermissionException
;
import
com.pcloud.common.utils.SessionUtil
;
import
com.pcloud.common.utils.cookie.Cookie
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.CookieValue
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -39,14 +44,14 @@ public class RiddleFacade {
@Autowired
private
RiddleRecordBiz
riddleRecordBiz
;
@ApiOperation
(
"发送信息
"
)
@ApiOperation
(
value
=
"发送信息"
,
httpMethod
=
"POST
"
)
@PostMapping
(
"sendText"
)
public
ResponseDto
<?>
sendText
(
@RequestBody
@ApiParam
SendTextDTO
sendTextDTO
){
riddleRecordBiz
.
riddleProcess
(
sendTextDTO
);
return
new
ResponseDto
<>();
}
@ApiOperation
(
"猜谜语详情列表
"
)
@ApiOperation
(
value
=
"猜谜语详情列表"
,
httpMethod
=
"GET
"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"name"
,
value
=
"name"
,
required
=
false
,
dataType
=
"string"
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"currentPage"
,
value
=
"当前页"
,
required
=
true
,
dataType
=
"int"
,
paramType
=
"query"
),
...
...
@@ -64,7 +69,7 @@ public class RiddleFacade {
return
new
ResponseDto
<>(
pageBean
);
}
@ApiOperation
(
"更新猜谜语状态
"
)
@ApiOperation
(
value
=
"更新猜谜语状态"
,
httpMethod
=
"POST
"
)
@PostMapping
(
"updateRiddleOpenStatus"
)
public
ResponseDto
<?>
updateRiddleOpenStatus
(
@RequestHeader
(
"token"
)
String
token
,
@RequestBody
@ApiParam
RiddleOpenDTO
riddleOpenDTO
)
throws
PermissionException
{
SessionUtil
.
getToken4Redis
(
token
);
...
...
@@ -79,4 +84,32 @@ public class RiddleFacade {
riddleRecordBiz
.
updateRiddleOpenStatus
(
qrcodeId
,
status
);
return
new
ResponseDto
<>();
}
@ApiOperation
(
value
=
"添加点击记录"
,
httpMethod
=
"POST"
)
@PostMapping
(
"addClickTrack"
)
public
ResponseDto
<?>
addClickTrack
(
@CookieValue
(
"userInfo"
)
String
userInfo
,
@RequestBody
@ApiParam
RiddleClickRecord
riddleClickRecord
){
if
(
null
==
riddleClickRecord
){
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"参数为空"
);
}
if
(
StringUtil
.
isEmpty
(
riddleClickRecord
.
getWxGroupId
())
||
null
==
riddleClickRecord
.
getClickType
()){
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"参数缺失"
);
}
Long
wechatUserId
=
Cookie
.
getId
(
userInfo
,
Cookie
.
_WECHAT_USER_ID
);
riddleClickRecord
.
setWechatUserId
(
wechatUserId
);
riddleRecordBiz
.
addClickTrack
(
riddleClickRecord
);
return
new
ResponseDto
<>();
}
@ApiOperation
(
value
=
"群猜谜语优惠券许愿次数"
,
httpMethod
=
"GET"
)
@ApiImplicitParam
(
name
=
"wxGroupId"
,
value
=
"wxGroupId"
,
required
=
false
,
dataType
=
"string"
,
paramType
=
"query"
)
@GetMapping
(
"getGroupWishCount4Wechat"
)
public
ResponseDto
<
CouponClickDTO
>
getGroupWishCount4Wechat
(
@CookieValue
(
"userInfo"
)
String
userInfo
,
@RequestParam
(
value
=
"wxGroupId"
,
required
=
false
)
String
wxGroupId
)
{
if
(
StringUtil
.
isEmpty
(
wxGroupId
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"缺少群id"
);
}
Long
wechatUserId
=
Cookie
.
getId
(
userInfo
,
Cookie
.
_WECHAT_USER_ID
);
CouponClickDTO
dto
=
riddleRecordBiz
.
getGroupWishCount
(
wxGroupId
,
wechatUserId
);
return
new
ResponseDto
<>(
dto
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/riddle/redis/RiddleRedis.java
View file @
a60a1072
...
...
@@ -51,7 +51,7 @@ public class RiddleRedis {
* 添加答题中的群
* @param wxGroupId
*/
public
void
addUnderwayGroup
(
String
wxGroupId
,
String
wxId
,
String
ip
)
{
/*
public void addUnderwayGroup(String wxGroupId, String wxId, String ip) {
GroupRedisDTO dto = new GroupRedisDTO();
dto.setWxGroupId(wxGroupId);
dto.setWxId(wxId);
...
...
@@ -66,13 +66,13 @@ public class RiddleRedis {
}
}
JedisClusterUtils.setJsonList(underway_group, list);
}
}
*/
/**
* 获取答题中的群
* @return
*/
public
List
<
GroupRedisDTO
>
getUnderwayGroup
()
{
/*
public List<GroupRedisDTO> getUnderwayGroup() {
List<GroupRedisDTO> list = JedisClusterUtils.getJsonList(underway_group, GroupRedisDTO.class);
if (ListUtils.isEmpty(list)) {
list = new ArrayList<>();
...
...
@@ -85,12 +85,12 @@ public class RiddleRedis {
}
return list;
}
*/
/**
* 删除答题中的群
* @param wxGroupId
*/
public
void
deleteUnderwayGroup
(
String
wxGroupId
)
{
/*
public void deleteUnderwayGroup(String wxGroupId) {
List<GroupRedisDTO> list = getUnderwayGroup();
if (!ListUtils.isEmpty(list)) {
for (int i = 0; i < list.size() && null != list; i++) {
...
...
@@ -109,6 +109,6 @@ public class RiddleRedis {
list.add(dto);
}
JedisClusterUtils.setJsonList(underway_group, list);
}
}
*/
}
pcloud-service-book/src/main/resources/mapper/riddle/RiddleClickRecordMapper.xml
0 → 100644
View file @
a60a1072
<?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.riddle.dao.impl.RiddleClickRecordDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.riddle.entity.RiddleClickRecord"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"wx_group_id"
property=
"wxGroupId"
jdbcType=
"VARCHAR"
/>
<result
column=
"wechat_user_id"
property=
"wechatUserId"
jdbcType=
"BIGINT"
/>
<result
column=
"click_type"
property=
"clickType"
jdbcType=
"INTEGER"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, wx_group_id, wechat_user_id, click_type, create_time
</sql>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.riddle.entity.RiddleClickRecord"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into riddle_click_record (wx_group_id, wechat_user_id,
click_type, create_time)
values (#{wxGroupId,jdbcType=VARCHAR}, #{wechatUserId,jdbcType=BIGINT},
#{clickType,jdbcType=INTEGER}, NOW())
</insert>
<select
id=
"getCountByType"
parameterType=
"map"
resultType=
"integer"
>
SELECT
COUNT(1)
FROM
riddle_click_record
WHERE
wx_group_id = #{wxGroupId}
AND wechat_user_id = #{wechatUserId}
AND click_type = #{type}
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/riddle/RiddleMapper.xml
View file @
a60a1072
...
...
@@ -32,6 +32,12 @@
FROM riddle
WHERE id = #{id}
</select>
<select
id=
"getCount"
resultType=
"integer"
>
SELECT
COUNT(1)
FROM
riddle
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/riddle/RiddleRecordMapper.xml
View file @
a60a1072
...
...
@@ -19,19 +19,22 @@
<insert
id=
"insert"
parameterType=
"com.pcloud.book.riddle.entity.RiddleRecord"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into riddle_record (
id, riddle_id, message_content,
insert into riddle_record (
riddle_id, message_content,
wx_group_id, wx_user_id, correct, status,
create_time, finish_count)
values (#{
id,jdbcType=BIGINT}, #{
riddleId,jdbcType=BIGINT}, #{messageContent,jdbcType=VARCHAR},
values (#{riddleId,jdbcType=BIGINT}, #{messageContent,jdbcType=VARCHAR},
#{wxGroupId,jdbcType=VARCHAR}, #{wxUserId,jdbcType=VARCHAR}, #{correct,jdbcType=BIT}, #{status},
NOW(), #{finishCount})
</insert>
<select
id=
"getLastRecordByWxGroupId"
resultMap=
"BaseResultMap"
parameterType=
"
String
"
>
<select
id=
"getLastRecordByWxGroupId"
resultMap=
"BaseResultMap"
parameterType=
"
map
"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM riddle_record
WHERE wx_group_id = #{wxGroupId}
<if
test=
"status != null"
>
AND `status`= #{status}
</if>
ORDER BY
create_time DESC, id DESC
LIMIT 1
...
...
@@ -39,13 +42,15 @@
<select
id=
"getCorrectCountByGroup"
parameterType=
"map"
resultType=
"Integer"
>
SELECT
COUNT(DISTINCT riddle_id
)
COUNT(DISTINCT riddle_id,finish_count
)
FROM
riddle_record
WHERE
wx_group_id = #{wxGroupId}
AND finish_count = #{finishCount}
AND correct = 1
AND correct = 1
<if
test=
"finishCount != null"
>
AND finish_count = #{finishCount}
</if>
</select>
<select
id=
"getParticipateCount"
parameterType=
"String"
resultType=
"com.pcloud.book.riddle.dto.GroupRiddleDTO"
>
...
...
@@ -58,5 +63,80 @@
wx_group_id = #{wxGroupId}
AND correct IS NOT NULL
</select>
<select
id=
"getGroupRanking"
parameterType=
"string"
resultType=
"integer"
>
SELECT
b.rownum
FROM
(
SELECT
t.wx_group_id,
@rownum := @rownum + 1 AS rownum
FROM
(SELECT @rownum := 0) r,
(
SELECT
wx_group_id
FROM
riddle_record
WHERE
correct = 1
GROUP BY
wx_group_id
ORDER BY
COUNT(DISTINCT riddle_id,finish_count) DESC,
create_time DESC
) AS t
) AS b
WHERE
b.wx_group_id = #{wxGroupId}
</select>
<select
id=
"getUserRanking"
parameterType=
"map"
resultType=
"com.pcloud.book.riddle.dto.UserRankingDTO"
>
SELECT
COUNT(DISTINCT riddle_id,finish_count) count,
wx_user_id wxUserId
FROM
riddle_record
WHERE
wx_group_id = #{wxGroupId}
AND correct = 1
AND create_time > #{createTime}
GROUP BY
wx_user_id
ORDER BY
COUNT(DISTINCT riddle_id,finish_count) DESC
</select>
<select
id=
"getCorrectCountByTime"
resultType=
"integer"
parameterType=
"map"
>
SELECT
COUNT(DISTINCT riddle_id,finish_count)
FROM
riddle_record
WHERE
wx_group_id = #{wxGroupId}
AND correct = 1
AND create_time > #{createTime}
</select>
<!--连答对5题过关次数-->
<select
id=
"getOverTime"
resultType=
"integer"
parameterType=
"string"
>
SELECT
COUNT(1)
FROM
riddle_record
WHERE
wx_group_id = #{wxGroupId}
AND `status` = 3
</select>
<select
id=
"getCorrectGroupCount"
resultType=
"integer"
>
SELECT
COUNT(DISTINCT wx_group_id)
FROM
riddle_record
WHERE
correct = 1
</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