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.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<List<TQuestionnaire>> getTQuestionnaireList() {
|
String userId = null;
|
try {
|
userId = tokenService.getLoginUserApplet().getUserId();
|
} catch (Exception e) {
|
}
|
List<TQuestionnaire> list = questionnaireService.list(new LambdaQueryWrapper<TQuestionnaire>().eq(TQuestionnaire::getStatus, 2));
|
List<TQuestionnaireRecord> questionnaireRecordList = questionnaireRecordService.list();
|
for (TQuestionnaire tQuestionnaire : list) {
|
List<String> 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<List<TQuestionnaireStem>> getTQuestionnaireStemList(@PathVariable String id) {
|
List<TQuestionnaireStem> list = questionnaireStemService.list(new LambdaQueryWrapper<TQuestionnaireStem>().eq(TQuestionnaireStem::getQuestionnaireId, id));
|
List<TQuestionnaireStemOption> questionnaireStemOptions = questionnaireStemOptionService.list(new LambdaQueryWrapper<TQuestionnaireStemOption>().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<TQuestionnaire> 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<TQuestionnaireRecord>().eq(TQuestionnaireRecord::getQuestionnaireId, dto.getQuestionnaireId()).eq(TQuestionnaireRecord::getAppUserId, userId));
|
if (count > 0) {
|
return R.fail("您已作答过此问卷");
|
}
|
List<String> tQuestionnaireStemOptionIds = dto.getTQuestionnaireStemOptionIds();
|
if(!tQuestionnaireStemOptionIds.isEmpty()){
|
List<TQuestionnaireStemOption> questionnaireStemOptions = questionnaireStemOptionService.listByIds(tQuestionnaireStemOptionIds);
|
for (TQuestionnaireStemOption questionnaireStemOption : questionnaireStemOptions) {
|
String answerValue = questionnaireStemOption.getAnswerValue();
|
answerValue = answerValue+","+userId;
|
questionnaireStemOption.setAnswerValue(answerValue);
|
}
|
questionnaireStemOptionService.updateBatchById(questionnaireStemOptions);
|
}
|
|
List<TQuestionnaireStemBriefAnswer> 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();
|
}
|
|
}
|