From 5a8a90c095280fbd2106869ecd2bad10e01a57a6 Mon Sep 17 00:00:00 2001 From: 101captain <237651143@qq.com> Date: 星期四, 23 十二月 2021 18:10:22 +0800 Subject: [PATCH] 12/23 大屏修改 --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java | 145 +++++++++++++++++++++++++++++++++--------------- 1 files changed, 99 insertions(+), 46 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java index f7316ca..dee86d2 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java +++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java @@ -18,13 +18,6 @@ import javax.annotation.Resource; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.panzhihua.common.constants.Constants; -import com.panzhihua.common.exceptions.ServiceException; -import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO; -import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO; -import com.panzhihua.common.model.vos.community.*; -import com.panzhihua.common.utlis.DateUtils; import org.springframework.beans.BeanUtils; import org.springframework.data.redis.connection.StringRedisConnection; import org.springframework.data.redis.core.RedisCallback; @@ -36,10 +29,13 @@ import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.panzhihua.common.constants.Constants; +import com.panzhihua.common.exceptions.ServiceException; import com.panzhihua.common.model.dtos.community.ComActDiscussCommentDTO; import com.panzhihua.common.model.dtos.community.ComActDiscussCommentUserDTO; import com.panzhihua.common.model.dtos.community.ComActDiscussDTO; @@ -49,6 +45,8 @@ import com.panzhihua.common.model.dtos.community.PageComActDiscussCommentDTO; import com.panzhihua.common.model.dtos.community.PageComActDiscussDTO; import com.panzhihua.common.model.dtos.community.bigscreen.work.ScreenDiscussListDTO; +import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO; +import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActDiscussCommentVO; @@ -56,6 +54,7 @@ import com.panzhihua.common.model.vos.community.ComActDiscussOptionVO; import com.panzhihua.common.model.vos.community.ComActDiscussVO; import com.panzhihua.common.model.vos.community.ComActVO; +import com.panzhihua.common.model.vos.community.SysConfVO; import com.panzhihua.common.model.vos.community.screen.work.DiscussListVO; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.utlis.DateUtils; @@ -65,12 +64,14 @@ import com.panzhihua.service_community.dao.ComActDiscussOptionDAO; import com.panzhihua.service_community.dao.ComActDiscussOptionUserDAO; import com.panzhihua.service_community.dao.ComActDiscussUserDAO; +import com.panzhihua.service_community.dao.SysConfMapper; import com.panzhihua.service_community.model.dos.ComActDiscussCommentDO; import com.panzhihua.service_community.model.dos.ComActDiscussCommentUserDO; import com.panzhihua.service_community.model.dos.ComActDiscussDO; import com.panzhihua.service_community.model.dos.ComActDiscussOptionDO; import com.panzhihua.service_community.model.dos.ComActDiscussOptionUserDO; import com.panzhihua.service_community.model.dos.ComActDiscussUserDO; +import com.panzhihua.service_community.model.dos.SysConfDO; import com.panzhihua.service_community.service.ComActDiscussOptionService; import com.panzhihua.service_community.service.ComActDiscussService; import com.panzhihua.service_community.service.SysConfService; @@ -187,26 +188,30 @@ String discussIdentityConfig = (String) sysConfValue.getData(); if (isBlank(discussIdentityConfig)) { checkResult = false; - } - List<String> currentUserRoles = new ArrayList<>(); - List<String> sysAllowedRoles = Arrays.asList(discussIdentityConfig.split(",")); - LoginUserInfoVO loginUserInfo = comActDiscussDTO.getLoginUserInfo(); - if (loginUserInfo.getIsPartymember().intValue() == 1) { - currentUserRoles.add("2"); - } - if (loginUserInfo.getIsVolunteer().intValue() == 1) { - currentUserRoles.add("3"); - } - R isTeamResult = userService.checkCurrentUserIsTeam(loginUserInfo.getPhone(), loginUserInfo.getCommunityId()); - if (R.isOk(isTeamResult) && (Boolean) isTeamResult.getData()) { - currentUserRoles.add("4"); - } - if (currentUserRoles.isEmpty()) { - checkResult = false; - } - boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role)); - if (!result) { - checkResult = false; + } else { + List<String> currentUserRoles = new ArrayList<>(); + List<String> sysAllowedRoles = Arrays.asList(discussIdentityConfig.split(",")); + LoginUserInfoVO loginUserInfo = comActDiscussDTO.getLoginUserInfo(); + if (loginUserInfo.getIsPartymember() == 1) { + currentUserRoles.add("2"); + } + if (loginUserInfo.getIsVolunteer().intValue() == 1) { + currentUserRoles.add("3"); + } + R isTeamResult = userService.checkCurrentUserIsTeam(loginUserInfo.getPhone(), loginUserInfo.getCommunityId()); + if (R.isOk(isTeamResult) && (Boolean) isTeamResult.getData()) { + currentUserRoles.add("4"); + } + if (currentUserRoles.isEmpty()) { + checkResult = false; + } else { + if (!sysAllowedRoles.contains("1")) { + boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role)); + if (!result) { + checkResult = false; + } + } + } } } return checkResult; @@ -249,7 +254,7 @@ } else { comActDiscussDO.setStatus(ComActDiscussDO.status.yfb); } - comActDiscussDO.setUpdateAt(new Date()); + comActDiscussDO.setUpdateAt(nowDate); int insert = comActDiscussDAO.updateById(comActDiscussDO); if (insert > 0) { //如果是投票,需要把投票的选项存储 @@ -458,6 +463,7 @@ LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(comActDiscussCommentDO.getUserId()); comActDiscussCommentVO.setUserName(loginUserInfoVO.getName()); comActDiscussCommentVO.setPhone(loginUserInfoVO.getPhone()); + comActDiscussCommentVO.setImageUrl(loginUserInfoVO.getImageUrl()); //查询该评论下所有回复内容 IPage<ComActDiscussCommentVO> discussCommentList = comActDiscussCommentDAO.getDiscussCommentList(new Page(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO.getId()); @@ -597,10 +603,16 @@ records.forEach(comActDiscussVO -> { Integer type = comActDiscussVO.getType(); Long id = comActDiscussVO.getId(); + String viewNumKey = String.join("_", DISCUSS_VIEW_NUM_PREFIX, id.toString()); + if (stringRedisTemplate.hasKey(viewNumKey)) { + ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue(); + comActDiscussVO.setViewsNum(Integer.parseInt(opsForValue.get(viewNumKey))); + } if (type.equals(2)) { List<ComActDiscussOptionDO> comActDiscussOptionDOS = comActDiscussOptionDAO.selectList( new QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, id)); List<ComActDiscussOptionVO> comActDiscussOptionVOS = new ArrayList<>(); + List<Integer> votes = new ArrayList<>(); comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> { Long discussOptionDOId = comActDiscussOptionDO.getId(); Integer selectCount = @@ -614,6 +626,7 @@ // 判断选项是否已投票 int haveVote = comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId); + votes.add(haveVote); comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0); } comActDiscussOptionVOS.add(comActDiscussOptionVO); @@ -621,6 +634,20 @@ fillThePercentAndSort(comActDiscussOptionVOS); checkDiscussStatusIsCorrect(comActDiscussVO); comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionVOS); + //填充剩余可投票数 + if (loginUserId != null && !loginUserId.equals(0L)) { + if (comActDiscussVO.getIsRepeat().intValue() == 1) { + //可重复投票 + int votedVotesInToday = comActDiscussOptionUserDAO.selectVotedVotesInToday(id, loginUserId); + int remainingVotes = comActDiscussVO.getCount().intValue() - votedVotesInToday; + comActDiscussVO.setRemainingVotes(remainingVotes >= 0 ? remainingVotes : 0); + } else { + //不可重复投票 + int alreadyVotedVotes = votes.stream().mapToInt(Integer::intValue).sum(); + int remainingVotes = comActDiscussVO.getCount().intValue() - alreadyVotedVotes; + comActDiscussVO.setRemainingVotes(remainingVotes >= 0 ? remainingVotes : 0); + } + } //填充投票记录列表 List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList = comActDiscussOptionUserDAO .selectVotedRecords(comActDiscussVO.getId()); @@ -654,11 +681,13 @@ */ private void checkDiscussStatusIsCorrect(ComActDiscussVO comActDiscussVO) { //判断discuss状态是否正确 - boolean isIncorrectStatus = comActDiscussVO.getEndTime().before(new Date()) && - (comActDiscussVO.getStatus().intValue() == 1 || comActDiscussVO.getStatus().intValue() == 2); - if (isIncorrectStatus) { - comActDiscussVO.setStatus(3); - comActDiscussDAO.updateStatusById(comActDiscussVO.getId(), 3); + if(comActDiscussVO.getEndTime() != null){ + boolean isIncorrectStatus = comActDiscussVO.getEndTime().before(new Date()) && + (comActDiscussVO.getStatus().intValue() == 1 || comActDiscussVO.getStatus().intValue() == 2); + if (isIncorrectStatus) { + comActDiscussVO.setStatus(3); + comActDiscussDAO.updateStatusById(comActDiscussVO.getId(), 3); + } } } @@ -870,7 +899,12 @@ comActDiscussVO.setHaveSign(comActDiscussVO1.getHaveSign()); comActDiscussVO.setHaveVote(comActDiscussVO1.getHaveVote()); } - + String viewNumKey = String.join("_", DISCUSS_VIEW_NUM_PREFIX, id.toString()); + if (stringRedisTemplate.hasKey(viewNumKey)) { + ValueOperations opsForValue = stringRedisTemplate.opsForValue(); + int viewNum = Integer.parseInt((String) opsForValue.get(viewNumKey)); + comActDiscussVO.setViewsNum(viewNum); + } return R.ok(comActDiscussVO); } @@ -902,7 +936,8 @@ */ @Override public R addDiscussOptionUser(ComActDiscussOptionUserDTO comActDiscussOptionUserDTO) { - Long discussOptionId = comActDiscussOptionUserDTO.getDiscussOptionId(); + List<Long> discussOptionIds = comActDiscussOptionUserDTO.getDiscussOptionIds(); + Long discussOptionId = discussOptionIds.get(0); Long userId = comActDiscussOptionUserDTO.getUserId(); ComActDiscussOptionDO comActDiscussOptionDO = comActDiscussOptionDAO.selectById(discussOptionId); if (ObjectUtils.isEmpty(comActDiscussOptionDO)) { @@ -920,27 +955,32 @@ } boolean isRepeat = comActDiscussDO.getIsRepeat().intValue() == 1; int usableVoteVotes = comActDiscussDO.getCount().intValue(); + int currentVoteNum = discussOptionIds.size(); if (isRepeat) { //可重复投票 int votedVotesInToday = comActDiscussOptionUserDAO.selectVotedVotesInToday(discussId, userId); - if (usableVoteVotes <= votedVotesInToday) { - return R.fail("当天投票次数已用完"); + if (usableVoteVotes <= votedVotesInToday || currentVoteNum > usableVoteVotes - votedVotesInToday) { + return R.fail("票数不足"); } } else { //不可重复投票 int alreadyVotedVotes = comActDiscussOptionUserDAO.selectCount( new QueryWrapper<ComActDiscussOptionUserDO>().lambda().eq(ComActDiscussOptionUserDO::getUserId, userId) .eq(ComActDiscussOptionUserDO::getDiscussId, discussId)); - if (usableVoteVotes <= alreadyVotedVotes) { - return R.fail("投票次数已用完"); + if (usableVoteVotes <= alreadyVotedVotes || currentVoteNum > usableVoteVotes - alreadyVotedVotes) { + return R.fail("票数不足"); } } - ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO(); - comActDiscussOptionUserDO.setUserId(userId); - comActDiscussOptionUserDO.setDiscussOptionId(discussOptionId); - comActDiscussOptionUserDO.setDiscussId(discussId); - int insert = comActDiscussOptionUserDAO.insert(comActDiscussOptionUserDO); - if (insert > 0) { + List<ComActDiscussOptionUserDO> comActDiscussOptionUserDOList = new ArrayList<>(); + discussOptionIds.forEach(optionId -> { + ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO(); + comActDiscussOptionUserDO.setUserId(userId); + comActDiscussOptionUserDO.setDiscussOptionId(optionId); + comActDiscussOptionUserDO.setDiscussId(discussId); + comActDiscussOptionUserDOList.add(comActDiscussOptionUserDO); + }); + int result = comActDiscussOptionUserDAO.batchInsert(comActDiscussOptionUserDOList); + if (result > 0) { return R.ok(); } return R.fail(); @@ -1098,7 +1138,9 @@ @Override public R discussJurisdictionGet(Long communityId, Long userId) { List<SysConfDO> confDOList = sysConfDao.selectList(new LambdaQueryWrapper<SysConfDO>() - .eq(SysConfDO::getCommunityId, communityId).orderByDesc(SysConfDO::getCreateAt)); + .eq(SysConfDO::getCommunityId, communityId) + .eq(SysConfDO::getCode,Constants.DISCUSS_IDENTITY_KEY + communityId) + .orderByDesc(SysConfDO::getCreateAt)); if (confDOList == null || confDOList.size() == 0) { SysConfDO sysConfDO = new SysConfDO(); sysConfDO.setCode(Constants.DISCUSS_IDENTITY_KEY + communityId); @@ -1222,6 +1264,7 @@ return R.fail("只能公布或编辑自己发布的主题!"); } comActDiscussDO.setPublishResult(comActDiscussDTO.getPublishResult()); + comActDiscussDO.setStatus(4); int result = comActDiscussDAO.updateById(comActDiscussDO); if (result > 0) { return R.ok(); @@ -1230,6 +1273,16 @@ } /** + * 一起议获取是否有发布权 + * @param comActDiscussDTO + * @return + */ + @Override + public R getDiscussPermissions(ComActDiscussDTO comActDiscussDTO) { + return R.ok(checkCurrentUserDiscussIdentity(comActDiscussDTO)); + } + + /** * 将redis中浏览量写入表中 * @return 执行结果 */ -- Gitblit v1.7.1