| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | 
							- 'use strict';
 
- const fs = require('fs');
 
- const path = require('path');
 
- var util = require('util');
 
- var logPath = path.join(`${process.argv[1]}.log`);
 
- var logFile = fs.createWriteStream(logPath, { flags: 'a' });
 
- console.log = function() {
 
-     logFile.write(util.format.apply(null, arguments) + '\n');
 
-     process.stdout.write(util.format.apply(null, arguments) + '\n');
 
- };
 
- const mysql = require('mysql');
 
- const config = process.argv[2];
 
- if (['local', 'uat', 'default'].indexOf(config) < 0) throw `参数错误: ${config}`;
 
- const options = require(`../config/config.${config}`)({ baseDir: __dirname + '/app', root: __dirname, name: 'calc' });
 
- const pool = mysql.createPool(options.mysql.client);
 
- const querySql = async function(sql, sqlParam) {
 
-     return new Promise(function(resolve, reject) {
 
-         pool.getConnection(function(err, conn) {
 
-             if (err) {
 
-                 if (err) console.log(err);
 
-                 reject(err);
 
-             } else {
 
-                 conn.query(sql, sqlParam, function(err, rows, fields) {
 
-                     if (err) console.log(err);
 
-                     // 释放连接
 
-                     conn.release();
 
-                     // 传递Promise回调对象
 
-                     resolve(rows);
 
-                 });
 
-             }
 
-         });
 
-     });
 
- };
 
- const timesLen = 100;
 
- const filterLastestData = function (data, keyFields, timesField = 'times', orderField = 'order') {
 
-     const dataIndex = {};
 
-     for (const d of data) {
 
-         let key = 'd';
 
-         for (const kf of keyFields) {
 
-             key = key + '.' + (d[kf] || '');
 
-         }
 
-         const di = dataIndex[key];
 
-         if (di) {
 
-             if ((di[timesField] * timesLen + di[orderField]) < (d[timesField] * timesLen + d[orderField])) dataIndex[key] = d;
 
-         } else {
 
-             dataIndex[key] = d;
 
-         }
 
-     }
 
-     const result = [];
 
-     for (const prop in dataIndex) {
 
-         result.push(dataIndex[prop]);
 
-     }
 
-     return result;
 
- };
 
- const zeroRange = 0.0000000001;
 
- const bc = require('../app/lib/base_calc.js');
 
- const Decimal = require('decimal.js');
 
- Decimal.set({ precision: 50, defaults: true });
 
- const ZhCalc = {
 
-     // 加减乘除方法,为方便调用,兼容num为空的情况
 
-     // 加减法使用base_calc,乘除法使用Decimal(原因详见demo/calc_test)
 
-     /**
 
-      * 加法 num1 + num2
 
-      * @param num1
 
-      * @param num2
 
-      * @return {number}
 
-      */
 
-     add(num1, num2) {
 
-         return bc.add(num1 ? num1 : 0, num2 ? num2 : 0);
 
-     },
 
-     /**
 
-      * 减法 num1 - num2
 
-      * @param num1
 
-      * @param num2
 
-      * @return {number}
 
-      */
 
-     sub(num1, num2) {
 
-         return bc.sub(num1 ? num1 : 0, num2 ? num2 : 0);
 
-     },
 
-     /**
 
-      * 乘法 num1 * num2
 
-      * @param num1
 
-      * @param num2
 
-      * @return {*}
 
-      */
 
-     mul(num1, num2, digit = 6) {
 
-         if (num1 === '' || num1 === null || num2 === '' || num2 === null) {
 
-             return 0;
 
-         }
 
-         return Decimal.mul(num1 ? num1 : 0, num2 ? num2 : 0).toDecimalPlaces(digit).toNumber();
 
-     },
 
-     /**
 
-      * 除法 num1 / num2
 
-      * @param num1 - 被除数
 
-      * @param num2 - 除数
 
-      * @return {*}
 
-      */
 
-     div(num1, num2, digit = 6) {
 
-         if (num2 && !this.checkZero(num2)) {
 
-             return Decimal.div(num1 ? num1 : 0, num2).toDecimalPlaces(digit).toNumber();
 
-         }
 
-         return null;
 
-     },
 
-     /**
 
-      * 四舍五入(统一,方便以后万一需要置换)
 
-      * @param {Number} value - 舍入的数字
 
-      * @param {Number} decimal - 要保留的小数位数
 
-      * @return {*}
 
-      */
 
-     round(value, decimal) {
 
-         return value ? new Decimal(value.toString()).toDecimalPlaces(decimal).toNumber() : 0;
 
-     },
 
-     /**
 
-      * 汇总
 
-      * @param array
 
-      * @return {number}
 
-      */
 
-     sum(array) {
 
-         let result = 0;
 
-         for (const a of array) {
 
-             result = this.add(result, a);
 
-         }
 
-         return result;
 
-     },
 
-     /**
 
-      * 检查数字是否为0
 
-      * @param {Number} value
 
-      * @return {boolean}
 
-      */
 
-     checkZero(value) {
 
-         return value === undefined || value === null || (this._.isNumber(value) && Math.abs(value) < zeroRange);
 
-     },
 
-     /**
 
-      * 检查数字是否相等
 
-      * @param {Number} value1
 
-      * @param {Number} value2
 
-      * @return {boolean}
 
-      */
 
-     numEqual(value1, value2) {
 
-         if (value1 && value2) {
 
-             return Math.abs(value2 - value1) < zeroRange;
 
-         }
 
-         return (!value1 && !value2);
 
-     },
 
- };
 
- const _ = require('lodash');
 
- const recursiveMkdirSync = async function(pathName) {
 
-     if (!fs.existsSync(pathName)) {
 
-         const upperPath = path.dirname(pathName);
 
-         if (!fs.existsSync(upperPath)) {
 
-             await recursiveMkdirSync(upperPath);
 
-         }
 
-         await fs.mkdirSync(pathName);
 
-     }
 
- };
 
- const saveBufferFile = async function(buffer, fileName) {
 
-     // 检查文件夹是否存在,不存在则直接创建文件夹
 
-     const pathName = path.dirname(fileName);
 
-     if (!fs.existsSync(pathName)) {
 
-         await recursiveMkdirSync(pathName);
 
-     }
 
-     await fs.writeFileSync(fileName, buffer);
 
- };
 
- module.exports = {
 
-     querySql,
 
-     filterLastestData,
 
-     closePool: function () {
 
-         pool.end();
 
-     },
 
-     ZhCalc,
 
-     saveBufferFile,
 
-     getFileName: function(fileName) {
 
-         return path.join(__dirname, fileName);
 
-     },
 
-     _: _,
 
- };
 
 
  |