package edu.sjtu.infosec.ismp.manager.AM.dao.impl;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.AM.comm.AssetConstant;
import edu.sjtu.infosec.ismp.manager.AM.dao.AssetDeviceDao;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceBO;
import edu.sjtu.infosec.ismp.manager.AM.model.DeviceChartVO;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
import edu.sjtu.infosec.ismp.security.Domain;
public class AssetDeviceDaoImpl extends HibernateDaoSupport implements AssetDeviceDao {
public void add(AssetDeviceBO assetDevice) throws Exception {
getHibernateTemplate().saveOrUpdate(assetDevice);
}
public void delete(AssetDeviceBO assetDevice) throws Exception {
getHibernateTemplate().delete(assetDevice);
}
public void update(AssetDeviceBO assetDevice) throws Exception {
getHibernateTemplate().update(assetDevice);
getHibernateTemplate().flush();
}
public AssetDeviceBO getByNodeId(String nodeid) throws Exception{
Criteria criteria = this.getSession().createCriteria(AssetDeviceBO.class);
criteria.add(Restrictions.eq("node_id", nodeid));
AssetDeviceBO assetDeviceBO = (AssetDeviceBO)criteria.uniqueResult();
return assetDeviceBO;
}
@SuppressWarnings("unchecked")
public List<AssetDeviceBO> findAll() throws Exception {
String hql = "from AssetDeviceBO ad where 1=1 ";
hql = hql + " order by ad.ip";
List<AssetDeviceBO> list = getHibernateTemplate().find(hql);
return list;
}
@SuppressWarnings("unchecked")
public List<AssetDeviceBO> findAll(Timestamp startRecordTime,
Timestamp endRecordTime, int startResult, int maxResult)
throws Exception {
String hql = "from AssetDeviceBO ad where 1=1 ";
if(startRecordTime != null){
hql = hql + " and ad.updateTime>='"+startRecordTime+"' ";
}
if(endRecordTime != null){
hql = hql + " and ad.updateTime<='"+endRecordTime+"' ";
}
hql = hql + " order by ad.ip";
Session session = this.getSession();
Query query = session.createQuery(hql);
query.setFirstResult(startResult);
query.setMaxResults(maxResult);
List<AssetDeviceBO> list = query.list();
return list;
}
@SuppressWarnings("unchecked")
public List<AssetDeviceBO> findAllByDomain(List<Domain> domainList)
throws Exception {
String hql = "from AssetDeviceBO ad where 1=1 ";
int i = 0;
for(Domain domain : domainList){
if(i == 0){
hql = hql + " and (ad.domain.id=" + domain.getId();
}
if(i > 0){
hql = hql + " or ad.domain.id=" + domain.getId();
}
i++;
}
if(i > 0){
hql = hql + ") ";
}
hql = hql + " order by ad.ip";
List<AssetDeviceBO> list = getHibernateTemplate().find(hql);
return list;
}
/**
* 资产统计数据
*/
public DeviceChartVO getDeviceChartData(int year, AssetDeviceBO deviceBO) {
DeviceChartVO chartVo = new DeviceChartVO();
Map<Integer, Integer> dataMap = new HashMap<Integer, Integer>();
// 当前时间
Date now = new Date();
now.setSeconds(0);
if (year > 0) {
now.setYear(now.getYear() - year);
now.setMonth(0);
now.setDate(1);
now.setHours(0);
now.setSeconds(0);
now.setMinutes(0);
}
List<AssetDeviceBO> assetList = getListByAssetDevice(deviceBO);
// 网络设备类别
int netCount = 0;
if (assetList != null && !assetList.isEmpty()) {
for (int i = 0; i < assetList.size(); i++) {
AssetDeviceBO device = (AssetDeviceBO) assetList.get(i);
if (device.getAssetType() != null
&& device.getAssetType().equals(
AssetConstant.NETWORK_DEVICE_TYPE)) {
if (device.getStockTime() != null
&& device.getValidityPeriod() != null) {
// System.out.println(device.getStockTime()
// + " ::::::stocktime");
// System.out.println(device.getValidityPeriod()
// + " ::::Validityperiod");
if (device.getStockTime().getTime() < now.getTime()) {
Calendar cal = Calendar.getInstance();
cal.setTime(device.getStockTime());
cal.add(Calendar.MONTH, device.getValidityPeriod());
// System.out.println(cal.getTime().toLocaleString()
// + "stocktime + Validityperiod ");
if (cal.getTime().after(now)) {
netCount++;
}
}
// System.out.println(cal.getTime().toLocaleString());
}
}
}
}
dataMap.put(AssetConstant.NETWORK_DEVICE_TYPE, netCount);
// 安全设备类别
int secCount = 0;
if (assetList != null && !assetList.isEmpty()) {
for (int i = 0; i < assetList.size(); i++) {
AssetDeviceBO device = (AssetDeviceBO) assetList.get(i);
if (device.getAssetType() != null
&& device.getAssetType().equals(
AssetConstant.SECURITY_DEVICE_TYPE)) {
if (device.getStockTime() != null
&& device.getValidityPeriod() != null) {
// System.out.println(device.getStockTime() +
// " ::::::stocktime");
// System.out.println(device.getValidityPeriod() +
// " ::::Validityperiod");
if (device.getStockTime().getTime() < now.getTime()) {
Calendar cal = Calendar.getInstance();
cal.setTime(device.getStockTime());
cal.add(Calendar.MONTH, device.getValidityPeriod());
if (cal.getTime().after(now)) {
secCount++;
}
//System.out.println(cal.getTime().toLocaleString())
// ;
}
}
}
}
}
dataMap.put(AssetConstant.SECURITY_DEVICE_TYPE, secCount);
// 服务器类别
int serverCount = 0;
if (assetList != null && !assetList.isEmpty()) {
for (int i = 0; i < assetList.size(); i++) {
AssetDeviceBO device = (AssetDeviceBO) assetList.get(i);
if (device.getAssetType() != null
&& device.getAssetType().equals(
AssetConstant.SERVER_DEVICE_TYPE)) {
if (device.getStockTime() != null
&& device.getValidityPeriod() != null) {
// System.out.println(device.getStockTime() +
// " ::::::stocktime");
// System.out.println(device.getValidityPeriod() +
// " ::::Validityperiod");
if (device.getStockTime().getTime() < now.getTime()) {
Calendar cal = Calendar.getInstance();
cal.setTime(device.getStockTime());
cal.add(Calendar.MONTH, device.getValidityPeriod());
if (cal.getTime().after(now)) {
serverCount++;
}
//System.out.println(cal.getTime().toLocaleString())
// ;
}
}
}
}
}
dataMap.put(AssetConstant.SERVER_DEVICE_TYPE, serverCount);
// 终端pc类别
int terminCount = 0;
if (assetList != null && !assetList.isEmpty()) {
for (int i = 0; i < assetList.size(); i++) {
AssetDeviceBO device = (AssetDeviceBO) assetList.get(i);
if (device.getAssetType() != null
&& device.getAssetType().equals(
AssetConstant.TERMINAL_DEVICE_TYPE)) {
if (device.getStockTime() != null
&& device.getValidityPeriod() != null) {
// System.out.println(device.getStockTime() +
// " ::::::stocktime");
// System.out.println(device.getValidityPeriod() +
// " ::::Validityperiod");
if (device.getStockTime().getTime() < now.getTime()) {
Calendar cal = Calendar.getInstance();
cal.setTime(device.getStockTime());
cal.add(Calendar.MONTH, device.getValidityPeriod());
if (cal.getTime().after(now)) {
terminCount++;
}
//System.out.println(cal.getTime().toLocaleString())
// ;
}
}
}
}
}
dataMap.put(AssetConstant.TERMINAL_DEVICE_TYPE, terminCount);
chartVo.setDataMap(dataMap);
chartVo.setYear(new Timestamp(now.getTime()));
return chartVo;
}
public List<AssetDeviceBO> getListByAssetDevice(AssetDeviceBO entity) {
return (List<AssetDeviceBO>) termMaker(entity).list();
}
@SuppressWarnings("unchecked")
public List<AssetDeviceBO> findAllByDomain(List<Domain> domainList,
Timestamp startRecordTime, Timestamp endRecordTime,
int startResult, int maxResult) throws Exception {
String hql = "from AssetDeviceBO ad where 1=1 ";
if(startRecordTime != null){
hql = hql + " and ad.updateTime>='"+startRecordTime+"' ";
}
if(endRecordTime != null){
hql = hql + " and ad.updateTime<='"+endRecordTime+"' ";
}
int i = 0;
for(Domain domain : domainList){
if(i == 0){
hql = hql + " and (ad.domain.id=" + domain.getId();
}
if(i > 0){
hql = hql + " or ad.domain.id=" + domain.getId();
}
i++;
}
if(i > 0){
hql = hql + ") ";
}
hql = hql + " order by ad.ip";
Session session = this.getSession();
Query query = session.createQuery(hql);
query.setFirstResult(startResult);
query.setMaxResults(maxResult);
List<AssetDeviceBO> list = query.list();
return list;
}
@SuppressWarnings("unchecked")
public long findAllNum(Timestamp startRecordTime, Timestamp endRecordTime)
throws Exception {
String hql = "select count(id) from AssetDeviceBO ad where 1=1 ";
if(startRecordTime != null){
hql = hql + " and ad.updateTime>='"+startRecordTime+"' ";
}
if(endRecordTime != null){
hql = hql + " and ad.updateTime<='"+endRecordTime+"' ";
}
List<Long> list = getHibernateTemplate().find(hql);
long num = 0;
if(list!=null && list.size()>0){
num = list.get(0);
}
return num;
}
@SuppressWarnings("unchecked")
public long findAllNumByDomain(List<Domain> domainList,
Timestamp startRecordTime, Timestamp endRecordTime)
throws Exception {
String hql = "select count(id) from AssetDeviceBO ad where 1=1 ";
if(startRecordTime != null){
hql = hql + " and ad.updateTime>='"+startRecordTime+"' ";
}
if(endRecordTime != null){
hql = hql + " and ad.updateTime<='"+endRecordTime+"' ";
}
int i = 0;
for(Domain domain : domainList){
if(i == 0){
hql = hql + " and (ad.domain.id=" + domain.getId();
}
if(i > 0){
hql = hql + " or ad.domain.id=" + domain.getId();
}
i++;
}
if(i > 0){
hql = hql + ") ";
}
List<Long> list = getHibernateTemplate().find(hql);
long num = 0;
if(list!=null && list.size()>0){
num = list.get(0);
}
return num;
}
public AssetDeviceBO findById(int id) {
AssetDeviceBO assetDevice = (AssetDeviceBO)getHibernateTemplate().get(AssetDeviceBO.class, id);
return assetDevice;
}
@SuppressWarnings("unchecked")
public List<AssetDeviceBO> findAllByUnknowDomain() throws Exception {
String hql = "from AssetDeviceBO ad where ad.domain.id is null ";
hql = hql + " order by ad.ip";
List<AssetDeviceBO> list = getHibernateTemplate().find(hql);
return list;
}
@SuppressWarnings("unchecked")
public List<AssetDeviceBO> findAllByUnknowDomain(Timestamp startRecordTime,
Timestamp endRecordTime, int startResult, int maxResult)
throws Exception {
String hql = "from AssetDeviceBO ad where ad.domain.id is null ";
if(startRecordTime != null){
hql = hql + " and ad.updateTime>='"+startRecordTime+"' ";
}
if(endRecordTime != null){
hql = hql + " and ad.updateTime<='"+endRecordTime+"' ";
}
hql = hql + " order by ad.ip";
Session session = this.getSession();
Query query = session.createQuery(hql);
query.setFirstResult(startResult);
query.setMaxResults(maxResult);
List<AssetDeviceBO> list = query.list();
return list;
}
@SuppressWarnings("unchecked")
public long findAllNumByUnknowDomain(Timestamp startRecordTime,
Timestamp endRecordTime) throws Exception {
String hql = "select count(id) from AssetDeviceBO ad where ad.domain.id is null ";
if(startRecordTime != null){
hql = hql + " and ad.updateTime>='"+startRecordTime+"' ";
}
if(endRecordTime != null){
hql = hql + " and ad.updateTime<='"+endRecordTime+"' ";
}
List<Long> list = getHibernateTemplate().find(hql);
long num = 0;
if(list!=null && list.size()>0){
num = list.get(0);
}
return num;
}
public List<AssetDeviceBO> getPageListByAssetDevice(
AssetDeviceBO assetDeviceBO, Page page,List<Integer> list) {
Criteria criteria = this.termMaker(assetDeviceBO);
if(list!=null && list.size()>0){
criteria.add(Restrictions.in("locationId", list));
}
// int count = ((Integer)criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
int count = getCountByAssetDevice(assetDeviceBO);
page.setTotalCount(count);
criteria.setFirstResult(page.getBeginIndex());
criteria.setMaxResults(page.getEveryPage());
return criteria.list();
}
Criteria termMaker(AssetDeviceBO assetDeviceBO){
Criteria criteria = this.getSession().createCriteria(AssetDeviceBO.class);
if(assetDeviceBO!=null){
if(assetDeviceBO.getDomain()!=null && assetDeviceBO.getDomain().getId()==0){
criteria.add(Restrictions.isNull("locationId"));
}
if (null != assetDeviceBO.getId()) {
criteria.add(Restrictions.eq("id", assetDeviceBO.getId()));
}
if (null != assetDeviceBO.getPriority()) {
criteria
.add(Restrictions.eq("priority", assetDeviceBO.getPriority()));
}
if (null != assetDeviceBO.getSn()
&& assetDeviceBO.getSn().trim().length() > 0) {
criteria.add(Restrictions.like("sn", "%"
+ assetDeviceBO.getSn().trim() + "%"));
}
if (null != assetDeviceBO.getCheckAvailable()) {
criteria.add(Restrictions.eq("checkAvailable", assetDeviceBO
.getCheckAvailable()));
}
if (null != assetDeviceBO.getName()
&& assetDeviceBO.getName().trim().length() > 0) {
criteria.add(Restrictions.like("name", "%"
+ assetDeviceBO.getName().trim() + "%"));
}
if (null != assetDeviceBO.getAssetType()) {
criteria.add(Restrictions.eq("assetType", assetDeviceBO
.getAssetType()));
}
if (null != assetDeviceBO.getIp()
&& assetDeviceBO.getIp().trim().length() > 0) {
criteria.add(Restrictions.like("ip", "%"
+ assetDeviceBO.getIp().trim() + "%"));
}
if (null != assetDeviceBO.getMac()
&& assetDeviceBO.getMac().trim().length() > 0) {
criteria.add(Restrictions.like("mac", "%"
+ assetDeviceBO.getMac().trim() + "%"));
}
if (null != assetDeviceBO.getManufacturer()
&& assetDeviceBO.getManufacturer().trim().length() > 0) {
criteria.add(Restrictions.like("manufacturer", "%"
+ assetDeviceBO.getManufacturer().trim() + "%"));
}
if (null != assetDeviceBO.getModel()
&& assetDeviceBO.getModel().trim().length() > 0) {
criteria.add(Restrictions.like("model", "%"
+ assetDeviceBO.getModel().trim() + "%"));
}
if (null != assetDeviceBO.getDescription()
&& assetDeviceBO.getDescription().trim().length() > 0) {
criteria.add(Restrictions.like("description", "%"
+ assetDeviceBO.getDescription().trim() + "%"));
}
if (null != assetDeviceBO.getUser()
&& assetDeviceBO.getUser().trim().length() > 0) {
criteria.add(Restrictions.like("user", "%"
+ assetDeviceBO.getUser().trim() + "%"));
}
if (null != assetDeviceBO.getTelephone()
&& assetDeviceBO.getTelephone().trim().length() > 0) {
criteria.add(Restrictions.like("telephone", "%"
+ assetDeviceBO.getTelephone().trim() + "%"));
}
if (null != assetDeviceBO.getUnit()
&& assetDeviceBO.getUnit().trim().length() > 0) {
criteria.add(Restrictions.like("unit", "%"
+ assetDeviceBO.getUnit().trim() + "%"));
}
if (null != assetDeviceBO.getDepartment()
&& assetDeviceBO.getDepartment().trim().length() > 0) {
criteria.add(Restrictions.like("department", "%"
+ assetDeviceBO.getDepartment().trim() + "%"));
}
if (null != assetDeviceBO.getStatus()) {
criteria.add(Restrictions.eq("status", assetDeviceBO.getStatus()));
}
if (null != assetDeviceBO.getStockTime()) {
criteria.add(Restrictions.eq("stockTime", assetDeviceBO
.getStockTime()));
}
if (null != assetDeviceBO.getValidityPeriod()) {
criteria.add(Restrictions.eq("validityPeriod", assetDeviceBO
.getValidityPeriod()));
}
if (null != assetDeviceBO.getRegistrationTime()) {
criteria.add(Restrictions.eq("registrationTime", assetDeviceBO
.getRegistrationTime()));
}
if (null != assetDeviceBO.getLocationId()) {
criteria.add(Restrictions.eq("locationId", assetDeviceBO
.getLocationId()));
}
}
return criteria;
}
public int getCountByAssetDevice(AssetDeviceBO assetDeviceBO) {
Criteria criteria = this.termMaker(assetDeviceBO);
return ((Integer)criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
}
}