formatRecordRow.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const Redis = require('../DataBase/Redis.js')
  2. const jkesRedisKeys = require('./redisKeys.js')
  3. async function getLepaoSchedule(recordId) {
  4. const schedule = await Redis.get(jkesRedisKeys.lepaoSchedule(recordId))
  5. return schedule ? JSON.parse(schedule) : null
  6. }
  7. /**
  8. * 将 lepao_record.result(JKES end 接口 info)解析为列表/详情用的摘要字段
  9. */
  10. async function enrichLepaoRecordRow(row) {
  11. let out = { ...row }
  12. if (row.id != null && Number(row.state) === 0) {
  13. const schedule = await getLepaoSchedule(row.id)
  14. out.lepao_schedule = schedule
  15. out.schedule = schedule
  16. }
  17. let jkes = null
  18. try {
  19. const r =
  20. typeof row.result === 'object' && row.result !== null
  21. ? row.result
  22. : JSON.parse(row.result || '{}')
  23. const rawDistance = r.distance != null ? Number(r.distance) : NaN
  24. const distanceKm =
  25. Number.isFinite(rawDistance) && rawDistance > 0
  26. ? Math.round((rawDistance / 1000) * 1000) / 1000
  27. : null
  28. jkes = {
  29. distance_km: distanceKm,
  30. use_time_sec: r.useTime != null ? Number(r.useTime) : null,
  31. run_status: r.status?.value ?? r.status,
  32. campus_status: r.dataStatus?.value ?? r.dataStatus,
  33. begin_time: r.beginTime,
  34. end_time: r.endTime
  35. }
  36. } catch {
  37. jkes = null
  38. }
  39. out.jkes_record = jkes
  40. return out
  41. }
  42. function stripInternalRecordId(row) {
  43. if (!row || typeof row !== 'object') return row
  44. const { id, ...rest } = row
  45. return rest
  46. }
  47. async function enrichLepaoRecordRowForApi(row) {
  48. const enriched = await enrichLepaoRecordRow(row)
  49. return stripInternalRecordId(enriched)
  50. }
  51. module.exports = { enrichLepaoRecordRow, enrichLepaoRecordRowForApi, stripInternalRecordId }