发表于: 2018-01-29 23:52:36
1 676
今天完成的事情:
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());
//根据userId和lessonPeriodIds获取用户已经解锁的课时列表
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
评论