node读取数据库生成excel文件

315 阅读1分钟
const mysql=require('mysql');
const xlsx=require('node-xlsx');
const fs=require('fs');
const ProgressBar = require('progress');

const dataRow=[
    ['产品名称','EAS商品编码','EDB仓库编码','EAS仓库编码','物料编码','EDB库存数量','EAS库存']
];
const dataRow2=[
    ['产品名称','EAS商品编码','EDB仓库编码','EAS仓库编码','物料编码','EDB库存数量','EAS库存']
];

const connection=mysql.createConnection(
    {
        host:'10.0.254.128',
        user:'root',
        password:'Bsy#@!data321',
        database:'test2'
    }
);
connection.connect((err)=>{
    if(err){
        reject('数据库连接失败');
    }
})

let  bar = new ProgressBar(':bar', { total: 30 });
bar.tick();
let promise1=new Promise((resolve,reject)=>{
    connection.query("SELECT a.`产品名称`, a.EAS商品编码,a.EDB仓库编码,b.`EDB编码` as `EAS仓库编码`,b.`物料编码`,a.`实物库存` as `EDB库存数量` ,b.`基本数量` as `EAS库存` FROM `EDB库存` AS a INNER JOIN ( SELECT `物料编码`, `EDB编码`,SUM(基本数量) AS 基本数量 FROM `EAS库存`GROUP BY 物料编码, EDB编码 ) AS b ON a.`EAS商品编码` = b.`物料编码` WHERE a.实物库存!=b.`基本数量`",function(err,rows){
        if(err){reject()}
        if(rows){ resolve(rows)}
    });
})
let promise2=new Promise((resolve,reject)=>{
    connection.query("SELECT a.`产品名称`, a.EAS商品编码, a.EDB仓库编码, b.`EDB编码` as `EAS仓库编码`,b.`物料编码`,a.`实物库存` as `EDB库存数量`,b.`基本数量` as `EAS库存` FROM `EDB康百纳库存` AS a INNER JOIN ( SELECT `物料编码`,`EDB编码`,SUM(基本数量) AS 基本数量 FROM `EAS康百纳库存` GROUP BY  物料编码, EDB编码  ) AS b ON a.`EAS商品编码` = b.`物料编码` WHERE a.实物库存!=b.`基本数量`",function(err,rows){
        if(err){reject()}
        if(rows){ resolve(rows)}
    });
})

Promise.all([promise1,promise2]).then(res=>{
    if(res[0]){
        res[0].forEach(item => {
            dataRow.push([...Object.values(item)]);
        });
    }
    if(res[1]){
        res[1].forEach(item => {
            dataRow2.push([...Object.values(item)]);
        });
    }
    
    let buffer = xlsx.build([
        {
            name: "EDB校验", data: dataRow
        },
        {
            name: "康百纳校验", data: dataRow2
        }
    ]);
    fs.writeFileSync('库存校验.xlsx',buffer,{'flag':'w'});
    console.log('下载成功')
})
connection.end();