package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.SaveTQuestionnaireDto; import com.ruoyi.system.model.*; import com.ruoyi.system.query.PartyBuildingListQuery; import com.ruoyi.system.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; @Slf4j @RestController @RequestMapping("/questionnaire") @Api(tags = "问卷调查") public class QuestionnaireController { private final TQuestionnaireService questionnaireService; private final TQuestionnaireRecordService questionnaireRecordService; private final TokenService tokenService; private final TQuestionnaireStemService questionnaireStemService; private final TQuestionnaireStemOptionService questionnaireStemOptionService; private final TQuestionnaireStemBriefAnswerService questionnaireStemBriefAnswerService; public QuestionnaireController(TQuestionnaireService questionnaireService, TQuestionnaireRecordService questionnaireRecordService, TokenService tokenService, TQuestionnaireStemService questionnaireStemService, TQuestionnaireStemOptionService questionnaireStemOptionService, TQuestionnaireStemBriefAnswerService questionnaireStemBriefAnswerService) { this.questionnaireService = questionnaireService; this.questionnaireRecordService = questionnaireRecordService; this.tokenService = tokenService; this.questionnaireStemService = questionnaireStemService; this.questionnaireStemOptionService = questionnaireStemOptionService; this.questionnaireStemBriefAnswerService = questionnaireStemBriefAnswerService; } @ApiOperation(value = "问卷调查--列表", response = TQuestionnaire.class) @GetMapping(value = "/getTQuestionnaireList") public R> getTQuestionnaireList() { String userId = null; try { userId = tokenService.getLoginUserApplet().getUserId(); } catch (Exception e) { } List list = questionnaireService.list(new LambdaQueryWrapper().eq(TQuestionnaire::getStatus, 2)); List questionnaireRecordList = questionnaireRecordService.list(); for (TQuestionnaire tQuestionnaire : list) { List userIds = questionnaireRecordList.stream().filter(questionnaireRecord -> questionnaireRecord.getQuestionnaireId().equals(tQuestionnaire.getId())).map(TQuestionnaireRecord::getAppUserId).collect(Collectors.toList()); tQuestionnaire.setTotalNum(userIds.size()); if(userId!=null && userIds.contains(userId)){ tQuestionnaire.setState(2); } } return R.ok(list); } @ApiOperation(value = "问卷调查--获取题干和选项", response = TQuestionnaireStem.class) @GetMapping(value = "/getTQuestionnaireStemList/{id}") public R> getTQuestionnaireStemList(@PathVariable String id) { List list = questionnaireStemService.list(new LambdaQueryWrapper().eq(TQuestionnaireStem::getQuestionnaireId, id)); List questionnaireStemOptions = questionnaireStemOptionService.list(new LambdaQueryWrapper().in(TQuestionnaireStemOption::getStemId, list.stream().map(TQuestionnaireStem::getId).collect(Collectors.toList()))); for (TQuestionnaireStem tQuestionnaireStem : list) { tQuestionnaireStem.setOptions(questionnaireStemOptions.stream().filter(questionnaireStemOption -> questionnaireStemOption.getStemId().equals(tQuestionnaireStem.getId())).collect(Collectors.toList())); } return R.ok(list); } @ApiOperation(value = "问卷调查--保存") @PostMapping(value = "/saveTQuestionnaire") public R saveTQuestionnaire(@RequestBody SaveTQuestionnaireDto dto) { String userId = tokenService.getLoginUserApplet().getUserId(); TQuestionnaire questionnaire = questionnaireService.getById(dto.getQuestionnaireId()); if(questionnaire.getStatus()==3){ return R.fail("问卷已结束"); } if(questionnaire.getStatus()==1){ return R.fail("问卷未开始"); } long count = questionnaireRecordService.count(new LambdaQueryWrapper().eq(TQuestionnaireRecord::getQuestionnaireId, dto.getQuestionnaireId()).eq(TQuestionnaireRecord::getAppUserId, userId)); if (count > 0) { return R.fail("您已作答过此问卷"); } List tQuestionnaireStemOptionIds = dto.getTQuestionnaireStemOptionIds(); if(!tQuestionnaireStemOptionIds.isEmpty()){ List questionnaireStemOptions = questionnaireStemOptionService.listByIds(tQuestionnaireStemOptionIds); for (TQuestionnaireStemOption questionnaireStemOption : questionnaireStemOptions) { String answerValue = questionnaireStemOption.getAnswerValue(); if(StringUtils.hasLength(answerValue)){ answerValue = answerValue+","+userId; }else{ answerValue = userId; } questionnaireStemOption.setAnswerValue(answerValue); } questionnaireStemOptionService.updateBatchById(questionnaireStemOptions); } List tQuestionnaireStemBriefAnswers = dto.getTQuestionnaireStemBriefAnswers(); if(!tQuestionnaireStemBriefAnswers.isEmpty()){ tQuestionnaireStemBriefAnswers.forEach(e->e.setAppUserId(userId)); questionnaireStemBriefAnswerService.saveBatch(tQuestionnaireStemBriefAnswers); } TQuestionnaireRecord tQuestionnaireRecord = new TQuestionnaireRecord(); tQuestionnaireRecord.setAppUserId(userId); tQuestionnaireRecord.setQuestionnaireId(dto.getQuestionnaireId()); questionnaireRecordService.save(tQuestionnaireRecord); return R.ok(); } }