package ee.esutoniagodesu.repository.project; import ee.esutoniagodesu.domain.publik.view.VStats; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.CallableStatementCallback; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.stereotype.Repository; import java.sql.*; import java.util.*; @Repository public class ReportDB extends AbstractRepository { @Autowired public ReportDB(JdbcTemplate jdbcTemplate) { super(jdbcTemplate); } public List<Map<String, ?>> getTofuTranslatedByUser(String uuid) { String sql = "{? = call core.f_tofu_translated_by_user(?)}"; CustomCallableStatementCreator sc = new CustomCallableStatementCreator(sql) { public CallableStatement createCallableStatement(Connection con) throws SQLException { con.setAutoCommit(false); CallableStatement s = super.createCallableStatement(con); s.registerOutParameter(1, Types.OTHER);//cursor s.setString(2, uuid); return s; } }; CallableStatementCallback<List<Map<String, ?>>> cb = s -> { s.execute(); ResultSet rs = (ResultSet) s.getObject(1); List<Map<String, ?>> result = new ArrayList<>(); while (rs.next()) { Map<String, Object> item = new HashMap<>(); item.put("id", rs.getInt("id")); item.put("word", rs.getString("word")); item.put("sentence", rs.getString("sentence")); item.put("lang", rs.getString("lang")); item.put("translation", rs.getString("translation")); result.add(item); } return result; }; return execute(sc, cb); } public List<Map<String, ?>> findAllVHeisig4() { String sql = "select frame_no, kanji, keyword_en, keyword_et, keyword_jp," + " keyword_jp_kana, stroke_diagram, my_story, constituent, stroke_count," + " lesson_no, story, heisig_comment, koohii_story_1, koohii_story_2," + " on_yomi, kun_yomi, example_words, keyword_jp_sentence from v_heisig4"; CustomPreparedStatementCreator sc = new CustomPreparedStatementCreator(sql) {}; PreparedStatementCallback<List<Map<String, ?>>> cb = s -> { ResultSet rs = s.executeQuery(); List<Map<String, ?>> result = new ArrayList<>(); Map<String, Object> item; while (rs.next()) { item = new HashMap<>(); int i = 1; item.put("frameNo", rs.getInt(i++));//frame_no item.put("kanji", rs.getString(i++));//kanji item.put("keywordEn", rs.getString(i++));//keyword_en item.put("keywordEt", rs.getString(i++));//keyword_et item.put("keywordJp", rs.getString(i++));//keyword_jp item.put("keywordJpKana", rs.getString(i++));//keyword_jp_kana item.put("strokeDiagram", rs.getString(i++));//stroke_diagram item.put("myStory", rs.getString(i++));//my_story item.put("constituent", rs.getString(i++));//constituent item.put("strokeCount", rs.getInt(i++));//stroke_count item.put("lessonNo", rs.getInt(i++));//lesson_no item.put("story", rs.getString(i++));//story item.put("heisigComment", rs.getString(i++));//heisig_comment item.put("koohiiStory1", rs.getString(i++));//koohii_story_1 item.put("koohiiStory2", rs.getString(i++));//koohii_story_2 item.put("onYomi", rs.getString(i++));//on_yomi item.put("kunYomi", rs.getString(i++));//kun_yomi item.put("exampleWords", rs.getString(i++));//example_words item.put("keywordJpSentence", rs.getString(i));//keyword_jp_sentence result.add(item); } return result; }; return execute(sc, cb); } public List<Map<String, ?>> findAllVKanji() { String sql = "select kanji, stroke_count, on_yomis, kun_yomis, primitives," + " jinmei_seq, jouyou_radical, jouyou_year_added, jouyou_old_kanji," + " jouyou_meaning_en, jouyou_grade, jouyou_grade_seq from v_kanji"; CustomPreparedStatementCreator sc = new CustomPreparedStatementCreator(sql) {}; PreparedStatementCallback<List<Map<String, ?>>> cb = s -> { ResultSet rs = s.executeQuery(); List<Map<String, ?>> result = new ArrayList<>(); Map<String, Object> item; while (rs.next()) { item = new HashMap<>(); int i = 1; item.put("kanji", rs.getString(i++));//kanji item.put("strokeCount", rs.getInt(i++));//stroke_count item.put("onYomis", rs.getString(i++));//on_yomis item.put("kunYomis", rs.getString(i++));//kun_yomis item.put("primitives", rs.getString(i++));//primitives item.put("jinmeiSeq", rs.getInt(i++));//jinmei_seq item.put("jouyouRadical", rs.getString(i++));//jouyou_radical item.put("jouyouYearAdded", rs.getInt(i++));//jouyou_year_added item.put("jouyouOldKanji", rs.getString(i++));//jouyou_old_kanji item.put("jouyouMeaningEn", rs.getString(i++));//jouyou_meaning_en item.put("jouyouGrade", rs.getInt(i++));//jouyou_grade item.put("jouyouGradeSeq", rs.getInt(i));//jouyou_grade_seq result.add(item); } return result; }; return execute(sc, cb); } public VStats getStats() { String sql = "select * from v_stats"; CustomPreparedStatementCreator sc = new CustomPreparedStatementCreator(sql) {}; PreparedStatementCallback<VStats> cb = s -> { ResultSet rs = s.executeQuery(); VStats result = null; if (rs.next()) { int i = 1; result = new VStats(); result.countJpEntry = rs.getInt(i++);//countJpEntry result.countTranslatedEntries = rs.getInt(i++);//countTranslatedEntries result.countEtTranslations = rs.getInt(i++);//countEtTranslations result.countSentencePairs = rs.getInt(i++);//countSentencePairs result.countEstwnExamples = rs.getInt(i++);//countEstwnExamples result.countOriginJatik = rs.getInt(i++);//countOriginJatik result.countOriginIlo = rs.getInt(i++);//countOriginIlo result.countOriginEgd = rs.getInt(i++);//countOriginEgd result.countJpSearchWords = rs.getInt(i++);//countJpSearchWords result.countJpSearchWithResults = rs.getInt(i++);//countJpSearchWithResults result.countEtSearchWords = rs.getInt(i++);//countEtSearchWords result.countEtSearchWithResults = rs.getInt(i++);//countEtSearchWithResults result.countKanjiInDb = rs.getInt(i++);//countKanjiInDb result.countKanjisDescribedWithHeisig = rs.getInt(i++);//countKanjisDescribedWithHeisig result.countStrokeDiagrams = rs.getInt(i);//countStrokeDiagrams } return result; }; return execute(sc, cb); } public List<Map<String, ?>> getTranslatedEntrRatio() { String sql = "{? = call public.f_jmet_entr_gloss_ratio()}"; CustomCallableStatementCreator sc = new CustomCallableStatementCreator(sql) { public CallableStatement createCallableStatement(Connection con) throws SQLException { con.setAutoCommit(false); CallableStatement s = super.createCallableStatement(con); s.registerOutParameter(1, Types.OTHER);//cursor return s; } }; CallableStatementCallback<List<Map<String, ?>>> cb = s -> { s.execute(); ResultSet rs = (ResultSet) s.getObject(1); List<Map<String, ?>> result = new ArrayList<>(); Map<String, Object> item; while (rs.next()) { item = new LinkedHashMap<>(); item.put("countGloss", rs.getInt(1)); item.put("sumCount", rs.getInt(2)); item.put("sumRatio", rs.getFloat(3)); result.add(item); } rs.close(); return result; }; return execute(sc, cb); } public List<Map<String, ?>> getCountGlossToSumFreqRatio() { String sql = "SELECT count_gloss, sum_freq, freq_ratio FROM public.v_count_gloss_to_sum_freq"; CustomPreparedStatementCreator sc = new CustomPreparedStatementCreator(sql) {}; PreparedStatementCallback<List<Map<String, ?>>> cb = s -> { ResultSet rs = s.executeQuery(); List<Map<String, ?>> result = new ArrayList<>(); Map<String, Object> item; while (rs.next()) { item = new LinkedHashMap<>(); item.put("countGloss", rs.getInt(1)); item.put("sumFreq", rs.getInt(2)); item.put("freqRatio", rs.getFloat(3)); result.add(item); } return result; }; return execute(sc, cb); } }