Преглед на файлове

refactor: 联动 JSON 数据格式化特殊处理

modood преди 7 години
родител
ревизия
ebfc992b47
променени са 1 файла, в които са добавени 86 реда и са изтрити 33 реда
  1. 86 33
      lib/format.js

+ 86 - 33
lib/format.js

@@ -10,22 +10,40 @@ const fField = cField.concat('children')
  * @author   https://github.com/modood
  * @datetime 2018-02-01 22:08
  */
+
 exports.getAddressPC = async () => {
-  const r = await Province.findAll({
-    include: [{ model: City }] })
+  const res = await Province.findAll({
+    include: [{ model: City,
+      include: [{ model: Area }] }] })
 
-  const count = r.length
+  const count = res.length
   let index = 0
 
-  return _.map(r, p => {
+  // 特殊处理:出于实用性考虑,过滤没有太大用处的二级名称,
+  // 并使用其第三级(县级)补进
+  const f = ['市辖区', '县', '省直辖县级行政区划', '自治区直辖县级行政区划']
+
+  const r = {}
+  const rC = _.map(res, p => {
     index++
-    const { code, name } = p.dataValues
+    const pd = p.dataValues
+    const { code, name } = pd
     log(index, count, code, name, 2)
-    p.dataValues.children = _.map(p.cities, c =>
-      _.pick(c.dataValues, cField))
-
-    return _.pick(p.dataValues, fField)
+    const arr = []
+    pd.children = _.map(_.filter(p.cities, c => {
+      const { dataValues: { name }, areas } = c
+      if (f.includes(name)) {
+        arr.push(..._.map(areas, a => _.pick(a.dataValues, cField)))
+        return false
+      }
+      return true
+    }), c => _.pick(c.dataValues, cField))
+    pd.children.push(...arr)
+
+    r[pd.name] = pd.children.map(c => c.name)
+    return _.pick(pd, fField)
   })
+  return [r, rC]
 }
 
 /**
@@ -34,27 +52,51 @@ exports.getAddressPC = async () => {
  * @datetime 2018-02-01 22:13
  */
 exports.getAddressPCA = async () => {
-  const r = await Province.findAll({
+  const res = await Province.findAll({
     include: [{ model: City,
       include: [{ model: Area }] }] })
 
-  const count = r.length
+  // 特殊处理:中山市、东莞市、儋州市和嘉峪关市没有第三级(县级),
+  // 嘉峪关市有第三级,但是有且只有一个(市辖区:620201),
+  // 出于实用性考虑,使用第四级(乡级)补进
+  const f = ['4419', '4420', '4604', '6202']
+  const streets = await Promise.all(
+    _.map(f, cityCode => Street.findAll({ where: { cityCode } })))
+
+  const count = res.length
   let index = 0
 
-  return _.map(r, p => {
+  const r = {}
+  const rC = _.map(res, p => {
     index++
-    const { code, name } = p.dataValues
+    const pd = p.dataValues
+    const { code, name } = pd
+    r[pd.name] = {}
     log(index, count, code, name, 3)
-    p.dataValues.children = _.map(p.cities, c => {
-      const { code, name } = c.dataValues
+    pd.children = _.map(p.cities, c => {
+      const cd = c.dataValues
+      const { code, name } = cd
       log(index, count, code, name, 3)
-      c.dataValues.children = _.map(c.areas, a =>
-        _.pick(a.dataValues, cField))
 
-      return _.pick(c.dataValues, fField)
+      const idx = f.indexOf(code)
+      if (idx !== -1) {
+        cd.children = _.map(streets[idx], s => {
+          // 特殊处理:第四级(乡级)过滤掉“办事处”后缀
+          const sd = s.dataValues
+          sd.name = sd.name.replace('办事处', '')
+          return _.pick(sd, cField)
+        })
+      } else {
+        cd.children = _.map(c.areas, a =>
+          _.pick(a.dataValues, cField))
+      }
+
+      r[pd.name][cd.name] = _.map(cd.children, i => i.name)
+      return _.pick(cd, fField)
     })
-    return _.pick(p.dataValues, fField)
+    return _.pick(pd, fField)
   })
+  return [r, rC]
 }
 
 /**
@@ -63,33 +105,44 @@ exports.getAddressPCA = async () => {
  * @datetime 2018-02-02 09:51
  */
 exports.getAddressPCAS = async () => {
-  const r = await Province.findAll({
+  const res = await Province.findAll({
     include: [{ model: City,
       include: [{ model: Area,
         include: [{ model: Street }] }] }] })
 
-  const count = r.length
+  const count = res.length
   let index = 0
 
-  return _.map(r, p => {
+  const r = {}
+  const rC = _.map(res, p => {
     index++
-    const { code, name } = p.dataValues
+    const pd = p.dataValues
+    const { code, name } = pd
+    r[pd.name] = {}
     log(index, count, code, name, 4)
-    p.dataValues.children = _.map(p.cities, c => {
-      const { code, name } = c.dataValues
+    pd.children = _.map(p.cities, c => {
+      const cd = c.dataValues
+      const { code, name } = cd
+      r[pd.name][cd.name] = {}
       log(index, count, code, name, 4)
-      c.dataValues.children = _.map(c.areas, a => {
-        const { code, name } = a.dataValues
+      cd.children = _.map(c.areas, a => {
+        const ad = a.dataValues
+        const { code, name } = ad
         log(index, count, code, name, 4)
-        a.dataValues.children = _.map(a.streets, s =>
-          _.pick(s.dataValues, cField))
-
-        return _.pick(a.dataValues, fField)
+        ad.children = _.map(a.streets, s => {
+          // 特殊处理:第四级(乡级)过滤掉“办事处”后缀
+          const sd = s.dataValues
+          sd.name = sd.name.replace('办事处', '')
+          return _.pick(sd, cField)
+        })
+        r[pd.name][cd.name][ad.name] = _.map(ad.children, s => s.name)
+        return _.pick(ad, fField)
       })
-      return _.pick(c.dataValues, fField)
+      return _.pick(cd, fField)
     })
-    return _.pick(p.dataValues, fField)
+    return _.pick(pd, fField)
   })
+  return [r, rC]
 }
 
 function log (index, total, code, name, type) {