aop使用,在資料修改時,記錄修改的欄位的歷史版本記錄
阿新 • • 發佈:2019-02-03
配置在其他文章,提到過,
貼上程式碼
package com.audaque.collection.aop; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.audaque.annotation.EnumFields; import com.audaque.annotation.PrimaryKeyFields; import com.audaque.collection.CollectionBuidingplate; import com.audaque.collection.CollectionBuilding; import com.audaque.collection.CollectionGateplate; import com.audaque.collection.CollectionHistory; import com.audaque.collection.CollectionUnitplate; import com.audaque.collection.Corporation; import com.audaque.collection.House; import com.audaque.collection.app.dao.BuildManagerDao; import com.audaque.collection.app.dao.CollectionBuildingDao; import com.audaque.collection.app.dao.CollectionBuildingplateDao; import com.audaque.collection.app.dao.CollectionGateplateDao; import com.audaque.collection.app.dao.CollectionHistoryDao; import com.audaque.collection.app.dao.CollectionUnitplateDao; import com.audaque.collection.app.dao.CorporationDao; import com.audaque.collection.app.dao.HouseDao; import com.audaque.collection.app.dao.PopulationDao; import com.audaque.collection.app.model.CollectionBuildManager; import com.audaque.collection.common.model.Population; import com.yuncai.core.app.action.BaseAction; /** * @Author: LGH * @Description: 處理表單留痕 * @param: * @DATA: Created in 10:41 2018/8/15 */ @Aspect @Component public class CollectionHistoryHandler extends BaseAction { @Autowired private CollectionGateplateDao collectionGateplateDao; @Autowired private CollectionBuildingplateDao collectionBuildingplateDao; @Autowired private CollectionUnitplateDao collectionUnitplateDao; @Autowired private CollectionBuildingDao collectionBuildingDao; @Autowired private CollectionHistoryDao collectionHistoryDao; @Autowired private HouseDao houseDao; @Autowired private CorporationDao corporationDao; @Autowired private PopulationDao populationDao; @Autowired private BuildManagerDao buildManagerDao; @Before("execution(* com.audaque.collection.app.dao..*.update*(..))") public void update_Before(JoinPoint joinPoint){ System.out.println("這裡是目標方法執行前先執行1111"); Object[] objArr = joinPoint.getArgs(); for (Object object : objArr) { invokeEnum(object,"getValueByLable"); } } /** * @Author: LGH * @Description: * @param: * @DATA: Created in 11:17 2018/8/15 */ private void invokeEnum(Object entity, String method){ String id="0"; System.out.println("這裡是目標方法執行前先執行22"); try { Class clazz = entity.getClass(); //獲取主鍵值 Field[] fields = entity.getClass().getDeclaredFields(); for (Field field : fields) { if(field.isAnnotationPresent(PrimaryKeyFields.class)){ field.setAccessible(true); Object obj = field.get(entity); if(obj != null){ id=obj.toString(); } } } JSONArray jsonArr = null; int type = 0; if(clazz.getSimpleName().equals("CollectionBuilding")){ System.out.println("樓棟"); CollectionBuilding oldBean= collectionBuildingDao.selectByPrimaryKey(Integer.valueOf(id)); type = 1; jsonArr = contrastObj(fields, oldBean, entity); //collectionHistorys=contrastObj( collectionBuilding, entity,getUserId(),collectionBuilding.getBuildingId(),1, collectionHistorys); }else if(clazz.getSimpleName().equals("CollectionGateplate")){ System.out.println("門牌"); CollectionGateplate oldBean= collectionGateplateDao.selectByPrimaryKey(Integer.valueOf(id)); type = 2; jsonArr = contrastObj(fields, oldBean, entity); // collectionHistorys=contrastObj(gateplate, entity,Integer.valueOf(id),getUserId(),2, collectionHistorys); }else if(clazz.getSimpleName().equals("CollectionBuidingplate")){ System.out.println("樓盤"); CollectionBuidingplate oldBean= collectionBuildingplateDao.selectByPrimaryKey(Integer.valueOf(id)); type = 3; jsonArr = contrastObj(fields, oldBean, entity); // collectionHistorys=contrastObj(buidingplate, entity,Integer.valueOf(id),getUserId(),3, collectionHistorys); }else if(clazz.getSimpleName().equals("CollectionUnitplate")){ System.out.println("單元牌"); CollectionUnitplate oldBean= collectionUnitplateDao.selectByPrimaryKey(Integer.valueOf(id)); type = 4; jsonArr = contrastObj(fields, oldBean, entity); //collectionHistorys=contrastObj(unitplate, entity,Integer.valueOf(id),getUserId(),4, collectionHistorys); }else if(clazz.getSimpleName().equals("House")){ System.out.println("房屋"); House oldBean=houseDao.selectByPrimaryKey(Integer.valueOf(id)); type = 5; jsonArr = contrastObj(fields, oldBean, entity); // collectionHistorys=contrastObj(house, entity,Integer.valueOf(id),getUserId(),5, collectionHistorys); }else if(clazz.getSimpleName().equals("Corporation")){ System.out.println("法人"); Corporation oldBean=corporationDao.getCorporation(Integer.valueOf(id)); type = 6; jsonArr = contrastObj(fields, oldBean, entity); // collectionHistorys=contrastObj(house, entity,Integer.valueOf(id),getUserId(),5, collectionHistorys); }else if(clazz.getSimpleName().equals("Population")){ System.out.println("人口"); Population oldBean=populationDao.queryPopulationById(Integer.valueOf(id)); type =7; jsonArr = contrastObj(fields, oldBean, entity); // collectionHistorys=contrastObj(house, entity,Integer.valueOf(id),getUserId(),5, collectionHistorys); }else if(clazz.getSimpleName().equals("CollectionBuildManager")){ System.out.println("樓棟長"); CollectionBuildManager oldBean=null; oldBean=buildManagerDao.selectByPrimaryKey(Integer.valueOf(id)); type =8; jsonArr = contrastObj(fields, oldBean, entity); // collectionHistorys=contrastObj(house, entity,Integer.valueOf(id),getUserId(),5, collectionHistorys); } ///collectionHistorys=contrastObj(building, collectionBuilding,userId,1, collectionHistorys); if (jsonArr!=null && jsonArr.size()>0){ List<CollectionHistory> collectionHistorys = new ArrayList<CollectionHistory>(); for (int i = 0; i < jsonArr.size(); i++) { JSONObject json = jsonArr.getJSONObject(i); CollectionHistory collectionHistory=new CollectionHistory(); collectionHistory.setBizId(Integer.valueOf(id)); collectionHistory.setColumnName(json.getString("name")); collectionHistory.setColumnValue(json.getString("value")); collectionHistory.setCreateTime(new Date()); collectionHistory.setCreateUser(getUserId()); collectionHistory.setType(type); collectionHistorys.add(collectionHistory); } collectionHistoryDao.batchCollectionHistory(collectionHistorys); } for (Field field : fields) { if(field.isAnnotationPresent(EnumFields.class)){ Class<?> efoClass = field.getAnnotation(EnumFields.class).requiredEnum(); field.setAccessible(true); Object obj = field.get(entity); if(obj != null && efoClass != null){ Method efMethod = efoClass.getMethod(method, String.class); Object efo = efMethod.invoke(efoClass, obj); field.set(entity, efo); } } } } catch (NumberFormatException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IntrospectionException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } /** * @Title: contrastObj * @Description: 歷史記錄留痕 * @param fields * @param oldBean * @param newBean * @return * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException * @throws IntrospectionException JSONArray * @author: huafu.su */ private JSONArray contrastObj(Field[] fields, Object oldBean, Object newBean) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException{ JSONArray jsonArr = new JSONArray(); if(oldBean == null || newBean == null){ return jsonArr; } for (Field field : fields) { if("serialVersionUID".equals(field.getName()) || "lastUpdateTime".equals(field.getName())|| "formData".equals(field.getName())){ System.out.println(field.getName()); continue; }else{ PropertyDescriptor pd = new PropertyDescriptor(field.getName(), oldBean.getClass()); Method getMethod = pd.getReadMethod(); Object o1 = getMethod.invoke(oldBean); Object o2 = getMethod.invoke(newBean); if(o1==null || o2 == null){ continue; } if (!o1.toString().equals(o2.toString())) { JSONObject json = new JSONObject(); json.put("name", field.getName()); json.put("value", o1.toString()); jsonArr.add(json); } } } return jsonArr; } /** * @Author: LGH * @Description: 歷史記錄留痕 * @param: type 1 是樓棟 2是門牌 3是樓盤 4是單元牌 * @DATA: Created in 16:07 2018/8/15 */ // public List<CollectionHistory> contrastObj(Object oldBean, Object newBean, Integer bizId,Integer userid, Integer type, List<CollectionHistory> collectionHistorys) { // try { // Class clazz = oldBean.getClass(); // Field[] fields = oldBean.getClass().getDeclaredFields(); // for (Field field : fields) { // if("serialVersionUID".equals(field.getName()) || "lastUpdateTime".equals(field.getName())){ // continue; // } // PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); // Method getMethod = pd.getReadMethod(); // Object o1 = getMethod.invoke(oldBean); // Object o2 = getMethod.invoke(newBean); // if(o1==null || o2 == null){ // continue; // } // if (!o1.toString().equals(o2.toString())) { // CollectionHistory collectionHistory=new CollectionHistory(); // collectionHistory.setBizId(bizId); // collectionHistory.setColumnName(field.getName()); // collectionHistory.setColumnValue(o1.toString()); // collectionHistory.setCreateTime(new Date()); // collectionHistory.setCreateUser(userid); // collectionHistory.setType(type); // collectionHistorys.add(collectionHistory); // } // } // } catch (Exception e) { // e.printStackTrace(); // } // return collectionHistorys; // } }