huanghongfa
2021-08-19 4a7fa07cefb891cf3294a33684fe781bc7d1d89b
调查问卷接口开发
25个文件已修改
14个文件已添加
2147 ■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/CommunityQuestnaireApi.java 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/IndexApi.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageQuestnaireDTO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/questnaire/StatisticsSummaryDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActEasyPhotoRewardVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActQuestnaireAppVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActQuestnaireVO.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/EditComActQuestnaireVo.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireDetailAdminVO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireListAdminVO.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireListVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireStatisticsSummaryAdminVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireStatisticsSummaryExcelAdminVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireStatisticsSummaryHeaderAdminVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireVO.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireWriteListAdminVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaiteSubSelectionVO.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaiteSubVO.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/UsersAnswerQuestnaireVO.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommunityQuestnaireApi.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/CommunityApi.java 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActQuestnaireDAO.java 185 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActQuestnaireUserAnswerMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireAnswerContentDO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireDO.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireSubDO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireSubSelectionDO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireUserAnswerDO.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActQuestnaireService.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActQuestnaireUserAnswerService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActEasyPhotoServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActIntegralUserTradeServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java 568 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireUserAnswerServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActQuestnaireDOMapper.xml 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActQuestnaireUserAnswerDOMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/timejob/src/main/java/com/panzhihua/timejob/jobhandler/CommunityJobHandler.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/CommunityQuestnaireApi.java
@@ -34,94 +34,41 @@
    @Resource
    private CommunityService communityService;
    @ApiOperation(value = "分页查询登录用户调查问卷", response = QuestnaireListVo.class)
    @ApiOperation(value = "分页查询社区调查问卷", response = QuestnaireListVo.class)
    @PostMapping("/pageUser")
    public R pageUser(@RequestBody PageQuestnaireDTO pageQuestnaireDTO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        Integer isPartymember = loginUserInfo.getIsPartymember();
        Integer isVolunteer = loginUserInfo.getIsVolunteer();
        pageQuestnaireDTO.setForParty(1 == isPartymember.intValue());
        pageQuestnaireDTO.setForVolunteer(1 == isVolunteer.intValue());
        pageQuestnaireDTO.setUserId(loginUserInfo.getUserId());
        return communityService.pageQuestnaire(pageQuestnaireDTO, loginUserInfo.getCommunityId());
    }
    @ApiOperation(value = "分页查询社区调查问卷", response = QuestnaireListVo.class)
    @PostMapping("/pageVolunteer")
    public R pageVolunteer(@RequestBody PageQuestnaireDTO pageQuestnaireDTO) {
        pageQuestnaireDTO.setForMasses(null);
        pageQuestnaireDTO.setForVolunteer(true);
        pageQuestnaireDTO.setForParty(true);
        return communityService.pageQuestnaire(pageQuestnaireDTO, getLoginUserInfo().getCommunityId());
    }
    @ApiOperation(value = "创建调查问卷")
    @PostMapping("/add")
    public R add(@RequestBody QuestnaireVO questnaireVO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        boolean userHasRight = loginUserInfo.getIsmemberrole()==1;
        //if(!userHasRight){
        if(false){
            return R.fail("用户无创建调查问卷的权限!");
        if(loginUserInfo == null){
            return R.fail(401,"请先登录");
        }
        return communityService.addQuestnaire(questnaireVO, loginUserInfo.getCommunityId(), loginUserInfo.getUserId());
        pageQuestnaireDTO.setCommunityId(loginUserInfo.getCommunityId());
        pageQuestnaireDTO.setUserId(loginUserInfo.getUserId());
        return communityService.pageQuestnaire(pageQuestnaireDTO);
    }
    @ApiOperation(value = "查看问卷", response = UsersAnswerVO.class)
    @GetMapping("/view")
    @ApiOperation(value = "查询调查问卷详情", response = UsersAnswerVO.class)
    @GetMapping("/detail")
    public R viewQuestnaire(@RequestParam("questId") Long questId) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.view(loginUserInfo.getUserId(), questId);
    }
    @ApiOperation(value = "在线统计信息", response = QuestnaireAnswerStatVO.class)
    @GetMapping("/stat")
    public R stat(@RequestParam("questId") Long questId) {
        return communityService.statistics(questId);
    }
    @ApiOperation(value = "在线统计详细", response = ComActQuestnaireAnswerContentVO.class)
    @PostMapping("/stat/details")
    public R statDetails(@RequestBody PageQuestnaireSubDetailsDTO pageQuestnaireSubDetailsDTO) {
        //问卷调查
        return communityService.qaQeustAnswerDetails(pageQuestnaireSubDetailsDTO);
        if(loginUserInfo == null){
            return R.fail(401,"请先登录");
        }
        return communityService.viewDetail(loginUserInfo.getUserId(), questId);
    }
    @ApiOperation(value = "居民填写问卷调查问卷")
    @PostMapping("/stat/answer")
    public R usersAnswerQuestnaire(@RequestBody UsersAnswerQuestnaireVO usersAnswerQuestnaireVO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        boolean userHasRight = loginUserInfo.getIsmemberrole()==1;
        //if(!userHasRight){
        if(false){
            return R.fail("用户写问卷调查问卷!");
        if(loginUserInfo == null){
            return R.fail("请先登录");
        }
        usersAnswerQuestnaireVO.setUserId(loginUserInfo.getUserId());
        //填写调查问卷发放积分
        communityService.addIntegralTradeAdmin(new AddComActIntegralUserDTO(usersAnswerQuestnaireVO.getQuestId()
                ,AddComActIntegralUserDTO.integralType.cydcwj,loginUserInfo.getCommunityId(),loginUserInfo.getUserId()));
        return communityService.usersAnsweQuestnaire(usersAnswerQuestnaireVO, loginUserInfo.getUserId());
        return communityService.usersAnsweQuestnaire(usersAnswerQuestnaireVO);
    }
    @ApiOperation(value = "编辑问卷")
    @PostMapping("/edit")
    public R editQuestnaire(@RequestBody QuestnaireVO questnaireVO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.editQuestnaire(questnaireVO);
    }
    @ApiOperation(value = "继续调研/停止调研")
    @PostMapping("/toggle")
    public R toggle(@RequestBody EditComActQuestnaireVo editComActQuestnaireVo) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.editQuestnaireDO(editComActQuestnaireVo, loginUserInfo.getUserId());
    }
    @ApiOperation(value = "删除问卷")
    @GetMapping("/delete")
    public R delete(@RequestParam("questId") Long questId) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.editQuestnaireDO(questId, loginUserInfo.getUserId());
    }
}
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/IndexApi.java
@@ -342,9 +342,15 @@
    }
    @ApiOperation(value = "获取最新活动和用户最新收益",response =ComActEasyPhotoRewardVO.class )
    @PostMapping("getUserReward")
    public R getUserReward(){
        return communityService.getUserReward(this.getUserId(),this.getCommunityId());
    @GetMapping("getUserReward")
    public R getUserReward(@RequestParam("communityId") Long communityId){
        Long userId = 0L;
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfoSureNoLogin();
        if(loginUserInfo != null){
            userId = loginUserInfo.getUserId();
            communityId = loginUserInfo.getCommunityId();
        }
        return communityService.getUserReward(userId,communityId);
    }
    @ApiOperation(value = "读取用户随手拍奖励")
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/PageQuestnaireDTO.java
@@ -6,6 +6,7 @@
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * @Author: llming
@@ -18,18 +19,20 @@
    private String title;
    @ApiModelProperty(value = "用户Id")
    private Long userId;
    @ApiModelProperty(value = "状态 0 调研中 1已停止")
    private Integer state;
    @ApiModelProperty(value = "状态 1待发布 2调研中 3已停止")
    private List<Integer> states;
    @ApiModelProperty(value = "发布开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    private String startTime;
    @ApiModelProperty(value = "发布结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
    private String endTime;
    @ApiModelProperty(value = "分页-当前页数", example = "1")
    private Long pageNum;
    private Long pageNum = 1L;
    @ApiModelProperty(value = "分页-每页记录数", example = "10")
    private Long pageSize;
    private Long pageSize = 10L;
    @ApiModelProperty(value = "广告位置(1.首页弹窗 2.首页顶部 3.首页应用)")
    private Integer advertPosition;
    @ApiModelProperty(value = "身份(1.全部居民 2.党员 3.志愿者)")
    private Integer identity;
    @ApiModelProperty("提供居民")
    private Boolean forMasses;
    @ApiModelProperty("提供党员")
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/questnaire/StatisticsSummaryDTO.java
New file
@@ -0,0 +1,20 @@
package com.panzhihua.common.model.dtos.community.questnaire;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("统计汇总请求参数")
public class StatisticsSummaryDTO {
    @ApiModelProperty(value = "分页-当前页数", example = "1")
    private Long pageNum = 1L;
    @ApiModelProperty(value = "分页-每页记录数", example = "10")
    private Long pageSize = 10L;
    @ApiModelProperty(value = "调查问卷id")
    private Long questId;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActEasyPhotoRewardVO.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * 用户获得随手拍奖励返回参数
@@ -19,4 +20,13 @@
    @ApiModelProperty("随手拍最新活动")
    private ComActEasyPhotoActivityVO easyPhotoActivityVO;
    @ApiModelProperty("正在进行中的弹窗问卷调查")
    private ComActQuestnaireAppVO popupQuestnaireVO;
    @ApiModelProperty("banner图位置问卷调查列表")
    private List<ComActQuestnaireAppVO> bannerQuestnaireList;
    @ApiModelProperty("应用位置问卷调查列表")
    private List<ComActQuestnaireAppVO> applicationQuestnaireList;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActQuestnaireAppVO.java
New file
@@ -0,0 +1,31 @@
package com.panzhihua.common.model.vos.community;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("正在进行中的调查问卷")
public class ComActQuestnaireAppVO {
    @ApiModelProperty("调查问卷id")
    private Long id;
    @ApiModelProperty("组件唯一key")
    private String projectKey;
    @ApiModelProperty("标题(问卷调查主题)")
    private String title;
    @ApiModelProperty("问卷调查备注(应用名称)")
    private String remark;
    @ApiModelProperty("是否是封面(1.是 2.否)")
    private Integer isCover;
    @ApiModelProperty("是否强制调研(1.是 2.否)")
    private Integer isForce;
    @ApiModelProperty("广告弹窗(1.是 2.否 )")
    private Integer adverPositionPopup;
    @ApiModelProperty("广告顶部(1.是   2.否)")
    private Integer adverPositionTop;
    @ApiModelProperty("广告应用(1.是   2.否)")
    private Integer adverPositionApplication;
    @ApiModelProperty("是否显示提醒(1.是 2.否)")
    private Integer isDisplay = 2;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActQuestnaireVO.java
@@ -7,22 +7,24 @@
@Data
@ApiModel("调查问卷 问卷表")
public class ComActQuestnaireVO {
    @ApiModelProperty("id")
    @ApiModelProperty("主键id")
    private Long id;
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("问题描述")
    private String queDescribe;
    @ApiModelProperty("状态 0 调研中 1已停止")
    @ApiModelProperty("状态 1 待发布 2调研中 3已结束")
    private int state;
    @ApiModelProperty("参与人数")
    private Integer joinCount;
    @ApiModelProperty("社区ID")
    private Long communityId;
    @ApiModelProperty("调查对象-居民")
    private Boolean forMasses;
    @ApiModelProperty("调查对象-党员")
    private Boolean forParty;
    @ApiModelProperty("调查对象-志愿者")
    private Boolean forVolunteer;
    @ApiModelProperty("是否封面(1.是 2.否)")
    private Integer isCover;
    @ApiModelProperty("填报项数量")
    private Integer count;
    @ApiModelProperty("浏览量")
    private Long viewNum;
    @ApiModelProperty("问卷调查备注(应用名称)")
    private String remark;
    @ApiModelProperty("问卷组件唯一key")
    private String projectKey;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/EditComActQuestnaireVo.java
@@ -11,6 +11,19 @@
public class EditComActQuestnaireVo {
    @ApiModelProperty(value = "问卷调查Id")
    private Long questId;
    @ApiModelProperty(value = "状态 0 调研中 1已停止", example = "0")
    private Integer state;
    @ApiModelProperty(value = "类型(1.继续调研 2.停止调研 3.发布调研)")
    private Integer type;
    @ApiModelProperty(value = "用户id",hidden = true)
    private Long userId;
    @ApiModelProperty(value = "继续调研选择结束时间")
    private String endTime;
    /**
     * 类型(1.继续调研 2.停止调研)
     */
    public interface type{
        int jx = 1;
        int tz = 2;
        int fb = 3;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireDetailAdminVO.java
New file
@@ -0,0 +1,57 @@
package com.panzhihua.common.model.vos.community.questnaire;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @Author: llming
 * @Description:
 */
@Data
public class QuestnaireDetailAdminVO {
    @ApiModelProperty(value = "问卷调查id")
    private Long id;
    @ApiModelProperty(value = "社区id",hidden = true)
    private Long communityId;
    @ApiModelProperty(value = "问卷调查主题")
    private String title;
    @ApiModelProperty("广告顶部(1.是   2.否)")
    private Integer adverPositionTop;
    @ApiModelProperty("广告弹窗(1.是 2.否 )")
    private Integer adverPositionPopup;
    @ApiModelProperty("广告应用(1.是   2.否)")
    private Integer adverPositionApplication;
    @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("是否强制调研(1.是 2.否)")
    private String isForce;
    @ApiModelProperty("是否封面(1.是 2.否)")
    private String isCover;
    @ApiModelProperty("问卷调查备注(应用名称)")
    private String remark;
    @ApiModelProperty("组件json数据")
    private String jsonObject;
    @ApiModelProperty("发布时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date publishTime;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createAt;
    @ApiModelProperty("是否居民(1.是   2.否)")
    private Integer forMasses;
    @ApiModelProperty("是否党员(1.是   2.否)")
    private Integer forParty;
    @ApiModelProperty("是否志愿者(1.是   2.否)")
    private Integer forVolunteer;
    @ApiModelProperty("是否已填写(1.是   2.否)")
    private Integer isOk = 2;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireListAdminVO.java
New file
@@ -0,0 +1,77 @@
package com.panzhihua.common.model.vos.community.questnaire;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class QuestnaireListAdminVO {
    @ApiModelProperty("id")
    private String id;
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("状态 1待发布 2调研中 3已停止")
    private Integer state;
    @ApiModelProperty("是否封面(1.是 2.否)")
    private Integer isCover;
    @ApiModelProperty("参与人数")
    private Integer joinCount;
    @ApiModelProperty("浏览量")
    private Long viewNum;
    @ApiModelProperty("填报项数量")
    private Integer count;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createAt;
    @ApiModelProperty("发布时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date publishTime;
    @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("是否提供居民填写(1.是 2.否)")
    private Integer forMasses;
    @ApiModelProperty("是否提供党员填写(1.是 2.否)")
    private Integer forParty;
    @ApiModelProperty("是否提供志愿者填写(1.是 2.否)")
    private Integer forVolunteer;
    @ApiModelProperty("广告顶部(1.是   2.否)")
    private Integer adverPositionTop;
    @ApiModelProperty("广告弹窗(1.是 2.否 )")
    private Integer adverPositionPopup;
    @ApiModelProperty("广告应用(1.是   2.否)")
    private Integer adverPositionApplication;
    @ApiModelProperty("组件库唯一key")
    private String projectKey;
    @ApiModelProperty("调研对象身份")
    private String identity;
    @ApiModelProperty("广告位置")
    private String advertPosition;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireListVo.java
@@ -16,23 +16,26 @@
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("状态 0 调研中 1已停止")
    @ApiModelProperty("状态 1待发布 2调研中 3已停止")
    private Integer state;
    @ApiModelProperty("参与人数")
    private Integer joinCount;
    @ApiModelProperty("发布人")
    private String createBy;
    @ApiModelProperty("浏览量")
    private Long viewNum;
    @ApiModelProperty("发布人姓名")
    private String createUser;
    @ApiModelProperty("填报项数量")
    private Integer count;
    @ApiModelProperty("发布时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createAt;
    @ApiModelProperty("是否已回答")
    private Boolean answer;
    @ApiModelProperty("是否已参与(1.是 2.否)")
    private Integer isAnswer;
    @ApiModelProperty("是否封面(1.是 2.否)")
    private Integer isCover;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireStatisticsSummaryAdminVO.java
New file
@@ -0,0 +1,25 @@
package com.panzhihua.common.model.vos.community.questnaire;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 统计汇总返回对象
 */
@Data
public class QuestnaireStatisticsSummaryAdminVO {
    @ApiModelProperty(value = "问卷调查题目")
    private String subject;
    @ApiModelProperty(value = "问卷调查选项")
    private String option;
    @ApiModelProperty("选择该选项人数")
    private Integer count;
    @ApiModelProperty("问卷调查题目参与总数")
    private Integer allCount;
    @ApiModelProperty("百分比")
    private BigDecimal tag;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireStatisticsSummaryExcelAdminVO.java
New file
@@ -0,0 +1,26 @@
package com.panzhihua.common.model.vos.community.questnaire;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 统计汇总返回对象
 */
@Data
public class QuestnaireStatisticsSummaryExcelAdminVO {
    @ExcelProperty(value = "问卷调查题目" ,index = 0)
    private String subject;
    @ExcelProperty(value = "问卷调查选项" ,index = 1)
    private String option;
    @ExcelProperty(value = "参与人数百分比" ,index = 2)
    private BigDecimal tag;
    @ExcelProperty(value = "选择该选项人数" ,index = 3)
    private Integer count;
    @ExcelProperty(value = "该题目参与人数" ,index = 4)
    private Integer allCount;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireStatisticsSummaryHeaderAdminVO.java
New file
@@ -0,0 +1,31 @@
package com.panzhihua.common.model.vos.community.questnaire;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 统计汇总表头返回数据
 */
@Data
public class QuestnaireStatisticsSummaryHeaderAdminVO {
    @ApiModelProperty(value = "填报志愿者数量")
    private Integer volunteerCount = 0;
    @ApiModelProperty(value = "填报党员")
    private Integer partymemberCount = 0;
    @ApiModelProperty("总填报量")
    private Integer allCount = 0;
    @ApiModelProperty("总浏览量")
    private Integer viewNum = 0;
    @ApiModelProperty("今日新增")
    private Integer todayCount = 0;
    @ApiModelProperty("未填报志愿者")
    private Integer noVolunteerCount = 0;
    @ApiModelProperty("未填报党员")
    private Integer noPartymemberCount = 0;
    @ApiModelProperty("填报率")
    private Integer tag = 0;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireVO.java
@@ -1,5 +1,6 @@
package com.panzhihua.common.model.vos.community.questnaire;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -11,18 +12,46 @@
 */
@Data
public class QuestnaireVO {
    @ApiModelProperty(value = "问卷调查Id")
    private Long questId;
    @ApiModelProperty(value = "问卷标题")
    private String queTitle;
    @ApiModelProperty(value = "问卷调查id")
    private Long id;
    @ApiModelProperty(value = "社区id",hidden = true)
    private Long communityId;
    @ApiModelProperty(value = "用户id",hidden = true)
    private Long userId;
    @ApiModelProperty(value = "问卷调查主题")
    private String title;
    @ApiModelProperty(value = "问卷描述")
    private String queDescribe;
    @ApiModelProperty(value = "提供居民", example = "true", required = true)
    private Boolean forMasses;
    @ApiModelProperty(value = "提供党员", example = "true", required = true)
    private Boolean forParty;
    @ApiModelProperty(value = "提供志愿者", example = "true", required = true)
    private Boolean forVolunteer;
    @ApiModelProperty(value = "题目")
    private List<QuestnaiteSubVO> questnaiteSubVOS;
    @ApiModelProperty(value = "身份(1.全部居民 2.党员 3.志愿者)")
    private Integer identity;
    @ApiModelProperty("广告顶部(1.是   2.否)")
    private Integer adverPositionTop;
    @ApiModelProperty("广告弹窗(1.是 2.否 )")
    private Integer adverPositionPopup;
    @ApiModelProperty("广告应用(1.是   2.否)")
    private Integer adverPositionApplication;
    @ApiModelProperty("调研开始时间")
    private String startTime;
    @ApiModelProperty("调研结束时间")
    private String endTime;
    @ApiModelProperty("是否强制调研(1.是 2.否)")
    private String isForce;
    @ApiModelProperty("是否封面(1.是 2.否)")
    private String isCover;
    @ApiModelProperty("问卷调查备注(应用名称)")
    private String remark;
    @ApiModelProperty("组件json数据")
    private String jsonObject;
    @ApiModelProperty("是否发布(1.是 2.否)")
    private Integer isRelease;
    /**
     * 身份(1.全部居民 2.党员 3.志愿者)
     */
    public interface identity{
        int jm = 1;
        int dy = 2;
        int zyz = 3;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireWriteListAdminVO.java
New file
@@ -0,0 +1,41 @@
package com.panzhihua.common.model.vos.community.questnaire;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * 调查问卷填报列表返回参数
 */
@Data
public class QuestnaireWriteListAdminVO {
    @ApiModelProperty(value = "问卷调查题目列表")
    private List<String> subjectList;
    @ApiModelProperty(value = "问卷调查选项")
    private String option;
    @ApiModelProperty("选择该选项人数")
    private Integer count;
    @ApiModelProperty("问卷调查题目参与总数")
    private Integer allCount;
    @ApiModelProperty("百分比")
    private BigDecimal tag;
    @ApiModelProperty("用户id")
    private Long userId;
    @ApiModelProperty("用户昵称")
    private Long nickName;
    @ApiModelProperty("提交时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createAt;
    @ApiModelProperty("用户填报数据")
    private List<QuestnaiteSubVO> list;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaiteSubSelectionVO.java
@@ -19,8 +19,11 @@
    private String optionName;
    @ApiModelProperty(value = "选项内容")
    private String content;
    private String label;
    @ApiModelProperty(value = "选项类型 0 固定选项 1 自定义选项")
    private Integer type;
    private Integer type = 0;
    @ApiModelProperty(value = "选项key")
    private String key;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaiteSubVO.java
@@ -16,9 +16,22 @@
    @ApiModelProperty(value = "序号")
    private int sort;
    @ApiModelProperty(value = "题目内容")
    private String content;
    private String label;
    @ApiModelProperty(value = "类型 0单选1多选2问答题", example = "0")
    private int type;
    private Integer type;
    @ApiModelProperty(value = "问卷题目选项")
    private List<QuestnaiteSubSelectionVO> questnaiteSubSelectionVOS;
    private List<QuestnaiteSubSelectionVO> options;
    @ApiModelProperty(value = "问卷题目题目key")
    private String key;
    @ApiModelProperty(value = "答题选项内容key")
    private String values;
    /**
     * 0单选1多选2问答题
     */
    public interface type{
        int danxuan = 0;
        int duoxuan = 1;
        int wenda = 2;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/UsersAnswerQuestnaireVO.java
@@ -1,5 +1,6 @@
package com.panzhihua.common.model.vos.community.questnaire;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -13,10 +14,16 @@
@Data
@ApiModel("用户填写问卷情况")
public class UsersAnswerQuestnaireVO {
    @ApiModelProperty(value = "调查问卷Id")
    private Long questId;
    @ApiModelProperty(value = "答题情况")
    private List<UserAnswerContentVO> answerContentVOList;
    private String jsonObject;
    @ApiModelProperty(value = "用户id",hidden = true)
    private Long userId;
    @ApiModelProperty(value = "社区id",hidden = true)
    private Long communityId;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -19,6 +19,7 @@
import com.panzhihua.common.model.dtos.community.integral.admin.EditComActIntegralRuleDTO;
import com.panzhihua.common.model.dtos.community.integral.admin.PageComActIntegralRuleDTO;
import com.panzhihua.common.model.dtos.community.integral.admin.PageComActIntegralTradeDTO;
import com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO;
import com.panzhihua.common.model.dtos.community.switchs.SearchCommunityDTO;
import com.panzhihua.common.model.dtos.community.wallet.*;
import com.panzhihua.common.model.dtos.elders.ComEldersAuthGetResultDTO;
@@ -1883,16 +1884,25 @@
     * @return
     */
    @PostMapping("/questnaire/addquestnaire")
    R addQuestnaire(@RequestBody QuestnaireVO questnaireVO, @RequestParam("communityId") Long communityId, @RequestParam("userId") Long userId);
    R addQuestnaire(@RequestBody QuestnaireVO questnaireVO);
    /**
     * 社区问卷列表
     * 小程序-社区问卷列表
     *
     * @param pageQuestnaireDTO
     * @return
     * @param pageQuestnaireDTO 请求参数
     * @return  社区问卷列表
     */
    @PostMapping("/questnaire/pagequestnaire")
    R pageQuestnaire(@RequestBody PageQuestnaireDTO pageQuestnaireDTO, @RequestParam("communityId") Long communityId);
    R pageQuestnaire(@RequestBody PageQuestnaireDTO pageQuestnaireDTO);
    /**
     * 社区后台-社区问卷列表
     *
     * @param pageQuestnaireDTO 请求参数
     * @return  社区问卷列表
     */
    @PostMapping("/questnaire/admin/pagequestnaire")
    R pageQuestnaireAdmin(@RequestBody PageQuestnaireDTO pageQuestnaireDTO);
    /**
@@ -1912,7 +1922,7 @@
     * @return
     */
    @PostMapping("/questnaire/editquestnairedo")
    R editQuestnaireDO(@RequestBody EditComActQuestnaireVo editComActQuestnaireVo, @RequestParam("userId") Long userId);
    R editQuestnaireDO(@RequestBody EditComActQuestnaireVo editComActQuestnaireVo);
    /**
     * 删除问卷  ——隐藏
@@ -1940,6 +1950,23 @@
     */
    @GetMapping("/questnaire/view")
    R view(@RequestParam("userId") Long userId, @RequestParam("questId") Long questId);
    /**
     * 小程序-问卷调查详情
     * @param userId    用户id
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    @GetMapping("/questnaire/view/detail")
    R viewDetail(@RequestParam("userId") Long userId, @RequestParam("questId") Long questId);
    /**
     * 社区后台-查询问卷调查详情
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    @GetMapping("/questnaire/admin/detail")
    R QuesDetail(@RequestParam("questId") Long questId);
    /**
     * 用户问卷调查详细
@@ -1986,7 +2013,7 @@
     * @param usersAnswerQuestnaireVO 填写情况
     */
    @PostMapping("/questnaire/usersanswequestnaire")
    R usersAnsweQuestnaire(@RequestBody UsersAnswerQuestnaireVO usersAnswerQuestnaireVO, @RequestParam("userId") Long userId);
    R usersAnsweQuestnaire(@RequestBody UsersAnswerQuestnaireVO usersAnswerQuestnaireVO);
    /**
     * 店铺列表-分页查询
@@ -4131,6 +4158,9 @@
    @PostMapping("timedTaskActivityNotice")
    R timedTaskActivityNotice();
    @PostMapping("timedTaskQuestionnaire")
    R timedTaskQuestionnaire();
    /**
     * 查询社区所有列表
     * @return  社区列表
@@ -4154,4 +4184,27 @@
    @PostMapping("/switch/community/search/distance/list")
    R communitySwitchSearchDistanceList(@RequestBody SearchCommunityDTO communityDTO);
    /**
     * 问卷调查统计汇总
     * @param summaryDTO   请求参数
     * @return  统计汇总
     */
    @PostMapping("/questnaire/statisticsSummary")
    R statisticsSummary(@RequestBody StatisticsSummaryDTO summaryDTO);
    /**
     * 问卷调查统计汇总导出数据查询
     * @param questId   调查问卷id
     * @return  调查统计汇总导出数据
     */
    @GetMapping("/questnaire/statisticsSummary/export")
    R statisticsSummaryExport(@RequestParam("questId") Long questId);
    /**
     * 问卷调查统计汇总表头统计
     * @param questId   调查问卷id
     * @return  问卷调查统计汇总表头统计数据
     */
    @GetMapping("/questnaire/statisticsSummary/header")
    R statisticsSummaryHeader(@RequestParam("questId") Long questId);
}
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommunityQuestnaireApi.java
@@ -7,11 +7,14 @@
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.controller.BaseController;
import com.panzhihua.common.model.dtos.community.PageQuestnaireAnswerDTO;
import com.panzhihua.common.model.dtos.community.PageQuestnaireDTO;
import com.panzhihua.common.model.dtos.community.PageQuestnaireSubDetailsDTO;
import com.panzhihua.common.model.dtos.community.QuestnaireAnswersDTO;
import com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.*;
@@ -53,42 +56,45 @@
    @Resource
    private SFTPConfig sftpConfig;
    @ApiOperation(value = "分页查询调查问卷", response = QuestnaireListVo.class)
    @ApiOperation(value = "分页查询调查问卷-lyq", response = QuestnaireListVo.class)
    @PostMapping("/page")
    public R page(@RequestBody PageQuestnaireDTO pageQuestnaireDTO) {
        ClazzUtils.setIfStringIsEmpty(pageQuestnaireDTO);
        pageQuestnaireDTO.setForMasses(null);
        pageQuestnaireDTO.setForVolunteer(true);
        pageQuestnaireDTO.setForParty(true);
        return communityService.pageQuestnaire(pageQuestnaireDTO, this.getCommunityId());
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        if(loginUserInfo == null){
            return R.fail("请先登录");
        }
        pageQuestnaireDTO.setCommunityId(loginUserInfo.getCommunityId());
        return communityService.pageQuestnaireAdmin(pageQuestnaireDTO);
    }
    @ApiOperation(value = "创建调查问卷")
    @ApiOperation(value = "创建调查问卷-lyq")
    @PostMapping("/add")
    public R add(@RequestBody QuestnaireVO questnaireVO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.addQuestnaire(questnaireVO, loginUserInfo.getCommunityId(), loginUserInfo.getUserId());
        questnaireVO.setCommunityId(loginUserInfo.getCommunityId());
        questnaireVO.setUserId(loginUserInfo.getUserId());
        return communityService.addQuestnaire(questnaireVO);
    }
    @ApiOperation(value = "继续调研/停止调研")
    @ApiOperation(value = "继续调研/停止调研-lyq")
    @PostMapping("/toggle")
    public R toggle(@RequestBody EditComActQuestnaireVo editComActQuestnaireVo) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.editQuestnaireDO(editComActQuestnaireVo, loginUserInfo.getUserId());
        editComActQuestnaireVo.setUserId(loginUserInfo.getUserId());
        return communityService.editQuestnaireDO(editComActQuestnaireVo);
    }
    @ApiOperation(value = "删除问卷")
    @ApiOperation(value = "删除问卷-lyq")
    @GetMapping("/delete")
    public R delete(@RequestParam("questId") Long questId) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.editQuestnaireDO(questId, loginUserInfo.getUserId());
    }
    @ApiOperation(value = "查看详细-问卷详细", response = UsersAnswerVO.class)
    @ApiOperation(value = "查看详细-问卷详细-lyq", response = QuestnaireDetailAdminVO.class)
    @GetMapping("/view")
    public R viewQuestnaire(@RequestParam("questId") Long questId) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        return communityService.view(loginUserInfo.getUserId(), questId);
        return communityService.QuesDetail(questId);
    }
    @ApiOperation(value = "查看详细-调查结果", response = QuestnaireAnswerStatVO.class)
@@ -117,14 +123,18 @@
        return communityService.answerInfoQuestnaire(userId, questId);
    }
    @ApiOperation(value = "编辑问卷")
    @ApiOperation(value = "编辑问卷-lyq")
    @PostMapping("/edit")
    public R editQuestnaire(@RequestBody QuestnaireVO questnaireVO) {
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        if(loginUserInfo == null){
            return R.fail("请先登录");
        }
        questnaireVO.setUserId(loginUserInfo.getUserId());
        return communityService.editQuestnaire(questnaireVO);
    }
    @ApiOperation(value = "导出数据", response = ComCvtBusinessVO.class)
    @ApiOperation(value = "导出数据-lyq", response = ComCvtBusinessVO.class)
    @GetMapping("/export")
    public R export(@RequestParam("questId") Long questId) {
        //获取登陆用户
@@ -276,4 +286,70 @@
        }
    }
    @ApiOperation(value = "问卷调查统计汇总-lyq", response = QuestnaireStatisticsSummaryAdminVO.class)
    @PostMapping("/statistics/summary")
    public R statisticsSummary(@RequestBody StatisticsSummaryDTO summaryDTO) {
        return communityService.statisticsSummary(summaryDTO);
    }
    @ApiOperation(value = "问卷调查统计汇总导出-lyq", response = QuestnaireStatisticsSummaryAdminVO.class)
    @GetMapping("/statistics/summary/export")
    public R statisticsSummaryExport(@RequestParam("questId") Long questId) {
        String url=sftpConfig.getExcelUrl();
//        String uuid= UUID.randomUUID().toString().replace("-","");
        String name="问卷调查统计汇总导出数据.xlsx";
        String ftpUrl="/mnt/data/web/excel/";
//        用户搜索了就下载搜索的用户否则下载所有用户
        R r=communityService.statisticsSummaryExport(questId);
        if (R.isOk(r)) {
            List<QuestnaireStatisticsSummaryExcelAdminVO>eexcelUserDTOS= JSONArray.parseArray(JSONArray.toJSONString(r.getData()),QuestnaireStatisticsSummaryExcelAdminVO.class);
            try {
                SFTPUtil sftp = new SFTPUtil(sftpConfig.getUserName(),sftpConfig.getPassword(),sftpConfig.getHost(),sftpConfig.getPort());
                sftp.login();
                boolean existDir = sftp.isExistDir(ftpUrl+name);
                if (!existDir) {
                    String property = System.getProperty("user.dir");
                    String fileName = property + File.separator+name;
                    // 这里 需要指定写用哪个class去写
                    ExcelWriter excelWriter = null;
                    InputStream inputStream=null;
                    try {
                        excelWriter = EasyExcel.write(fileName, QuestnaireStatisticsSummaryExcelAdminVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build();
                        WriteSheet writeSheet = EasyExcel.writerSheet("问卷调查统计汇总导出数据").build();
                        excelWriter.write(eexcelUserDTOS, writeSheet);
                        excelWriter.finish();
                        File file=new File(fileName);
                        inputStream=new FileInputStream(file);
                        sftp.uploadMore(ftpUrl, name, inputStream);
                        sftp.logout();
                        inputStream.close();
                        String absolutePath = file.getAbsolutePath();
                        boolean delete = file.delete();
                        log.info("删除excel【{}】结果【{}】",absolutePath,delete);
                    } finally {
                        // 千万别忘记finish 会帮忙关闭流
                        if (inputStream != null) {
                            inputStream.close();
                        }
                        if (excelWriter != null) {
                            excelWriter.finish();
                        }
                    }
                }
                return R.ok(url+name);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("文件传输失败【{}】", e.getMessage());
                return R.fail();
            }
        }
        return R.fail("未查询到用户");
    }
    @ApiOperation(value = "问卷调查统计汇总表头统计-lyq", response = QuestnaireStatisticsSummaryHeaderAdminVO.class)
    @GetMapping("/statistics/summary/header")
    public R statisticsSummaryHeader(@RequestParam("questId") Long questId) {
        return communityService.statisticsSummaryHeader(questId);
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/CommunityApi.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.SystemmanagementConfigVO;
import com.panzhihua.common.model.vos.community.*;
@@ -1420,32 +1421,56 @@
        }
    }
    /**
     * 小程序-问卷调查详情
     * @param userId    用户id
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    @GetMapping("questnaire/view/detail")
    public R viewDetail(@RequestParam("questId") Long questId,@RequestParam("userId") Long userId) {
        return comActQuestnaireService.getQuesDetail(questId,userId);
    }
    /**
     * 社区后台-查询问卷调查详情
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    @GetMapping("questnaire/admin/detail")
    public R quesDetail( @RequestParam("questId") Long questId) {
        return comActQuestnaireService.getQuesDetailAdmin(questId);
    }
    /**
     * 新增社区问卷
     * @param questnaireVO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @PostMapping("questnaire/addquestnaire")
    public R addQuestnaire(@RequestBody QuestnaireVO questnaireVO, @RequestParam("communityId") Long communityId, @RequestParam("userId") Long userId) {
        return comActQuestnaireService.addQuestnaire(questnaireVO, communityId, userId);
    public R addQuestnaire(@RequestBody QuestnaireVO questnaireVO) {
        return comActQuestnaireService.addQuestnaire(questnaireVO);
    }
    /**
     * 社区问卷列表
     * @param pageQuestnaireDTO
     * @return
     * 小程序-社区问卷列表
     * @param pageQuestnaireDTO 请求参数
     * @return  社区问卷列表
     */
    @PostMapping("questnaire/pagequestnaire")
    public R pageQuestnaire(@RequestBody PageQuestnaireDTO pageQuestnaireDTO,@RequestParam("communityId") Long communityId) {
        if(pageQuestnaireDTO.getForParty()==null){
            pageQuestnaireDTO.setForParty(false);
        }
        if(pageQuestnaireDTO.getForVolunteer()==null){
            pageQuestnaireDTO.setForVolunteer(false);
        }
        return comActQuestnaireService.pageQuestnaire(pageQuestnaireDTO, communityId);
    public R pageQuestnaire(@RequestBody PageQuestnaireDTO pageQuestnaireDTO) {
        return comActQuestnaireService.pageQuestnaire(pageQuestnaireDTO);
    }
    /**
     * 社区后台-社区问卷列表
     * @param pageQuestnaireDTO 请求参数
     * @return  社区问卷列表
     */
    @PostMapping("questnaire/admin/pagequestnaire")
    public R pageQuestnaireAdmin(@RequestBody PageQuestnaireDTO pageQuestnaireDTO) {
        return comActQuestnaireService.pageQuestnaireAdmin(pageQuestnaireDTO);
    }
    /**
@@ -1453,7 +1478,6 @@
     * @param questnaireVO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @PostMapping("questnaire/editquestnaire")
    public R editQuestnaire(@RequestBody QuestnaireVO questnaireVO) {
        return comActQuestnaireService.editQuestnaire(questnaireVO);
@@ -1465,8 +1489,8 @@
     * @return
     */
    @PostMapping("questnaire/editquestnairedo")
    public R editQuestnaireDO(@RequestBody EditComActQuestnaireVo editComActQuestnaireVo, @RequestParam("userId") Long userId) {
        return comActQuestnaireService.editQuestnaireDO(editComActQuestnaireVo, userId);
    public R editQuestnaireDO(@RequestBody EditComActQuestnaireVo editComActQuestnaireVo) {
        return comActQuestnaireService.editQuestnaireDO(editComActQuestnaireVo);
    }
    /**
@@ -1520,12 +1544,11 @@
    }
    /**
     * 居民填写问卷调查问卷
     * @param usersAnswerQuestnaireVO
     * 居民填写问卷调查问卷questnaire/pagequestnaire
     */
    @PostMapping("questnaire/usersanswequestnaire")
    public R usersAnsweQuestnaire(@RequestBody UsersAnswerQuestnaireVO usersAnswerQuestnaireVO,@RequestParam("userId") Long userId){
        return comActQuestnaireService.usersAnsweQuestnaire(usersAnswerQuestnaireVO,userId);
    public R usersAnsweQuestnaire(@RequestBody UsersAnswerQuestnaireVO usersAnswerQuestnaireVO){
        return comActQuestnaireService.usersAnsweQuestnaire(usersAnswerQuestnaireVO);
    }
    /**
@@ -1812,4 +1835,23 @@
    }
    @PostMapping("questnaire/statisticsSummary")
    public R statisticsSummary(@RequestBody StatisticsSummaryDTO summaryDTO) {
        return comActQuestnaireService.statisticsSummary(summaryDTO);
    }
    @GetMapping("questnaire/statisticsSummary/export")
    public R statisticsSummaryExport(@RequestParam("questId") Long questId) {
        return comActQuestnaireService.statisticsSummaryExport(questId);
    }
    @GetMapping("questnaire/statisticsSummary/header")
    public R statisticsSummaryHeader(@RequestParam("questId") Long questId) {
        return comActQuestnaireService.statisticsSummaryHeader(questId);
    }
    @PostMapping("timedTaskQuestionnaire")
    public R timedTaskQuestionnaire(){
        return comActQuestnaireService.timedTaskQuestionnaire();
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActQuestnaireDAO.java
@@ -4,11 +4,15 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.model.dtos.community.PageQuestnaireDTO;
import com.panzhihua.common.model.vos.community.questnaire.QuestnaireListVo;
import com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO;
import com.panzhihua.common.model.vos.community.ComActQuestnaireAppVO;
import com.panzhihua.common.model.vos.community.questnaire.*;
import com.panzhihua.service_community.model.dos.ComActQuestnaireDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
 * @Author: llming
@@ -17,56 +21,133 @@
@Mapper
public interface ComActQuestnaireDAO extends BaseMapper<ComActQuestnaireDO> {
    @Select("<script> " +
            "SELECT DISTINCT  aq.id, aq.title, aq.state, u.name as create_user, aq.join_count, aq.create_at , aq.create_by \n" +
            "FROM \n" +
            " com_act_questnaire aq \n" +
            " LEFT JOIN sys_user u on aq.create_by = u.user_id \n" +
            "<if test='pageQuestnaireDTO.userId != null '>\n" +    //筛选用户已回答的问卷
            " LEFT JOIN com_act_questnaire_sub qs ON aq.id = qs.que_Id\n" +
            " LEFT JOIN com_act_questnaire_answer_content ac ON qs.id = ac.sub_id  AND ac.user_id=#{pageQuestnaireDTO.userId} " +
            " </if> \n" +
            " where aq.is_hide=0 " +
            "<if test='pageQuestnaireDTO.userId != null '>\n" +    //筛选用户已回答的问卷
            "  AND case when ac.id IS NULL then aq.state=0 ELSE TRUE end " +
            " </if> \n" +
            "<if test='communityId != null and communityId!=0l '>\n" +
            " and aq.community_id = #{communityId}\n" +
            " </if> " +
            "<if test='pageQuestnaireDTO.state != null '>\n" +
            " and aq.state = #{pageQuestnaireDTO.state} \n" +
            " </if> " +
            "<if test='pageQuestnaireDTO.forMasses != null '>\n" +
            " and aq.for_masses = #{pageQuestnaireDTO.forMasses} \n" +
            " </if> \n" +
            "<if test='pageQuestnaireDTO.title != null '>\n" +
            " and aq.title like concat('%', #{pageQuestnaireDTO.title},'%') \n" +
            " </if> \n" +
            "<if test='pageQuestnaireDTO.forParty==true and pageQuestnaireDTO.forVolunteer==true '>\n" +   //既是党员又是志愿者
            " and ( aq.for_party = 1 OR aq.for_volunteer=1 OR (aq.for_party!=1 AND aq.for_volunteer!=1) )  \n" +
            " </if> \n" +
            "<if test='pageQuestnaireDTO.forParty==true and pageQuestnaireDTO.forVolunteer==false '>\n" +     //党员 不是志愿者
            " and ( aq.for_party = 1 OR (aq.for_party!=1 AND aq.for_volunteer!=1) )  \n" +
            " </if> \n" +
            "<if test='pageQuestnaireDTO.forParty==false and pageQuestnaireDTO.forVolunteer==true '>\n" +    //非党员的志愿者
            " and ( aq.for_volunteer = 1 OR (aq.for_party!=1 AND aq.for_volunteer!=1) )  \n" +
            " </if> \n" +
            "<if test='pageQuestnaireDTO.forParty==false and pageQuestnaireDTO.forVolunteer==false '>\n" +    //非党员非志愿者
            " and  (aq.for_party!=1 AND aq.for_volunteer!=1)  \n" +
            " </if> \n" +
            "<if test='pageQuestnaireDTO.startTime != null '>\n" +
            " AND aq.create_at <![CDATA[>=]]> #{pageQuestnaireDTO.startTime}  \n" +
            "</if>" +
            "<if test='pageQuestnaireDTO.endTime != null '>\n" +
            " AND aq.create_at <![CDATA[<=]]> #{pageQuestnaireDTO.endTime}  \n" +
            " </if> \n" +
            " ORDER BY \n" +
            " aq.create_at DESC" +
            "SELECT " +
            " caq.id, " +
            " caq.project_key, " +
            " caq.title, " +
            " caq.state, " +
            " caq.join_count, " +
            " caq.remark, " +
            " caq.is_cover, " +
            " caq.is_force, " +
            " caq.create_at, " +
            " caq.count, " +
            " if(caqua.id is not null,1,2) isAnswer, " +
            " caq.view_num  " +
            "FROM " +
            " com_act_questnaire as caq " +
            " left join com_act_questnaire_user_answer as caqua on caqua.questnaire_id = caq.id and caqua.user_id = #{pageQuestnaireDTO.userId} " +
            "WHERE " +
            " caq.state IN ( 2, 3 )  " +
            " AND caq.community_id = #{pageQuestnaireDTO.communityId}  and caq.is_hide = 0 " +
            "ORDER BY " +
            " caq.state ASC, " +
            " isAnswer desc, " +
            " caq.create_at DESC" +
            "</script>")
    IPage<QuestnaireListVo> selectPageList(Page page, @Param("pageQuestnaireDTO") PageQuestnaireDTO pageQuestnaireDTO, @Param("communityId") Long communityId);
    IPage<QuestnaireListVo> selectPageList(Page page, @Param("pageQuestnaireDTO") PageQuestnaireDTO pageQuestnaireDTO);
    @Select("<script>" +
            "select id,title,view_num,join_count,for_masses,for_party,for_volunteer,adver_position_top,adver_position_popup" +
            ",adver_position_application,create_at,start_time,end_time,publish_time,state,is_cover,project_key,count" +
            " from com_act_questnaire as caq where community_id = #{pageQuestnaireDTO.communityId} and is_hide = 0 " +
            "<if test='pageQuestnaireDTO.identity != null and pageQuestnaireDTO.identity == 1'>" +
            " and caq.for_masses = 1 "+
            " </if> " +
            "<if test='pageQuestnaireDTO.identity != null and pageQuestnaireDTO.identity == 2'>" +
            " and caq.for_party = 1 "+
            " </if> " +
            "<if test='pageQuestnaireDTO.identity != null and pageQuestnaireDTO.identity == 3'>" +
            " and caq.for_volunteer = 1 "+
            " </if> " +
            "<if test='pageQuestnaireDTO.advertPosition != null and pageQuestnaireDTO.advertPosition == 1'>" +
            " and caq.adver_position_popup = 1 "+
            " </if> " +
            "<if test='pageQuestnaireDTO.advertPosition != null and pageQuestnaireDTO.advertPosition == 2'>" +
            " and caq.adver_position_top = 1 "+
            " </if> " +
            "<if test='pageQuestnaireDTO.advertPosition != null and pageQuestnaireDTO.advertPosition == 3'>" +
            " and caq.adver_position_application = 1 "+
            " </if> " +
            "<if test='pageQuestnaireDTO.states != null and pageQuestnaireDTO.states.size > 0 '>" +
            " and caq.state in "+
            "<foreach item=\"item\" collection=\"pageQuestnaireDTO.states\" separator=\",\" open=\"(\" close=\")\" index=\"\"> \n" +
            "#{item}\n" +
            "</foreach>\n" +
            " </if> " +
            "<if test='pageQuestnaireDTO.startTime != null and pageQuestnaireDTO.startTime != &quot;&quot;'>" +
            " and caq.publish_time  <![CDATA[ >= ]]> #{pageQuestnaireDTO.startTime}"+
            " </if> " +
            "<if test='pageQuestnaireDTO.endTime != null and pageQuestnaireDTO.endTime != &quot;&quot;'>" +
            " and caq.publish_time  <![CDATA[ <= ]]> #{pageQuestnaireDTO.endTime}"+
            " </if> " +
            "<if test='pageQuestnaireDTO.title != null and pageQuestnaireDTO.title != &quot;&quot;'>" +
            " and caq.title like concat (#{pageQuestnaireDTO.title},'%')"+
            " </if> " +
            " order by caq.create_at DESC " +
            "</script>")
    IPage<QuestnaireListAdminVO> selectPageListAdmin(Page page, @Param("pageQuestnaireDTO") PageQuestnaireDTO pageQuestnaireDTO);
    @Select("select count(id) from com_act_questnaire_user where user_id = #{userId} and questnaire_id = #{questnaireId}")
    Integer getNoRemindCount(@Param("userId") Long userId,@Param("questnaireId") Long questnaireId);
    @Select("SELECT " +
            " id, " +
            " title, " +
            " remark, " +
            " is_cover, " +
            " is_force, " +
            " adver_position_popup, " +
            " adver_position_top, " +
            " adver_position_application, " +
            " project_key  " +
            "FROM " +
            " com_act_questnaire  " +
            "WHERE " +
            " end_time >= now()  " +
            " AND now() >= start_time  " +
            " and community_id = #{communityId} " +
            " and adver_position_top = 1 " +
            " and state = 2")
    List<ComActQuestnaireAppVO> getIndexTopQuestnaireList(@Param("communityId") Long communityId);
    @Select("SELECT " +
            " id, " +
            " title, " +
            " remark, " +
            " is_cover, " +
            " is_force, " +
            " adver_position_popup, " +
            " adver_position_top, " +
            " adver_position_application, " +
            " project_key  " +
            "FROM " +
            " com_act_questnaire  " +
            "WHERE " +
            " end_time >= now()  " +
            " AND now() >= start_time  " +
            " and community_id = #{communityId} " +
            " and adver_position_application = 1 " +
            " and state = 2")
    List<ComActQuestnaireAppVO> getIndexApplicationQuestnaireList(@Param("communityId") Long communityId);
    Integer getAdvPopupCount(@Param("communityId") Long communityId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("id") Long id);
    void deleteQuesSubAll(@Param("queId") Long queId);
    QuestnaireDetailAdminVO getQuesDetailAdmin(@Param("queId") Long queId);
    /**
     * 小程序-问卷调查详情
     * @param userId    用户id
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    QuestnaireDetailAdminVO getQuesDetail(@Param("questId") Long questId,@Param("userId") Long userId);
    IPage<QuestnaireStatisticsSummaryAdminVO> getStatisticsSummaryAdmin(Page page, @Param("summaryDTO") StatisticsSummaryDTO summaryDTO);
    List<QuestnaireStatisticsSummaryExcelAdminVO> getStatisticsSummaryExcelAdmin(@Param("questId") Long questId);
    QuestnaireStatisticsSummaryHeaderAdminVO statisticsSummaryHeader(@Param("questId") Long questId);
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActQuestnaireUserAnswerMapper.java
New file
@@ -0,0 +1,15 @@
package com.panzhihua.service_community.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.panzhihua.service_community.model.dos.ComActQuestnaireUserAnswerDO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @auther lyq
 * @create 2021-08-17 17:42:06
 * @describe 问卷调查用户答题记录mapper类
 */
@Mapper
public interface ComActQuestnaireUserAnswerMapper extends BaseMapper<ComActQuestnaireUserAnswerDO> {
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireAnswerContentDO.java
@@ -35,11 +35,11 @@
    private Long userId;
    /**
     * 选项类型 0 固定选项 1 自定义选项
     * 题目类型 (1.选项题 2.问答题)
     */
    private Integer type;
    /**
     *
     *  题目选项id
     */
    private Long selectionId;
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireDO.java
@@ -6,6 +6,7 @@
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @Author: llming
@@ -26,7 +27,7 @@
     */
    private String queDescribe;
    /**
     * 状态 0 调研中 1已停止
     * 状态 1待发布 2调研中 3已结束
     */
    private Integer state;
    /**
@@ -41,19 +42,98 @@
    /**
     * 提供居民
     */
    private Boolean forMasses;
    private Integer forMasses;
    /**
     * 提供党员
     */
    private Boolean forParty;
    private Integer forParty;
    /**
     * 提供志愿者
     */
    private Boolean forVolunteer;
    private Integer forVolunteer;
    /**
     * 是否隐藏显示 0 显示 1 隐藏
     */
    private Integer isHide;
    /**
     * 调研开始时间
     */
    private Date startTime;
    /**
     * 调研结束时间
     */
    private Date endTime;
    /**
     * 问卷调查备注(应用名称)
     */
    private String remark;
    /**
     * 是否是封面(1.是  2.否)
     */
    private Integer isCover;
    /**
     * 是否强制调研(1.是 2.否)
     */
    private Integer isForce;
    /**
     * 广告弹窗(1.是 2.否 )
     */
    private Integer adverPositionPopup;
    /**
     * 广告顶部(1.是   2.否)
     */
    private Integer adverPositionTop;
    /**
     * 广告应用(1.是   2.否)
     */
    private Integer adverPositionApplication;
    /**
     * 组件唯一key
     */
    private String projectKey;
    /**
     * 填报项数量
     */
    private Integer count;
    /**
     * 浏览量
     */
    private Long viewNum;
    /**
     * 发布时间
     */
    private Date publishTime;
    /**
     * 组件json数据
     */
    private String jsonObject;
    /**
     * 默认是否枚举
     */
    public interface isOk{
        int yes = 1;
        int no = 2;
    }
    /**
     * 状态 1待发布 2调研中 3已结束
     */
    public interface state{
        int dfb = 1;
        int dyz = 2;
        int yjs = 3;
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireSubDO.java
@@ -1,6 +1,7 @@
package com.panzhihua.service_community.model.dos;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -33,4 +34,10 @@
     * 调查问卷Id
     */
    private Long queId;
    /**
     * 问卷调查题目key
     */
    @TableField("`key`")
    private String key;
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireSubSelectionDO.java
@@ -1,6 +1,7 @@
package com.panzhihua.service_community.model.dos;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -40,4 +41,15 @@
     */
    private Integer type;
    /**
     * 问卷调查Id
     */
    private Long queId;
    /**
     * 问卷调查选项key
     */
    @TableField("`key`")
    private String key;
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActQuestnaireUserAnswerDO.java
New file
@@ -0,0 +1,60 @@
package com.panzhihua.service_community.model.dos;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @auther lyq
 * @create 2021-08-17 17:42:06
 * @describe 问卷调查用户答题记录实体类
 */
@Data
@TableName("com_act_questnaire_user_answer")
public class ComActQuestnaireUserAnswerDO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 调查问卷id
     */
    private Long questnaireId;
    /**
     * 用户id
     */
    private Long userId;
    /**
     * 创建时间
     */
    private Date createAt;
    /**
     * 用户答题json数据
     */
    private String jsonObject;
    @Override
    public String toString() {
        return "ComActQuestnaireUserAnswerDO{" +
                "id=" + id +
                ", questnaireId=" + questnaireId +
                ", userId=" + userId +
                ", createAt=" + createAt +
                ", jsonObject=" + jsonObject +
                "}";
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActQuestnaireService.java
@@ -3,6 +3,7 @@
import com.panzhihua.common.model.dtos.community.PageQuestnaireAnswerDTO;
import com.panzhihua.common.model.dtos.community.PageQuestnaireDTO;
import com.panzhihua.common.model.dtos.community.PageQuestnaireSubDetailsDTO;
import com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.questnaire.EditComActQuestnaireVo;
import com.panzhihua.common.model.vos.community.questnaire.QuestnaireVO;
@@ -18,12 +19,19 @@
     *
     * @return
     */
    R addQuestnaire(QuestnaireVO questnaireVO, Long communityId, Long userId);
    R addQuestnaire(QuestnaireVO questnaireVO);
    /**
     * 社区问卷列表
     * 小程序-社区问卷列表
     */
    R pageQuestnaire(PageQuestnaireDTO pageQuestnaireDTO, Long communityId);
    R pageQuestnaire(PageQuestnaireDTO pageQuestnaireDTO);
    /**
     * 社区后台-社区问卷列表
     * @param pageQuestnaireDTO 请求参数
     * @return  社区问卷列表
     */
    R pageQuestnaireAdmin(PageQuestnaireDTO pageQuestnaireDTO);
    /**
     * 编辑问卷——问卷、题目、选项
@@ -33,7 +41,7 @@
    /**
     * 修改问卷状态
     */
    R editQuestnaireDO(EditComActQuestnaireVo editComActQuestnaireVo, Long userId);
    R editQuestnaireDO(EditComActQuestnaireVo editComActQuestnaireVo);
    /**
     * 删除问卷  ——隐藏
@@ -90,8 +98,30 @@
    /**
     * 居民填写问卷调查问卷
     * @param usersAnswerQuestnaireVO
     * @param userId
     * @return
     */
    R usersAnsweQuestnaire(UsersAnswerQuestnaireVO usersAnswerQuestnaireVO, Long userId);
    R usersAnsweQuestnaire(UsersAnswerQuestnaireVO usersAnswerQuestnaireVO);
    /**
     * 社区后台-查询问卷调查详情
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    R getQuesDetailAdmin(Long questId);
    /**
     * 小程序-问卷调查详情
     * @param userId    用户id
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    R getQuesDetail(Long questId,Long userId);
    R statisticsSummary(StatisticsSummaryDTO summaryDTO);
    R statisticsSummaryExport(Long questId);
    R statisticsSummaryHeader(Long questId);
    R timedTaskQuestionnaire();
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActQuestnaireUserAnswerService.java
New file
@@ -0,0 +1,13 @@
package com.panzhihua.service_community.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.panzhihua.service_community.model.dos.ComActQuestnaireUserAnswerDO;
/**
 * @auther lyq
 * @create 2021-08-17 17:42:06
 * @describe 问卷调查用户答题记录服务类
 */
public interface ComActQuestnaireUserAnswerService extends IService<ComActQuestnaireUserAnswerDO> {
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActEasyPhotoServiceImpl.java
@@ -52,6 +52,8 @@
    private ComActUserWalletService comActUserWalletService;
    @Resource
    private ComActActSignDAO comActActSignDAO;
    @Resource
    private ComActQuestnaireDAO comActQuestnaireDAO;
    /**
     * 分页查询随手拍
     *
@@ -516,11 +518,48 @@
            easyPhotoRewardVO.setEasyPhotoActivityVO(photoActivityVO);
        }
        //查询用户未读奖励金额
        BigDecimal amount = comActEasyPhotoRewardMapper.getUserReward(userId,communityId);
        if(amount != null){
            easyPhotoRewardVO.setAmount(amount);
        if(userId != null && userId != 0L){
            //查询用户未读奖励金额
            BigDecimal amount = comActEasyPhotoRewardMapper.getUserReward(userId,communityId);
            if(amount != null){
                easyPhotoRewardVO.setAmount(amount);
            }
        }
        //查询当前社区正在进行中的弹窗调查问卷
        ComActQuestnaireDO popupQuestnaireDO = comActQuestnaireDAO.selectOne(new QueryWrapper<ComActQuestnaireDO>().lambda()
                .le(ComActQuestnaireDO::getStartTime,nowDate).ge(ComActQuestnaireDO::getEndTime,nowDate)
                .eq(ComActQuestnaireDO::getCommunityId,communityId).eq(ComActQuestnaireDO::getState,2)
                .eq(ComActQuestnaireDO::getAdverPositionPopup,ComActQuestnaireDO.isOk.yes));
        if(popupQuestnaireDO != null){
            ComActQuestnaireAppVO popupQuestnaireVO = new ComActQuestnaireAppVO();
            BeanUtils.copyProperties(popupQuestnaireDO,popupQuestnaireVO);
            if(userId != null){
                if(popupQuestnaireDO.getIsForce().equals(ComActQuestnaireDO.isOk.no)){
                    //查询用户是否已点击不再提醒
                    Integer count = comActQuestnaireDAO.getNoRemindCount(userId,popupQuestnaireVO.getId());
                    if(count <= 0){
                        popupQuestnaireVO.setIsDisplay(ComActQuestnaireDO.isOk.yes);
                    }
                }else{
                    popupQuestnaireVO.setIsDisplay(ComActQuestnaireDO.isOk.yes);
                }
            }
            easyPhotoRewardVO.setPopupQuestnaireVO(popupQuestnaireVO);
        }
        //查询社区正在进行中的banner位置调查问卷列表
        List<ComActQuestnaireAppVO> bannerQuestnaireList = comActQuestnaireDAO.getIndexTopQuestnaireList(communityId);
        if(!bannerQuestnaireList.isEmpty()){
            easyPhotoRewardVO.setBannerQuestnaireList(bannerQuestnaireList);
        }
        //查询社区正在进行中的应用位置调查问卷列表
        List<ComActQuestnaireAppVO> applicationQuestnaireList = comActQuestnaireDAO.getIndexApplicationQuestnaireList(communityId);
        if(!applicationQuestnaireList.isEmpty()){
            easyPhotoRewardVO.setApplicationQuestnaireList(applicationQuestnaireList);
        }
        return R.ok(easyPhotoRewardVO);
    }
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActIntegralUserTradeServiceImpl.java
@@ -258,13 +258,13 @@
                    return R.fail("未查询到用户信息,记录积分失败");
                }
                //判断调查问卷调查的对象是什么身份,如果是党员和志愿者两种身份,则记录志愿者积分
                if(questnaireDO.getForParty() && integralUser.getIsPartymember().equals(1)){
                if(questnaireDO.getForParty().equals(1) && integralUser.getIsPartymember().equals(1)){
                    identityType = 2;
                    if(questnaireDO.getForVolunteer() && integralUser.getIsVolunteer().equals(1)){
                    if(questnaireDO.getForVolunteer().equals(1) && integralUser.getIsVolunteer().equals(1)){
                        identityType = 3;
                    }
                }
                if(questnaireDO.getForVolunteer() && integralUser.getIsVolunteer().equals(1)){
                if(questnaireDO.getForVolunteer().equals(1) && integralUser.getIsVolunteer().equals(1)){
                    identityType = 3;
                }
                remark.append("参与调查问卷奖励积分");
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java
@@ -1,8 +1,11 @@
package com.panzhihua.service_community.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -16,13 +19,16 @@
import com.panzhihua.common.model.dtos.community.PageQuestnaireDTO;
import com.panzhihua.common.model.dtos.community.PageQuestnaireSubDetailsDTO;
import com.panzhihua.common.model.dtos.community.QuestnaireAnswersDTO;
import com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.questnaire.*;
import com.panzhihua.common.service.user.UserService;
import com.panzhihua.common.utlis.DateUtils;
import com.panzhihua.service_community.dao.*;
import com.panzhihua.service_community.model.dos.*;
import com.panzhihua.service_community.service.ComActQuestnaireService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.panzhihua.common.model.vos.community.ComActQuestnaireAnswerContentVO;
@@ -37,6 +43,7 @@
 * @Author: llming
 * @Description:
 */
@Slf4j
@Service
public class ComActQuestnaireServiceImpl implements ComActQuestnaireService {
    @Resource
@@ -57,50 +64,231 @@
    ComActQuestnaireAnswerContentServiceImpl answerContentService;
    @Resource
    UserService userService;
    @Resource
    private ComActQuestnaireUserAnswerMapper comActQuestnaireUserAnswerMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addQuestnaire(QuestnaireVO questnaireVO, Long communityId, Long userId) {
    public R addQuestnaire(QuestnaireVO questnaireVO) {
        Long userId = questnaireVO.getUserId();
        if(questnaireVO.getAdverPositionPopup().equals(ComActQuestnaireDO.isOk.yes)){
            //查询当前时间段是否已有弹窗提醒了
            Integer count = questnaireDAO.getAdvPopupCount(questnaireVO.getCommunityId(),questnaireVO.getStartTime(),questnaireVO.getEndTime(),null);
            if(count > 0){
                return R.fail("所选时间段已设置了问卷调查弹窗,暂不支持再次添加!");
            }
        }
        ComActQuestnaireDO comActQuestnaireDO = new ComActQuestnaireDO();
        comActQuestnaireDO.setTitle(questnaireVO.getQueTitle());
        comActQuestnaireDO.setQueDescribe(questnaireVO.getQueDescribe());
        comActQuestnaireDO.setState(QuestnaireState.CONTINUED.getCode());
        Date nowDate = new Date();
        BeanUtils.copyProperties(questnaireVO,comActQuestnaireDO);
        comActQuestnaireDO.setState(ComActQuestnaireDO.state.dfb);
        comActQuestnaireDO.setTitle(questnaireVO.getTitle());
        comActQuestnaireDO.setJoinCount(0);
        comActQuestnaireDO.setCommunityId(communityId);
        comActQuestnaireDO.setCreateBy(userId);
        comActQuestnaireDO.setIsHide(0);
        comActQuestnaireDO.setForMasses(questnaireVO.getForMasses());
        comActQuestnaireDO.setForParty(questnaireVO.getForParty());
        comActQuestnaireDO.setForVolunteer(questnaireVO.getForVolunteer());
        int questId = questnaireDAO.insert(comActQuestnaireDO);
        if(questId!=1){
        comActQuestnaireDO.setCreateAt(nowDate);
        Date startDate = DateUtils.stringToDate(questnaireVO.getStartTime(),DateUtils.ymdhms_format);
        if(startDate != null && startDate.getTime() <= nowDate.getTime()){
            comActQuestnaireDO.setState(ComActQuestnaireDO.state.dyz);
            comActQuestnaireDO.setPublishTime(nowDate);
        }
        Date endDate = DateUtils.stringToDate(questnaireVO.getEndTime(),DateUtils.ymdhms_format);
        if(endDate != null && endDate.getTime() <= nowDate.getTime()){
            comActQuestnaireDO.setState(ComActQuestnaireDO.state.yjs);
        }
        comActQuestnaireDO.setStartTime(startDate);
        comActQuestnaireDO.setEndTime(endDate);
        if(questnaireVO.getIdentity().equals(QuestnaireVO.identity.jm)){
            comActQuestnaireDO.setForMasses(ComActQuestnaireDO.isOk.yes);
        }else if(questnaireVO.getIdentity().equals(QuestnaireVO.identity.dy)){
            comActQuestnaireDO.setForParty(ComActQuestnaireDO.isOk.yes);
        }else if(questnaireVO.getIdentity().equals(QuestnaireVO.identity.zyz)){
            comActQuestnaireDO.setForVolunteer(ComActQuestnaireDO.isOk.yes);
        }
        if(questnaireVO.getIsRelease() != null && questnaireVO.getIsRelease().equals(1)){
            comActQuestnaireDO.setStartTime(nowDate);
        }
        //统计该调查问卷填报题目数量
        int count = 0;
        List<QuestnaiteSubVO> questnaiteSubVOS = JSON.parseArray(questnaireVO.getJsonObject().toString(),QuestnaiteSubVO.class);
        if(!questnaiteSubVOS.isEmpty()){
            count = questnaiteSubVOS.size();
        }
        comActQuestnaireDO.setCount(count);
        comActQuestnaireDO.setJsonObject(questnaireVO.getJsonObject());
        int quesCount = questnaireDAO.insert(comActQuestnaireDO);
        if(quesCount !=1 ){
            return R.fail("创建失败");
        }
        if(questnaireVO.getQuestnaiteSubVOS()!=null) {
            questnaireVO.getQuestnaiteSubVOS().forEach(sub -> {
        if(!questnaiteSubVOS.isEmpty()) {
            questnaiteSubVOS.forEach(sub -> {
                ComActQuestnaireSubDO comActQuestnaireSubDO = new ComActQuestnaireSubDO();
                comActQuestnaireSubDO.setType(sub.getType());
                comActQuestnaireSubDO.setContent(sub.getContent());
                comActQuestnaireSubDO.setContent(sub.getLabel());
                comActQuestnaireSubDO.setSort(sub.getSort());
                comActQuestnaireSubDO.setQueId((long) comActQuestnaireDO.getId());
                comActQuestnaireSubDO.setQueId(comActQuestnaireDO.getId());
                comActQuestnaireSubDO.setCreateBy(userId);
                int subId = questnaireSubDAO.insert(comActQuestnaireSubDO);
                comActQuestnaireSubDO.setKey(sub.getKey());
                questnaireSubDAO.insert(comActQuestnaireSubDO);
                ArrayList<ComActQuestnaireSubSelectionDO> subSelectionList = Lists.newArrayList();
                if(sub.getQuestnaiteSubSelectionVOS()!=null) {
                    List<QuestnaiteSubSelectionVO> l = sub.getQuestnaiteSubSelectionVOS();
                    for(int i=0; i<l.size(); i++){
                        QuestnaiteSubSelectionVO subSelect = l.get(i);
                if(sub.getOptions() != null && !sub.getOptions().isEmpty()) {
                    List<QuestnaiteSubSelectionVO> subOptions = sub.getOptions();
                    for(int i=0; i<subOptions.size(); i++){
                        QuestnaiteSubSelectionVO subSelect = subOptions.get(i);
                        ComActQuestnaireSubSelectionDO subSelectionDO = new ComActQuestnaireSubSelectionDO();
                        subSelectionDO.setQueSubId(comActQuestnaireSubDO.getId());
                        if(subSelect.getType()==1){
                        if(subSelect.getType().equals(1)){
                            //添加选项名称
                            subSelectionDO.setOptionName(subSelect.getOptionName());
                        }else {
                            subSelectionDO.setOptionName(String.valueOf(Character.toChars('A' + i)));
                        }
                        subSelectionDO.setSort(subSelect.getSort());
                        subSelectionDO.setContent(subSelect.getContent());
                        subSelectionDO.setContent(subSelect.getLabel());
                        subSelectionDO.setQueId(comActQuestnaireDO.getId());
                        subSelectionDO.setCreateBy(userId);
                        subSelectionDO.setType(subSelect.getType());
                        subSelectionDO.setKey(subSelect.getKey());
                        subSelectionList.add(subSelectionDO);
                    }
                }
                subSelectionService.saveBatch(subSelectionList);
            });
        }
        return R.ok();
    }
    @Override
    public R pageQuestnaire(PageQuestnaireDTO pageQuestnaireDTO) {
        IPage<QuestnaireListVo> voPage = questnaireDAO.selectPageList(new Page<>(pageQuestnaireDTO.getPageNum(),pageQuestnaireDTO.getPageSize()),pageQuestnaireDTO);
        return R.ok(voPage);
    }
    @Override
    public R pageQuestnaireAdmin(PageQuestnaireDTO pageQuestnaireDTO) {
        IPage<QuestnaireListAdminVO> voPage = questnaireDAO.selectPageListAdmin(new Page<>(pageQuestnaireDTO.getPageNum(),pageQuestnaireDTO.getPageSize()),pageQuestnaireDTO);
        if(!voPage.getRecords().isEmpty()){
            voPage.getRecords().forEach(vo -> {
                //判断调查人员身份
                if(vo.getForMasses().equals(ComActQuestnaireDO.isOk.yes)){
                    vo.setIdentity("全部居民");
                }else if(vo.getForParty().equals(ComActQuestnaireDO.isOk.yes)){
                    vo.setIdentity("党员");
                }else if(vo.getForVolunteer().equals(ComActQuestnaireDO.isOk.yes)){
                    vo.setIdentity("志愿者");
                }
                //判断广告位置
                StringBuilder sb = new StringBuilder();
                if(vo.getAdverPositionPopup().equals(ComActQuestnaireDO.isOk.yes)){
                    sb.append("首页弹窗,");
                }
                if(vo.getAdverPositionTop().equals(ComActQuestnaireDO.isOk.yes)){
                    sb.append("首页顶部,");
                }
                if(vo.getAdverPositionApplication().equals(ComActQuestnaireDO.isOk.yes)){
                    sb.append("首页应用,");
                }
                String advertPosition = sb.toString();
                if(advertPosition.length() > 0){
                    vo.setAdvertPosition(advertPosition.substring(0,advertPosition.length()-1));
                }else{
                    vo.setAdvertPosition("无");
                }
            });
        }
        return R.ok(voPage);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R editQuestnaire(QuestnaireVO questnaireVO) {
        Long queId = questnaireVO.getId();
        Long userId = questnaireVO.getUserId();
        ComActQuestnaireDO questnaireDO = this.questnaireDAO.selectById(queId);
        if(questnaireDO == null){
            return R.fail("未查询到该问卷调查");
        }
        if(!questnaireDO.getState().equals(1)){
            return R.fail("该调查问卷不是待发布状态,不可编辑");
        }
        if(questnaireVO.getAdverPositionPopup().equals(ComActQuestnaireDO.isOk.yes)){
            //查询当前时间段是否已有弹窗提醒了
            Integer count = questnaireDAO.getAdvPopupCount(questnaireVO.getCommunityId(),questnaireVO.getStartTime(),questnaireVO.getEndTime(),queId);
            if(count > 0){
                return R.fail("所选时间段已设置了问卷调查弹窗,暂不支持再次添加!");
            }
        }
        //更新调查问卷信息
        Date nowDate = new Date();
        BeanUtils.copyProperties(questnaireVO,questnaireDO);
        questnaireDO.setState(ComActQuestnaireDO.state.dfb);
        questnaireDO.setTitle(questnaireVO.getTitle());
        questnaireDO.setUpdateBy(userId);
        questnaireDO.setUpdateAt(nowDate);
        Date startDate = DateUtils.stringToDate(questnaireVO.getStartTime(),DateUtils.ymdhms_format);
        if(startDate != null && startDate.getTime() <= nowDate.getTime()){
            questnaireDO.setState(ComActQuestnaireDO.state.dyz);
            questnaireDO.setPublishTime(nowDate);
        }
        Date endDate = DateUtils.stringToDate(questnaireVO.getEndTime(),DateUtils.ymdhms_format);
        if(endDate != null && endDate.getTime() <= nowDate.getTime()){
            questnaireDO.setState(ComActQuestnaireDO.state.yjs);
        }
        questnaireDO.setStartTime(startDate);
        questnaireDO.setEndTime(endDate);
        if(questnaireVO.getIdentity().equals(QuestnaireVO.identity.jm)){
            questnaireDO.setForMasses(ComActQuestnaireDO.isOk.yes);
        }else if(questnaireVO.getIdentity().equals(QuestnaireVO.identity.dy)){
            questnaireDO.setForParty(ComActQuestnaireDO.isOk.yes);
        }else if(questnaireVO.getIdentity().equals(QuestnaireVO.identity.zyz)){
            questnaireDO.setForVolunteer(ComActQuestnaireDO.isOk.yes);
        }
        if(questnaireVO.getIsRelease() != null && questnaireVO.getIsRelease().equals(1)){
            questnaireDO.setStartTime(nowDate);
        }
        //统计该调查问卷填报题目数量
        int count = 0;
        List<QuestnaiteSubVO> questnaiteSubVOS = JSON.parseArray(questnaireVO.getJsonObject().toString(),QuestnaiteSubVO.class);
        if(!questnaiteSubVOS.isEmpty()){
            count = questnaiteSubVOS.size();
        }
        questnaireDO.setCount(count);
        questnaireDO.setJsonObject(questnaireVO.getJsonObject());
        questnaireDAO.updateById(questnaireDO);
        //删除原调查问卷题目以及选项,重新进行新增
        questnaireDAO.deleteQuesSubAll(queId);
        //重新新增题目以及题目选项
        if(!questnaiteSubVOS.isEmpty()) {
            questnaiteSubVOS.forEach(sub -> {
                ComActQuestnaireSubDO comActQuestnaireSubDO = new ComActQuestnaireSubDO();
                comActQuestnaireSubDO.setType(sub.getType());
                comActQuestnaireSubDO.setContent(sub.getLabel());
                comActQuestnaireSubDO.setSort(sub.getSort());
                comActQuestnaireSubDO.setKey(sub.getKey());
                comActQuestnaireSubDO.setQueId(queId);
                comActQuestnaireSubDO.setCreateBy(userId);
                questnaireSubDAO.insert(comActQuestnaireSubDO);
                ArrayList<ComActQuestnaireSubSelectionDO> subSelectionList = Lists.newArrayList();
                if(sub.getOptions() != null && !sub.getOptions().isEmpty()) {
                    List<QuestnaiteSubSelectionVO> subOptions = sub.getOptions();
                    for(int i=0; i<subOptions.size(); i++){
                        QuestnaiteSubSelectionVO subSelect = subOptions.get(i);
                        ComActQuestnaireSubSelectionDO subSelectionDO = new ComActQuestnaireSubSelectionDO();
                        subSelectionDO.setQueSubId(comActQuestnaireSubDO.getId());
                        if(subSelect.getType().equals(1)){
                            //添加选项名称
                            subSelectionDO.setOptionName(subSelect.getOptionName());
                        }else {
                            subSelectionDO.setOptionName(String.valueOf(Character.toChars('A' + i)));
                        }
                        subSelectionDO.setKey(subSelect.getKey());
                        subSelectionDO.setContent(subSelect.getLabel());
                        subSelectionDO.setQueId(queId);
                        subSelectionDO.setCreateBy(userId);
                        subSelectionDO.setType(subSelect.getType());
                        subSelectionList.add(subSelectionDO);
@@ -113,94 +301,49 @@
    }
    @Override
    public R pageQuestnaire(PageQuestnaireDTO pageQuestnaireDTO, Long communityId) {
        Page page = new Page<>();
        Long pageNum = pageQuestnaireDTO.getPageNum();
        Long pageSize = pageQuestnaireDTO.getPageSize();
        if (null == pageNum || 0 == pageNum) {
            pageNum = 1l;
        }
        if (null == pageSize || 0 == pageSize) {
            pageSize = 10l;
        }
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<QuestnaireListVo> voPage = questnaireDAO.selectPageList(page,pageQuestnaireDTO,communityId);
        voPage.getRecords().forEach(record -> {
            Integer userAnswerCount = questnaireAnswerContentDAO.selectUserCountByQuestnaireId(record.getId(), pageQuestnaireDTO.getUserId());
            if(userAnswerCount>0){
                record.setAnswer(true);
            }else{
                record.setAnswer(false);
            }
        });
        return R.ok(voPage);
    }
    @Override
    public R editQuestnaire(QuestnaireVO questnaireVO) {
        ComActQuestnaireDO questnaireDO = null;
        if (questnaireVO.getQuestId() != null && questnaireVO.getQuestId() != 0L) {
            questnaireDO = questnaireDAO.selectById(questnaireVO.getQuestId());
            if (questnaireDO == null) {
                return R.fail(500, "id有误!");
            }
            questnaireDO.setTitle(questnaireVO.getQueTitle());
            questnaireDO.setQueDescribe(questnaireVO.getQueDescribe());
            //保存问卷调查
            questnaireDAO.updateById(questnaireDO);
            questnaireVO.getQuestnaiteSubVOS().forEach(sub -> {
                if (sub.getQueSubId() == null) {
                    throw new ServiceException("500", "问卷题目Id为空!");
                }
                ComActQuestnaireSubDO subDO = questnaireSubDAO.selectById(sub.getQueSubId());
                if (subDO == null || sub.getContent() == null) {
                    throw new ServiceException("500", "修改问卷题目数据有误!");
                }
                subDO.setContent(sub.getContent());
                //更新问卷题目
                questnaireSubDAO.updateById(subDO);
                sub.getQuestnaiteSubSelectionVOS().forEach(subSelection -> {
                    if (subSelection.getQueSubSelectionId() == null || subSelection.getContent() == null) {
                        throw new ServiceException("500", "问卷题目选项数据有误!");
                    }
                    ComActQuestnaireSubSelectionDO subSelectionDO = questnaireSubSelectionDAO.selectById(subSelection.getQueSubSelectionId());
                    subSelectionDO.setContent(subSelection.getContent());
                    //更新问卷选项
                    questnaireSubSelectionDAO.updateById(subSelectionDO);
                });
            });
        }else{
            return R.fail("参数有误");
        }
        return R.ok();
    }
    @Override
    public R editQuestnaireDO(EditComActQuestnaireVo editComActQuestnaireVo, Long userId) {
        LambdaQueryWrapper<ComActQuestnaireDO> subParam = new LambdaQueryWrapper<ComActQuestnaireDO>().eq(ComActQuestnaireDO::getId, editComActQuestnaireVo.getQuestId());
    public R editQuestnaireDO(EditComActQuestnaireVo editComActQuestnaireVo) {
        Long userId = editComActQuestnaireVo.getUserId();
        LambdaQueryWrapper<ComActQuestnaireDO> subParam = new LambdaQueryWrapper<ComActQuestnaireDO>()
                .eq(ComActQuestnaireDO::getId, editComActQuestnaireVo.getQuestId());
        ComActQuestnaireDO questDO = questnaireDAO.selectOne(subParam);
        if (questDO == null) {
            return R.fail(500, "Id有误!");
            return R.fail("未查询到调查问卷记录");
        }
        questDO.setState(editComActQuestnaireVo.getState());
        if(editComActQuestnaireVo.getType().equals(EditComActQuestnaireVo.type.jx)){
            questDO.setEndTime(DateUtils.stringToDate(editComActQuestnaireVo.getEndTime(),DateUtils.ymdhms_format));
            questDO.setState(ComActQuestnaireDO.state.dyz);
        }else if(editComActQuestnaireVo.getType().equals(EditComActQuestnaireVo.type.tz)){
            questDO.setState(ComActQuestnaireDO.state.yjs);
        }else if(editComActQuestnaireVo.getType().equals(EditComActQuestnaireVo.type.fb)){
            questDO.setState(ComActQuestnaireDO.state.dyz);
            questDO.setStartTime(new Date());
        }
        questDO.setUpdateBy(userId);
        questnaireDAO.updateById(questDO);
        return R.ok();
        questDO.setUpdateAt(new Date());
        if(questnaireDAO.updateById(questDO) > 0){
            return R.ok();
        }else{
            return R.fail();
        }
    }
    @Override
    public R deleteQuestnaire(Long questId, Long userId) {
        LambdaQueryWrapper<ComActQuestnaireDO> subParam = new LambdaQueryWrapper<ComActQuestnaireDO>().eq(ComActQuestnaireDO::getId, questId);
        ComActQuestnaireDO queDO = questnaireDAO.selectOne(subParam);
        ComActQuestnaireDO queDO = questnaireDAO.selectById(questId);
        if (queDO == null) {
            return R.fail();
            return R.fail("未查询到调查问卷记录");
        }
        if(!queDO.getState().equals(ComActQuestnaireDO.state.dfb)){
            return R.fail("该调查问卷不是待发布状态,不可删除");
        }
        queDO.setUpdateBy(userId);
        queDO.setUpdateAt(new Date());
        queDO.setIsHide(1);
        questnaireDAO.updateById(queDO);
        return R.ok();
        if(questnaireDAO.updateById(queDO) > 0){
            return R.ok();
        }else{
            return R.fail();
        }
    }
    @Override
@@ -367,48 +510,209 @@
    }
    @Override
    public R usersAnsweQuestnaire(UsersAnswerQuestnaireVO answerQuestnaireVO, Long userId) {
        if (answerQuestnaireVO == null || answerQuestnaireVO.getAnswerContentVOList() == null) {
            return R.fail(500, "数据为空!");
    @Transactional(rollbackFor = Exception.class)
    public R usersAnsweQuestnaire(UsersAnswerQuestnaireVO answerQuestnaireVO) {
        if (answerQuestnaireVO == null || answerQuestnaireVO.getJsonObject() == null) {
            return R.fail("数据为空!");
        }
        ComActQuestnaireDO questnaireDO = questnaireDAO.selectById(answerQuestnaireVO.getQuestId());
        Long userId = answerQuestnaireVO.getUserId();
        Long questId = answerQuestnaireVO.getQuestId();
        Date nowDate = new Date();
        ComActQuestnaireDO questnaireDO = questnaireDAO.selectById(questId);
        if (questnaireDO == null) {
            return R.fail(500, "调查问卷不存在!");
            return R.fail("调查问卷不存在!");
        }
        R r = userService.getUserInfoByUserId(userId+"");
        if(!R.isOk(r)){
            return R.fail("用户信息错误");
        ComActQuestnaireUserAnswerDO oldUserAnswerDO = comActQuestnaireUserAnswerMapper.selectOne(new QueryWrapper<ComActQuestnaireUserAnswerDO>().lambda()
                .eq(ComActQuestnaireUserAnswerDO::getQuestnaireId,questId).eq(ComActQuestnaireUserAnswerDO::getUserId,userId));
        if(oldUserAnswerDO != null){
            return R.fail("您已填写该问卷,不可重复提交");
        }
        LoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), LoginUserInfoVO.class);
        Long userCommunityId = loginUserInfoVO.getCommunityId();
        if(questnaireDO.getCommunityId()!=null && questnaireDO.getCommunityId().longValue()!=userCommunityId.longValue()){
            return R.fail(500, "您目前所属社区无法填写当前社区的调查问卷,请切换社区后重试");
        }
        LambdaQueryWrapper<ComActQuestnaireSubDO> subQuery = new LambdaQueryWrapper<ComActQuestnaireSubDO>();
        subQuery.eq(ComActQuestnaireSubDO::getQueId,answerQuestnaireVO.getQuestId());
        List<ComActQuestnaireSubDO> subDOS = questnaireSubDAO.selectList(subQuery);
        List<Long> subIds = subDOS.stream().map(ComActQuestnaireSubDO::getId).collect(Collectors.toList());
        List<UserAnswerContentVO> answerContentVOList = answerQuestnaireVO.getAnswerContentVOList();
        List<ComActQuestnaireAnswerContentDO> answerContentDOList = Lists.newArrayList();
        for (UserAnswerContentVO answerContent:answerContentVOList) {
            ComActQuestnaireAnswerContentDO answerContentDO = new ComActQuestnaireAnswerContentDO();
            boolean b = subIds.stream().anyMatch(a -> a.equals(answerContent.getSubId()));
            if (!b) {
                throw new ServiceException("500", "调查问卷题目不存在!");
        List<ComActQuestnaireAnswerContentDO> answerContentList = new ArrayList<>();
        //解析用户上传json数据
        List<QuestnaiteSubVO> questnaiteSubVOS = JSON.parseArray(answerQuestnaireVO.getJsonObject().toString(),QuestnaiteSubVO.class);
        if(!questnaiteSubVOS.isEmpty()){
            for (QuestnaiteSubVO questnaiteSub:questnaiteSubVOS) {
                //查询用户填写题目
                ComActQuestnaireSubDO questnaireSubDO = questnaireSubDAO.selectOne(new QueryWrapper<ComActQuestnaireSubDO>().lambda()
                        .eq(ComActQuestnaireSubDO::getQueId,questId).eq(ComActQuestnaireSubDO::getKey,questnaiteSub.getKey()));
                if(questnaireSubDO == null){
                    log.error("未查询到调查问卷题目,题目名称:" + questnaiteSub.getLabel() + "题目key:" + questnaiteSub.getKey());
                    continue;
                }
                Long queSubId = questnaireSubDO.getId();
                //根据上传的类型查询不同的题目选项
                if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.danxuan)){
                    //单选题处理
                    ComActQuestnaireSubSelectionDO subSelectionDO = questnaireSubSelectionDAO.selectOne(new QueryWrapper<ComActQuestnaireSubSelectionDO>()
                            .lambda().eq(ComActQuestnaireSubSelectionDO::getQueSubId,queSubId).eq(ComActQuestnaireSubSelectionDO::getQueId,questId)
                            .eq(ComActQuestnaireSubSelectionDO::getKey,questnaiteSub.getValues()));
                    if(subSelectionDO == null){
                        log.error("未查询到调查问卷选项,题目名称:" + questnaiteSub.getLabel() + "选项key:" + questnaiteSub.getValues());
                        continue;
                    }
                    ComActQuestnaireAnswerContentDO answerContentDO = new ComActQuestnaireAnswerContentDO();
                    answerContentDO.setUserId(userId);
                    answerContentDO.setCreateAt(nowDate);
                    answerContentDO.setCreateBy(userId);
                    answerContentDO.setSelectionId(subSelectionDO.getId());
                    answerContentDO.setSubId(queSubId);
                    answerContentDO.setType(1);
                    answerContentDO.setChoice(subSelectionDO.getOptionName());
                    answerContentDO.setAnswerContent(subSelectionDO.getContent());
                    answerContentList.add(answerContentDO);
                }else if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.duoxuan)){
                    //多选题处理
                    String values = questnaiteSub.getValues();
                    String []value = values.split(",");
                    for (int i = 0; i < value.length; i++) {
                        ComActQuestnaireSubSelectionDO subSelectionDO = questnaireSubSelectionDAO.selectOne(new QueryWrapper<ComActQuestnaireSubSelectionDO>()
                                .lambda().eq(ComActQuestnaireSubSelectionDO::getQueSubId,queSubId).eq(ComActQuestnaireSubSelectionDO::getQueId,questId)
                                .eq(ComActQuestnaireSubSelectionDO::getKey,value[i]));
                        if(subSelectionDO == null){
                            log.error("未查询到调查问卷选项,题目名称:" + questnaiteSub.getLabel() + "选项key:" + questnaiteSub.getValues());
                            continue;
                        }
                        ComActQuestnaireAnswerContentDO answerContentDO = new ComActQuestnaireAnswerContentDO();
                        answerContentDO.setUserId(userId);
                        answerContentDO.setCreateAt(nowDate);
                        answerContentDO.setCreateBy(userId);
                        answerContentDO.setSelectionId(subSelectionDO.getId());
                        answerContentDO.setSubId(queSubId);
                        answerContentDO.setType(1);
                        answerContentDO.setChoice(subSelectionDO.getOptionName());
                        answerContentDO.setAnswerContent(subSelectionDO.getContent());
                        answerContentList.add(answerContentDO);
                    }
                }else if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.wenda)){
                    //问答题处理
                    String values = questnaiteSub.getValues();
                    ComActQuestnaireAnswerContentDO answerContentDO = new ComActQuestnaireAnswerContentDO();
                    answerContentDO.setUserId(userId);
                    answerContentDO.setCreateAt(nowDate);
                    answerContentDO.setCreateBy(userId);
                    answerContentDO.setSubId(queSubId);
                    answerContentDO.setType(2);
                    answerContentDO.setAnswerContent(values);
                    answerContentList.add(answerContentDO);
                }
            }
            BeanUtils.copyProperties(answerContent,answerContentDO);
            answerContentDO.setUserId(userId);
            answerContentDOList.add(answerContentDO);
        }
        boolean batchAddSuccess = answerContentService.saveBatch(answerContentDOList);
        if(batchAddSuccess) {
            /**
             * 更新回答用户数量
             */
        //新增用户填写的答卷
        if(!answerContentList.isEmpty()){
            answerContentService.saveBatch(answerContentList);
            //更新回答用户数量
            Integer joinCount = questnaireDO.getJoinCount();
            questnaireDO.setJoinCount(joinCount != null ? joinCount + 1 : 1);
            questnaireDAO.updateById(questnaireDO);
            //新增用户答题记录
            ComActQuestnaireUserAnswerDO userAnswerDO = new ComActQuestnaireUserAnswerDO();
            userAnswerDO.setQuestnaireId(questId);
            userAnswerDO.setUserId(userId);
            userAnswerDO.setCreateAt(nowDate);
            userAnswerDO.setJsonObject(answerQuestnaireVO.getJsonObject());
            comActQuestnaireUserAnswerMapper.insert(userAnswerDO);
        }
        return R.ok();
    }
    /**
     * 社区后台-查询问卷调查详情
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    @Override
    public R getQuesDetailAdmin(Long questId){
        QuestnaireDetailAdminVO result = questnaireDAO.getQuesDetailAdmin(questId);
        if(result == null){
            return R.fail("未查询到该记录");
        }
        return R.ok(result);
    }
    /**
     * 小程序-问卷调查详情
     * @param userId    用户id
     * @param questId   问卷id
     * @return  问卷调查详情
     */
    @Override
    public R getQuesDetail(Long questId,Long userId){
        QuestnaireDetailAdminVO result = questnaireDAO.getQuesDetail(questId,userId);
        if(result == null){
            return R.fail("未查询到该记录");
        }
        ComActQuestnaireUserAnswerDO oldUserAnswerDO = comActQuestnaireUserAnswerMapper.selectOne(new QueryWrapper<ComActQuestnaireUserAnswerDO>().lambda()
                .eq(ComActQuestnaireUserAnswerDO::getQuestnaireId,questId).eq(ComActQuestnaireUserAnswerDO::getUserId,userId));
        if(oldUserAnswerDO != null){
            result.setIsOk(1);
        }
        return R.ok(result);
    }
    @Override
    public R statisticsSummary(StatisticsSummaryDTO summaryDTO){
        IPage<QuestnaireStatisticsSummaryAdminVO> summaryAdminList = questnaireDAO.getStatisticsSummaryAdmin(new Page(summaryDTO.getPageNum(),summaryDTO.getPageSize()),summaryDTO);
        summaryAdminList.getRecords().forEach(summary -> {
            if(summary.getAllCount().equals(0)){
                summary.setTag(BigDecimal.ZERO);
            }else{
                summary.setTag(BigDecimal.valueOf(summary.getCount()).divide(BigDecimal.valueOf(summary.getAllCount()),2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
            }
        });
        return R.ok(questnaireDAO.getStatisticsSummaryAdmin(new Page(summaryDTO.getPageNum(),summaryDTO.getPageSize()),summaryDTO));
    }
    @Override
    public R statisticsSummaryExport(Long questId){
        List<QuestnaireStatisticsSummaryExcelAdminVO> summaryExcelList = questnaireDAO.getStatisticsSummaryExcelAdmin(questId);
        summaryExcelList.forEach(summary -> {
            if(summary.getAllCount().equals(0)){
                summary.setTag(BigDecimal.ZERO);
            }else{
                summary.setTag(BigDecimal.valueOf(summary.getCount()).divide(BigDecimal.valueOf(summary.getAllCount()),2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
            }
        });
        return R.ok(summaryExcelList);
    }
    @Override
    public R statisticsSummaryHeader(Long questId){
        QuestnaireStatisticsSummaryHeaderAdminVO summaryHeaderAdminVO = this.questnaireDAO.statisticsSummaryHeader(questId);
        return R.ok(summaryHeaderAdminVO);
    }
    @Override
    public R timedTaskQuestionnaire(){
        Date nowDate = new Date();
        //查询所有开始时间已经超过当前时间的待发布状态调查问卷
        List<ComActQuestnaireDO> questnaireDOList = questnaireDAO.selectList(new QueryWrapper<ComActQuestnaireDO>().lambda()
                .eq(ComActQuestnaireDO::getState,ComActQuestnaireDO.state.dfb).eq(ComActQuestnaireDO::getIsHide,0)
                .ge(ComActQuestnaireDO::getStartTime,nowDate));
        questnaireDOList.forEach(questnaire -> {
            questnaire.setState(ComActQuestnaireDO.state.dyz);
            questnaire.setPublishTime(nowDate);
            questnaireDAO.updateById(questnaire);
        });
        //查询所有结束时间已经超过当前时间的调研中状态调查问卷
        List<ComActQuestnaireDO> questnaireList = questnaireDAO.selectList(new QueryWrapper<ComActQuestnaireDO>().lambda()
                .eq(ComActQuestnaireDO::getState,ComActQuestnaireDO.state.dyz).eq(ComActQuestnaireDO::getIsHide,0)
                .ge(ComActQuestnaireDO::getEndTime,nowDate));
        questnaireList.forEach(questnaire -> {
            questnaire.setState(ComActQuestnaireDO.state.yjs);
            questnaireDAO.updateById(questnaire);
        });
        return R.ok();
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireUserAnswerServiceImpl.java
New file
@@ -0,0 +1,19 @@
package com.panzhihua.service_community.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.panzhihua.service_community.dao.ComActQuestnaireUserAnswerMapper;
import com.panzhihua.service_community.model.dos.ComActQuestnaireUserAnswerDO;
import com.panzhihua.service_community.service.ComActQuestnaireUserAnswerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
 * @auther lyq
 * @create 2021-08-17 17:42:06
 * @describe 问卷调查用户答题记录服务实现类
 */
@Slf4j
@Service
public class ComActQuestnaireUserAnswerServiceImpl extends ServiceImpl<ComActQuestnaireUserAnswerMapper, ComActQuestnaireUserAnswerDO> implements ComActQuestnaireUserAnswerService {
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActQuestnaireDOMapper.xml
New file
@@ -0,0 +1,212 @@
<?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.ComActQuestnaireDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActQuestnaireDO">
        <id column="id" property="id" />
        <result column="create_by" property="createBy" />
        <result column="community_id" property="communityId" />
        <result column="create_at" property="createAt" />
        <result column="update_by" property="updateBy" />
        <result column="update_at" property="updateAt" />
        <result column="for_masses" property="forMasses" />
        <result column="for_party" property="forParty" />
        <result column="for_volunteer" property="forVolunteer" />
        <result column="title" property="title" />
        <result column="que_describe" property="queDescribe" />
        <result column="state" property="state" />
        <result column="join_count" property="joinCount" />
        <result column="is_hide" property="isHide" />
        <result column="project_key" property="projectKey" />
        <result column="start_time" property="startTime" />
        <result column="end_time" property="endTime" />
        <result column="remark" property="remark" />
        <result column="is_cover" property="isCover" />
        <result column="is_force" property="isForce" />
        <result column="adver_position_popup" property="adverPositionPopup" />
        <result column="adver_position_top" property="adverPositionTop" />
        <result column="adver_position_application" property="adverPositionApplication" />
        <result column="count" property="count" />
        <result column="view_num" property="viewNum" />
        <result column="publish_time" property="publishTime" />
        <result column="json_object" property="jsonObject" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        create_by, id, community_id, create_at, update_by, update_at, for_masses, for_party, for_volunteer, title, que_describe, state, join_count, is_hide, project_key, start_time, end_time, remark, is_cover, is_force, adver_position_popup, adver_position_top, adver_position_application, count, view_num, publish_time, json_object
    </sql>
    <select id="getAdvPopupCount" resultType="integer">
        SELECT
            count( id )
        FROM
            com_act_questnaire
        WHERE
            adver_position_popup = 1
            and community_id = #{communityId}
            AND (
                #{startTime} BETWEEN start_time AND end_time OR
                #{endTime} BETWEEN start_time AND end_time OR
                start_time BETWEEN #{startTime} AND #{endTime}  OR
                end_time   BETWEEN #{startTime} AND #{endTime}
            )
            <if test="id != null">
                AND id != #{id}
            </if>
    </select>
    <delete id="deleteQuesSubAll">
        delete from com_act_questnaire_sub where que_Id = #{queId};
        delete from com_act_questnaire_sub_selection where que_Id = #{queId};
    </delete>
    <select id="getQuesDetailAdmin" resultType="com.panzhihua.common.model.vos.community.questnaire.QuestnaireDetailAdminVO">
        SELECT
            id,
            community_id,
            create_at,
            for_masses,
            for_party,
            for_volunteer,
            title,
            state,
            join_count,
            start_time,
            end_time,
            remark,
            is_cover,
            is_force,
            adver_position_top,
            adver_position_popup,
            adver_position_application,
            count,
            view_num,
            publish_time,
            json_object
        FROM
            com_act_questnaire
            where id = #{queId}
    </select>
    <select id="getQuesDetail" resultType="com.panzhihua.common.model.vos.community.questnaire.QuestnaireDetailAdminVO">
        SELECT
            caq.id,
            caq.community_id,
            caq.create_at,
            caq.for_masses,
            caq.for_party,
            caq.for_volunteer,
            caq.title,
            caq.state,
            caq.join_count,
            caq.start_time,
            caq.end_time,
            caq.remark,
            caq.is_cover,
            caq.is_force,
            caq.adver_position_top,
            caq.adver_position_popup,
            caq.adver_position_application,
            caq.count,
            caq.view_num,
            caq.publish_time,
            IFNULL(caqua.json_object,caq.json_object) as json_object
        FROM
            com_act_questnaire as caq
            left join com_act_questnaire_user_answer as caqua on caqua.questnaire_id = caq.id and caqua.user_id = #{userId}
            where caq.id = #{questId}
    </select>
    <select id="getStatisticsSummaryAdmin" parameterType="com.panzhihua.common.model.dtos.community.questnaire.StatisticsSummaryDTO"
            resultType="com.panzhihua.common.model.vos.community.questnaire.QuestnaireStatisticsSummaryAdminVO">
        SELECT
            caqs.content AS `subject`,
            caqss.content as `option`,(
            SELECT
                count( id )
            FROM
                com_act_questnaire_answer_content
            WHERE
                sub_id = caqss.que_sub_id
                AND selection_id = caqss.id
            ) AS count,
            (select count(id) from com_act_questnaire_answer_content where sub_id = caqss.que_sub_id) as allCount
        FROM
            com_act_questnaire_sub_selection AS caqss
            LEFT JOIN com_act_questnaire_sub AS caqs ON caqs.id = caqss.que_sub_id
        WHERE
            caqss.que_Id = #{summaryDTO.questId}
        order by caqss.create_at asc
    </select>
    <select id="getStatisticsSummaryExcelAdmin" resultType="com.panzhihua.common.model.vos.community.questnaire.QuestnaireStatisticsSummaryExcelAdminVO">
        SELECT
            caqs.content AS `subject`,
            caqss.content as `option`,(
            SELECT
                count( id )
            FROM
                com_act_questnaire_answer_content
            WHERE
                sub_id = caqss.que_sub_id
                AND selection_id = caqss.id
            ) AS count,
            (select count(id) from com_act_questnaire_answer_content where sub_id = caqss.que_sub_id) as allCount
        FROM
            com_act_questnaire_sub_selection AS caqss
            LEFT JOIN com_act_questnaire_sub AS caqs ON caqs.id = caqss.que_sub_id
        WHERE
            caqss.que_Id = #{questId}
        order by caqss.create_at asc
    </select>
    <select id="statisticsSummaryHeader" resultType="com.panzhihua.common.model.vos.community.questnaire.QuestnaireStatisticsSummaryHeaderAdminVO">
        SELECT
            count( caqua.id ) AS volunteerCount,
            (
            SELECT
                count( id )
            FROM
                com_act_questnaire_user_answer AS caqua
                LEFT JOIN sys_user AS su ON su.user_id = caqua.user_id
            WHERE
                su.is_partymember = 1
                AND caqua.questnaire_id = #{questId}
            ) AS partymemberCount,
            ( SELECT count( id ) FROM com_act_questnaire_user_answer WHERE questnaire_id = #{questId} ) AS allCount,(
            SELECT
                view_num
            FROM
                com_act_questnaire
            WHERE
                id = #{questId}
            ) AS viewNum,
            ( SELECT count( id ) FROM com_act_questnaire_user_answer WHERE questnaire_id = #{questId} AND create_at BETWEEN DATE_FORMAT( CURDATE(), '%Y-%m-%d %H:%i:%s' ) AND NOW() ) AS todayCount,
            (
            SELECT
                count( user_id )
            FROM
                sys_user AS su
            WHERE
                is_volunteer = 1
            AND user_id NOT IN ( SELECT user_id FROM com_act_questnaire_user_answer WHERE questnaire_id = #{questId} )) AS noVolunteerCount,
            (
            SELECT
                count( user_id )
            FROM
                sys_user AS su
            WHERE
                is_partymember = 1
            AND user_id NOT IN ( SELECT user_id FROM com_act_questnaire_user_answer WHERE questnaire_id = #{questId} )) AS noPartymemberCount
        FROM
            com_act_questnaire_user_answer AS caqua
            LEFT JOIN com_act_questnaire AS caq ON caq.id = caqua.questnaire_id
            LEFT JOIN sys_user AS su ON su.user_id = caqua.user_id
        WHERE
            su.is_volunteer = 1
            AND caqua.questnaire_id = #{questId}
    </select>
</mapper>
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActQuestnaireUserAnswerDOMapper.xml
New file
@@ -0,0 +1,19 @@
<?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.ComActQuestnaireUserAnswerMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComActQuestnaireUserAnswerDO">
        <id column="id" property="id" />
        <result column="questnaire_id" property="questnaireId" />
        <result column="user_id" property="userId" />
        <result column="create_at" property="createAt" />
        <result column="json_object" property="jsonObject" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, questnaire_id, user_id, create_at, json_object
    </sql>
</mapper>
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -609,7 +609,7 @@
            //删除用户信息缓存
            String userKey = UserConstants.LOGIN_USER_INFO + loginUserInfoVO.getUserId();
            stringRedisTemplate.delete(userKey);
            return R.ok();
            return R.ok(sysUserDO);
        }
        return R.fail();
    }
springcloud_k8s_panzhihuazhihuishequ/timejob/src/main/java/com/panzhihua/timejob/jobhandler/CommunityJobHandler.java
@@ -167,4 +167,15 @@
        log.info("执行结果【{}】",r.toString());
        return ReturnT.SUCCESS;
    }
    /**
     * 定时任务检测待发布,调研中的问卷调查状态
     */
    @XxlJob("timedTaskQuestionnaireJobHandler")
    public ReturnT<String> timedTaskQuestionnaireJobHandler(String param){
        log.info("定时任务检测待发布,调研中的问卷调查状态");
        R r=communityService.timedTaskQuestionnaire();
        log.info("执行结果【{}】",r.toString());
        return ReturnT.SUCCESS;
    }
}