101captain
2021-11-09 e7f03acfa5ee4ad4fd6d1ee9e9ae9a5655488f6d
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java
@@ -188,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;
@@ -250,7 +254,7 @@
        } else {
            comActDiscussDO.setStatus(ComActDiscussDO.status.yfb);
        }
        comActDiscussDO.setUpdateAt(new Date());
        comActDiscussDO.setUpdateAt(nowDate);
        int insert = comActDiscussDAO.updateById(comActDiscussDO);
        if (insert > 0) {
            //如果是投票,需要把投票的选项存储
@@ -459,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());
@@ -598,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 =
@@ -615,6 +626,7 @@
                            // 判断选项是否已投票
                            int haveVote =
                                    comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
                            votes.add(haveVote);
                            comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0);
                        }
                        comActDiscussOptionVOS.add(comActDiscussOptionVO);
@@ -622,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());
@@ -655,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);
            }
        }
    }
@@ -871,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);
    }
@@ -903,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)) {
@@ -921,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();
@@ -1099,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);
@@ -1223,6 +1264,7 @@
            return R.fail("只能公布或编辑自己发布的主题!");
        }
        comActDiscussDO.setPublishResult(comActDiscussDTO.getPublishResult());
        comActDiscussDO.setStatus(4);
        int result = comActDiscussDAO.updateById(comActDiscussDO);
        if (result > 0) {
            return R.ok();
@@ -1231,6 +1273,16 @@
    }
    /**
     * 一起议获取是否有发布权
     * @param comActDiscussDTO
     * @return
     */
    @Override
    public R getDiscussPermissions(ComActDiscussDTO comActDiscussDTO) {
        return R.ok(checkCurrentUserDiscussIdentity(comActDiscussDTO));
    }
    /**
     * 将redis中浏览量写入表中
     * @return 执行结果
     */