Guest User

Untitled

a guest
Apr 8th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1. const express = require('express')
  2. const knex = require('knex')
  3. const server = express()
  4.  
  5. const knexconfig = {
  6. client: 'mysql',
  7. connection: {
  8. host: '---somehost---',
  9. user: '---someuser---',
  10. password: '---somepaswd',
  11. database: '---somedatabase---'
  12. }
  13. }
  14.  
  15. const mysql = knex(knexconfig)
  16.  
  17. const data = async (res) => {
  18. const raw = await mysql
  19. .table('evals')
  20. .join('eval_answers','evals.answer_id','=','eval_answers.id')
  21. .join('eval_questions','eval_answers.question_id','=','eval_questions.id')
  22. .join('eval_criterias','evals.criteria_id','=','eval_criterias.id')
  23. .join('profiles','eval_answers.user_id','=','profiles.user_id')
  24. .join('profile_registrants','eval_answers.user_id','=','profile_registrants.user_id')
  25. .whereNotIn('profiles.user_id', [
  26. ...somethings...
  27. ])
  28. .select(
  29. 'profiles.user_id',
  30. 'eval_questions.id',
  31. 'eval_criterias.name',
  32. 'eval_criterias.percentage',
  33. 'evals.score',
  34. // profile
  35. 'profiles.citizen_id',
  36. 'profiles.first_name',
  37. 'profiles.last_name',
  38. 'profiles.nickname',
  39. 'profiles.congenital_diseases',
  40. 'profiles.allergic_foods',
  41. 'profiles.congenital_drugs',
  42. 'profiles.gender_id',
  43. 'profile_registrants.edu_name',
  44. 'profile_registrants.edu_lv',
  45. 'profile_registrants.edu_major',
  46. 'profile_registrants.edu_gpax',
  47. 'profile_registrants.known_via',
  48. 'profile_registrants.activities',
  49. 'profile_registrants.skill_computer',
  50. 'profile_registrants.past_camp',
  51. 'profile_registrants.tell_wipper',
  52. )
  53.  
  54. const data = {}
  55.  
  56. Promise.all(raw.map(r => {
  57. try {
  58. data[r.user_id] = {
  59. ...data[r.user_id],
  60. profile: {
  61. citizen_id: r.citizen_id,
  62. fullname: `${r.first_name} ${r.last_name}`,
  63. nickname: r.nickname,
  64. congenital_diseases: r.congenital_diseases,
  65. allergic_foods: r.allergic_foods,
  66. congenital_drugs: r.congenital_drugs,
  67. gender: r.gender_id === 1 ? 'male' : 'female', // 1 - man, 2 - girl
  68. edu_name: r.edu_name,
  69. edu_lv: r.edu_lv,
  70. edu_major: r.edu_major,
  71. edu_gpax: r.edu_gpax,
  72. known_via: r.known_via,
  73. activities: r.activities,
  74. skill_computer: r.skill_computer,
  75. past_camp: r.past_camp,
  76. // tell_wipper: r.tell_wipper,
  77. },
  78. [`question-${r.id}`]: [
  79. ...[...data[r.user_id][`question-${r.id}`],
  80. {
  81. score: r.score,
  82. criteria: r.name,
  83. percentage: r.percentage
  84. }],
  85. ]
  86. }
  87. } catch (er) {
  88. data[r.user_id] = {
  89. ...data[r.user_id],
  90. profile: {
  91. citizen_id: r.citizen_id,
  92. fullname: `${r.first_name} ${r.last_name}`,
  93. nickname: r.nickname,
  94. congenital_diseases: r.congenital_diseases,
  95. allergic_foods: r.allergic_foods,
  96. congenital_drugs: r.congenital_drugs,
  97. gender: r.gender_id === 1 ? 'male' : 'female', // 1 - man, 2 - girl
  98. },
  99. [`question-${r.id}`]: [
  100. {
  101. score: r.score,
  102. criteria: r.name,
  103. percentage: r.percentage
  104. }
  105. ]
  106. }
  107. }
  108. })).then(() => {
  109. result = []
  110.  
  111. checker = [0,3,4,5,3,3]
  112.  
  113. Promise.all(Object.keys(data)
  114. .map( async d => {
  115. let sum_score = 0
  116. let sum_hscore = 0
  117. let q = [0,0,0,0,0,0]
  118. for(i = 1; i <= 5; i ++) {
  119. try {
  120. let communication = data[d][`question-${i}`]
  121. .filter(s => s.criteria === 'communication')
  122. .reduce((sum, s) => sum + (s.score * s.percentage / 100), 0)
  123. console.log(`question-${i}: commu:` + communication / checker[i])
  124. let intelligent = data[d][`question-${i}`]
  125. .filter(s => s.criteria === 'intelligent')
  126. .reduce((sum, s) => sum + (s.score * s.percentage / 100), 0)
  127. console.log(`question-${i}: intelligent:` + intelligent / checker[i])
  128. let creative = data[d][`question-${i}`]
  129. .filter(s => s.criteria === 'creative')
  130. .reduce((sum, s) => sum + (s.score * s.percentage / 100), 0)
  131. console.log(`question-${i}: creative:` + creative / checker[i])
  132.  
  133. // sum score
  134. let sum_q_score = (communication / checker[i]) + (intelligent / checker[i]) + (creative / checker[i])
  135. console.log(`question-${i}: ${sum_q_score}`)
  136. sum_score += sum_q_score
  137. sum_hscore += 1/sum_q_score
  138.  
  139. // set score
  140. q[i] = sum_q_score
  141. } catch (err) {
  142. continue
  143. }
  144. }
  145.  
  146. console.log(sum_score / 5)
  147. result = [
  148. ...result,
  149. {
  150. 'WIP_ID': d,
  151. ...data[d].profile,
  152. // 'Q1': q[1],
  153. // 'Q2': q[2],
  154. // 'Q3': q[3],
  155. // 'Q4': q[4],
  156. // 'Q5': q[5],
  157. 'MEAN': sum_score /5,
  158. 'H_MEAN': 5/sum_hscore
  159. }
  160. ]
  161. })).then(() => {
  162.  
  163.  
  164. res.send(`<html><body><table>
  165. <thead>
  166. ${
  167. `<tr>${Object.keys(result[0]).map(k => `<th>${k}</th>`).join('')}</tr>`
  168. }
  169. </thead>
  170. <tbody>
  171. ${
  172. result.map(r => (`<tr>${Object.keys(r).map(k => `<td>${r[k]}</td>`).join('')}</tr>`)).join('')
  173. }
  174. </tbody>
  175. </table></body></html>`)
  176. return
  177. })
  178.  
  179. })
  180. }
  181.  
  182.  
  183.  
  184. server.get('/', (req, res) => {
  185. data(res)
  186. // res.send(data)
  187. })
  188.  
  189. server.listen(10000)
Add Comment
Please, Sign In to add comment