利用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;
}
利用Map解决复杂业务的更多相关文章
- 微服务架构-利用Redis特性进行业务解耦
背景: 接着上篇文章来,上篇文章讲的是如何利用ApplicationContext的事件机制来达到业务解耦,而且这只能作用在单体应用中.在当下这么盛行的微服务架构中,想要再利用此方案做业务解耦 ...
- 利用闭包解决for循环里onclick事件不能捕捉实时i值问题
问题描述 我们都知道,如果我们对于一组元素(相同的标签)同时进行onclick事件处理的时候(在需要获取到索引的时候),一般是写一个for循环,但是onclick是一个异步调用的,所以会带来一个问题, ...
- Java-map-第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录
第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...
- zk框架中利用map类型传值来创建window,并且传值
@Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...
- 利用Readability解决网页正文提取问题
分享: 利用Readability解决网页正文提取问题 做数据抓取和分析的各位亲们, 有没有遇到下面的难题呢? - 如何从各式各样的网页中提取正文!? 虽然可以用SS为各种网站写脚本做解析, 但是 ...
- 利用gulp解决微信浏览器缓存问题
做了好多项目,这次终于要解决微信浏览器缓存这个令人头疼的问题了.每次上传新的文件,在微信浏览器中访问时,总要先清除微信的缓存,实在麻烦,在网上搜罗了很多解决办法,终于找到了方法:利用gulp解决缓存问 ...
- 利用Json_encode解决中文问题
利用Json_encode解决中文问题 public function return_json($data=array()){ echo json_encode($data ...
- 利用MAP动态创建C++类对象
MFC的CRuntimeClass利用链表实现了C++类的动态创建.但是如果项目中对动态创建的要求比较低,我们完全可以利用map实现简单的动态创建. http://blog.csdn.net/yeji ...
- 利用Filter解决跨域请求的问题
1.为什么出现跨域. 很简单的一句解释,A系统中使用ajax调用B系统中的接口,此时就是一个典型的跨域问题,此时浏览器会出现以下错误信息,此处使用的是chrome浏览器. 错误信息如下: jquery ...
随机推荐
- Linq研究
微软在.NET 3.5中加入了LINQ技术,作为配套改进了C#语言,加入了Lambda表达式,扩展方法,匿名类型等新特性用以支持LINQ.微软同时提出了要使用声明式编程,即描述计算规则,而不是描述计算 ...
- C#多线程学习(五) 多线程的自动管理(定时器)
Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...
- 语法解析 rs.next()
ResultSet.next()方法将指针从当前位置下移一行.ResultSet 指针最初位于第一行之前:第一次调用 next 方法使第一行成为当前行:第二次调用使第二行成为当前行,依此类推. 如果新 ...
- D. Magic Box(几何)
One day Vasya was going home when he saw a box lying on the road. The box can be represented as a re ...
- iis7下站点日志默认位置
在iis6时,通过iis管理器的日志配置可以找到站点日志存储的位置. 但是在iis7下,iis管理器下的日志配置只能找到iis日志配置的主目录,但到底在哪个子目录,则无法直接获知. 后来在主日 ...
- 渐进增强 VS 优雅降级
渐进增强(Progressive Enhancement):一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果.交互.追加功能达到更好的体验. 优雅降级(Gracefu ...
- Leetcode 856. Score of Parentheses 括号得分(栈)
Leetcode 856. Score of Parentheses 括号得分(栈) 题目描述 字符串S包含平衡的括号(即左右必定匹配),使用下面的规则计算得分 () 得1分 AB 得A+B的分,比如 ...
- js和jquery获取属性的区别
一.获取元素: js获取元素: 根据id获取:document.getElementById("id"); 根据类名获取:document.getElementsByClassNa ...
- java学习基础部分
JVM虚拟机的位置: 垃圾回收在java程序运行过程中自动进行,程序员无法精准控制和干预. Java程序还会出现内存泄漏和内存溢出. Jre = jvm+java se标准类库 Jdk = jre + ...
- 在eclips中配置maven
可参考https://jingyan.baidu.com/article/59703552cb9b988fc00740a4.html