LearnStatController.java 17 KB
package com.jevon.controller;

import com.jevon.model.Analyse;
import com.jevon.model.AnalyseDetail;
import com.jevon.model.Student;
import com.jevon.service.*;
import com.jevon.vo.BaseVo;
import com.jevon.vo.req.GetLearnReqVo;
import com.jevon.wordDTO.second.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author chen
 * @version 1.0
 * @date 2019/10/18 0018 15:54
 */
@RestController
@RequestMapping(value = "/getLearn")
@Api(value = "学情分析")
public class LearnStatController {
    @Autowired
    AnalyseService analyseService;

    @Autowired
    DimensionalService dimensionalService;

    @Autowired
    AnalyseDimensionalService analyseDimensionalService;

    @Autowired
    AnalyseDetailService analyseDetailService;

    @Autowired
    StudentDetailService studentDetailService;

    @Autowired
    StudentService studentService;

    @ApiOperation("getForm2_1_1")
    @RequestMapping(value = "getForm2_1_1", method = RequestMethod.POST)
    public Form1RepVo getForm2_1_1(@RequestBody GetLearnReqVo getLearnReqVo){
        Form1RepVo form1RepVo = new Form1RepVo();
        //2.1表
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        //分数段
        Double maxScore = analyse.getMaxScore();
        Map<String,String> segmentMap = new HashMap<>();
        segmentMap.put("A(优秀)",maxScore*0.85 + "~" + maxScore+"分");
        segmentMap.put("B(良好)",maxScore*0.7 + "~" + (maxScore*0.85-1f)+"分");
        segmentMap.put("C(及格)",maxScore*0.7 + "~" + (maxScore*0.7-1f)+"分");
        segmentMap.put("D(不及格)",0 + "~" + (maxScore*0.6-1f)+"分");
        form1RepVo.setMap(segmentMap);
        List<Student> students = studentService.selectBySchoolName(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName());
        double sum = new Double(students.size());
        int a = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),maxScore*0.85,maxScore+1f);
        int b = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),maxScore*0.7,(maxScore*0.85));
        int c = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),maxScore*0.6,(maxScore*0.7));
        int d = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),maxScore*0,(maxScore*0.6));
        List<Form1> form1List = new ArrayList<>();
        Form1 formA = new Form1();
        formA.setLevel("A");
        formA.setNumber(a);
        formA.setProp(a/sum*100);
        Form1 formB = new Form1();
        formB.setLevel("B");
        formB.setNumber(b);
        formB.setProp(b/sum*100);
        Form1 formC = new Form1();
        formC.setLevel("C");
        formC.setNumber(c);
        formC.setProp(c/sum*100);
        Form1 formD = new Form1();
        formD.setLevel("D");
        formD.setNumber(d);
        formD.setProp(d/sum*100);
        form1List.add(formA);
        form1List.add(formB);
        form1List.add(formC);
        form1List.add(formD);
        form1RepVo.setList(form1List);
        return form1RepVo;
    }

    @ApiOperation("getForm2_1_2")
    @RequestMapping(value = "getForm2_1_2", method = RequestMethod.POST)
    public List<Form2> getForm2_1_2(@RequestBody GetLearnReqVo getLearnReqVo){
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        List<Student> allStudents = studentService.selectBySchoolName(getLearnReqVo.getAnalyseId(),null);
        List<Student> students = studentService.selectBySchoolName(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName());
        //先算高分段的分数  再去人数
        int highNumber = (int) Math.floor(allStudents.size()*0.27);
        double highScore = allStudents.get(highNumber).getScore();
        int lowNumber = allStudents.size()-highNumber;
        double lowScore = allStudents.get(lowNumber).getScore();
        int highAllCount = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),null,highScore,analyse.getMaxScore()+1f);
        int lowAllCount = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),null,0,lowScore);
        int highCount = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),highScore,analyse.getMaxScore()+1f);
        int lowCount = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),0,lowScore);
        List<Form2> list = new ArrayList<>();
        Form2 form = new Form2();
        form.setName("联盟校");
        form.setStudentNumber(allStudents.size());
        form.setHighNumber(highAllCount);
        form.setLowNumber(lowAllCount);
        list.add(form);
        Form2 form2 = new Form2();
        form2.setName(getLearnReqVo.getSchoolName());
        form2.setStudentNumber(students.size());
        form2.setHighNumber(highCount);
        form2.setLowNumber(lowCount);
        form2.setHighProp(highCount/new Double(highAllCount));
        form2.setLowProp(lowCount/new Double(lowAllCount));
        list.add(form2);
        return list;
    }

    @ApiOperation("getForm2_1_3_2")
    @RequestMapping(value = "getForm2_1_3_2", method = RequestMethod.POST)
    public List<Form2> getForm2_1_3_2(@RequestBody GetLearnReqVo getLearnReqVo){
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        List<Student> allStudents = studentService.selectBySchoolName(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName());
        //先算高分段的分数  再去人数
        int highNumber = (int) Math.floor(allStudents.size()*0.27);
        double highScore = allStudents.get(highNumber).getScore();
        int lowNumber = allStudents.size()-highNumber;
        double lowScore = allStudents.get(lowNumber).getScore();
        int highAllCount = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),highScore,analyse.getMaxScore()+1f);
        int lowAllCount = studentService.selectCountByScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),0,lowScore);
        List<Form2> resultList = new ArrayList<>();
        Form2 form = new Form2();
        form.setName("联盟校");
        form.setStudentNumber(allStudents.size());
        form.setHighNumber(highAllCount);
        form.setLowNumber(lowAllCount);
        resultList.add(form);
        List<String> classNamList = studentService.selectClassNameBySchool(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName());
        for(String className : classNamList){
            List<Student> list = studentService.selectByClassName(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),className);
            int highCount = studentService.selectCountBySchoolScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),className,highScore,analyse.getMaxScore()+1f);
            int lowCount = studentService.selectCountBySchoolScore(getLearnReqVo.getAnalyseId(),getLearnReqVo.getSchoolName(),className,0,lowScore);
            Form2 form2 = new Form2();
            form2.setName(className);
            form2.setStudentNumber(list.size());
            form2.setHighNumber(highCount);
            form2.setLowNumber(lowCount);
            form2.setHighProp(highCount/new Double(highAllCount));
            form2.setLowProp(lowCount/new Double(lowAllCount));
            resultList.add(form2);
        }
        return resultList;
    }

    @ApiOperation("getForm2_1_3")
    @RequestMapping(value = "getForm2_1_3", method = RequestMethod.POST)
    public List<Table1> getForm2_1_3(@RequestBody GetLearnReqVo getLearnReqVo){
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        List<Double> list = new ArrayList<>();
        list.add(Math.ceil(analyse.getMaxScore()));
        list.add(Math.ceil(analyse.getMaxScore()*0.95));
        list.add(Math.ceil(analyse.getMaxScore()*0.9));
        list.add(Math.ceil(analyse.getMaxScore()*0.85));
        list.add(Math.ceil(analyse.getMaxScore()*0.8));
        list.add(Math.ceil(analyse.getMaxScore()*0.75));
        list.add(Math.ceil(analyse.getMaxScore()*0.7));
        list.add(Math.ceil(analyse.getMaxScore()*0.65));
        list.add(Math.ceil(analyse.getMaxScore()*0.6));
        list.add(Math.ceil(analyse.getMaxScore()*0.55));
        list.add(Math.ceil(analyse.getMaxScore()*0.5));
        list.add(Math.ceil(analyse.getMaxScore()*0.45));
        list.add(Math.ceil(analyse.getMaxScore()*0.4));
        list.add(Math.ceil(analyse.getMaxScore()*0.35));
        list.add(Math.ceil(analyse.getMaxScore()*0.3));
        list.add(Math.ceil(analyse.getMaxScore()*0));
        List<Table1> list1 = new ArrayList<>();
        for(int i =0 ; i <list.size() ; i++){
            Table1 table1 = new Table1();
            if(i == 0){
                table1.setScore(list.get(i)+"");
                table1.setNumber(studentService.selectCountByScore(analyse.getId(),getLearnReqVo.getSchoolName(),new Double(list.get(i)),new Double(list.get(i)+1)));
            }else {
                table1.setScore(list.get(i)+"-"+(list.get(i-1)-0.5));
                table1.setNumber(studentService.selectCountByScore(analyse.getId(),getLearnReqVo.getSchoolName(),new Double(list.get(i)),new Double(list.get(i-1))));
            }
            list1.add(table1);
        }
        return list1;
    }

    @ApiOperation("getForm2_2_1")
    @RequestMapping(value = "getForm2_2_1", method = RequestMethod.POST)
    public List<Form3> getForm2_2_1(@RequestBody GetLearnReqVo getLearnReqVo){
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        List<Form3> list = new ArrayList<>();
        Form3 form3 = new Form3();
        form3.setName("联盟校");
        List<Student> allStudents = studentService.selectBySchoolName(analyse.getId(),null);
        form3.setMaxScore(studentService.selectMaxScore(analyse.getId(),null));
        form3.setAverage(studentService.selectAvgScore(analyse.getId(),null));
        form3.setMinScore(studentService.selectMinScore(analyse.getId(),null));
        int a = studentService.selectCountByScore(analyse.getId(),null,analyse.getMaxScore()*0.85,analyse.getMaxScore()+1);
        form3.setApercent(a / new Double(allStudents.size()) * 100);
        int b = studentService.selectCountByScore(analyse.getId(),null,analyse.getMaxScore()*0.7,analyse.getMaxScore()*0.85);
        form3.setBpercent(b / new Double(allStudents.size()) * 100);
        int c = studentService.selectCountByScore(analyse.getId(),null,analyse.getMaxScore()*0.6,analyse.getMaxScore()*0.7);
        form3.setCpercent(c / new Double(allStudents.size()) * 100);
        int d = studentService.selectCountByScore(analyse.getId(),null,analyse.getMaxScore()*0,analyse.getMaxScore()*0.6);
        form3.setDpercent(d / new Double(allStudents.size()) * 100);
        list.add(form3);

        Form3 form = new Form3();
        form.setName("联盟校");
        List<Student> students = studentService.selectBySchoolName(analyse.getId(),getLearnReqVo.getSchoolName());
        form.setMaxScore(studentService.selectMaxScore(analyse.getId(),getLearnReqVo.getSchoolName()));
        form.setAverage(studentService.selectAvgScore(analyse.getId(),getLearnReqVo.getSchoolName()));
        form.setMinScore(studentService.selectMinScore(analyse.getId(),getLearnReqVo.getSchoolName()));
        int a1 = studentService.selectCountByScore(analyse.getId(),getLearnReqVo.getSchoolName(),analyse.getMaxScore()*0.85,analyse.getMaxScore()+1);
        form.setApercent(a1 / new Double(students.size()) * 100);
        int b1 = studentService.selectCountByScore(analyse.getId(),getLearnReqVo.getSchoolName(),analyse.getMaxScore()*0.7,analyse.getMaxScore()*0.85);
        form.setBpercent(b1 / new Double(students.size()) * 100);
        int c1 = studentService.selectCountByScore(analyse.getId(),getLearnReqVo.getSchoolName(),analyse.getMaxScore()*0.6,analyse.getMaxScore()*0.7);
        form.setCpercent(c1 / new Double(students.size()) * 100);
        int d1 = studentService.selectCountByScore(analyse.getId(),getLearnReqVo.getSchoolName(),analyse.getMaxScore()*0,analyse.getMaxScore()*0.6);
        form.setDpercent(d1 / new Double(students.size()) * 100);
        list.add(form);
        return list ;
    }

    @ApiOperation("getForm2_2_2")
    @RequestMapping(value = "getForm2_2_2", method = RequestMethod.POST)
    public List<Form4> getForm2_2_2(@RequestBody GetLearnReqVo getLearnReqVo){
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        List<Form4> list = new ArrayList<>();
        Form4 form4 = new Form4();
        form4.setName("联盟校");
        form4.setModeNumber(studentService.selectModeNumber(analyse.getId(),null));
        form4.setMedianNumber(studentService.selectMedian(analyse.getId(),null));
        form4.setStdev(studentService.selectStdev(analyse.getId(),null));
        form4.setAvgNumber(studentService.selectAvgScore(analyse.getId(),null));
        list.add(form4);
        Form4 form = new Form4();
        form.setName(getLearnReqVo.getSchoolName());
        form.setModeNumber(studentService.selectModeNumber(analyse.getId(),getLearnReqVo.getSchoolName()));
        form.setMedianNumber(studentService.selectMedian(analyse.getId(),getLearnReqVo.getSchoolName()));
        form.setStdev(studentService.selectStdev(analyse.getId(),getLearnReqVo.getSchoolName()));
        form.setAvgNumber(studentService.selectAvgScore(analyse.getId(),getLearnReqVo.getSchoolName()));
        list.add(form);
        return list;
    }

    @ApiOperation("getForm2_2_3")
    @RequestMapping(value = "getForm2_2_3", method = RequestMethod.POST)
    public List<From5> getForm2_2_3(@RequestBody GetLearnReqVo getLearnReqVo){
        List<From5> list = new ArrayList<>();
        Analyse analyse = analyseService.selectById(getLearnReqVo.getAnalyseId());
        List<Student> allStudents = studentService.selectBySchoolName(analyse.getId(),null);
        int allNumber = (int) Math.floor(allStudents.size()*0.27) ;
        List<String> allHighStudent = new ArrayList<>();
        List<String> allLowStudent = new ArrayList<>();
        for (int i = 0; i < allNumber ; i++) {
            allHighStudent.add(allStudents.get(i).getStudentNumber());
        }
        for(int i =allStudents.size()-allNumber ; i < allStudents.size() ; i++){
            allLowStudent.add(allStudents.get(i).getStudentNumber());
        }
        List<Student> students = studentService.selectBySchoolName(analyse.getId(),getLearnReqVo.getSchoolName());
        int number = (int) Math.floor(students.size()*0.27) ;
        List<String> highStudent = new ArrayList<>();
        List<String> lowStudent = new ArrayList<>();
        for (int i = 0; i < number ; i++) {
            highStudent.add(students.get(i).getStudentNumber());
        }
        for(int i =students.size()-number ; i < students.size() ; i++){
            lowStudent.add(students.get(i).getStudentNumber());
        }
        List<AnalyseDetail> analyseDetails = analyseDetailService.selectByAnalyseId(analyse.getId());
        for(AnalyseDetail analyseDetail : analyseDetails){
            From5 from5 = new From5();
            Double allSumScore = studentDetailService.selectSumScore(analyse.getId(),null,analyseDetail.getQuestionNumber());
            Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(),getLearnReqVo.getSchoolName(),analyseDetail.getQuestionNumber());
            from5.setExamNumber(analyseDetail.getQuestionNumber());
            from5.setScore(analyseDetail.getScore());
            from5.setAllRate(allSumScore/new Double(allStudents.size()) / analyseDetail.getScore());
            from5.setSchoolRate(schoolSumScore/new Double(students.size()) / analyseDetail.getScore());
            from5.setAllAvg(allSumScore / new Double(allStudents.size()));
            from5.setSchoolAvg(schoolSumScore / new Double(students.size()));
            int allHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(),null ,analyseDetail.getQuestionNumber(),allHighStudent,analyseDetail.getScore());
            int allLow = studentDetailService.selectTrueByExamNumber(analyse.getId(),null ,analyseDetail.getQuestionNumber(),allLowStudent,analyseDetail.getScore());
            int high = studentDetailService.selectTrueByExamNumber(analyse.getId(),getLearnReqVo.getSchoolName() ,analyseDetail.getQuestionNumber(),highStudent,analyseDetail.getScore());
            int low = studentDetailService.selectTrueByExamNumber(analyse.getId(),getLearnReqVo.getSchoolName() ,analyseDetail.getQuestionNumber(),lowStudent,analyseDetail.getScore());
            from5.setAllDist(new Double(allHigh-allLow)/new Double(allNumber));
            from5.setSchoolDist(new Double(high-low)/new Double(number));
            list.add(from5);
        }
        return list;
    }
}