liujie
2025-12-18 0bf73c537bf3430f3e2dd244dca5a24c69f7725b
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/QuestionnaireController.java
@@ -5,24 +5,17 @@
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.model.TPartyBuilding;
import com.ruoyi.system.model.TQuestionnaire;
import com.ruoyi.system.model.TQuestionnaireStem;
import com.ruoyi.system.model.TQuestionnaireStemOption;
import com.ruoyi.system.dto.SaveTQuestionnaireDto;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.PartyBuildingListQuery;
import com.ruoyi.system.service.TQuestionnaireService;
import com.ruoyi.system.service.TQuestionnaireStemBriefAnswerService;
import com.ruoyi.system.service.TQuestionnaireStemOptionService;
import com.ruoyi.system.service.TQuestionnaireStemService;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@RestController
@@ -31,32 +24,92 @@
public class QuestionnaireController {
    private final TQuestionnaireService questionnaireService;
    private final TQuestionnaireStemService questionnaireStemService;
    private final TQuestionnaireRecordService questionnaireRecordService;
    private final TokenService tokenService;
    private final TQuestionnaireStemService questionnaireStemService;
    private final TQuestionnaireStemOptionService questionnaireStemOptionService;
    private final TQuestionnaireStemBriefAnswerService questionnaireStemBriefAnswerService;
    public QuestionnaireController(TQuestionnaireService questionnaireService, TQuestionnaireStemService questionnaireStemService, TokenService tokenService, TQuestionnaireStemOptionService questionnaireStemOptionService, TQuestionnaireStemBriefAnswerService questionnaireStemBriefAnswerService) {
    public QuestionnaireController(TQuestionnaireService questionnaireService, TQuestionnaireRecordService questionnaireRecordService, TokenService tokenService, TQuestionnaireStemService questionnaireStemService, TQuestionnaireStemOptionService questionnaireStemOptionService, TQuestionnaireStemBriefAnswerService questionnaireStemBriefAnswerService) {
        this.questionnaireService = questionnaireService;
        this.questionnaireStemService = questionnaireStemService;
        this.questionnaireRecordService = questionnaireRecordService;
        this.tokenService = tokenService;
        this.questionnaireStemService = questionnaireStemService;
        this.questionnaireStemOptionService = questionnaireStemOptionService;
        this.questionnaireStemBriefAnswerService = questionnaireStemBriefAnswerService;
    }
    @ApiOperation(value = "问卷调查--列表", response = TQuestionnaire.class)
    @PostMapping(value = "/getTQuestionnaireList")
    @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();
    }
}