Commit 6a3d5438 by 朱亚洁

猜谜语

parent e0a3d720
...@@ -22,5 +22,13 @@ public class RiddleConstant { ...@@ -22,5 +22,13 @@ public class RiddleConstant {
*/ */
public static final String JOB_NAME_RIDDLE_EXPIRE = "judgeRiddleTime"; public static final String JOB_NAME_RIDDLE_EXPIRE = "judgeRiddleTime";
/**
* 每个谜语后的规则提示
*/
public static final String rule_notice = "敲重点!如果答错了,我是不会回复的哦。";
/**
* 关键词说明
*/
public static final String introduce = "猜谜语,简单有趣的小游戏。连续答对5题,所有群成员可获得精美礼券";
} }
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;
}
}
...@@ -19,7 +19,11 @@ public enum RiddleRecordStatusEnum { ...@@ -19,7 +19,11 @@ public enum RiddleRecordStatusEnum {
/** /**
*进行中 *进行中
*/ */
underway(2); underway(2),
/**
* 通关结束
*/
over(3);
private Integer code; private Integer code;
...@@ -34,4 +38,6 @@ public enum RiddleRecordStatusEnum { ...@@ -34,4 +38,6 @@ public enum RiddleRecordStatusEnum {
RiddleRecordStatusEnum(Integer code) { RiddleRecordStatusEnum(Integer code) {
this.code = code; this.code = code;
} }
public static final Integer[] GAME_END = {end.code, over.code};
} }
package com.pcloud.book.riddle.biz; 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.GroupRedisDTO;
import com.pcloud.book.riddle.dto.GroupRiddleDTO; import com.pcloud.book.riddle.dto.GroupRiddleDTO;
import com.pcloud.book.riddle.entity.RiddleClickRecord;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.wechatgroup.message.dto.SendTextDTO; import com.pcloud.wechatgroup.message.dto.SendTextDTO;
...@@ -67,4 +69,26 @@ public interface RiddleRecordBiz { ...@@ -67,4 +69,26 @@ public interface RiddleRecordBiz {
* @param groupRedisDTO * @param groupRedisDTO
*/ */
public void sendIncorrectMessage(GroupRedisDTO 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);
} }
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);
}
...@@ -19,4 +19,10 @@ public interface RiddleDao extends BaseDao<Riddle> { ...@@ -19,4 +19,10 @@ public interface RiddleDao extends BaseDao<Riddle> {
* @return * @return
*/ */
Riddle getRiddleByGradeAndSeq(Integer grade, Integer seq); Riddle getRiddleByGradeAndSeq(Integer grade, Integer seq);
/**
* 获取所有题目数量
* @return
*/
Integer getCount();
} }
package com.pcloud.book.riddle.dao; package com.pcloud.book.riddle.dao;
import com.pcloud.book.riddle.dto.GroupRiddleDTO; import com.pcloud.book.riddle.dto.GroupRiddleDTO;
import com.pcloud.book.riddle.dto.UserRankingDTO;
import com.pcloud.book.riddle.entity.RiddleRecord; import com.pcloud.book.riddle.entity.RiddleRecord;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
import java.util.Date;
import java.util.List;
/** /**
* @描述:猜谜记录 * @描述:猜谜记录
* @作者:zhuyajie * @作者:zhuyajie
...@@ -16,9 +20,10 @@ public interface RiddleRecordDao extends BaseDao<RiddleRecord> { ...@@ -16,9 +20,10 @@ public interface RiddleRecordDao extends BaseDao<RiddleRecord> {
/** /**
* 获取上一条猜谜记录 * 获取上一条猜谜记录
* @param wxGroupId * @param wxGroupId
* @param status 状态
* @return * @return
*/ */
RiddleRecord getLastRecordByWxGroupId(String wxGroupId); RiddleRecord getLastRecordByWxGroupId(String wxGroupId, Integer status);
/** /**
* 获得答对题目数量 * 获得答对题目数量
...@@ -33,4 +38,39 @@ public interface RiddleRecordDao extends BaseDao<RiddleRecord> { ...@@ -33,4 +38,39 @@ public interface RiddleRecordDao extends BaseDao<RiddleRecord> {
* @return * @return
*/ */
public GroupRiddleDTO getParticipateCount(String wxGroupId); 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();
} }
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);
}
}
...@@ -26,4 +26,9 @@ public class RiddleDaoImpl extends BaseDaoImpl<Riddle> implements RiddleDao { ...@@ -26,4 +26,9 @@ public class RiddleDaoImpl extends BaseDaoImpl<Riddle> implements RiddleDao {
map.put("seq",seq); map.put("seq",seq);
return getSessionTemplate().selectOne(getStatement("getRiddleByGradeAndSeq"),map); return getSessionTemplate().selectOne(getStatement("getRiddleByGradeAndSeq"),map);
} }
@Override
public Integer getCount() {
return getSessionTemplate().selectOne(getStatement("getCount"));
}
} }
...@@ -2,12 +2,15 @@ package com.pcloud.book.riddle.dao.impl; ...@@ -2,12 +2,15 @@ package com.pcloud.book.riddle.dao.impl;
import com.pcloud.book.riddle.dao.RiddleRecordDao; import com.pcloud.book.riddle.dao.RiddleRecordDao;
import com.pcloud.book.riddle.dto.GroupRiddleDTO; import com.pcloud.book.riddle.dto.GroupRiddleDTO;
import com.pcloud.book.riddle.dto.UserRankingDTO;
import com.pcloud.book.riddle.entity.RiddleRecord; import com.pcloud.book.riddle.entity.RiddleRecord;
import com.pcloud.common.core.dao.BaseDaoImpl; import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -21,8 +24,11 @@ public class RiddleRecordDaoImpl extends BaseDaoImpl<RiddleRecord> implements Ri ...@@ -21,8 +24,11 @@ public class RiddleRecordDaoImpl extends BaseDaoImpl<RiddleRecord> implements Ri
@Override @Override
public RiddleRecord getLastRecordByWxGroupId(String wxGroupId) { public RiddleRecord getLastRecordByWxGroupId(String wxGroupId, Integer status) {
return getSessionTemplate().selectOne(getStatement("getLastRecordByWxGroupId"), wxGroupId); Map<String, Object> map = new HashMap<>();
map.put("wxGroupId", wxGroupId);
map.put("status", status);
return getSessionTemplate().selectOne(getStatement("getLastRecordByWxGroupId"), map);
} }
@Override @Override
...@@ -37,4 +43,39 @@ public class RiddleRecordDaoImpl extends BaseDaoImpl<RiddleRecord> implements Ri ...@@ -37,4 +43,39 @@ public class RiddleRecordDaoImpl extends BaseDaoImpl<RiddleRecord> implements Ri
public GroupRiddleDTO getParticipateCount(String wxGroupId) { public GroupRiddleDTO getParticipateCount(String wxGroupId) {
return getSessionTemplate().selectOne(getStatement("getParticipateCount"), 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"));
}
} }
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 +
'}';
}
}
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 + '\'' +
'}';
}
}
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
...@@ -2,15 +2,20 @@ package com.pcloud.book.riddle.facade; ...@@ -2,15 +2,20 @@ package com.pcloud.book.riddle.facade;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.riddle.biz.RiddleRecordBiz; 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.GroupRiddleDTO;
import com.pcloud.book.riddle.dto.RiddleOpenDTO; import com.pcloud.book.riddle.dto.RiddleOpenDTO;
import com.pcloud.book.riddle.entity.RiddleClickRecord;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
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.common.utils.cookie.Cookie;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.message.dto.SendTextDTO; import com.pcloud.wechatgroup.message.dto.SendTextDTO;
import org.springframework.beans.factory.annotation.Autowired; 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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -39,14 +44,14 @@ public class RiddleFacade { ...@@ -39,14 +44,14 @@ public class RiddleFacade {
@Autowired @Autowired
private RiddleRecordBiz riddleRecordBiz; private RiddleRecordBiz riddleRecordBiz;
@ApiOperation("发送信息") @ApiOperation(value = "发送信息", httpMethod = "POST")
@PostMapping("sendText") @PostMapping("sendText")
public ResponseDto<?> sendText(@RequestBody @ApiParam SendTextDTO sendTextDTO){ public ResponseDto<?> sendText(@RequestBody @ApiParam SendTextDTO sendTextDTO){
riddleRecordBiz.riddleProcess(sendTextDTO); riddleRecordBiz.riddleProcess(sendTextDTO);
return new ResponseDto<>(); return new ResponseDto<>();
} }
@ApiOperation("猜谜语详情列表") @ApiOperation(value = "猜谜语详情列表",httpMethod = "GET")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "name", required = false, dataType = "string", paramType = "query"), @ApiImplicitParam(name = "name", value = "name", required = false, dataType = "string", paramType = "query"),
@ApiImplicitParam(name = "currentPage", value = "当前页", required = true, dataType = "int", paramType = "query"), @ApiImplicitParam(name = "currentPage", value = "当前页", required = true, dataType = "int", paramType = "query"),
...@@ -64,7 +69,7 @@ public class RiddleFacade { ...@@ -64,7 +69,7 @@ public class RiddleFacade {
return new ResponseDto<>(pageBean); return new ResponseDto<>(pageBean);
} }
@ApiOperation("更新猜谜语状态") @ApiOperation(value = "更新猜谜语状态",httpMethod = "POST")
@PostMapping("updateRiddleOpenStatus") @PostMapping("updateRiddleOpenStatus")
public ResponseDto<?> updateRiddleOpenStatus(@RequestHeader("token") String token, @RequestBody @ApiParam RiddleOpenDTO riddleOpenDTO) throws PermissionException { public ResponseDto<?> updateRiddleOpenStatus(@RequestHeader("token") String token, @RequestBody @ApiParam RiddleOpenDTO riddleOpenDTO) throws PermissionException {
SessionUtil.getToken4Redis(token); SessionUtil.getToken4Redis(token);
...@@ -79,4 +84,32 @@ public class RiddleFacade { ...@@ -79,4 +84,32 @@ public class RiddleFacade {
riddleRecordBiz.updateRiddleOpenStatus(qrcodeId, status); riddleRecordBiz.updateRiddleOpenStatus(qrcodeId, status);
return new ResponseDto<>(); 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);
}
} }
...@@ -51,7 +51,7 @@ public class RiddleRedis { ...@@ -51,7 +51,7 @@ public class RiddleRedis {
* 添加答题中的群 * 添加答题中的群
* @param wxGroupId * @param wxGroupId
*/ */
public void addUnderwayGroup(String wxGroupId, String wxId, String ip) { /*public void addUnderwayGroup(String wxGroupId, String wxId, String ip) {
GroupRedisDTO dto = new GroupRedisDTO(); GroupRedisDTO dto = new GroupRedisDTO();
dto.setWxGroupId(wxGroupId); dto.setWxGroupId(wxGroupId);
dto.setWxId(wxId); dto.setWxId(wxId);
...@@ -66,13 +66,13 @@ public class RiddleRedis { ...@@ -66,13 +66,13 @@ public class RiddleRedis {
} }
} }
JedisClusterUtils.setJsonList(underway_group, list); JedisClusterUtils.setJsonList(underway_group, list);
} }*/
/** /**
* 获取答题中的群 * 获取答题中的群
* @return * @return
*/ */
public List<GroupRedisDTO> getUnderwayGroup() { /* public List<GroupRedisDTO> getUnderwayGroup() {
List<GroupRedisDTO> list = JedisClusterUtils.getJsonList(underway_group, GroupRedisDTO.class); List<GroupRedisDTO> list = JedisClusterUtils.getJsonList(underway_group, GroupRedisDTO.class);
if (ListUtils.isEmpty(list)) { if (ListUtils.isEmpty(list)) {
list = new ArrayList<>(); list = new ArrayList<>();
...@@ -85,12 +85,12 @@ public class RiddleRedis { ...@@ -85,12 +85,12 @@ public class RiddleRedis {
} }
return list; return list;
} }
*/
/** /**
* 删除答题中的群 * 删除答题中的群
* @param wxGroupId * @param wxGroupId
*/ */
public void deleteUnderwayGroup(String wxGroupId) { /*public void deleteUnderwayGroup(String wxGroupId) {
List<GroupRedisDTO> list = getUnderwayGroup(); List<GroupRedisDTO> list = getUnderwayGroup();
if (!ListUtils.isEmpty(list)) { if (!ListUtils.isEmpty(list)) {
for (int i = 0; i < list.size() && null != list; i++) { for (int i = 0; i < list.size() && null != list; i++) {
...@@ -109,6 +109,6 @@ public class RiddleRedis { ...@@ -109,6 +109,6 @@ public class RiddleRedis {
list.add(dto); list.add(dto);
} }
JedisClusterUtils.setJsonList(underway_group, list); JedisClusterUtils.setJsonList(underway_group, list);
} }*/
} }
<?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
...@@ -32,6 +32,12 @@ ...@@ -32,6 +32,12 @@
FROM riddle FROM riddle
WHERE id = #{id} WHERE id = #{id}
</select> </select>
<select id="getCount" resultType="integer">
SELECT
COUNT(1)
FROM
riddle
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -19,19 +19,22 @@ ...@@ -19,19 +19,22 @@
<insert id="insert" parameterType="com.pcloud.book.riddle.entity.RiddleRecord" useGeneratedKeys="true" keyProperty="id"> <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, wx_group_id, wx_user_id, correct, status,
create_time, finish_count) 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}, #{wxGroupId,jdbcType=VARCHAR}, #{wxUserId,jdbcType=VARCHAR}, #{correct,jdbcType=BIT}, #{status},
NOW(), #{finishCount}) NOW(), #{finishCount})
</insert> </insert>
<select id="getLastRecordByWxGroupId" resultMap="BaseResultMap" parameterType="String"> <select id="getLastRecordByWxGroupId" resultMap="BaseResultMap" parameterType="map">
SELECT SELECT
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
FROM riddle_record FROM riddle_record
WHERE wx_group_id = #{wxGroupId} WHERE wx_group_id = #{wxGroupId}
<if test="status != null">
AND `status`= #{status}
</if>
ORDER BY ORDER BY
create_time DESC, id DESC create_time DESC, id DESC
LIMIT 1 LIMIT 1
...@@ -39,13 +42,15 @@ ...@@ -39,13 +42,15 @@
<select id="getCorrectCountByGroup" parameterType="map" resultType="Integer"> <select id="getCorrectCountByGroup" parameterType="map" resultType="Integer">
SELECT SELECT
COUNT(DISTINCT riddle_id) COUNT(DISTINCT riddle_id,finish_count)
FROM FROM
riddle_record riddle_record
WHERE WHERE
wx_group_id = #{wxGroupId} 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>
<select id="getParticipateCount" parameterType="String" resultType="com.pcloud.book.riddle.dto.GroupRiddleDTO"> <select id="getParticipateCount" parameterType="String" resultType="com.pcloud.book.riddle.dto.GroupRiddleDTO">
...@@ -58,5 +63,80 @@ ...@@ -58,5 +63,80 @@
wx_group_id = #{wxGroupId} wx_group_id = #{wxGroupId}
AND correct IS NOT NULL AND correct IS NOT NULL
</select> </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> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment