From 62d2377c27bf65a048a7c104b256efcd32ad2319 Mon Sep 17 00:00:00 2001 From: manailin <261030956@qq.com> Date: 星期四, 19 八月 2021 17:53:40 +0800 Subject: [PATCH] Merge branch 'test' of http://gitlab.nhys.cdnhxx.com/root/zhihuishequ into test --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java | 605 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 474 insertions(+), 131 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java index 498e8f2..3e92a2d 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java +++ b/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,248 @@ } @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("用户信息错误"); + + if(!questnaireDO.getState().equals(ComActQuestnaireDO.state.dyz)){ + 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, "您目前所属社区无法填写当前社区的调查问卷,请切换社区后重试"); + + ComActQuestnaireUserAnswerDO oldUserAnswerDO = comActQuestnaireUserAnswerMapper.selectOne(new QueryWrapper<ComActQuestnaireUserAnswerDO>().lambda() + .eq(ComActQuestnaireUserAnswerDO::getQuestnaireId,questId).eq(ComActQuestnaireUserAnswerDO::getUserId,userId)); + if(oldUserAnswerDO != null){ + return R.fail("您已填写该问卷,不可重复提交"); } - 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", "调查问卷题目不存在!"); + + //查询填报人员信息 + 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("您还未进行党员认证,无法填报"); } - BeanUtils.copyProperties(answerContent,answerContentDO); - answerContentDO.setUserId(userId); - answerContentDOList.add(answerContentDO); } - boolean batchAddSuccess = answerContentService.saveBatch(answerContentDOList); - if(batchAddSuccess) { - /** - * 更新回答用户数量 - */ + 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().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); + } + } + } + //新增用户填写的答卷 + 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 + @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) + .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(); + } + + @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(); } + + @Override + public R addNoNotice(Long questId,Long userId){ + questnaireDAO.addNoNotice(questId,userId); + return R.ok(); + } + } -- Gitblit v1.7.1