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) {
|
}
|
}
|
}
|
}
|