利用Map解决复杂业务

遍历出题库表的题库名称和题库id,根据题目id即questionBankId获取

分组,即该题库题目总数,该题库题目正确数,该题库已回答题目数。

复制代码
<sqltemplate id="countAnswerdQuestion">
        <![CDATA[
          SELECT
                question_bank_id ,
                (SELECT COUNT(1) FROM edu_question  WHERE question_bank_id = t.question_bank_id) totalCount ,
                (select count(id) from  edu_question_exercise where question_bank_id = t.question_bank_id and answer_status ='1' AND labour_id=:labourId) correctCount,
                COUNT(1) answerdCount
            FROM
                edu_question_exercise t
            WHERE 1=1
            <#if labourId?? && labourId != '' >
                AND labour_id = :labourId
            </#if>

            GROUP BY question_bank_id
        ]]>
    </sqltemplate>
复制代码

利用三个Map分别接收题目总数、题目正确数、已回答题目数

复制代码
public Map getDetails(EduQuestionExercise eduQuestionExercise){
        Map map = new HashMap();

        // 岗位对应的总题库
        List<EduQuestionBank> eduQuestionBanks = eduQuestionExerciseDao.queryEduQuestionBankTitle(eduQuestionExercise);

        //  题库已答统计
        Map param = new HashMap();
        param.put("labourId",eduQuestionExercise.getLabourId());
        List<Map<String,Object>> answerdQuestions = eduQuestionExerciseDao.countAnswerdQuestion(param);

        Map<Integer, Integer> answeredMap = new HashMap<>();

        // 题库id 为key , 题库已答数量为value
        for(Map<String,Object> answerdQuestion : answerdQuestions){
            Integer questionBankId =  MapUtils.getInteger(answerdQuestion, "question_bank_id");
            Integer answerdCount =  MapUtils.getInteger(answerdQuestion, "answerdCount");
            answeredMap.put(questionBankId, answerdCount);
        }
        // 题库id 为key , 题库总题目量为value
        Map<Integer, Integer> totalMap = new HashMap<>();

        for(Map<String,Object> answerdQuestion : answerdQuestions){
            Integer questionBankId =  MapUtils.getInteger(answerdQuestion, "question_bank_id");
            Integer totalCount = MapUtils.getInteger(answerdQuestion, "totalCount");
            totalMap.put(questionBankId, totalCount);
        }
        // 题库id 为key , 题库正确题目量为value
        Map<Integer, Integer> correctMap = new HashMap<>();

        for(Map<String,Object> answerdQuestion : answerdQuestions){
            Integer questionBankId =  MapUtils.getInteger(answerdQuestion, "question_bank_id");
            Integer correctCount = MapUtils.getInteger(answerdQuestion, "correctCount");
            correctMap.put(questionBankId, correctCount);
        }




        // 设置题库已答数量
        for(EduQuestionBank eduQuestionBank : eduQuestionBanks) {
            eduQuestionBank.setAnsweredCount(MapUtils.getInteger(answeredMap, eduQuestionBank.getId())!=null?MapUtils.getInteger(answeredMap, eduQuestionBank.getId()):0);
            eduQuestionBank.setTotalCount(MapUtils.getInteger(totalMap,eduQuestionBank.getId())!=null?MapUtils.getInteger(totalMap,eduQuestionBank.getId()):0);
            eduQuestionBank.setCorrectCount(MapUtils.getInteger(correctMap,eduQuestionBank.getId())!=null?MapUtils.getInteger(correctMap,eduQuestionBank.getId()):0);
            if(eduQuestionBank.getTotalCount()!=0&&eduQuestionBank.getTotalCount()!=null&&
                    eduQuestionBank.getCorrectCount()!=0&&eduQuestionBank.getCorrectCount()!=null ) {
                Integer correctCount = eduQuestionBank.getCorrectCount();
                Integer totalCount = eduQuestionBank.getTotalCount();
                Long correctCount1 = Long.valueOf(correctCount);
                Long totalCount1 = Long.valueOf(totalCount);
                BigDecimal correctCount2 = BigDecimal.valueOf(correctCount1);
                BigDecimal totalCount2 = BigDecimal.valueOf(totalCount1);
                BigDecimal accuracy = correctCount2.divide(totalCount2,2,BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(100));
                eduQuestionBank.setAccuracy(accuracy.intValue());
            }else{
                eduQuestionBank.setAccuracy(0);
            }
        }

        map.put("list",eduQuestionBanks);
        return map;
    }
复制代码

 

posted @   Rest探路者  阅读(484)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
levels of contents
点击右上角即可分享
微信分享提示