|
@@ -0,0 +1,168 @@
|
|
|
|
+const fs = require('fs')
|
|
|
|
+const path = require('path')
|
|
|
|
+const XLSX = require('xlsx')
|
|
|
|
+// const Rsync = require('rsync')
|
|
|
|
+const {MongoConf} = require('./config')
|
|
|
|
+
|
|
|
|
+const MongoClient = require('mongodb').MongoClient
|
|
|
|
+const assert = require('assert')
|
|
|
|
+
|
|
|
|
+const dbIns = MongoConf['R2']
|
|
|
|
+
|
|
|
|
+const connStr = `mongodb://${dbIns.host}:${dbIns.port}`
|
|
|
|
+const connOpt = {
|
|
|
|
+ auth : {
|
|
|
|
+ user: dbIns.username,
|
|
|
|
+ password: dbIns.password,
|
|
|
|
+ },
|
|
|
|
+ authSource: dbIns.dbname,
|
|
|
|
+ authMechanism: "SCRAM-SHA-1",
|
|
|
|
+ useNewUrlParser: true
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const dataPath = "../assets/scripts/data"
|
|
|
|
+const dataPrefix = "allstar_"
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * excel表转换为json对象
|
|
|
|
+ * @param {String} filename 文件名
|
|
|
|
+ */
|
|
|
|
+const getSheet = function (filename) {
|
|
|
|
+ let filePath = path.join(__dirname, "/excel", filename)
|
|
|
|
+ // let buf = fs.readFile(filePath);
|
|
|
|
+ let workbook = XLSX.readFileSync(filePath)
|
|
|
|
+ let sheets = workbook.SheetNames
|
|
|
|
+ let sheetsObj = {}
|
|
|
|
+
|
|
|
|
+ sheets.forEach(n => {
|
|
|
|
+ let ws = workbook.Sheets[n]
|
|
|
|
+ let def = XLSX.utils.sheet_to_json(ws, {range: 0, header: 1})
|
|
|
|
+ let typeMap = {}
|
|
|
|
+ let typeArr = def[0]
|
|
|
|
+ let keyArr = def[2]
|
|
|
|
+ keyArr.forEach((item, index) => {
|
|
|
|
+ typeMap[item] = typeArr[index]
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ let res = XLSX.utils.sheet_to_json(ws, {range: 2})
|
|
|
|
+ res.forEach(item => {
|
|
|
|
+ for(let i in item) {
|
|
|
|
+ item[i] = formatType(item[i], typeMap[i])
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ sheetsObj[n] = res
|
|
|
|
+ })
|
|
|
|
+ return sheetsObj
|
|
|
|
+
|
|
|
|
+ // console.log(XLSX.utils.sheet_to_json(ws));
|
|
|
|
+ // console.log(workbook.SheetNames);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 写入json内容到客户端assets目录
|
|
|
|
+ * @param {String} filename 文件名
|
|
|
|
+ * @param {Object} content json内容
|
|
|
|
+ */
|
|
|
|
+const writeToAssets = function (filename, content) {
|
|
|
|
+ let writeFileName = filename.replace(/\.xlsx|\.xls/, '.js').replace(dataPrefix, "")
|
|
|
|
+ let writePath = path.join(__dirname, dataPath, writeFileName)
|
|
|
|
+ fs.writeFileSync(writePath, 'module.exports=' + JSON.stringify(content))
|
|
|
|
+ // console.log(JSON.stringify(content, null, 2));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 配置表生成的json内容rsync到静态资源服务器
|
|
|
|
+ * @param {String} filename 文件名
|
|
|
|
+ * @param {Object} content json内容
|
|
|
|
+ */
|
|
|
|
+const writeJson = function (filename, content) {
|
|
|
|
+ let writeFileName = filename.replace(/\.xlsx|\.xls/, '.json').replace(dataPrefix, "")
|
|
|
|
+ let writePath = path.join(__dirname, "/sheet", writeFileName)
|
|
|
|
+
|
|
|
|
+ fs.writeFileSync(writePath, JSON.stringify(content))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const formatType = function(target, type) {
|
|
|
|
+ let _type = type.toLowerCase()
|
|
|
|
+ switch (_type) {
|
|
|
|
+ case 'integer':
|
|
|
|
+ target = parseInt(target, 10)
|
|
|
|
+ break;
|
|
|
|
+ case 'double':
|
|
|
|
+ target = parseFloat(target)
|
|
|
|
+ break;
|
|
|
|
+ case 'string':
|
|
|
|
+ target = target.toString()
|
|
|
|
+ break;
|
|
|
|
+ case 'object':
|
|
|
|
+ target = JSON.parse(target)
|
|
|
|
+ break;
|
|
|
|
+ case 'array':
|
|
|
|
+ target = JSON.parse(target)
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ return target
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const init = function () {
|
|
|
|
+ fs.readdir("./excel", (err, file) => {
|
|
|
|
+ file.forEach(n => {
|
|
|
|
+ if(n.match(/\~\$/)) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ let ws = getSheet(n)
|
|
|
|
+ let sheetName = n.replace(/\.xlsx|\.xls/, "")
|
|
|
|
+
|
|
|
|
+ let target
|
|
|
|
+ if(ws.length > 0) {
|
|
|
|
+ //单个表
|
|
|
|
+ // ws.forEach(n => {
|
|
|
|
+ // if(typeof n['id'] != undefined) {
|
|
|
|
+ // n['_id'] = n['id']
|
|
|
|
+ // }
|
|
|
|
+ // })
|
|
|
|
+
|
|
|
|
+ target = ws
|
|
|
|
+ } else {
|
|
|
|
+ //多个表合拼成一个Array
|
|
|
|
+ let _array = []
|
|
|
|
+ for(let i in ws) {
|
|
|
|
+ _array = _array.concat(ws[i])
|
|
|
|
+ }
|
|
|
|
+ target = _array
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MongoClient.connect(connStr, connOpt, (err, client) => {
|
|
|
|
+ if(err) {
|
|
|
|
+ console.error(err.message)
|
|
|
|
+ } else {
|
|
|
|
+ var db = client.db(dbIns.dbname)
|
|
|
|
+ var collection = db.collection(sheetName)
|
|
|
|
+ collection.drop(null, () => {
|
|
|
|
+ collection.insert(target, () => {
|
|
|
|
+ console.log(`成功更新配置表:${sheetName}`)
|
|
|
|
+ client.close()
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ //把生成的js写入客户端assets目录
|
|
|
|
+ let wsKeys = Object.keys(ws)
|
|
|
|
+ if(wsKeys.length == 1) {
|
|
|
|
+ writeToAssets(n, ws[wsKeys[0]])
|
|
|
|
+ writeJson(n, ws[wsKeys[0]])
|
|
|
|
+ } else {
|
|
|
|
+ writeToAssets(n, ws)
|
|
|
|
+ writeJson(n, ws)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ // process.exit()
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+init()
|