springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/DiscussApi.java
@@ -1,27 +1,44 @@ package com.panzhihua.applets.api; import java.util.Date; import java.util.List; import java.util.Objects; import javax.annotation.Resource; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.panzhihua.applets.weixin.CheckService; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.model.dtos.community.*; 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.integral.admin.AddComActIntegralUserDTO; 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.ComActDiscussVO; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.utlis.DateUtils; import com.panzhihua.common.validated.AddGroup; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; /** @@ -58,6 +75,11 @@ if (ObjectUtils.isEmpty(discussOptions)) { return R.fail("选项不能为空"); } if (discussOptions.size() < 2) { return R.fail("请至少设置两个投票选项"); } //设置投票开始时间 nowDate comActDiscussDTO.setStartTime(DateUtils.format(new Date(), DateUtils.ymdhms_format)); } String address = comActDiscussDTO.getAddress(); if (ObjectUtils.isEmpty(address)) { @@ -70,12 +92,17 @@ Long communityId = loginUserInfo.getCommunityId(); comActDiscussDTO.setUserId(userId); comActDiscussDTO.setCommunityId(communityId); comActDiscussDTO.setIsApplets(true); comActDiscussDTO.setLoginUserInfo(loginUserInfo); return communityService.addDiscuss(comActDiscussDTO); } @ApiOperation(value = "一起议-分页查询", response = ComActDiscussVO.class) @PostMapping("pagediscuss") public R pageDiscuss(@RequestBody PageComActDiscussDTO pageComActDiscussDTO) { if (Objects.isNull(pageComActDiscussDTO.getType())) { return R.fail("查询类型不能为空"); } LoginUserInfoVO loginUserInfo = this.getLoginUserInfoSureNoLogin(); if (loginUserInfo != null) { pageComActDiscussDTO.setCommunityId(loginUserInfo.getCommunityId()); @@ -185,4 +212,18 @@ return communityService.addDiscussOptionUser(comActDiscussOptionUserDTO); } @ApiOperation(value = "一起议-增加浏览量") @PostMapping("discuss/increase-view-num") public void increaseViewNum(@RequestParam("discussId") @ApiParam(value = "一起议主键id", required = true) Long discussId) { communityService.increaseViewNum(discussId); } @ApiOperation(value = "一起议-公布/编辑投票结果") @PostMapping("discuss/edit-result") public R editDiscussResult(@RequestBody ComActDiscussDTO comActDiscussDTO) { comActDiscussDTO.setUserId(this.getUserId()); return communityService.editDiscussResult(comActDiscussDTO); } } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComActDiscussDTO.java
@@ -7,6 +7,7 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.validated.AddGroup; import io.swagger.annotations.ApiModel; @@ -75,4 +76,12 @@ @ApiModelProperty(value = "每人可投票数") private Integer count; @ApiModelProperty("是否是小程序用户") private Boolean isApplets; @ApiModelProperty("当前登录用户信息") private LoginUserInfoVO loginUserInfo; @ApiModelProperty("投票结果") private String publishResult; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageComActDiscussDTO.java
@@ -51,4 +51,10 @@ @ApiModelProperty("关键词") private String keyWord; @ApiModelProperty(value = "类型: 1.议事 2.投票,小程序必须传入类型", allowableValues = "1,2") private Integer type; @ApiModelProperty(value = "展示状态,小程序获取不同状态的投票列表 1.进行中 2.已结束", allowableValues = "1,2") private Integer displayStatus; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussOptionUserVO.java
New file @@ -0,0 +1,40 @@ package com.panzhihua.common.model.vos.community; import java.util.Date; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @title: ComActDiscussOptionUserVO * @projectName: 成都呐喊信息技术有限公司-智慧社区项目 * @description: 一起议投票记录详情 * @author: hans * @date: 2021/09/08 16:14 */ @Data @ApiModel("一起议投票记录详情") public class ComActDiscussOptionUserVO { @ApiModelProperty("投票记录主键id") private Long id; @ApiModelProperty("一起议选项id") private Long discussOptionId; @ApiModelProperty("投票人id") private Long userId; @ApiModelProperty("投票时间") private Date createAt; @ApiModelProperty("一起议id") private Long discussId; @ApiModelProperty("投票人昵称") private String userNickName; @ApiModelProperty("投票人头像") private String imageUrl; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussOptionVO.java
@@ -1,5 +1,6 @@ package com.panzhihua.common.model.vos.community; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -41,4 +42,7 @@ @ApiModelProperty("是否已经投票 1 是 0 否") private Integer haveVote = 0; @ApiModelProperty("投票选项占比") private BigDecimal percent; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussVO.java
@@ -102,7 +102,7 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; @ApiModelProperty("参与人数") @ApiModelProperty("参与讨论人数") private Integer joinNum; @ApiModelProperty("单张图片宽度") @@ -116,4 +116,13 @@ @ApiModelProperty("每人票数") private Integer count; @ApiModelProperty("剩余可投票数") private Integer remainingVotes; @ApiModelProperty("已投票记录列表") private List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList; @ApiModelProperty("已参与投票人数") private Integer votedPersonNum; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -5244,4 +5244,25 @@ */ @GetMapping("/sys/conf/editSysConfValue") R editSysConfValue(@RequestParam("communityId") Long communityId,@RequestParam("status") Integer status); /** * 一起议增加浏览量 * @param discussId 一起议主键id */ @PostMapping("discuss/increase-view-num") void increaseViewNum(@RequestParam("discussId") Long discussId); /** * 定时任务每半小时执行一次将一起议浏览量写入到表中 */ @PostMapping("discuss/write-view-num") R timedTaskWriteDiscussViewNumToTable(); /** * 公布/编辑一起议投票结果 * @param comActDiscussDTO * @return 请求结果 */ @PostMapping("discuss/edit-result") R editDiscussResult(@RequestBody ComActDiscussDTO comActDiscussDTO); } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/user/UserService.java
@@ -988,4 +988,13 @@ */ @GetMapping("getUserListByCommunityId") R getUserListByCommunityId(@RequestParam("communityId") Long communityId); /** * 检查当前用户是否是社区工作人员 * @param phone * @param communityId * @return */ @GetMapping("checkIsTeam") R checkCurrentUserIsTeam(@RequestParam("phone") String phone, @RequestParam("communityId") Long communityId); } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java
@@ -22,6 +22,7 @@ public static SimpleDateFormat ymdhm_format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); public static DateTimeFormatter format_ymd_String = DateTimeFormatter.ofPattern("yyMMdd"); public static SimpleDateFormat yyyyMM_format = new SimpleDateFormat("yyyy-MM"); public static SimpleDateFormat format_yyymmdd = new SimpleDateFormat("yyyyMMdd"); private static DateTimeFormatter format_ymdhmssss = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); private static DateTimeFormatter format_ymds = DateTimeFormatter.ofPattern("yyyyMMdd"); springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/DiscussApi.java
@@ -227,4 +227,30 @@ return comActDiscussService.putDiscussCommentUser(comActDiscussUserDTO); } /** * 一起议增加浏览量 * @param discussId 一起议主键id */ @PostMapping("discuss/increase-view-num") public void increaseViewNum(@RequestParam("discussId") Long discussId) { comActDiscussService.increaseViewNum(discussId); } /** * 公布/编辑一起议投票结果 * @param comActDiscussDTO * @return 请求结果 */ @PostMapping("discuss/edit-result") public R editDiscussResult(@RequestBody ComActDiscussDTO comActDiscussDTO) { return comActDiscussService.editDiscussResult(comActDiscussDTO); } /** * 定时任务每半小时执行一次将一起议浏览量写入到表中 */ @PostMapping("discuss/write-view-num") public R timedTaskWriteDiscussViewNumToTable() { return comActDiscussService.writeDiscussViewNumToTable(); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussDAO.java
@@ -1,5 +1,6 @@ package com.panzhihua.service_community.dao; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -74,44 +75,51 @@ IPage<ComActDiscussCommentVO> pageDiscussComment(Page page, @Param("pageComActDiscussCommentDTO") PageComActDiscussCommentDTO pageComActDiscussCommentDTO); @Select("<script> " + "select t.* from (" + "SELECT " + "d.id, " + "d.vote_title, " + "if(d.address is null or d.address='null',a.name,d.address )address, " + "d.photo_pah, " + "d.`discuss_subject`, " + "d.type, " + "u.type as userType, " + "COUNT( DISTINCT c.id ) commentNum, " + "COUNT( DISTINCT du.id ) signNum, " + "if(u.type=1,u.name,a.name) userName, " + "if(u.type=1,u.nick_name,a.name) userNickName, " + "<if test='pageComActDiscussDTO.loginUserId != null '>" + "if(du.id is not null,1,0) haveSign, " + "if(ou.id is not null,1,0) haveVote, " + " </if> " + "u.image_url, " + "d.create_at " + "FROM " + "com_act_discuss d " + "JOIN sys_user u ON d.user_id = u.user_id " + "JOIN com_act a ON d.community_id = a.community_id " + "LEFT JOIN com_act_discuss_comment c ON d.id = c.discuss_id " + "LEFT JOIN com_act_discuss_option do ON d.id = do.discuss_id " + "LEFT JOIN com_act_discuss_user du ON d.id = du.discuss_id " + "<if test='pageComActDiscussDTO.loginUserId != null '>" + "LEFT JOIN com_act_discuss_option_user ou on do.id=ou.discuss_option_id and ou.user_id=#{pageComActDiscussDTO.loginUserId} " + " </if> " + " where d.community_id=#{pageComActDiscussDTO.communityId}" + "<if test='pageComActDiscussDTO.subject != null and pageComActDiscussDTO.subject.trim() != ""'>" + " and d.`discuss_subject` LIKE concat( #{pageComActDiscussDTO.subject}, '%' ) " + " </if> " + "<if test='pageComActDiscussDTO.userId != null and pageComActDiscussDTO.userId !=0 '>" + " and d.`user_id` = #{pageComActDiscussDTO.userId} " + " </if> " + "<if test='pageComActDiscussDTO.begin != null '>" + "AND d.create_at BETWEEN #{pageComActDiscussDTO.begin} " + "AND #{pageComActDiscussDTO.end} " + " </if> " + "GROUP BY " + "d.id" + ")t order by t.create_at desc " + "</script>") // @Select("<script> " + "select t.* from (" + "SELECT " + "d.id, " + "d.vote_title, " // + "if(d.address is null or d.address='null',a.name,d.address )address, " + "d.photo_pah, " // + "d.`discuss_subject`, " + "d.type, " + "d.end_time, " + "d.status, " + "d.views_num, " + "d.join_num, " // + "d.fabulous_num as signNum, " + "d.comment_num as commentNum, " + "d.release_at, " + "u.type as userType, " // + "if(u.type=1,u.name,a.name) userName, " // + "if(u.type=1,u.nick_name,a.name) userNickName, " + "<if test='pageComActDiscussDTO.loginUserId != null '>" // + "if(du.id is not null,1,0) haveSign, " + "if(ou.id is not null,1,0) haveVote, " + " </if> " + "u.image_url, " // + "d.create_at " + "FROM " + "com_act_discuss d " + "JOIN sys_user u ON d.user_id = u.user_id " // + "JOIN com_act a ON d.community_id = a.community_id " // + "LEFT JOIN com_act_discuss_option do ON d.id = do.discuss_id " // + "LEFT JOIN com_act_discuss_user du ON d.id = du.discuss_id " // + "<if test='pageComActDiscussDTO.loginUserId != null '>" // + "LEFT JOIN com_act_discuss_option_user ou on do.id=ou.discuss_option_id and ou.user_id=#{pageComActDiscussDTO.loginUserId} " // + " </if> " + " where d.community_id=#{pageComActDiscussDTO.communityId}" + " and d.is_del = 2" // + "<if test='pageComActDiscussDTO.type != null '>" // + " and d.`type` = #{pageComActDiscussDTO.type} " + " </if> " // + "<if test='pageComActDiscussDTO.subject != null and pageComActDiscussDTO.subject.trim() != ""'>" // + " and d.`discuss_subject` LIKE concat( #{pageComActDiscussDTO.subject}, '%' ) " + " </if> " // + "<if test='pageComActDiscussDTO.userId != null and pageComActDiscussDTO.userId !=0 '>" // + " and d.`user_id` = #{pageComActDiscussDTO.userId} " + " </if> " // + "<if test='pageComActDiscussDTO.begin != null '>" + "AND d.create_at BETWEEN #{pageComActDiscussDTO.begin} " // + "AND #{pageComActDiscussDTO.end} " + " </if> " // + "<if test='pageComActDiscussDTO.displayStatus != null and pageComActDiscussDTO.displayStatus == 1'>" // + " and d.`end_time` > now() " + " </if> " // + "<if test='pageComActDiscussDTO.displayStatus != null and pageComActDiscussDTO.displayStatus == 2'>" // + " and d.`end_time` < now() " + " </if> " // + "GROUP BY " + "d.id" + ")t order by t.create_at desc " // + "</script>") IPage<ComActDiscussVO> pageDiscussApplets(Page page, @Param("pageComActDiscussDTO") PageComActDiscussDTO pageComActDiscussDTO); @Select("<script> " + "select * from (" + "SELECT " + "u.`name` userName, " + "IFNULL(u.`nick_name`,'社区管理员') as userNickName, " + "u.`image_url`, " + "u.phone, " + "u.type as userType, " + "c.`comment`, " + "c.`parent_id`, " + "c.`is_author`, " + "c.`is_topping`, " + "COUNT( cu.id ) num, " + "c.create_at, " + "c.id " + "FROM " + "com_act_discuss_comment c " + "JOIN sys_user u ON c.user_id = u.user_id " + "JOIN com_act_discuss d ON c.discuss_id = d.id " + "<if test='pageComActDiscussCommentDTO.name != null and pageComActDiscussCommentDTO.name.trim() != ""'>" + "AND u.`name` LIKE concat( #{pageComActDiscussCommentDTO.name}, '%' ) " + " </if> " + "<if test='pageComActDiscussCommentDTO.account != null and pageComActDiscussCommentDTO.account.trim() != ""'>" + "AND u.phone LIKE concat( #{pageComActDiscussCommentDTO.account}, '%' ) " + " </if> " + "LEFT JOIN com_act_discuss_comment_user cu ON c.id = cu.disscuss_comment_id " + " where c.discuss_id=#{pageComActDiscussCommentDTO.id} and parent_id=0 " + "<if test='pageComActDiscussCommentDTO.comment != null and pageComActDiscussCommentDTO.comment.trim() != ""'>" + " and c.`comment` LIKE concat( '%', #{pageComActDiscussCommentDTO.comment" + "}, '%' ) " + " </if> " + "GROUP BY " + "c.id " + ")t order by t.is_topping desc , t.create_at desc" + "</script>") // @Select("<script> " + "select * from (" + "SELECT " + "u.`name` userName, " + "IFNULL(u.`nick_name`,'社区管理员') as userNickName, " // + "u.`image_url`, " + "u.phone, " + "u.type as userType, " + "c.`comment`, " + "c.`parent_id`, " // + "c.`is_author`, " + "c.`is_topping`, " + "COUNT( cu.id ) num, " + "c.create_at, " + "c.id " + "FROM " // + "com_act_discuss_comment c " + "JOIN sys_user u ON c.user_id = u.user_id " // + "JOIN com_act_discuss d ON c.discuss_id = d.id " // + "<if test='pageComActDiscussCommentDTO.name != null and pageComActDiscussCommentDTO.name.trim() != ""'>" // + "AND u.`name` LIKE concat( #{pageComActDiscussCommentDTO.name}, '%' ) " + " </if> " // + "<if test='pageComActDiscussCommentDTO.account != null and pageComActDiscussCommentDTO.account.trim() != ""'>" // + "AND u.phone LIKE concat( #{pageComActDiscussCommentDTO.account}, '%' ) " + " </if> " // + "LEFT JOIN com_act_discuss_comment_user cu ON c.id = cu.disscuss_comment_id " // + " where c.discuss_id=#{pageComActDiscussCommentDTO.id} and parent_id=0 and c.is_del = 2" // + "<if test='pageComActDiscussCommentDTO.comment != null and pageComActDiscussCommentDTO.comment.trim() != ""'>" // + " and c.`comment` LIKE concat( '%', #{pageComActDiscussCommentDTO.comment" + "}, '%' ) " + " </if> " // + "GROUP BY " + "c.id " + ")t order by t.is_topping desc , t.create_at desc" + "</script>") IPage<ComActDiscussCommentVO> pageDiscussCommentApplets(Page page, @Param("pageComActDiscussCommentDTO") PageComActDiscussCommentDTO pageComActDiscussCommentDTO); @@ -158,4 +166,32 @@ + ",( SELECT count( id ) FROM com_act_discuss_option_user WHERE discuss_option_id = c.id ) AS num " + " FROM " + " com_act_discuss_option AS c " + " WHERE c.discuss_id = #{discussId}" + " ORDER BY " + " num DESC") List<ComActDiscussOptionVO> getScreenDiscussOptionList(@Param("discussId") Long discussId); /** * 更新一起议主题状态 * @param discussId * @param status */ void updateStatusById(@Param("discussId") Long discussId, @Param("status") int status); /** * 增加评论总数和参与讨论总数 * @param discussId 一起议主键id * @param isFirstComment 是否首次参与 */ void incrCommentAndJoinNumById(@Param("discussId") Long discussId, @Param("isFirstComment") boolean isFirstComment); /** * 一起议点赞/取消点赞 增加/减少点赞总数 * @param discussId 一起议主键id * @param isIncr 是否是新增 */ void incrOrDecrFabulousNumByType(@Param("discussId") Long discussId, @Param("isIncr") Boolean isIncr); /** * 批量更新浏览量 * @param needDealMap id-viewNum参数合集 * @return */ int batchUpdateViewNum(@Param("needDealMap") HashMap<Long, Integer> needDealMap); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussOptionUserDAO.java
@@ -1,11 +1,14 @@ package com.panzhihua.service_community.dao; import com.panzhihua.common.model.vos.community.ComActDiscussOptionUserVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.panzhihua.service_community.model.dos.ComActDiscussOptionUserDO; import java.util.List; /** * @program: springcloud_k8s_panzhihuazhihuishequ @@ -32,4 +35,26 @@ @Select("select count(id) from com_act_discuss_option_user where discuss_option_id = #{discussOptionId} and user_id = #{userId}") int selectHaveVotes(@Param("discussOptionId") Long discussOptionId, @Param("userId") Long userId); /** * 查询用户当天当前投票栏目下已投次数 * @param discussId 一起议主键id * @param userId 用户id * @return 总数 */ int selectVotedVotesInToday(@Param("discussId") Long discussId, @Param("userId") Long userId); /** * 查询当前投票主题下的记录 最多6条用于展示 * @param discussId 一起议主键id * @return */ List<ComActDiscussOptionUserVO> selectVotedRecords(@Param("discussId") Long discussId); /** * 查询当前投票主题参与人数 * @param discussId 一起议主键id * @return */ int selectVotedPersonNum(@Param("discussId") Long discussId); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActDiscussService.java
@@ -170,4 +170,23 @@ * @return 议事投票列表 */ R getScreenDiscussList(ScreenDiscussListDTO discussListDTO); /** * 一起议增加浏览量 * @param discussId */ void increaseViewNum(Long discussId); /** * 将redis中前一天浏览量写入表中 * @return 执行结果 */ R writeDiscussViewNumToTable(); /** * 公布/编辑一起议投票结果 * @param comActDiscussDTO * @return */ R editDiscussResult(ComActDiscussDTO comActDiscussDTO); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java
@@ -1,15 +1,29 @@ 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 com.panzhihua.common.utlis.DateUtils; 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; @@ -19,19 +33,42 @@ 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.model.dtos.community.*; 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.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.screen.work.DiscussListVO; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.model.dos.*; 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.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.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 @@ -40,7 +77,13 @@ * @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 @@ -55,6 +98,12 @@ private ComActDiscussCommentUserDAO comActDiscussCommentUserDAO; @Resource private ComActDiscussOptionService comActDiscussOptionService; @Resource private SysConfService sysConfService; @Resource private UserService userService; @Resource private StringRedisTemplate stringRedisTemplate; /** * 议事投票-新增 @@ -66,6 +115,9 @@ @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(); @@ -84,10 +136,10 @@ }else{ comActDiscussDO.setStatus(ComActDiscussDO.status.yfb); } //查询社区地址 ComActVO comActVO = comActDiscussDAO.selectCommunity(comActDiscussDTO.getCommunityId()); String address = comActDiscussDO.getAddress(); if (ObjectUtils.isEmpty(address)) { //查询社区地址 ComActVO comActVO = comActDiscussDAO.selectCommunity(comActDiscussDTO.getCommunityId()); comActDiscussDO.setAddress(comActVO.getAddress()); } int insert = comActDiscussDAO.insert(comActDiscussDO); @@ -109,6 +161,47 @@ 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; } 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; } } return checkResult; } /** @@ -229,15 +322,26 @@ if (ObjectUtils.isEmpty(comActDiscussDO)) { return R.fail("议事投票不存在"); } Long currentUser = comActDiscussCommentDTO.getUserId(); //判断当前用户是否参与过评论 int currentUserCommentCount = comActDiscussCommentDAO.selectCount(new QueryWrapper<ComActDiscussCommentDO>() .lambda().eq(ComActDiscussCommentDO::getDiscussId, discussId).eq(ComActDiscussCommentDO::getUserId, currentUser)); ComActDiscussCommentDO comActDiscussCommentDO = new ComActDiscussCommentDO(); BeanUtils.copyProperties(comActDiscussCommentDTO, comActDiscussCommentDO); Long userId = comActDiscussCommentDTO.getUserId(); Long userId1 = comActDiscussDO.getUserId(); if (userId.equals(userId1)) { Long discussUser = comActDiscussDO.getUserId(); if (currentUser.equals(discussUser)) { comActDiscussCommentDO.setIsAuthor(1); } int insert = comActDiscussCommentDAO.insert(comActDiscussCommentDO); if (insert > 0) { //评论成功,评论总数+1 //若首次参与评论,参与讨论人数+1 if (currentUserCommentCount > 0) { comActDiscussDAO.incrCommentAndJoinNumById(discussId, false); } else { comActDiscussDAO.incrCommentAndJoinNumById(discussId, true); } return R.ok(); } return R.fail(); @@ -362,18 +466,28 @@ if (ObjectUtils.isEmpty(comActDiscussDO)) { return R.fail("议事投票不存在"); } Long userId = comActDiscussDO.getUserId(); Long userId1 = comActDiscussCommentDTO.getUserId(); Long currentUser = comActDiscussCommentDTO.getUserId(); //判断当前用户是否参与过评论/回复 int currentUserCommentCount = comActDiscussCommentDAO.selectCount(new QueryWrapper<ComActDiscussCommentDO>() .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 (userId.equals(userId1)) { if (discussUser.equals(currentUser)) { comActDiscussCommentDO1.setIsAuthor(1); } int insert = comActDiscussCommentDAO.insert(comActDiscussCommentDO1); if (insert > 0) { //回复成功,评论总数+1 //若首次参与评论,参与讨论人数+1 if (currentUserCommentCount > 0) { comActDiscussDAO.incrCommentAndJoinNumById(discussId, false); } else { comActDiscussDAO.incrCommentAndJoinNumById(discussId, true); } return R.ok(); } return R.fail(); @@ -451,8 +565,16 @@ } comActDiscussOptionVOS.add(comActDiscussOptionVO); }); comActDiscussOptionVOS.sort(Comparator.comparing(ComActDiscussOptionVO::getNum).reversed()); fillThePercentAndSort(comActDiscussOptionVOS); checkDiscussStatusIsCorrect(comActDiscussVO); comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionVOS); //填充投票记录列表 List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList = comActDiscussOptionUserDAO .selectVotedRecords(comActDiscussVO.getId()); comActDiscussVO.setComActDiscussOptionUserVOList(comActDiscussOptionUserVOList); //填充已参与投票人数 int votedPersonNum = comActDiscussOptionUserDAO.selectVotedPersonNum(comActDiscussVO.getId()); comActDiscussVO.setVotedPersonNum(votedPersonNum); } if (loginUserId != null) { @@ -474,6 +596,20 @@ } /** * 判断discuss状态是否正确 * @param comActDiscussVO */ 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); } } /** * 议事投票-点赞、取消点赞 * * @param comActDiscussUserDTO @@ -486,7 +622,8 @@ int num = 0; ComActDiscussUserDO comActDiscussUserDO = new ComActDiscussUserDO(); BeanUtils.copyProperties(comActDiscussUserDTO, comActDiscussUserDO); if (type.intValue() == 1) { boolean isIncr = type.intValue() == 1; if (isIncr) { num = comActDiscussUserDAO.insert(comActDiscussUserDO); } else { num = comActDiscussUserDAO.delete(new QueryWrapper<ComActDiscussUserDO>().lambda() @@ -494,6 +631,8 @@ .eq(ComActDiscussUserDO::getDiscussId, comActDiscussUserDTO.getDiscussId())); } if (num > 0) { //点赞成功 总数+1 || 取消点赞成功 总数-1 comActDiscussDAO.incrOrDecrFabulousNumByType(comActDiscussUserDTO.getDiscussId(), isIncr); return R.ok(); } return R.fail(); @@ -609,17 +748,13 @@ } ComActDiscussVO comActDiscussVO = new ComActDiscussVO(); BeanUtils.copyProperties(comActDiscussDO, comActDiscussVO); Integer integer = comActDiscussCommentDAO.selectCount( new QueryWrapper<ComActDiscussCommentDO>().lambda().eq(ComActDiscussCommentDO::getDiscussId, id)); comActDiscussVO.setCommentNum(integer); Integer integer1 = comActDiscussUserDAO .selectCount(new QueryWrapper<ComActDiscussUserDO>().lambda().eq(ComActDiscussUserDO::getDiscussId, id)); comActDiscussVO.setSignNum(integer1); 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 = @@ -632,12 +767,35 @@ // 判断选项是否已投票 int haveVote = comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId); votes.add(haveVote); comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0); } comActDiscussOptionVOS.add(comActDiscussOptionVO); }); comActDiscussOptionVOS.sort(Comparator.comparing(ComActDiscussOptionVO::getNum).reversed()); 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); @@ -668,6 +826,26 @@ } /** * 计算投票占比以及排序 * @param comActDiscussOptionVOS */ private void fillThePercentAndSort(List<ComActDiscussOptionVO> 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 comActDiscussOptionUserDTO @@ -687,15 +865,32 @@ // QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, discussId)); // List<Long> longList=comActDiscussOptionDOS.stream().map(comActDiscussOptionDO1 -> // comActDiscussOptionDO1.getId()).collect(Collectors.toList()); Integer integer = comActDiscussOptionUserDAO.selectCount( new QueryWrapper<ComActDiscussOptionUserDO>().lambda().eq(ComActDiscussOptionUserDO::getUserId, userId) .eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionId)); if (integer > 0) { return R.fail("不要重复投票"); 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(); if (isRepeat) { //可重复投票 int votedVotesInToday = comActDiscussOptionUserDAO.selectVotedVotesInToday(discussId, userId); if (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("投票次数已用完"); } } ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO(); comActDiscussOptionUserDO.setUserId(userId); comActDiscussOptionUserDO.setDiscussOptionId(discussOptionId); comActDiscussOptionUserDO.setDiscussId(discussId); int insert = comActDiscussOptionUserDAO.insert(comActDiscussOptionUserDO); if (insert > 0) { return R.ok(); @@ -767,4 +962,100 @@ } return R.ok(discussListVOIPage); } /** * 一起议增加浏览量 * @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<Object>) 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()); int result = comActDiscussDAO.updateById(comActDiscussDO); if (result > 0) { return R.ok(); } return R.fail("网络错误,请重试!"); } /** * 将redis中浏览量写入表中 * @return 执行结果 */ @Override public R writeDiscussViewNumToTable() { try { if (stringRedisTemplate.hasKey(INCR_VIEW_DISCUSS_IDS_KEY)) { SetOperations opsForSet = stringRedisTemplate.opsForSet(); Set<String> needWriteDiscussIdSet = opsForSet.members(INCR_VIEW_DISCUSS_IDS_KEY); //组装viewNum key List<String> viewNumKeys = new ArrayList<>(); Iterator<String> iterator = needWriteDiscussIdSet.iterator(); while (iterator.hasNext()) { viewNumKeys.add(String.join("_", DISCUSS_VIEW_NUM_PREFIX, iterator.next())); } ValueOperations opsForValue = stringRedisTemplate.opsForValue(); List<String> viewNumList = opsForValue.multiGet(viewNumKeys); //待处理集合,以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; } } int result = comActDiscussDAO.batchUpdateViewNum(needDealMap); if (result <= 0) { return R.fail("处理失败"); } } } catch (Exception e) { log.error("写入浏览量失败【{}】", e.getMessage()); return R.fail("处理失败"); } return R.ok(); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussDOMapper.xml
@@ -36,6 +36,34 @@ <sql id="Base_Column_List"> id, discuss_subject, type, photo_pah, address, user_id, community_id, create_at, discuss_option, vote_title, is_repeat, count, img_width, img_height, start_time, end_time, comment_num, fabulous_num, views_num, join_num, status, is_del, publish_result, publish_at, release_at, update_at </sql> <update id="updateStatusById"> UPDATE `com_act_discuss` SET status = #{status}, update_at = NOW() WHERE id = #{discussId} </update> <update id="incrCommentAndJoinNumById"> UPDATE `com_act_discuss` SET comment_num = comment_num + 1, <if test="isFirstComment"> join_num = join_num + 1, </if> update_at = NOW() WHERE id = #{discussId} </update> <update id="incrOrDecrFabulousNumByType"> UPDATE `com_act_discuss` SET fabulous_num = IF(IF(#{isIncr},fabulous_num + 1,fabulous_num - 1) >= 0,IF(#{isIncr},fabulous_num + 1,fabulous_num - 1),0), update_at = NOW() WHERE id = #{discussId} </update> <update id="batchUpdateViewNum" parameterType="java.util.Map"> UPDATE `com_act_discuss` SET views_num = CASE id <foreach collection="needDealMap.entrySet()" item="value" index="key"> WHEN #{key} THEN #{value} </foreach> END,update_at = NOW() WHERE id = CASE id <foreach collection="needDealMap.entrySet()" index="key"> WHEN #{key} THEN #{key} </foreach> END </update> <select id="pageDiscuss" parameterType="com.panzhihua.common.model.dtos.community.PageComActDiscussDTO" resultType="com.panzhihua.common.model.vos.community.ComActDiscussVO"> @@ -106,5 +134,66 @@ </if> order by d.create_at desc </select> <select id="pageDiscussCommentApplets" resultType="com.panzhihua.common.model.vos.community.ComActDiscussCommentVO"> SELECT * FROM ( SELECT u.`name` userName, IFNULL(u.`nick_name`, '社区管理员') AS userNickName, u.`image_url`, u.phone, u.type AS userType, c.`comment`, c.`parent_id`, c.`is_author`, c.`is_topping`, COUNT( cu.id ) num, c.create_at, c.id FROM com_act_discuss_comment c JOIN sys_user u ON c.user_id = u.user_id JOIN com_act_discuss d ON c.discuss_id = d.id <if test='pageComActDiscussCommentDTO.name != null and pageComActDiscussCommentDTO.name.trim() != ""'> AND u.`name` LIKE concat( #{pageComActDiscussCommentDTO.name}, '%' ) </if> <if test='pageComActDiscussCommentDTO.account != null and pageComActDiscussCommentDTO.account.trim() != ""'> AND u.phone LIKE concat( #{pageComActDiscussCommentDTO.account}, '%' ) </if> LEFT JOIN com_act_discuss_comment_user cu ON c.id = cu.disscuss_comment_id WHERE c.discuss_id=#{pageComActDiscussCommentDTO.id} AND parent_id=0 AND c.is_del = 2 <if test='pageComActDiscussCommentDTO.comment != null and pageComActDiscussCommentDTO.comment.trim() != ""'> AND c.`comment` LIKE concat( '%', #{pageComActDiscussCommentDTO.comment}, '%' ) </if> GROUP BY c.id ) t ORDER BY t.is_topping DESC , t.create_at DESC </select> <select id="pageDiscussApplets" resultType="com.panzhihua.common.model.vos.community.ComActDiscussVO"> SELECT t.* FROM ( SELECT d.id, d.vote_title, if(d.address IS NULL OR d.address='null',a.name,d.address )address, d.photo_pah, d.`discuss_subject`, d.type, d.end_time, d.status, d.views_num, d.join_num, d.fabulous_num AS signNum, d.comment_num AS commentNum, d.release_at, u.type AS userType, if(u.type=1,u.name,a.name) userName, if(u.type=1,u.nick_name,a.name) userNickName, <if test='pageComActDiscussDTO.loginUserId != null '> if(du.id IS NOT NULL,1,0) haveSign, if(ou.id IS NOT NULL,1,0) haveVote, </if> u.image_url, d.create_at FROM com_act_discuss d JOIN sys_user u ON d.user_id = u.user_id JOIN com_act a ON d.community_id = a.community_id LEFT JOIN com_act_discuss_option do ON d.id = do.discuss_id LEFT JOIN com_act_discuss_user du ON d.id = du.discuss_id <if test='pageComActDiscussDTO.loginUserId != null '> LEFT JOIN com_act_discuss_option_user ou ON do.id=ou.discuss_option_id AND ou.user_id=#{pageComActDiscussDTO.loginUserId} </if> WHERE d.community_id=#{pageComActDiscussDTO.communityId} AND d.is_del = 2 <if test='pageComActDiscussDTO.type != null '> AND d.`type` = #{pageComActDiscussDTO.type} </if> <if test='pageComActDiscussDTO.subject != null and pageComActDiscussDTO.subject.trim() != ""'> AND d.`discuss_subject` LIKE concat( #{pageComActDiscussDTO.subject}, '%' ) </if> <if test='pageComActDiscussDTO.userId != null and pageComActDiscussDTO.userId !=0 '> AND d.`user_id` = #{pageComActDiscussDTO.userId} </if> <if test='pageComActDiscussDTO.begin != null '> AND d.create_at BETWEEN #{pageComActDiscussDTO.begin} AND #{pageComActDiscussDTO.end} </if> <if test='pageComActDiscussDTO.displayStatus != null and pageComActDiscussDTO.displayStatus == 1'> AND d.`end_time` > now() </if> <if test='pageComActDiscussDTO.displayStatus != null and pageComActDiscussDTO.displayStatus == 2'> AND d.`end_time` < now() </if> GROUP BY d.id ) t ORDER BY t.create_at DESC </select> </mapper> springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionUserDOMapper.xml
@@ -15,5 +15,23 @@ <sql id="Base_Column_List"> id, discuss_option_id, user_id, create_at, discuss_id </sql> <select id="selectVotedVotesInToday" resultType="java.lang.Integer"> SELECT COUNT(1) FROM `com_act_discuss_option_user` WHERE discuss_id = #{discussId} AND user_id = #{userId} AND DATE(create_at) >= DATE(now()) AND DATE(create_at) < DATE_ADD(DATE(now()),INTERVAL 1 DAY) </select> <select id="selectVotedRecords" resultType="com.panzhihua.common.model.vos.community.ComActDiscussOptionUserVO"> SELECT cadou.*, su.nick_name, su.image_url FROM `com_act_discuss_option_user` cadou LEFT JOIN `sys_user` su ON cadou.user_id = su.user_id WHERE cadou.discuss_id = #{discussId} limit 6 </select> <select id="selectVotedPersonNum" resultType="java.lang.Integer"> SELECT COUNT(DISTINCT `user_id`) FROM `com_act_discuss_option_user` WHERE discuss_id = #{discussId} </select> </mapper> springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/api/UserApi.java
@@ -1112,4 +1112,14 @@ return userService.getUserListByCommunityId(communityId); } /** * 检查当前用户是否是社区工作人员 * @param phone * @param communityId * @return */ @GetMapping("checkIsTeam") public R checkCurrentUserIsTeam(String phone, Long communityId) { return userService.checkCurrentUserIsTeam(phone, communityId); } } springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/UserService.java
@@ -678,4 +678,11 @@ */ R getUserListByCommunityId(Long communityId); /** * 检查当前用户是否是社区工作人员 * @param phone * @param communityId * @return */ R checkCurrentUserIsTeam(String phone, Long communityId); } springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -2385,4 +2385,19 @@ public R getUserListByCommunityId(Long communityId) { return R.ok(this.userDao.getUserListByCommunityId(communityId)); } /** * 检查当前用户是否是社区工作人员 * @param phone * @param communityId * @return */ @Override public R checkCurrentUserIsTeam(String phone, Long communityId) { int result = this.userDao.selectCountTeam(phone, communityId); if (result > 0) { return R.ok(true); } return R.ok(false); } } springcloud_k8s_panzhihuazhihuishequ/timejob/src/main/java/com/panzhihua/timejob/jobhandler/CommunityJobHandler.java
@@ -204,4 +204,15 @@ log.info("执行结果【{}】", r.toString()); return ReturnT.SUCCESS; } /** * 定时任务每半小时执行一次将一起议浏览量写入到表中 */ @XxlJob("timedTaskWriteDiscussViewNumToTableJobHandler") public ReturnT<String> timedTaskWriteDiscussViewNumToTableJobHandler(String param) throws Exception { log.info("定时任务每半小时执行一次将一起议浏览量写入到表中"); R r = communityService.timedTaskWriteDiscussViewNumToTable(); log.info("执行结果【{}】", r.toString()); return ReturnT.SUCCESS; } } springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java
@@ -244,6 +244,7 @@ noLoginUrl.add("/api/applets/partybuilding/pageactivity"); noLoginUrl.add("/api/applets/community/pagevolunteer"); noLoginUrl.add("/api/applets/community/volunteer"); noLoginUrl.add("/api/applets/discuss/increase-view-num"); if (noLoginUrl.contains(requestURI)) { List<SimpleGrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(SecurityConstants.ROLE_APPLETS));