diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/SimpleBaseDao.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/SimpleBaseDao.java
index ac36051..1a1d15d 100644
--- a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/SimpleBaseDao.java
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/SimpleBaseDao.java
@@ -1,5 +1,6 @@
 package com.supwisdom.leaveschool.common.repository;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -13,6 +14,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import com.supwisdom.leaveschool.common.model.PageModel;
+import com.supwisdom.leaveschool.common.util.ReflectFieldUtil;
 
 
 @Transactional
@@ -86,16 +88,44 @@
 	
 	 @Transactional
 	  public void save(Object entity){
+		 entity = ReflectFieldUtil.setValue(entity, "addTime", new Date());// FIXME  缺少操作人
 		 entityManager.persist(entity);
 	  }
 	 
 	 @Transactional
 	 public void update(Object entity){
+		 entity = ReflectFieldUtil.setValue(entity, "editTime", new Date());  // FIXME  缺少操作人
 		 entityManager.merge(entity);
 	 }
-	 
+	 /**
+	  * 逻辑删除
+	  * @param entity
+	  */
 	 @Transactional
 	 public void delete(Object entity){
+		 entity = ReflectFieldUtil.setValue(entity, "deleted", true);
+		 entity = ReflectFieldUtil.setValue(entity, "deleteTime", new Date());// FIXME  缺少操作人
+		 //entityManager.remove(entity);
+		 entityManager.merge(entity);
+	 }
+	 /**
+	  * 根据id逻辑删除
+	  * @param entityType
+	  * @param id
+	  */
+	 @Transactional
+	 public <T> void deleteById(Class<T> entityType,String id){
+		 T entity = entityManager.find(entityType, id);
+		 entity = ReflectFieldUtil.setValue(entity, "deleted", true);
+		 entity = ReflectFieldUtil.setValue(entity, "deleteTime", new Date());// FIXME  缺少操作人
+		 entityManager.merge(entity);
+	 }
+	 /**
+	  * 物理删除
+	  * @param entity
+	  */
+	 @Transactional
+	 public void deletePhysics(Object entity){
 		 entityManager.remove(entity);
 	 }
 	
diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java
index 56a676e..1b3be83 100644
--- a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java
@@ -20,20 +20,26 @@
 	 * @throws Exception
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	public static <T> Object setValue(T entity,String fieldName,Object fieldVlue) throws Exception{
-		if(fieldVlue!=null) {
-			Field field = entity.getClass().getDeclaredField(fieldName);
-			Class class1 = field.getType();//field.getDeclaringClass();
-			Class class2 = fieldVlue.getClass();
-			System.out.println(class1.isAssignableFrom(class2));
-			//判断两个类型是否相等
-			if(class1.isAssignableFrom(class2)) {
-				//setAccessible这行代码把对象上的id字段设置为public访问属性.
-				 field.setAccessible(true);
-				// 设置该T的属性
-				field.set(entity, fieldVlue);
+	public static <T> T setValue(T entity,String fieldName,Object fieldVlue){
+		try {
+			if(fieldVlue!=null) {
+				Field field = entity.getClass().getDeclaredField(fieldName);
+				Class class1 = field.getType();//field.getDeclaringClass();
+				Class class2 = fieldVlue.getClass();
+				//判断两个类型是否相等
+				if(class1.isAssignableFrom(class2)) {
+					//setAccessible这行代码把对象上的id字段设置为public访问属性.
+					 field.setAccessible(true);
+					// 设置该T的属性
+					field.set(entity, fieldVlue);
+				}
 			}
+			return entity;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
 		}
-		return entity;
+		
+		
 	}
 }
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/Test.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/Test.java
index 5ece20c..1e506db 100644
--- a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/Test.java
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/Test.java
@@ -1,8 +1,12 @@
 package com.supwisdom.leaveschool.leaving.repository;
 
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
 import org.springframework.stereotype.Service;
 @Service
 public class Test {
+	
+	
 	private String id="00";
 
 	public String getId() {
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java
index 87a3774..5b2fd1e 100644
--- a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java
@@ -16,6 +16,8 @@
 	private Integer age;
 	
 	private Date thisTime;
+	
+	private Boolean deleted;
 
 	public String getId() {
 		return id;
@@ -56,5 +58,13 @@
 	public void setThisTime(Date thisTime) {
 		this.thisTime = thisTime;
 	}
+
+	public Boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(Boolean deleted) {
+		this.deleted = deleted;
+	}
 	
 }
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java
index 0a16467..9a4e037 100644
--- a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java
@@ -1,7 +1,6 @@
 package com.supwisdom.leaveschool.leaving.test;
 
 import java.lang.reflect.Field;
-import java.util.Date;
 
 public class TestMain {
 	
@@ -26,7 +25,7 @@
 	
 	public static void main(String[] args) {
 		try {
-			System.out.println(save(new Test1(),"thisTime",new Date()));
+			System.out.println(save(new Test1(),"deleted",true));
 		} catch (Exception e) {
 			System.out.println(1111);
 			e.printStackTrace();
