兑换学时,优先从快过期的进行处理
过期时间 | 学时数 | 已用学时 | 是否过期 |
---|---|---|---|
2018-11-28 | 30 | 10 | 否 |
2018-11-30 | 30 | 0 | 否 |
2018-11-30 | 30 | 0 | 否 |
可用学时: 30+30+30=90
剩余学时: 30-10+30-0+30-0=80
假设今天第一个过期了
过期时间 | 学时数 | 已用学时 | 是否过期 |
---|---|---|---|
2018-11-28 | 30 | 10 | 是 |
2018-11-30 | 30 | 0 | 否 |
2018-11-30 | 30 | 0 | 否 |
可用学时: 30+30=60
剩余学时: 30-0+30-0=60
使用学时(伪代码)
if 前台判断总学时是否够用{
后台先根据时间排序查出可兑换学时的 List 计算出总学时
if 总学时>使用学时{
for(list){
if 学时-已用-使用>0 {
执行修改操作 update-->已用
break; //如果够减 直接结束循环
}else{
使用-=(学时-已用)
已用=学时
update-->已用,有效设置为无效(因为已用完 下次计算不在查出)
}
}
}
}
部分逻辑代码实现
--代码实现
int get;//获得的学时
int used;//已使用的学时
for (Object obj : list) {
if(obj instanceof ConvertCourseHours){
cch = (ConvertCourseHours) obj;
get = cch.getRuleScore();
used = cch.getUsedScore();
//学时-已用-使用>0
if(get-used-convertScore>0){
//执行修改操作 update-->已用
//已用加上使用的值
cch.setUsedScore(used+convertScore);
//更新
convertCourseHoursDao.updateConvertCourseHours(cch);
return "success"; //如果够减 直接结束循环 返回成功
}else if(get-used-convertScore==0){
cch.setUsedScore(get);//使用完 已用=总共获得的学时
cch.setAvailability(0);//使用完设置为失效
convertCourseHoursDao.updateConvertCourseHours(cch);
return "success";//刚好使用完 返回成功
}else{
convertScore-=(get-used);//把快过期的先用完,在进行下一轮循环
cch.setUsedScore(get);//使用完 已用=总共获得的学时
cch.setAvailability(0);//使用完设置为失效
convertCourseHoursDao.updateConvertCourseHours(cch);
}
}
}