Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. var dra = require('date-range-array')
  2. var Client = require('ftp');
  3. var unzip = require('unzip');
  4. var csv = require('csv');
  5. var fs = require('fs');
  6. var db = require('../config/priceDB');
  7. var async = require('async');
  8. var headers;
  9. var fileName;
  10. var csvFileName;
  11. var dates = dra('2016-11-01', '2017-01-16')
  12. var counter = 1;
  13.  
  14. var client = new Client();
  15. client.on('ready',function(){
  16. async.eachLimit(dates, 1,
  17. // on each iteration.
  18. function f(dateObj, cb) {
  19. fileName = 'mobile-' + dateObj + '.csv.zip'
  20. csvFileName = 'mobile-' + dateObj + '.csv'
  21. client.get(fileName, function(err, stream) {
  22. if (err) {throw err;}
  23.  
  24. stream.once('close', function() {
  25. client.end();
  26. unzipFile(cb);
  27. });
  28. stream.pipe(fs.createWriteStream(__dirname + '/' + fileName));
  29. });
  30. // cb(null);
  31. },
  32. // on done
  33. function(err) {
  34. if (!err) {
  35. process.exit();
  36. }
  37. }
  38. );
  39. });
  40. client.connect({ host: 'abracar.ada-io.de', user: 'abracar_sync', password: 'Flo9c9_1'})
  41.  
  42. function unzipFile(cb) {
  43. fs.createReadStream(__dirname + '/' + fileName)
  44. .pipe(unzip.Extract({ path: __dirname }))
  45. .on('close', function () {
  46. parseCSV(cb)
  47. })
  48. }
  49.  
  50. function parseCSV(cb) {
  51. var parser = csv.parse({delimiter: ','});
  52. var transform = csv.transform(function(record, next){
  53. if (!headers) {
  54. headers = record
  55. next();
  56. } else {
  57. importToDB(record, next)
  58. }
  59. }, {parallel: 10000})
  60. .on("end", function (count) {
  61. fs.unlink(__dirname + '/' + fileName)
  62. fs.unlink(__dirname + '/' + csvFileName)
  63. cb(null)
  64. });
  65.  
  66. fs.createReadStream(__dirname + '/' + csvFileName).pipe(parser).pipe(transform);
  67. }
  68.  
  69. function importToDB(data, next) {
  70. var fields = headers.join();
  71. var values;
  72. var updateValues = '';
  73. var id;
  74. headers.forEach(function (header, key) {
  75. if (header === 'id') {
  76. id = data[key]
  77. }
  78. if (header === 'regdate') {
  79. if (data[key]) {
  80. var regdate = data[key].split('/')
  81. data[key] = db.escape(regdate[1] + regdate[0])
  82. }
  83. } else {
  84. data[key] = db.escape(data[key])
  85. }
  86. if (key === headers.length - 1) {
  87. updateValues += header + '=' + data[key];
  88. } else {
  89. updateValues += header + '=' + data[key] + ', '
  90. }
  91. })
  92. values = data.join();
  93. var insertQuery = 'INSERT INTO mobile_price(' + fields + ') VALUES (' + values + ')';
  94. var updateQuery = 'UPDATE mobile_price SET ' + updateValues + ' WHERE id=' + id;
  95. db.query('SELECT COUNT(1) AS priceCount FROM mobile_price WHERE id=' + id, function(err, rows) {
  96. counter++;
  97. console.log(counter)
  98. if (rows && rows[0] && rows[0].priceCount === 0) {
  99. db.query(insertQuery, function (err) {
  100. if (!err) {
  101. next();
  102. }
  103. })
  104. }else {
  105. db.query(updateQuery, function (err) {
  106. if (!err) {
  107. next();
  108. }
  109. })
  110. }
  111. })
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement