From f1bcbc43e988d0d1a91bea66a9ebbf6d601e48c0 Mon Sep 17 00:00:00 2001
From: yanghui <2536613402@qq.com>
Date: 星期四, 13 十月 2022 10:33:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/huacheng_test' into huacheng_test

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java |  164 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 114 insertions(+), 50 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 2dbcd46..122825f 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
@@ -17,7 +17,12 @@
 import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
+import javax.validation.constraints.NotEmpty;
 
+import com.panzhihua.common.model.dtos.community.ComActDiscussVoteOptionDTO;
+import com.panzhihua.common.model.dtos.community.DiscussVoteOptionDTO;
+import com.panzhihua.common.model.dtos.community.PageVoteSituationDTO;
+import com.panzhihua.service_community.dao.ComPbMemberDAO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.redis.connection.StringRedisConnection;
 import org.springframework.data.redis.core.RedisCallback;
@@ -114,6 +119,8 @@
     private UserService userService;
     @Resource
     private StringRedisTemplate stringRedisTemplate;
+    @Resource
+    private ComPbMemberDAO pbMemberDAO;
 
     /**
      * 议事投票-新增
@@ -163,6 +170,7 @@
                     comActDiscussOptionDO.setDiscussId(comActDiscussDO1Id);
                     comActDiscussOptionDO.setOptionContent(s.getOptionContent());
                     comActDiscussOptionDO.setOptionUrl(s.getOptionUrl());
+                    comActDiscussOptionDO.setNeedReason(s.getNeedReason());
                     comActDiscussOptionDOS.add(comActDiscussOptionDO);
                 });
                 comActDiscussOptionService.saveBatch(comActDiscussOptionDOS);
@@ -204,10 +212,13 @@
                 }
                 if (currentUserRoles.isEmpty()) {
                     checkResult = false;
-                }
-                boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role));
-                if (!result) {
-                    checkResult = false;
+                } else {
+                    if (!sysAllowedRoles.contains("1")) {
+                        boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role));
+                        if (!result) {
+                            checkResult = false;
+                        }
+                    }
                 }
             }
         }
@@ -251,7 +262,7 @@
         } else {
             comActDiscussDO.setStatus(ComActDiscussDO.status.yfb);
         }
-        comActDiscussDO.setUpdateAt(new Date());
+        comActDiscussDO.setUpdateAt(nowDate);
         int insert = comActDiscussDAO.updateById(comActDiscussDO);
         if (insert > 0) {
             //如果是投票,需要把投票的选项存储
@@ -299,6 +310,7 @@
         LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId);
         comActDiscussVO.setUserName(loginUserInfoVO.getName());
         comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName());
+        comActDiscussVO.setImageUrl(loginUserInfoVO.getImageUrl());
 
         //分页查询评论列表
         PageComActDiscussCommentDTO pageComActDiscussCommentDTO = new PageComActDiscussCommentDTO();
@@ -313,6 +325,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);
     }
 
@@ -393,7 +410,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);
     }
 
     /**
@@ -594,15 +623,23 @@
         }
         page.setSize(pageSize);
         page.setCurrent(pageNum);
+        pageComActDiscussDTO.setIsPbMember(0);
+        pageComActDiscussDTO.setIsVolunteer(0);
+        if (nonNull(loginUserId)) {
+            pageComActDiscussDTO.setIsPbMember(pbMemberDAO.checkIsPbMember(loginUserId) > 0 ? 1 : 0);
+            pageComActDiscussDTO.setIsVolunteer(pbMemberDAO.checkIsVolunteer(loginUserId) > 0 ? 1 : 0);
+        }
         IPage<ComActDiscussVO> iPage = comActDiscussDAO.pageDiscussApplets(page, pageComActDiscussDTO);
         List<ComActDiscussVO> records = iPage.getRecords();
         if (!ObjectUtils.isEmpty(records)) {
-            List<String> viewNumKeys = new ArrayList<>();
             records.forEach(comActDiscussVO -> {
                 Integer type = comActDiscussVO.getType();
                 Long id = comActDiscussVO.getId();
                 String viewNumKey = String.join("_", DISCUSS_VIEW_NUM_PREFIX, id.toString());
-                viewNumKeys.add(viewNumKey);
+                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));
@@ -666,17 +703,6 @@
                     comActDiscussVO.setHaveVote(haveVote > 0 ? 1 : 0);
                 }
             });
-            ValueOperations opsForValue = stringRedisTemplate.opsForValue();
-            List<String> viewNumList = opsForValue.multiGet(viewNumKeys);
-            for (ComActDiscussVO discussVO : records) {
-                try {
-                    discussVO.setViewsNum(Integer.parseInt(viewNumList.get(0)));
-                    viewNumList.remove(0);
-                } catch (IndexOutOfBoundsException e) {
-                    //数据存在异常了,跳过,继续执行正确的
-                    continue;
-                }
-            }
         }
         return R.ok(iPage);
     }
@@ -687,11 +713,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);
+            }
         }
     }
 
@@ -904,9 +932,11 @@
             comActDiscussVO.setHaveVote(comActDiscussVO1.getHaveVote());
         }
         String viewNumKey = String.join("_", DISCUSS_VIEW_NUM_PREFIX, id.toString());
-        ValueOperations opsForValue = stringRedisTemplate.opsForValue();
-        int viewNum = Integer.parseInt((String) opsForValue.get(viewNumKey));
-        comActDiscussVO.setViewsNum(viewNum);
+        if (stringRedisTemplate.hasKey(viewNumKey)) {
+            ValueOperations opsForValue = stringRedisTemplate.opsForValue();
+            int viewNum = Integer.parseInt((String) opsForValue.get(viewNumKey));
+            comActDiscussVO.setViewsNum(viewNum);
+        }
         return R.ok(comActDiscussVO);
     }
 
@@ -933,14 +963,14 @@
     /**
      * 议事投票-投票
      *
-     * @param comActDiscussOptionUserDTO 投票信息
+     * @param discussVoteOptionDTO 投票信息
      * @return 投票结果
      */
     @Override
-    public R addDiscussOptionUser(ComActDiscussOptionUserDTO comActDiscussOptionUserDTO) {
-        List<Long> discussOptionIds = comActDiscussOptionUserDTO.getDiscussOptionIds();
-        Long discussOptionId = discussOptionIds.get(0);
-        Long userId = comActDiscussOptionUserDTO.getUserId();
+    public R addDiscussOptionUser(DiscussVoteOptionDTO discussVoteOptionDTO) {
+        List<ComActDiscussVoteOptionDTO> options = discussVoteOptionDTO.getOptions();
+        Long discussOptionId = options.get(0).getId();
+        Long userId = discussVoteOptionDTO.getUserId();
         ComActDiscussOptionDO comActDiscussOptionDO = comActDiscussOptionDAO.selectById(discussOptionId);
         if (ObjectUtils.isEmpty(comActDiscussOptionDO)) {
             return R.fail("选项不存在");
@@ -957,7 +987,7 @@
         }
         boolean isRepeat = comActDiscussDO.getIsRepeat().intValue() == 1;
         int usableVoteVotes = comActDiscussDO.getCount().intValue();
-        int currentVoteNum = discussOptionIds.size();
+        int currentVoteNum = options.size();
         if (isRepeat) {
             //可重复投票
             int votedVotesInToday = comActDiscussOptionUserDAO.selectVotedVotesInToday(discussId, userId);
@@ -974,18 +1004,16 @@
             }
         }
         List<ComActDiscussOptionUserDO> comActDiscussOptionUserDOList = new ArrayList<>();
-        discussOptionIds.forEach(optionId -> {
+        options.forEach(option -> {
             ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO();
             comActDiscussOptionUserDO.setUserId(userId);
-            comActDiscussOptionUserDO.setDiscussOptionId(optionId);
+            comActDiscussOptionUserDO.setDiscussOptionId(option.getId());
             comActDiscussOptionUserDO.setDiscussId(discussId);
-            comActDiscussOptionUserDOList.add(comActDiscussOptionUserDO);
+            comActDiscussOptionUserDO.setSignUrl(option.getSignUrl());
+            comActDiscussOptionUserDO.setReason(option.getReason());
+            comActDiscussOptionUserDAO.insert(comActDiscussOptionUserDO);
         });
-        int result = comActDiscussOptionUserDAO.batchInsert(comActDiscussOptionUserDOList);
-        if (result > 0) {
-            return R.ok();
-        }
-        return R.fail();
+        return R.ok();
     }
 
     /**
@@ -1140,7 +1168,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);
@@ -1283,6 +1313,29 @@
     }
 
     /**
+     * 投票情况-分页查询
+     * @param pageVoteSituationDTO
+     * @return
+     */
+    @Override
+    public R pageVoteSituation(PageVoteSituationDTO pageVoteSituationDTO) {
+        Page page = new Page<>();
+        page.setCurrent(pageVoteSituationDTO.getPageNum());
+        page.setSize(pageVoteSituationDTO.getPageSize());
+        return R.ok(comActDiscussOptionUserDAO.pageVoteSituation(page, pageVoteSituationDTO));
+    }
+
+    /**
+     * 投票情况详情
+     * @param optionUserId
+     * @return
+     */
+    @Override
+    public R detailVoteSituation(Long optionUserId) {
+        return R.ok(comActDiscussOptionUserDAO.detailVoteSituation(optionUserId));
+    }
+
+    /**
      * 将redis中浏览量写入表中
      * @return 执行结果
      */
@@ -1296,8 +1349,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();
@@ -1305,13 +1364,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