package cn.me.fdfs.service.impl;

import cn.me.fdfs.service.BaseService;
import cn.me.fdfs.service.TestModuleService;
import cn.me.fdfs.vo.DownloadFileRecord;
import cn.me.fdfs.vo.Fdfs_file;
import cn.me.fdfs.vo.Line;
import com.mysql.jdbc.StringUtils;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 12-9-4
 * Time: 下午4:45
 * To change this template use File | Settings | File Templates.
 */
@Service
public class TestModuleServiceImpl extends BaseService implements TestModuleService {

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public List<Fdfs_file> getAllFileList() {
        Session session = getSession();
        Query query = session.createQuery(" from Fdfs_file");
        return query.list();

    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public Fdfs_file getFileByFileId(String fileId) {
        Session session = getSession();
        Query query = session.createQuery(" from Fdfs_file f where f.file_id='"+fileId+"'");
        List<Fdfs_file> fileList=query.list();
        if(fileList.size()>0){
            return fileList.get(0);
        }else{
            return  null;
        }

    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void saveFastFile(Fdfs_file f) {
        Session session = getSession();
        session.saveOrUpdate(f);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public  Map<String,Object[]> getAllFileListByTen(String ip) {

        Map<String,Object[]> map=new HashMap<String,Object[]>();
        Session session = getSession();
        Query query = session.createQuery(" from DownloadFileRecord  f where f.src_ip='"+ip+"'  order by f.accessCount desc");
        List<DownloadFileRecord> list=query.list();
        Line sc = new Line(ip);
        sc.setName(ip);
        String[] listName=new String[10];
        Line[] lines=new Line[1];
        long sum=0;
        for(int i=0;i<list.size();i++){
            DownloadFileRecord downloadFileRecord=list.get(i) ;
            if(i<10){

            Fdfs_file  f=getFileByFileId(downloadFileRecord.getFileId().substring(1));
            sc.getData().add(new Object[]{f.getFile_name(),downloadFileRecord.getAccessCount()});
            listName[i]=f.getFile_name();
                sum=sum+ downloadFileRecord.getAccessCount();
            }else{
              sum=sum+downloadFileRecord.getAccessCount();
            }
        }
        lines[0]=sc;
        map.put("x", listName);
        map.put("y",  lines);
        map.put("sum",new Object[]{sum});
        return map;
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public Line getAllFileListForPie(String ip) {
        Session session = getSession();
        Query query = session.createQuery(" from DownloadFileRecord  f where f.src_ip='"+ip+"'  order by f.accessCount desc");
        query.setMaxResults(10);
        List<DownloadFileRecord> list=query.list();
        Line sc = new Line(ip);
        sc.setName(ip);
        for(DownloadFileRecord downloadFileRecord:list){
            Fdfs_file f=getFileByFileId(downloadFileRecord.getFileId().substring(1));
            sc.getData().add(new Object[]{f.getFile_name(),downloadFileRecord.getAccessCount()});

        }
        return sc;
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public List<Fdfs_file> getAllFileListByPage(String pageNum, String pageSize,String keyForSearch) {
        Session session = getSession();
        StringBuilder sb=new StringBuilder(" from Fdfs_file f");
        if(!StringUtils.isNullOrEmpty(keyForSearch)){
           sb.append("  where f.file_id='"+keyForSearch+"'");
            pageNum="1";
        }
        Query query = session.createQuery(sb.toString());
        query.setMaxResults(Integer.parseInt(pageSize));
        query.setFirstResult((Integer.parseInt(pageNum)-1)*Integer.parseInt(pageSize));
        return query.list();
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public int getCountDownLoadFile(String keyForSearch) {
        Session session = getSession();
        StringBuilder sb=new StringBuilder(" from Fdfs_file f");
        if(keyForSearch!=null&&keyForSearch!=""){
            sb.append("  where f.file_id='"+keyForSearch+"'");
        }
        Query query = session.createQuery(sb.toString());
        return query.list().size();
    }



}