兌換學時,優先從快過期的進行處理
過期時間 | 學時數 | 已用學時 | 是否過期 |
---|---|---|---|
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);
}
}
}