From 43f0578e80af82ecae6c61b51bd0539c6b960603 Mon Sep 17 00:00:00 2001 From: puhanshu <a9236326> Date: 星期二, 16 八月 2022 19:08:32 +0800 Subject: [PATCH] 服务范围优化 --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java | 194 ++++++++++++++++++++++++++++++++++-------------- 1 files changed, 136 insertions(+), 58 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..4069f73 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) { //如果是投票,需要把投票的选项存储 @@ -297,6 +302,7 @@ LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId); comActDiscussVO.setUserName(loginUserInfoVO.getName()); comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName()); + comActDiscussVO.setImageUrl(loginUserInfoVO.getImageUrl()); //分页查询评论列表 PageComActDiscussCommentDTO pageComActDiscussCommentDTO = new PageComActDiscussCommentDTO(); @@ -311,6 +317,11 @@ } }); comActDiscussVO.setDiscussCommentList(discussComments.getRecords()); + 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))); + } return R.ok(comActDiscussVO); } @@ -391,7 +402,19 @@ */ @Override public R pageDiscussAdmin(PageComActDiscussDTO pageComActDiscussDTO) { - return R.ok(comActDiscussDAO.pageDiscussAdmin(new Page<>(pageComActDiscussDTO.getPageNum(), pageComActDiscussDTO.getPageSize()), pageComActDiscussDTO)); + IPage<ComActDiscussVO> comActDiscussVOIPage=comActDiscussDAO.pageDiscussAdmin(new Page<>(pageComActDiscussDTO.getPageNum(), pageComActDiscussDTO.getPageSize()), pageComActDiscussDTO); + List<ComActDiscussVO> records = comActDiscussVOIPage.getRecords(); + if (!ObjectUtils.isEmpty(records)) { + records.forEach(comActDiscussVO -> { + 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))); + } + }); + } + return R.ok(comActDiscussVOIPage); } /** @@ -458,6 +481,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 +621,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 +644,7 @@ // 判断选项是否已投票 int haveVote = comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId); + votes.add(haveVote); comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0); } comActDiscussOptionVOS.add(comActDiscussOptionVO); @@ -621,6 +652,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 +699,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 +917,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 +954,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,30 +973,31 @@ } 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) { - return R.ok(); - } - return R.fail(); + List<ComActDiscussOptionUserDO> comActDiscussOptionUserDOList = new ArrayList<>(); + discussOptionIds.forEach(optionId -> { + ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO(); + comActDiscussOptionUserDO.setUserId(userId); + comActDiscussOptionUserDO.setDiscussOptionId(optionId); + comActDiscussOptionUserDO.setDiscussId(discussId); + comActDiscussOptionUserDAO.insert(comActDiscussOptionUserDO); + }); + return R.ok(); } /** @@ -1098,7 +1152,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,11 +1278,22 @@ return R.fail("只能公布或编辑自己发布的主题!"); } comActDiscussDO.setPublishResult(comActDiscussDTO.getPublishResult()); + comActDiscussDO.setStatus(4); int result = comActDiscussDAO.updateById(comActDiscussDO); if (result > 0) { return R.ok(); } return R.fail("网络错误,请重试!"); + } + + /** + * 一起议获取是否有发布权 + * @param comActDiscussDTO + * @return + */ + @Override + public R getDiscussPermissions(ComActDiscussDTO comActDiscussDTO) { + return R.ok(checkCurrentUserDiscussIdentity(comActDiscussDTO)); } /** @@ -1243,8 +1310,14 @@ //组装viewNum key List<String> viewNumKeys = new ArrayList<>(); Iterator<String> iterator = needWriteDiscussIdSet.iterator(); + List<String> idList = new ArrayList<>(); while (iterator.hasNext()) { - viewNumKeys.add(String.join("_", DISCUSS_VIEW_NUM_PREFIX, iterator.next())); + String next = iterator.next(); + String key = String.join("_", DISCUSS_VIEW_NUM_PREFIX, next); + if (stringRedisTemplate.hasKey(key)) { + idList.add(next); + viewNumKeys.add(key); + } } ValueOperations opsForValue = stringRedisTemplate.opsForValue(); @@ -1252,13 +1325,18 @@ //待处理集合,以key-value/discussId-viewNum 存放 HashMap<Long, Integer> needDealMap = new HashMap<>(); - for (String discussId : needWriteDiscussIdSet) { - try { - needDealMap.put(Long.parseLong(discussId), Integer.parseInt(viewNumList.get(0))); - viewNumList.remove(0); - } catch (IndexOutOfBoundsException e) { - //数据存在异常了,跳过,继续执行正确的 - continue; + if (nonNull(idList) && !idList.isEmpty()) { + log.error("一起议id列表:" + idList.toString()); + log.error("一起议浏览量:" + viewNumList.toString()); + for (String discussId : idList) { + try { + needDealMap.put(Long.parseLong(discussId), Integer.parseInt(viewNumList.get(0))); + viewNumList.remove(0); + } catch (IndexOutOfBoundsException e) { + log.error("数据异常:" + discussId, e.getMessage()); + //数据存在异常了,跳过,继续执行正确的 + continue; + } } } int result = comActDiscussDAO.batchUpdateViewNum(needDealMap); -- Gitblit v1.7.1