From a2c467bb344c1289c66c058bce7ef0bc6c10903e Mon Sep 17 00:00:00 2001
From: 罗元桥 <2376770955@qq.com>
Date: 星期五, 17 九月 2021 18:19:09 +0800
Subject: [PATCH] Merge branch 'zzj' into 'test'

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java |   86 +++++++++++++++++++++++++++---------------
 1 files changed, 55 insertions(+), 31 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 9bdd2c7..979fe9b 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
@@ -188,26 +188,27 @@
             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;
+                }
+                boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role));
+                if (!result) {
+                    checkResult = false;
+                }
             }
         }
         return checkResult;
@@ -603,6 +604,7 @@
                     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 =
@@ -616,6 +618,7 @@
                             // 判断选项是否已投票
                             int haveVote =
                                     comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
+                            votes.add(haveVote);
                             comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0);
                         }
                         comActDiscussOptionVOS.add(comActDiscussOptionVO);
@@ -623,6 +626,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());
@@ -904,7 +921,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)) {
@@ -922,27 +940,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();
@@ -1224,6 +1247,7 @@
             return R.fail("只能公布或编辑自己发布的主题!");
         }
         comActDiscussDO.setPublishResult(comActDiscussDTO.getPublishResult());
+        comActDiscussDO.setStatus(4);
         int result = comActDiscussDAO.updateById(comActDiscussDO);
         if (result > 0) {
             return R.ok();

--
Gitblit v1.7.1