Commit 331ec9b7 authored by Carver_Hu's avatar Carver_Hu

csv脚本

parent 0063ff3e
This diff is collapsed.
var fs = require('fs');
var parser = require('topsin.parser');
var _ = require('lodash');
var cl = require('console');
var csv_file = './confirmation-201912270900.csv'
//解析csv数据
var csv_data_parser = function(csv_file){
var file = fs.openFile(csv_file);
file.setCodec('UTF-8');
var csv_str = file.readAll();
//解析CSV字符串,变为数组格式
var csv_data = parser.parseCsvStr(csv_str);
return csv_data
};
var csv_data = csv_data_parser(csv_file);
//提取第一行字段名
var filed_row = csv_data[0];
//数据库连接
var db = require('topsin.database');
db.addConnection({
database_type:'pg',
database_host:'139.196.104.13:5433',
database_name:'PMO_TRAINING',
database_user:'toplinker',
database_pwd:'TopLinker0510'
}, "MES_DB");
//获取字段列表
var filed_list = db.query("MES_DB", function(query) {
return query.getFieldList('sec_production_order_confirmation_1');
});
// 查询当前数据库表中是否存在数据
var check_data_empty = db.query("MES_DB", function(query) {
return query.selectMap({
table:'sec_production_order_confirmation_1',
field: '*',
field_format:{"tags":'array', attr_data:'json'}
});
});
//查询当前数据库表中已存在的数据长度
var get_data = db.query("MES_DB", function(query) {
return query.selectArrayArray({
table:'sec_production_order_confirmation_1',
field: 'id',
field_format:{"tags":'array', attr_data:'json'},
// limit:3,
order:'id ASC',
// order:'id desc',
});
});
//查询
data_length = get_data.length
cl.log('当前数据库表已存在行数:' + data_length);
//最终批量插入的数据
var total_batch_data = [];
//需要插入的字段(字段增加的变化后面再处理)
var filed_list_insert = filed_list.slice(0, filed_row.length + 1);
//删除第一行的字段名
csv_data.shift();
//处理批量插入的数据格式
csv_data.forEach(function(item1){
var obj = {}
item1.forEach(function(item2, index){
//得到batchInsertc参数格式
obj[filed_list_insert[index+1]] = item2;
});
//追加对象
total_batch_data.push(obj);
});
//插入字段使不包含id
filed_list_insert.shift();
// 插入数据
var batch_insert = function(iData){
var result = db.query("MES_DB", function(query) {
return query.batchInsert(
'sec_production_order_confirmation_1',
filed_list_insert,
iData
);
});
}
if(_.isEmpty(check_data_empty)){
// 第一次是直接插入
batch_insert(total_batch_data);
cl.log('本次插入数据:' + total_batch_data.length + ' 条');
}else{
//数据库存在数据就需要进行长度对比来插入新数据
batch_insert(total_batch_data.slice(data_length));
cl.log('本次插入数据:' + (total_batch_data.length-data_length) + ' 条');
};
\ No newline at end of file
No preview for this file type
...@@ -353,27 +353,164 @@ var stderr = process.stderr; ...@@ -353,27 +353,164 @@ var stderr = process.stderr;
print('\n'); print('\n');
print('------qt.widgets gui操作------'); print('------qt.widgets gui操作------');
// var QtCore = require('qt.core'); /*
// var QtGui = require('qt.gui'); var QtCore = require('qt.core');
// var QtWidgets = require('qt.widgets'); var QtGui = require('qt.gui');
// //定义容器 var QtWidgets = require('qt.widgets');
// var frame = new QtWidgets.QFrame(); //定义容器
// //定义水平布局至容器 var frame = new QtWidgets.QFrame();
// var layout = new QtWidgets.QHBoxLayout(frame); //定义水平布局至容器
// //定义组件 var layout = new QtWidgets.QHBoxLayout(frame);
// var button1 = new QtWidgets.QPushButton('one'); //定义组件
// var button2 = new QtWidgets.QPushButton('two'); var button1 = new QtWidgets.QPushButton('one');
// var button3 = new QtWidgets.QPushButton('three'); var button2 = new QtWidgets.QPushButton('two');
// var button4 = new QtWidgets.QPushButton('four'); var button3 = new QtWidgets.QPushButton('three');
// var button5 = new QtWidgets.QPushButton('five'); var button4 = new QtWidgets.QPushButton('four');
// //添加组件至布局 var button5 = new QtWidgets.QPushButton('five');
// layout.addWidget(button1); //添加组件至布局
// layout.addWidget(button2); layout.addWidget(button1);
// layout.addWidget(button3); layout.addWidget(button2);
// layout.addWidget(button4); layout.addWidget(button3);
// layout.addWidget(button5); layout.addWidget(button4);
// frame.show(); layout.addWidget(button5);
// process.mainLoop(); frame.show();
process.mainLoop();
//qt不能执行,报错:QWidget: Cannot create a QWidget without QApplication //qt不能执行,报错:QWidget: Cannot create a QWidget without QApplication
*/
print('\n');
print('------Lodash介绍------');
//1、toString(obj) 将对象转为string;
var _ = require('lodash');
str1 = _.toString(null)
print(typeof str1); //=>空字符串
str2 = _.toString(undefined)
print(typeof str2); //=>空字符串
print(_.toString('abcd')); //=>abcd
print(_.toString(true)); //=>true
print(_.toString(false)); //=>false
print(_.toString(0.01)); //=>0.01
str3 = _.toString({a:'aa'})
print(str3); //=>{"a":"aa"} 注意:object或array等类型会返回JSON.stringify()字符串;
print(typeof str3); //=>string
str4 = _.toString([0,'a',0.11]) ////=>[0,"aa",0.11] 注意:同上
print(str4); //=>[0,"aa",0.11]
print(typeof str4); //=>string
str5 = _.toString(function(){return 'abcdef';})
print(str5); //=>function(){return 'abcdef';}
print(typeof str5); //=>string 注意:如果里面是函数,那么结果也是string
//2、_.isEmpty(obj) 判断对象是否为空
//=>以下打印true
print(_.isEmpty(null));
print(_.isEmpty(undefined));
print(_.isEmpty(''));
print(_.isEmpty([]));
print(_.isEmpty({}));
//=>以下打印false
print(_.isEmpty(['a']));
print(_.isEmpty({a:1}));
print(_.isEmpty(false));
print(_.isEmpty(true)); //注意boolean也会返回true
print(_.isEmpty(0));
print(_.isEmpty('abc'));
print(_.isEmpty(0.1234));
//3、_.toNumber(obj) 对象转为数字;
var n = _.toNumber(undefined);
print(n); //=>0 注意在topjs3中此处undefined是转为0
var n = _.toNumber('huzhihui');
print(n); //=>NaN
var n = _.toNumber({'name':'huzhihui'});
print(n); //=>NaN
//4、_.isValid(obj) 判断对象是否有效;
//=>以下打印false
print('null==>' + _.isValid(null));
print(_.isValid(undefined));
//=>以下打印true
print(_.isValid(true));
print(_.isValid(0));
print(_.isValid('abc'));
print(_.isValid(0.1234));
print(_.isValid(false));
print(_.isValid([]));
print(_.isValid({}));
//5、_.isTrue(obj) 判断对象是否为真;
//=>以下打印false
print('==>' + _.isTrue(null));
print(_.isTrue(undefined));
print(_.isTrue(''));
print(_.isTrue([]));
print(_.isTrue({}));
print(_.isTrue(false));
print(_.isTrue(0));
print(_.isTrue('0'));
//=>以下打印true
print(_.isTrue(['a']));
print(_.isTrue({a:1}));
print(_.isTrue(true));
print(_.isTrue(1));
print(_.isTrue('abc'));
print(_.isEmpty(0.1234));
//6、_.fuzzyEqual(value1, value2) 模糊比较两个数字是否相等,判断的公差为0.000001;
print('是否相等:' + _.fuzzyEqual(1, 1.00000000001));
//7、_.fuzzyLessThan(value1, value2) 模糊判断value1是否小于value2,判断的公差为0.000001;
print('是否小于:' + _.fuzzyEqual(1, 1.00000000001));
//8、_.fuzzyLessEqual(value1, value2) 模糊判断value1是否小于等于value2,判断的公差为0.000001;
print('是否小于等于:' + _.fuzzyEqual(1, 1.00000000001));
//9、_.fuzzyGreaterThan(value1, value2) 模糊判断value1是否大于value2,判断的公差为0.000001;
print('是否大于' + _.fuzzyEqual(1, 1.00000000001));
//10、_.fuzzyGreaterEqual(value1, value2) 模糊判断value1是否大于等于value2,判断的公差为0.000001;
print('是否大于等于:' + _.fuzzyEqual(1, 1.00000000001));
//11、_.format(template, replace1, replace2, …) 使用replace1、replace2、replace3…替换template中的占位符, 占位符为{number}
var template = "my {0} is {1}";
var res = _.format(template, "name", 'huzhihui');
print(res);
//12、_.formatUnicorn(template, kv) 使用kv中匹配的键的值替换模板中的占位符, 占位符为${string}
var template = "my name is ${name}, age is ${age}";
var res = _.formatUnicorn(template, {'name':'huzhihui', 'age':24});
print(res);
//13、_.romanize(num) 将数字转换成罗马数字
print(_.romanize(1));
print(_.romanize(2));
print(_.romanize(3));
//14、_.deromanize(str) 将罗马数字转换成数字
print(_.deromanize('III')); //罗马数字是字符串格式
print('\n');
print('------mockjs - 随机数据------');
//mockjs - 生成随机数据,拦截 Ajax 请求
var Mock = require('mockjs');
// print(Mock.mock({"string|1-10": "*"}));
//此处会对对象中的value值进行范围内随机相加
print(_.toString(Mock.mock({"string|1-10": "*"}))); //=>{"string":"*********"}
print(_.toString(Mock.mock({"string|2": "*"})));
print(_.toString(Mock.mock({"number|+1": 100})));//此处的number值 是初始值,一般跟数组配合使用
print(_.toString(Mock.mock({"number|1-100": 10}))); //此处的number值只是用来确定类型
print(_.toString(Mock.mock({"number|1-100.1-10": 10})));
print(_.toString(Mock.mock({"number|123.1-10": 10})));
print(_.toString(Mock.mock({"number|123.2": 10})));//注意:若浮点数是个固定值,那么该固定值就代表小数点向后的小数的位数
print(_.toString(Mock.mock({"number|123.10": 10})));
//生成随机的布尔值,true和false的概率各是1/2
print(_.toString(Mock.mock({"boolean|1": true})));
a = [1, 2, 3, 4, 5, 6];
print(a.slice(4));
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