UNPKG

egg-xc-base

Version:

a base framework with egg.js

507 lines (482 loc) 16.6 kB
'use strict'; const moment = require('moment'); const underscore = require('underscore') module.exports = { db: { // 直接执行sql 默认获取db1 async doQuery(_sql, service,disableLog = false) { try { const result = await service.app.mysql.get('db1').query(_sql); if(!disableLog){ service.logger.info(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Success!`); } return result; } catch (error) { service.logger.error(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Error!`); service.logger.error(error); return null; } }, // 直接执行sql 默认获取db1 抛出错误 async doQueryError(_sql, service,disableLog = false) { try { const result = await service.app.mysql.get('db1').query(_sql); if(!disableLog){ service.logger.info(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Success!`); } return result; } catch (error) { service.logger.error(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Error!`); service.logger.error(error); throw new service.app.dbError(error.message); } }, // 获取事物 async tran(service, cb) { try { return await service.app.mysql.get('db1').beginTransactionScope(cb, service.ctx); } catch (error) { service.ctx.logger.error('rollback!'); service.logger.error(error); return null; } }, // 获取事物 抛出Error async tranError(service, cb) { try { return await service.app.mysql.get('db1').beginTransactionScope(cb, service.ctx); } catch (error) { service.ctx.logger.error('rollback!'); service.ctx.logger.error(error); throw new service.app.dbError().for(error); } }, // 事物中执行sql async doQueryTran(_sql, conn, service) { let result = null; try { result = await conn.query(_sql); service.logger.info(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Success!`); } catch (error) { service.logger.error(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Error!`); service.ctx.logger.error(error); throw new service.app.dbError(error.message); } return result; }, // 多数据源执行sql async doQueryConn(_sql, conn, service) { try { const result = await conn.query(_sql); service.logger.info(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Success!`); return result; } catch (error) { service.logger.error(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Error!`); service.logger.error(error); return null; } }, // 多数据源执行sql 抛出错误 async doQueryConnError(_sql, conn, service) { try { const result = await conn.query(_sql); service.logger.info(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Success!`); return result; } catch (error) { service.logger.error(`${_sql.replace(/\t|\n|\v|\r|\f|\s+/g," ")}-->Error!`); service.ctx.logger.error(error); throw new service.app.dbError().for(error); } }, // 多数据源获取事物 async tranConn(service, conn, cb) { try { return await conn.beginTransactionScope(cb, service.ctx); } catch (error) { service.ctx.logger.error('rollback!'); service.logger.error(error); return null; } }, // 多数据源获取事物 抛出Error async tranConnError(service, conn, cb) { try { return await conn.beginTransactionScope(cb, service.ctx); } catch (error) { service.ctx.logger.error('rollback!'); service.ctx.logger.error(error); throw new service.app.dbError().for(error); } }, formatTime(time){ return `from_unixtime(CONVERT(${time}/1000, UNSIGNED INTEGER),'%Y-%m-%d %H:%i:%S')` } }, time: { // 获取当前时间格式 YYYY-MM-DD HH:mm:ss.SSS getCurrentTime() { return moment().format('YYYY-MM-DD HH:mm:ss.SSS'); }, }, async httpGet(url){ const result = await this.ctx.curl(url, { dataType: 'json', }); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpPost(url,body){ const result = await this.ctx.curl(url, { method: 'POST', dataType: 'json', contentType: 'json', rejectUnauthorized: false, data: body, }); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} get Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpPut(url,body){ const result = await this.ctx.curl(url, { method: 'PUT', dataType: 'json', contentType: 'json', rejectUnauthorized: false, data: body, }); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} get Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpDel(url){ const result = await this.ctx.curl(url, { method: 'DELETE', dataType: 'json', }); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpGetOptions(url,options){ const result = await this.ctx.curl(url, Object.assign({ method: 'GET', dataType: 'json', },options)); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} get Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpPostOptions(url,body,options){ const result = await this.ctx.curl(url, Object.assign({ method: 'POST', dataType: 'json', contentType: 'json', data: body, },options)); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} get Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpPutOptions(url,body,options){ const result = await this.ctx.curl(url, Object.assign({ method: 'PUT', dataType: 'json', contentType: 'json', data: body, },options)); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} get Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async httpDelOptions(url,options){ const result = await this.ctx.curl(url, Object.assign({ method: 'DELETE', dataType: 'json', },options)); if (result.status != 200) { this.ctx.logger.error(`${url}-->Error!status=${result.status}`); throw new this.ctx.app.serverError(`${url} get Error!status=${result.status}`); } else { this.ctx.logger.info(`${url}-->Success!`) return result.data; } }, async findLastKey (obj) { var la = "" for(var i in obj){ la = i } return la }, async isArray(v){ return toString.apply(v) === '[object Array]'; }, async cloneArray (array){ if(!this.ctx.helper.isArray(array)){ return array }else{ var r = [] for(var i in array){ r.push(underscore.clone(array[i])) } return r } }, async filterInsertSql(tablename,array) { if(!array || !this.ctx.helper.isArray(array)||array.length == 0 ){ return null } var keyArr = [] for(var obj of array){ for(var key in obj ){ if(keyArr.indexOf(key) == -1){ keyArr.push(key) } } } for(var key of keyArr){ for(var v of array){ if( !(v[key] || v[key] == 0) ){ v[key] = null } } } var nArray = await this.ctx.helper.cloneArray(array) array = [] for(var v of nArray){ var obj = {} for(var k of keyArr){ obj[k] = v[k] } array.push(obj) } var preV = keyArr.join(',') var pre = `insert into ${tablename} (${preV}) values ` var re = "" for( var i = 0 ; i < array.length; i ++) { var result = "(" var obj = array[i] for(var k in obj){ switch(typeof obj[k]){ case 'string': result+="'"+obj[k]+"'" break case 'boolean': result+="'"+obj[k]+"'" break case 'number': result+=obj[k] break case 'object': result+=obj[k] break } if( k!=await this.ctx.helper.findLastKey(obj)){ result+=',' } } result += ")" re += result if(i!=array.length - 1){ re += ',' } } return pre + re }, //如果所以冲突则保留原值 async filterInsertSqlD(tablename,array) { if(!array || !this.ctx.helper.isArray(array)||array.length == 0 ){ return null } let dObj = array[0] let dStr = `` for(let k in dObj){ dStr+=`${k}=${k},` } dStr = dStr.substr(0,dStr.length-1) var keyArr = [] for(var obj of array){ for(var key in obj ){ if(keyArr.indexOf(key) == -1){ keyArr.push(key) } } } for(var key of keyArr){ for(var v of array){ if( !(v[key] || v[key] == 0) ){ v[key] = null } } } var nArray = await this.ctx.helper.cloneArray(array) array = [] for(var v of nArray){ var obj = {} for(var k of keyArr){ obj[k] = v[k] } array.push(obj) } var preV = keyArr.join(',') var pre = `insert into ${tablename} (${preV}) values ` var re = "" for( var i = 0 ; i < array.length; i ++) { var result = "(" var obj = array[i] for(var k in obj){ switch(typeof obj[k]){ case 'string': result+="'"+obj[k]+"'" break case 'boolean': result+="'"+obj[k]+"'" break case 'number': result+=obj[k] break case 'object': result+=obj[k] break } if( k!=await this.ctx.helper.findLastKey(obj)){ result+=',' } } result += ")" re += result if(i!=array.length - 1){ re += ',' } } return pre + re + ` on duplicate key update `+dStr }, //如果所以冲突则保留新值 async filterInsertSqlN(tablename,array) { if(!array || !this.ctx.helper.isArray(array)||array.length == 0 ){ return null } let dObj = array[0] let dStr = `` for(let k in dObj){ dStr+=`${k}=values(${k}),` } dStr = dStr.substr(0,dStr.length-1) var keyArr = [] for(var obj of array){ for(var key in obj ){ if(keyArr.indexOf(key) == -1){ keyArr.push(key) } } } for(var key of keyArr){ for(var v of array){ if( !(v[key] || v[key] == 0) ){ v[key] = null } } } var nArray = await this.ctx.helper.cloneArray(array) array = [] for(var v of nArray){ var obj = {} for(var k of keyArr){ obj[k] = v[k] } array.push(obj) } var preV = keyArr.join(',') var pre = `insert into ${tablename} (${preV}) values ` var re = "" for( var i = 0 ; i < array.length; i ++) { var result = "(" var obj = array[i] for(var k in obj){ switch(typeof obj[k]){ case 'string': result+="'"+obj[k]+"'" break case 'boolean': result+="'"+obj[k]+"'" break case 'number': result+=obj[k] break case 'object': result+=obj[k] break } if( k!=await this.ctx.helper.findLastKey(obj)){ result+=',' } } result += ")" re += result if(i!=array.length - 1){ re += ',' } } return pre + re + ` on duplicate key update `+dStr }, async filterInsert (array) { var re = "" for( var i = 0 ; i < array.length; i ++) { var result = "(" var obj = array[i] for(var k in obj){ result+="'"+obj[k]+"'" if( k!=await this.ctx.helper.findLastKey(obj)){ result+=',' } } result += ")" re += result if(i!=array.length - 1){ re += ',' } } return re }, async getImageBase64(url){ let result = await this.ctx.curl(url); let data = result.data return data.toString('base64') }, async getImageBase64Ext(url){ let result = await this.ctx.curl(url); let data = result.data let ext = result.headers["content-type"] return `data:${ext};base64,${data.toString('base64')}` } };