kpiplus
Version:
KPI+
1 lines • 1.81 kB
JavaScript
var App=require("../models/app"),Synctime=require("../models/synctime"),request=require("request"),async=require("async"),underscore=require("underscore");exports.baseSync=function(e,n,a,t,r,i){var s=new Date;App.findOne({_id:e}).lean().exec(function(u,o){if(u||!o)return r("Không tìm thấy công ty này");if(!o.stp_api_address||!o.stp_api_token)return r();console.log("begin sync ",a);var d=o.stp_api_address+"/"+a+"/";Synctime.findOne({id_app:e,code:a.toUpperCase()},function(u,p){if(u)return r(u);async.parallel({web:function(e){e()},sql:function(a){var r=d+"latest?token="+o.stp_api_token;p&&(r=r+"&from_date="+JSON.stringify(p.date).split('"').join("")),request(r,function(r,s,u){if(r)return a(r);if(u.indexOf("ERROR")>=0)return a(u);let o;try{o=JSON.parse(u)}catch(e){return a(e)}if(underscore.isString(o)&&(o=JSON.parse(o),!underscore.isArray(o)))return a("Can't parse body to json\n"+u);i||(i={}),i.mapWeb||(i.mapWeb=function(e,n){n(null)}),async.map(o,function(a,r){a.ngay_sua&&(a.ngay_sua=new Date(a.ngay_sua)),a.ngay_tao&&(a.ngay_tao=new Date(a.ngay_tao)),a.ngay_sua||(a.ngay_sua=a.ngay_tao),i.mapWeb(a,function(i){if(i)return console.log(i),r(i);var s=a[t].trim().toUpperCase();a[t]=s,a.from_updated="S";var u={id_app:e};u[t]=s,n.findOne(u,function(i,s){if(i)return r(i);if(s){if(s.date_updated||(s.date_updated=s.date_created),s.date_updated&&a.ngay_sua&&s.date_updated>a.ngay_sua)return r()}else s=new n({id_app:e});underscore.extend(s,a),a.ngay_sua||(a.ngay_sua=a.ngay_tao),s.date_updated=a.ngay_sua,s.date_created=a.ngay_tao,s.status="stt_rec"==t||a.trang_thai,s.save(function(e,n){e&&console.log(e),r(e,n)})})})},function(e,n){a(e,n)})})}},function(n,t){if(n)return r(n);p||(p=new Synctime({id_app:e,code:a.toUpperCase()})),p.date=s,p.save(function(e){if(e)return r(e);r(null)})})})})};