Commit 5e2928b7 by lixinming

no message

parent 31c998ab
......@@ -30,7 +30,7 @@ export function planarArrBecomeKeyValueData(dataList, titleInY = false) {
}
export function planarArrBecomeChartData(dataList) {
{"图表名称":{unit:"", dataInfo:[{key:"数据key", value:"数据值"}, {key:"数据key", value:"数据值"} ] } }
// {"图表名称":{unit:"", dataInfo:[{key:"数据key", value:"数据值"}, {key:"数据key", value:"数据值"} ] } }
}
......
let fs = require('fs');
let apiInfoList = [
{name:"FuHuaZaiTi", dataList:[
{name:"孵化载体", len:4, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name:"孵化载体占比数据", len:2, type:"键值", strType:"c", strLen:5, valLen:1, haveUnit:true},
{name:"孵化载体数量趋势", len:11, type:"柱状"},
{name:"孵化载体投资主体", len:3, type:"键值", strType:"c",strLen:2, valLen:2, haveUnit:false},
{name:"孵化载体行业分类", len:5, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name:"孵化载体运营", len:5, type:"键值", strType:"c",strLen:2, valLen:3, haveUnit:false},
{name:"平均营收趋势", len:7, type:"柱状"},
{name:"重要评价指标", len:4, type:"键值", strType:"c",strLen:5, valLen:3, haveUnit:false},
{name:"服务资源", len:8, type:"键值", strType:"c",strLen:10, valLen:3, haveUnit:false},
{name:"政策服务", len:2, type:"键值", strType:"c",strLen:3, valLen:4, haveUnit:false},
{name:"地图数据", len:100, type:"地图"}
]},
{name:"KeJiJinRong", dataList:[
{name:"上市企业板块分布", len:8, type:"键值", strType:"c",strLen:4, valLen:3, haveUnit:true},
{name:"科创版企业", len:10, type:"键值", strType:"c",strLen:6, valLen:2, haveUnit:true},
{name:"挂牌企业", len:4, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name:"2020年企业融资情况", len:3, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name:"2020年企业上市情况", len:3, type:"键值", strType:"c",strLen:5, valLen:2, haveUnit:false},
{name:"融资金额趋势", len:17, type:"柱状"},
{name:"上市企业行业分布", len:5, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name:"创投机构", len:4, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:true},
{name:"融资企业行业分布", len:8, type:"键值", strType:"c",strLen:7, valLen:2, haveUnit:true},
{name:"企业融资阶段分布", len:12, type:"键值", strType:"c",strLen:6, valLen:3, haveUnit:true},
{name:"金融产品担保方式占比", len:7, type:"键值", strType:"c",strLen:6, valLen:2, haveUnit:true},
{name:"中央球展示数据", len:5, type:"键值", strType:"c",strLen:5, valLen:3, haveUnit:true}
]},
{name:"QiYePeiYu", dataList:[
{name:"企业特征", len:5, type:"键值", strType:"c",strLen:4, valLen:3, haveUnit:false},
{name:"代表企业", len:0, type:""},
{name:"海外项目", len:7, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:true},
{name:"人才引进", len:7, type:"键值", strType:"c",strLen:6, valLen:4, haveUnit:true},
{name:"营业收入TOP5", len:5, type:"键值", strType:"c",strLen:12, valLen:1, haveUnit:true},
{name:"净利润TOP5", len:5, type:"键值", strType:"c",strLen:12, valLen:1, haveUnit:true},
{name:"研发投入TOP5", len:5, type:"键值", strType:"c",strLen:12, valLen:1, haveUnit:true},
{name:"入孵企业数量趋势", len:11, type:"柱状"},
{name:"孵化器2020入驻企业数量排名", len:5, type:"键值", strType:"c",strLen:10, valLen:3, haveUnit:false},
{name:"运营指标趋势", len:17, type:"柱状"},
{name:"企业运营情况", len:5, type:"键值", strType:"c",strLen:5, valLen:3, haveUnit:true},
{name:"企业运营概况", len:5, type:"键值", strType:"c",strLen:4, valLen:5, haveUnit:true},
{name:"科技创新", len:5, type:"键值", strType:"c",strLen:4, valLen:5, haveUnit:false},
{name:"发明专利申请与授权数比例", len:6, type:"柱状"},
{name:"高新技术企业数据概况", len:3, type:"键值", strType:"c",strLen:4, valLen:3, haveUnit:true},
{name:"高新技术企业培育", len:5, type:"柱状"},
{name:"企业融资", len:4, type:"键值", strType:"c",strLen:4, valLen:3, haveUnit:false},
{name:"2020四季度重大融资事件", len:5, type:"键值", strType:"c",strLen:8, valLen:3, haveUnit:true}
]},
{name:"RongTongHua", dataList:[
{name: "大中小企业融通发展联盟", len:2, type:"键值", strType:"c",strLen:4, valLen:3, haveUnit:false},
{name: "主要成效", len:5, type:"键值", strType:"c",strLen:10, valLen:3, haveUnit:false},
{name: "创业加速营", len:1, type:"键值", strType:"c",strLen:7, valLen:1, haveUnit:false},
{name: "大企业开放式创新平台", len:3, type:"键值", strType:"c",strLen:3, valLen:1, haveUnit:false},
{name: "大企业服务和成果", len:4, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name: "地图数据", len:22, type:"地图"}
]},
{name:"ShuangChuangShengTai", dataList:[
{name:"双创集群", len:7, type:"键值", strType:"c",strLen:8, valLen:3, haveUnit:true},
{name:"孵化器增长趋势", len:6, type:"柱状"},
{name:"企业培育", len:3, type:"键值", strType:"c",strLen:6, valLen:3, haveUnit:true},
{name:"行业分布", len:5, type:"键值", strType:"c",strLen:4, valLen:3, haveUnit:true},
{name:"张江大中小企业融通发展联盟", len:2, type:"键值", strType:"c",strLen:4, valLen:2, haveUnit:false},
{name:"大企业开放式创新平台", len:3, type:"键值", strType:"c",strLen:6, valLen:1, haveUnit:true},
{name:"科技金融", len:3, type:"键值", strType:"c",strLen:6, valLen:3, haveUnit:true},
{name:"股权融资趋势", len:6, type:"柱状"},
{name:"地图数据", len:8, type:"地图"}
]}
];
function createBiz() {
apiInfoList.forEach(apiInfo=>{
let path = `./biz/${apiInfo.name}.ts`;
fs.access(path, (err) => {
if (!err) {
console.error(path, "文件已存在");
return;
}
fs.writeFileSync(path, getBizFileData(apiInfo.dataList));
console.log(path, "创建文件成功")
});
})
}
function createRouter() {
let path = `./routers/router.ts`;
fs.access(path, (err) => {
if (!err) {
console.error(path, "文件已存在");
return;
}
fs.writeFileSync(path, getRouterFileData(apiInfoList));
console.log(path, "创建文件成功")
});
}
function getBizFileData(dataList) {
let funStr = "";
let runFunStr = "";
let mockFunStr = "";
dataList.forEach(dataInfo=>{
let subFunStr = ``;
switch(dataInfo.type) {
case "键值" : subFunStr = `mock键值数据模板(${dataInfo.len}, ${dataInfo.strLen}, '${dataInfo.strType}', ${dataInfo.valLen}, ${dataInfo.haveUnit})`; break;
case "柱状" : subFunStr = `mock柱状图数据模板(${dataInfo.len})`; break;
case "地图" : subFunStr = `mock地图数据模板(${dataInfo.len})`; break;
};
funStr +=
`function get${dataInfo.name}() {
return ${subFunStr};
}
`;
runFunStr +=
` ret["${dataInfo.name}"] = get${dataInfo.name}();
`
});
let allData =
`import { mock柱状图数据模板, mock键值数据模板, mock地图数据模板} from "../util/mockData";
export async function getData(req, res) {
let ret:any = {};
${runFunStr}
res.send(ret);
}
${funStr}
`
return allData;
}
function getRouterFileData(apiInfoList) {
let importStr = "";
let listenStr = "";
apiInfoList.forEach(apiInfo=>{
importStr +=
`import * as ${apiInfo.name}Biz from '../biz/${apiInfo.name}';
`
listenStr +=
` httpServer.get('/${apiInfo.name}', asyncHandler(${apiInfo.name}Biz.getData));
`
})
let allDataStr =
`import * as asyncHandler from 'express-async-handler'
${importStr}
export function setRouter(httpServer) {
${listenStr}
}`
return allDataStr;
}
createBiz();
createRouter();
\ No newline at end of file
let fs = require('fs');
const xlsx = require('node-xlsx');
const path = require('path');
//excel的名字
//const excelName = "其他数据模板.xlsx";
// const excelAnalysisName = "其他数据规则.xlsx";
const excelName = "绿色电力数据模板.xlsx";
const excelAnalysisName = "绿色电力解析规则.xlsx";
let typeEnum = {
"柱状数据":1,
"列表数据":1,
"单轴多柱状数据":1,
"双轴多柱状数据":1,
}
function changeDataName(str) {
let result = str.replace(/[()""“”()]/, "_");
for (let i =0; i < 10; i++) {
result = result.replace(/[()""“”()]/, "_");
}
return result;
}
let createBizAndDataConfigMap = {
// "page1": {
// sheetName:"智慧电眼_电力用户数",
// apiList:[
// { type:"键值数据", dataName:"基础数据", title:"基础数据", unit:"inData", total:true, percent:false},
// { type:"双轴多柱状数据", dataName:"用电趋势", title:"用电趋势", unit:{"用户数":"家", "空置率":"%"}, total:true, percent:false},
// { type:"柱状数据", dataName:"用电排序趋势", title:"用电排序趋势", unit:"户", total:true, percent:false},
// { type:"柱状数据", dataName:"企业生产指数", title:"企业生产指数", unit:"户", total:true, percent:false}
// ]
// }
};
//配置解析excel
function analysisConfigExcel() {
const workSheetsFromFile = xlsx.parse(`../res/${excelAnalysisName}`);
let sheetMap = {};
let sheetList = [];
for (let i = 0; i < workSheetsFromFile.length; i++) {
let sheetInfo = workSheetsFromFile[i];
sheetMap[sheetInfo.name] = sheetInfo.data;
sheetList.push(sheetInfo);
}
return sheetMap
}
function createConfig() {
let excelData = analysisConfigExcel();
for (let configSheetName in excelData) {
let data = excelData[configSheetName];
for (let y = 1; y < data.length; y++) {
let valueList = data[y];
let pageName = valueList[0];
let sheetName = valueList[1];
let type = valueList[2];
let dataName = changeDataName(valueList[3]);
let title = valueList[4];
let unit = valueList[5];
let total = valueList[6];
let percent = valueList[7];
let titleList = valueList[8] ? JSON.parse(valueList[8]) : "";
let keyValueObj = valueList[9] ? JSON.parse(valueList[9]) : "" ;
if (!createBizAndDataConfigMap[pageName] ) createBizAndDataConfigMap[pageName] = {sheetName, apiList:[]};
createBizAndDataConfigMap[pageName].apiList.push({ type ,dataName ,title ,unit ,total ,percent, titleList, keyValueObj });
}
}
}
createConfig();
//创建data层
function createData() {
let str = `
import * as path from "path";
import * as fs from "fs";
import { BizError } from "../util/bizError";
import { limitEnteNameString, changeDataName } from "../util/tools";
import { getExcelDataBySheetName, analysisExcelDataOfObject, analysisExcelDataOfMoreObject, analysisExcelDataOfList } from "../util/analysisExcel";`;
for (let pangeName in createBizAndDataConfigMap) {
let { sheetName } = createBizAndDataConfigMap[pangeName];
let ofMoreObjList = [];
let ofObjList = [];
let listDataAnalysisInfo = {};
createBizAndDataConfigMap[pangeName].apiList.forEach( info => {
if (info.type == "双轴多柱状数据" || info.type == "单轴多柱状数据") ofMoreObjList.push(info.dataName);
else if (info.type == "列表数据") listDataAnalysisInfo[info.dataName] = {titleList:info.titleList, keyValueObj:info.keyValueObj};
else ofObjList.push(info.dataName);
});
str += `
export function get${sheetName}() {;
let bolckDataList = getExcelDataBySheetName('${excelName}', '${sheetName}');
let result = {};
let ofMoreObjList = ${JSON.stringify(ofMoreObjList)};
let ofObjList = ${JSON.stringify(ofObjList)};
let listDataAnalysisInfo = ${JSON.stringify(listDataAnalysisInfo)};
for (let i = 0; i < bolckDataList.length; i++) {
let {blockData, blockTitle} = bolckDataList[i];
let changeName = changeDataName(blockTitle);
if (ofMoreObjList.indexOf(changeName) > -1) result[changeName] = analysisExcelDataOfMoreObject(blockData, false);
if (ofObjList.indexOf(changeName) > -1) result[changeName] = analysisExcelDataOfObject(blockData, true, false);
if (listDataAnalysisInfo[changeName]) result[changeName] = analysisExcelDataOfList(blockData, listDataAnalysisInfo[blockTitle].keyValueObj, false);
}
return result;
}`;
}
let path = `./data/analysisExcelData.ts`;
fs.access(path, (err) => {
if (!err) {
console.error(path, "文件已存在");
return;
}
fs.writeFileSync(path, str);
console.log(path, "创建文件成功")
});
}
//创建biz层
function createBiz(){
for (let pageName in createBizAndDataConfigMap) {
let { apiList, sheetName } = createBizAndDataConfigMap[pageName];
let thisBizData = getBizStr(apiList, sheetName);
let path = `./biz/${pageName}.ts`;
fs.access(path, (err) => {
if (!err) {
console.error(path, "文件已存在");
return;
}
fs.writeFileSync(path, thisBizData);
console.log(path, "创建文件成功")
});
}
}
function getBizStr(apiList, sheetName) {
let str = `
import { getChartData, getKeyValue, getListData, getSingleYAndMoreData, getMoreYChartData, objKeyReplace }from "../util/tools";
import { get${sheetName} } from "../data/analysisExcelData";
`;
str += `
export function getData(req, res) {
let ret:any = {};
let excelData:any = get${sheetName}();
`;
apiList.forEach((info, index) => {
let {dataName, unit, total, percent, type, titleList, keyValueObj} = info;
const apiName = `api${index+1}`;
let subStr;
let chartUnit;
switch(type) {
case "键值数据":
subStr = `
let ${dataName}DataAndUnit = objKeyReplace(excelData.${dataName});`;
if (unit == 'inData') {
subStr += `
ret["${apiName}"] = getKeyValue("${dataName}", ${dataName}DataAndUnit.dataMap, ${dataName}DataAndUnit.unitMap, ${total}, ${percent} );`;
} else {
subStr += `
ret["${apiName}"] = getKeyValue("${dataName}", ${dataName}DataAndUnit.dataMap, ${typeof unit == 'boolean' ? unit : `'${unit}'`}, ${total}, ${percent} );`;
}
break;
case "柱状数据":
chartUnit = typeof unit == 'boolean' ? unit : `'${unit}'`;
subStr = `
ret["${apiName}"] = getChartData("${dataName}", excelData.${dataName}, ${chartUnit}, ${percent} );`;
break;
case "列表数据":
subStr = `
ret["${apiName}"] = getListData("${dataName}",excelData.${dataName},${JSON.stringify(titleList)},${JSON.stringify(keyValueObj)});`;
break;
case "单轴多柱状数据":
chartUnit = typeof unit == 'boolean' ? unit : `'${unit}'`;
subStr = `
ret["${apiName}"] = getSingleYAndMoreData("${dataName}", excelData.${dataName}, ${percent}, ${chartUnit});`;
break;
case "双轴多柱状数据":
subStr = `
ret["${apiName}"] = getMoreYChartData("${dataName}", excelData.${dataName}, ${percent}, ${unit})`;
break;
};
str+=
`${subStr}
`
});
str += `
res.send(ret);
}
`
return str;
}
//创建Router层
function createRouter() {
let importName =``;
let routergetName=``;
let routerpostName=``;
for (let pageName in createBizAndDataConfigMap) {
importName+=`
import * as ${pageName}Biz from '../biz/${pageName}';`;
routergetName+=`
httpServer.get('/${pageName}', asyncHandler(${pageName}Biz.getData));`;
routerpostName+=`
httpServer.post('/${pageName}', asyncHandler(${pageName}Biz.getData));`;
}
let str=`
import * as asyncHandler from 'express-async-handler'
${importName}
export function setRouter(httpServer){
${routergetName}
${routerpostName}
}`;
let path = `./routers/router.ts`;
fs.access(path, (err) => {
if (!err) {
console.error(path, "文件已存在");
return;
}
fs.writeFileSync(path, str);
console.log(path, "创建router文件成功")
});
}
createData();
createBiz();
createRouter();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment