puhanshu
2021-09-10 6a0497edf6c457c70c5e44d1e9be70c05ffd3f4f
议事投票小程序端改版功能开发
20个文件已修改
1个文件已添加
818 ■■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/DiscussApi.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComActDiscussDTO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageComActDiscussDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussOptionUserVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussOptionVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/user/UserService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/DiscussApi.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussDAO.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussOptionUserDAO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActDiscussService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java 343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussDOMapper.xml 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionUserDOMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/api/UserApi.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/UserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/timejob/src/main/java/com/panzhihua/timejob/jobhandler/CommunityJobHandler.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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() != &quot;&quot;'>"
        + " 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() != &quot;&quot;'>"
//        + " 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` &gt; now() " + " </if> "
//        + "<if test='pageComActDiscussDTO.displayStatus != null and pageComActDiscussDTO.displayStatus == 2'>"
//        + " and d.`end_time` &lt; 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() != &quot;&quot;'>"
        + "AND u.`name` LIKE concat( #{pageComActDiscussCommentDTO.name}, '%' )  " + " </if> "
        + "<if test='pageComActDiscussCommentDTO.account != null and pageComActDiscussCommentDTO.account.trim() != &quot;&quot;'>"
        + "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() != &quot;&quot;'>"
        + " 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() != &quot;&quot;'>"
//        + "AND u.`name` LIKE concat( #{pageComActDiscussCommentDTO.name}, '%' )  " + " </if> "
//        + "<if test='pageComActDiscussCommentDTO.account != null and pageComActDiscussCommentDTO.account.trim() != &quot;&quot;'>"
//        + "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() != &quot;&quot;'>"
//        + " 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) &gt;= 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() != &quot;&quot;'>
                    AND u.`name` LIKE concat( #{pageComActDiscussCommentDTO.name}, '%' )
                </if>
                <if test='pageComActDiscussCommentDTO.account != null and pageComActDiscussCommentDTO.account.trim() != &quot;&quot;'>
                    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() != &quot;&quot;'>
                    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() != &quot;&quot;'>
                    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` &gt; now()
                </if>
                <if test='pageComActDiscussDTO.displayStatus != null and pageComActDiscussDTO.displayStatus == 2'>
                    AND d.`end_time` &lt; 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) &gt;= DATE(now())
        AND DATE(create_at) &lt; 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));