huanghongfa
2021-09-16 331eb9f24d962c137236754708f7546d822b2855
Merge remote-tracking branch 'origin/test' into test

# Conflicts:
# springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
10个文件已添加
27个文件已修改
2618 ■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/DiscussApi.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/Constants.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComActDiscussDTO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageComActDiscussCommentDTO.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageComActDiscussDTO.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/discuss/ComActDiscussDetailDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/discuss/ComActDiscussPublishResultDTO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussCommentVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | 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 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussVO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java 105 ●●●●● 补丁 | 查看 | 原始文档 | 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/community_backstage/src/main/java/com/panzhihua/community_backstage/api/DiscussApi.java 131 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/DiscussApi.java 179 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussCommentDAO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussDAO.java 154 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussOptionDAO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | 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/model/dos/ComActDiscussCommentDO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActDiscussDO.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActDiscussOptionUserDO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActDiscussService.java 139 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java 948 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussCommentDOMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussCommentUserDOMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussDOMapper.xml 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionDOMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionUserDOMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussUserDOMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | 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 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/timejob/src/main/java/com/panzhihua/timejob/jobhandler/DiscussJobHandler.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/DiscussApi.java
@@ -1,27 +1,45 @@
package com.panzhihua.applets.api;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.annotation.Resource;
import com.panzhihua.common.validated.PutGroup;
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 +76,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 +93,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 +213,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 @Validated(PutGroup.class) ComActDiscussDTO comActDiscussDTO) {
        comActDiscussDTO.setUserId(this.getUserId());
        return communityService.editDiscussResult(comActDiscussDTO);
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/Constants.java
@@ -191,4 +191,9 @@
     * 高德地图获取天气key
     */
    public static final String G_D_WEATHER_KEY = "02019a956b118ac7956c8539ab02b0f5";
    /**
     * 社区议事投票小程序身份验证参数默认key
     */
    public static final String DISCUSS_IDENTITY_KEY = "DISCUSS_IDENTITY_";
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComActDiscussDTO.java
@@ -1,34 +1,39 @@
package com.panzhihua.common.model.dtos.community;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.validated.AddGroup;
import com.panzhihua.common.validated.PutGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 一起议新增编辑
 * @description: 议事投票新增编辑
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2021-01-22 15:34
 **/
@Data
@ApiModel("一起议新增编辑")
@ApiModel("议事投票新增编辑")
public class ComActDiscussDTO {
    @ApiModelProperty("主键")
    @NotNull(message = "一起议id不能为空", groups = {PutGroup.class})
    private Long id;
    @ApiModelProperty("主题")
    @NotBlank(groups = {AddGroup.class}, message = "主题不能为空")
    private String discussSubject;
    @ApiModelProperty("类型 1 图文 2 投票")
    @ApiModelProperty("类型 1 议事 2 投票")
    @Min(value = 1, groups = {AddGroup.class}, message = "类型不能为空")
    private Integer type;
@@ -56,4 +61,39 @@
    @ApiModelProperty("选项集合")
    private List<ComActDiscussOptionDTO> discussOptions;
    @ApiModelProperty(value = "单张图片宽度")
    private BigDecimal imgWidth;
    @ApiModelProperty(value = "单张图片高度")
    private BigDecimal imgHeight;
    @ApiModelProperty(value = "投票开始时间(格式:yyyy-MM-dd HH:mm:ss)")
    private String startTime;
    @ApiModelProperty(value = "投票结束时间(格式:yyyy-MM-dd HH:mm:ss)")
    private String endTime;
    @ApiModelProperty(value = "是否可重复投票(1.是 2.否)")
    private Integer isRepeat;
    @ApiModelProperty(value = "每人可投票数")
    private Integer count;
    @ApiModelProperty(value = "是否是小程序用户", hidden = true)
    private Boolean isApplets;
    @ApiModelProperty(value = "当前登录用户信息", hidden = true)
    private LoginUserInfoVO loginUserInfo;
    @ApiModelProperty("投票结果")
    @NotBlank(message = "投票结果不能为空", groups = {PutGroup.class})
    private String publishResult;
    /**
     * 类型 1 议事 2 投票
     */
    public interface type{
        int ys = 1;
        int tp = 2;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageComActDiscussCommentDTO.java
@@ -15,10 +15,10 @@
public class PageComActDiscussCommentDTO {
    @ApiModelProperty(value = "分页-当前页数", example = "1")
    private Long pageNum;
    private Long pageNum = 1L;
    @ApiModelProperty(value = "分页-每页记录数", example = "10")
    private Long pageSize;
    private Long pageSize = 10L;
    @ApiModelProperty(value = "账号")
    private String account;
@@ -34,4 +34,7 @@
    @ApiModelProperty(value = "登录用户", required = true)
    private Long loginUserId;
    @ApiModelProperty(value = "关键词")
    private String keyWord;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageComActDiscussDTO.java
@@ -18,10 +18,10 @@
@ApiModel("分页查询一起议")
public class PageComActDiscussDTO {
    @ApiModelProperty(value = "分页-当前页数", example = "1")
    private Long pageNum;
    private Long pageNum = 1L;
    @ApiModelProperty(value = "分页-每页记录数", example = "10")
    private Long pageSize;
    private Long pageSize = 10L;
    @ApiModelProperty("主题")
    private String subject;
@@ -45,4 +45,16 @@
    @ApiModelProperty("小程序使用 1 表示查询我的议题")
    private Integer isMy;
    @ApiModelProperty("状态(1.未开始 2.进行中 3.待公布 4.已公布 5.已发布)")
    private Integer status;
    @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/dtos/community/discuss/ComActDiscussDetailDTO.java
New file
@@ -0,0 +1,24 @@
package com.panzhihua.common.model.dtos.community.discuss;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author lyq
 * 议事投票公布结果请求参数
 */
@Data
@ApiModel("议事投票公布结果请求参数")
public class ComActDiscussDetailDTO {
    @ApiModelProperty("主键id")
    private Long id;
    @ApiModelProperty(value = "分页-当前页数", example = "1")
    private Long pageNum = 1L;
    @ApiModelProperty(value = "分页-每页记录数", example = "10")
    private Long pageSize = 10L;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/discuss/ComActDiscussPublishResultDTO.java
New file
@@ -0,0 +1,36 @@
package com.panzhihua.common.model.dtos.community.discuss;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @author lyq
 * 议事投票公布结果请求参数
 */
@Data
@ApiModel("议事投票公布结果请求参数")
public class ComActDiscussPublishResultDTO {
    @ApiModelProperty("议事投票id")
    private Long id;
    @ApiModelProperty("公布结果")
    private String result;
    @ApiModelProperty(value = "用户id",hidden = true)
    private Long userId;
    @ApiModelProperty("类型(1.新增公布结果  2.修改公布结果)")
    private Integer type;
    /**
     * 类型(1.新增公布结果  2.修改公布结果)
     */
    public interface type{
        int add = 1;
        int edit = 2;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussCommentVO.java
@@ -80,4 +80,7 @@
    @ApiModelProperty("评论人用户类型(1.小程序用户(其他均为后台用户))")
    private Integer userType;
    @ApiModelProperty("回复量")
    private Integer replyNum;
}
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;
@@ -36,6 +37,12 @@
    @ApiModelProperty("投票数量")
    private Integer num;
    @ApiModelProperty("投票总数量")
    private Integer allNum;
    @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
@@ -1,5 +1,6 @@
package com.panzhihua.common.model.vos.community;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -24,7 +25,7 @@
    @ApiModelProperty("主题")
    private String discussSubject;
    @ApiModelProperty("类型 1 图文 2 投票")
    @ApiModelProperty("类型 1 议事 2 投票")
    private Integer type;
    @ApiModelProperty("图片地址 多个用逗号隔开")
@@ -58,6 +59,9 @@
    @ApiModelProperty("点赞数量")
    private Integer signNum;
    @ApiModelProperty("浏览量")
    private Integer viewsNum;
    @ApiModelProperty("发布人名字")
    private String userName;
@@ -76,4 +80,60 @@
    @ApiModelProperty("用户类型 1 小程序 2 运营平台 3 社区平台 5 商家后台 6 网格综治APP 7 网格综治后台")
    private Integer userType;
    @ApiModelProperty("状态(1.未开始 2.进行中 3.待公布 4.已公布 5.已发布)")
    private Integer status;
    @ApiModelProperty("公布结果")
    private String publishResult;
    @ApiModelProperty("公布时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date publishAt;
    @ApiModelProperty("发布时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date releaseAt;
    @ApiModelProperty("投票开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty("投票结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
    @ApiModelProperty("参与讨论人数")
    private Integer joinNum;
    @ApiModelProperty("单张图片宽度")
    private BigDecimal imgWidth;
    @ApiModelProperty("单张图片高度")
    private BigDecimal heightWidth;
    @ApiModelProperty("是否可重复投票(1.是 2.否)")
    private Integer isRepeat;
    @ApiModelProperty("每人票数")
    private Integer count;
    @ApiModelProperty("议事投票评论列表")
    private List<ComActDiscussCommentVO> discussCommentList;
    @ApiModelProperty("剩余可投票数")
    private Integer remainingVotes;
    @ApiModelProperty("已投票记录列表")
    private List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList;
    @ApiModelProperty("已参与投票人数")
    private Integer votedPersonNum;
    /**
     * 类型 1 议事 2 投票
     */
    public interface type{
        int ys = 1;
        int tp = 2;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -3,6 +3,8 @@
import java.util.List;
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO;
import com.panzhihua.common.model.dtos.neighbor.*;
import com.panzhihua.common.model.vos.community.*;
import io.swagger.annotations.ApiOperation;
@@ -1160,12 +1162,20 @@
    /**
     * 议事投票-详情
     *
     * @param id
     *            主键
     * @param discussDetailDTO
     *            请求参数
     * @return ComActDiscussVO
     */
    @PostMapping("detaildiscuss")
    R detailDiscuss(@RequestParam("id") Long id);
    R detailDiscuss(@RequestBody ComActDiscussDetailDTO discussDetailDTO);
    /**
     * 分页查询评论下回复列表
     * @param discussDetailDTO  请求参数
     * @return  回复列表
     */
    @PostMapping("discussCommentReplyAdmin")
    R discussCommentReplyAdmin(@RequestBody ComActDiscussDetailDTO discussDetailDTO);
    /**
     * 议事投票-删除
@@ -1198,6 +1208,16 @@
    R pageDiscuss(@RequestBody PageComActDiscussDTO pageComActDiscussDTO);
    /**
     * 议事投票-后台分页查询
     *
     * @param pageComActDiscussDTO
     *            查询参数
     * @return ComActDiscussVO
     */
    @PostMapping("pagediscussAdmin")
    R pageDiscussAdmin(@RequestBody PageComActDiscussDTO pageComActDiscussDTO);
    /**
     * 议事投票-评论-查看
     *
     * @param id
@@ -1206,6 +1226,14 @@
     */
    @PostMapping("detaildiscusscomment")
    R detailDiscussComment(@RequestParam("id") Long id);
    /**
     * 议事投票评论详情
     * @param pageComActDiscussCommentDTO   请求参数
     * @return  议事投票详情
     */
    @PostMapping("detaildiscusscommentAdmin")
    R detailDiscussCommentAdmin(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 议事投票-评论-置顶
@@ -1236,6 +1264,16 @@
     */
    @PostMapping("pagediscusscomment")
    R pageDiscussComment(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 议事投票-评论-后台分页查询
     *
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
     * @return ComActDiscussCommentVO
     */
    @PostMapping("pagediscusscommentAdmin")
    R pageDiscussCommentAdmin(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 议事投票-分页查询 小程序
@@ -5527,6 +5565,67 @@
    R editSysConfValue(@RequestParam("communityId") Long communityId,@RequestParam("status") Integer status);
    /**
     * 议事投票后台公布结果
     * @param publishResultDTO  请求参数
     * @return  公布结果
     */
    @PostMapping("publishResultAdmin")
    R publishResultAdmin(@RequestBody ComActDiscussPublishResultDTO publishResultDTO);
    /**
     * 议事投票-评论/回复删除
     * @param id    评论/回复id
     * @return  删除结果
     */
    @GetMapping("deleteDiscussCommentAdmin")
    R deleteDiscussCommentAdmin(@RequestParam("id") Long id);
    /**
     * 查询社区可发布议事投票权限配置
     * @param communityId   社区id
     * @return  社区可发布议事投票权限配置
     */
    @GetMapping("discussJurisdictionGet")
    R discussJurisdictionGet(@RequestParam("communityId") Long communityId,@RequestParam("userId") Long userId);
    /**
     * 设置当前社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)
     * @param communityId   社区id
     * @param value 需要设置的参数值
     * @return  设置结果
     */
    @GetMapping("discussJurisdictionSet")
    R discussJurisdictionSet(@RequestParam("communityId") Long communityId, @RequestParam("value") String value);
    /**
     * 议事投票检测状态定时任务
     * @return  执行结果
     */
    @GetMapping("timedTaskDiscussInspectStatus")
    R timedTaskDiscussInspectStatus();
    /**
     * 一起议增加浏览量
     * @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);
    /**
     * 定时任务扫描高龄认证记录信息
     * @return  执行结果
     */
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/community_backstage/src/main/java/com/panzhihua/community_backstage/api/DiscussApi.java
@@ -1,10 +1,11 @@
package com.panzhihua.community_backstage.api;
import java.util.List;
import javax.annotation.Resource;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -23,54 +24,78 @@
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 一起议
 * @description: 议事投票
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2021-01-22 15:30
 **/
@Slf4j
@Api(tags = {"一起议"})
@Api(tags = {"议事投票"})
@RestController
@RequestMapping("/")
public class DiscussApi extends BaseController {
    @Resource
    private CommunityService communityService;
    @ApiOperation(value = "一起议-新增")
    @ApiOperation(value = "议事投票-新增-")
    @PostMapping("discuss")
    public R addDiscuss(@RequestBody @Validated(AddGroup.class) ComActDiscussDTO comActDiscussDTO) {
        Integer type = comActDiscussDTO.getType();
        String voteTitle = comActDiscussDTO.getVoteTitle();
        List<ComActDiscussOptionDTO> discussOptions = comActDiscussDTO.getDiscussOptions();
        if (type.equals(2)) {
            if (ObjectUtils.isEmpty(voteTitle)) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        if (loginUserInfo == null) {
            return R.fail("请先登录");
        }
        comActDiscussDTO.setUserId(loginUserInfo.getUserId());
        comActDiscussDTO.setCommunityId(loginUserInfo.getCommunityId());
        if (comActDiscussDTO.getType().equals(ComActDiscussDTO.type.tp)) {
            if (ObjectUtils.isEmpty(comActDiscussDTO.getVoteTitle())) {
                return R.fail("投票标题不能为空");
            }
            if (ObjectUtils.isEmpty(discussOptions)) {
            if (ObjectUtils.isEmpty(comActDiscussDTO.getDiscussOptions())) {
                return R.fail("选项不能为空");
            }
        }
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        Long userId = loginUserInfo.getUserId();
        Long communityId = loginUserInfo.getCommunityId();
        comActDiscussDTO.setUserId(userId);
        comActDiscussDTO.setCommunityId(communityId);
        return communityService.addDiscuss(comActDiscussDTO);
    }
    @ApiOperation(value = "一起议-详情", response = ComActDiscussVO.class)
    @GetMapping("discuss")
    public R detailDiscuss(@RequestParam("id") Long id) {
        return communityService.detailDiscuss(id);
    @ApiOperation(value = "议事投票-编辑-")
    @PostMapping("editDiscuss")
    public R editDiscuss(@RequestBody @Validated(AddGroup.class) ComActDiscussDTO comActDiscussDTO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        if (loginUserInfo == null) {
            return R.fail("请先登录");
        }
        comActDiscussDTO.setUserId(loginUserInfo.getUserId());
        comActDiscussDTO.setCommunityId(loginUserInfo.getCommunityId());
        if (comActDiscussDTO.getType().equals(ComActDiscussDTO.type.tp)) {
            if (ObjectUtils.isEmpty(comActDiscussDTO.getVoteTitle())) {
                return R.fail("投票标题不能为空");
            }
            if (ObjectUtils.isEmpty(comActDiscussDTO.getDiscussOptions())) {
                return R.fail("选项不能为空");
            }
        }
        return communityService.editDiscuss(comActDiscussDTO);
    }
    @ApiOperation(value = "一起议-删除")
    @ApiOperation(value = "议事投票-详情-", response = ComActDiscussVO.class)
    @PostMapping("discussDetail")
    public R detailDiscuss(@RequestBody ComActDiscussDetailDTO discussDetailDTO) {
        return communityService.detailDiscuss(discussDetailDTO);
    }
    @ApiOperation(value = "议事投票-分页查询评论下回复列表-", response = ComActDiscussCommentVO.class)
    @PostMapping("discuss/commment/reply")
    public R discussCommentReplyAdmin(@RequestBody ComActDiscussDetailDTO discussDetailDTO) {
        return communityService.discussCommentReplyAdmin(discussDetailDTO);
    }
    @ApiOperation(value = "议事投票-删除-")
    @DeleteMapping("discuss")
    public R deleteDiscuss(@RequestParam("id") Long id) {
        return communityService.deleteDiscuss(id);
    }
    @ApiOperation(value = "一起议-回复")
    @PostMapping("discusscomment")
    @ApiOperation(value = "议事投票-回复-")
    @PostMapping("addDiscussComment")
    public R addDiscussComment(@RequestBody ComActDiscussCommentDTO comActDiscussCommentDTO) {
        String comment = comActDiscussCommentDTO.getComment();
        if (ObjectUtils.isEmpty(comment)) {
@@ -78,33 +103,39 @@
        }
        Long discussId = comActDiscussCommentDTO.getDiscussId();
        if (null == discussId || 0 == discussId) {
            return R.fail("一起议主键不能为空");
            return R.fail("议事投票主键不能为空");
        }
        comActDiscussCommentDTO.setUserId(this.getUserId());
        return communityService.addDiscussComment(comActDiscussCommentDTO);
    }
    @ApiOperation(value = "一起议-分页查询", response = ComActDiscussVO.class)
    @ApiOperation(value = "议事投票-分页查询-", response = ComActDiscussVO.class)
    @PostMapping("pagediscuss")
    public R pageDiscuss(@RequestBody PageComActDiscussDTO pageComActDiscussDTO) {
        pageComActDiscussDTO.setCommunityId(this.getCommunityId());
        return communityService.pageDiscuss(pageComActDiscussDTO);
        return communityService.pageDiscussAdmin(pageComActDiscussDTO);
    }
    @ApiOperation(value = "一起议-评论-查看", response = ComActDiscussCommentVO.class)
    @ApiOperation(value = "议事投票-评论详情", response = ComActDiscussCommentVO.class)
    @GetMapping("discusscomment")
    public R detailDiscussComment(@RequestParam("id") Long id) {
        return communityService.detailDiscussComment(id);
    }
    @ApiOperation(value = "一起议-评论-置顶")
    @ApiOperation(value = "议事投票-评论详情-改版后", response = ComActDiscussCommentVO.class)
    @PostMapping("discusscomment")
    public R detailDiscussCommentAdmin(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        return communityService.detailDiscussCommentAdmin(pageComActDiscussCommentDTO);
    }
    @ApiOperation(value = "议事投票-评论-置顶-")
    @GetMapping("discusscommenttop")
    public R putDiscussCommentTop(@RequestParam("id") Long id) {
        return communityService.putDiscussCommentTop(id);
    }
    @ApiOperation(value = "一起议-评论-回复")
    @ApiOperation(value = "议事投票-评论-回复-")
    @PostMapping("discusscommentback")
    public R addDiscussCommentBack(@RequestBody ComActDiscussCommentDTO comActDiscussCommentDTO) {
        String comment = comActDiscussCommentDTO.getComment();
@@ -119,13 +150,49 @@
        return communityService.addDiscussCommentBack(comActDiscussCommentDTO);
    }
    @ApiOperation(value = "一起议-评论-分页查询", response = ComActDiscussCommentVO.class)
    @ApiOperation(value = "议事投票-评论列表分页查询-", response = ComActDiscussCommentVO.class)
    @PostMapping("pagediscusscomment")
    public R pageDiscussComment(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        Long id = pageComActDiscussCommentDTO.getId();
        if (null == id || 0 == id) {
            return R.fail("一起议主键不能为空");
            return R.fail("议事投票主键不能为空");
        }
        return communityService.pageDiscussComment(pageComActDiscussCommentDTO);
        return communityService.pageDiscussCommentAdmin(pageComActDiscussCommentDTO);
    }
    @ApiOperation(value = "议事投票-公布结果/修改公布结果-")
    @PostMapping("publishResult")
    public R publishResult(@RequestBody ComActDiscussPublishResultDTO publishResultDTO) {
        String result = publishResultDTO.getResult();
        if (ObjectUtils.isEmpty(result)) {
            return R.fail("公布的结果不能为空");
        }
        Long id = publishResultDTO.getId();
        if (null == id || 0 == id) {
            return R.fail("议事投票id不能为空");
        }
        publishResultDTO.setUserId(this.getUserId());
        return communityService.publishResultAdmin(publishResultDTO);
    }
    @ApiOperation(value = "议事投票-评论/回复删除-")
    @DeleteMapping("discuss/comment/del")
    public R deleteDiscussCommentAdmin(@RequestParam("id") Long id) {
        return communityService.deleteDiscussCommentAdmin(id);
    }
    @ApiOperation(value = "查询社区可发布议事投票权限配置")
    @GetMapping("discuss/jurisdiction/get")
    public R discussJurisdictionGet() {
        return communityService.discussJurisdictionGet(this.getCommunityId(),this.getUserId());
    }
    @PutMapping("/discuss/jurisdiction/set/{value}")
    @ApiOperation(value = "设置当前社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)")
    public R discussJurisdictionSet(@PathVariable("value") String value) {
        if (StringUtils.isEmpty(value)) {
            return R.fail("参数错误");
        }
        return communityService.discussJurisdictionSet(this.getCommunityId(), value);
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/DiscussApi.java
@@ -2,6 +2,8 @@
import javax.annotation.Resource;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO;
import org.springframework.web.bind.annotation.*;
import com.panzhihua.common.model.dtos.community.*;
@@ -12,7 +14,7 @@
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 一起议
 * @description: 议事投票
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2021-01-22 14:52
 **/
@@ -24,7 +26,7 @@
    private ComActDiscussService comActDiscussService;
    /**
     * 一起议-新增
     * 议事投票-新增
     * 
     * @param comActDiscussDTO
     *            新增参数
@@ -36,19 +38,39 @@
    }
    /**
     * 一起议-详情
     *
     * @param id
     *            主键
     * @return ComActDiscussVO
     * 议事投票-编辑
     * @param comActDiscussDTO  请求参数
     * @return  编辑结果
     */
    @PostMapping("detaildiscuss")
    public R detailDiscuss(@RequestParam("id") Long id) {
        return comActDiscussService.detailDiscuss(id);
    @PostMapping("editdiscuss")
    public R editDiscuss(@RequestBody ComActDiscussDTO comActDiscussDTO) {
        return comActDiscussService.editDiscuss(comActDiscussDTO);
    }
    /**
     * 一起议-删除
     * 议事投票-详情
     *
     * @param discussDetailDTO
     *            请求参数
     * @return ComActDiscussVO
     */
    @PostMapping("detaildiscuss")
    public R detailDiscuss(@RequestBody ComActDiscussDetailDTO discussDetailDTO) {
        return comActDiscussService.detailDiscuss(discussDetailDTO);
    }
    /**
     * 分页查询评论下回复列表
     * @param discussDetailDTO  请求参数
     * @return  回复列表
     */
    @PostMapping("discussCommentReplyAdmin")
    public R discussCommentReplyAdmin(@RequestBody ComActDiscussDetailDTO discussDetailDTO) {
        return comActDiscussService.discussCommentReplyAdmin(discussDetailDTO);
    }
    /**
     * 议事投票-删除
     * 
     * @param id
     *            主键
@@ -60,7 +82,7 @@
    }
    /**
     * 一起议-回复
     * 议事投票-回复
     * 
     * @param comActDiscussCommentDTO
     *            评论内容
@@ -72,7 +94,7 @@
    }
    /**
     * 一起议-分页查询
     * 议事投票-分页查询
     * 
     * @param pageComActDiscussDTO
     *            查询参数
@@ -84,7 +106,19 @@
    }
    /**
     * 一起议-评论-查看
     * 议事投票-后台分页查询
     *
     * @param pageComActDiscussDTO
     *            查询参数
     * @return ComActDiscussVO
     */
    @PostMapping("pagediscussAdmin")
    public R pageDiscussAdmin(@RequestBody PageComActDiscussDTO pageComActDiscussDTO) {
        return comActDiscussService.pageDiscussAdmin(pageComActDiscussDTO);
    }
    /**
     * 议事投票-评论-查看
     * 
     * @param id
     *            主键
@@ -96,7 +130,17 @@
    }
    /**
     * 一起议-评论-置顶
     * 议事投票评论详情
     * @param pageComActDiscussCommentDTO   请求参数
     * @return  议事投票详情
     */
    @PostMapping("detaildiscusscommentAdmin")
    public R detailDiscusscommentAdmin(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        return comActDiscussService.detailDiscussCommentAdmin(pageComActDiscussCommentDTO);
    }
    /**
     * 议事投票-评论-置顶
     * 
     * @param id
     *            主键
@@ -108,7 +152,7 @@
    }
    /**
     * 一起议-评论-回复
     * 议事投票-评论-回复
     * 
     * @param comActDiscussCommentDTO
     *            回复内容
@@ -120,7 +164,7 @@
    }
    /**
     * 一起议-评论-分页查询
     * 议事投票-评论-分页查询
     * 
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
@@ -132,7 +176,19 @@
    }
    /**
     * 一起议-分页查询 小程序
     * 议事投票-评论-后台分页查询
     *
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
     * @return ComActDiscussCommentVO
     */
    @PostMapping("pagediscusscommentAdmin")
    public R pageDiscussCommentAdmin(@RequestBody PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        return comActDiscussService.pageDiscussCommentAdmin(pageComActDiscussCommentDTO);
    }
    /**
     * 议事投票-分页查询 小程序
     * 
     * @param pageComActDiscussDTO
     *            查询参数
@@ -144,7 +200,7 @@
    }
    /**
     * 一起议-点赞、取消点赞
     * 议事投票-点赞、取消点赞
     * 
     * @param comActDiscussUserDTO
     *            操作类型
@@ -156,7 +212,7 @@
    }
    /**
     * 一起议-评论-分页查询 小程序
     * 议事投票-评论-分页查询 小程序
     * 
     * @param pageComActDiscussCommentDTO
     *            分页参数
@@ -168,7 +224,7 @@
    }
    /**
     * 一起议-详情 小程序
     * 议事投票-详情 小程序
     * 
     * @param id
     *            主键
@@ -182,7 +238,7 @@
    }
    /**
     * 一起议-投票
     * 议事投票-投票
     * 
     * @param comActDiscussOptionUserDTO
     *            投票信息
@@ -194,7 +250,7 @@
    }
    /**
     * 一起议-评论-点赞、取消点赞
     * 议事投票-评论-点赞、取消点赞
     * 
     * @param comActDiscussUserDTO
     *            评论点赞
@@ -205,4 +261,81 @@
        return comActDiscussService.putDiscussCommentUser(comActDiscussUserDTO);
    }
    /**
     * 议事投票后台公布结果
     * @param publishResultDTO  请求参数
     * @return  公布结果
     */
    @PostMapping("publishResultAdmin")
    public R publishResultAdmin(@RequestBody ComActDiscussPublishResultDTO publishResultDTO) {
        return comActDiscussService.publishResultAdmin(publishResultDTO);
    }
    /**
     * 议事投票-评论/回复删除
     * @param id    评论/回复id
     * @return  删除结果
     */
    @GetMapping("deleteDiscussCommentAdmin")
    public R deleteDiscussCommentAdmin(@RequestParam("id") Long id) {
        return comActDiscussService.deleteDiscussCommentAdmin(id);
    }
    /**
     * 查询社区可发布议事投票权限配置
     * @param communityId   社区id
     * @return  社区可发布议事投票权限配置
     */
    @GetMapping("discussJurisdictionGet")
    public R discussJurisdictionGet(@RequestParam("communityId") Long communityId,@RequestParam("userId") Long userId) {
        return comActDiscussService.discussJurisdictionGet(communityId,userId);
    }
    /**
     * 设置当前社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)
     * @param communityId   社区id
     * @param value 需要设置的参数值
     * @return  设置结果
     */
    @GetMapping("discussJurisdictionSet")
    public R discussJurisdictionSet(@RequestParam("communityId") Long communityId,@RequestParam("value") String value) {
        return comActDiscussService.discussJurisdictionSet(communityId,value);
    }
    /**
     * 议事投票检测状态定时任务
     * @return  执行结果
     */
    @GetMapping("timedTaskDiscussInspectStatus")
    public R timedTaskDiscussInspectStatus() {
        return comActDiscussService.timedTaskDiscussInspectStatus();
    }
    /**
     * 一起议增加浏览量
     * @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/ComActDiscussCommentDAO.java
@@ -2,7 +2,11 @@
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.model.dtos.community.PageComActDiscussCommentDTO;
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;
@@ -52,4 +56,12 @@
            "ORDER BY\n" +
            "create_at desc")
    List<ComActDiscussCommentVO> selectChilds(Long id);
    /**
     * 该评论下所有回复内容
     * @param page  分页参数
     * @param id    评论id
     * @return  回复列表
     */
    IPage<ComActDiscussCommentVO> getDiscussCommentList(Page page, @Param("id") Long id);
}
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;
@@ -43,18 +44,21 @@
    @Select("select type,name,phone,image_url,nick_name from sys_user where user_id=#{userId}")
    LoginUserInfoVO selectUserByUserId(Long userId);
    @Select("<script> " + "select t.* from (" + "SELECT " + "d.id, " + "d.`discuss_subject`, " + "d.type, "
        + "COUNT( DISTINCT c.id ) commentNum, " + "u.name userName, " + "u.nick_name userNickName, " + "d.create_at  "
        + "FROM " + "com_act_discuss d " + "JOIN sys_user u ON d.user_id = u.user_id "
        + "LEFT JOIN com_act_discuss_comment c ON d.id = c.discuss_id  "
        + " 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.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.`discuss_subject`, " + "d.type, "
//        + "COUNT( DISTINCT c.id ) commentNum, " + "u.name userName, " + "u.nick_name userNickName, " + "d.create_at  "
//        + "FROM " + "com_act_discuss d " + "JOIN sys_user u ON d.user_id = u.user_id "
//        + "LEFT JOIN com_act_discuss_comment c ON d.id = c.discuss_id  "
//        + " 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.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>")
    IPage<ComActDiscussVO> pageDiscuss(Page page,
        @Param("pageComActDiscussDTO") PageComActDiscussDTO pageComActDiscussDTO);
    IPage<ComActDiscussVO> pageDiscussAdmin(Page page,
                                       @Param("pageComActDiscussDTO") PageComActDiscussDTO pageComActDiscussDTO);
    @Select("<script> " + "select * from (" + "SELECT " + "u.`name` userName, " + "u.nick_name userNickName, "
        + "u.phone, " + "c.`comment`, " + "c.`parent_id`, " + "COUNT(DISTINCT  cu.id ) num, " + "c.create_at, "
@@ -71,44 +75,69 @@
    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>")
    /**
     * 议事投票-评论-后台分页查询
     *
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
     * @return ComActDiscussCommentVO
     */
    IPage<ComActDiscussCommentVO> pageDiscussCommentAdmin(Page page,
                                                     @Param("pageComActDiscussCommentDTO") PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 默认查询评论下两条回复信息
     * @param commentId 评论id
     * @return  回复列表
     */
    List<ComActDiscussCommentVO> getDiscussCommentReplyList(@Param("commentId") Long commentId);
//    @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);
@@ -155,4 +184,39 @@
        + ",( 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 num   添加数量
     */
    void addCommentCount(@Param("discussId") Long discussId,@Param("num") Integer num);
    /**
     * 更新一起议主题状态
     * @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/ComActDiscussOptionDAO.java
@@ -1,9 +1,13 @@
package com.panzhihua.service_community.dao;
import com.panzhihua.common.model.vos.community.ComActDiscussOptionVO;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.panzhihua.service_community.model.dos.ComActDiscussOptionDO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
@@ -23,4 +27,6 @@
    // " </if> " +
    // " </where>" +
    // "</script>")
    List<ComActDiscussOptionVO> getDiscussOptionList(@Param("discussId") Long discussId);
}
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/model/dos/ComActDiscussCommentDO.java
@@ -59,4 +59,22 @@
     * 用户主键
     */
    private Long userId;
    /**
     * 回复量
     */
    private Integer replyNum;
    /**
     * 是否删除(1.是  2.否)
     */
    private Integer isDel;
    /**
     * 是否删除枚举(1.是  2.否)
     */
    public interface isDelete{
        int yes = 1;
        int no = 2;
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActDiscussDO.java
@@ -1,6 +1,7 @@
package com.panzhihua.service_community.model.dos;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.*;
@@ -9,7 +10,7 @@
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 一起议
 * @description: 议事投票
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2021-01-22 14:48
 **/
@@ -30,7 +31,7 @@
    private String discussSubject;
    /**
     * 类型 1 图文 2 投票
     * 类型 1 议事 2 投票
     */
    private Integer type;
@@ -70,4 +71,116 @@
     */
    private String voteTitle;
    /**
     * 是否可重复投票(1.是 2.否)
     */
    private Integer isRepeat;
    /**
     * 每人票数
     */
    private Integer count;
    /**
     * 单张图片宽度
     */
    private BigDecimal imgWidth;
    /**
     * 单张图片高度
     */
    private Integer imgHeight;
    /**
     * 开始时间
     */
    private Date startTime;
    /**
     * 结束时间
     */
    private Date endTime;
    /**
     * 评论数
     */
    private Integer commentNum;
    /**
     * 点赞数
     */
    private Integer fabulousNum;
    /**
     * 浏览量
     */
    private Integer viewsNum;
    /**
     * 参与人数
     */
    private Integer joinNum;
    /**
     * 状态(1.未开始 2.进行中 3.待公布 4.已公布 5.已发布)
     */
    private Integer status;
    /**
     * 是否已删除(1.是 2.否)
     */
    private Integer isDel;
    /**
     * 公布结果
     */
    private String publishResult;
    /**
     * 公布时间
     */
    private Date publishAt;
    /**
     * 发布时间
     */
    private Date releaseAt;
    /**
     * 修改时间
     */
    private Date updateAt;
    /**
     * 公布人id
     */
    private Long publishBy;
    /**
     * 类型 1 议事 2 投票
     */
    public interface type{
        int ys = 1;
        int tp = 2;
    }
    /**
     * 是否枚举(1.是  2.否)
     */
    public interface isOk{
        int yes = 1;
        int no = 2;
    }
    /**
     * 状态(1.未开始 2.进行中 3.待公布 4.已公布 5.已发布)
     */
    public interface status{
        int wks = 1;
        int jxz = 2;
        int dgb = 3;
        int ygb = 4;
        int yfb = 5;
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActDiscussOptionUserDO.java
@@ -37,4 +37,9 @@
     * 投票时间
     */
    private Date createAt;
    /**
     * 一起议id
     */
    private Long discussId;
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActDiscussService.java
@@ -2,17 +2,19 @@
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.model.dtos.community.bigscreen.work.ScreenDiscussListDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO;
import com.panzhihua.common.model.vos.R;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 一起议
 * @description: 议事投票
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2021-01-22 14:50
 **/
public interface ComActDiscussService {
    /**
     * 一起议-新增
     * 议事投票-新增
     * 
     * @param comActDiscussDTO
     *            新增参数
@@ -21,16 +23,23 @@
    R addDiscuss(ComActDiscussDTO comActDiscussDTO);
    /**
     * 一起议-详情
     *
     * @param id
     *            主键
     * @return ComActDiscussVO
     * 议事投票-编辑
     * @param comActDiscussDTO  请求参数
     * @return  编辑结果
     */
    R detailDiscuss(Long id);
    R editDiscuss(ComActDiscussDTO comActDiscussDTO);
    /**
     * 一起议-删除
     * 议事投票-详情
     *
     * @param discussDetailDTO
     *            请求参数
     * @return ComActDiscussVO
     */
    R detailDiscuss(ComActDiscussDetailDTO discussDetailDTO);
    /**
     * 议事投票-删除
     * 
     * @param id
     *            主键
@@ -39,7 +48,7 @@
    R deleteDiscuss(Long id);
    /**
     * 一起议-回复
     * 议事投票-回复
     * 
     * @param comActDiscussCommentDTO
     *            评论内容
@@ -48,7 +57,7 @@
    R addDiscussComment(ComActDiscussCommentDTO comActDiscussCommentDTO);
    /**
     * 一起议-分页查询
     * 议事投票-分页查询
     * 
     * @param pageComActDiscussDTO
     *            查询参数
@@ -57,7 +66,14 @@
    R pageDiscuss(PageComActDiscussDTO pageComActDiscussDTO);
    /**
     * 一起议-评论-查看
     * 议事投票-后台分页查询
     * @param pageComActDiscussDTO  请求参数
     * @return  议事投票列表
     */
    R pageDiscussAdmin(PageComActDiscussDTO pageComActDiscussDTO);
    /**
     * 议事投票-评论-查看
     * 
     * @param id
     *            主键
@@ -66,7 +82,14 @@
    R detailDiscusscomment(Long id);
    /**
     * 一起议-评论-置顶
     * 议事投票评论详情
     * @param pageComActDiscussCommentDTO   请求参数
     * @return  议事投票详情
     */
    R detailDiscussCommentAdmin(PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 议事投票-评论-置顶
     * 
     * @param id
     *            主键
@@ -75,7 +98,7 @@
    R putDiscussCommentTop(Long id);
    /**
     * 一起议-评论-回复
     * 议事投票-评论-回复
     * 
     * @param comActDiscussCommentDTO
     *            回复内容
@@ -84,7 +107,7 @@
    R addDiscussCommentBack(ComActDiscussCommentDTO comActDiscussCommentDTO);
    /**
     * 一起议-评论-分页查询
     * 议事投票-评论-分页查询
     * 
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
@@ -93,7 +116,16 @@
    R pageDiscussComment(PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 一起议-分页查询 小程序
     * 议事投票-评论-后台分页查询
     *
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
     * @return ComActDiscussCommentVO
     */
    R pageDiscussCommentAdmin(PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 议事投票-分页查询 小程序
     * 
     * @param pageComActDiscussDTO
     *            查询参数
@@ -102,7 +134,7 @@
    R pageDiscussApplets(PageComActDiscussDTO pageComActDiscussDTO);
    /**
     * 一起议-点赞、取消点赞
     * 议事投票-点赞、取消点赞
     * 
     * @param comActDiscussUserDTO
     *            操作类型
@@ -111,7 +143,7 @@
    R putDiscussUser(ComActDiscussUserDTO comActDiscussUserDTO);
    /**
     * 一起议-评论-分页查询 小程序
     * 议事投票-评论-分页查询 小程序
     * 
     * @param pageComActDiscussCommentDTO
     *            分页参数
@@ -120,7 +152,7 @@
    R pageDiscussCommentApplets(PageComActDiscussCommentDTO pageComActDiscussCommentDTO);
    /**
     * 一起议-详情 小程序
     * 议事投票-详情 小程序
     * 
     * @param id
     *            主键
@@ -131,7 +163,7 @@
    R detailDiscussApplets(Long id, Long userId);
    /**
     * 一起议-投票
     * 议事投票-投票
     * 
     * @param comActDiscussOptionUserDTO
     *            投票信息
@@ -140,7 +172,7 @@
    R addDiscussOptionUser(ComActDiscussOptionUserDTO comActDiscussOptionUserDTO);
    /**
     * 一起议-评论-点赞、取消点赞
     * 议事投票-评论-点赞、取消点赞
     * 
     * @param comActDiscussUserDTO
     *            评论点赞
@@ -149,11 +181,72 @@
    R putDiscussCommentUser(ComActDiscussCommentUserDTO comActDiscussUserDTO);
    /**
     * 工作大屏-一起议列表
     * 工作大屏-议事投票列表
     * 
     * @param discussListDTO
     *            请求参数
     * @return 一起议列表
     * @return 议事投票列表
     */
    R getScreenDiscussList(ScreenDiscussListDTO discussListDTO);
    /**
     * 议事投票后台公布结果
     * @param publishResultDTO  请求参数
     * @return  公布结果
     */
    R publishResultAdmin(ComActDiscussPublishResultDTO publishResultDTO);
    /**
     * 议事投票-评论/回复删除
     * @param id    评论/回复id
     * @return  删除结果
     */
    R deleteDiscussCommentAdmin(Long id);
    /**
     * 分页查询评论下回复列表
     * @param discussDetailDTO  请求参数
     * @return  回复列表
     */
    R discussCommentReplyAdmin(ComActDiscussDetailDTO discussDetailDTO);
    /**
     * 查询社区可发布议事投票权限配置
     * @param communityId   社区id
     * @return  社区可发布议事投票权限配置
     */
    R discussJurisdictionGet(Long communityId,Long userId);
    /**
     * 设置当前社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)
     * @param communityId   社区id
     * @param value 需要设置的参数值
     * @return  设置结果
     */
    R discussJurisdictionSet(Long communityId,String value);
    /**
     * 议事投票检测状态定时任务
     * @return  执行结果
     */
    R timedTaskDiscussInspectStatus();
    /**
     * 一起议增加浏览量
     * @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,44 +1,97 @@
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 org.springframework.beans.BeanUtils;
import org.springframework.data.redis.connection.StringRedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.constants.Constants;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.dtos.community.ComActDiscussCommentDTO;
import com.panzhihua.common.model.dtos.community.ComActDiscussCommentUserDTO;
import com.panzhihua.common.model.dtos.community.ComActDiscussDTO;
import com.panzhihua.common.model.dtos.community.ComActDiscussOptionDTO;
import com.panzhihua.common.model.dtos.community.ComActDiscussOptionUserDTO;
import com.panzhihua.common.model.dtos.community.ComActDiscussUserDTO;
import com.panzhihua.common.model.dtos.community.PageComActDiscussCommentDTO;
import com.panzhihua.common.model.dtos.community.PageComActDiscussDTO;
import com.panzhihua.common.model.dtos.community.bigscreen.work.ScreenDiscussListDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussDetailDTO;
import com.panzhihua.common.model.dtos.community.discuss.ComActDiscussPublishResultDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.ComActDiscussCommentVO;
import com.panzhihua.common.model.vos.community.ComActDiscussOptionUserVO;
import com.panzhihua.common.model.vos.community.ComActDiscussOptionVO;
import com.panzhihua.common.model.vos.community.ComActDiscussVO;
import com.panzhihua.common.model.vos.community.ComActVO;
import com.panzhihua.common.model.vos.community.SysConfVO;
import com.panzhihua.common.model.vos.community.screen.work.DiscussListVO;
import com.panzhihua.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.dao.SysConfMapper;
import com.panzhihua.service_community.model.dos.ComActDiscussCommentDO;
import com.panzhihua.service_community.model.dos.ComActDiscussCommentUserDO;
import com.panzhihua.service_community.model.dos.ComActDiscussDO;
import com.panzhihua.service_community.model.dos.ComActDiscussOptionDO;
import com.panzhihua.service_community.model.dos.ComActDiscussOptionUserDO;
import com.panzhihua.service_community.model.dos.ComActDiscussUserDO;
import com.panzhihua.service_community.model.dos.SysConfDO;
import com.panzhihua.service_community.service.ComActDiscussOptionService;
import com.panzhihua.service_community.service.ComActDiscussService;
import com.panzhihua.service_community.service.SysConfService;
import lombok.extern.slf4j.Slf4j;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 一起议
 * @description: 议事投票
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2021-01-22 14:51
 **/
@Service
@Slf4j
public class ComActDiscussServiceImpl implements ComActDiscussService {
    private static final String DISCUSS_VIEW_NUM_PREFIX = "DISCUSS_VIEW_NUM";
    private static final String INCR_VIEW_DISCUSS_IDS_KEY = "INCR_VIEW_DISCUSS_IDS";
    private static final long DISCUSS_EXPIRE_TIME = 2678400L;
    @Resource
    private ComActDiscussCommentDAO comActDiscussCommentDAO;
    @Resource
@@ -53,33 +106,56 @@
    private ComActDiscussCommentUserDAO comActDiscussCommentUserDAO;
    @Resource
    private ComActDiscussOptionService comActDiscussOptionService;
    @Resource
    private SysConfMapper sysConfDao;
    @Resource
    private SysConfService sysConfService;
    @Resource
    private UserService userService;
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    /**
     * 一起议-新增
     * 议事投票-新增
     *
     * @param comActDiscussDTO
     *            新增参数
     * @param comActDiscussDTO 新增参数
     * @return 新增结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addDiscuss(ComActDiscussDTO comActDiscussDTO) {
        if (!checkCurrentUserDiscussIdentity(comActDiscussDTO)) {
            return R.fail("权限验证失败,请确认是否有发布权限");
        }
        ComActDiscussDO comActDiscussDO = new ComActDiscussDO();
        BeanUtils.copyProperties(comActDiscussDTO, comActDiscussDO);
        ComActVO comActVO = comActDiscussDAO.selectCommunity(comActDiscussDTO.getCommunityId());
        Integer type = comActDiscussDTO.getType();
        Date nowDate = new Date();
        if (type.equals(ComActDiscussDO.type.tp)) {//判断是投票,需要转义时间
            Date startTime = DateUtils.stringToDate(comActDiscussDTO.getStartTime(), DateUtils.ymdhms_format);
            Date endTime = DateUtils.stringToDate(comActDiscussDTO.getEndTime(), DateUtils.ymdhms_format);
            comActDiscussDO.setStartTime(startTime);
            comActDiscussDO.setEndTime(endTime);
            comActDiscussDO.setStatus(ComActDiscussDO.status.wks);
            //根据时间判断状态是否开始
            if (startTime != null && startTime.getTime() <= nowDate.getTime()) {
                comActDiscussDO.setStatus(ComActDiscussDO.status.jxz);
                comActDiscussDO.setReleaseAt(nowDate);
            }
        } else {
            comActDiscussDO.setStatus(ComActDiscussDO.status.yfb);
        }
        String address = comActDiscussDO.getAddress();
        if (ObjectUtils.isEmpty(address)) {
            //查询社区地址
            ComActVO comActVO = comActDiscussDAO.selectCommunity(comActDiscussDTO.getCommunityId());
            comActDiscussDO.setAddress(comActVO.getAddress());
        }
        int insert = comActDiscussDAO.insert(comActDiscussDO);
        if (insert > 0) {
            ComActDiscussDO comActDiscussDO1 = comActDiscussDAO.selectOne(new QueryWrapper<ComActDiscussDO>().lambda()
                .eq(ComActDiscussDO::getDiscussSubject, comActDiscussDTO.getDiscussSubject())
                .eq(ComActDiscussDO::getUserId, comActDiscussDTO.getUserId())
                .last(" order by create_at desc limit 1 "));
            Long comActDiscussDO1Id = comActDiscussDO1.getId();
            Integer type = comActDiscussDTO.getType();
            //如果是投票,需要把投票的选项存储
            if (type.equals(2)) {
                Long comActDiscussDO1Id = comActDiscussDO.getId();
                List<ComActDiscussOptionDTO> discussOptions = comActDiscussDTO.getDiscussOptions();
                List<ComActDiscussOptionDO> comActDiscussOptionDOS = new ArrayList<>();
                discussOptions.forEach(s -> {
@@ -97,72 +173,169 @@
    }
    /**
     * 一起议-详情
     *
     * @param id
     *            主键
     * @return ComActDiscussVO
     * 小程序用户验证是否拥有发布权限
     * @param comActDiscussDTO
     * @return
     */
    @Override
    public R detailDiscuss(Long id) {
        ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(id);
        if (ObjectUtils.isEmpty(comActDiscussDO)) {
            return R.fail("一起议不存在");
    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;
            }
        }
        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);
        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<>();
            comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> {
                Long discussOptionDOId = comActDiscussOptionDO.getId();
                Integer selectCount =
                    comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>().lambda()
                        .eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
                ComActDiscussOptionVO comActDiscussOptionVO = new ComActDiscussOptionVO();
                BeanUtils.copyProperties(comActDiscussOptionDO, comActDiscussOptionVO);
                comActDiscussOptionVO.setNum(selectCount);
                comActDiscussOptionVOS.add(comActDiscussOptionVO);
            });
            comActDiscussOptionVOS.sort(Comparator.comparing(ComActDiscussOptionVO::getNum).reversed());
            comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionVOS);
        }
        Long userId = comActDiscussDO.getUserId();
        LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId);
        comActDiscussVO.setUserName(loginUserInfoVO.getName());
        return R.ok(comActDiscussVO);
        return checkResult;
    }
    /**
     * 一起议-删除
     * 议事投票-编辑
     *
     * @param id
     *            主键
     * @return 删除结果
     * @param comActDiscussDTO 请求参数
     * @return 编辑结果
     */
    @Override
    public R deleteDiscuss(Long id) {
        int delete = comActDiscussDAO.deleteById(id);
        if (delete > 0) {
    @Transactional(rollbackFor = Exception.class)
    public R editDiscuss(ComActDiscussDTO comActDiscussDTO) {
        Long comActDiscussDO1Id = comActDiscussDTO.getId();
        ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(comActDiscussDO1Id);
        if (ObjectUtils.isEmpty(comActDiscussDO)) {
            return R.fail("议事投票不存在");
        }
        if (!comActDiscussDO.getStatus().equals(ComActDiscussDO.status.wks) && !comActDiscussDO.getStatus().equals(ComActDiscussDO.status.yfb)) {
            return R.fail("该状态不可修改");
        }
        Integer type = comActDiscussDO.getType();
        Integer isRepeat = comActDiscussDO.getIsRepeat();
        BeanUtils.copyProperties(comActDiscussDTO, comActDiscussDO);
        comActDiscussDO.setType(type);
        comActDiscussDO.setIsRepeat(isRepeat);
        Date nowDate = new Date();
        if (type.equals(ComActDiscussDO.type.tp)) {//判断是投票,需要转义时间
            Date startTime = DateUtils.stringToDate(comActDiscussDTO.getStartTime(), DateUtils.ymdhms_format);
            Date endTime = DateUtils.stringToDate(comActDiscussDTO.getEndTime(), DateUtils.ymdhms_format);
            comActDiscussDO.setStartTime(startTime);
            comActDiscussDO.setEndTime(endTime);
            comActDiscussDO.setStatus(ComActDiscussDO.status.wks);
            //根据时间判断状态是否开始
            if (startTime != null && startTime.getTime() <= nowDate.getTime()) {
                comActDiscussDO.setStatus(ComActDiscussDO.status.jxz);
                comActDiscussDO.setReleaseAt(nowDate);
            }
        } else {
            comActDiscussDO.setStatus(ComActDiscussDO.status.yfb);
        }
        comActDiscussDO.setUpdateAt(new Date());
        int insert = comActDiscussDAO.updateById(comActDiscussDO);
        if (insert > 0) {
            //如果是投票,需要把投票的选项存储
            if (type.equals(2)) {
                comActDiscussOptionService.remove(new QueryWrapper<ComActDiscussOptionDO>().lambda()
                        .eq(ComActDiscussOptionDO::getDiscussId, comActDiscussDO1Id));
                List<ComActDiscussOptionDO> comActDiscussOptionDOS = new ArrayList<>();
                comActDiscussDTO.getDiscussOptions().forEach(s -> {
                    ComActDiscussOptionDO comActDiscussOptionDO = new ComActDiscussOptionDO();
                    comActDiscussOptionDO.setDiscussId(comActDiscussDO1Id);
                    comActDiscussOptionDO.setOptionContent(s.getOptionContent());
                    comActDiscussOptionDO.setOptionUrl(s.getOptionUrl());
                    comActDiscussOptionDOS.add(comActDiscussOptionDO);
                });
                comActDiscussOptionService.saveBatch(comActDiscussOptionDOS);
            }
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 一起议-回复
     * 议事投票-详情
     *
     * @param comActDiscussCommentDTO
     *            评论内容
     * @param discussDetailDTO 请求参数
     * @return ComActDiscussVO
     */
    @Override
    public R detailDiscuss(ComActDiscussDetailDTO discussDetailDTO) {
        Long id = discussDetailDTO.getId();
        ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(id);
        if (ObjectUtils.isEmpty(comActDiscussDO)) {
            return R.fail("议事投票不存在");
        }
        ComActDiscussVO comActDiscussVO = new ComActDiscussVO();
        BeanUtils.copyProperties(comActDiscussDO, comActDiscussVO);
        comActDiscussVO.setSignNum(comActDiscussDO.getFabulousNum());
        Integer type = comActDiscussVO.getType();
        if (type.equals(ComActDiscussVO.type.tp)) {
            //查询选项列表
            List<ComActDiscussOptionVO> comActDiscussOptionList = comActDiscussOptionDAO.getDiscussOptionList(id);
            comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionList);
        }
        Long userId = comActDiscussDO.getUserId();
        LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(userId);
        comActDiscussVO.setUserName(loginUserInfoVO.getName());
        comActDiscussVO.setUserNickName(loginUserInfoVO.getNickName());
        //分页查询评论列表
        PageComActDiscussCommentDTO pageComActDiscussCommentDTO = new PageComActDiscussCommentDTO();
        BeanUtils.copyProperties(discussDetailDTO, pageComActDiscussCommentDTO);
        IPage<ComActDiscussCommentVO> discussComments = comActDiscussDAO.pageDiscussCommentAdmin(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO);
        discussComments.getRecords().forEach(comment -> {
            if (comment.getReplyNum() > 0) {
                List<ComActDiscussCommentVO> childList = comActDiscussDAO.getDiscussCommentReplyList(comment.getId());
                if (!childList.isEmpty()) {
                    comment.setComActDiscussCommentVOList(childList);
                }
            }
        });
        comActDiscussVO.setDiscussCommentList(discussComments.getRecords());
        return R.ok(comActDiscussVO);
    }
    /**
     * 议事投票-删除
     *
     * @param id 主键
     * @return 删除结果
     */
    @Override
    public R deleteDiscuss(Long id) {
        ComActDiscussDO comActDiscussDO = new ComActDiscussDO();
        comActDiscussDO.setId(id);
        comActDiscussDO.setIsDel(ComActDiscussDO.isOk.yes);
        if (comActDiscussDAO.updateById(comActDiscussDO) > 0) {
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 议事投票-回复
     *
     * @param comActDiscussCommentDTO 评论内容
     * @return 回复结果
     */
    @Override
@@ -170,52 +343,62 @@
        Long discussId = comActDiscussCommentDTO.getDiscussId();
        ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(discussId);
        if (ObjectUtils.isEmpty(comActDiscussDO)) {
            return R.fail("一起议不存在");
            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) {
//            comActDiscussDAO.addCommentCount(discussId, 1);
            //评论成功,评论总数+1
            //若首次参与评论,参与讨论人数+1
            if (currentUserCommentCount > 0) {
                comActDiscussDAO.incrCommentAndJoinNumById(discussId, false);
            } else {
                comActDiscussDAO.incrCommentAndJoinNumById(discussId, true);
            }
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 一起议-分页查询
     * 议事投票-分页查询
     *
     * @param pageComActDiscussDTO
     *            查询参数
     * @param pageComActDiscussDTO 查询参数
     * @return ComActDiscussVO
     */
    @Override
    public R pageDiscuss(PageComActDiscussDTO pageComActDiscussDTO) {
        Page page = new Page<>();
        Long pageNum = pageComActDiscussDTO.getPageNum();
        Long pageSize = pageComActDiscussDTO.getPageSize();
        if (null == pageNum || 0 == pageNum) {
            pageNum = 1l;
        }
        if (null == pageSize || 0 == pageSize) {
            pageSize = 10l;
        }
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<ComActDiscussVO> iPage = comActDiscussDAO.pageDiscuss(page, pageComActDiscussDTO);
        IPage<ComActDiscussVO> iPage = comActDiscussDAO.pageDiscuss(new Page<>(pageComActDiscussDTO.getPageNum(), pageComActDiscussDTO.getPageSize()), pageComActDiscussDTO);
        return R.ok(iPage);
    }
    /**
     * 一起议-评论-查看
     * 议事投票-后台分页查询
     *
     * @param id
     *            主键
     * @param pageComActDiscussDTO 请求参数
     * @return 议事投票列表
     */
    @Override
    public R pageDiscussAdmin(PageComActDiscussDTO pageComActDiscussDTO) {
        return R.ok(comActDiscussDAO.pageDiscussAdmin(new Page<>(pageComActDiscussDTO.getPageNum(), pageComActDiscussDTO.getPageSize()), pageComActDiscussDTO));
    }
    /**
     * 议事投票-评论-查看
     *
     * @param id 主键
     * @return 详情 ComActDiscussCommentVO
     */
    @Override
@@ -237,7 +420,7 @@
            comActDiscussCommentVO.setParentId(parentId);
        }
        Integer count = comActDiscussCommentUserDAO.selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
            .eq(ComActDiscussCommentUserDO::getDisscussCommentId, id));
                .eq(ComActDiscussCommentUserDO::getDisscussCommentId, id));
        comActDiscussCommentVO.setNum(count);
        LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(comActDiscussCommentDO.getUserId());
        comActDiscussCommentVO.setUserName(loginUserInfoVO.getName());
@@ -246,10 +429,50 @@
    }
    /**
     * 一起议-评论-置顶
     * 议事投票评论详情
     *
     * @param id
     *            主键
     * @param pageComActDiscussCommentDTO 请求参数
     * @return 议事投票详情
     */
    @Override
    public R detailDiscussCommentAdmin(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        Long id = pageComActDiscussCommentDTO.getId();
        ComActDiscussCommentDO comActDiscussCommentDO = comActDiscussCommentDAO.selectById(id);
        if (ObjectUtils.isEmpty(comActDiscussCommentDO)) {
            return R.fail("评论不存在");
        }
        ComActDiscussCommentVO comActDiscussCommentVO = new ComActDiscussCommentVO();
        Long parentId = comActDiscussCommentDO.getParentId();
        if (parentId.intValue() == 0) {
            // 一级评论
            BeanUtils.copyProperties(comActDiscussCommentDO, comActDiscussCommentVO);
        } else {
            ComActDiscussCommentDO comActDiscussCommentDO1 = comActDiscussCommentDAO.selectById(parentId);
            BeanUtils.copyProperties(comActDiscussCommentDO1, comActDiscussCommentVO);
            comActDiscussCommentVO.setCommentBack(comActDiscussCommentDO.getComment());
            comActDiscussCommentVO.setTimeBack(comActDiscussCommentDO.getCreateAt());
            comActDiscussCommentVO.setParentId(parentId);
        }
        Integer count = comActDiscussCommentUserDAO.selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
                .eq(ComActDiscussCommentUserDO::getDisscussCommentId, id));
        comActDiscussCommentVO.setNum(count);
        LoginUserInfoVO loginUserInfoVO = comActDiscussDAO.selectUserByUserId(comActDiscussCommentDO.getUserId());
        comActDiscussCommentVO.setUserName(loginUserInfoVO.getName());
        comActDiscussCommentVO.setPhone(loginUserInfoVO.getPhone());
        comActDiscussCommentVO.setImageUrl(loginUserInfoVO.getImageUrl());
        //查询该评论下所有回复内容
        IPage<ComActDiscussCommentVO> discussCommentList = comActDiscussCommentDAO.getDiscussCommentList(new Page(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO.getId());
        if (!discussCommentList.getRecords().isEmpty()) {
            comActDiscussCommentVO.setComActDiscussCommentVOList(discussCommentList.getRecords());
        }
        return R.ok(comActDiscussCommentVO);
    }
    /**
     * 议事投票-评论-置顶
     *
     * @param id 主键
     * @return 置顶结果
     */
    @Override
@@ -266,7 +489,7 @@
        ComActDiscussCommentDO comActDiscussCommentDO1 = new ComActDiscussCommentDO();
        comActDiscussCommentDO1.setIsTopping(0);
        comActDiscussCommentDAO.update(comActDiscussCommentDO1,
            new UpdateWrapper<ComActDiscussCommentDO>().lambda().eq(ComActDiscussCommentDO::getDiscussId, discussId));
                new UpdateWrapper<ComActDiscussCommentDO>().lambda().eq(ComActDiscussCommentDO::getDiscussId, discussId));
        comActDiscussCommentDO1.setIsTopping(1);
        comActDiscussCommentDO1.setId(id);
        int update = comActDiscussCommentDAO.updateById(comActDiscussCommentDO1);
@@ -277,10 +500,9 @@
    }
    /**
     * 一起议-评论-回复
     * 议事投票-评论-回复
     *
     * @param comActDiscussCommentDTO
     *            回复内容
     * @param comActDiscussCommentDTO 回复内容
     * @return 回复结果
     */
    @Override
@@ -293,54 +515,68 @@
        Long discussId = comActDiscussCommentDO.getDiscussId();
        ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(discussId);
        if (ObjectUtils.isEmpty(comActDiscussDO)) {
            return R.fail("一起议不存在");
            return R.fail("议事投票不存在");
        }
        Long userId = comActDiscussDO.getUserId();
        Long userId1 = comActDiscussCommentDTO.getUserId();
        Long parentId = comActDiscussCommentDO.getParentId();
        if (parentId.intValue() != 0) {
            return R.fail("二级评论不能回复");
        }
        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) {
//            comActDiscussDAO.addCommentCount(discussId, 1);
            //回复成功,评论总数+1
            //若首次参与评论,参与讨论人数+1
            if (currentUserCommentCount > 0) {
                comActDiscussDAO.incrCommentAndJoinNumById(discussId, false);
            } else {
                comActDiscussDAO.incrCommentAndJoinNumById(discussId, true);
            }
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 一起议-评论-分页查询
     * 议事投票-评论-分页查询
     *
     * @param pageComActDiscussCommentDTO
     *            分页查询参数
     * @param pageComActDiscussCommentDTO 分页查询参数
     * @return ComActDiscussCommentVO
     */
    @Override
    public R pageDiscussComment(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        Page page = new Page<>();
        Long pageNum = pageComActDiscussCommentDTO.getPageNum();
        Long pageSize = pageComActDiscussCommentDTO.getPageSize();
        if (null == pageNum || 0 == pageNum) {
            pageNum = 1l;
        }
        if (null == pageSize || 0 == pageSize) {
            pageSize = 10l;
        }
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<ComActDiscussCommentVO> iPage = comActDiscussDAO.pageDiscussComment(page, pageComActDiscussCommentDTO);
        IPage<ComActDiscussCommentVO> iPage = comActDiscussDAO.pageDiscussComment(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO);
        return R.ok(iPage);
    }
    /**
     * 一起议-分页查询 小程序
     * 议事投票-评论-后台分页查询
     *
     * @param pageComActDiscussDTO
     *            查询参数
     * @param pageComActDiscussCommentDTO 分页查询参数
     * @return ComActDiscussCommentVO
     */
    @Override
    public R pageDiscussCommentAdmin(PageComActDiscussCommentDTO pageComActDiscussCommentDTO) {
        IPage<ComActDiscussCommentVO> iPage = comActDiscussDAO.pageDiscussCommentAdmin(new Page<>(pageComActDiscussCommentDTO.getPageNum(), pageComActDiscussCommentDTO.getPageSize()), pageComActDiscussCommentDTO);
        return R.ok(iPage);
    }
    /**
     * 议事投票-分页查询 小程序
     *
     * @param pageComActDiscussDTO 查询参数
     * @return ComActDiscussVO 分页
     */
    @Override
@@ -365,13 +601,13 @@
                Long id = comActDiscussVO.getId();
                if (type.equals(2)) {
                    List<ComActDiscussOptionDO> comActDiscussOptionDOS = comActDiscussOptionDAO.selectList(
                        new QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, id));
                            new QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, id));
                    List<ComActDiscussOptionVO> comActDiscussOptionVOS = new ArrayList<>();
                    comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> {
                        Long discussOptionDOId = comActDiscussOptionDO.getId();
                        Integer selectCount =
                            comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>()
                                .lambda().eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
                                comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>()
                                        .lambda().eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
                        ComActDiscussOptionVO comActDiscussOptionVO = new ComActDiscussOptionVO();
                        BeanUtils.copyProperties(comActDiscussOptionDO, comActDiscussOptionVO);
                        comActDiscussOptionVO.setNum(selectCount);
@@ -379,19 +615,27 @@
                        if (loginUserId != null) {
                            // 判断选项是否已投票
                            int haveVote =
                                comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
                                    comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
                            comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0);
                        }
                        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) {
                    Integer integer = comActDiscussUserDAO.selectCount(new QueryWrapper<ComActDiscussUserDO>().lambda()
                        .eq(ComActDiscussUserDO::getDiscussId, comActDiscussVO.getId())
                        .eq(ComActDiscussUserDO::getUserId, loginUserId));
                            .eq(ComActDiscussUserDO::getDiscussId, comActDiscussVO.getId())
                            .eq(ComActDiscussUserDO::getUserId, loginUserId));
                    if (integer > 0) {
                        comActDiscussVO.setHaveSign(1);
                    } else {
@@ -407,10 +651,23 @@
    }
    /**
     * 一起议-点赞、取消点赞
     * 判断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
     *            操作类型
     * @param comActDiscussUserDTO 操作类型
     * @return 操作结果
     */
    @Override
@@ -419,24 +676,26 @@
        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()
                .eq(ComActDiscussUserDO::getUserId, comActDiscussUserDTO.getUserId())
                .eq(ComActDiscussUserDO::getDiscussId, comActDiscussUserDTO.getDiscussId()));
                    .eq(ComActDiscussUserDO::getUserId, comActDiscussUserDTO.getUserId())
                    .eq(ComActDiscussUserDO::getDiscussId, comActDiscussUserDTO.getDiscussId()));
        }
        if (num > 0) {
            //点赞成功 总数+1 || 取消点赞成功 总数-1
            comActDiscussDAO.incrOrDecrFabulousNumByType(comActDiscussUserDTO.getDiscussId(), isIncr);
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 一起议-评论-分页查询 小程序
     * 议事投票-评论-分页查询 小程序
     *
     * @param pageComActDiscussCommentDTO
     *            分页参数
     * @param pageComActDiscussCommentDTO 分页参数
     * @return ComActDiscussCommentVO
     */
    @Override
@@ -453,7 +712,7 @@
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<ComActDiscussCommentVO> iPage =
            comActDiscussDAO.pageDiscussCommentApplets(page, pageComActDiscussCommentDTO);
                comActDiscussDAO.pageDiscussCommentApplets(page, pageComActDiscussCommentDTO);
        List<ComActDiscussCommentVO> records = iPage.getRecords();
        if (!ObjectUtils.isEmpty(records)) {
            records.forEach(comActDiscussCommentVO -> {
@@ -465,8 +724,8 @@
                    comActDiscussCommentVOList.forEach(comActDiscussCommentVO1 -> {
                        Long parentId = comActDiscussCommentVO1.getParentId();
                        List<ComActDiscussCommentVO> collect = comActDiscussCommentVOS.stream()
                            .filter(comActDiscussCommentVO2 -> comActDiscussCommentVO2.getId().equals(parentId))
                            .collect(Collectors.toList());
                                .filter(comActDiscussCommentVO2 -> comActDiscussCommentVO2.getId().equals(parentId))
                                .collect(Collectors.toList());
                        if (!ObjectUtils.isEmpty(collect)) {
                            String userName = collect.get(0).getUserName();
                            String userNickName = collect.get(0).getUserNickName();
@@ -474,8 +733,8 @@
                            comActDiscussCommentVO1.setUserNickNameBack(userNickName);
                        }
                        List<ComActDiscussCommentVO> collect1 = records.stream()
                            .filter(comActDiscussCommentVO2 -> comActDiscussCommentVO2.getId().equals(parentId))
                            .collect(Collectors.toList());
                                .filter(comActDiscussCommentVO2 -> comActDiscussCommentVO2.getId().equals(parentId))
                                .collect(Collectors.toList());
                        if (!ObjectUtils.isEmpty(collect1)) {
                            ComActDiscussCommentVO comActDiscussCommentVOFirst = collect1.get(0);
                            String userName = comActDiscussCommentVOFirst.getUserName();
@@ -484,13 +743,13 @@
                            comActDiscussCommentVO1.setUserNickNameBack(userNickName);
                        }
                        if (pageComActDiscussCommentDTO.getLoginUserId() != null
                            && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
                                && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
                            Integer integer = comActDiscussCommentUserDAO
                                .selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
                                    .eq(ComActDiscussCommentUserDO::getDisscussCommentId,
                                        comActDiscussCommentVO1.getId())
                                    .eq(ComActDiscussCommentUserDO::getUserId,
                                        pageComActDiscussCommentDTO.getLoginUserId()));
                                    .selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
                                            .eq(ComActDiscussCommentUserDO::getDisscussCommentId,
                                                    comActDiscussCommentVO1.getId())
                                            .eq(ComActDiscussCommentUserDO::getUserId,
                                                    pageComActDiscussCommentDTO.getLoginUserId()));
                            if (integer > 0) {
                                comActDiscussCommentVO1.setHaveSign(1);
                            } else {
@@ -504,11 +763,11 @@
                    comActDiscussCommentVO.setComActDiscussCommentVOList(comActDiscussCommentVOList);
                }
                if (pageComActDiscussCommentDTO.getLoginUserId() != null
                    && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
                        && !pageComActDiscussCommentDTO.getLoginUserId().equals(0L)) {
                    Integer integer =
                        comActDiscussCommentUserDAO.selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
                            .eq(ComActDiscussCommentUserDO::getDisscussCommentId, comActDiscussCommentVO.getId())
                            .eq(ComActDiscussCommentUserDO::getUserId, pageComActDiscussCommentDTO.getLoginUserId()));
                            comActDiscussCommentUserDAO.selectCount(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
                                    .eq(ComActDiscussCommentUserDO::getDisscussCommentId, comActDiscussCommentVO.getId())
                                    .eq(ComActDiscussCommentUserDO::getUserId, pageComActDiscussCommentDTO.getLoginUserId()));
                    if (integer > 0) {
                        comActDiscussCommentVO.setHaveSign(1);
                    } else {
@@ -526,51 +785,68 @@
    }
    /**
     * 一起议-详情 小程序
     * 议事投票-详情 小程序
     *
     * @param id
     *            主键
     * @param loginUserId
     *            登录用户主键
     * @param id          主键
     * @param loginUserId 登录用户主键
     * @return ComActDiscussVO
     */
    @Override
    public R detailDiscussApplets(Long id, Long loginUserId) {
        ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(id);
        if (ObjectUtils.isEmpty(comActDiscussDO)) {
            return R.fail("一起议不存在");
            return R.fail("议事投票不存在");
        }
        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));
                    new QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, id));
            List<ComActDiscussOptionVO> comActDiscussOptionVOS = new ArrayList<>();
            ArrayList<Integer> votes = new ArrayList<>();
            comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> {
                Long discussOptionDOId = comActDiscussOptionDO.getId();
                Integer selectCount =
                    comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>().lambda()
                        .eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
                        comActDiscussOptionUserDAO.selectCount(new QueryWrapper<ComActDiscussOptionUserDO>().lambda()
                                .eq(ComActDiscussOptionUserDO::getDiscussOptionId, discussOptionDOId));
                ComActDiscussOptionVO comActDiscussOptionVO = new ComActDiscussOptionVO();
                BeanUtils.copyProperties(comActDiscussOptionDO, comActDiscussOptionVO);
                comActDiscussOptionVO.setNum(selectCount);
                if (loginUserId != null && !loginUserId.equals(0L)) {
                    // 判断选项是否已投票
                    int haveVote =
                        comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId);
                            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);
@@ -601,10 +877,29 @@
    }
    /**
     * 一起议-投票
     * 计算投票占比以及排序
     * @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
     *            投票信息
     * @param comActDiscussOptionUserDTO 投票信息
     * @return 投票结果
     */
    @Override
@@ -620,15 +915,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();
@@ -637,16 +949,15 @@
    }
    /**
     * 一起议-评论-点赞、取消点赞
     * 议事投票-评论-点赞、取消点赞
     *
     * @param comActDiscussCommentUserDTO
     *            评论点赞
     * @param comActDiscussCommentUserDTO 评论点赞
     * @return 点赞结果
     */
    @Override
    public R putDiscussCommentUser(ComActDiscussCommentUserDTO comActDiscussCommentUserDTO) {
        ComActDiscussCommentDO comActDiscussCommentDO =
            comActDiscussCommentDAO.selectById(comActDiscussCommentUserDTO.getId());
                comActDiscussCommentDAO.selectById(comActDiscussCommentUserDTO.getId());
        if (ObjectUtils.isEmpty(comActDiscussCommentDO)) {
            return R.fail("评论不存在");
        }
@@ -659,8 +970,8 @@
            num = comActDiscussCommentUserDAO.insert(comActDiscussCommentUserDO);
        } else {
            num = comActDiscussCommentUserDAO.delete(new QueryWrapper<ComActDiscussCommentUserDO>().lambda()
                .eq(ComActDiscussCommentUserDO::getUserId, comActDiscussCommentUserDTO.getUserId())
                .eq(ComActDiscussCommentUserDO::getDisscussCommentId, comActDiscussCommentUserDTO.getId()));
                    .eq(ComActDiscussCommentUserDO::getUserId, comActDiscussCommentUserDTO.getUserId())
                    .eq(ComActDiscussCommentUserDO::getDisscussCommentId, comActDiscussCommentUserDTO.getId()));
        }
        if (num > 0) {
            return R.ok();
@@ -669,29 +980,28 @@
    }
    /**
     * 工作大屏-一起议列表
     * 工作大屏-议事投票列表
     *
     * @param discussListDTO
     *            请求参数
     * @return 一起议列表
     * @param discussListDTO 请求参数
     * @return 议事投票列表
     */
    @Override
    public R getScreenDiscussList(ScreenDiscussListDTO discussListDTO) {
        IPage<DiscussListVO> discussListVOIPage = comActDiscussDAO
            .getScreenDiscussList(new Page(discussListDTO.getPageNum(), discussListDTO.getPageSize()), discussListDTO);
                .getScreenDiscussList(new Page(discussListDTO.getPageNum(), discussListDTO.getPageSize()), discussListDTO);
        if (!discussListVOIPage.getRecords().isEmpty()) {
            discussListVOIPage.getRecords().forEach(discussListVO -> {
                // 查询评论数量和点赞数量
                Integer integer = comActDiscussCommentDAO.selectCount(new QueryWrapper<ComActDiscussCommentDO>()
                    .lambda().eq(ComActDiscussCommentDO::getDiscussId, discussListVO.getId()));
                        .lambda().eq(ComActDiscussCommentDO::getDiscussId, discussListVO.getId()));
                discussListVO.setCommentCount(integer);
                Integer integer1 = comActDiscussUserDAO.selectCount(new QueryWrapper<ComActDiscussUserDO>().lambda()
                    .eq(ComActDiscussUserDO::getDiscussId, discussListVO.getId()));
                        .eq(ComActDiscussUserDO::getDiscussId, discussListVO.getId()));
                discussListVO.setFabulousCount(integer1);
                if (discussListVO.getType().equals(ScreenDiscussListDTO.type.tp)) {// 投票
                    List<ComActDiscussOptionVO> discussOptionList =
                        comActDiscussDAO.getScreenDiscussOptionList(discussListVO.getId());
                            comActDiscussDAO.getScreenDiscussOptionList(discussListVO.getId());
                    if (!discussOptionList.isEmpty()) {
                        discussListVO.setDiscussOptionList(discussOptionList);
                    }
@@ -700,4 +1010,268 @@
        }
        return R.ok(discussListVOIPage);
    }
    /**
     * 议事投票后台公布结果
     *
     * @param publishResultDTO 请求参数
     * @return 公布结果
     */
    @Override
    public R publishResultAdmin(ComActDiscussPublishResultDTO publishResultDTO) {
        ComActDiscussDO discussDO = comActDiscussDAO.selectById(publishResultDTO.getId());
        if (discussDO == null) {
            return R.fail("议事投票记录不存在");
        }
        Date nowDate = new Date();
        if (publishResultDTO.getType().equals(ComActDiscussPublishResultDTO.type.add)) {
            if (!discussDO.getStatus().equals(ComActDiscussDO.status.dgb)) {
                return R.fail("该议事投票不是待公布状态,不可公布结果操作");
            }
            discussDO.setStatus(ComActDiscussDO.status.ygb);
        }
        discussDO.setPublishAt(nowDate);
        discussDO.setPublishResult(publishResultDTO.getResult());
        discussDO.setUpdateAt(nowDate);
        discussDO.setPublishBy(publishResultDTO.getUserId());
        if (comActDiscussDAO.updateById(discussDO) > 0) {
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 议事投票-评论/回复删除
     *
     * @param id 评论/回复id
     * @return 删除结果
     */
    @Override
    public R deleteDiscussCommentAdmin(Long id) {
        ComActDiscussCommentDO discussCommentDO = comActDiscussCommentDAO.selectById(id);
        if (discussCommentDO == null) {
            return R.fail("未查询到该记录");
        }
        if (discussCommentDO.getIsDel().equals(ComActDiscussCommentDO.isDelete.yes)) {
            return R.fail("该记录已被删除");
        }
        discussCommentDO.setIsDel(ComActDiscussCommentDO.isDelete.yes);
        if (comActDiscussCommentDAO.updateById(discussCommentDO) > 0) {
            ComActDiscussDO discussDO = comActDiscussDAO.selectById(discussCommentDO.getDiscussId());
            if (discussDO != null) {
                if (discussDO.getCommentNum() > 0) {
                    if (discussCommentDO.getParentId().equals(0L)) {
                        Integer count = comActDiscussCommentDAO.selectCount(new QueryWrapper<ComActDiscussCommentDO>().lambda()
                                .eq(ComActDiscussCommentDO::getParentId, id).eq(ComActDiscussCommentDO::getIsDel, ComActDiscussCommentDO.isDelete.no));
                        if (count != null && count > 0 && discussDO.getCommentNum() > count) {
                            discussDO.setCommentNum(discussDO.getCommentNum() - count);
                        } else {
                            discussDO.setCommentNum(discussDO.getCommentNum() - 1);
                        }
                        comActDiscussDAO.updateById(discussDO);
                    } else {
                        discussDO.setCommentNum(discussDO.getCommentNum() - 1);
                        comActDiscussDAO.updateById(discussDO);
                    }
                }
            }
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 分页查询评论下回复列表
     *
     * @param discussDetailDTO 请求参数
     * @return 回复列表
     */
    @Override
    public R discussCommentReplyAdmin(ComActDiscussDetailDTO discussDetailDTO) {
        return R.ok(comActDiscussCommentDAO.getDiscussCommentList(new Page(discussDetailDTO.getPageNum(), discussDetailDTO.getPageSize()), discussDetailDTO.getId()));
    }
    /**
     * 查询社区可发布议事投票权限配置
     *
     * @param communityId 社区id
     * @return 社区可发布议事投票权限配置
     */
    @Override
    public R discussJurisdictionGet(Long communityId, Long userId) {
        List<SysConfDO> confDOList = sysConfDao.selectList(new LambdaQueryWrapper<SysConfDO>()
                .eq(SysConfDO::getCommunityId, communityId).orderByDesc(SysConfDO::getCreateAt));
        if (confDOList == null || confDOList.size() == 0) {
            SysConfDO sysConfDO = new SysConfDO();
            sysConfDO.setCode(Constants.DISCUSS_IDENTITY_KEY + communityId);
            sysConfDO.setName("社区议事投票小程序身份验证参数");
            sysConfDO.setValue("");// 社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)
            sysConfDO.setDescription("社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)");
            sysConfDO.setCommunityId(communityId);
            sysConfDO.setCreateBy(userId);
            int inserted = sysConfDao.insert(sysConfDO);
            if (inserted != 1) {
                throw new ServiceException("添加社区议事投票小程序身份验证参数失败");
            }
            confDOList = sysConfDao.selectList(new LambdaQueryWrapper<SysConfDO>()
                    .eq(SysConfDO::getCommunityId, communityId)
                    .orderByDesc(SysConfDO::getCreateAt));
        }
        if (confDOList != null && confDOList.size() > 0) {
            SysConfDO latest = confDOList.get(0);
            SysConfVO sysConfVO = new SysConfVO();
            BeanUtils.copyProperties(latest, sysConfVO);
            return R.ok(sysConfVO.getValue());
        }
        return R.ok();
    }
    /**
     * 设置当前社区议事投票小程序身份验证参数(1.全部 2.党员 3.志愿者 4.社区工作人员)
     *
     * @param communityId 社区id
     * @param value       需要设置的参数值
     * @return 设置结果
     */
    @Override
    public R discussJurisdictionSet(Long communityId, String value) {
        List<SysConfDO> authConf =
                sysConfDao.selectList(new LambdaQueryWrapper<SysConfDO>().eq(SysConfDO::getCommunityId, communityId)
                        .eq(SysConfDO::getCode, Constants.DISCUSS_IDENTITY_KEY + communityId).orderByDesc(SysConfDO::getCreateAt));
        if (authConf != null && authConf.size() > 0) {
            SysConfDO first = authConf.get(0);
            first.setValue(value);
            int updated = sysConfDao.updateById(first);
            if (updated == 1) {
                return R.ok();
            }
        }
        return R.fail();
    }
    /**
     * 议事投票检测状态定时任务
     * @return  执行结果
     */
    @Override
    public R timedTaskDiscussInspectStatus() {
        Date nowDate = new Date();
        //查询已过开始时间未开始投票列表
        List<ComActDiscussDO> wksDiscussList = comActDiscussDAO.selectList(new QueryWrapper<ComActDiscussDO>().lambda()
                .eq(ComActDiscussDO::getType, ComActDiscussDO.type.tp).eq(ComActDiscussDO::getIsDel, ComActDiscussDO.isOk.no)
                .eq(ComActDiscussDO::getStatus,ComActDiscussDO.status.wks).le(ComActDiscussDO::getStartTime, nowDate));
        wksDiscussList.forEach(wksDiscuss -> {
            wksDiscuss.setStatus(ComActDiscussDO.status.jxz);
            wksDiscuss.setUpdateAt(nowDate);
            wksDiscuss.setReleaseAt(nowDate);
            comActDiscussDAO.updateById(wksDiscuss);
        });
        //查询已过结束时间未结束的投票列表
        List<ComActDiscussDO> jxzDiscussList = comActDiscussDAO.selectList(new QueryWrapper<ComActDiscussDO>().lambda()
                .eq(ComActDiscussDO::getType, ComActDiscussDO.type.tp).eq(ComActDiscussDO::getIsDel, ComActDiscussDO.isOk.no)
                .eq(ComActDiscussDO::getStatus,ComActDiscussDO.status.jxz).le(ComActDiscussDO::getEndTime, nowDate));
        jxzDiscussList.forEach(jxzDiscuss -> {
            jxzDiscuss.setStatus(ComActDiscussDO.status.dgb);
            jxzDiscuss.setUpdateAt(nowDate);
            comActDiscussDAO.updateById(jxzDiscuss);
        });
        return R.ok();
    }
    /**
     * 一起议增加浏览量
     * @param discussId 一起议主键id
     */
    @Override
    public void increaseViewNum(Long discussId) {
        String incrKey = String.join("_", DISCUSS_VIEW_NUM_PREFIX, discussId.toString());
        Boolean isExist = stringRedisTemplate.hasKey(incrKey);
        ValueOperations opsForValue = stringRedisTemplate.opsForValue();
        if (isExist) {
            opsForValue.increment(incrKey);
        } else {
            ComActDiscussDO comActDiscussDO = comActDiscussDAO.selectById(discussId);
            if (nonNull(comActDiscussDO)) {
                stringRedisTemplate.executePipelined((RedisCallback<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/ComActDiscussCommentDOMapper.xml
New file
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.panzhihua.service_community.dao.ComActDiscussCommentDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActDiscussCommentDO">
        <id column="id" property="id"/>
        <result column="discuss_id" property="discussId"/>
        <result column="comment" property="comment"/>
        <result column="is_topping" property="isTopping"/>
        <result column="create_at" property="createAt"/>
        <result column="is_author" property="isAuthor"/>
        <result column="parent_id" property="parentId"/>
        <result column="user_id" property="userId"/>
        <result column="reply_num" property="replyNum"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, discuss_id, comment, is_topping, create_at, is_author, parent_id, user_id, reply_num
    </sql>
    <select id="getDiscussCommentList" parameterType="com.panzhihua.common.model.dtos.community.PageComActDiscussCommentDTO"
            resultType="com.panzhihua.common.model.vos.community.ComActDiscussCommentVO">
        SELECT
            cadc.id,
            cadc.`comment`,
            cadc.`is_author`,
            su.`image_url`,
            IFNULL( su.`name`, su.nick_name ) AS userNameBack,
            cadc.create_at
        FROM
            com_act_discuss_comment AS cadc
            LEFT JOIN sys_user AS su ON su.user_id = cadc.user_id
            where cadc.parent_id = #{id} and cadc.is_del = 2
        order by cadc.create_at desc
    </select>
</mapper>
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussCommentUserDOMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.panzhihua.service_community.dao.ComActDiscussCommentUserDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActDiscussCommentUserDO">
        <id column="id" property="id"/>
        <result column="disscuss_comment_id" property="disscussCommentId"/>
        <result column="user_id" property="userId"/>
        <result column="create_at" property="createAt"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, disscuss_comment_id, user_id, create_at
    </sql>
</mapper>
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussDOMapper.xml
New file
@@ -0,0 +1,260 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.panzhihua.service_community.dao.ComActDiscussDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActDiscussDO">
        <id column="id" property="id"/>
        <result column="discuss_subject" property="discussSubject"/>
        <result column="type" property="type"/>
        <result column="photo_pah" property="photoPah"/>
        <result column="address" property="address"/>
        <result column="user_id" property="userId"/>
        <result column="community_id" property="communityId"/>
        <result column="create_at" property="createAt"/>
        <result column="discuss_option" property="discussOption"/>
        <result column="vote_title" property="voteTitle"/>
        <result column="is_repeat" property="isRepeat"/>
        <result column="count" property="count"/>
        <result column="img_width" property="imgWidth"/>
        <result column="img_height" property="imgHeight"/>
        <result column="start_time" property="startTime"/>
        <result column="end_time" property="endTime"/>
        <result column="comment_num" property="commentNum"/>
        <result column="fabulous_num" property="fabulousNum"/>
        <result column="views_num" property="viewsNum"/>
        <result column="join_num" property="joinNum"/>
        <result column="status" property="status"/>
        <result column="is_del" property="isDel"/>
        <result column="publish_result" property="publishResult"/>
        <result column="publish_at" property="publishAt"/>
        <result column="release_at" property="releaseAt"/>
        <result column="update_at" property="updateAt"/>
        <result column="publish_by" property="publishBy"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <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, publish_by
    </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">
        SELECT
        t.*
        FROM
        (
        SELECT
        d.id,
        d.`discuss_subject`,
        d.type,
        COUNT( DISTINCT c.id ) commentNum,
        u.NAME userName,
        u.nick_name userNickName,
        d.create_at
        FROM
        com_act_discuss d
        JOIN sys_user u ON d.user_id = u.user_id
        LEFT JOIN com_act_discuss_comment c ON d.id = c.discuss_id
        WHERE
        d.community_id = #{pageComActDiscussDTO.communityId} and d.is_del = 2
        <if test = 'pageComActDiscussDTO.subject != null and pageComActDiscussDTO.subject.trim() != &quot;&quot;' >
            AND d.`discuss_subject` LIKE concat(#{pageComActDiscussDTO.subject}, '%' )
        </if>
        <if test = 'pageComActDiscussDTO.begin != null ' >
            AND d.create_at BETWEEN #{pageComActDiscussDTO.begin}
            AND #{pageComActDiscussDTO.end}
        </if>
        <if test="pageComActDiscussDTO.status != null">
            and d.status = #{pageComActDiscussDTO.status}
        </if>
        GROUP BY   d.id  )t
        order by t.create_at desc
    </select>
    <select id="pageDiscussAdmin" parameterType="com.panzhihua.common.model.dtos.community.PageComActDiscussDTO"
            resultType="com.panzhihua.common.model.vos.community.ComActDiscussVO">
        SELECT
        d.id,
        d.`discuss_subject`,
        d.type,
        d.comment_num,
        d.fabulous_num as signNum,
        d.views_num,
        d.status,
        u.NAME userName,
        u.nick_name userNickName,
        d.create_at
        FROM
        com_act_discuss d
        JOIN sys_user u ON d.user_id = u.user_id
        WHERE
        d.community_id = #{pageComActDiscussDTO.communityId} and d.is_del = 2
        <if test = 'pageComActDiscussDTO.subject != null and pageComActDiscussDTO.subject.trim() != &quot;&quot;' >
            AND d.`discuss_subject` LIKE concat(#{pageComActDiscussDTO.subject}, '%' )
        </if>
        <if test = 'pageComActDiscussDTO.begin != null ' >
            AND d.create_at BETWEEN #{pageComActDiscussDTO.begin}
            AND #{pageComActDiscussDTO.end}
        </if>
        <if test="pageComActDiscussDTO.status != null">
            and d.status = #{pageComActDiscussDTO.status}
        </if>
        <if test="pageComActDiscussDTO.keyWord != null and pageComActDiscussDTO.keyWord != &quot;&quot;">
            and (d.`discuss_subject` LIKE concat(#{pageComActDiscussDTO.keyWord}, '%' ) or
            u.`name` LIKE concat(#{pageComActDiscussDTO.keyWord}, '%' ))
        </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>
    <update id="addCommentCount">
        update com_act_discuss set comment_num = comment_num + #{num} where id = #{discussId}
    </update>
    <select id="pageDiscussCommentAdmin" parameterType="com.panzhihua.common.model.dtos.community.PageComActDiscussCommentDTO"
            resultType="com.panzhihua.common.model.vos.community.ComActDiscussCommentVO">
        SELECT
            *
        FROM
            (
            SELECT
                u.`name` userName,
                u.nick_name userNickName,
                u.image_url,
                u.phone,
                c.`comment`,
                c.`parent_id`,
                COUNT( DISTINCT cu.id ) num,
                COUNT( c1.id ) replyNum,
                c.create_at,
                c.is_topping,
                c.id
            FROM
                com_act_discuss_comment c
                JOIN sys_user u ON c.user_id = u.user_id
                LEFT JOIN com_act_discuss_comment_user cu ON c.id = cu.disscuss_comment_id
                LEFT JOIN com_act_discuss_comment c1 ON c1.parent_id = c.id and c1.is_del = 2
            WHERE
                c.discuss_id = #{pageComActDiscussCommentDTO.id} and c.parent_id = 0 and c.is_del = 2
            <if test = 'pageComActDiscussCommentDTO.keyWord != null and pageComActDiscussCommentDTO.keyWord.trim() != &quot;&quot;' >
                AND (c.`comment` LIKE concat( '%', #{pageComActDiscussCommentDTO.keyWord  }, '%' ) or
                u.`name` LIKE concat(#{pageComActDiscussCommentDTO.keyWord}, '%' ) or
                u.phone LIKE concat(#{pageComActDiscussCommentDTO.keyWord}, '%' ))
            </if>
            GROUP BY
                c.id
            ) t
        ORDER BY
            t.is_topping DESC,t.create_at DESC
    </select>
    <select id="getDiscussCommentReplyList" resultType="com.panzhihua.common.model.vos.community.ComActDiscussCommentVO">
        SELECT
            cadc.id,
            cadc.discuss_id,
            cadc.`comment`,
            cadc.create_at,
            cadc.is_author,
            cadc.user_id,
            IFNULL( su.`name`, su.nick_name ) AS userName
        FROM
            com_act_discuss_comment AS cadc
            LEFT JOIN sys_user AS su ON su.user_id = cadc.user_id
        WHERE
            cadc.is_del = 2
            AND cadc.parent_id = #{commentId}
        order by cadc.create_at desc
        limit 10
    </select>
</mapper>
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionDOMapper.xml
New file
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.panzhihua.service_community.dao.ComActDiscussOptionDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActDiscussOptionDO">
        <id column="id" property="id"/>
        <result column="discuss_id" property="discussId"/>
        <result column="option_content" property="optionContent"/>
        <result column="create_at" property="createAt"/>
        <result column="option_url" property="optionUrl"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, discuss_id, option_content, create_at, option_url
    </sql>
    <select id="getDiscussOptionList" resultType="com.panzhihua.common.model.vos.community.ComActDiscussOptionVO">
        SELECT
            cado.id,
            cado.option_content,
            cado.option_url,
            ( SELECT count( id ) FROM com_act_discuss_option_user WHERE discuss_option_id = cado.id ) AS num,
            ( SELECT count( id ) FROM com_act_discuss_option_user WHERE discuss_id = cado.discuss_id ) AS allNum
        FROM
            com_act_discuss_option AS cado
        WHERE
            discuss_id = #{discussId}
        ORDER BY
            num DESC
    </select>
</mapper>
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionUserDOMapper.xml
New file
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.panzhihua.service_community.dao.ComActDiscussOptionUserDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActDiscussOptionUserDO">
        <id column="id" property="id"/>
        <result column="discuss_option_id" property="discussOptionId"/>
        <result column="user_id" property="userId"/>
        <result column="create_at" property="createAt"/>
        <result column="discuss_id" property="discussId"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <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_community/src/main/resources/mapper/ComActDiscussUserDOMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.panzhihua.service_community.dao.ComActDiscussUserDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActDiscussUserDO">
        <id column="id" property="id"/>
        <result column="discuss_id" property="discussId"/>
        <result column="user_id" property="userId"/>
        <result column="create_at" property="createAt"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, discuss_id, user_id, create_at
    </sql>
</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
@@ -2422,4 +2422,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
@@ -205,6 +205,14 @@
        return ReturnT.SUCCESS;
    }
    /**
     * 定时任务每半小时执行一次将一起议浏览量写入到表中
     */
    @XxlJob("timedTaskWriteDiscussViewNumToTableJobHandler")
    public ReturnT<String> timedTaskWriteDiscussViewNumToTableJobHandler(String param) throws Exception {
        log.info("定时任务每半小时执行一次将一起议浏览量写入到表中");
        R r = communityService.timedTaskWriteDiscussViewNumToTable();
    @XxlJob("timedTaskEldersAuthJobHandler")
    public ReturnT<String> timedTaskEldersAuthJobHandler(String param) throws Exception {
        log.info("定时任务扫描上月高龄认证使用视频认证的用户添加成功记录");
springcloud_k8s_panzhihuazhihuishequ/timejob/src/main/java/com/panzhihua/timejob/jobhandler/DiscussJobHandler.java
New file
@@ -0,0 +1,30 @@
package com.panzhihua.timejob.jobhandler;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.service.community.CommunityService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
 * @author lyq
 * 议事投票定时任务
 */
@Slf4j
@Component
public class DiscussJobHandler {
    @Resource
    private CommunityService communityService;
    @XxlJob("timedTaskDiscussInspectStatusJobHandler")
    public ReturnT<String> timedTaskDiscussInspectStatusJobHandler(String param) throws Exception {
        log.info("定时任务扫描议事投票状态");
        R r = communityService.timedTaskDiscussInspectStatus();
        log.info("执行结果【{}】", r.toString());
        return ReturnT.SUCCESS;
    }
}
springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java
@@ -247,8 +247,8 @@
                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");
                noLoginUrl.add("/api/applets/community/evaluate/page");
                if (noLoginUrl.contains(requestURI)) {
                    List<SimpleGrantedAuthority> authorities = new ArrayList<>();
                    authorities.add(new SimpleGrantedAuthority(SecurityConstants.ROLE_APPLETS));