HumitureManagerImpl.java 3.5 KB
package com.myproject.manager.impl;

import com.google.common.collect.TreeBasedTable;
import com.myproject.bean.search.PageList;
import com.myproject.bean.update.Humiture;
import com.myproject.dao.mongo.IHumitureDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IHumitureManager;
import com.myproject.util.DateUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Set;


@Service
public class HumitureManagerImpl implements IHumitureManager {

    @Autowired
    protected IHumitureDao humitureDao;

    protected final transient Logger log = LogManager.getLogger(getClass());

    @Override
    public Humiture get(String id) {
        return humitureDao.findOneById(id);
    }

    @Override
    public Humiture save(Humiture object) throws ValidateException {
        return humitureDao.save(object);
    }

    @Override
    public void delete(Humiture object) throws ValidateException {
        humitureDao.removeOne(object);
    }

    @Override
    public List<Humiture> findAll() {
        return humitureDao.findAll();
    }

    @Override
    public PageList findByQuery(Query query, PageList pageList) {
        pageList.setList(humitureDao.findByQuery(query, pageList.getPageNumber(), pageList.getObjectsPerPage()));
        pageList.setFullListSize(humitureDao.countByQuery(query));
        return pageList;
    }

    @Override
    public void validate(Humiture object, List errors) {

    }

    @Override
    public List<Humiture> latest(String cid, int days) {
        long time = System.currentTimeMillis() - days * 24 * 60 * 60 * 1000L;
        Query query = Query.query(Criteria.where("cid").is(cid).and("createDate").gt(new Date(time)));
        return humitureDao.findByQuery(query);
    }

    @Override
    public TreeBasedTable<String, String, Humiture> getChartData(Date fromDate, Date toDate){
        //Date addOneDayToTime = DateUtil.addOneDayNoTime(toDate);
        Criteria c = new Criteria().andOperator(Criteria.where("createDate").gte(fromDate),
                Criteria.where("createDate").lt(toDate));
        Query query = Query.query(c);
        List<Humiture> results = humitureDao.findByQuery(query);
        TreeBasedTable<String, String, Humiture> resultTable = TreeBasedTable.create();
        long intevalTime = 5 * 1000;
        String timeMask = "yyyy-MM-dd HH:mm:ss";
        for (Humiture humiture: results) {
            String boxKey = humiture.getCid();
            //分钟数取整,如08分变成05分,方便图形显示时分组
            long createTime = humiture.getCreateDate().getTime() / intevalTime;
            String timeStr = DateUtil.toDateString(createTime, timeMask);
            resultTable.put(boxKey,timeStr,humiture);
        }

        Set<String> allBoxes = resultTable.rowKeySet();

        for (long time = fromDate.getTime(); time<= toDate.getTime(); time= time + intevalTime){
            String timeStr = DateUtil.toDateString(time,timeMask);

            for (String cidBoxKey : allBoxes){
                Humiture value = resultTable.get(cidBoxKey, timeStr);
                if(value == null){
                    resultTable.put(cidBoxKey,timeStr,new Humiture());
                }
            }
        }
        return resultTable;
    }


}