package com.panzhihua.service_community.service.impl;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.google.common.collect.Lists;
|
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.ComActQuestnaireAnswerContentVO;
|
import com.panzhihua.common.model.vos.community.ComActQuestnaireSubSelectionVO;
|
import com.panzhihua.common.model.vos.community.ComActQuestnaireSubVO;
|
import com.panzhihua.common.model.vos.community.ComActQuestnaireVO;
|
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;
|
|
/**
|
* @Author: llming
|
* @Description:
|
*/
|
@Slf4j
|
@Service
|
public class ComActQuestnaireServiceImpl implements ComActQuestnaireService {
|
@Resource
|
ComActQuestnaireDAO questnaireDAO;
|
@Resource
|
ComActQuestnaireSubDAO questnaireSubDAO;
|
@Resource
|
ComActDynUserDAO userDAO;
|
@Resource
|
ComActQuestnaireSubSelectionDAO questnaireSubSelectionDAO;
|
@Resource
|
ComActQuestnaireAnswerContentDAO questnaireAnswerContentDAO;
|
@Resource
|
ComActQuestnaireSubServiceImpl questnaireSubService;
|
@Resource
|
ComActQuestnaireSubSelectionServiceImpl subSelectionService;
|
@Resource
|
ComActQuestnaireAnswerContentServiceImpl answerContentService;
|
@Resource
|
UserService userService;
|
@Resource
|
private ComActQuestnaireUserAnswerMapper comActQuestnaireUserAnswerMapper;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
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();
|
Date nowDate = new Date();
|
BeanUtils.copyProperties(questnaireVO, comActQuestnaireDO);
|
comActQuestnaireDO.setState(ComActQuestnaireDO.state.dfb);
|
comActQuestnaireDO.setTitle(questnaireVO.getTitle());
|
comActQuestnaireDO.setJoinCount(0);
|
comActQuestnaireDO.setCreateBy(userId);
|
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(), 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 (!questnaiteSubVOS.isEmpty()) {
|
questnaiteSubVOS.forEach(sub -> {
|
ComActQuestnaireSubDO comActQuestnaireSubDO = new ComActQuestnaireSubDO();
|
comActQuestnaireSubDO.setType(sub.getType());
|
comActQuestnaireSubDO.setContent(sub.getLabel());
|
comActQuestnaireSubDO.setSort(sub.getSort());
|
comActQuestnaireSubDO.setQueId(comActQuestnaireDO.getId());
|
comActQuestnaireSubDO.setCreateBy(userId);
|
comActQuestnaireSubDO.setKey(sub.getKey());
|
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.setContent(subSelect.getLabel());
|
subSelectionDO.setQueId(comActQuestnaireDO.getId());
|
subSelectionDO.setCreateBy(userId);
|
subSelectionDO.setType(subSelect.getType());
|
subSelectionDO.setKey(subSelect.getKey());
|
subSelectionDO.setUrl(subSelect.getUrl());
|
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("首页应用,");
|
}
|
if (vo.getIsCover().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(), QuestnaiteSubVO.class);
|
if (!questnaiteSubVOS.isEmpty()) {
|
count = questnaiteSubVOS.size();
|
}
|
questnaireDO.setCount(count);
|
questnaireDO.setJsonObject(questnaireVO.getJsonObject());
|
questnaireDAO.updateById(questnaireDO);
|
// 删除原调查问卷题目以及选项,重新进行新增
|
questnaireDAO.deleteQuesSubAll(queId);
|
questnaireDAO.deleteQuesSubAll2(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);
|
}
|
}
|
subSelectionService.saveBatch(subSelectionList);
|
});
|
}
|
return R.ok();
|
}
|
|
@Override
|
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("未查询到调查问卷记录");
|
}
|
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);
|
questDO.setUpdateAt(new Date());
|
if (questnaireDAO.updateById(questDO) > 0) {
|
return R.ok();
|
} else {
|
return R.fail();
|
}
|
}
|
|
@Override
|
public R deleteQuestnaire(Long questId, Long userId) {
|
ComActQuestnaireDO queDO = questnaireDAO.selectById(questId);
|
if (queDO == null) {
|
return R.fail("未查询到调查问卷记录");
|
}
|
// if (!queDO.getState().equals(ComActQuestnaireDO.state.dfb) ) {
|
|
// return R.fail("该调查问卷不是待发布状态,不可删除");
|
if (queDO.getState().equals(ComActQuestnaireDO.state.dyz) ) {
|
return R.fail("该调查问卷不是待发布状态或已结束状态,不可删除");
|
}
|
queDO.setUpdateBy(userId);
|
queDO.setUpdateAt(new Date());
|
queDO.setIsHide(1);
|
if (questnaireDAO.updateById(queDO) > 0) {
|
return R.ok();
|
} else {
|
return R.fail();
|
}
|
}
|
|
@Override
|
public R statQuestnaire(Long questId) {
|
ComActQuestnaireDO comActQuestnaireDO = questnaireDAO.selectOne(new QueryWrapper<ComActQuestnaireDO>().lambda()
|
.eq(ComActQuestnaireDO::getId, questId).eq(ComActQuestnaireDO::getIsHide, 0));
|
|
if (comActQuestnaireDO == null) {
|
return R.fail("问卷已删除!");
|
}
|
|
QuestnaireAnswerStatVO usersAnswerStatVO = new QuestnaireAnswerStatVO();
|
// 问卷信息
|
ComActQuestnaireVO comActQuestnaireVO = new ComActQuestnaireVO();
|
BeanUtils.copyProperties(comActQuestnaireDO, comActQuestnaireVO);
|
usersAnswerStatVO.setQuestnaire(comActQuestnaireVO);
|
|
// 问卷题目列表
|
List<ComActQuestnaireSubDO> comActQuestnaireSubDOList = questnaireSubDAO.selectList(
|
new QueryWrapper<ComActQuestnaireSubDO>().lambda().eq(ComActQuestnaireSubDO::getQueId, questId));
|
// 题目统计信息
|
List<UserSubAnswerSelectionStatVO> usearSubAnswerSelectionStatVOList =
|
questnaireAnswerContentDAO.selectQuestnaireStat(questId);
|
|
List<UsersSubAnswerStatVO> usersSubAnswerStatVOList = new ArrayList<>();
|
|
comActQuestnaireSubDOList.forEach(comActQuestnaireSubDO -> {
|
UsersSubAnswerStatVO usersSubAnswerStatVO = new UsersSubAnswerStatVO();
|
|
ComActQuestnaireSubVO comActQuestnaireSubVO = new ComActQuestnaireSubVO();
|
BeanUtils.copyProperties(comActQuestnaireSubDO, comActQuestnaireSubVO);
|
usersSubAnswerStatVO.setQuestSubVO(comActQuestnaireSubVO);
|
|
List<UserSubAnswerSelectionStatVO> userSubAnswerSelectionStatVOList = new ArrayList<>();
|
usersSubAnswerStatVO.setTotal(0);
|
|
usearSubAnswerSelectionStatVOList.forEach(stat -> {
|
if (stat.getSubId().equals(comActQuestnaireSubDO.getId()) && stat.getTotal() > 0) {
|
userSubAnswerSelectionStatVOList.add(stat);
|
}
|
});
|
usersSubAnswerStatVO.setUsersAnswer(userSubAnswerSelectionStatVOList);
|
Integer count = questnaireAnswerContentDAO
|
.selectCount(new QueryWrapper<ComActQuestnaireAnswerContentDO>().select(" DISTINCT sub_id, user_id ")
|
.lambda().eq(ComActQuestnaireAnswerContentDO::getSubId, comActQuestnaireSubDO.getId()));
|
usersSubAnswerStatVO.setTotal(count);
|
usersSubAnswerStatVOList.add(usersSubAnswerStatVO);
|
});
|
usersAnswerStatVO.setUsersSubAnswerStat(usersSubAnswerStatVOList);
|
return R.ok(usersAnswerStatVO);
|
}
|
|
@Override
|
public R infoQuestnaire(Long questId) {
|
return answerInfoQuestnaire(null, questId);
|
}
|
|
@Override
|
public R answerInfoQuestnaire(Long userId, Long questId) {
|
ComActQuestnaireDO comActQuestnaireDO = questnaireDAO.selectOne(new QueryWrapper<ComActQuestnaireDO>().lambda()
|
.eq(ComActQuestnaireDO::getId, questId).eq(ComActQuestnaireDO::getIsHide, 0));
|
if (comActQuestnaireDO == null) {
|
return R.fail("问卷不存在!");
|
}
|
|
UsersAnswerVO usersAnswerVO = new UsersAnswerVO();
|
ComActQuestnaireVO comActQuestnaireVO = new ComActQuestnaireVO();
|
BeanUtils.copyProperties(comActQuestnaireDO, comActQuestnaireVO);
|
usersAnswerVO.setQuestnaire(comActQuestnaireVO);
|
|
List<ComActQuestnaireSubDO> list = questnaireSubDAO.selectList(
|
new QueryWrapper<ComActQuestnaireSubDO>().lambda().eq(ComActQuestnaireSubDO::getQueId, questId));
|
list.sort(Comparator.comparing(ComActQuestnaireSubDO::getSort));
|
List<UsersSubAnswerVO> usersSubAnswerVOList = new ArrayList<>();
|
|
list.forEach(comActQuestnaireSubDO -> {
|
UsersSubAnswerVO usersSubAnswerVO = new UsersSubAnswerVO();
|
// 问卷调查题目
|
ComActQuestnaireSubVO comActQuestnaireSubVO = new ComActQuestnaireSubVO();
|
BeanUtils.copyProperties(comActQuestnaireSubDO, comActQuestnaireSubVO);
|
usersSubAnswerVO.setQuestSubVO(comActQuestnaireSubVO);
|
|
// 问卷调查题目-选项
|
Long subId = comActQuestnaireSubDO.getId();
|
List<ComActQuestnaireSubSelectionDO> comActQuestnaireSubSelectionDOs =
|
questnaireSubSelectionDAO.selectList(new QueryWrapper<ComActQuestnaireSubSelectionDO>().lambda()
|
.eq(ComActQuestnaireSubSelectionDO::getQueSubId, subId));
|
|
List<ComActQuestnaireSubSelectionVO> comActQuestnaireSubSelectionVOs = new ArrayList<>();
|
comActQuestnaireSubSelectionDOs.forEach(comActQuestnaireSubSelectionDO -> {
|
ComActQuestnaireSubSelectionVO comActQuestnaireSubSelectionVO = new ComActQuestnaireSubSelectionVO();
|
BeanUtils.copyProperties(comActQuestnaireSubSelectionDO, comActQuestnaireSubSelectionVO);
|
comActQuestnaireSubSelectionVOs.add(comActQuestnaireSubSelectionVO);
|
});
|
usersSubAnswerVO.setQuestSelectionList(comActQuestnaireSubSelectionVOs);
|
// 用户回答
|
if (userId != null) {
|
List<ComActQuestnaireAnswerContentDO> questnaireAnswerContentDOList =
|
questnaireAnswerContentDAO.selectList(new QueryWrapper<ComActQuestnaireAnswerContentDO>().lambda()
|
.eq(ComActQuestnaireAnswerContentDO::getUserId, userId)
|
.eq(ComActQuestnaireAnswerContentDO::getSubId, subId));
|
|
List<ComActQuestnaireAnswerContentVO> questnaireAnswerContentVOList = new ArrayList<>();
|
questnaireAnswerContentDOList.forEach(questnaireAnswerContentDO -> {
|
ComActQuestnaireAnswerContentVO comActQuestnaireSubSelectionVO =
|
new ComActQuestnaireAnswerContentVO();
|
BeanUtils.copyProperties(questnaireAnswerContentDO, comActQuestnaireSubSelectionVO);
|
questnaireAnswerContentVOList.add(comActQuestnaireSubSelectionVO);
|
});
|
|
usersSubAnswerVO.setUsersAnswer(questnaireAnswerContentVOList);
|
}
|
usersSubAnswerVOList.add(usersSubAnswerVO);
|
});
|
usersAnswerVO.setUsersSubAnswer(usersSubAnswerVOList);
|
|
return R.ok(usersAnswerVO);
|
}
|
|
@Override
|
public R answerResultList(Long questId) {
|
QuestnaireAnswersDTO questnaireAnswersDTO = new QuestnaireAnswersDTO();
|
/**
|
* 查询题目
|
*/
|
List<ComActQuestnaireSubDO> list = questnaireSubDAO.selectList(
|
new QueryWrapper<ComActQuestnaireSubDO>().lambda()
|
.eq(ComActQuestnaireSubDO::getQueId, questId).orderByAsc(ComActQuestnaireSubDO::getCreateAt));
|
List<ComActQuestnaireSubVO> listSubVo = new ArrayList<>();
|
list.forEach(subDo -> {
|
if(!subDo.getType().equals(ComActQuestnaireSubDO.type.describe)){
|
ComActQuestnaireSubVO comActQuestnaireSubVO = new ComActQuestnaireSubVO();
|
BeanUtils.copyProperties(subDo, comActQuestnaireSubVO);
|
listSubVo.add(comActQuestnaireSubVO);
|
}
|
});
|
questnaireAnswersDTO.setSubs(listSubVo);
|
/**
|
* 查询用户回答
|
*/
|
List<ComActQuestnaireAnswerContentVO> questnaireAnswerContentDOList =
|
questnaireAnswerContentDAO.selectListByQuestnaire(questId);
|
questnaireAnswersDTO.setAnswers(questnaireAnswerContentDOList);
|
|
return R.ok(questnaireAnswersDTO);
|
}
|
|
@Override
|
public R qaQeustDetails(PageQuestnaireSubDetailsDTO pageQuestnaireSubDetailsDTO) {
|
Page userPage = new Page(pageQuestnaireSubDetailsDTO.getPageNum(), pageQuestnaireSubDetailsDTO.getPageSize());
|
IPage<ComActQuestnaireAnswerContentVO> doPager =
|
questnaireAnswerContentDAO.selectVoByPage(userPage, pageQuestnaireSubDetailsDTO);
|
return R.ok(doPager);
|
}
|
|
@Override
|
public R pageQuestnaireAnswer(PageQuestnaireAnswerDTO pageQuestnaireAnswerDTO) {
|
if (pageQuestnaireAnswerDTO.getPageNum() == null || pageQuestnaireAnswerDTO.getPageNum().longValue() == 0) {
|
pageQuestnaireAnswerDTO.setPageNum(1L);
|
}
|
if (pageQuestnaireAnswerDTO.getPageSize() == null || pageQuestnaireAnswerDTO.getPageSize().longValue() == 0) {
|
pageQuestnaireAnswerDTO.setPageSize(10L);
|
}
|
Page userPage = new Page(pageQuestnaireAnswerDTO.getPageNum(), pageQuestnaireAnswerDTO.getPageSize());
|
IPage<ComActQuestnaireAnswerContentVO> doPager =
|
questnaireAnswerContentDAO.selectAnswersByPage(userPage, pageQuestnaireAnswerDTO);
|
return R.ok(doPager);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R usersAnsweQuestnaire(UsersAnswerQuestnaireVO answerQuestnaireVO) {
|
if (answerQuestnaireVO == null || answerQuestnaireVO.getJsonObject() == null) {
|
return R.fail("数据为空!");
|
}
|
Long userId = answerQuestnaireVO.getUserId();
|
Long questId = answerQuestnaireVO.getQuestId();
|
Date nowDate = new Date();
|
|
ComActQuestnaireDO questnaireDO = questnaireDAO.selectById(questId);
|
if (questnaireDO == null) {
|
return R.fail("调查问卷不存在!");
|
}
|
|
if (!questnaireDO.getState().equals(ComActQuestnaireDO.state.dyz)) {
|
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("您已填写该问卷,不可重复提交");
|
}
|
|
// 查询填报人员信息
|
R<LoginUserInfoVO> userResult = userService.getUserInfoByUserId(userId + "");
|
if (!R.isOk(userResult)) {
|
log.error("填写问卷调查失败,未查询到用户信息");
|
return R.fail("填写失败");
|
}
|
LoginUserInfoVO userInfo = userResult.getData();
|
if (questnaireDO.getForParty().equals(ComActQuestnaireDO.isOk.yes)) {
|
if (!userInfo.getIsPartymember().equals(1)) {
|
return R.fail("您还未进行党员认证,无法填报");
|
}
|
}
|
if (questnaireDO.getForVolunteer().equals(ComActQuestnaireDO.isOk.yes)) {
|
if (!userInfo.getIsVolunteer().equals(1)) {
|
return R.fail("您还未进行志愿者认证,无法填报");
|
}
|
}
|
|
List<ComActQuestnaireAnswerContentDO> answerContentList = new ArrayList<>();
|
|
// 解析用户上传json数据
|
List<QuestnaiteSubVO> questnaiteSubVOS =
|
JSON.parseArray(answerQuestnaireVO.getJsonObject(), 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) || questnaiteSub.getType().equals(QuestnaiteSubVO.type.imgselect)) {
|
// 单选题处理
|
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 {
|
// 问答题处理
|
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);
|
}
|
}
|
}
|
// 新增用户填写的答卷
|
if (!answerContentList.isEmpty()) {
|
// 更新回答用户数量
|
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);
|
|
answerContentList.forEach(answerContent -> {
|
answerContent.setAnswerId(userAnswerDO.getId());
|
});
|
answerContentService.saveBatch(answerContentList);
|
|
}
|
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);
|
}
|
|
/**
|
* 问卷调查统计汇总
|
*
|
* @param summaryDTO
|
* 请求参数
|
* @return 统计汇总
|
*/
|
@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(summaryAdminList);
|
}
|
|
/**
|
* 问卷调查统计汇总导出数据查询
|
*
|
* @param questId
|
* 调查问卷id
|
* @return 调查统计汇总导出数据
|
*/
|
@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);
|
}
|
|
/**
|
* 问卷调查统计汇总表头统计
|
*
|
* @param questId
|
* 调查问卷id
|
* @return 问卷调查统计汇总表头统计数据
|
*/
|
@Override
|
public R statisticsSummaryHeader(Long questId, Long communityId) {
|
QuestnaireStatisticsSummaryHeaderAdminVO summaryHeaderAdminVO =
|
this.questnaireDAO.statisticsSummaryHeader(questId, communityId);
|
if (summaryHeaderAdminVO != null) {
|
if (!summaryHeaderAdminVO.getUserCount().equals(0)) {
|
BigDecimal nub1 = BigDecimal.valueOf(summaryHeaderAdminVO.getAllCount());
|
BigDecimal nub2 = BigDecimal.valueOf(summaryHeaderAdminVO.getUserCount());
|
BigDecimal result = nub1.divide(nub2, 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
|
summaryHeaderAdminVO.setTag(result);
|
}
|
}
|
return R.ok(summaryHeaderAdminVO);
|
}
|
|
/**
|
* 定时任务检测待发布,调研中的问卷调查状态
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
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).le(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).le(ComActQuestnaireDO::getEndTime, nowDate));
|
questnaireList.forEach(questnaire -> {
|
questnaire.setState(ComActQuestnaireDO.state.yjs);
|
questnaireDAO.updateById(questnaire);
|
});
|
return R.ok();
|
}
|
|
/**
|
* 小程序-新增问卷调查浏览数量
|
*
|
* @param questId
|
* 问卷调查id
|
* @return 增加结果
|
*/
|
@Override
|
public R addQuestnaireView(Long questId) {
|
ComActQuestnaireDO questnaireDO = questnaireDAO.selectById(questId);
|
if (questnaireDO != null) {
|
questnaireDO.setViewNum(questnaireDO.getViewNum() + 1);
|
questnaireDAO.updateById(questnaireDO);
|
}
|
return R.ok();
|
}
|
|
/**
|
* 小程序-用户弹窗添加不在提醒接口
|
*
|
* @param questId
|
* 问卷id
|
* @param userId
|
* 用户id
|
* @return 添加结果
|
*/
|
@Override
|
public R addNoNotice(Long questId, Long userId) {
|
questnaireDAO.addNoNotice(questId, userId);
|
return R.ok();
|
}
|
|
}
|