发表于: 2017-12-29 21:47:06
0 577
一.今天完成的主要内容
1.继续针对数据表中的一些细节问题进行修改,写好了前台学员端的假数据
完成一个获取顺序/为做题目/错题/收藏题目练习列表的接口
@RequestMapping(value = "/a/practice/portion/list", method = RequestMethod.GET)
public String getPortionOfPractices(HttpServletRequest request, HttpServletResponse response, ModelMap model,
Long studentId, Long practiceId, Integer subjectType, Integer type, Integer size,
Integer mode) throws Exception {
log.info("Interface GET /a/practice/portion/list, Method getPortionOfPractices() parameters : " +
"studentId: " + studentId + ", practiceId: " + practiceId + ", subjectType: " + subjectType +
", type: " + type + ", mode: " + mode);
int actualSize = ParamsUtil.calculateActualSize(size);
log.info("size: " + actualSize);
int validateResult = ParamsUtil.checkParamsOfGetPortionOfPractices(studentId, practiceId, subjectType, type, mode);
if (validateResult != 0){
model.addAttribute("code", validateResult);
return "/common/failure";
}
try {
List<Long> practiceIdListTotal = null;
log.info("Key parameter: parameter type is : " + type);
switch (type){
case 0:
practiceIdListTotal = subjectPracticeService.getSubjectPracticeIdsBySubjectType(subjectType, 0, Integer.MAX_VALUE);
break;
case 1:
practiceIdListTotal = subjectPracticeService.getSubjectPracticeIdsBySubjectType(subjectType, 0, Integer.MAX_VALUE);
List<Long> hasDoneIdList = noteService.getPracticeIdsByStudentIdAndSubjectType(studentId, subjectType,0, Integer.MAX_VALUE);
practiceIdListTotal = ListUtil.eliminateSublist(hasDoneIdList, practiceIdListTotal);
break;
case 2:
practiceIdListTotal = noteService.getPracticeIdsByStudentIdAndSubjectTypeAndResult(studentId, subjectType, 0, 0, Integer.MAX_VALUE);
break;
case 3:
practiceIdListTotal = studentFavoriteRelationService.getTargetIdsByStudentIdAndTargetType(studentId, subjectType, 0, Integer.MAX_VALUE);
break;
default:
break;
}
log.info("get practice id list total, list size is : " + practiceIdListTotal.size());
if (!practiceIdListTotal.contains(practiceId)){
log.info("Error value of practiceId, practiceId is: " + practiceId);
model.addAttribute("code", -1001);
return "/common/failure";
}
List<Long> resultIdList = ListUtil.getElementsFromList(practiceIdListTotal, practiceIdListTotal.indexOf(practiceId),
actualSize, mode);
log.info("get result id list, list size is : " + resultIdList.size());
List<SubjectPractice> subjectPracticeList = null;
if (CollectionUtils.isNotEmpty(resultIdList)){
subjectPracticeList = subjectPracticeService.getObjectsByIds(resultIdList);
log.info("get practice list data, list size is : " + subjectPracticeList.size());
}
model.addAttribute("code", 0);
model.addAttribute("size", actualSize);
model.addAttribute("total", practiceIdListTotal.size());
model.addAttribute("subjectPracticeList", subjectPracticeList);
return "/yi-nucleus-service/subjectPractice/json/subjectPracticeListJson";
} catch (Throwable t){
log.error(t.getMessage());
log.error("Method getPortionOfPractices() failed, studentId: " + studentId + ", practiceId: " +
practiceId + ", subjectType: " + subjectType + ", type: " + type + ", mode: " + mode);
model.addAttribute("code", -1);
return "/common/failure";
}
}
重点是画粗线的两个方法,一个方法是删除一个list中的子list,该方法的代码如下
/**
* 从原list中去除子list
* */
public static <T>List<T> eliminateSublist(List<T> sublist, List<T> originalList){
List<T> resultList = originalList;
for (int i=0; i<sublist.size(); i++){
if (resultList.contains(sublist.get(i))){
resultList.remove(sublist.get(i));
}
}
return resultList;
}
代码很简单,用了下泛型
还有一个方法是根据给定的元素,长度和模式,获取一个list中相应范围内的元素,
该方法的功能实际上由两个子函数完成,所有代码如下
/**
* 从list中取出部分元素,组成新的list返回,可制定顺序或反序
*/
public static <T>List<T> getElementsFromList(List<T> list, Integer index, Integer size, Integer mode){
if (mode == 0){
return getElementsFromListInvertedSequence(list, index, size);
} else {
return getElementsFromListSequence(list, index, size);
}
}
/**
* 从list中顺序取出部分元素,组成新的list返回
*/
public static <T>List<T> getElementsFromListSequence(List<T> list, Integer begin, Integer size){
List<T> resultList = new ArrayList<>();
for (int i=begin; i<begin + size; i++) {
if (i < list.size()) {
resultList.add(list.get(i));
}
}
return resultList;
}
/**
* 从list中逆序取出部分元素,组成新的list返回
*/
public static <T>List<T> getElementsFromListInvertedSequence(List<T> list, Integer last, Integer size){
List<T> resultList = new ArrayList<>();
for (int i=last; i>last - size; i--) {
if (i > 0) {
resultList.add(list.get(i));
}
}
return resultList;
}
这样,在接口中就不需要写大段大段的判断逻辑,直接调用方法即可
目前那个switch语句还没有想到好的重构方法,看起来还不够优雅,后续再继续研究之后再重构吧
2.完成学习模块后台部分的接口文档的完善和假数据的提供
二.明天计划完成的事情
1.后台的部分要的比较急,先完成后台部分的接口
三.遇到的问题
暂无
四.收获
以上
五.项目进度情况
暂无延期风险
评论