发表于: 2018-01-29 23:52:36

1 675


今天完成的事情:

1. 完成接口:

教材的课时列表:

本接口调用了6个service 

并写了一个工具来匹配和补足用户在该课时的附属信息

//根据教材id获得旗下课时
Map<String,Object> paramLessonPeriodIds = DynamicUtil.getLessonPeriodIdsByBookId(bookId.toString());
try {
List<Long> lessonPeriodIds = lessonPeriodService.getIdsByDynamicCondition(LessonPeriod.class,paramLessonPeriodIds,start,size);
   if(DataUtils.isNullOrEmpty(lessonPeriodIds) || lessonPeriodIds.size()==0 ){
log.info("没有数据");
       model.addAttribute("code", 2);
       return "common/fail";
   }
List<LessonPeriod> lessonPeriodList = lessonPeriodService.getObjectsByIds(lessonPeriodIds);
   log.info("lessonPeriodList number is : " + lessonPeriodList.size());
   //获取total
   Map<String,Object> paramTotal = DynamicUtil.countLessonPeriodIdsByBookId(bookId.toString());
   List<Long> totals = lessonPeriodService.getIdsByDynamicCondition(LessonPeriod.class,paramTotal,0,Integer.MAX_VALUE);
   Integer total = 0;
   if( !IsNullUtil.isNullOrEmpty(totals) && totals.size() !=0){
total = totals.get(0).intValue();
   }
//由用户id和课时id 获取用户的课时进度的列表
   Map<String,Object> paramUserLessonPeriodIds = DynamicUtil.getUserLessonPeriodIdsByBook(userId, SqlUtil.InIdSubstring(lessonPeriodIds));
   List<Long> userLessonPeriodId = userLessonPeriodService.getIdsByDynamicCondition(UserLessonPeriod.class,paramUserLessonPeriodIds,start,size);
   List<UserLessonPeriod> userLessonPeriodList = userLessonPeriodService.getObjectsByIds(userLessonPeriodId);
   //lessonPeriodList   userLessonPeriodList一一对应
   LinkedHashMap<Long,Integer> userLessonPeriodStatus = UserUtil.userLessonPeriodToLessonPeriod(lessonPeriodList,userLessonPeriodList);
   log.info("userLessonPeriodStatus number is : " + userLessonPeriodStatus.size());
   //根据userIdlessonPeriodIds获取用户已经解锁的课时列表
   Map<String,Object> paramLockLessonPeriodIds = DynamicUtil.getLockLessonPeriodIdsByBook(userId, SqlUtil.InIdSubstring(lessonPeriodIds));
   List<Long> lockLessonPeriod = lockstitchService.getIdsByDynamicCondition(Lockstitch.class,paramLockLessonPeriodIds,start,size);
   List<Lockstitch> lockstitchList = lockstitchService.getObjectsByIds(lockLessonPeriod);
   //lessonPeriodList   lockstitchList 一一对应
   LinkedHashMap<Long,Integer> lockStatus = UserUtil.lockstitchListToLessonPeriod(lessonPeriodList,lockstitchList);
   log.info("lockStatus number is : " + lockStatus.size());
   //统计每个课时的的任务数量
   Map<String,Object> paramTask = DynamicUtil.countTaskNumberByLessonPeriodIds( SqlUtil.InIdSubstring(lessonPeriodIds));
   List<Long> taskNumber = taskService.getIdsByDynamicCondition(Task.class,paramTask,start,size);
   log.info("taskNumber number is : " + taskNumber.size());
   //统计每个课时的资料数量
   Map<String,Object> paramData =DynamicUtil.countDataNumberByLessonPeriodIds( SqlUtil.InIdSubstring(lessonPeriodIds) );
   List<Long> dataNumber = dataService.getIdsByDynamicCondition(Data.class,paramData,start,size);
   log.info("dataNumber number is : " + dataNumber.size());
   //拼接数据
   List<HashMap<String,Object>> lessonPeriodListMap = new ArrayList<HashMap<String,Object>>(lessonPeriodIds.size());


接口调用的service太多,我认为有优化的余地:

方案1: 把关联不是非常紧密的service分成多个接口   缺点: 前端需要处理逻辑

方案2:建立一个pojo和对应的视图进行映射  缺点:视图的sql语句将会非常非常复杂

方案3: 用多线程处  用到 lessonPeriodIds下的每一个service,可以节约时间  lessonPeriodIds 与多个List数据对应处理的  for循环不必等待上面的for完成后才开始  缺点: 可能消耗较大



明天计划的事情

1. 开始学习的接口,任务展示




遇到的问题:

数据的组合,在一个表里没有的数据,需要在JAVA里进行补完

    /**

     * @description: 让lessonPeriodList  和 userLessonPeriodList一一对应 不存在的为0

     * @param lessonPeriodList

     * @param userLessonPeriodList

     * @return: java.util.LinkedHashMap<java.lang.Long,java.lang.Integer>

     * @author: Administrator

     * @date: 2018-01-29  下午 2:34

     */

    public static LinkedHashMap<Long,Integer> userLessonPeriodToLessonPeriod(List<LessonPeriod> lessonPeriodList, List<UserLessonPeriod> userLessonPeriodList){

        LinkedHashMap<Long,Integer> userLessonPeriodStatus = new LinkedHashMap<>(lessonPeriodList.size());

        int m = 0;//记录已经找到顺序的下标的个数

        for(int i = 0 ; i<lessonPeriodList.size() ;i++){

            userLessonPeriodStatus.put(lessonPeriodList.get(i).getId(),Constant.UN_LESSON_PERIOD);

            int k = m;

            while (k<userLessonPeriodList.size()){

                if(lessonPeriodList.get(i).getId().equals(userLessonPeriodList.get(k).getLessonPeriodId())){

                    userLessonPeriodStatus.put(lessonPeriodList.get(i).getId(),userLessonPeriodList.get(k).getStatus());

                    conversionUserLessonPeriod(m,k,userLessonPeriodList);

                    m++;

                    break;

                }

                k++;

            }

        }

        log.info("userLessonPeriodStatus is : " + userLessonPeriodStatus);

        return userLessonPeriodStatus;

    }

    //userLessonPeriodList中两个数据位置进行交换

    private static void conversionUserLessonPeriod(int m,int k,List<UserLessonPeriod> userLessonPeriodList){

        Object o = userLessonPeriodList.get(m);

        userLessonPeriodList.set(m, userLessonPeriodList.get(k));

        userLessonPeriodList.set(k,(UserLessonPeriod)o);

    }


收获:




前台 展示教材接口,绑定教材接口

预计完成时间:2018.01.30

DOME时间:2018-2-9


返回列表 返回列表
评论

    分享到