package edu.sjtu.infosec.ismp.manager.RAM.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.RAM.dao.DynaAsseResuDao;
import edu.sjtu.infosec.ismp.manager.RAM.model.AsseKnowDynaAsseResu;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
/**
* 数据层 知识库项目动态评估结果Dao实现类.
**/
public class DynaAsseResuDaoImpl extends HibernateDaoSupport implements DynaAsseResuDao {
/**
* 查询项目动态评估结果
* @param id
* 动态评估结果id
* @return 动态评估结果对象
**/
public AsseKnowDynaAsseResu find(Integer id) {
AsseKnowDynaAsseResu dynaAsseResu = null;
dynaAsseResu = (AsseKnowDynaAsseResu) getHibernateTemplate().load(AsseKnowDynaAsseResu.class, id);
return dynaAsseResu;
}
/**
* 查询项目总体评估值记录数
* @param asseInfoProjId
* 测评项目id
* @return 项目总体评估值记录数
**/
public int getCount(Integer asseInfoProjId) {
Criteria criteria = getSession().createCriteria(AsseKnowDynaAsseResu.class)
.addOrder(Order.asc("id"));
if(asseInfoProjId!=null ) {
criteria.add(Expression.eq("asseInfoProjId", asseInfoProjId));
}
return 0;//count(criteria);
}
/**
* 返回项目动态评估结果列表
* @param asseInfoProjId
* 测评项目id
* @return 项目动态评估结果列表
**/
public List<AsseKnowDynaAsseResu> listDynaAsseResu(Integer asseInfoProjId) {
Criteria criteria = getSession().createCriteria(AsseKnowDynaAsseResu.class)
.addOrder(Order.asc("id"));
if(asseInfoProjId!=null ) {
criteria.add(Expression.eq("asseInfoProjId", asseInfoProjId));
}
return criteria.list();
}
/**
* 查询项目动态评估结果分页记录
* @param page
* 分页对象
* @param asseInfoProjId
* 测评项目id
* @return 分页记录列表
**/
@SuppressWarnings({ "unchecked", "deprecation" })
public List<AsseKnowDynaAsseResu> listDynaAsseResuPage(Page page,
Integer asseInfoProjId) {
Criteria criteria = getSession().createCriteria(AsseKnowDynaAsseResu.class)
.addOrder(Order.asc("id"));
if(page!=null) {
criteria.setFirstResult(page.getBeginIndex());
criteria.setMaxResults(page.getEveryPage());
}
if(asseInfoProjId!=null ) {
criteria.add(Expression.eq("asseInfoProjId", asseInfoProjId));
}
return criteria.list();
}
/**
* 删除项目动态评估结果
* @param dynaAsseResu
* 项目动态评估结果
**/
public void remove(AsseKnowDynaAsseResu dynaAsseResu) {
getHibernateTemplate().delete(dynaAsseResu);
}
/**
* 保存/更新项目动态评估结果
* @param dynaAsseResu
* 项目动态评估结果
**/
public void saveOrUpdate(AsseKnowDynaAsseResu dynaAsseResu) {
getHibernateTemplate().saveOrUpdate(dynaAsseResu);
}
/**
* 批量保存/更新项目动态评估结果
* @param dynaAsseResuList
* 项目动态评估结果集合
**/
@SuppressWarnings("unchecked")
public void batchSaveOrUpdate(final List<AsseKnowDynaAsseResu> dynaAsseResuList) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
for(int i=0;i<dynaAsseResuList.size();i++) {
AsseKnowDynaAsseResu dynaAsseResu = (AsseKnowDynaAsseResu) dynaAsseResuList.get(i);
session.merge(dynaAsseResu);
if((i+1)%20 == 0){
session.flush();
session.clear();
}
}
return null;
}
});
}
/**
* 统计此次项目资产风险值
* @param asseInfoProjId
* 测评项目id
* @return 分页记录列表
**/
public List listRiskNumByAsse(Integer asseInfoProjId) {
String sql="select asse_info_asse_id," +
"sum(risk_valu='H') as high," +
"sum(risk_valu='M') as middum," +
"sum(risk_valu='L') as low " +
"from ram_know_dyna_asse_resu "+
"where asse_info_proj_id = "+asseInfoProjId+
" group by asse_info_asse_id" ;
return getSession().createSQLQuery(sql).list();
}
}