Jiliason
计算试卷通过率、平均成绩
double pass = (stuReport.getFinishTask() * 1.00 / total) * 100;
BigDecimal bigDecimal = new BigDecimal(pass); pass = bigDecimal.setScale(2, RoundingMode.HALF_UP).doubleValue(); busStu.setScenePassingRate(pass + "%");
|
RoundingMode
可以选择其他的舍值方式,例如去尾,等等。
int Count = 0; int oneCount = 0; double scoreSum = 0; Long userId = busStu.getUserId(); List<BusPaperDetail> busPaperDetails = busPaperDetailMapper.selectList(new LambdaQueryWrapper<BusPaperDetail>().eq(BusPaperDetail::getUserId, userId)); for (BusPaperDetail busPaperDetail : busPaperDetails) { String score = busPaperDetail.getScore(); scoreSum += Double.parseDouble(score); int result = Integer.parseInt(busPaperDetail.getResult()); if (result == 1) { oneCount++; } Count++; } if (oneCount == 0) { busStu.setPaperPassingRate("0%"); } else { BigDecimal paperPass = new BigDecimal(oneCount).divide(new BigDecimal(Count), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); busStu.setPaperPassingRate(paperPass + "%"); } if (Count == 0) { busStu.setPaperAverageScores(0); } else { BigDecimal average = new BigDecimal(scoreSum).divide(new BigDecimal(Count), 2, RoundingMode.HALF_UP); int PaperAverage = average.intValue(); busStu.setPaperAverageScores(PaperAverage); }
|
优化版:
int Count = 0; int oneCount = 0; double scoreSum = 0; Long userId = busStu.getUserId(); List<BusPaperDetail> busPaperDetails = busPaperDetailMapper.selectList(new LambdaQueryWrapper<BusPaperDetail>().eq(BusPaperDetail::getUserId, userId)); for (BusPaperDetail busPaperDetail : busPaperDetails) { String score = busPaperDetail.getScore(); scoreSum += Double.parseDouble(score); int result = Integer.parseInt(busPaperDetail.getResult()); if (result == 1) { oneCount++; } Count++; } busStu.setPaperPassingRate(oneCount == 0 ? "0%" : new BigDecimal(oneCount).divide(new BigDecimal(Count), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)) + "%"); busStu.setPaperAverageScores(Count == 0 ? 0 : new BigDecimal(scoreSum).divide(new BigDecimal(Count), 2, RoundingMode.HALF_UP).intValue());
|
使用工号登录
对Spring Security的loadUserByUsername
进行改写
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { String[] split = username.split(","); String type = split[0]; String name = split[1]; SysUser user; if (type.equals("username")) { user = userService.selectUserByUserName(name); } else { user = userService.selectUserByJobId(name); } if (StringUtils.isNull(user)) { log.info("登录用户:{} 不存在.", name); throw new ServiceException("登录用户:" + name + " 不存在"); } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { log.info("登录用户:{} 已被删除.", name); throw new ServiceException("对不起,您的账号:" + name + " 已被删除"); } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { log.info("登录用户:{} 已被停用.", name); throw new ServiceException("对不起,您的账号:" + name + " 已停用"); }
passwordService.validate(user);
return createLoginUser(user); }
|
通过时间统计登录人数
<select id="selectCountByTime" resultType="java.lang.Integer"> SELECT COUNT(DISTINCT user_name) FROM sys_logininfor <where> <if test="startTime != null and startTime != ''"> and date_format(login_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d') </if> <if test="endTime != null and endTime != ''"> and date_format(login_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d') </if> AND status <> 1 AND msg <> '退出成功' </where> </select>
|
DISTINCT 列名:去除该列重复的值
controller
public List<Map<String,Integer>> getLoginCount(String startTime, String endTime) { List<Map<String, Integer>> counts = new ArrayList<>(); Map<String, Integer> countMap = new HashMap<>(); LocalDate startDate = LocalDate.parse(startTime); LocalDate endDate = LocalDate.parse(endTime); List<LocalDate> dates = new ArrayList<>(); LocalDate currentDate = startDate; while (!currentDate.isAfter(endDate)) { dates.add(currentDate); currentDate = currentDate.plusDays(1); } dates.sort(Comparator.naturalOrder()); for (LocalDate date : dates) { int count = logininforService.selectCountByTime(date.toString(), date.toString()); countMap.put(date.toString(), count); } counts.add(countMap); return counts; }
|
bug修复
学员报表分页总条数错误
试卷报表中:首次考试与末次考试分页有误
8.23期
查看详情 |
请求地址 |
请求方式 |
参数 |
试卷 |
/bus/paper/query |
GET |
id |
场景 |
/bus/course/queryCourse |
GET |
id |
课程 |
/bus/scene/selectSceneById |
POST |
id |
下发任务时,在人员范围的显示栏上,加上部门、岗位的显示,然后是人员明细,如为全选的情况,则显示“全部”
任务下发时,做成筛选框,无条件时展示所有用户,有筛选条件时展示符合条件的用户
勾选人员时需要可以按照部门勾选
请求地址 |
请求方式 |
参数 |
/system/user/allUserInfo |
|
在bus_user_task
新增允许快进的学员字段(is_speed)
在学员播放时,调用bus_user_task
进行判断
前端:在新建任务时,只有选择了视频
isSpeed:(0-禁止 | 1-允许)
对课程的评价,可以导出每个学员的评价
按照课程分类,看到每个学员对该课程的评价
|
请求地址 |
请求方式 |
参数 |
评论 |
/bus/course/commentCourse |
GET |
BusComment |
|
/bus/course/queryComment |
|
BusComment |
学习记录
点击==课时完成==时,调用插入学习记录
|
请求地址 |
请求方式 |
参数 |
插入学习记录 |
bus/study/insert |
POST |
BusStudyInfo |
查看学习记录 |
/bus/study/list |
GET |
无 |