package com.panzhihua.service_community.service.impl; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; import static org.apache.commons.lang3.StringUtils.isBlank; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; 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; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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; import com.panzhihua.common.model.dtos.community.ComActDiscussOptionDTO; import com.panzhihua.common.model.dtos.community.ComActDiscussOptionUserDTO; import com.panzhihua.common.model.dtos.community.ComActDiscussUserDTO; 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; import com.panzhihua.common.model.vos.community.ComActDiscussOptionUserVO; 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; import com.panzhihua.service_community.dao.ComActDiscussCommentDAO; import com.panzhihua.service_community.dao.ComActDiscussCommentUserDAO; import com.panzhihua.service_community.dao.ComActDiscussDAO; 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; import lombok.extern.slf4j.Slf4j; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: 议事投票 * @author: huang.hongfa weixin hhf9596 qq 959656820 * @create: 2021-01-22 14:51 **/ @Service @Slf4j public class ComActDiscussServiceImpl implements ComActDiscussService { private static final String DISCUSS_VIEW_NUM_PREFIX = "DISCUSS_VIEW_NUM"; private static final String INCR_VIEW_DISCUSS_IDS_KEY = "INCR_VIEW_DISCUSS_IDS"; private static final long DISCUSS_EXPIRE_TIME = 2678400L; @Resource private ComActDiscussCommentDAO comActDiscussCommentDAO; @Resource private ComActDiscussDAO comActDiscussDAO; @Resource private ComActDiscussOptionUserDAO comActDiscussOptionUserDAO; @Resource private ComActDiscussUserDAO comActDiscussUserDAO; @Resource private ComActDiscussOptionDAO comActDiscussOptionDAO; @Resource private ComActDiscussCommentUserDAO comActDiscussCommentUserDAO; @Resource private ComActDiscussOptionService comActDiscussOptionService; @Resource private SysConfMapper sysConfDao; @Resource private SysConfService sysConfService; @Resource private UserService userService; @Resource private StringRedisTemplate stringRedisTemplate; @Resource private ComPbMemberDAO pbMemberDAO; /** * 议事投票-新增 * * @param comActDiscussDTO 新增参数 * @return 新增结果 */ @Override @Transactional(rollbackFor = Exception.class) public R addDiscuss(ComActDiscussDTO comActDiscussDTO) { if (!checkCurrentUserDiscussIdentity(comActDiscussDTO)) { return R.fail("权限验证失败,请确认是否有发布权限"); } ComActDiscussDO comActDiscussDO = new ComActDiscussDO(); BeanUtils.copyProperties(comActDiscussDTO, comActDiscussDO); Integer type = comActDiscussDTO.getType(); Date nowDate = new Date(); if (type.equals(ComActDiscussDO.type.tp)) {//判断是投票,需要转义时间 Date startTime = DateUtils.stringToDate(comActDiscussDTO.getStartTime(), DateUtils.ymdhms_format); Date endTime = DateUtils.stringToDate(comActDiscussDTO.getEndTime(), DateUtils.ymdhms_format); comActDiscussDO.setStartTime(startTime); comActDiscussDO.setEndTime(endTime); comActDiscussDO.setStatus(ComActDiscussDO.status.wks); //根据时间判断状态是否开始 if (startTime != null && startTime.getTime() <= nowDate.getTime()) { comActDiscussDO.setStatus(ComActDiscussDO.status.jxz); comActDiscussDO.setReleaseAt(nowDate); } } else { comActDiscussDO.setStatus(ComActDiscussDO.status.yfb); } String address = comActDiscussDO.getAddress(); if (ObjectUtils.isEmpty(address)) { //查询社区地址 ComActVO comActVO = comActDiscussDAO.selectCommunity(comActDiscussDTO.getCommunityId()); comActDiscussDO.setAddress(comActVO.getAddress()); } int insert = comActDiscussDAO.insert(comActDiscussDO); if (insert > 0) { //如果是投票,需要把投票的选项存储 if (type.equals(2)) { Long comActDiscussDO1Id = comActDiscussDO.getId(); List discussOptions = comActDiscussDTO.getDiscussOptions(); List comActDiscussOptionDOS = new ArrayList<>(); discussOptions.forEach(s -> { ComActDiscussOptionDO comActDiscussOptionDO = new ComActDiscussOptionDO(); comActDiscussOptionDO.setDiscussId(comActDiscussDO1Id); comActDiscussOptionDO.setOptionContent(s.getOptionContent()); comActDiscussOptionDO.setOptionUrl(s.getOptionUrl()); comActDiscussOptionDO.setNeedReason(s.getNeedReason()); comActDiscussOptionDOS.add(comActDiscussOptionDO); }); comActDiscussOptionService.saveBatch(comActDiscussOptionDOS); } return R.ok(); } return R.fail(); } /** * 小程序用户验证是否拥有发布权限 * @param comActDiscussDTO * @return */ private boolean checkCurrentUserDiscussIdentity(ComActDiscussDTO comActDiscussDTO) { //小程序用户验证是否拥有发布权限 boolean checkResult = true; Boolean isApplets = comActDiscussDTO.getIsApplets(); if (nonNull(isApplets) && isApplets) { String discussIdentityPrefix = "DISCUSS_IDENTITY_"; Long communityId = comActDiscussDTO.getCommunityId(); R sysConfValue = sysConfService.getSysConfValue(discussIdentityPrefix + communityId, communityId); String discussIdentityConfig = (String) sysConfValue.getData(); if (isBlank(discussIdentityConfig)) { checkResult = false; } else { List currentUserRoles = new ArrayList<>(); List 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; } /** * 议事投票-编辑 * * @param comActDiscussDTO 请求参数 * @return 编辑结果 */ @Override @Transactional(rollbackFor = Exception.class) public R editDiscuss(ComActDiscussDTO comActDiscussDTO) { Long comActDiscussDO1Id = comActDiscussDTO.getId(); ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(comActDiscussDO1Id); if (ObjectUtils.isEmpty(comActDiscussDO)) { return R.fail("议事投票不存在"); } if (!comActDiscussDO.getStatus().equals(ComActDiscussDO.status.wks) && !comActDiscussDO.getStatus().equals(ComActDiscussDO.status.yfb)) { return R.fail("该状态不可修改"); } Integer type = comActDiscussDO.getType(); Integer isRepeat = comActDiscussDO.getIsRepeat(); BeanUtils.copyProperties(comActDiscussDTO, comActDiscussDO); comActDiscussDO.setType(type); comActDiscussDO.setIsRepeat(isRepeat); Date nowDate = new Date(); if (type.equals(ComActDiscussDO.type.tp)) {//判断是投票,需要转义时间 Date startTime = DateUtils.stringToDate(comActDiscussDTO.getStartTime(), DateUtils.ymdhms_format); Date endTime = DateUtils.stringToDate(comActDiscussDTO.getEndTime(), DateUtils.ymdhms_format); comActDiscussDO.setStartTime(startTime); comActDiscussDO.setEndTime(endTime); comActDiscussDO.setStatus(ComActDiscussDO.status.wks); //根据时间判断状态是否开始 if (startTime != null && startTime.getTime() <= nowDate.getTime()) { comActDiscussDO.setStatus(ComActDiscussDO.status.jxz); comActDiscussDO.setReleaseAt(nowDate); } } else { comActDiscussDO.setStatus(ComActDiscussDO.status.yfb); } comActDiscussDO.setUpdateAt(nowDate); int insert = comActDiscussDAO.updateById(comActDiscussDO); if (insert > 0) { //如果是投票,需要把投票的选项存储 if (type.equals(2)) { comActDiscussOptionService.remove(new QueryWrapper().lambda() .eq(ComActDiscussOptionDO::getDiscussId, comActDiscussDO1Id)); List comActDiscussOptionDOS = new ArrayList<>(); comActDiscussDTO.getDiscussOptions().forEach(s -> { ComActDiscussOptionDO comActDiscussOptionDO = new ComActDiscussOptionDO(); comActDiscussOptionDO.setDiscussId(comActDiscussDO1Id); comActDiscussOptionDO.setOptionContent(s.getOptionContent()); comActDiscussOptionDO.setOptionUrl(s.getOptionUrl()); comActDiscussOptionDOS.add(comActDiscussOptionDO); }); comActDiscussOptionService.saveBatch(comActDiscussOptionDOS); } return R.ok(); } return R.fail(); } /** * 议事投票-详情 * * @param discussDetailDTO 请求参数 * @return ComActDiscussVO */ @Override public R detailDiscuss(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(); Integer num=comActDiscussDAO.getCommentNum(id+""); comActDiscussVO.setCommentNum(num); if (type.equals(ComActDiscussVO.type.tp)) { //查询选项列表 List comActDiscussOptionList = comActDiscussOptionDAO.getDiscussOptionList(id); comActDiscussOptionList.forEach(option -> { if (option.getAllNum() ==null || option.getAllNum() == 0) { option.setPercent(new BigDecimal(0)); } else { //占比 BigDecimal percent = BigDecimal.valueOf(option.getNum()).divide(BigDecimal.valueOf(option.getAllNum()), 2, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(100)).setScale(0); option.setPercent(percent); } }); comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionList); } Long userId = comActDiscussDO.getUserId(); LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId); comActDiscussVO.setUserName(loginUserInfoVO.getName()); comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName()); comActDiscussVO.setImageUrl(loginUserInfoVO.getImageUrl()); //分页查询评论列表 PageComActDiscussCommentDTO pageComActDiscussCommentDTO = new PageComActDiscussCommentDTO(); BeanUtils.copyProperties(discussDetailDTO, pageComActDiscussCommentDTO); IPage discussComments = comActDiscussDAO.pageDiscussCommentAdmin(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO); discussComments.getRecords().forEach(comment -> { if (comment.getReplyNum() > 0) { List 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 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(); Integer num=comActDiscussDAO.getCommentNum(id+""); comActDiscussVO.setCommentNum(num); if (type.equals(ComActDiscussVO.type.tp)) { //查询选项列表 List comActDiscussOptionList = comActDiscussOptionDAO.getDiscussOptionList(id); comActDiscussOptionList.forEach(option -> { if (option.getAllNum() ==null || option.getAllNum() == 0) { option.setPercent(new BigDecimal(0)); } else { //占比 BigDecimal percent = BigDecimal.valueOf(option.getNum()).divide(BigDecimal.valueOf(option.getAllNum()), 2, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(100)).setScale(0); option.setPercent(percent); } }); 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 discussComments = comActDiscussDAO.pageDiscussCommentAdmin(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO); discussComments.getRecords().forEach(comment -> { if (comment.getReplyNum() > 0) { List 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 opsForValue = stringRedisTemplate.opsForValue(); comActDiscussVO.setViewsNum(Integer.parseInt(opsForValue.get(viewNumKey))); } return R.ok(comActDiscussVO); } /** * 议事投票-删除 * * @param id 主键 * @return 删除结果 */ @Override public R deleteDiscuss(Long id) { ComActDiscussDO comActDiscussDO = new ComActDiscussDO(); comActDiscussDO.setId(id); comActDiscussDO.setIsDel(ComActDiscussDO.isOk.yes); if (comActDiscussDAO.updateById(comActDiscussDO) > 0) { comActDiscussDAO.incrCommentAndJoinNumById(id, false,false); return R.ok(); } return R.fail(); } /** * 议事投票-回复 * * @param comActDiscussCommentDTO 评论内容 * @return 回复结果 */ @Override public R addDiscussComment(ComActDiscussCommentDTO comActDiscussCommentDTO) { Long discussId = comActDiscussCommentDTO.getDiscussId(); ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(discussId); if (ObjectUtils.isEmpty(comActDiscussDO)) { return R.fail("议事投票不存在"); } Long currentUser = comActDiscussCommentDTO.getUserId(); //判断当前用户是否参与过评论 int currentUserCommentCount = comActDiscussCommentDAO.selectCount(new QueryWrapper() .lambda().eq(ComActDiscussCommentDO::getDiscussId, discussId).eq(ComActDiscussCommentDO::getUserId, currentUser)); ComActDiscussCommentDO comActDiscussCommentDO = new ComActDiscussCommentDO(); BeanUtils.copyProperties(comActDiscussCommentDTO, comActDiscussCommentDO); Long discussUser = comActDiscussDO.getUserId(); if (currentUser.equals(discussUser)) { comActDiscussCommentDO.setIsAuthor(1); } int insert = comActDiscussCommentDAO.insert(comActDiscussCommentDO); if (insert > 0) { // comActDiscussDAO.addCommentCount(discussId, 1); //评论成功,评论总数+1 //若首次参与评论,参与讨论人数+1 if (currentUserCommentCount > 0) { comActDiscussDAO.incrCommentAndJoinNumById(discussId, false,true); } else { comActDiscussDAO.incrCommentAndJoinNumById(discussId, true,true); } return R.ok(); } return R.fail(); } /** * 议事投票-分页查询 * * @param pageComActDiscussDTO 查询参数 * @return ComActDiscussVO */ @Override public R pageDiscuss(PageComActDiscussDTO pageComActDiscussDTO) { IPage iPage = comActDiscussDAO.pageDiscuss(new Page<>(pageComActDiscussDTO.getPageNum(), pageComActDiscussDTO.getPageSize()), pageComActDiscussDTO); return R.ok(iPage); } /** * 议事投票-后台分页查询 * * @param pageComActDiscussDTO 请求参数 * @return 议事投票列表 */ @Override public R pageDiscussAdmin(PageComActDiscussDTO pageComActDiscussDTO) { IPage comActDiscussVOIPage=comActDiscussDAO.pageDiscussAdmin(new Page<>(pageComActDiscussDTO.getPageNum(), pageComActDiscussDTO.getPageSize()), pageComActDiscussDTO); List 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 opsForValue = stringRedisTemplate.opsForValue(); comActDiscussVO.setViewsNum(Integer.parseInt(opsForValue.get(viewNumKey))); } }); } return R.ok(comActDiscussVOIPage); } /** * 议事投票-评论-查看 * * @param id 主键 * @return 详情 ComActDiscussCommentVO */ @Override public R detailDiscusscomment(Long id) { ComActDiscussCommentDO comActDiscussCommentDO = comActDiscussCommentDAO.selectById(id); if (ObjectUtils.isEmpty(comActDiscussCommentDO)) { return R.fail("评论不存在"); } ComActDiscussCommentVO comActDiscussCommentVO = new ComActDiscussCommentVO(); Long parentId = comActDiscussCommentDO.getParentId(); if (parentId.intValue() == 0) { // 一级评论 BeanUtils.copyProperties(comActDiscussCommentDO, comActDiscussCommentVO); } else { ComActDiscussCommentDO comActDiscussCommentDO1 = comActDiscussCommentDAO.selectById(parentId); BeanUtils.copyProperties(comActDiscussCommentDO1, comActDiscussCommentVO); comActDiscussCommentVO.setCommentBack(comActDiscussCommentDO.getComment()); comActDiscussCommentVO.setTimeBack(comActDiscussCommentDO.getCreateAt()); comActDiscussCommentVO.setParentId(parentId); } Integer count = comActDiscussCommentUserDAO.selectCount(new QueryWrapper().lambda() .eq(ComActDiscussCommentUserDO::getDisscussCommentId, id)); comActDiscussCommentVO.setNum(count); LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(comActDiscussCommentDO.getUserId()); comActDiscussCommentVO.setUserName(loginUserInfoVO.getName()); comActDiscussCommentVO.setPhone(loginUserInfoVO.getPhone()); return R.ok(comActDiscussCommentVO); } /** * 议事投票评论详情 * * @param pageComActDiscussCommentDTO 请求参数 * @return 议事投票详情 */ @Override public R detailDiscussCommentAdmin(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) { Long id = pageComActDiscussCommentDTO.getId(); ComActDiscussCommentDO comActDiscussCommentDO = comActDiscussCommentDAO.selectById(id); if (ObjectUtils.isEmpty(comActDiscussCommentDO)) { return R.fail("评论不存在"); } ComActDiscussCommentVO comActDiscussCommentVO = new ComActDiscussCommentVO(); Long parentId = comActDiscussCommentDO.getParentId(); if (parentId.intValue() == 0) { // 一级评论 BeanUtils.copyProperties(comActDiscussCommentDO, comActDiscussCommentVO); } else { ComActDiscussCommentDO comActDiscussCommentDO1 = comActDiscussCommentDAO.selectById(parentId); BeanUtils.copyProperties(comActDiscussCommentDO1, comActDiscussCommentVO); comActDiscussCommentVO.setCommentBack(comActDiscussCommentDO.getComment()); comActDiscussCommentVO.setTimeBack(comActDiscussCommentDO.getCreateAt()); comActDiscussCommentVO.setParentId(parentId); } Integer count = comActDiscussCommentUserDAO.selectCount(new QueryWrapper().lambda() .eq(ComActDiscussCommentUserDO::getDisscussCommentId, id)); comActDiscussCommentVO.setNum(count); LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(comActDiscussCommentDO.getUserId()); comActDiscussCommentVO.setUserName(loginUserInfoVO.getName()); comActDiscussCommentVO.setPhone(loginUserInfoVO.getPhone()); comActDiscussCommentVO.setImageUrl(loginUserInfoVO.getImageUrl()); //查询该评论下所有回复内容 IPage discussCommentList = comActDiscussCommentDAO.getDiscussCommentList(new Page(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO.getId()); if (!discussCommentList.getRecords().isEmpty()) { comActDiscussCommentVO.setComActDiscussCommentVOList(discussCommentList.getRecords()); } return R.ok(comActDiscussCommentVO); } /** * 议事投票-评论-置顶 * * @param id 主键 * @return 置顶结果 */ @Override public R putDiscussCommentTop(Long id) { ComActDiscussCommentDO comActDiscussCommentDO = comActDiscussCommentDAO.selectById(id); if (ObjectUtils.isEmpty(comActDiscussCommentDO)) { return R.fail("评论不存在"); } Long parentId = comActDiscussCommentDO.getParentId(); if (parentId.intValue() != 0) { return R.fail("二级评论不能置顶"); } Long discussId = comActDiscussCommentDO.getDiscussId(); ComActDiscussCommentDO comActDiscussCommentDO1 = new ComActDiscussCommentDO(); comActDiscussCommentDO1.setIsTopping(0); comActDiscussCommentDAO.update(comActDiscussCommentDO1, new UpdateWrapper().lambda().eq(ComActDiscussCommentDO::getDiscussId, discussId)); comActDiscussCommentDO1.setIsTopping(1); comActDiscussCommentDO1.setId(id); int update = comActDiscussCommentDAO.updateById(comActDiscussCommentDO1); if (update > 0) { return R.ok(); } return R.fail(); } /** * 议事投票-评论-回复 * * @param comActDiscussCommentDTO 回复内容 * @return 回复结果 */ @Override public R addDiscussCommentBack(ComActDiscussCommentDTO comActDiscussCommentDTO) { Long id = comActDiscussCommentDTO.getId(); ComActDiscussCommentDO comActDiscussCommentDO = comActDiscussCommentDAO.selectById(id); if (ObjectUtils.isEmpty(comActDiscussCommentDO)) { return R.fail("评论不存在"); } Long discussId = comActDiscussCommentDO.getDiscussId(); ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(discussId); if (ObjectUtils.isEmpty(comActDiscussDO)) { return R.fail("议事投票不存在"); } Long parentId = comActDiscussCommentDO.getParentId(); if (parentId.intValue() != 0) { return R.fail("二级评论不能回复"); } Long currentUser = comActDiscussCommentDTO.getUserId(); //判断当前用户是否参与过评论/回复 int currentUserCommentCount = comActDiscussCommentDAO.selectCount(new QueryWrapper() .lambda().eq(ComActDiscussCommentDO::getDiscussId, discussId).eq(ComActDiscussCommentDO::getUserId, currentUser)); Long discussUser = comActDiscussDO.getUserId(); ComActDiscussCommentDO comActDiscussCommentDO1 = new ComActDiscussCommentDO(); comActDiscussCommentDO1.setDiscussId(discussId); comActDiscussCommentDO1.setComment(comActDiscussCommentDTO.getComment()); comActDiscussCommentDO1.setUserId(comActDiscussCommentDTO.getUserId()); comActDiscussCommentDO1.setParentId(id); if (discussUser.equals(currentUser)) { comActDiscussCommentDO1.setIsAuthor(1); } int insert = comActDiscussCommentDAO.insert(comActDiscussCommentDO1); if (insert > 0) { // comActDiscussDAO.addCommentCount(discussId, 1); //回复成功,评论总数+1 //若首次参与评论,参与讨论人数+1 if (currentUserCommentCount > 0) { comActDiscussDAO.incrCommentAndJoinNumById(discussId, false,true); } else { comActDiscussDAO.incrCommentAndJoinNumById(discussId, true,true); } return R.ok(); } return R.fail(); } /** * 议事投票-评论-分页查询 * * @param pageComActDiscussCommentDTO 分页查询参数 * @return ComActDiscussCommentVO */ @Override public R pageDiscussComment(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) { IPage iPage = comActDiscussDAO.pageDiscussComment(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO); return R.ok(iPage); } /** * 议事投票-评论-后台分页查询 * * @param pageComActDiscussCommentDTO 分页查询参数 * @return ComActDiscussCommentVO */ @Override public R pageDiscussCommentAdmin(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) { IPage iPage = comActDiscussDAO.pageDiscussCommentAdmin(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO); return R.ok(iPage); } @Override public R deleteId(String id) { return R.ok(comActDiscussDAO.deleteId(id)); } /** * 议事投票-分页查询 小程序 * * @param pageComActDiscussDTO 查询参数 * @return ComActDiscussVO 分页 */ @Override public R pageDiscussApplets(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 iPage = comActDiscussDAO.pageDiscussApplets(page, pageComActDiscussDTO); List 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 opsForValue = stringRedisTemplate.opsForValue(); comActDiscussVO.setViewsNum(Integer.parseInt(opsForValue.get(viewNumKey))); } if (type.equals(2)) { List comActDiscussOptionDOS = comActDiscussOptionDAO.selectList( new QueryWrapper().lambda().eq(ComActDiscussOptionDO::getDiscussId, id)); List comActDiscussOptionVOS = new ArrayList<>(); List votes = new ArrayList<>(); comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> { Long discussOptionDOId = comActDiscussOptionDO.getId(); Integer selectCount = comActDiscussOptionUserDAO.selectCount(new QueryWrapper() .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); } } //填充投票记录列表 List 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().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 iPage = comActDiscussDAO.pageDiscussApplets(page, pageComActDiscussDTO); List 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 opsForValue = stringRedisTemplate.opsForValue(); comActDiscussVO.setViewsNum(Integer.parseInt(opsForValue.get(viewNumKey))); } if (type.equals(2)) { List comActDiscussOptionDOS = comActDiscussOptionDAO.selectList( new QueryWrapper().lambda().eq(ComActDiscussOptionDO::getDiscussId, id)); List comActDiscussOptionVOS = new ArrayList<>(); List votes = new ArrayList<>(); comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> { Long discussOptionDOId = comActDiscussOptionDO.getId(); Integer selectCount = comActDiscussOptionUserDAO.selectCount(new QueryWrapper() .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 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().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); } /** * 判断discuss状态是否正确 * @param comActDiscussVO */ private void checkDiscussStatusIsCorrect(ComActDiscussVO comActDiscussVO) { //判断discuss状态是否正确 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); } } } /** * 议事投票-点赞、取消点赞 * * @param comActDiscussUserDTO 操作类型 * @return 操作结果 */ @Override public R putDiscussUser(ComActDiscussUserDTO comActDiscussUserDTO) { Integer type = comActDiscussUserDTO.getType(); int num = 0; ComActDiscussUserDO comActDiscussUserDO = new ComActDiscussUserDO(); BeanUtils.copyProperties(comActDiscussUserDTO, comActDiscussUserDO); boolean isIncr = type.intValue() == 1; if (isIncr) { num = comActDiscussUserDAO.insert(comActDiscussUserDO); } else { num = comActDiscussUserDAO.delete(new QueryWrapper().lambda() .eq(ComActDiscussUserDO::getUserId, comActDiscussUserDTO.getUserId()) .eq(ComActDiscussUserDO::getDiscussId, comActDiscussUserDTO.getDiscussId())); } if (num > 0) { //点赞成功 总数+1 || 取消点赞成功 总数-1 comActDiscussDAO.incrOrDecrFabulousNumByType(comActDiscussUserDTO.getDiscussId(), isIncr); return R.ok(); } return R.fail(); } /** * 议事投票-评论-分页查询 小程序 * * @param pageComActDiscussCommentDTO 分页参数 * @return ComActDiscussCommentVO */ @Override public R pageDiscussCommentApplets(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 iPage = comActDiscussDAO.pageDiscussCommentApplets(page, pageComActDiscussCommentDTO); List records = iPage.getRecords(); if (!ObjectUtils.isEmpty(records)) { records.forEach(comActDiscussCommentVO -> { List comActDiscussCommentVOList = new ArrayList<>(); Long id = comActDiscussCommentVO.getId(); comActDiscussCommentVOList = comActDiscussCommentDAO.selectChilds(id); if (!ObjectUtils.isEmpty(comActDiscussCommentVOList)) { List comActDiscussCommentVOS = comActDiscussCommentVOList; comActDiscussCommentVOList.forEach(comActDiscussCommentVO1 -> { Long parentId = comActDiscussCommentVO1.getParentId(); List 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 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); } if (pageComActDiscussCommentDTO.getLoginUserId() != null && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) { Integer integer = comActDiscussCommentUserDAO .selectCount(new QueryWrapper().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().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 iPage = comActDiscussDAO.pageDiscussCommentApplets(page, pageComActDiscussCommentDTO); List records = iPage.getRecords(); if (!ObjectUtils.isEmpty(records)) { records.forEach(comActDiscussCommentVO -> { List 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 comActDiscussCommentVOS = comActDiscussCommentVOList; comActDiscussCommentVOList.forEach(comActDiscussCommentVO1 -> { Long parentId = comActDiscussCommentVO1.getParentId(); List 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 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 .selectCount(new QueryWrapper().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().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 id 主键 * @param loginUserId 登录用户主键 * @return ComActDiscussVO */ @Override public R detailDiscussApplets(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(); Integer num=comActDiscussDAO.getCommentNum(id+""); comActDiscussVO.setCommentNum(num); if (type.equals(2)) { List comActDiscussOptionDOS = comActDiscussOptionDAO.selectList( new QueryWrapper().lambda().eq(ComActDiscussOptionDO::getDiscussId, id)); List comActDiscussOptionVOS = new ArrayList<>(); ArrayList votes = new ArrayList<>(); comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> { Long discussOptionDOId = comActDiscussOptionDO.getId(); Integer selectCount = comActDiscussOptionUserDAO.selectCount(new QueryWrapper().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 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(loginUserInfoVO.getName()); if (StringUtils.isEmpty(loginUserInfoVO.getNickName())) { comActDiscussVO.setUserNickName(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); } /** * 议事投票-详情 小程序 脱敏 * * @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(); Integer num=comActDiscussDAO.getCommentNum(id+""); comActDiscussVO.setCommentNum(num); if (type.equals(2)) { List comActDiscussOptionDOS = comActDiscussOptionDAO.selectList( new QueryWrapper().lambda().eq(ComActDiscussOptionDO::getDiscussId, id)); List comActDiscussOptionVOS = new ArrayList<>(); ArrayList votes = new ArrayList<>(); comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> { Long discussOptionDOId = comActDiscussOptionDO.getId(); Integer selectCount = comActDiscussOptionUserDAO.selectCount(new QueryWrapper().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 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); } /** * 计算投票占比以及排序 * @param comActDiscussOptionVOS */ private void fillThePercentAndSort(List comActDiscussOptionVOS) { //填充总票数 int allSum = comActDiscussOptionVOS.stream().mapToInt(ComActDiscussOptionVO::getNum).sum(); comActDiscussOptionVOS.forEach(option -> { if (allSum == 0) { option.setPercent(new BigDecimal(0)); } else { //占比 BigDecimal percent = BigDecimal.valueOf(option.getNum()).divide(BigDecimal.valueOf(allSum), 2, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(100)).setScale(0); option.setPercent(percent); } }); comActDiscussOptionVOS.sort(Comparator.comparing(ComActDiscussOptionVO::getNum).reversed()); } /** * 议事投票-投票 * * @param discussVoteOptionDTO 投票信息 * @return 投票结果 */ @Override public R addDiscussOptionUser(DiscussVoteOptionDTO discussVoteOptionDTO) { List 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("选项不存在"); } // Long discussId = comActDiscussOptionDO.getDiscussId(); // List comActDiscussOptionDOS = comActDiscussOptionDAO.selectList(new // QueryWrapper().lambda().eq(ComActDiscussOptionDO::getDiscussId, discussId)); // List longList=comActDiscussOptionDOS.stream().map(comActDiscussOptionDO1 -> // comActDiscussOptionDO1.getId()).collect(Collectors.toList()); Long discussId = comActDiscussOptionDO.getDiscussId(); ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(comActDiscussOptionDO.getDiscussId()); if (isNull(comActDiscussOptionDO)) { return R.fail("投票主题不存在"); } 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 || currentVoteNum > usableVoteVotes - votedVotesInToday) { return R.fail("票数不足"); } } else { //不可重复投票 int alreadyVotedVotes = comActDiscussOptionUserDAO.selectCount( new QueryWrapper().lambda().eq(ComActDiscussOptionUserDO::getUserId, userId) .eq(ComActDiscussOptionUserDO::getDiscussId, discussId)); if (usableVoteVotes <= alreadyVotedVotes || currentVoteNum > usableVoteVotes - alreadyVotedVotes) { return R.fail("票数不足"); } } List 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(); } /** * 议事投票-评论-点赞、取消点赞 * * @param comActDiscussCommentUserDTO 评论点赞 * @return 点赞结果 */ @Override public R putDiscussCommentUser(ComActDiscussCommentUserDTO comActDiscussCommentUserDTO) { ComActDiscussCommentDO comActDiscussCommentDO = comActDiscussCommentDAO.selectById(comActDiscussCommentUserDTO.getId()); if (ObjectUtils.isEmpty(comActDiscussCommentDO)) { return R.fail("评论不存在"); } Integer type = comActDiscussCommentUserDTO.getType(); int num = 0; if (type.intValue() == 1) { ComActDiscussCommentUserDO comActDiscussCommentUserDO = new ComActDiscussCommentUserDO(); comActDiscussCommentUserDO.setUserId(comActDiscussCommentUserDTO.getUserId()); comActDiscussCommentUserDO.setDisscussCommentId(comActDiscussCommentUserDTO.getId()); num = comActDiscussCommentUserDAO.insert(comActDiscussCommentUserDO); } else { num = comActDiscussCommentUserDAO.delete(new QueryWrapper().lambda() .eq(ComActDiscussCommentUserDO::getUserId, comActDiscussCommentUserDTO.getUserId()) .eq(ComActDiscussCommentUserDO::getDisscussCommentId, comActDiscussCommentUserDTO.getId())); } if (num > 0) { return R.ok(); } return R.fail(); } /** * 工作大屏-议事投票列表 * * @param discussListDTO 请求参数 * @return 议事投票列表 */ @Override public R getScreenDiscussList(ScreenDiscussListDTO discussListDTO) { IPage discussListVOIPage = comActDiscussDAO .getScreenDiscussList(new Page(discussListDTO.getPageNum(), discussListDTO.getPageSize()), discussListDTO); if (!discussListVOIPage.getRecords().isEmpty()) { discussListVOIPage.getRecords().forEach(discussListVO -> { // 查询评论数量和点赞数量 Integer integer = comActDiscussCommentDAO.selectCount(new QueryWrapper() .lambda().eq(ComActDiscussCommentDO::getDiscussId, discussListVO.getId())); discussListVO.setCommentCount(integer); Integer integer1 = comActDiscussUserDAO.selectCount(new QueryWrapper().lambda() .eq(ComActDiscussUserDO::getDiscussId, discussListVO.getId())); discussListVO.setFabulousCount(integer1); if (discussListVO.getType().equals(ScreenDiscussListDTO.type.tp)) {// 投票 List discussOptionList = comActDiscussDAO.getScreenDiscussOptionList(discussListVO.getId()); if (!discussOptionList.isEmpty()) { discussListVO.setDiscussOptionList(discussOptionList); } } }); } return R.ok(discussListVOIPage); } /** * 议事投票后台公布结果 * * @param publishResultDTO 请求参数 * @return 公布结果 */ @Override public R publishResultAdmin(ComActDiscussPublishResultDTO publishResultDTO) { ComActDiscussDO discussDO = comActDiscussDAO.selectById(publishResultDTO.getId()); if (discussDO == null) { return R.fail("议事投票记录不存在"); } Date nowDate = new Date(); if (publishResultDTO.getType().equals(ComActDiscussPublishResultDTO.type.add)) { if (!discussDO.getStatus().equals(ComActDiscussDO.status.dgb)) { return R.fail("该议事投票不是待公布状态,不可公布结果操作"); } discussDO.setStatus(ComActDiscussDO.status.ygb); } discussDO.setPublishAt(nowDate); discussDO.setPublishResult(publishResultDTO.getResult()); discussDO.setUpdateAt(nowDate); discussDO.setPublishBy(publishResultDTO.getUserId()); if (comActDiscussDAO.updateById(discussDO) > 0) { return R.ok(); } return R.fail(); } /** * 议事投票-评论/回复删除 * * @param id 评论/回复id * @return 删除结果 */ @Override public R deleteDiscussCommentAdmin(Long id) { ComActDiscussCommentDO discussCommentDO = comActDiscussCommentDAO.selectById(id); if (discussCommentDO == null) { return R.fail("未查询到该记录"); } if (discussCommentDO.getIsDel().equals(ComActDiscussCommentDO.isDelete.yes)) { return R.fail("该记录已被删除"); } discussCommentDO.setIsDel(ComActDiscussCommentDO.isDelete.yes); if (comActDiscussCommentDAO.updateById(discussCommentDO) > 0) { ComActDiscussDO discussDO = comActDiscussDAO.selectById(discussCommentDO.getDiscussId()); if (discussDO != null) { if (discussDO.getCommentNum() > 0) { if (discussCommentDO.getParentId().equals(0L)) { Integer count = comActDiscussCommentDAO.selectCount(new QueryWrapper().lambda() .eq(ComActDiscussCommentDO::getParentId, id).eq(ComActDiscussCommentDO::getIsDel, ComActDiscussCommentDO.isDelete.no)); if (count != null && count > 0 && discussDO.getCommentNum() > count) { discussDO.setCommentNum(discussDO.getCommentNum() - count); } else { discussDO.setCommentNum(discussDO.getCommentNum() - 1); } comActDiscussDAO.updateById(discussDO); } else { discussDO.setCommentNum(discussDO.getCommentNum() - 1); comActDiscussDAO.updateById(discussDO); } } } return R.ok(); } return R.fail(); } /** * 分页查询评论下回复列表 * * @param discussDetailDTO 请求参数 * @return 回复列表 */ @Override public R discussCommentReplyAdmin(ComActDiscussDetailDTO discussDetailDTO) { return R.ok(comActDiscussCommentDAO.getDiscussCommentList(new Page(discussDetailDTO.getPageNum(), discussDetailDTO.getPageSize()), discussDetailDTO.getId())); } /** * 查询社区可发布议事投票权限配置 * * @param communityId 社区id * @return 社区可发布议事投票权限配置 */ @Override public R discussJurisdictionGet(Long communityId, Long userId) { List confDOList = sysConfDao.selectList(new LambdaQueryWrapper() .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); sysConfDO.setName("社区议事投票小程序身份验证参数"); sysConfDO.setValue("");// 社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员) sysConfDO.setDescription("社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)"); sysConfDO.setCommunityId(communityId); sysConfDO.setCreateBy(userId); int inserted = sysConfDao.insert(sysConfDO); if (inserted != 1) { throw new ServiceException("添加社区议事投票小程序身份验证参数失败"); } confDOList = sysConfDao.selectList(new LambdaQueryWrapper() .eq(SysConfDO::getCommunityId, communityId) .orderByDesc(SysConfDO::getCreateAt)); } if (confDOList != null && confDOList.size() > 0) { SysConfDO latest = confDOList.get(0); SysConfVO sysConfVO = new SysConfVO(); BeanUtils.copyProperties(latest, sysConfVO); return R.ok(sysConfVO.getValue()); } return R.ok(); } /** * 设置当前社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员) * * @param communityId 社区id * @param value 需要设置的参数值 * @return 设置结果 */ @Override public R discussJurisdictionSet(Long communityId, String value) { List authConf = sysConfDao.selectList(new LambdaQueryWrapper().eq(SysConfDO::getCommunityId, communityId) .eq(SysConfDO::getCode, Constants.DISCUSS_IDENTITY_KEY + communityId).orderByDesc(SysConfDO::getCreateAt)); if (authConf != null && authConf.size() > 0) { SysConfDO first = authConf.get(0); first.setValue(value); int updated = sysConfDao.updateById(first); if (updated == 1) { return R.ok(); } } return R.fail(); } /** * 议事投票检测状态定时任务 * @return 执行结果 */ @Override public R timedTaskDiscussInspectStatus() { Date nowDate = new Date(); //查询已过开始时间未开始投票列表 List wksDiscussList = comActDiscussDAO.selectList(new QueryWrapper().lambda() .eq(ComActDiscussDO::getType, ComActDiscussDO.type.tp).eq(ComActDiscussDO::getIsDel, ComActDiscussDO.isOk.no) .eq(ComActDiscussDO::getStatus,ComActDiscussDO.status.wks).le(ComActDiscussDO::getStartTime, nowDate)); wksDiscussList.forEach(wksDiscuss -> { wksDiscuss.setStatus(ComActDiscussDO.status.jxz); wksDiscuss.setUpdateAt(nowDate); wksDiscuss.setReleaseAt(nowDate); comActDiscussDAO.updateById(wksDiscuss); }); //查询已过结束时间未结束的投票列表 List jxzDiscussList = comActDiscussDAO.selectList(new QueryWrapper().lambda() .eq(ComActDiscussDO::getType, ComActDiscussDO.type.tp).eq(ComActDiscussDO::getIsDel, ComActDiscussDO.isOk.no) .eq(ComActDiscussDO::getStatus,ComActDiscussDO.status.jxz).le(ComActDiscussDO::getEndTime, nowDate)); jxzDiscussList.forEach(jxzDiscuss -> { jxzDiscuss.setStatus(ComActDiscussDO.status.dgb); jxzDiscuss.setUpdateAt(nowDate); comActDiscussDAO.updateById(jxzDiscuss); }); return R.ok(); } /** * 一起议增加浏览量 * @param discussId 一起议主键id */ @Override public void increaseViewNum(Long discussId) { String incrKey = String.join("_", DISCUSS_VIEW_NUM_PREFIX, discussId.toString()); Boolean isExist = stringRedisTemplate.hasKey(incrKey); ValueOperations opsForValue = stringRedisTemplate.opsForValue(); if (isExist) { opsForValue.increment(incrKey); } else { ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(discussId); if (nonNull(comActDiscussDO)) { stringRedisTemplate.executePipelined((RedisCallback) redisConnection -> { StringRedisConnection stringRedisConnection = (StringRedisConnection) redisConnection; Integer nowViewNum = Math.addExact(comActDiscussDO.getViewsNum().intValue(), 1); stringRedisConnection.set(incrKey, nowViewNum.toString()); stringRedisConnection.expire(incrKey, DISCUSS_EXPIRE_TIME); stringRedisConnection.sAdd(INCR_VIEW_DISCUSS_IDS_KEY, discussId.toString()); stringRedisConnection.expire(INCR_VIEW_DISCUSS_IDS_KEY, DISCUSS_EXPIRE_TIME); return null; }); } } } /** * 公布/编辑一起议投票结果 * @param comActDiscussDTO * @return 请求结果 */ @Override public R editDiscussResult(ComActDiscussDTO comActDiscussDTO) { if (isNull(comActDiscussDTO.getId()) || isNull(comActDiscussDTO.getPublishResult())) { return R.fail("缺少参数!"); } ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(comActDiscussDTO.getId()); if (isNull(comActDiscussDO)) { return R.fail("当前一起议主题不存在!"); } if (!comActDiscussDTO.getUserId().equals(comActDiscussDO.getUserId())) { 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)); } /** * 将redis中浏览量写入表中 * @return 执行结果 */ @Override public R writeDiscussViewNumToTable() { try { if (stringRedisTemplate.hasKey(INCR_VIEW_DISCUSS_IDS_KEY)) { SetOperations opsForSet = stringRedisTemplate.opsForSet(); Set needWriteDiscussIdSet = opsForSet.members(INCR_VIEW_DISCUSS_IDS_KEY); //组装viewNum key List viewNumKeys = new ArrayList<>(); Iterator iterator = needWriteDiscussIdSet.iterator(); List idList = new ArrayList<>(); while (iterator.hasNext()) { 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(); List viewNumList = opsForValue.multiGet(viewNumKeys); //待处理集合,以key-value/discussId-viewNum 存放 HashMap needDealMap = new HashMap<>(); 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); if (result <= 0) { return R.fail("处理失败"); } } } catch (Exception e) { log.error("写入浏览量失败【{}】", e.getMessage()); return R.fail("处理失败"); } return R.ok(); } }