util.js 2.89 KB
/**
 * 工具方法库
 */

import config from '../config';
import log4js from 'log4js';
import _ from 'lodash';

log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file(config.log), 'log');

let loger = log4js.getLogger('log');
loger.setLevel(config.logLevel); //配置日志

/**
 * 日志
 */
export let log = loger;

/**
 * 无符号转16进制
 */
export let tenToHex = function (number) {
    return (parseInt(number, 10) >>> 0).toString(16);
}

/**
 * 无符号16进制转10进制
 */
export let hexToTen = function (number, minus) {
    if (minus) {
        return parseInt('FFFF' + number, 16) >> 0;
    } else {
        return parseInt(number, 16);
    }

}

/**
 * 转16进制
 */
export let toHex = function (data) {
    let arr = [];
    for (let i = 0; i < data.length; i++) {
        arr[i] = tenToHex(data.readUIntLE(i));
    }
    return arr;
};


/**
 * 处理返回码
 */
export let returnProc = function (data, ip, output) {
    if (!_.isArray(data) || _.size(data) < 1) {
        return false;
    }

    let ret = data.join('');
    if (!output[ret]) {
        return false;
    }
    log.info("读写器(" + ip + ")返回:" + output[ret].message + " 返回码:" + ret);
    output[ret].hex = data;
    return output[ret];
}

/**
 * 返回结果拆分
 */
export let spliteRet = function (mq, data) {
    let indexes = [],
        rets = [],
        i,
        k,
        j,
        leftMq = [],
        prevIndex = -1;
    for (i = 0; i < mq.length; i++) {
        prevIndex = _.indexOf(data, mq[i], prevIndex + 1);
        if (prevIndex < 0) {
            leftMq = mq.slice(i);
            break;
        }
        indexes.push(prevIndex);
    }
    for (k = 0; k < indexes.length; k++) {
        if (indexes[k + 1]) {
            rets.push(data.slice(indexes[k], indexes[k + 1]));
        } else {
            rets.push(data.slice(indexes[k]));
            break;
        }
    }
    if (indexes.length < 2) {
        rets = [data];
    }

    let allRets = [];
    for (j = 0; j < rets.length; j++) {
        if (rets[j][0] == 'f1' || rets[j][1] != '2') { //盘点特殊处理

            let length = hexToTen(rets[j][1]);
            let allLength = rets[j].length;
            if (allLength > length + 2) {
                allRets.push(rets[j].slice(0, length + 2));
                allRets.push(rets[j].slice(length + 2));
            } else {
                allRets.push(rets[j]);
            }
        } else {
            allRets.push(rets[j]);
        }
    }
    return {
        rets: allRets,
        mq: leftMq,
    };
}

/**
 * 定位指令名称
 */
export let locateOrder = function (orders, data) {
    let orderRet = {};
    _.forIn(orders, function (val, key) {
        var order = val.input.toLowerCase();
        var prefix = data[0].toLowerCase();

        if (_.startsWith(order, prefix)) {
            orderRet.name = key;
            orderRet.val = val;
        }
    });
    return orderRet;
}