|
@@ -0,0 +1,117 @@
|
|
|
+const _ = require('lodash')
|
|
|
+
|
|
|
+const { Province, City, Area, Street } = require('./sqlite')
|
|
|
+
|
|
|
+const cField = ['code', 'name']
|
|
|
+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 count = r.length
|
|
|
+ let index = 0
|
|
|
+
|
|
|
+ return _.map(r, p => {
|
|
|
+ index++
|
|
|
+ const { code, name } = p.dataValues
|
|
|
+ log(index, count, code, name, 2)
|
|
|
+ p.dataValues.children = _.map(p.cities, c =>
|
|
|
+ _.pick(c.dataValues, cField))
|
|
|
+
|
|
|
+ return _.pick(p.dataValues, fField)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取省市区三级联动数据
|
|
|
+ * @author https://github.com/modood
|
|
|
+ * @datetime 2018-02-01 22:13
|
|
|
+ */
|
|
|
+exports.getAddressPCA = async () => {
|
|
|
+ const r = await Province.findAll({
|
|
|
+ include: [{ model: City,
|
|
|
+ include: [{ model: Area }] }] })
|
|
|
+
|
|
|
+ const count = r.length
|
|
|
+ let index = 0
|
|
|
+
|
|
|
+ return _.map(r, p => {
|
|
|
+ index++
|
|
|
+ const { code, name } = p.dataValues
|
|
|
+ log(index, count, code, name, 3)
|
|
|
+ p.dataValues.children = _.map(p.cities, c => {
|
|
|
+ const { code, name } = c.dataValues
|
|
|
+ log(index, count, code, name, 3)
|
|
|
+ c.dataValues.children = _.map(c.areas, a =>
|
|
|
+ _.pick(a.dataValues, cField))
|
|
|
+
|
|
|
+ return _.pick(c.dataValues, fField)
|
|
|
+ })
|
|
|
+ return _.pick(p.dataValues, fField)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取省市区镇四级联动数据
|
|
|
+ * @author https://github.com/modood
|
|
|
+ * @datetime 2018-02-02 09:51
|
|
|
+ */
|
|
|
+exports.getAddressPCAS = async () => {
|
|
|
+ const r = await Province.findAll({
|
|
|
+ include: [{ model: City,
|
|
|
+ include: [{ model: Area,
|
|
|
+ include: [{ model: Street }] }] }] })
|
|
|
+
|
|
|
+ const count = r.length
|
|
|
+ let index = 0
|
|
|
+
|
|
|
+ return _.map(r, p => {
|
|
|
+ index++
|
|
|
+ const { code, name } = p.dataValues
|
|
|
+ log(index, count, code, name, 4)
|
|
|
+ p.dataValues.children = _.map(p.cities, c => {
|
|
|
+ const { code, name } = c.dataValues
|
|
|
+ log(index, count, code, name, 4)
|
|
|
+ c.dataValues.children = _.map(c.areas, a => {
|
|
|
+ const { code, name } = a.dataValues
|
|
|
+ log(index, count, code, name, 4)
|
|
|
+ a.dataValues.children = _.map(a.streets, s =>
|
|
|
+ _.pick(s.dataValues, cField))
|
|
|
+
|
|
|
+ return _.pick(a.dataValues, fField)
|
|
|
+ })
|
|
|
+ return _.pick(c.dataValues, fField)
|
|
|
+ })
|
|
|
+ return _.pick(p.dataValues, fField)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function log (index, total, code, name, type) {
|
|
|
+ if (index >= 0 && index <= 9) index = `0${index}`
|
|
|
+ const clen = code.length
|
|
|
+
|
|
|
+ if ((type === 3 && clen === 2) ||
|
|
|
+ (type === 4 && clen === 4)) code = `${code} `
|
|
|
+ else if (type === 4 && clen === 2) code = `${code} `
|
|
|
+
|
|
|
+ let text = ''
|
|
|
+ switch (type) {
|
|
|
+ case 2:
|
|
|
+ text = '正在格式化省市二级联动数据'
|
|
|
+ break
|
|
|
+ case 3:
|
|
|
+ text = '正在格式化省市区三级联动数据,请耐心等候'
|
|
|
+ break
|
|
|
+ case 4:
|
|
|
+ text = '正在格式化省市区镇四级联动数据,该步骤比较耗时,请耐心等候'
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(`[${index}/${total}]${text} ${code} ${name}`)
|
|
|
+}
|