/**
 * 版权所有 ©2019 莱欧软件有限公司
 * 工程名：SpringMvcLion
 * 文件名：LogDao.java
 * 创建日期：2019年3月1日 上午8:36:26
 * 作者：dlm
 */
package com.lion.dao;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.lion.entity.LoginUserInfo;
import com.lion.util.TimeUtil;
import com.lion.util.Util;

import jodd.util.StringUtil;

/**
 * 类描述
 * @author dlm
 * @since 2019年3月1日
 */
@Repository
public class LogDao {
	@Autowired
	private JdbcTemplate jdbc;
	/**
	 * 方法描述   保存日志
	 * @author dlm
	 * @since 2019年3月1日
	 * @param content 操作描述
	 * @param type 类型
	 * @param userid 用户id
	 */
	public void saveLog(String content,String type,String userid){
		String sql="insert into sys_log(uuid,content,type,addtime,userid) values (?,?,?,?,?)";
		jdbc.update(sql,new Object[]{Util.getUUID(),content,type,TimeUtil.getNowTime(),userid});
	}
	
	public void saveLogs(String content,String type,String userid,String tablename,String dataid){
		String sql="insert into sys_log(uuid,content,type,addtime,userid,tablename,dataid) values (?,?,?,?,?,?,?)";
		jdbc.update(sql,new Object[]{Util.getUUID(),content,type,TimeUtil.getNowTime(),userid,tablename,dataid});
	}
	public void saveLogInfo(String content,String type,String userid,String tablename,String dataid,String stutas){
		String sql="insert into sys_log(uuid,content,type,addtime,userid,tablename,dataid,stutas) values (?,?,?,?,?,?,?,?)";
		jdbc.update(sql,new Object[]{Util.getUUID(),content,type,TimeUtil.getNowTime(),userid,tablename,dataid,stutas});
	}
	/**
	 * 方法描述  查询日志记录
	 * @author dlm
	 * @since 2019年3月2日
	 * @param start 
	 * @param limit
	 * @param startTime  开始时间，预留
	 * @param endTime
	 * @return	
	 */
	public List<Map<String,Object>> getLog(int start,int limit,String startTime,String endTime,String text){
		StringBuffer sql= new StringBuffer("select s.uuid id,type,content,s.addtime,u.name username,stutas  from sys_log s left join org_user u on s.userid=u.id where 1=1 ");
		if(StringUtil.isNotEmpty(startTime)){
			sql.append(" and left(s.addtime,10)>='"+startTime+"'");
		}
		if(StringUtil.isNotEmpty(endTime)){
			sql.append("  and left(s.addtime,10)<='"+endTime+"'");
			
		}
		if(StringUtil.isNotEmpty(text)){
			sql.append(" and s.type like '%"+text+"%'");
			
		}
		sql.append(" order by s.addtime desc limit ?,?");
		return jdbc.queryForList(sql.toString(),new Object[]{start,limit});
	}
	public int getLogCount(String startTime,String endTime,String text){
		//String sql="select count(*) from sys_log where 1=1";
		StringBuffer sql = new StringBuffer("select count(*) from sys_log where 1=1");
		if(StringUtil.isNotEmpty(startTime)){
			sql.append(" and left(addtime,10)>='"+startTime+"'");
		}
		if(StringUtil.isNotEmpty(endTime)){
			sql.append("  and left(addtime,10)<='"+endTime+"'");
			
		}
		if(StringUtil.isNotEmpty(text)){
			sql.append(" and type like '%"+text+"%'");
			
		}
		return jdbc.queryForObject(sql.toString(), Integer.class);
	}
	/**
	 * 
	 * 方法描述  查询系统用户访问量
	 * @author mt.W
	 * @since 2020年1月11日
	 * @param flag 查询标记，1：查当天的 2，查询所有的
	 * @return
	 */
	public int getVisitCount(String flag){
		StringBuffer sql = new StringBuffer("select count(s.userid) from sys_log s inner join org_user u on u.id = s.userid where u.roleid != '0' and s.type = '登录'   ");
		if(flag.equals("1")){
			sql.append(" and left(s.addtime,10) = '"+TimeUtil.getNowTime().substring(0,10)+"' ");
		}
		return jdbc.queryForObject(sql.toString(), Integer.class);
	}
	public List<Map<String,Object>> getTotalVisitorList(int num){
		StringBuffer sql = new StringBuffer( "select u.username,o.name orgname,s.addtime  from sys_log s "
		+ " inner join org_user u on u.id = s.userid "
		+ " left join orgdept o on o.id = u.orgid "
		+ " where u.roleid != '0' and s.type = '登录' and left(s.addtime,10)=?  "
		+ " order by s.addtime desc ");
		if(num==0){
			sql.append( " limit 2 ");
		}
		return jdbc.queryForList(sql.toString(),new Object[]{TimeUtil.getNowTime().substring(0, 10)});
	}
	public List<Map<String,Object>> getVisitorInfo(){
		String sql = "select u.username,o.name orgname,count(s.uuid) visitcount from sys_log s "
				+ " inner join org_user u on u.id = s.userid "
				+ " left join orgdept o on o.id = u.orgid "
				+ " where u.roleid != '0' and s.type = '登录'  "
				+ " group by s.userid ";
		return jdbc.queryForList(sql);
	}
	public int saveLoginInfo(String userId,String cookie){
		return jdbc.update("insert into sys_login (cookie,userid,logintime) values (?,?,?)",new Object[]{cookie,userId,TimeUtil.getNowTimeSSS()});
	}
	public LoginUserInfo getUserById(String id){
		String sql="select name,phone,roleid,orgid from org_user where id=?";
		return jdbc.queryForObject(sql, new Object[]{id},new BeanPropertyRowMapper<LoginUserInfo>(LoginUserInfo.class));
	}
}
