liujie
2025-12-29 5ca4dbed191c98f121b9d493d943e72ab8a3645e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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();
    }
 
}