利用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 ...
随机推荐
- Transaction And Lock--解决死锁/锁的几种有效方式
修改资源访问顺序,使多个事务对资源的访问方式一致优化查询SELECT,使得S锁能尽早释放均可能将更新和删除语句放到事务末端(使得X锁占用时间最小)避免事务执行期间暂停或等待外部输入将较大事务拆分成多个 ...
- 【转】C#中使用aria2c进行下载并显示进度条
[转自] C#中使用aria2c进行下载并显示进度条 - 云平台知识库 - 博客园https://www.cnblogs.com/littlehb/p/5782714.html 正则表达式的生成网站: ...
- mysql用户增删改
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: @>mysql -u root -p @&g ...
- django shortcut function
render() render(request, template_name, context=None, content_type=None, status=None, using=None) 必须 ...
- OI网络流 简单学习笔记
持续更新! 基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. ..怎么说呢,最基础的模板我就我不说了吧qwq,具体可以参考一下这位大佬写的博客:最大流,最小割,费用流 费用流 跑 ...
- 在通知栏上玩游戏,Steve iOS 游戏实现思路
最近有一款游戏特别的火爆,叫做Steve ,一种可以在通知中心直接玩的游戏.作者的脑洞也是非常的大,实在让人佩服.其实实现起来也简单,就是用到了iOS8新特性 app extension(Today ...
- Tomcat安装与使用
主要讲解Tomcat的 安装与使用,讲解ubuntu版本和windows. 下载与安装: 1)到apache官网.www.apache.org http://jakarta.apache.org(产品 ...
- 针对myeclipse6.5无法自动生成toString方法
public void getToStringSTR(){ Field[] fs = this.getClass().getDeclaredFields(); for (int i = 0; i &l ...
- 2016级算法第五次上机-A.Beihang Collegiate Pronunciation Contest 2017
1065 Beihang Collegiate Pronunciation Contest 2017 思路 在字符串中不断做匹配 找到一个匹配就输出 时间复杂度\(O(n)\) ps.模式串是定长的, ...
- HTML-★★★★★表单★★★★★
表单 <form id="" name="" method="post/get" action="负责处理的服务端" ...