diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/Repository/DictionaryTypeRepository.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/Repository/DictionaryTypeRepository.java
index eb72101..87e9292 100644
--- a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/Repository/DictionaryTypeRepository.java
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/Repository/DictionaryTypeRepository.java
@@ -1,41 +1,31 @@
-package com.supwisdom.leaveschool.basicsdata.Repository;
+package com.supwisdom.leaveschool.basicsdata.repository;
 
+import java.util.HashMap;
 import java.util.Map;
 
-import org.springframework.data.domain.Example;
-import org.springframework.data.domain.ExampleMatcher;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Repository;
 
 import com.supwisdom.leaveschool.basicsdata.domain.DictionaryType;
-import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
-import com.supwisdom.leaveschool.common.util.MapBeanUtils;
+import com.supwisdom.leaveschool.common.model.PageModel;
+import com.supwisdom.leaveschool.common.repository.SimpleBaseDao;
 
 @Repository
-public interface DictionaryTypeRepository extends BaseJpaRepository<DictionaryType> {
-  
-	public default Page<DictionaryType> selectPageListByQuery(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+public class DictionaryTypeRepository extends SimpleBaseDao{
 
-		DictionaryType probe = new DictionaryType();
-		ExampleMatcher matcher = ExampleMatcher.matching();
 		
-//		probe.setEnabled(true);
-//		matcher.withMatcher("enabled", ExampleMatcher.GenericPropertyMatchers.exact());
-	    if (mapBean != null&&mapBean.keySet().size()>0) {
-	      probe.setName(MapBeanUtils.getString(mapBean, "name"));
-	      matcher.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains());
-	    }
-//	    
-//	    matcher.withMatcher("code", ExampleMatcher.GenericPropertyMatchers.contains())
-//	        .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())
-//	        .withMatcher("enabled", ExampleMatcher.GenericPropertyMatchers.exact());
-	    
-	    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
-	    Example<DictionaryType> example = Example.of(probe, matcher);
-	    
-	    Page<DictionaryType> page = this.findAll(example, pageRequest);
-	    
-	    return page;
-	  }
+		public PageModel<DictionaryType> getDictionaryTypePage(String name, int pageIndex,
+				int pageSize)  {
+				Map<String,Object> params = new HashMap<String,Object>();  
+				if(StringUtils.isNotBlank(name)){
+					name = StringUtils.trimToEmpty(name);
+					params.put("or upper(code) like ? ","%"+name.toUpperCase()+"%");
+					params.put("or name like ? ","%"+name+"%");
+				}
+				name="%"+name+"%";
+				String sql =  "select * from TB_B_DICTIONARY_TYPE where upper(code) like ?1 or name like ?2";
+				return this.getScrollSqlData(DictionaryType.class, pageIndex, pageSize, sql, name,name);
+		}
+
+
 }
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/api/Api1DictionaryTypeController.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/api/Api1DictionaryTypeController.java
index 155e9a2..e88001b 100644
--- a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/api/Api1DictionaryTypeController.java
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/api/Api1DictionaryTypeController.java
@@ -1,17 +1,17 @@
 package com.supwisdom.leaveschool.basicsdata.api;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.supwisdom.leaveschool.basicsdata.Repository.DictionaryTypeRepository;
 import com.supwisdom.leaveschool.basicsdata.domain.DictionaryType;
-import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.basicsdata.repository.DictionaryTypeRepository;
+import com.supwisdom.leaveschool.common.model.PageModel;
 import com.supwisdom.leaveschool.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.common.model.PagerResponseModel;
 
@@ -23,31 +23,53 @@
 @RestController
 @RequestMapping("/api/v1/basics-data/dictionary-types")
 @Api(value="字典表类型操作",tags={"字典表类型的操作接口"})
-public class Api1DictionaryTypeController extends CrudApiController<DictionaryType, DictionaryTypeRepository> {
+public class Api1DictionaryTypeController {
 
   @Autowired
   private DictionaryTypeRepository dictionaryTypeRepository;
 
-	@Override
-	protected DictionaryTypeRepository getRepository() {
-		return dictionaryTypeRepository;
-	}
 	
-	  @GetMapping(path = "/page/sercher",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+	  @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
 	  @ResponseStatus(value = HttpStatus.OK)
-	  @ApiOperation(value="根据查询条件获取字典表类型列表",notes="注意问题点")
+	  @ApiOperation(value="获取字典表类型列表",notes="根据查询条件获取字典表类型列表")
 	  @ApiImplicitParams({
-	      @ApiImplicitParam(name = "pageIndex", value = "当前第页数，默认0，为第一页", dataType = "int", required = true, defaultValue = "0"),
-	      @ApiImplicitParam(name = "pageSize", value = "每页条数，默认20", required = true, dataType = "int", paramType = "query", defaultValue = "20"),
-	      @ApiImplicitParam(name = "name", value = "类型码或名称", required = false, dataType = "string", paramType = "query", defaultValue = "")
+	      @ApiImplicitParam(name = "pageIndex", value = "当前第页数，默认0，为第一页", dataType = "integer",defaultValue="0", paramType="query"),
+	      @ApiImplicitParam(name = "pageSize", value = "每页条数，默认20",  dataType = "integer",defaultValue="20", paramType="query"),
+	      @ApiImplicitParam(name = "name", value = "类型码或名称", dataType = "string",  defaultValue = "",paramType="query")
 	  })
-	  public Object list(int pageIndex,int pageSize,String name) {
+	  public Object list(@RequestParam(name="pageIndex", defaultValue="1",required=true) Integer pageIndex, @RequestParam(name="pageSize", defaultValue="1",required=true) Integer pageSize,String name) {
 		 PagerRequestModel pagerRequestModel = new PagerRequestModel(pageIndex, pageSize);
 		 pagerRequestModel.getMapBean().put("name", name);
-		 Page<DictionaryType> page = dictionaryTypeRepository.selectPageListByQuery(pagerRequestModel.getPageIndex(), pagerRequestModel.getPageSize(), pagerRequestModel.getMapBean());
-		 PagerResponseModel<DictionaryType> pagerResponseModel = PagerResponseModel.of(pagerRequestModel,page);
-	    return pagerResponseModel;
+		 PageModel<DictionaryType> page = dictionaryTypeRepository.getDictionaryTypePage(name,pagerRequestModel.getPageIndex(), pagerRequestModel.getPageSize());
+	    return page;
 	  }
+	  
+	  
+//	  @GetMapping(path="/search", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+//	  @ResponseStatus(value = HttpStatus.OK)
+//	  @ApiOperation(value="获取字典表类型列表",notes="根据查询条件获取字典表类型列表")
+//	  public Object list2(@RequestParam(defaultValue="0") @ApiParam(name="pageIndex",value="当前第页数，默认0，为第一页",required=true,defaultValue="0",type="integer",format="int32") Integer pageIndex, 
+//			  				@RequestParam(defaultValue="20")  @ApiParam(name="pageSize",value="每页条数，默认20",required=true,defaultValue="20",type="integer",format="int32") Integer pageSize,
+//			  				@RequestParam(defaultValue="") @ApiParam(name="name",value="类型码或名称",required=false,defaultValue="") String name) {
+//		 PagerRequestModel pagerRequestModel = new PagerRequestModel(pageIndex, pageSize);
+//		 pagerRequestModel.getMapBean().put("name", name);
+//		 Page<DictionaryType> page = dictionaryTypeRepository.selectPageListByQuery(pagerRequestModel.getPageIndex(), pagerRequestModel.getPageSize(), pagerRequestModel.getMapBean());
+//		 PagerResponseModel<DictionaryType> pagerResponseModel = PagerResponseModel.of(pagerRequestModel,page);
+//	    return pagerResponseModel;
+//	  }
+	  
+//	  @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+//	  @ResponseStatus(value = HttpStatus.OK)
+//	  public Object create(String username,@RequestBody DictionaryType dictionaryType) {
+//	    
+//	    @SuppressWarnings("unused")
+//	    DictionaryType ret = dictionaryTypeRepository.insert(dictionaryType);
+//	    
+//	    SuccessResponseModel res = new SuccessResponseModel();
+//	    res.setSuccess("info.create.success");
+//	    
+//	    return res;
+//	  }
 
 
 }
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/repository/DictionaryTypeRepository2.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/repository/DictionaryTypeRepository2.java
new file mode 100644
index 0000000..716f109
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/repository/DictionaryTypeRepository2.java
@@ -0,0 +1,46 @@
+package com.supwisdom.leaveschool.basicsdata.repository;
+
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.ExampleMatcher;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.basicsdata.domain.DictionaryType;
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.common.util.MapBeanUtils;
+
+@Repository
+public interface DictionaryTypeRepository2 extends BaseJpaRepository<DictionaryType> {
+	
+//	@Autowired
+//    private EntityManager entityManager;
+  
+	public default Page<DictionaryType> selectPageListByQuery(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+
+		DictionaryType probe = new DictionaryType();
+		ExampleMatcher matcher = ExampleMatcher.matching();
+		
+//		probe.setEnabled(true);
+//		matcher.withMatcher("enabled", ExampleMatcher.GenericPropertyMatchers.exact());
+	    if (mapBean != null&&mapBean.keySet().size()>0) {
+	      probe.setName(MapBeanUtils.getString(mapBean, "name"));
+	      matcher.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains());
+	    }
+//	    
+//	    matcher.withMatcher("code", ExampleMatcher.GenericPropertyMatchers.contains())
+//	        .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())
+//	        .withMatcher("enabled", ExampleMatcher.GenericPropertyMatchers.exact());
+	    
+	    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+	    Example<DictionaryType> example = Example.of(probe, matcher);
+	    Page<DictionaryType> page = this.findAll(example, pageRequest);
+	    
+	    return page;
+	  }
+}
diff --git a/leaveschool/basics-data/src/main/resources/application.yml b/leaveschool/basics-data/src/main/resources/application.yml
index a36a52d..7392853 100644
--- a/leaveschool/basics-data/src/main/resources/application.yml
+++ b/leaveschool/basics-data/src/main/resources/application.yml
@@ -15,7 +15,8 @@
     name: sample-user
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://172.50.10.15:3306/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
+##    url: jdbc:mysql://172.50.10.15:3306/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
+    url: jdbc:mysql://180.166.150.114:9512/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
     username: leave_school
     password: 111111
   jpa:
diff --git a/leaveschool/client/src/main/resources/application.yml b/leaveschool/client/src/main/resources/application.yml
index c395a5a..96983e3 100644
--- a/leaveschool/client/src/main/resources/application.yml
+++ b/leaveschool/client/src/main/resources/application.yml
@@ -58,5 +58,6 @@
 
 gateway.api.url: http://localhost:5555
 
-#sample-user.api.url: ${gateway.api.url}/sample-user
-sample-user.api.url: http://localhost:10010
+#sample-user.api.url: ${gateway.api.url}/leaveschool-user
+leaveschool-user.api.url: http://localhost:10010
+leaveschool-basics-data.api.url: http://localhost:10020
diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PageModel.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PageModel.java
new file mode 100644
index 0000000..b7290b0
--- /dev/null
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PageModel.java
@@ -0,0 +1,114 @@
+/**
+ * 
+ */
+package com.supwisdom.leaveschool.common.model;
+
+import java.util.List;
+
+
+/**
+ * 
+ * @author Bo.Chen
+ *
+ * @param <T>
+ */
+public class PageModel<T> {
+
+	private List<T> list;
+	private int totalCount = 0;	//总条数
+	private int pageSize = 20;	//每页行数
+	private int totalPages;	//总共多少页
+	private int pre;	//上一页
+	private int next; 	//下一页
+	private int pageIndex;	//当前页号
+	
+	
+	public PageModel(){
+	}
+	public PageModel(int totalCount, List<T> list) {
+		super();
+		this.totalCount = totalCount;
+		this.list = list;
+	}
+	
+	public PageModel(int totalCount, List<T> res,int pageSize) {
+		this(totalCount,res);
+		this.pageSize = pageSize;
+		if(pageSize==-1){
+			this.totalPages = 1;
+		}else{
+			this.totalPages=(this.totalCount+this.pageSize-1)/this.pageSize;
+		}
+	}
+
+	public PageModel(int totalCount, List<T> res,int pageIndex,int pageSize) {
+		this(totalCount,res,pageSize);
+		this.pageIndex = pageIndex;
+		if(this.totalPages==1){
+			this.pre=1;
+			this.next=1;
+		}else if(this.totalPages==this.pageIndex){
+			this.pre=this.totalPages-1;
+			this.next=this.totalPages;
+		}else{
+			this.pre=this.totalPages-1;
+			this.next=this.totalPages+1;
+		}
+	}
+	
+	
+	public List<T> getList() {
+		return list;
+	}
+	public void setList(List<T> list) {
+		this.list = list;
+	}
+	
+	public int getTotalCount() {
+		return totalCount;
+	}
+	public void setTotalCount(int totalCount) {
+		this.totalCount = totalCount;
+	}
+	public int getPageSize() {
+		return pageSize;
+	}
+	public void setPageSize(int pageSize) {
+		this.pageSize = pageSize;
+	}
+	public int getTotalPages() {
+		return totalPages;
+	}
+	public void setTotalPages(int totalPages) {
+		this.totalPages = totalPages;
+	}
+	public int getPageIndex() {
+		return pageIndex;
+	}
+	public void setPageIndex(int pageIndex) {
+		this.pageIndex = pageIndex;
+	}
+	
+	public int getPre() {
+		return pageIndex-1<=0?1:pageIndex-1;
+	}
+	public void setPre(int pre) {
+	}
+	public int getNext() {
+		return pageIndex+1>totalPages?totalPages:pageIndex+1;
+	}
+	public void setNext(int next) {
+	}
+	
+	
+	
+	@Override
+	public String toString() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("总条数:").append(this.totalCount)
+				.append(",总页:").append(totalPages)
+				.append(",当前页:").append(pageIndex);
+		return builder.toString();
+	}
+	
+}
diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java
index 548440a..3203d78 100644
--- a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java
@@ -40,16 +40,16 @@
 	  }
 
   public static <T> PagerResponseModel<T> of(PagerRequestModel pagerRequestModel,Page<T> page) {
-    PagerResponseModel<T> pagerResponseModell = new PagerResponseModel<T>();
-    pagerResponseModell.setPageIndex(pagerRequestModel.getPageIndex());
-    pagerResponseModell.setPageSize(pagerRequestModel.getPageSize());
-    pagerResponseModell.setMapBean(pagerRequestModel.getMapBean());
-    pagerResponseModell.setCurrentItemCount(page.getNumberOfElements());
-    pagerResponseModell.setPageCount(page.getTotalPages());
-    pagerResponseModell.setRecordCount(page.getTotalElements());
-    pagerResponseModell.setItems(page.getContent());
+//    PagerResponseModel<T> pagerResponseModell = new PagerResponseModel<T>();
+//    pagerResponseModell.setPageIndex(pagerRequestModel.getPageIndex());
+//    pagerResponseModell.setPageSize(pagerRequestModel.getPageSize());
+//    pagerResponseModell.setMapBean(pagerRequestModel.getMapBean());
+//    pagerResponseModell.setCurrentItemCount(page.getNumberOfElements());
+//    pagerResponseModell.setPageCount(page.getTotalPages());
+//    pagerResponseModell.setRecordCount(page.getTotalElements());
+//    pagerResponseModell.setItems(page.getContent());
 
-    return pagerResponseModell;
+    return  new PagerResponseModel<T>(pagerRequestModel,page);
   }
   
   	public static <T> PagerResponseModel<T> of(PagerRequestModel pagerRequestModel) {
diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
index e1e0531..2156e2f 100644
--- a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
@@ -62,5 +62,6 @@
 
     return e;
   }
-
+    
+  
 }
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
new file mode 100644
index 0000000..5c1ca00
--- /dev/null
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/repository/SimpleBaseDao.java
@@ -0,0 +1,78 @@
+package com.supwisdom.leaveschool.common.repository;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.supwisdom.leaveschool.common.model.PageModel;
+
+
+@Transactional
+@Repository
+public class SimpleBaseDao  {
+
+	 	@Autowired
+	    private EntityManager entityManager;
+	 	
+	 	
+	
+
+	public EntityManager getEntityManager() {
+			return entityManager;
+		}
+
+	public  <T> PageModel<T> getScrollSqlData(Class<T> entityType, int pageIndex,
+			int pageSize, String sql, Object... params) {
+		List<T> list = getScrollDataList(entityType, sql, pageIndex, pageSize, params);
+		int count  = getCount(sql, params);
+		return new PageModel<T>(count,list,pageIndex,pageSize);
+	}
+	
+	@SuppressWarnings("unchecked")
+	private <T> List<T> getScrollDataList(Class<T> entityType,String sql,int pageIndex,int pageSize,Object... params) {
+		try {
+			Query query = this.entityManager.createNativeQuery(sql);
+			if(pageIndex!=-1 && pageSize!=-1){
+				if(pageIndex<=1) pageIndex=1;
+				query.setFirstResult(pageSize*(pageIndex-1));
+				query.setMaxResults(pageSize);
+			}
+			setQueryParameter(query, params);
+			 return query.getResultList();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public int getCount(String sql, Object... params) {
+		if(sql.toLowerCase().trim().startsWith("select")){
+			sql = "select count(*)" + sql.substring(sql.toLowerCase().indexOf("from")); 
+		}else{
+			sql = "select count(*) " + sql;
+		}
+		Query query =  this.entityManager.createNativeQuery(sql);
+		setQueryParameter(query, params);
+		Number count  = (Number)query.getSingleResult();
+		return count.intValue();
+	}
+	
+	/**
+	 * 设置查询参数
+	 * @param query 查询对象
+	 * @param params 参数值
+	 */
+	public static void setQueryParameter(Query query, Object... params){
+		if(params!=null&&params.length>0){
+			for(int i = 0; i < params.length ; i++){
+				query.setParameter(i+1, params[i]);
+			}
+		}
+	}
+}
