利用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 ...
随机推荐
- C# 数字转换成汉字大写 数值转换成汉字大写
1.数字转换成汉字大写 public string NumToChinese(string x) { //数字转换为中文后的数组 //转载请注明来自 http://www.shang11.com st ...
- typescript多维对象数组仿List泛型
定义对象: namespace entity{ export class MyClass{ public value:number; public rect:string; public constr ...
- sql分组拼接字段
--联查select n.*,t.Name from News n join Type_News tn on n.Id=tn.NId join Types t on t.Id=tn.TId --拼接并 ...
- java 编译器级别与项目版本不匹配
java compiler level does not match the v examime. java 编译器级别与项目版本不匹配. 解决: 在当前项目上点右键,属性 Pro ...
- 【连载】redis库存操作,分布式锁的四种实现方式[三]--基于Redis watch机制实现分布式锁
一.redis的事务介绍 1. Redis保证一个事务中的所有命令要么都执行,要么都不执行.如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行.而一旦客户端发 ...
- ibatis遍历数组:ParameterObject or property was not a Collection, Array or Iterator.
这个问题在使用ibatis的<iterate></iterate>时出现的,很简单,但是蛋疼了很久,记下来 首先从错误提示看,明显意思是你给出ibatis的参数不对路,人家不认 ...
- UIViewContentMode-
图片很小,frame很大 图片很大,frame很小 UIViewContentModeScaleToFill, UIViewContentModeScaleAspectFit, UIViewConte ...
- flask开发笔记
目录 虚拟环境 Debug模式 配置文件 url传入参数 url反转 重定义向 模板 创建 jinjia2语法 模板继承 flash 加载静态文件 MySQL数据库命令 配置 更新.提交.删除 模型操 ...
- Shiro入门资源整理
学习一个框架,查阅权威有效的资料能够事半功倍,本文收集笔者学习此框架中帮助很大的文档,希望对大家有所帮助. 对于文档类的,强烈建议看官方文档,而不是百度出来的经过网友加工或者搬运过来的资料!! shi ...
- thinkphp5.1的安装
首先,下载composer.建议选择全屏安装.参考资料https://docs.phpcomposer.com/00-intro.html.安装到c盘.这个跟之前nodejs一样,都是装c盘.大概是全 ...