statistics.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const _ = require('lodash')
  2. const app = require('./app')
  3. app.service('statistics', function(api) {
  4. const chart = ({
  5. rows,
  6. seriesField,
  7. dataField,
  8. labelsField
  9. }) => {
  10. const labels = _.chain(rows).map(x => x[labelsField]).uniq().value()
  11. const series = _.chain(rows).map(x => x[seriesField]).uniq().value()
  12. const seriesData = _.chain(rows)
  13. .groupBy(x => x[seriesField])
  14. .toPairs()
  15. .map(([key, rows]) => [
  16. key,
  17. _.chain(rows)
  18. .map(row => [row[labelsField], row[dataField]])
  19. .fromPairs()
  20. .value()
  21. ])
  22. .fromPairs()
  23. .value()
  24. data = series.map(s => {
  25. const sdata = seriesData[s]
  26. return labels.map(l => sdata[l])
  27. })
  28. return {labels, series, data}
  29. }
  30. this.efficiency = async () => {
  31. const rows = await api.statistics()
  32. return {
  33. delivery: chart({
  34. rows,
  35. seriesField: 'key',
  36. dataField: 'delivered',
  37. labelsField: 'date'
  38. }),
  39. efficiency: chart({
  40. rows,
  41. seriesField: 'key',
  42. dataField: 'efficiency',
  43. labelsField: 'date'
  44. })
  45. }
  46. }
  47. })