发表于: 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.后台的部分要的比较急,先完成后台部分的接口


三.遇到的问题

暂无


四.收获

以上


五.项目进度情况

暂无延期风险


返回列表 返回列表
评论

    分享到