From 23c90bbf80577e8e3f4f227b5431a79fe5ebef6e Mon Sep 17 00:00:00 2001
From: yanghui <2536613402@qq.com>
Date: 星期一, 28 十一月 2022 15:20:57 +0800
Subject: [PATCH] Merge branch 'local_20221104' into huacheng_test
---
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java | 568 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 515 insertions(+), 53 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 fef0c1e..b009883 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,13 @@
import java.util.stream.Collectors;
import javax.annotation.Resource;
+import javax.validation.constraints.NotEmpty;
+import cn.hutool.core.util.DesensitizedUtil;
+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 +120,8 @@
private UserService userService;
@Resource
private StringRedisTemplate stringRedisTemplate;
+ @Resource
+ private ComPbMemberDAO pbMemberDAO;
/**
* 议事投票-新增
@@ -163,6 +171,7 @@
comActDiscussOptionDO.setDiscussId(comActDiscussDO1Id);
comActDiscussOptionDO.setOptionContent(s.getOptionContent());
comActDiscussOptionDO.setOptionUrl(s.getOptionUrl());
+ comActDiscussOptionDO.setNeedReason(s.getNeedReason());
comActDiscussOptionDOS.add(comActDiscussOptionDO);
});
comActDiscussOptionService.saveBatch(comActDiscussOptionDOS);
@@ -188,26 +197,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 +263,7 @@
} else {
comActDiscussDO.setStatus(ComActDiscussDO.status.yfb);
}
- comActDiscussDO.setUpdateAt(new Date());
+ comActDiscussDO.setUpdateAt(nowDate);
int insert = comActDiscussDAO.updateById(comActDiscussDO);
if (insert > 0) {
//如果是投票,需要把投票的选项存储
@@ -298,6 +311,7 @@
LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId);
comActDiscussVO.setUserName(loginUserInfoVO.getName());
comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName());
+ comActDiscussVO.setImageUrl(loginUserInfoVO.getImageUrl());
//分页查询评论列表
PageComActDiscussCommentDTO pageComActDiscussCommentDTO = new PageComActDiscussCommentDTO();
@@ -312,6 +326,60 @@
}
});
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);
+ }
+
+ /**
+ * 议事投票-详情 脱敏
+ *
+ * @param discussDetailDTO 请求参数
+ * @return ComActDiscussVO
+ */
+ @Override
+ public R detailDiscussDesensitize(ComActDiscussDetailDTO discussDetailDTO) {
+ Long id = discussDetailDTO.getId();
+ ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(id);
+ if (ObjectUtils.isEmpty(comActDiscussDO)) {
+ return R.fail("议事投票不存在");
+ }
+ ComActDiscussVO comActDiscussVO = new ComActDiscussVO();
+ BeanUtils.copyProperties(comActDiscussDO, comActDiscussVO);
+ comActDiscussVO.setSignNum(comActDiscussDO.getFabulousNum());
+ Integer type = comActDiscussVO.getType();
+ if (type.equals(ComActDiscussVO.type.tp)) {
+ //查询选项列表
+ List<ComActDiscussOptionVO> comActDiscussOptionList = comActDiscussOptionDAO.getDiscussOptionList(id);
+ comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionList);
+ }
+ Long userId = comActDiscussDO.getUserId();
+ LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId);
+ comActDiscussVO.setUserName(DesensitizedUtil.chineseName(loginUserInfoVO.getName()));
+ comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName());
+ comActDiscussVO.setImageUrl(loginUserInfoVO.getImageUrl());
+
+ //分页查询评论列表
+ PageComActDiscussCommentDTO pageComActDiscussCommentDTO = new PageComActDiscussCommentDTO();
+ BeanUtils.copyProperties(discussDetailDTO, pageComActDiscussCommentDTO);
+ IPage<ComActDiscussCommentVO> discussComments = comActDiscussDAO.pageDiscussCommentAdmin(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO);
+ discussComments.getRecords().forEach(comment -> {
+ if (comment.getReplyNum() > 0) {
+ List<ComActDiscussCommentVO> childList = comActDiscussDAO.getDiscussCommentReplyList(comment.getId());
+ if (!childList.isEmpty()) {
+ comment.setComActDiscussCommentVOList(childList);
+ }
+ }
+ });
+ 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);
}
@@ -392,7 +460,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);
}
/**
@@ -593,16 +673,28 @@
}
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)) {
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 =
@@ -616,6 +708,7 @@
// 判断选项是否已投票
int haveVote =
comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
+ votes.add(haveVote);
comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0);
}
comActDiscussOptionVOS.add(comActDiscussOptionVO);
@@ -623,6 +716,125 @@
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());
+ comActDiscussVO.setComActDiscussOptionUserVOList(comActDiscussOptionUserVOList);
+ //填充已参与投票人数
+ int votedPersonNum = comActDiscussOptionUserDAO.selectVotedPersonNum(comActDiscussVO.getId());
+ comActDiscussVO.setVotedPersonNum(votedPersonNum);
+ }
+
+ if (loginUserId != null) {
+ Integer integer = comActDiscussUserDAO.selectCount(new QueryWrapper<ComActDiscussUserDO>().lambda()
+ .eq(ComActDiscussUserDO::getDiscussId, comActDiscussVO.getId())
+ .eq(ComActDiscussUserDO::getUserId, loginUserId));
+ if (integer > 0) {
+ comActDiscussVO.setHaveSign(1);
+ } else {
+ comActDiscussVO.setHaveSign(0);
+ }
+ // 判断是否已经投票
+ int haveVote = comActDiscussOptionUserDAO.selectHaveVote(id, loginUserId);
+ comActDiscussVO.setHaveVote(haveVote > 0 ? 1 : 0);
+ }
+ });
+ }
+ return R.ok(iPage);
+ }
+
+ /**
+ * 议事投票-分页查询 小程序
+ *
+ * @param pageComActDiscussDTO 查询参数
+ * @return ComActDiscussVO 分页
+ */
+ @Override
+ public R pageDiscussAppletsDesensitize(PageComActDiscussDTO pageComActDiscussDTO) {
+ Page page = new Page<>();
+ Long pageNum = pageComActDiscussDTO.getPageNum();
+ Long pageSize = pageComActDiscussDTO.getPageSize();
+ Long loginUserId = pageComActDiscussDTO.getLoginUserId();
+ if (null == pageNum || 0 == pageNum) {
+ pageNum = 1l;
+ }
+ if (null == pageSize || 0 == pageSize) {
+ pageSize = 10l;
+ }
+ 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)) {
+ 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 =
+ comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>()
+ .lambda().eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
+ ComActDiscussOptionVO comActDiscussOptionVO = new ComActDiscussOptionVO();
+ BeanUtils.copyProperties(comActDiscussOptionDO, comActDiscussOptionVO);
+ comActDiscussOptionVO.setNum(selectCount);
+
+ if (loginUserId != null) {
+ // 判断选项是否已投票
+ int haveVote =
+ comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
+ votes.add(haveVote);
+ comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0);
+ }
+ comActDiscussOptionVOS.add(comActDiscussOptionVO);
+ });
+ 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);
+ }
+ }
+ comActDiscussVO.setUserName(DesensitizedUtil.chineseName(comActDiscussVO.getUserName()));
//填充投票记录列表
List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList = comActDiscussOptionUserDAO
.selectVotedRecords(comActDiscussVO.getId());
@@ -656,11 +868,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);
+ }
}
}
@@ -742,6 +956,104 @@
comActDiscussCommentVO1.setUserNameBack(userName);
comActDiscussCommentVO1.setUserNickNameBack(userNickName);
}
+ if (pageComActDiscussCommentDTO.getLoginUserId() != null
+ && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
+ Integer integer = comActDiscussCommentUserDAO
+ .selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
+ .eq(ComActDiscussCommentUserDO::getDisscussCommentId,
+ comActDiscussCommentVO1.getId())
+ .eq(ComActDiscussCommentUserDO::getUserId,
+ pageComActDiscussCommentDTO.getLoginUserId()));
+ if (integer > 0) {
+ comActDiscussCommentVO1.setHaveSign(1);
+ } else {
+ comActDiscussCommentVO1.setHaveSign(0);
+ }
+ }
+// if(StringUtils.isEmpty(comActDiscussCommentVO1.getUserNickNameBack())){
+// comActDiscussCommentVO1.setUserNickNameBack("社区管理员");
+// }
+ });
+ comActDiscussCommentVO.setComActDiscussCommentVOList(comActDiscussCommentVOList);
+ }
+ if (pageComActDiscussCommentDTO.getLoginUserId() != null
+ && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
+ Integer integer =
+ comActDiscussCommentUserDAO.selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
+ .eq(ComActDiscussCommentUserDO::getDisscussCommentId, comActDiscussCommentVO.getId())
+ .eq(ComActDiscussCommentUserDO::getUserId, pageComActDiscussCommentDTO.getLoginUserId()));
+ if (integer > 0) {
+ comActDiscussCommentVO.setHaveSign(1);
+ } else {
+ comActDiscussCommentVO.setHaveSign(0);
+ }
+ }
+
+ // 判断当前评论是否是社区管理员评论
+ if (!comActDiscussCommentVO.getUserType().equals(1)) {
+ comActDiscussCommentVO.setUserNickName("社区管理员");
+ }
+ });
+ }
+ return R.ok(iPage);
+ }
+
+ /**
+ * 议事投票-评论-分页查询 小程序
+ *
+ * @param pageComActDiscussCommentDTO 分页参数
+ * @return ComActDiscussCommentVO
+ */
+ @Override
+ public R pageDiscussCommentAppletsDesensitize(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
+ Page page = new Page<>();
+ Long pageNum = pageComActDiscussCommentDTO.getPageNum();
+ Long pageSize = pageComActDiscussCommentDTO.getPageSize();
+ if (null == pageNum || 0 == pageNum) {
+ pageNum = 1l;
+ }
+ if (null == pageSize || 0 == pageSize) {
+ pageSize = 10l;
+ }
+ page.setSize(pageSize);
+ page.setCurrent(pageNum);
+ IPage<ComActDiscussCommentVO> iPage =
+ comActDiscussDAO.pageDiscussCommentApplets(page, pageComActDiscussCommentDTO);
+ List<ComActDiscussCommentVO> records = iPage.getRecords();
+ if (!ObjectUtils.isEmpty(records)) {
+ records.forEach(comActDiscussCommentVO -> {
+ List<ComActDiscussCommentVO> comActDiscussCommentVOList = new ArrayList<>();
+ Long id = comActDiscussCommentVO.getId();
+ comActDiscussCommentVO.setPhone(DesensitizedUtil.mobilePhone(comActDiscussCommentVO.getPhone()));
+ comActDiscussCommentVO.setUserName(DesensitizedUtil.chineseName(comActDiscussCommentVO.getUserName()));
+ comActDiscussCommentVO.setUserNameBack(DesensitizedUtil.chineseName(comActDiscussCommentVO.getUserNameBack()));
+ comActDiscussCommentVOList = comActDiscussCommentDAO.selectChilds(id);
+ if (!ObjectUtils.isEmpty(comActDiscussCommentVOList)) {
+ List<ComActDiscussCommentVO> comActDiscussCommentVOS = comActDiscussCommentVOList;
+ comActDiscussCommentVOList.forEach(comActDiscussCommentVO1 -> {
+ Long parentId = comActDiscussCommentVO1.getParentId();
+ List<ComActDiscussCommentVO> collect = comActDiscussCommentVOS.stream()
+ .filter(comActDiscussCommentVO2 -> comActDiscussCommentVO2.getId().equals(parentId))
+ .collect(Collectors.toList());
+ if (!ObjectUtils.isEmpty(collect)) {
+ String userName = collect.get(0).getUserName();
+ String userNickName = collect.get(0).getUserNickName();
+ comActDiscussCommentVO1.setUserNameBack(userName);
+ comActDiscussCommentVO1.setUserNickNameBack(userNickName);
+ }
+ List<ComActDiscussCommentVO> collect1 = records.stream()
+ .filter(comActDiscussCommentVO2 -> comActDiscussCommentVO2.getId().equals(parentId))
+ .collect(Collectors.toList());
+ if (!ObjectUtils.isEmpty(collect1)) {
+ ComActDiscussCommentVO comActDiscussCommentVOFirst = collect1.get(0);
+ String userName = comActDiscussCommentVOFirst.getUserName();
+ String userNickName = comActDiscussCommentVOFirst.getUserNickName();
+ comActDiscussCommentVO1.setUserNameBack(userName);
+ comActDiscussCommentVO1.setUserNickNameBack(userNickName);
+ }
+ comActDiscussCommentVO1.setPhone(DesensitizedUtil.mobilePhone(comActDiscussCommentVO1.getPhone()));
+ comActDiscussCommentVO1.setUserName(DesensitizedUtil.chineseName(comActDiscussCommentVO1.getUserName()));
+ comActDiscussCommentVO1.setUserNameBack(DesensitizedUtil.chineseName(comActDiscussCommentVO1.getUserNameBack()));
if (pageComActDiscussCommentDTO.getLoginUserId() != null
&& !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
Integer integer = comActDiscussCommentUserDAO
@@ -872,7 +1184,108 @@
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);
+ }
+ /**
+ * 议事投票-详情 小程序 脱敏
+ *
+ * @param id 主键
+ * @param loginUserId 登录用户主键
+ * @return ComActDiscussVO
+ */
+ @Override
+ public R detailDiscussAppletsDesensitize(Long id, Long loginUserId) {
+ ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(id);
+ if (ObjectUtils.isEmpty(comActDiscussDO)) {
+ return R.fail("议事投票不存在");
+ }
+ ComActDiscussVO comActDiscussVO = new ComActDiscussVO();
+ BeanUtils.copyProperties(comActDiscussDO, comActDiscussVO);
+ comActDiscussVO.setSignNum(comActDiscussDO.getFabulousNum());
+ Integer type = comActDiscussVO.getType();
+ if (type.equals(2)) {
+ List<ComActDiscussOptionDO> comActDiscussOptionDOS = comActDiscussOptionDAO.selectList(
+ new QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, id));
+ List<ComActDiscussOptionVO> comActDiscussOptionVOS = new ArrayList<>();
+ ArrayList<Integer> votes = new ArrayList<>();
+ comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> {
+ Long discussOptionDOId = comActDiscussOptionDO.getId();
+ Integer selectCount =
+ comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>().lambda()
+ .eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
+ ComActDiscussOptionVO comActDiscussOptionVO = new ComActDiscussOptionVO();
+ BeanUtils.copyProperties(comActDiscussOptionDO, comActDiscussOptionVO);
+ comActDiscussOptionVO.setNum(selectCount);
+ if (loginUserId != null && !loginUserId.equals(0L)) {
+ // 判断选项是否已投票
+ int haveVote =
+ comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
+ votes.add(haveVote);
+ comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0);
+ }
+ comActDiscussOptionVOS.add(comActDiscussOptionVO);
+ });
+ fillThePercentAndSort(comActDiscussOptionVOS);
+ 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);
+ }
+ }
+ checkDiscussStatusIsCorrect(comActDiscussVO);
+ //填充投票记录列表
+ List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList = comActDiscussOptionUserDAO
+ .selectVotedRecords(comActDiscussVO.getId());
+ comActDiscussVO.setComActDiscussOptionUserVOList(comActDiscussOptionUserVOList);
+ //填充已参与投票人数
+ int votedPersonNum = comActDiscussOptionUserDAO.selectVotedPersonNum(comActDiscussVO.getId());
+ comActDiscussVO.setVotedPersonNum(votedPersonNum);
+ }
+ Long userId = comActDiscussDO.getUserId();
+ LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId);
+ if (loginUserInfoVO != null) {
+ comActDiscussVO.setUserName(DesensitizedUtil.chineseName(loginUserInfoVO.getName()));
+ if (StringUtils.isEmpty(loginUserInfoVO.getNickName())) {
+ comActDiscussVO.setUserNickName(DesensitizedUtil.chineseName(loginUserInfoVO.getName()));
+ } else {
+ comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName());
+ }
+ comActDiscussVO.setImageUrl(loginUserInfoVO.getImageUrl());
+ comActDiscussVO.setUserType(loginUserInfoVO.getType());
+ }
+ Long communityId = comActDiscussDO.getCommunityId();
+ Integer type1 = loginUserInfoVO.getType();
+ if (type1.intValue() > 1) {
+ ComActVO comActVO = comActDiscussDAO.selectCommunity(communityId);
+ comActDiscussVO.setUserName(comActVO.getName());
+ comActDiscussVO.setUserNickName(comActVO.getName());
+ }
+ if (loginUserId != null && !loginUserId.equals(0L)) {
+ ComActDiscussVO comActDiscussVO1 = comActDiscussDAO.selectHaveSignAndHaveVote(id, loginUserId);
+ 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);
}
@@ -899,13 +1312,14 @@
/**
* 议事投票-投票
*
- * @param comActDiscussOptionUserDTO 投票信息
+ * @param discussVoteOptionDTO 投票信息
* @return 投票结果
*/
@Override
- public R addDiscussOptionUser(ComActDiscussOptionUserDTO comActDiscussOptionUserDTO) {
- Long discussOptionId = comActDiscussOptionUserDTO.getDiscussOptionId();
- 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("选项不存在");
@@ -922,30 +1336,33 @@
}
boolean isRepeat = comActDiscussDO.getIsRepeat().intValue() == 1;
int usableVoteVotes = comActDiscussDO.getCount().intValue();
+ int currentVoteNum = options.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<>();
+ options.forEach(option -> {
+ ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO();
+ comActDiscussOptionUserDO.setUserId(userId);
+ comActDiscussOptionUserDO.setDiscussOptionId(option.getId());
+ comActDiscussOptionUserDO.setDiscussId(discussId);
+ comActDiscussOptionUserDO.setSignUrl(option.getSignUrl());
+ comActDiscussOptionUserDO.setReason(option.getReason());
+ comActDiscussOptionUserDAO.insert(comActDiscussOptionUserDO);
+ });
+ return R.ok();
}
/**
@@ -1226,11 +1643,45 @@
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));
+ }
+
+ /**
+ * 投票情况-分页查询
+ * @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));
}
/**
@@ -1247,8 +1698,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();
@@ -1256,13 +1713,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