area.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. const sequelize = require('sequelize');
  2. const express = require('express');
  3. const _ = require('lodash');
  4. const { query, body } = require('express-validator');
  5. const { onSuccess, fill } = require('../../../utils');
  6. const { limit } = require('../../config');
  7. const check = require('../../../middleware/check');
  8. const Area = require('../../../db/models/area');
  9. const Sample = require('../../../db/models/sample');
  10. const { Op } = require('sequelize');
  11. const router = express.Router();
  12. async function fillSingle(data) {
  13. return data;
  14. }
  15. /**
  16. * showdoc
  17. * @catalog v1/商家/地区
  18. * @title ai地区列表
  19. * @description ai地区列表接口
  20. * @method GET
  21. * @url /business/area/ai
  22. * @param type 1 integer 1省2市3地区
  23. * @param provinceId 0 integer 省id
  24. * @param cityId 0 integer 市id
  25. * @return {"code":0, "count":1, "data": []}
  26. * @return_param id integer id
  27. * @return_param name string 地区名
  28. * @return_param cityId integer 市id
  29. * @return_param provinceId integer 省id
  30. * @return_param type integer 1省2市3地区
  31. * @return_param pinyin string 首字母
  32. * @return_param createdAt date -
  33. * @return_param updatedAt date -
  34. * @remark
  35. * @number
  36. */
  37. router.get('/ai', async (req, res) => {
  38. const { page = 0, type } = req.query;
  39. const where = _.omit(req.query, ['page']);
  40. const info = onSuccess();
  41. if (type === '1') {
  42. // const psArr = await Sample.findAll({
  43. // distinct:['province_id']
  44. // attributes: [[sequelize.fn('DISTINCT', sequelize.col('province_id')), 'pid']],
  45. // });
  46. const psArr = await Sample.aggregate('provinceId', 'DISTINCT', { plain: false });
  47. // const psArr = await Sample.findAll({
  48. // attributes: ['province_id'],
  49. // group: ['province_id'],
  50. // });
  51. console.log(psArr);
  52. where.id = { [Op.in]: psArr.map(i => i.DISTINCT) };
  53. } else if (type === '2') {
  54. // const psArr = await Sample.findAll({
  55. // attributes: ['city_id'],
  56. // group: ['city_id'],
  57. // });
  58. const psArr = await Sample.aggregate('cityId', 'DISTINCT', { plain: false });
  59. where.id = { [Op.in]: psArr.map(i => i.DISTINCT) };
  60. } else {
  61. // const psArr = await Sample.findAll({
  62. // attributes: ['region_id'],
  63. // group: ['region_id'],
  64. // });
  65. const psArr = await Sample.aggregate('regionId', 'DISTINCT', { plain: false });
  66. where.id = { [Op.in]: psArr.map(i => i.DISTINCT) };
  67. }
  68. info.data = await Area.findAll({ where, all: true });
  69. info.data = await fill(info.data, fillSingle);
  70. if (!page) {
  71. info.count = await Area.count({ where });
  72. }
  73. res.send(info);
  74. });
  75. /**
  76. * showdoc
  77. * @catalog v1/商家/地区
  78. * @title 地区详情
  79. * @description
  80. * @method GET
  81. * @url /business/area/:id
  82. * @param :id 1 STRING 详情ID
  83. * @return {"code":0, "data": {}}
  84. * @return_param id integer id
  85. * @return_param name string 地区名
  86. * @return_param cityId integer 市id
  87. * @return_param provinceId integer 省id
  88. * @return_param type integer 1省2市3地区
  89. * @return_param pinyin string 首字母
  90. * @return_param createdAt date -
  91. * @return_param updatedAt date -
  92. * @remark
  93. * @number
  94. */
  95. router.get('/:id', async (req, res) => {
  96. let data = await Area.findOne({ where: req.params });
  97. data = await fill(data, fillSingle);
  98. res.send(onSuccess(data));
  99. });
  100. module.exports = router;