Commit bc49117d by zhangdongwei-intern

feat-1001951: 群打卡排名点赞分享优化

parent dad77e76
......@@ -427,7 +427,7 @@ public class LunarCalendarUtils {
for(int i = 1; i < month; i++){
num += MONTH_DAY[i];
}
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)){
if ((year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) && month > 2){
num += 1;
}
num += day;
......
......@@ -95,4 +95,17 @@ public interface WeixinClockBiz {
* @param wechatGroupUser
*/
void receiveWxGroupUserBindTopic(WechatGroupUser wechatGroupUser);
/**
* 获取分享成员的打卡排名信息
* @param wxGroupId
* @param wxUserId
* @return
*/
RankDto getShareMemberRank(String wxGroupId, String wxUserId);
/**
* 旧数据处理
*/
void solveOldData();
}
......@@ -3,6 +3,9 @@ package com.pcloud.book.weixinclock.biz;
import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto;
import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO;
import com.pcloud.book.weixinclock.vo.response.ListPraiseUserResponseVO;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import java.util.List;
......@@ -24,4 +27,12 @@ public interface WeixinClockPraiseBiz {
* @param listWeixinClockRankDto
*/
void fillPraise(List<RankDto> list, ListWeixinClockRankDto listWeixinClockRankDto);
/**
* 获取点赞用户列表
* @param wxGroupId
* @param wxUserId
* @return
*/
PageBeanNew<ListPraiseUserResponseVO> listPraiseUser(String wxGroupId, String wxUserId, PageParam pageParam);
}
......@@ -23,6 +23,7 @@ import com.pcloud.book.weixinclock.dao.WeixinClockBrowseDao;
import com.pcloud.book.weixinclock.dao.WeixinClockDao;
import com.pcloud.book.weixinclock.dao.WeixinClockGroupClassifyDao;
import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao;
import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao;
import com.pcloud.book.weixinclock.dao.WeixinClockPrizeRecordDao;
import com.pcloud.book.weixinclock.dao.WeixinClockRewardDao;
import com.pcloud.book.weixinclock.dao.WeixinClockTopicDao;
......@@ -134,6 +135,8 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
private WeixinClockPraiseBiz weixinClockPraiseBiz;
@Autowired
private WeixinClockBrowseDao weixinClockBrowseDao;
@Autowired
private WeixinClockPraiseDao weixinClockPraiseDao;
private static final ThreadFactory NAMED_THREAD_FACTORY = new ThreadFactoryBuilder()
.setNameFormat("weixinclock-pool-%d").build();
......@@ -514,6 +517,8 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
nickname = "神秘客";
}
WeixinClockTopic weixinTopic = weixinClockTopicDao.getTopicByIds4Today(wechatGroupId, userWxId);
//获取我获得的点赞数
Integer praiseNum = weixinClockPraiseDao.getPraiseNum(wechatGroupId, userWxId);
if(null == weixinTopic){
WeixinClockTopic weixinClockTopic = new WeixinClockTopic();
weixinClockTopic.setBookGroupClassifyId(classifyQrcodeInfo.getClassifyId());
......@@ -522,6 +527,7 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
weixinClockTopic.setWxGroupId(wechatGroupId);
weixinClockTopic.setWxUserId(userWxId);
weixinClockTopic.setWeixinClockMemberId(weixinClockMemberId);
//修改打卡天数, 天数+1, 得分+1
weixinClockMemberDao.updateClockDays(wechatGroupId, userWxId, wechatUserId);
weixinClockTopicDao.insert(weixinClockTopic);
//发topic,增加抽奖次数
......@@ -576,15 +582,20 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
}
if(null != grantNum && !grantNum.equals(0)){
sendContent = "@" + nickname + " "+ weixinClockDto.getClockIntroduction() + "\n" + month + "月" + dayOfMonth + "日打卡成功,你已累积打卡"
+ clockDays + "天,排名第" +
newOrder + ",明天继续!" + "\n" + "\n" + "查看排行榜:" + clockRankUrl + "\n" + "点击抽奖,即可有机会获得精美礼品哦:" + clockRewardUrl;
+ clockDays + "天,累计收获" + praiseNum + "个赞,排名第" +
newOrder + ",明天继续!" + "\n" + "\n" + "-->点赞与排行榜:" + clockRankUrl + "\n" + "点击抽奖,即可有机会获得精美礼品哦:" + "\n" + "-->" + clockRewardUrl;
}else {
sendContent = "@" + nickname + " "+ weixinClockDto.getClockIntroduction() + "\n" + month + "月" + dayOfMonth + "日打卡成功,你已累积打卡"
+ clockDays + "天,排名第" +
newOrder + ",明天继续!" + "\n" + "\n" + "查看排行榜:" + clockRankUrl;
+ clockDays + "天,累计收获" + praiseNum + "个赞,排名第" +
newOrder + ",明天继续!" + "\n" + "\n" + "点赞与排行榜:" + "\n" + "-->" + clockRankUrl;
}
} else {
sendContent = "@" + nickname + " ,你今天已经打过卡了,明天再继续!";
//获取我打卡天数
Long clockDays = weixinClockTopicDao.getClockCountByUser(wechatGroupId, userWxId);
//获取我的排名
Integer newOrder = weixinClockMemberDao.getMyNewOrder(wechatGroupId, userWxId);
sendContent = "@" + nickname + " ,你今天已经打过卡了, 目前累计打卡" + clockDays + "天,累计收获" + praiseNum + "个赞,排名第" +
newOrder + ",明天再继续!";
}
vo.setContent(sendContent);
LOGGER.info("微信群内加入并打卡:发送微信消息vo="+vo);
......@@ -630,7 +641,12 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
@ParamLog("获取某个群内某个用户的信息")
public RankDto getClockWechatUserRank(Long wechatUserId, String wxGroupId, String wxUserId) {
RankDto rankDto = weixinClockMemberDao.getClockWechatUserRank(wechatUserId, wxGroupId);
return null == rankDto ? new RankDto() : rankDto;
if (null == rankDto || null == rankDto.getWxUserId()){
return new RankDto();
}
Integer praiseNum = weixinClockPraiseDao.getPraiseNum(wxGroupId, rankDto.getWxUserId());
rankDto.setPraiseNum(praiseNum);
return rankDto;
}
/**
......@@ -660,4 +676,26 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
weixinClockMemberDao.updatMemberWechatUserId(wechatGroupUser.getWxUserId(), wechatGroupUser.getWechatUserId());
}
@Override
public RankDto getShareMemberRank(String wxGroupId, String wxUserId) {
RankDto rankDto = weixinClockMemberDao.getClockWechatUserRankByWxUserId(wxUserId, wxGroupId);
if(null == rankDto){
return new RankDto();
}
Integer praiseNum = weixinClockPraiseDao.getPraiseNum(wxGroupId, wxUserId);
rankDto.setPraiseNum(praiseNum);
return rankDto;
}
@Override
public void solveOldData(){
weixinClockMemberDao.initScore();
List<RankDto> rankDtos = weixinClockPraiseDao.listAll();
if (!ListUtils.isEmpty(rankDtos)){
for (RankDto rankDto : rankDtos){
weixinClockMemberDao.addPraiseNum(rankDto.getWxUserId(), rankDto.getWxGroupId(), rankDto.getPraiseNum());
}
}
}
}
package com.pcloud.book.weixinclock.biz.impl;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.book.weixinclock.biz.WeixinClockPraiseBiz;
import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao;
import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao;
......@@ -10,12 +11,17 @@ import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockMember;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO;
import com.pcloud.book.weixinclock.vo.response.ListPraiseUserResponseVO;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.readercenter.wechat.entity.WechatUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
......@@ -35,6 +41,8 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz {
private WeixinClockPraiseDao weixinClockPraiseDao;
@Autowired
private WeixinClockMemberDao weixinClockMemberDao;
@Autowired
private ReaderConsr readerConsr;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -63,11 +71,12 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz {
if (null == oldWeixinClockPraise){
weixinClockPraise.setIsCancel(1);
weixinClockPraiseDao.insert(weixinClockPraise);
}else{
}else {
weixinClockPraise.setId(oldWeixinClockPraise.getId());
weixinClockPraiseDao.update(weixinClockPraise);
}
//点赞或者取消成功, 修改打卡成员得分
weixinClockMemberDao.updateScore(weixinClockMember.getWeixinClockMemberId(), weixinClockPraise.getIsCancel());
}
@Override
......@@ -103,4 +112,18 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz {
rankDto.setIsPraise(map.getOrDefault(rankDto.getWxUserId(), Boolean.FALSE) ? 1 : 0);
}
}
@Override
public PageBeanNew<ListPraiseUserResponseVO> listPraiseUser(String wxGroupId, String wxUserId, PageParam pageParam){
Map<String, Object> paramMap = new HashMap<>();
PageBeanNew<WeixinClockPraise> pageBeanNew = weixinClockPraiseDao.listPageNew(pageParam, paramMap, "listByWxUserId");
List<WeixinClockPraise> weixinClockPraiseList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(weixinClockPraiseList)){
return new PageBeanNew<>(pageParam.getPageNum(), pageParam.getNumPerPage(), 0, new ArrayList<>());
}
List<Long> wechatUserIds = weixinClockPraiseList.stream().map(WeixinClockPraise::getPraiseUserId).distinct().collect(Collectors.toList());
Map<Long, WechatUser> wechatUserMap = readerConsr.getUserList(wechatUserIds);
List<ListPraiseUserResponseVO> vos = ListPraiseUserResponseVO.valueFromPraiseUser(weixinClockPraiseList, wechatUserMap);
return new PageBeanNew<>(pageParam.getPageNum(), pageParam.getNumPerPage(), pageBeanNew.getTotalCount(), vos);
}
}
package com.pcloud.book.weixinclock.biz.impl;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.group.dao.BookGroupClassifyDao;
import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.GroupQrcodeDao;
......@@ -11,6 +13,7 @@ import com.pcloud.book.group.vo.ClassifyVO;
import com.pcloud.book.util.common.LunarCalendarUtils;
import com.pcloud.book.weixinclock.biz.WeixinClockShareBiz;
import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao;
import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao;
import com.pcloud.book.weixinclock.dao.WeixinClockShareDao;
import com.pcloud.book.weixinclock.dao.WeixinClockShareWordDao;
import com.pcloud.book.weixinclock.dao.WeixinClockTopicDao;
......@@ -18,10 +21,18 @@ import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockMember;
import com.pcloud.book.weixinclock.entity.WeixinClockShare;
import com.pcloud.book.weixinclock.vo.response.DoShareResponseVO;
import com.pcloud.channelcenter.base.constants.ChannelConstants;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.Map;
......@@ -47,8 +58,15 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz {
private BookGroupDao bookGroupDao;
@Autowired
private BookGroupClassifyDao bookGroupClassifyDao;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private WeixinClockPraiseDao weixinClockPraiseDao;
@Override
@Transactional(rollbackFor = Exception.class)
public DoShareResponseVO doShare(Long wechatUserId, String wxGroupId, String wxUserId) {
if (null == wxGroupId || null == wxUserId){
......@@ -63,6 +81,9 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz {
}
wxUserId = null != rankDto.getWxUserId() ? rankDto.getWxUserId() : wxUserId;
DoShareResponseVO doShareResponseVO = DoShareResponseVO.valueFromRankDto(rankDto);
//获得的点赞数
Integer pariseNum = weixinClockPraiseDao.getPraiseNum(wxGroupId, wxUserId);
doShareResponseVO.setPraiseNum(pariseNum);
Date today = new Date();
Map<String, String> strMap = LunarCalendarUtils.dataToLunar(today);
doShareResponseVO.setLunar(strMap.get("lunar"));
......@@ -89,6 +110,32 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz {
weixinClockShare.setShareUserId(wechatUserId);
weixinClockShare.setWxGroupId(wxGroupId);
weixinClockShareDao.insert(weixinClockShare);
//将分享页面的二维码换成打卡排行榜的二维码
String qrcodeUrl = JedisClusterUtils.get(wxGroupId+wxUserId);
if (!StringUtil.isEmpty(qrcodeUrl)){
doShareResponseVO.setQrcodeUrl(qrcodeUrl);
return doShareResponseVO;
}
StringBuilder linkUrl = new StringBuilder();
if (null == groupQrcode){
return doShareResponseVO;
}
Long channelId = adviserConsr.getDefaultChannel(groupQrcode.getCreateUser());
AccountSettingDto accountSettingDto = qrcodeSceneConsr.getWechatInfo(channelId);
if (null == accountSettingDto) {
return doShareResponseVO;
}
String protocol = accountSettingDto.getProtocol();
if (StringUtils.isEmpty(protocol)) {
protocol = ChannelConstants.HTTP;
}
linkUrl.append(protocol).append(accountSettingDto.getDomain()).append("/W")
.append(accountSettingDto.getAccountSettingId()).append("/clock").append("?wxGroupId=")
.append(wxGroupId).append("&wxUserId=").append(wxUserId).append("&isShare=1");
String shortUrl4Own = UrlUtils.getShortUrl4Own(linkUrl.toString());
qrcodeUrl = QrcodeUtils.create(shortUrl4Own);
doShareResponseVO.setQrcodeUrl(qrcodeUrl);
JedisClusterUtils.set(wxGroupId+wxUserId, qrcodeUrl);
return doShareResponseVO;
}
}
......@@ -65,4 +65,24 @@ public interface WeixinClockMemberDao extends BaseDao<WeixinClockMember> {
* @return
*/
RankDto getClockWechatUserRankByWxUserId(String wxUserId, String wxGroupId);
/**
* 更新打卡成员得分
* @param weixinClockMemberId
* @param isCancel
*/
void updateScore(Long weixinClockMemberId, Integer isCancel);
/**
* 旧数据处理:初始化成员分数
*/
void initScore();
/**
* 旧数据处理:打卡分数+点赞分数
* @param wxUserId
* @param wxGroupId
* @param praiseNum
*/
void addPraiseNum(String wxUserId, String wxGroupId, Integer praiseNum);
}
......@@ -2,6 +2,7 @@ package com.pcloud.book.weixinclock.dao;
import com.pcloud.book.weixinclock.dto.GetByMemberAndUserDto;
import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto;
import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.common.core.dao.BaseDao;
......@@ -26,4 +27,26 @@ public interface WeixinClockPraiseDao extends BaseDao<WeixinClockPraise> {
* @return
*/
List<WeixinClockPraise> getMemberPraise(ListWeixinClockRankDto dto);
/**
* 获取打卡成员收到的点赞数
* @param wechatGroupId
* @param wxUserId
* @return
*/
Integer getPraiseNum(String wechatGroupId, String wxUserId);
/**
* 获取点赞列表
* @param wechatGroupId
* @param wxUserId
* @return
*/
List<WeixinClockPraise> listByWxUserId(String wechatGroupId, String wxUserId);
/**
* 旧数据处理:获取所有的打卡成员收到的点赞数
* @return
*/
List<RankDto> listAll();
}
......@@ -100,4 +100,26 @@ public class WeixinClockMemberDaoImpl extends BaseDaoImpl<WeixinClockMember> imp
map.put("wechatGroupId", wxGroupId);
return super.getSqlSession().selectOne(getStatement("getClockWechatUserRankByWxUserId"), map);
}
@Override
public void updateScore(Long weixinClockMemberId, Integer isCancel) {
Map<String, Object> map = new HashMap<>();
map.put("weixinClockMemberId", weixinClockMemberId);
map.put("isCancel", isCancel);
super.sqlSessionTemplate.update(getStatement("updateScore"), map);
}
@Override
public void initScore() {
super.sqlSessionTemplate.update(getStatement("initScore"));
}
@Override
public void addPraiseNum(String wxUserId, String wxGroupId, Integer praiseNum){
Map<String, Object> map = new HashMap<>();
map.put("wxUserId", wxUserId);
map.put("wxGroupId", wxGroupId);
map.put("praiseNum", praiseNum);
super.sqlSessionTemplate.update(getStatement("addPraiseNum"), map);
}
}
......@@ -3,12 +3,15 @@ package com.pcloud.book.weixinclock.dao.impl;
import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao;
import com.pcloud.book.weixinclock.dto.GetByMemberAndUserDto;
import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto;
import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Describe: 打卡点赞dao实现类
......@@ -26,4 +29,25 @@ public class WeixinClockPraiseDaoImpl extends BaseDaoImpl<WeixinClockPraise> imp
public List<WeixinClockPraise> getMemberPraise(ListWeixinClockRankDto dto) {
return super.sqlSessionTemplate.selectList(getStatement("getMemberPraise"), dto);
}
@Override
public Integer getPraiseNum(String wechatGroupId, String wxUserId) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("wechatGroupId", wechatGroupId);
paramMap.put("wxUserId", wxUserId);
return super.sqlSessionTemplate.selectOne(getStatement("getPraiseNum"), paramMap);
}
@Override
public List<WeixinClockPraise> listByWxUserId(String wechatGroupId, String wxUserId) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("wechatGroupId", wechatGroupId);
paramMap.put("wxUserId", wxUserId);
return super.sqlSessionTemplate.selectList(getStatement("listByWxUserId"), paramMap);
}
@Override
public List<RankDto> listAll() {
return super.sqlSessionTemplate.selectList(getStatement("listAll"));
}
}
......@@ -34,6 +34,12 @@ public class RankDto extends BaseDto {
@ApiModelProperty("当前用户是否点赞")
private Integer isPraise;
@ApiModelProperty("得分(打卡分+点赞分)")
private Integer score;
@ApiModelProperty("群id")
private String wxGroupId;
public Integer getRankNum() {
return rankNum;
}
......@@ -90,6 +96,22 @@ public class RankDto extends BaseDto {
this.isPraise = isPraise;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
public String getWxGroupId() {
return wxGroupId;
}
public void setWxGroupId(String wxGroupId) {
this.wxGroupId = wxGroupId;
}
@Override
public String toString() {
return "RankDto{" +
......
......@@ -40,6 +40,9 @@ public class WeixinClockMember extends BaseEntity {
@ApiModelProperty("打卡天数")
private Integer allClockDay;
@ApiModelProperty("分数(打卡得分加点赞得分)")
private Integer score;
@ApiModelProperty("微信用户ID")
private Long wechatUserId;
......@@ -111,6 +114,14 @@ public class WeixinClockMember extends BaseEntity {
this.allClockDay = allClockDay;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
public Long getWechatUserId() {
return wechatUserId;
}
......
......@@ -120,4 +120,13 @@ public interface WeixinClockFacade {
@RequestParam(value = "wxUserId", required = false) String wxUserId)
throws BizException, PermissionException;
@ApiOperation("获取分享成员的排名信息")
@ApiImplicitParams({@ApiImplicitParam(name = "userInfo", value = "Cookie", dataType = "string", paramType = "header"),
@ApiImplicitParam(name = "wxGroupId", value = "wxGroupId", dataType = "string", paramType = "query"),
@ApiImplicitParam(name = "wxUserId", value = "wxUserId", dataType = "string", paramType = "query")
})
@RequestMapping(value = "getShareMemberRank", method = RequestMethod.GET)
public ResponseDto<?> getShareMemberRank(@CookieValue("userInfo") String userInfo,
@RequestParam(value = "wxGroupId") String wxGroupId,
@RequestParam(value = "wxUserId") String wxUserId)throws BizException, PermissionException;
}
......@@ -217,4 +217,19 @@ public class WeixinClockFacadeImpl implements WeixinClockFacade {
return new ResponseDto<>(weixinClockBiz.getClockWechatUserRank(wechatUserId, wxGroupId, wxUserId));
}
@Override
@RequestMapping(value = "getShareMemberRank", method = RequestMethod.GET)
public ResponseDto<?> getShareMemberRank(@CookieValue("userInfo") String userInfo,
@RequestParam(value = "wxGroupId") String wxGroupId,
@RequestParam(value = "wxUserId") String wxUserId)throws BizException, PermissionException {
Long wechatUserId = Cookie.getId(userInfo, Cookie._PARTY_ID);
return new ResponseDto<>(weixinClockBiz.getShareMemberRank(wxGroupId, wxUserId));
}
@RequestMapping(value = "solveOldData", method = RequestMethod.GET)
public ResponseDto<?> solveOldData(){
weixinClockBiz.solveOldData();
return new ResponseDto<>();
}
}
......@@ -5,14 +5,17 @@ import com.pcloud.book.weixinclock.biz.WeixinClockPraiseBiz;
import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.cookie.Cookie;
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;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
......@@ -49,4 +52,19 @@ public class WeixinClockPraiseFacadeImpl {
weixinClockPraiseBiz.praiseForMember(vo);
return new ResponseDto<>();
}
@ApiOperation(value = "获取点赞用户列表", httpMethod = "GET")
@GetMapping("listPraiseUser")
public ResponseDto<?> listPraiseUser(@CookieValue("userInfo") String userInfo,
@RequestParam("wxGroupId") String wxGroupId,
@RequestParam("wxUserId") String wxUserId,
@RequestParam("currentPage") Integer currentPage,
@RequestParam("numPerPage") Integer numPerPage) throws BizException, PermissionException {
if (null == wxGroupId || null == wxUserId){
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数为空");
}
PageParam pageParam = new PageParam(currentPage, numPerPage);
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
return new ResponseDto<>(weixinClockPraiseBiz.listPraiseUser(wxGroupId, wxUserId, pageParam));
}
}
......@@ -34,6 +34,9 @@ public class DoShareResponseVO extends BaseVO {
@ApiModelProperty("打卡次数")
private Integer clockNum;
@ApiModelProperty("获得的点赞数")
private Integer praiseNum;
@ApiModelProperty("开始打卡日期")
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
......
package com.pcloud.book.weixinclock.vo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.vo.BaseVO;
import com.pcloud.readercenter.wechat.entity.WechatUser;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* @Describe: 获取点赞用户列表返回vo
* @Author: zhangdongwei
* @Date: Create on 21:37 2019/11/11 0011
*/
@Data
@ApiModel("获取点赞用户列表返回vo")
public class ListPraiseUserResponseVO extends BaseVO {
/**
* 点赞用户id
*/
private Long priseUserId;
/**
* 点赞用户头像
*/
private String headPic;
/**
* 点赞用户昵称
*/
private String userName;
/**
* 点赞时间
*/
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date praiseTime;
public static List<ListPraiseUserResponseVO> valueFromPraiseUser(List<WeixinClockPraise> weixinClockPraises, Map<Long, WechatUser> wechatUserMap){
if (ListUtils.isEmpty(weixinClockPraises)){
return new ArrayList<>();
}
List<ListPraiseUserResponseVO> vos = new ArrayList<>();
for (WeixinClockPraise weixinClockPraise : weixinClockPraises){
ListPraiseUserResponseVO vo = new ListPraiseUserResponseVO();
vo.setPriseUserId(weixinClockPraise.getPraiseUserId());
vo.setPraiseTime(weixinClockPraise.getUpdateTime());
WechatUser wechatUser = wechatUserMap.get(weixinClockPraise.getPraiseUserId());
if (null == wechatUser){
vos.add(vo);
continue;
}
vo.setUserName(wechatUser.getWechatUserNickname());
vo.setHeadPic(wechatUser.getWechatUserHeadurl());
vos.add(vo);
}
return vos;
}
}
......@@ -11,22 +11,23 @@
<result column="nickname" property="nickname" jdbcType="VARCHAR"/>
<result column="head_pic" property="headPic" jdbcType="VARCHAR"/>
<result column="all_clock_day" property="allClockDay" jdbcType="INTEGER"/>
<result column="score" property="score" jdbcType="INTEGER"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
weixin_clock_member_id, weixin_clock_id, wx_user_id, book_group_classify_id, wx_group_id, nickname, head_pic, all_clock_day,
weixin_clock_member_id, weixin_clock_id, wx_user_id, book_group_classify_id, wx_group_id, nickname, head_pic, all_clock_day, score,
create_time
</sql>
<insert id="insert" parameterType="weixinClockMember" useGeneratedKeys="true" keyProperty="weixinClockMemberId" flushCache="true">
INSERT INTO weixin_clock_member (
weixin_clock_id, wx_user_id, book_group_classify_id, wx_group_id, nickname, head_pic, all_clock_day,
weixin_clock_id, wx_user_id, book_group_classify_id, wx_group_id, nickname, head_pic, all_clock_day, score,
create_time, update_time,wechat_user_id
)
VALUES (
#{weixinClockId, jdbcType=BIGINT}, #{wxUserId, jdbcType=VARCHAR}, #{bookGroupClassifyId, jdbcType=BIGINT}, #{wxGroupId, jdbcType=VARCHAR},
#{nickname, jdbcType=VARCHAR}, #{headPic, jdbcType=VARCHAR}, #{allClockDay, jdbcType=INTEGER}, NOW(), NOW(),#{wechatUserId, jdbcType=BIGINT}
#{nickname, jdbcType=VARCHAR}, #{headPic, jdbcType=VARCHAR}, #{allClockDay, jdbcType=INTEGER}, #{socre}, NOW(), NOW(),#{wechatUserId, jdbcType=BIGINT}
)
ON DUPLICATE KEY
UPDATE
......@@ -35,19 +36,19 @@
<select id="listWeixinClockRank" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto">
SELECT
w.wx_user_id wxUserId, w.all_clock_day clockNum, w.nickname nickname, w.head_pic headPic, (@i :=@i + 1) rankNum
w.wx_user_id wxUserId, w.all_clock_day clockNum, w.score score, w.nickname nickname, w.head_pic headPic, (@i :=@i + 1) rankNum
FROM
weixin_clock_member w,
(SELECT @i := 0) i
WHERE
w.wx_group_id = #{wxGroupId, jdbcType=VARCHAR}
AND (w.all_clock_day <![CDATA[ >]]> 0 or w.wx_user_id = #{wxUserId, jdbcType=VARCHAR})
ORDER BY w.all_clock_day DESC
ORDER BY w.score desc, w.update_time asc
</select>
<select id="getByWxUserId" parameterType="map" resultMap="BaseResultMap">
select
weixin_clock_member_id, weixin_clock_id, wx_user_id, book_group_classify_id, wx_group_id, nickname, head_pic, all_clock_day, create_time
weixin_clock_member_id, weixin_clock_id, wx_user_id, book_group_classify_id, wx_group_id, nickname, head_pic, all_clock_day, score, create_time
from
weixin_clock_member
where
......@@ -60,6 +61,7 @@
update weixin_clock_member
set
all_clock_day = all_clock_day + 1,
score = score + 1,
wechat_user_id = #{wechatUserId, jdbcType=BIGINT},
update_time = NOW()
where
......@@ -73,19 +75,19 @@
select wx_user_id, @rowNum:=0 from weixin_clock_member
where wx_group_id = #{wechatGroupId}
AND (all_clock_day <![CDATA[ >]]> 0 or wx_user_id = #{userWxId, jdbcType=VARCHAR})
order by all_clock_day desc, update_time asc
order by score desc, update_time asc
) a
) cm where cm.wx_user_id = #{userWxId}
LIMIT 1
</select>
<select id="getClockWechatUserRank" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto">
select cm.wx_user_id wxUserId, cm.rankNum rankNum, cm.clockNum clockNum, cm.nickname nickname, cm.headPic headPic from (
select wx_user_id, (@rowNum:=@rowNum+1) AS rankNum, all_clock_day clockNum, nickname nickname, head_pic headPic, wechat_user_id from (
select wx_user_id, all_clock_day, nickname, head_pic, wechat_user_id, @rowNum:=0 from weixin_clock_member
select cm.wx_user_id wxUserId, cm.rankNum rankNum, cm.clockNum clockNum, cm.nickname nickname, cm.headPic headPic, cm.score score from (
select wx_user_id, (@rowNum:=@rowNum+1) AS rankNum, all_clock_day clockNum, nickname nickname, score, head_pic headPic, wechat_user_id from (
select wx_user_id, all_clock_day, nickname, score, head_pic, wechat_user_id, @rowNum:=0 from weixin_clock_member
where wx_group_id = #{wechatGroupId}
AND (all_clock_day <![CDATA[ >]]> 0 or wechat_user_id = #{wechatUserId, jdbcType=VARCHAR})
order by all_clock_day desc, update_time asc
order by score desc, update_time asc
) a
) cm where cm.wechat_user_id = #{wechatUserId}
LIMIT 1
......@@ -99,15 +101,37 @@
</update>
<select id="getClockWechatUserRankByWxUserId" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto">
select cm.wx_user_id wxUserId, cm.rankNum rankNum, cm.clockNum clockNum, cm.nickname nickname, cm.headPic headPic from (
select wx_user_id, (@rowNum:=@rowNum+1) AS rankNum, all_clock_day clockNum, nickname nickname, head_pic headPic, wechat_user_id from (
select wx_user_id, all_clock_day, nickname, head_pic, wechat_user_id, @rowNum:=0 from weixin_clock_member
select cm.wx_user_id wxUserId, cm.rankNum rankNum, cm.clockNum clockNum, cm.score score, cm.nickname nickname, cm.headPic headPic from (
select wx_user_id, (@rowNum:=@rowNum+1) AS rankNum, all_clock_day clockNum, score, nickname nickname, head_pic headPic, wechat_user_id from (
select wx_user_id, all_clock_day, score, nickname, head_pic, wechat_user_id, @rowNum:=0 from weixin_clock_member
where wx_group_id = #{wechatGroupId}
AND (all_clock_day <![CDATA[ >]]> 0 or wx_user_id = #{wxUserId, jdbcType=VARCHAR})
order by all_clock_day desc, update_time asc
order by score desc, update_time asc
) a
) cm where cm.wx_user_id = #{wxUserId}
LIMIT 1
</select>
<select id="updateScore" parameterType="map">
update weixin_clock_member set
<choose>
<when test="isCancel == 1">
score = score + 1
</when>
<otherwise>
score = score - 1
</otherwise>
</choose>
where weixin_clock_member_id = #{weixinClockMemberId}
</select>
<!--旧数据处理:初始化分数-->
<update id="initScore">
update weixin_clock_member set score = all_clock_day
</update>
<!--旧数据处理-->
<update id="addPraiseNum" parameterType="map">
update weixin_clock_member set score = score + #{praiseNum} where wx_user_id = #{wxUserId} and wx_group_id = #{wxGroupId}
</update>
</mapper>
\ No newline at end of file
......@@ -64,4 +64,19 @@
</foreach>
and is_cancel = 1
</select>
<select id="getPraiseNum" parameterType="map" resultType="integer">
select count(1) from weixin_clock_praise
where wx_user_id = #{wxUserId} and wx_group_id = #{wechatGroupId} and is_cancel = 1
</select>
<select id="listByWxUserId" parameterType="map" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from weixin_clock_praise
where wx_user_id = #{wxUserId} and wx_group_id = #{wechatGroupId} and is_cancel = 1
</select>
<select id="listAll" resultType="com.pcloud.book.weixinclock.dto.RankDto">
select wx_group_id wxGroupId, wx_user_id wxUserId, count(1) praiseNum from weixin_clock_praise
where is_cancel = 1 group by wxGroupId, wxUserId having praiseNum > 0
</select>
</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