上课历史前端与后端交互
1.前端获取上课历史记录并加载
代码如下:
//从后端数据库获得所有上课历史信息,保存到list
private ArrayList<Class_historyItem> getData(int page) {
String res = HttpClient.findHistorysByC_id(c_id);
JSONArray jsonArray = JSONArray.parseArray(res);
ArrayList<Class_historyItem> interList = new ArrayList<>();
for (int i=0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Date chDate = jsonObject.getDate("chDate");
int chId = jsonObject.getInteger("chId");
String remarks = jsonObject.getString("remarks");
interList.add(new Class_historyItem(chDate,chId,remarks));
}
return interList;
}
//获取上课历史并加载一页到前端UI
listContainer = (ListContainer)
getFractionAbility().findComponentById(ResourceTable.Id_list_class_history);
new Thread(() -> {
list = getData(page);
class_historyItemProvider = new Class_historyItemProvider(getPageData(page), getFractionAbility());
getFractionAbility().getUITaskDispatcher().asyncDispatch(() -> {//获取UI 主线
listContainer.setItemProvider(class_historyItemProvider);
});
}).start();
public static String findQuestionsBycid(String c_id){
String url = "http://t40g792468.qicp.vip/question/findQuestionsBycid?c_id="+c_id;
return doGet(url);
}
2.前端获取指定上课记录的答题情况并加载
代码如下:
//从后端数据库获取指定上课记录的发送题目列表 用class_history_id在数据库查询
//题目基本信息 题型 题干 分值
//答题情况 回答人数 正确人数 正确率
private ArrayList<Answer_resultItem> get_history_question(String class_history_id) {
String res = HttpClient.findAnswersBychid(class_history_id);
JSONArray jsonArray = JSONArray.parseArray(res);
ArrayList<Answer_resultItem> interList = new ArrayList<>();
for (int i=0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String stem = jsonObject.getString("stem");
float score = jsonObject.getFloat("score");
int answerSum = jsonObject.getInteger("answerSum");
int correctSum = jsonObject.getInteger("correctSum");
interList.add(new Answer_resultItem("单选题",stem,String.valueOf(score),String.valueOf(answerSum),String.valueOf(correctSum),String.format("%.2f",(float)correctSum/(float)answerSum)));
}
return interList;
}
new Thread(() -> {
ArrayList<Answer_resultItem> answer_resultList = get_history_question(class_history_id);
getFractionAbility().getUITaskDispatcher().asyncDispatch(() -> {//获取UI 主线
StemItemProvider stemItemProvider = new StemItemProvider(answer_resultList,getFractionAbility());
stemItemProvider.setHistory_question_frame(answer_result_frame);
ArrayList<Text> text_list = new ArrayList<>();
text_list.add((Text)
getFractionAbility().findComponentById(ResourceTable.Id_r1) );
text_list.add((Text)
getFractionAbility().findComponentById(ResourceTable.Id_r2) );
text_list.add((Text)
getFractionAbility().findComponentById(ResourceTable.Id_r3) );
text_list.add((Text)
getFractionAbility().findComponentById(ResourceTable.Id_r4) );
text_list.add((Text)
getFractionAbility().findComponentById(ResourceTable.Id_r5) );
stemItemProvider.setText_list(text_list);
ListContainer history_question_listContainer = (ListContainer)
getFractionAbility().findComponentById(ResourceTable.Id_list_history_question);
history_question_listContainer.setItemProvider(stemItemProvider);
history_question_frame.setVisibility(0);
});
}).start();
public static String findOptionsByoqid(String o_q_id){
String url = "http://t40g792468.qicp.vip/question/findOptionsByoqid?o_q_id="+o_q_id;
return doGet(url);
}
3.后端实现
DAO层:
@Query(nativeQuery = true,value = "SELECT distinct t_question.q_id,t_question.q_stem,t_question.q_score from t_question WHERE t_question.c_id=?1") //原生SQL方法
public List<Object> findQuestionsBycid(int c_id);
@Query(nativeQuery = true,value = "SELECT distinct t_option.o_num,t_option.o_content,t_option.o_answer,t_option.o_id from t_option WHERE t_option.o_q_id = ?1") //原生SQL方法
public List<Object> findOptionsByoqid(int o_q_id);
Controller层:
@RequestMapping("/findQuestionsBycid")
@ResponseBody
public Object findQuestionsBycid(int c_id){
List<QuestionData> datas = new ArrayList<>();
List<Object> result = questionDao.findQuestionsBycid(c_id);
for (Object o : result) {
Object[] rowArray = (Object[]) o;
QuestionData d = new QuestionData((BigInteger)rowArray[0],(String) rowArray[1],(float)rowArray[2]);
datas.add(d);
}
return datas;
}
@RequestMapping("/findOptionsByoqid")
@ResponseBody
public Object findOptionsByoqid(int o_q_id){
List<OptionData> datas = new ArrayList<>();
List<Object> result = questionDao.findOptionsByoqid( o_q_id );
for (Object o : result) {
Object[] rowArray = (Object[]) o;
OptionData d = new OptionData((String)rowArray[0],(String) rowArray[1],(boolean)rowArray[2],(int)rowArray[3]);
datas.add(d);
}
return datas;
}
4.演示