利用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 ...
随机推荐
- scvmm2008 错误 2921 0x8007054F
这个错误是由于bits智能传输服务依赖的https 443端口被占用.443端口一般常用于银行.购物网站,是一种加密的http,一般是通过ssl安全套接字来加密的,但是ssl漏洞可能被木马病毒利用. ...
- 详解C#中的反射(转发)
https://www.cnblogs.com/Stephenchao/p/4481995.html 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况 ...
- 关于.NET C#调用Sqlite的总结一
--前记 由于自己的密码太多又不容易记住,经常性的会忘记.所以想找个管理软件管理下,可用网上下载的担心不安全.于是自己开始动手写个属于自己的密码管理软件. 因为自己一直做的是WEB开发,对WPF懂的不 ...
- 在Linux安装ASP.Net Core的运行时(Runtime)
在部署的时候,如果您不想在您的Linux服务器上安装.Net Core SDK,您可以只安装Runtime,接下来我们看看该如何安装运行时Runtime. 下载运行时文件 下载页面:https://w ...
- win7下安装numpy
OS: WIN7 32bit Python: 3.4 在以下网站下载: numpy-MKL-1.9.0.win32-py3.4.exe
- 《Beginning Java 7》 - 5 - Hash Codes 哈希码
哈希码和 equals() 都是用来比较的. 1. 哈希码的作用是用来提高比较的效率.因为当比较的对象比较复杂时,equals() 可能很耗时,但哈希码只需要比较一个 int .哈希码常用于集 (se ...
- [ActionSprit 3.0] FMS安装与测试
1.运行Flash Media Server4.5.exe,安装选项可全默认,序列号可不填:输入用户名和密码需记住,登录时要用. 2.安装完成,在安装目录C:\Program Files\Adobe\ ...
- 5,临界区 之 lock
前提背景:多个并发线程共享同一个资源时,为防止这些共享资源可能出现的错误或数据不一致问题,提出了临界区的概念 临界区: 指一个用以访问共享资源的代码块,这个代码块在同一时间内只能允许一个线程访问 实现 ...
- centos下部署NFS
一. NFS简介 NFS---Network File System:主要功能是通过网络让不同的linux主机系统间可以彼此共享文件和目录.NFS客户端可以通过挂载的方式将NFS服务器端共 ...
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...