package com.vci.server.base.persistence.event; import java.util.Date; import org.hibernate.Session; import org.hibernate.Transaction; import com.vci.common.objects.Historizable; import com.vci.common.utility.ObjectUtility; import com.vci.server.base.persistence.history.HistoryEntry; import com.vci.server.base.persistence.history.OperationType; public class HistoryQueryListener implements PostUpdateQueryListener, PostDeleteQueryListener{ public void onPostDeleteById(PostDeleteQueryEvent event) { if(event.getUserEntity().getUserName().equals("developer")||event.getUserEntity().getUserName().equals("admin")){//开发者模块不记录日志 return; } if(event.getObj() instanceof Historizable){ HistoryEntry entry = new HistoryEntry(); String id = ObjectUtility.getNewObjectID36(); entry.setId(id); entry.setUser(event.getUserEntity().getUserName()); entry.setIp(event.getUserEntity().getIp()); entry.setOperationType(OperationType.DELETE); entry.setModule(event.getUserEntity().getModule()); entry.setTimestamp(new Date()); entry.setEntityId(event.getValue()); entry.setEntity(event.getObj().getClass().getSimpleName()); entry.setDescription(event.getObj().toString()); recordHistory(event.getSession(), entry); } } public void onPostDeleteByIds(PostDeleteQueryEvent event) { if(event.getUserEntity().getUserName().equals("developer")||event.getUserEntity().getUserName().equals("admin")){//开发者模块不记录日志 return; } String[] ids = event.getValues(); int len = ids.length; for (int i = 0; i < len; i++) { if(event.getObjs()[i] instanceof Historizable){ HistoryEntry entry = new HistoryEntry(); String id = ObjectUtility.getNewObjectID36(); entry.setId(id); entry.setUser(event.getUserEntity().getUserName()); entry.setIp(event.getUserEntity().getIp()); entry.setOperationType(OperationType.DELETE); entry.setModule(event.getUserEntity().getModule()); entry.setTimestamp(new Date()); entry.setEntityId(ids[i]); entry.setEntity(event.getObjs()[i].getClass().getSimpleName()); entry.setDescription(event.getObjs()[i].toString()); recordHistory(event.getSession(), entry); } } } public void onPostDeleteByProperties(PostDeleteQueryEvent event) { if(event.getUserEntity().getUserName().equals("developer")||event.getUserEntity().getUserName().equals("admin")){//开发者模块不记录日志 return; } String[] props = event.getProps(); String[] values = event.getValues(); int len = props.length; String desc = ""; for (int i = 0; i < len; i++) { if (i != 0) { desc += ";"; } desc += props[i] + ":" + values[i]; } HistoryEntry entry = new HistoryEntry(); String id = ObjectUtility.getNewObjectID36(); entry.setId(id); entry.setUser(event.getUserEntity().getUserName()); entry.setIp(event.getUserEntity().getIp()); entry.setOperationType(OperationType.DELETE); entry.setModule(event.getUserEntity().getModule()); entry.setTimestamp(new Date()); entry.setDescription(desc); entry.setEntity(event.getClassName()); recordHistory(event.getSession(), entry); } public void onPostUpdateById(PostUpdateQueryEvent event) { if(event.getUserEntity().getUserName().equals("developer")||event.getUserEntity().getUserName().equals("admin")){//开发者模块不记录日志 return; } if(event.getObj() instanceof Historizable){ String objId = event.getId(); String[] props = event.getProps(); String[] values= event.getValues(); int len = props.length; for (int i = 0; i < len - 1; i++) { HistoryEntry entry = new HistoryEntry(); String id = ObjectUtility.getNewObjectID36(); entry.setId(id); entry.setEntityId(objId); entry.setUser(event.getUserEntity().getUserName()); entry.setIp(event.getUserEntity().getIp()); entry.setOperationType(OperationType.UPDATE); entry.setModule(event.getUserEntity().getModule()); entry.setTimestamp(new Date()); entry.setProperty(props[i]); entry.setNewValue(values[i]); entry.setEntity(event.getObj().getClass().getSimpleName()); entry.setDescription(event.getObj().toString()); recordHistory(event.getSession(), entry); } } } private void recordHistory(Session session, HistoryEntry entry){ Session tempSession = session.getSessionFactory().openSession(); Transaction tx = tempSession.beginTransaction(); try { tempSession.save(entry); tempSession.flush(); tx.commit(); } catch (Exception ex) { ex.printStackTrace(); try { tx.rollback(); } catch (Exception e) { } } finally { try { tempSession.close(); } catch (Exception e) { } } } }