时间:2015年09月29日 | 作者 : admin | 分类 : Java代码 | 浏览: 943次 | 评论 0 人
在配置版本中修改第三步为下面的第一步,删除第四步增加下面的第二步和第三步即可
---第一步---------LogEventListener.groovy----------
package com.fiberhome.sdmp import java.lang.reflect.Field import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory import org.hibernate.event.DeleteEvent import org.hibernate.event.SaveOrUpdateEvent import org.hibernate.event.def.DefaultDeleteEventListener import org.hibernate.event.def.DefaultSaveOrUpdateEventListener import com.fiberhome.sdmp.system.SystemLog class LogEventListener extends DefaultSaveOrUpdateEventListener { private static final Log log = LogFactory.getLog(this) @Override public void onSaveOrUpdate(SaveOrUpdateEvent event) { log.debug'onSaveOrUpdate.............' //--------------save audited start def isUpdate def entity = event.entity if(entity && entity.hasProperty("audited")) { if(entity.audited){ log.debug 'audited.update().............' isUpdate=true entity.audited.update() }else{ log.debug 'new Audited().............' isUpdate=false entity.audited = new Audited() entity.audited.create() } } //--------------save audited end //--------------save systemlog start SystemLogClass slc = (SystemLogClass)entity.class.getAnnotation(SystemLogClass); if(slc){ //该类增加了注解 Field[] fields = entity.class.getDeclaredFields(); def tableHead = new StringBuilder("<th></th>") def tableFirstRow =new StringBuilder() if(isUpdate){ tableFirstRow.append("<td>更新前</td>") }else{ tableFirstRow.append("<td>新增后</td>") } def tableSecondRow = new StringBuilder("<td>更新后</td>") for(Field field:fields){ SystemLogFieldName slfn = (SystemLogFieldName)field.getAnnotation(SystemLogFieldName); if(slfn){ //该字段增加了注解 tableHead.append("<th>${slfn.value()?slfn.value():field.getName()}</th>") tableFirstRow.append("<td>${entity?.getPersistentValue(field.getName())?:''}</td>") if(isUpdate){ tableSecondRow.append("<td>${entity?.getAt(field.getName())?:''}</td>") } } } def secondRow = "" if(isUpdate){ secondRow = "<tr>${tableSecondRow}</tr>" } def content = "<table><tr>${tableHead}</tr><tr>${tableFirstRow}</tr>${secondRow}</table>" def parentTable="" def parentRow="" if(slc.pTableName()&&slc.pFieldName()){ parentTable=slc.pTableName() parentRow=entity.getAt(slc.pFieldName())?.id } def param=["cuttentTable":slc.tableName(), "currentRow":entity.id, "operation":isUpdate?'更新':'新增', "content":content, "parentTable":parentTable, "parentRow":parentRow] SystemLog sl=new SystemLog(param) sl.save() } //--------------save systemlog end super.onSaveOrUpdate(event); } } class LogDeleteEventListener extends DefaultDeleteEventListener { @Override public void onDelete(DeleteEvent event) { def entity=event.object log.debug'onDelete.............' SystemLogClass slc = (SystemLogClass)entity.class.getAnnotation(SystemLogClass); if(slc){ //该类增加了注解 Field[] fields = entity.class.getDeclaredFields(); def tableHead = new StringBuilder("<th></th>") def tableFirstRow =new StringBuilder("<td>删除前</td>") for(Field field:fields){ SystemLogFieldName slfn = (SystemLogFieldName)field.getAnnotation(SystemLogFieldName); if(slfn){ //该字段增加了注解 tableHead.append("<th>${slfn.value()?slfn.value():field.getName()}</th>") tableFirstRow.append("<td>${entity?.getPersistentValue(field.getName())?:''}</td>") } } def content = "<table><tr>${tableHead}</tr><tr>${tableFirstRow}</tr></table>" def parentTable="" def parentRow="" if(slc.pTableName()&&slc.pFieldName()){ parentTable=slc.pTableName() parentRow=entity.getAt(slc.pFieldName())?.id } def param=["cuttentTable":slc.tableName(), "currentRow":entity.id, "operation":"删除", "content":content, "parentTable":parentTable, "parentRow":parentRow] SystemLog sl=new SystemLog(param) sl.save() } super.onDelete(event); } }
---第二步---------SystemLogFieldName.groovy----------
package com.fiberhome.sdmp import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface SystemLogFieldName { String value() default ""; } @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @interface SystemLogClass { String pFieldName() default ""//父类值 String tableName() default ""//当前表名 String pTableName() default ""//父类表名 }
---第三步---------给类增加注解----------
package com.fiberhome.sdmp.ne import com.fiberhome.sdmp.Audited; import com.fiberhome.sdmp.SystemLogClass import com.fiberhome.sdmp.SystemLogFieldName /** * @author pros_fs * @version 网元 * */ @SystemLogClass(tableName="devi_net_element",pTableName="devi_device",pFieldName="deviDevice") class DeviNeElement { //统一网元类型编号 @SystemLogFieldName("网元统一编号") Integer uniNo //网元编号 @SystemLogFieldName("网元编号") Integer no //网元类型名称 @SystemLogFieldName("网元名称") String name //网元速率 @SystemLogFieldName("网元速率") Integer nespeed //设备类型 DeviDevice deviDevice //FIXME 要删除交叉类型,交叉类型作为设备大类 //是否有控制面板 Integer controlPanel //网管上备选的逻辑EMU Integer emuId //协议分类 String protocolType //分组代码 Integer groupCode //英文网元别名 @SystemLogFieldName("网元英文名") String enAlias //中文网元别名 @SystemLogFieldName("网元中文名") String cnAlias //网元排序 Float sequence /** * 只用于接入,是否带框 */ boolean withShelf /** * 只用于接入,代理用的系统类型 */ String deviceCode //是否有问题(对象下面无框或者无主框) boolean iserror Audited audited static embedded =['audited'] static constraints = { audited nullable:true uniNo nullable:true no nullable:true name nullable:true,maxSize:30 nespeed nullable:true emuId nullable:true protocolType nullable:true,maxSize:20 groupCode nullable:true enAlias nullable:true,maxSize:30 cnAlias nullable:true,maxSize:30 sequence nullable:true controlPanel nullable:true withShelf nullable:true deviceCode nullable:true, maxSize:4 iserror nullable:true } static mapping = { table 'devi_net_element' version false cache true id generator: 'increment',sqlType:"bigint" } }
额 本文暂时没人评论 来添加一个吧
发表评论