package edu.sjtu.infosec.ismp.manager.AM.dao.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.sql.Timestamp;
import java.util.GregorianCalendar;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.AM.dao.AssetMonthlyAvailabilityDao;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetMonthlyAvailabilityBO;
/**
* AssetMonthlyAvailabilityDao接口的实现类
*
* @author Breggor
*
*/
@SuppressWarnings("unchecked")
public class AssetMonthlyAvailabilityDaoImpl extends HibernateDaoSupport
implements AssetMonthlyAvailabilityDao {
/**
* 实现接口方法
*/
public void saveAssetMonthlyAvailability(AssetMonthlyAvailabilityBO entity) {
getHibernateTemplate().save(entity);
}
public void updateAssetMonthlyAvailability(AssetMonthlyAvailabilityBO entity) {
getHibernateTemplate().update(entity);
}
public void deleteAssetMonthlyAvailability(AssetMonthlyAvailabilityBO entity) {
getHibernateTemplate().delete(entity);
}
public AssetMonthlyAvailabilityBO getAssetMonthlyAvailability(
Serializable entityId) {
return (AssetMonthlyAvailabilityBO) getHibernateTemplate().get(
AssetMonthlyAvailabilityBO.class, entityId);
}
public List<AssetMonthlyAvailabilityBO> getListByAssetMonthlyAvailability(
AssetMonthlyAvailabilityBO entity) {
return (List<AssetMonthlyAvailabilityBO>) spliceCriteria(entity).list();
}
public List<Integer> getMonthChartData(Timestamp date,
AssetMonthlyAvailabilityBO entity) {
List<Integer> data = new ArrayList<Integer>();
Date end = new Date(date.getTime());
Date begin = new Date(end.getYear(), end.getMonth(), 1, 0, 0, 0);
String hql =
"select monthly.time, avg(monthly.usedPercent) from AssetMonthlyAvailabilityBO monthly "
+ "where monthly.assetId = ? and monthly.availabilityType = ? "
+ "and (monthly.time>= ? and monthly.time< ?) group by day(monthly.time)";
Query query =getSession().createQuery(hql);
query.setInteger(0, entity.getAssetId());
query.setInteger(1, entity.getAvailabilityType());
query.setParameter(2, begin);
query.setParameter(3, end);
List<Object[]> list = query.list();
//System.out.println(list.size() + "month size..........");
int[] a = new int[31];
for (int i = 0; i < list.size(); i++) {
Object[] obj = list.get(i);
Timestamp date1 = (Timestamp) obj[0];
Calendar calendar = new GregorianCalendar();
calendar.setTime(date1);
a[calendar.get(Calendar.DAY_OF_MONTH) - 1] = ((Double) obj[1]).intValue();
}
data = Arrays.asList(ArrayUtils.toObject(a));
return data;
}
public List<Integer> getYearChartData(Timestamp date,
AssetMonthlyAvailabilityBO entity) {
List<Integer> data = new ArrayList<Integer>();
Date end = new Date(date.getTime());
Date begin = new Date(end.getYear(), 0, 1, 0, 0, 0);
String hql =
"select monthly.time, avg(monthly.usedPercent) from AssetMonthlyAvailabilityBO monthly "
+ "where monthly.assetId = ? and monthly.availabilityType = ? "
+ "and (monthly.time>= ? and monthly.time< ?) group by month(monthly.time)";
Query query =getSession().createQuery(hql);
query.setInteger(0, entity.getAssetId());
query.setInteger(1, entity.getAvailabilityType());
query.setParameter(2, begin);
query.setParameter(3, end);
List<Object[]> list = query.list();
//System.out.println(list.size() + "year size..........");
int[] a = new int[12];
for (int i = 0; i < list.size(); i++) {
Object[] obj = list.get(i);
Timestamp date1 = (Timestamp) obj[0];
Calendar calendar = new GregorianCalendar();
calendar.setTime(date1);
a[calendar.get(Calendar.MONTH)] = ((Double) obj[1]).intValue();
}
data = Arrays.asList(ArrayUtils.toObject(a));
return data;
}
/**
* 生成查询条件
*/
private Criteria spliceCriteria(
AssetMonthlyAvailabilityBO assetMonthlyAvailability) {
Criteria criteria = getSession().createCriteria(
AssetMonthlyAvailabilityBO.class);
if (null == assetMonthlyAvailability) {
return criteria;
}
if (null != assetMonthlyAvailability.getId()) {
criteria.add(Restrictions
.eq("id", assetMonthlyAvailability.getId()));
}
if (null != assetMonthlyAvailability.getAssetId()) {
criteria.add(Restrictions.eq("assetId", assetMonthlyAvailability
.getAssetId()));
}
if (null != assetMonthlyAvailability.getAvailabilityType()) {
criteria.add(Restrictions.eq("availabilityType",
assetMonthlyAvailability.getAvailabilityType()));
}
if (null != assetMonthlyAvailability.getUsedPercent()) {
criteria.add(Restrictions.eq("usedPercent",
assetMonthlyAvailability.getUsedPercent()));
}
if (null != assetMonthlyAvailability.getTime()) {
criteria.add(Restrictions.eq("time", assetMonthlyAvailability
.getTime()));
}
return criteria;
}
}