package edu.sjtu.infosec.ismp.manager.AM.dao.impl; import java.io.Serializable; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; 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.AssetDailyAvailabilityDao; import edu.sjtu.infosec.ismp.manager.AM.model.AssetDailyAvailabilityBO; import edu.sjtu.infosec.ismp.manager.AM.model.AssetMonthlyAvailabilityBO; import edu.sjtu.infosec.ismp.util.RandomCodeUtil; /** * AssetDailyAvailabilityDao接口的实现类 * * @author Breggor * */ @SuppressWarnings("unchecked") public class AssetDailyAvailabilityDaoImpl extends HibernateDaoSupport implements AssetDailyAvailabilityDao { /** * 实现接口方法 */ public void saveAssetDailyAvailability(AssetDailyAvailabilityBO entity) { getHibernateTemplate().save(entity); } public void updateAssetDailyAvailability(AssetDailyAvailabilityBO entity) { getHibernateTemplate().update(entity); } public void deleteAssetDailyAvailability(AssetDailyAvailabilityBO entity) { getHibernateTemplate().delete(entity); } public AssetDailyAvailabilityBO getAssetDailyAvailability( Serializable entityId) { return (AssetDailyAvailabilityBO) getHibernateTemplate().get( AssetDailyAvailabilityBO.class, entityId); } public List<AssetDailyAvailabilityBO> getListByAssetDailyAvailability( AssetDailyAvailabilityBO entity) { return (List<AssetDailyAvailabilityBO>) spliceCriteria(entity).list(); } public AssetMonthlyAvailabilityBO getAverageAssetMonthlyAvailability( Integer assetId, Integer type, Timestamp currentDate) { // 前一天时间 Date startDate = new Date(currentDate.getTime() - 86400000); // 现在时间 Date endDate = new Date(currentDate.getTime()); AssetMonthlyAvailabilityBO entity = new AssetMonthlyAvailabilityBO(); entity.setSingleCode(RandomCodeUtil.getSingleRandomCode()); String hql = "select avg(daily.usedPercent) from AssetDailyAvailabilityBO daily where daily.assetId =:assetId and daily.availabilityType =:type and (daily.time>=:start and daily.time<:end)"; Query query = getSession().createQuery(hql); query.setParameter("assetId", assetId); query.setParameter("type", type); query.setParameter("start", startDate); query.setParameter("end", endDate); Double percent = (Double) query.uniqueResult(); entity.setAssetId(assetId); entity.setAvailabilityType(type); if (percent == null) entity.setUsedPercent(0); else entity.setUsedPercent(percent.intValue()); entity.setTime(currentDate); return entity; }; public List<Integer> getDayChartData(Timestamp date, AssetDailyAvailabilityBO entity) { List<Integer> data = new ArrayList<Integer>(); Date end = new Date(date.getTime()); Date begin = new Date(end.getYear(),end.getMonth(),end.getDate(),0,0,0); String hql = "select daily.time, avg(daily.usedPercent) from AssetDailyAvailabilityBO daily " + "where daily.assetId = ? and daily.availabilityType = ? " + "and (daily.time>= ? and daily.time<?) group by hour(daily.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()); int[] a = new int[24]; 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.HOUR_OF_DAY)] = ((Double) obj[1]).intValue(); } data = Arrays.asList(ArrayUtils.toObject(a)); return data; } /** * 生成查询条件 */ private Criteria spliceCriteria( AssetDailyAvailabilityBO assetDailyAvailability) { Criteria criteria = getSession().createCriteria( AssetDailyAvailabilityBO.class); if (null == assetDailyAvailability) { return criteria; } if (null != assetDailyAvailability.getId()) { criteria.add(Restrictions.eq("id", assetDailyAvailability.getId())); } if (null != assetDailyAvailability.getAssetId()) { criteria.add(Restrictions.eq("assetId", assetDailyAvailability .getAssetId())); } if (null != assetDailyAvailability.getAvailabilityType()) { criteria.add(Restrictions.eq("availabilityType", assetDailyAvailability.getAvailabilityType())); } if (null != assetDailyAvailability.getUsedPercent()) { criteria.add(Restrictions.eq("usedPercent", assetDailyAvailability .getUsedPercent())); } if (null != assetDailyAvailability.getTime()) { criteria.add(Restrictions.eq("time", assetDailyAvailability .getTime())); } return criteria; } }