All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codingapi.txlcn.logger.helper.MysqlLoggerHelper Maven / Gradle / Ivy

/*
 * Copyright 2017-2019 CodingApi .
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.codingapi.txlcn.logger.helper;

import com.codingapi.txlcn.common.util.Maps;
import com.codingapi.txlcn.common.util.Strings;
import com.codingapi.txlcn.logger.db.LogDbHelper;
import com.codingapi.txlcn.logger.db.LogDbProperties;
import com.codingapi.txlcn.logger.db.TxLog;
import com.codingapi.txlcn.logger.exception.NotEnableLogException;
import com.codingapi.txlcn.logger.exception.TxLoggerException;
import com.codingapi.txlcn.logger.model.*;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.RowProcessor;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * Description:
 * Company: CodingApi
 * Date: 2018/12/26
 *
 * @author codingapi
 */
public class MysqlLoggerHelper implements TxLcnLogDbHelper {

    /**
     * 当 开启enable时才能获取到.
     */
    @Autowired(required = false)
    private LogDbHelper dbHelper;

    @Autowired
    private LogDbProperties logDbProperties;

    private RowProcessor processor = new BasicRowProcessor(new GenerousBeanProcessor());

    @Override
    public void init() {
        if (logDbProperties.isEnabled()) {
            String sql = "CREATE TABLE IF NOT EXISTS `t_logger`  (\n" +
                    "  `id` bigint(20) NOT NULL AUTO_INCREMENT,\n" +
                    "  `group_id` varchar(50)  NOT NULL ,\n" +
                    "\t`unit_id` varchar(50)  NOT NULL ,\n" +
                    "\t`tag` varchar(50)  NOT NULL ,\n" +
                    "\t`content` varchar(1024)  NOT NULL ,\n" +
                    "  `create_time` varchar(30) NOT NULL,\n" +
                    "  `app_name` varchar(50) NOT NULL,\n" +
                    "  PRIMARY KEY (`id`) USING BTREE\n" +
                    ") ";
            dbHelper.update(sql);
        }

    }

    @Override
    public int insert(TxLog txLoggerInfo) {
        if (logDbProperties.isEnabled()) {
            String sql = "insert into t_logger(group_id,unit_id,tag,content,create_time,app_name) values(?,?,?,?,?,?)";
            return dbHelper.update(sql, txLoggerInfo.getGroupId(), txLoggerInfo.getUnitId(), txLoggerInfo.getTag(),
                    Strings.format(txLoggerInfo.getContent(), Maps.of("xid", txLoggerInfo.getGroupId(),
                            "uid", txLoggerInfo.getUnitId()), txLoggerInfo.getArgs()),
                    txLoggerInfo.getCreateTime(), txLoggerInfo.getAppName());
        } else {
            throw new NotEnableLogException("not enable logger");
        }
    }

    /**
     * 按筛选条件获取记录数
     *
     * @param where  where条件部分
     * @param params 参数
     * @return 总共记录数
     */
    private long total(String where, Object... params) {
        if (logDbProperties.isEnabled()) {
            return dbHelper.query("select count(*) from t_logger where " + where, new ScalarHandler<>(), params);
        } else {
            throw new NotEnableLogException("not enable logger");
        }
    }

    /**
     * 时间排序SQL
     *
     * @param timeOrder 排序方式
     * @return orderSql
     */
    private String timeOrderSql(int timeOrder) {
        return "order by create_time " + (timeOrder == 1 ? "asc" : "desc");
    }


    @Override
    public void deleteByFields(List fields) throws TxLoggerException {
        if (Objects.isNull(dbHelper)) {
            throw new TxLoggerException("系统日志被禁用");
        }
        StringBuilder sql = new StringBuilder("delete from t_logger where 1=1 and ");
        List values = whereSqlAppender(sql, fields);
        dbHelper.update(sql.toString(), values.toArray(new Object[0]));
    }

    private List whereSqlAppender(StringBuilder sql, List fields) {
        List values = new ArrayList<>(fields.size());
        fields.forEach(field -> {
            if (field instanceof GroupId) {
                sql.append("group_id=? and ");
                values.add(((GroupId) field).getGroupId());
            } else if (field instanceof Tag) {
                sql.append("tag=? and ");
                values.add(((Tag) field).getTag());
            } else if (field instanceof StartTime) {
                sql.append("create_time > ? and ");
                values.add(((StartTime) field).getStartTime());
            } else if (field instanceof StopTime) {
                sql.append("create_time < ? and ");
                values.add(((StopTime) field).getStopTime());
            }
        });
        sql.delete(sql.length() - 4, sql.length());
        return values;
    }

    @Override
    public LogList findByLimitAndFields(int page, int limit, int timeOrder, List list) throws TxLoggerException {
        if (Objects.isNull(dbHelper)) {
            throw new TxLoggerException("系统日志被禁用");
        }
        StringBuilder countSql = new StringBuilder("select count(*) from t_logger where 1=1 and ");
        StringBuilder sql = new StringBuilder("select * from t_logger where 1=1 and ");
        List values = whereSqlAppender(sql, list);
        whereSqlAppender(countSql, list);
        Object[] params = values.toArray(new Object[0]);
        long total = dbHelper.query(countSql.toString(), new ScalarHandler<>(), params);
        if (total < (page - 1) * limit) {
            page = 1;
        }
        sql.append(timeOrderSql(timeOrder)).append(" limit ").append((page - 1) * limit).append(", ").append(limit);
        List txLogs = dbHelper.query(sql.toString(), new BeanListHandler<>(TxLog.class, processor), params);

        LogList logList = new LogList();
        logList.setTotal(total);
        logList.setTxLogs(txLogs);
        return logList;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy