Commit bc49117d by zhangdongwei-intern

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

parent dad77e76
...@@ -427,7 +427,7 @@ public class LunarCalendarUtils { ...@@ -427,7 +427,7 @@ public class LunarCalendarUtils {
for(int i = 1; i < month; i++){ for(int i = 1; i < month; i++){
num += MONTH_DAY[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 += 1;
} }
num += day; num += day;
......
...@@ -95,4 +95,17 @@ public interface WeixinClockBiz { ...@@ -95,4 +95,17 @@ public interface WeixinClockBiz {
* @param wechatGroupUser * @param wechatGroupUser
*/ */
void receiveWxGroupUserBindTopic(WechatGroupUser 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; ...@@ -3,6 +3,9 @@ package com.pcloud.book.weixinclock.biz;
import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto; import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto;
import com.pcloud.book.weixinclock.dto.RankDto; import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO; 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; import java.util.List;
...@@ -24,4 +27,12 @@ public interface WeixinClockPraiseBiz { ...@@ -24,4 +27,12 @@ public interface WeixinClockPraiseBiz {
* @param listWeixinClockRankDto * @param listWeixinClockRankDto
*/ */
void fillPraise(List<RankDto> list, ListWeixinClockRankDto 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; ...@@ -23,6 +23,7 @@ import com.pcloud.book.weixinclock.dao.WeixinClockBrowseDao;
import com.pcloud.book.weixinclock.dao.WeixinClockDao; import com.pcloud.book.weixinclock.dao.WeixinClockDao;
import com.pcloud.book.weixinclock.dao.WeixinClockGroupClassifyDao; import com.pcloud.book.weixinclock.dao.WeixinClockGroupClassifyDao;
import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao; 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.WeixinClockPrizeRecordDao;
import com.pcloud.book.weixinclock.dao.WeixinClockRewardDao; import com.pcloud.book.weixinclock.dao.WeixinClockRewardDao;
import com.pcloud.book.weixinclock.dao.WeixinClockTopicDao; import com.pcloud.book.weixinclock.dao.WeixinClockTopicDao;
...@@ -134,6 +135,8 @@ public class WeixinClockBizImpl implements WeixinClockBiz { ...@@ -134,6 +135,8 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
private WeixinClockPraiseBiz weixinClockPraiseBiz; private WeixinClockPraiseBiz weixinClockPraiseBiz;
@Autowired @Autowired
private WeixinClockBrowseDao weixinClockBrowseDao; private WeixinClockBrowseDao weixinClockBrowseDao;
@Autowired
private WeixinClockPraiseDao weixinClockPraiseDao;
private static final ThreadFactory NAMED_THREAD_FACTORY = new ThreadFactoryBuilder() private static final ThreadFactory NAMED_THREAD_FACTORY = new ThreadFactoryBuilder()
.setNameFormat("weixinclock-pool-%d").build(); .setNameFormat("weixinclock-pool-%d").build();
...@@ -514,6 +517,8 @@ public class WeixinClockBizImpl implements WeixinClockBiz { ...@@ -514,6 +517,8 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
nickname = "神秘客"; nickname = "神秘客";
} }
WeixinClockTopic weixinTopic = weixinClockTopicDao.getTopicByIds4Today(wechatGroupId, userWxId); WeixinClockTopic weixinTopic = weixinClockTopicDao.getTopicByIds4Today(wechatGroupId, userWxId);
//获取我获得的点赞数
Integer praiseNum = weixinClockPraiseDao.getPraiseNum(wechatGroupId, userWxId);
if(null == weixinTopic){ if(null == weixinTopic){
WeixinClockTopic weixinClockTopic = new WeixinClockTopic(); WeixinClockTopic weixinClockTopic = new WeixinClockTopic();
weixinClockTopic.setBookGroupClassifyId(classifyQrcodeInfo.getClassifyId()); weixinClockTopic.setBookGroupClassifyId(classifyQrcodeInfo.getClassifyId());
...@@ -522,6 +527,7 @@ public class WeixinClockBizImpl implements WeixinClockBiz { ...@@ -522,6 +527,7 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
weixinClockTopic.setWxGroupId(wechatGroupId); weixinClockTopic.setWxGroupId(wechatGroupId);
weixinClockTopic.setWxUserId(userWxId); weixinClockTopic.setWxUserId(userWxId);
weixinClockTopic.setWeixinClockMemberId(weixinClockMemberId); weixinClockTopic.setWeixinClockMemberId(weixinClockMemberId);
//修改打卡天数, 天数+1, 得分+1
weixinClockMemberDao.updateClockDays(wechatGroupId, userWxId, wechatUserId); weixinClockMemberDao.updateClockDays(wechatGroupId, userWxId, wechatUserId);
weixinClockTopicDao.insert(weixinClockTopic); weixinClockTopicDao.insert(weixinClockTopic);
//发topic,增加抽奖次数 //发topic,增加抽奖次数
...@@ -576,15 +582,20 @@ public class WeixinClockBizImpl implements WeixinClockBiz { ...@@ -576,15 +582,20 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
} }
if(null != grantNum && !grantNum.equals(0)){ if(null != grantNum && !grantNum.equals(0)){
sendContent = "@" + nickname + " "+ weixinClockDto.getClockIntroduction() + "\n" + month + "月" + dayOfMonth + "日打卡成功,你已累积打卡" sendContent = "@" + nickname + " "+ weixinClockDto.getClockIntroduction() + "\n" + month + "月" + dayOfMonth + "日打卡成功,你已累积打卡"
+ clockDays + "天,排名第" + + clockDays + "天,累计收获" + praiseNum + "个赞,排名第" +
newOrder + ",明天继续!" + "\n" + "\n" + "查看排行榜:" + clockRankUrl + "\n" + "点击抽奖,即可有机会获得精美礼品哦:" + clockRewardUrl; newOrder + ",明天继续!" + "\n" + "\n" + "-->点赞与排行榜:" + clockRankUrl + "\n" + "点击抽奖,即可有机会获得精美礼品哦:" + "\n" + "-->" + clockRewardUrl;
}else { }else {
sendContent = "@" + nickname + " "+ weixinClockDto.getClockIntroduction() + "\n" + month + "月" + dayOfMonth + "日打卡成功,你已累积打卡" sendContent = "@" + nickname + " "+ weixinClockDto.getClockIntroduction() + "\n" + month + "月" + dayOfMonth + "日打卡成功,你已累积打卡"
+ clockDays + "天,排名第" + + clockDays + "天,累计收获" + praiseNum + "个赞,排名第" +
newOrder + ",明天继续!" + "\n" + "\n" + "查看排行榜:" + clockRankUrl; newOrder + ",明天继续!" + "\n" + "\n" + "点赞与排行榜:" + "\n" + "-->" + clockRankUrl;
} }
} else { } else {
sendContent = "@" + nickname + " ,你今天已经打过卡了,明天再继续!"; //获取我打卡天数
Long clockDays = weixinClockTopicDao.getClockCountByUser(wechatGroupId, userWxId);
//获取我的排名
Integer newOrder = weixinClockMemberDao.getMyNewOrder(wechatGroupId, userWxId);
sendContent = "@" + nickname + " ,你今天已经打过卡了, 目前累计打卡" + clockDays + "天,累计收获" + praiseNum + "个赞,排名第" +
newOrder + ",明天再继续!";
} }
vo.setContent(sendContent); vo.setContent(sendContent);
LOGGER.info("微信群内加入并打卡:发送微信消息vo="+vo); LOGGER.info("微信群内加入并打卡:发送微信消息vo="+vo);
...@@ -630,7 +641,12 @@ public class WeixinClockBizImpl implements WeixinClockBiz { ...@@ -630,7 +641,12 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
@ParamLog("获取某个群内某个用户的信息") @ParamLog("获取某个群内某个用户的信息")
public RankDto getClockWechatUserRank(Long wechatUserId, String wxGroupId, String wxUserId) { public RankDto getClockWechatUserRank(Long wechatUserId, String wxGroupId, String wxUserId) {
RankDto rankDto = weixinClockMemberDao.getClockWechatUserRank(wechatUserId, wxGroupId); 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 { ...@@ -660,4 +676,26 @@ public class WeixinClockBizImpl implements WeixinClockBiz {
weixinClockMemberDao.updatMemberWechatUserId(wechatGroupUser.getWxUserId(), wechatGroupUser.getWechatUserId()); 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; package com.pcloud.book.weixinclock.biz.impl;
import com.pcloud.book.base.exception.BookBizException; 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.biz.WeixinClockPraiseBiz;
import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao; import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao;
import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao; import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao;
...@@ -10,12 +11,17 @@ import com.pcloud.book.weixinclock.dto.RankDto; ...@@ -10,12 +11,17 @@ import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockMember; import com.pcloud.book.weixinclock.entity.WeixinClockMember;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise; import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO; 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.common.utils.ListUtils;
import com.pcloud.readercenter.wechat.entity.WechatUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
...@@ -35,6 +41,8 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz { ...@@ -35,6 +41,8 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz {
private WeixinClockPraiseDao weixinClockPraiseDao; private WeixinClockPraiseDao weixinClockPraiseDao;
@Autowired @Autowired
private WeixinClockMemberDao weixinClockMemberDao; private WeixinClockMemberDao weixinClockMemberDao;
@Autowired
private ReaderConsr readerConsr;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -63,11 +71,12 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz { ...@@ -63,11 +71,12 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz {
if (null == oldWeixinClockPraise){ if (null == oldWeixinClockPraise){
weixinClockPraise.setIsCancel(1); weixinClockPraise.setIsCancel(1);
weixinClockPraiseDao.insert(weixinClockPraise); weixinClockPraiseDao.insert(weixinClockPraise);
}else{ }else {
weixinClockPraise.setId(oldWeixinClockPraise.getId()); weixinClockPraise.setId(oldWeixinClockPraise.getId());
weixinClockPraiseDao.update(weixinClockPraise); weixinClockPraiseDao.update(weixinClockPraise);
} }
//点赞或者取消成功, 修改打卡成员得分
weixinClockMemberDao.updateScore(weixinClockMember.getWeixinClockMemberId(), weixinClockPraise.getIsCancel());
} }
@Override @Override
...@@ -103,4 +112,18 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz { ...@@ -103,4 +112,18 @@ public class WeixinClockPraiseBizImpl implements WeixinClockPraiseBiz {
rankDto.setIsPraise(map.getOrDefault(rankDto.getWxUserId(), Boolean.FALSE) ? 1 : 0); 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; package com.pcloud.book.weixinclock.biz.impl;
import com.pcloud.book.base.exception.BookBizException; 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.BookGroupClassifyDao;
import com.pcloud.book.group.dao.BookGroupDao; import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.GroupQrcodeDao; import com.pcloud.book.group.dao.GroupQrcodeDao;
...@@ -11,6 +13,7 @@ import com.pcloud.book.group.vo.ClassifyVO; ...@@ -11,6 +13,7 @@ import com.pcloud.book.group.vo.ClassifyVO;
import com.pcloud.book.util.common.LunarCalendarUtils; import com.pcloud.book.util.common.LunarCalendarUtils;
import com.pcloud.book.weixinclock.biz.WeixinClockShareBiz; import com.pcloud.book.weixinclock.biz.WeixinClockShareBiz;
import com.pcloud.book.weixinclock.dao.WeixinClockMemberDao; 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.WeixinClockShareDao;
import com.pcloud.book.weixinclock.dao.WeixinClockShareWordDao; import com.pcloud.book.weixinclock.dao.WeixinClockShareWordDao;
import com.pcloud.book.weixinclock.dao.WeixinClockTopicDao; import com.pcloud.book.weixinclock.dao.WeixinClockTopicDao;
...@@ -18,10 +21,18 @@ import com.pcloud.book.weixinclock.dto.RankDto; ...@@ -18,10 +21,18 @@ import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockMember; import com.pcloud.book.weixinclock.entity.WeixinClockMember;
import com.pcloud.book.weixinclock.entity.WeixinClockShare; import com.pcloud.book.weixinclock.entity.WeixinClockShare;
import com.pcloud.book.weixinclock.vo.response.DoShareResponseVO; 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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
...@@ -47,8 +58,15 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz { ...@@ -47,8 +58,15 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz {
private BookGroupDao bookGroupDao; private BookGroupDao bookGroupDao;
@Autowired @Autowired
private BookGroupClassifyDao bookGroupClassifyDao; private BookGroupClassifyDao bookGroupClassifyDao;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private WeixinClockPraiseDao weixinClockPraiseDao;
@Override @Override
@Transactional(rollbackFor = Exception.class)
public DoShareResponseVO doShare(Long wechatUserId, String wxGroupId, String wxUserId) { public DoShareResponseVO doShare(Long wechatUserId, String wxGroupId, String wxUserId) {
if (null == wxGroupId || null == wxUserId){ if (null == wxGroupId || null == wxUserId){
...@@ -63,6 +81,9 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz { ...@@ -63,6 +81,9 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz {
} }
wxUserId = null != rankDto.getWxUserId() ? rankDto.getWxUserId() : wxUserId; wxUserId = null != rankDto.getWxUserId() ? rankDto.getWxUserId() : wxUserId;
DoShareResponseVO doShareResponseVO = DoShareResponseVO.valueFromRankDto(rankDto); DoShareResponseVO doShareResponseVO = DoShareResponseVO.valueFromRankDto(rankDto);
//获得的点赞数
Integer pariseNum = weixinClockPraiseDao.getPraiseNum(wxGroupId, wxUserId);
doShareResponseVO.setPraiseNum(pariseNum);
Date today = new Date(); Date today = new Date();
Map<String, String> strMap = LunarCalendarUtils.dataToLunar(today); Map<String, String> strMap = LunarCalendarUtils.dataToLunar(today);
doShareResponseVO.setLunar(strMap.get("lunar")); doShareResponseVO.setLunar(strMap.get("lunar"));
...@@ -89,6 +110,32 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz { ...@@ -89,6 +110,32 @@ public class WeixinClockShareBizImpl implements WeixinClockShareBiz {
weixinClockShare.setShareUserId(wechatUserId); weixinClockShare.setShareUserId(wechatUserId);
weixinClockShare.setWxGroupId(wxGroupId); weixinClockShare.setWxGroupId(wxGroupId);
weixinClockShareDao.insert(weixinClockShare); 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; return doShareResponseVO;
} }
} }
...@@ -65,4 +65,24 @@ public interface WeixinClockMemberDao extends BaseDao<WeixinClockMember> { ...@@ -65,4 +65,24 @@ public interface WeixinClockMemberDao extends BaseDao<WeixinClockMember> {
* @return * @return
*/ */
RankDto getClockWechatUserRankByWxUserId(String wxUserId, String wxGroupId); 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; ...@@ -2,6 +2,7 @@ package com.pcloud.book.weixinclock.dao;
import com.pcloud.book.weixinclock.dto.GetByMemberAndUserDto; import com.pcloud.book.weixinclock.dto.GetByMemberAndUserDto;
import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto; import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto;
import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise; import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
...@@ -26,4 +27,26 @@ public interface WeixinClockPraiseDao extends BaseDao<WeixinClockPraise> { ...@@ -26,4 +27,26 @@ public interface WeixinClockPraiseDao extends BaseDao<WeixinClockPraise> {
* @return * @return
*/ */
List<WeixinClockPraise> getMemberPraise(ListWeixinClockRankDto dto); 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 ...@@ -100,4 +100,26 @@ public class WeixinClockMemberDaoImpl extends BaseDaoImpl<WeixinClockMember> imp
map.put("wechatGroupId", wxGroupId); map.put("wechatGroupId", wxGroupId);
return super.getSqlSession().selectOne(getStatement("getClockWechatUserRankByWxUserId"), map); 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; ...@@ -3,12 +3,15 @@ package com.pcloud.book.weixinclock.dao.impl;
import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao; import com.pcloud.book.weixinclock.dao.WeixinClockPraiseDao;
import com.pcloud.book.weixinclock.dto.GetByMemberAndUserDto; import com.pcloud.book.weixinclock.dto.GetByMemberAndUserDto;
import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto; import com.pcloud.book.weixinclock.dto.ListWeixinClockRankDto;
import com.pcloud.book.weixinclock.dto.RankDto;
import com.pcloud.book.weixinclock.entity.WeixinClockPraise; import com.pcloud.book.weixinclock.entity.WeixinClockPraise;
import com.pcloud.common.core.dao.BaseDaoImpl; import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Describe: 打卡点赞dao实现类 * @Describe: 打卡点赞dao实现类
...@@ -26,4 +29,25 @@ public class WeixinClockPraiseDaoImpl extends BaseDaoImpl<WeixinClockPraise> imp ...@@ -26,4 +29,25 @@ public class WeixinClockPraiseDaoImpl extends BaseDaoImpl<WeixinClockPraise> imp
public List<WeixinClockPraise> getMemberPraise(ListWeixinClockRankDto dto) { public List<WeixinClockPraise> getMemberPraise(ListWeixinClockRankDto dto) {
return super.sqlSessionTemplate.selectList(getStatement("getMemberPraise"), 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 { ...@@ -34,6 +34,12 @@ public class RankDto extends BaseDto {
@ApiModelProperty("当前用户是否点赞") @ApiModelProperty("当前用户是否点赞")
private Integer isPraise; private Integer isPraise;
@ApiModelProperty("得分(打卡分+点赞分)")
private Integer score;
@ApiModelProperty("群id")
private String wxGroupId;
public Integer getRankNum() { public Integer getRankNum() {
return rankNum; return rankNum;
} }
...@@ -90,6 +96,22 @@ public class RankDto extends BaseDto { ...@@ -90,6 +96,22 @@ public class RankDto extends BaseDto {
this.isPraise = isPraise; 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 @Override
public String toString() { public String toString() {
return "RankDto{" + return "RankDto{" +
......
...@@ -40,6 +40,9 @@ public class WeixinClockMember extends BaseEntity { ...@@ -40,6 +40,9 @@ public class WeixinClockMember extends BaseEntity {
@ApiModelProperty("打卡天数") @ApiModelProperty("打卡天数")
private Integer allClockDay; private Integer allClockDay;
@ApiModelProperty("分数(打卡得分加点赞得分)")
private Integer score;
@ApiModelProperty("微信用户ID") @ApiModelProperty("微信用户ID")
private Long wechatUserId; private Long wechatUserId;
...@@ -111,6 +114,14 @@ public class WeixinClockMember extends BaseEntity { ...@@ -111,6 +114,14 @@ public class WeixinClockMember extends BaseEntity {
this.allClockDay = allClockDay; this.allClockDay = allClockDay;
} }
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
public Long getWechatUserId() { public Long getWechatUserId() {
return wechatUserId; return wechatUserId;
} }
......
...@@ -120,4 +120,13 @@ public interface WeixinClockFacade { ...@@ -120,4 +120,13 @@ public interface WeixinClockFacade {
@RequestParam(value = "wxUserId", required = false) String wxUserId) @RequestParam(value = "wxUserId", required = false) String wxUserId)
throws BizException, PermissionException; 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 { ...@@ -217,4 +217,19 @@ public class WeixinClockFacadeImpl implements WeixinClockFacade {
return new ResponseDto<>(weixinClockBiz.getClockWechatUserRank(wechatUserId, wxGroupId, wxUserId)); 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; ...@@ -5,14 +5,17 @@ import com.pcloud.book.weixinclock.biz.WeixinClockPraiseBiz;
import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO; import com.pcloud.book.weixinclock.vo.request.PraiseForMemberRequestVO;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.permission.PermissionException; import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.cookie.Cookie; import com.pcloud.common.utils.cookie.Cookie;
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.CookieValue;
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;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Optional; import java.util.Optional;
...@@ -49,4 +52,19 @@ public class WeixinClockPraiseFacadeImpl { ...@@ -49,4 +52,19 @@ public class WeixinClockPraiseFacadeImpl {
weixinClockPraiseBiz.praiseForMember(vo); weixinClockPraiseBiz.praiseForMember(vo);
return new ResponseDto<>(); 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 { ...@@ -34,6 +34,9 @@ public class DoShareResponseVO extends BaseVO {
@ApiModelProperty("打卡次数") @ApiModelProperty("打卡次数")
private Integer clockNum; private Integer clockNum;
@ApiModelProperty("获得的点赞数")
private Integer praiseNum;
@ApiModelProperty("开始打卡日期") @ApiModelProperty("开始打卡日期")
@JsonFormat( @JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss", 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 @@ ...@@ -11,22 +11,23 @@
<result column="nickname" property="nickname" jdbcType="VARCHAR"/> <result column="nickname" property="nickname" jdbcType="VARCHAR"/>
<result column="head_pic" property="headPic" jdbcType="VARCHAR"/> <result column="head_pic" property="headPic" jdbcType="VARCHAR"/>
<result column="all_clock_day" property="allClockDay" jdbcType="INTEGER"/> <result column="all_clock_day" property="allClockDay" jdbcType="INTEGER"/>
<result column="score" property="score" jdbcType="INTEGER"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/> <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <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 create_time
</sql> </sql>
<insert id="insert" parameterType="weixinClockMember" useGeneratedKeys="true" keyProperty="weixinClockMemberId" flushCache="true"> <insert id="insert" parameterType="weixinClockMember" useGeneratedKeys="true" keyProperty="weixinClockMemberId" flushCache="true">
INSERT INTO weixin_clock_member ( 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 create_time, update_time,wechat_user_id
) )
VALUES ( VALUES (
#{weixinClockId, jdbcType=BIGINT}, #{wxUserId, jdbcType=VARCHAR}, #{bookGroupClassifyId, jdbcType=BIGINT}, #{wxGroupId, jdbcType=VARCHAR}, #{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 ON DUPLICATE KEY
UPDATE UPDATE
...@@ -35,19 +36,19 @@ ...@@ -35,19 +36,19 @@
<select id="listWeixinClockRank" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto"> <select id="listWeixinClockRank" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto">
SELECT 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 FROM
weixin_clock_member w, weixin_clock_member w,
(SELECT @i := 0) i (SELECT @i := 0) i
WHERE WHERE
w.wx_group_id = #{wxGroupId, jdbcType=VARCHAR} w.wx_group_id = #{wxGroupId, jdbcType=VARCHAR}
AND (w.all_clock_day <![CDATA[ >]]> 0 or w.wx_user_id = #{wxUserId, 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>
<select id="getByWxUserId" parameterType="map" resultMap="BaseResultMap"> <select id="getByWxUserId" parameterType="map" resultMap="BaseResultMap">
select 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 from
weixin_clock_member weixin_clock_member
where where
...@@ -60,6 +61,7 @@ ...@@ -60,6 +61,7 @@
update weixin_clock_member update weixin_clock_member
set set
all_clock_day = all_clock_day + 1, all_clock_day = all_clock_day + 1,
score = score + 1,
wechat_user_id = #{wechatUserId, jdbcType=BIGINT}, wechat_user_id = #{wechatUserId, jdbcType=BIGINT},
update_time = NOW() update_time = NOW()
where where
...@@ -73,19 +75,19 @@ ...@@ -73,19 +75,19 @@
select wx_user_id, @rowNum:=0 from weixin_clock_member select wx_user_id, @rowNum:=0 from weixin_clock_member
where wx_group_id = #{wechatGroupId} where wx_group_id = #{wechatGroupId}
AND (all_clock_day <![CDATA[ >]]> 0 or wx_user_id = #{userWxId, jdbcType=VARCHAR}) 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 ) a
) cm where cm.wx_user_id = #{userWxId} ) cm where cm.wx_user_id = #{userWxId}
LIMIT 1 LIMIT 1
</select> </select>
<select id="getClockWechatUserRank" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto"> <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 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, head_pic headPic, wechat_user_id 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, head_pic, wechat_user_id, @rowNum:=0 from weixin_clock_member 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} where wx_group_id = #{wechatGroupId}
AND (all_clock_day <![CDATA[ >]]> 0 or wechat_user_id = #{wechatUserId, jdbcType=VARCHAR}) 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 ) a
) cm where cm.wechat_user_id = #{wechatUserId} ) cm where cm.wechat_user_id = #{wechatUserId}
LIMIT 1 LIMIT 1
...@@ -99,15 +101,37 @@ ...@@ -99,15 +101,37 @@
</update> </update>
<select id="getClockWechatUserRankByWxUserId" parameterType="map" resultType="com.pcloud.book.weixinclock.dto.RankDto"> <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 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, nickname nickname, head_pic headPic, wechat_user_id 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, nickname, head_pic, wechat_user_id, @rowNum:=0 from weixin_clock_member 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} where wx_group_id = #{wechatGroupId}
AND (all_clock_day <![CDATA[ >]]> 0 or wx_user_id = #{wxUserId, jdbcType=VARCHAR}) 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 ) a
) cm where cm.wx_user_id = #{wxUserId} ) cm where cm.wx_user_id = #{wxUserId}
LIMIT 1 LIMIT 1
</select> </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> </mapper>
\ No newline at end of file
...@@ -64,4 +64,19 @@ ...@@ -64,4 +64,19 @@
</foreach> </foreach>
and is_cancel = 1 and is_cancel = 1
</select> </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> </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