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 496ccaf..eb72101 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,12 +1,41 @@
 package com.supwisdom.leaveschool.basicsdata.Repository;
 
+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.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 DictionaryTypeRepository extends BaseJpaRepository<DictionaryType> {
   
+	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/java/com/supwisdom/leaveschool/basicsdata/api/Api1DictionaryTypeController.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/api/Api1DictionaryTypeController.java
index 896d4b5..155e9a2 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,15 +1,28 @@
 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.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.common.model.PagerRequestModel;
+import com.supwisdom.leaveschool.common.model.PagerResponseModel;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 
 @RestController
 @RequestMapping("/api/v1/basics-data/dictionary-types")
+@Api(value="字典表类型操作",tags={"字典表类型的操作接口"})
 public class Api1DictionaryTypeController extends CrudApiController<DictionaryType, DictionaryTypeRepository> {
 
   @Autowired
@@ -19,6 +32,22 @@
 	protected DictionaryTypeRepository getRepository() {
 		return dictionaryTypeRepository;
 	}
+	
+	  @GetMapping(path = "/page/sercher",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+	  @ResponseStatus(value = HttpStatus.OK)
+	  @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 = "")
+	  })
+	  public Object list(int pageIndex,int 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;
+	  }
 
 
 }
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/DictionaryType.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/DictionaryType.java
index 0361df8..4258939 100644
--- a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/DictionaryType.java
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/DictionaryType.java
@@ -13,6 +13,7 @@
  */
 @Entity
 @Table(name = "TB_B_DICTIONARY_TYPE")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_DICTIONARY_TYPE",comment="字典类型表")
 public class DictionaryType extends ABaseDomain {
 
  
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java
index 181f6a5..71d7a7b 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java
@@ -13,12 +13,15 @@
 import com.supwisdom.infras.security.configure.oauth2.EnableInfrasOAuth2;
 import com.supwisdom.leaveschool.feign.CharlesRequestInterceptor;
 
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
 @SpringBootApplication
 @EnableCircuitBreaker
 @EnableFeignClients(value = "com.supwisdom.leaveschool.client.service")
 @EnableHystrixDashboard
 //@EnableInfrasOAuth2
 @EnableInfrasApiSecurity
+@EnableSwagger2
 public class ClientApplication {
 
   public static void main(String[] args) {
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java
index 5e71759..23824af 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java
@@ -3,17 +3,23 @@
 import java.util.HashMap;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.supwisdom.leaveschool.client.security.core.userdetails.MyUser;
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminUserRemoteService;
+import com.supwisdom.leaveschool.client.util.AuthenticationUtil;
 import com.supwisdom.leaveschool.client.util.MyUserUtil;
 import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 
+import io.swagger.annotations.ApiOperation;
+
 @RestController
 @RequestMapping("/api/hello")
 public class HelloController {
@@ -22,7 +28,7 @@
 	SampleUser1AdminUserRemoteService sampleUser1AdminUserRemoteService;
 	
 	@GetMapping(path = "/{name}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-	public MyUser hello(@PathVariable("name") String name) {
+	public MyUser hello2(@PathVariable("name") String name) {
 		MyUser user = MyUserUtil.getCurrentMyUser();
 		
 		//PagerRequestModel pagerRequestModel = new PagerRequestModel();  // 分页请求，默认 pageIndex=0, pageSize=20
@@ -33,4 +39,11 @@
 		
 		return user;
 	}
+	
+	  @PostMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+	  @ResponseStatus(value = HttpStatus.OK)
+	  public Object create(String name) {
+			MyUser user = MyUserUtil.getCurrentMyUser();
+		  return user;
+	  }
 }
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/basicsdata/DictionaryTypeController.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/basicsdata/DictionaryTypeController.java
index a82b46a..c84153a 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/basicsdata/DictionaryTypeController.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/basicsdata/DictionaryTypeController.java
@@ -6,16 +6,23 @@
 import org.springframework.http.HttpStatus;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.supwisdom.leaveschool.client.service.basicsdata.DictionaryType1RemoteService;
+import com.supwisdom.leaveschool.client.service.DictionaryType1RemoteService;
+import com.supwisdom.leaveschool.client.util.AuthenticationUtil;
+import com.supwisdom.leaveschool.proxy.basicsdata.domain.DictionaryType;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 
 @RestController
 @RequestMapping("/api/basics-data/dictionary-types")
@@ -27,18 +34,30 @@
 	@Autowired
 	DictionaryType1RemoteService dictionaryType1RemoteService;
 	
+	
 	  @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
 	  @ResponseStatus(value = HttpStatus.OK)
-	  @ApiOperation(value="获取字典表类型列表",tags={"获取字典表类型列表copy"},notes="注意问题点")
-//	  @ApiImplicitParams({
-//	      @ApiImplicitParam(name = "pageIndex", value = "当前第页数，默认0，为第一页", required = true, dataType = "int", paramType = "query", 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 = "")
-//	  })
-	  @ResponseBody
-	  public Object list(@ApiParam(name="pageIndex",value="当前第页数,默认0，为第一页",required=true,defaultValue="0") int pageIndex,
-			  			 @ApiParam(name="pageIndex",value="每页条数，默认20",required=true,defaultValue="20") int pageSize,
-			  			@ApiParam(name="name",value="类型码或名称",required=true,defaultValue="20") String name) {
-	    return dictionaryType1RemoteService.list(pageIndex,pageSize,name);
+	  @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 = "")
+	  })
+//	  public Object list(@ApiParam(name="pageIndex",value="当前第页数,默认0，为第一页",required=true,defaultValue="0") int pageIndex,
+//			  			 @ApiParam(name="pageSize",value="每页条数，默认20",required=true,defaultValue="20") int pageSize,
+//			  			@ApiParam(name="name",value="类型码或名称",required=false,defaultValue="") String name) {
+//	    return dictionaryType1RemoteService.list(pageIndex,pageSize,name);
+//	  }
+	  public Object list(int pageIndex,@RequestParam(defaultValue="20") int pageSize,String name) {
+		return dictionaryType1RemoteService.list(pageIndex,pageSize,name);
+		}
+	  
+	  
+	  @PostMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+	  @ResponseStatus(value = HttpStatus.OK)
+	  @ApiOperation(value="新增字典表类型",notes="注意问题点")
+	  public Object create(String name) {
+		  logger.debug(AuthenticationUtil.currentUsername());
+		  return "";
 	  }
 }
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DemoUserRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DemoUserRemoteService.java
index 2fa6624..2072979 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DemoUserRemoteService.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DemoUserRemoteService.java
@@ -11,8 +11,8 @@
 import com.supwisdom.leaveschool.client.service.fallback.DemoUserRemoteHystrix;
 
 @FeignClient(
-    name = "sample-user", 
-    url = "${sample-user.api.url}/api/demo/users", 
+    name = "leaveschool-user", 
+    url = "${leaveschool-user.api.url}/api/demo/users", 
     fallback = DemoUserRemoteHystrix.class
 )
 public interface DemoUserRemoteService {
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/basicsdata/DictionaryType1RemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DictionaryType1RemoteService.java
similarity index 90%
rename from leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/basicsdata/DictionaryType1RemoteService.java
rename to leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DictionaryType1RemoteService.java
index 329c550..1f36fc8 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/basicsdata/DictionaryType1RemoteService.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/DictionaryType1RemoteService.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.client.service.basicsdata;
+package com.supwisdom.leaveschool.client.service;
 
 import java.util.Map;
 
@@ -24,7 +24,7 @@
 public interface DictionaryType1RemoteService {
   
   @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public PagerResponseModel<DictionaryType> list(int pageIndex,int pageSize,String name);
+  public PagerResponseModel<DictionaryType> list(@RequestParam("pageIndex") int pageIndex,@RequestParam("pageSize") int pageSize,@RequestParam("name") String name);
 
   @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   public DictionaryType get(@PathVariable("id") String id);
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
index a83980f..a29bbe1 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
@@ -14,8 +14,8 @@
 import com.supwisdom.leaveschool.proxy.user.domain.Group;
 
 @FeignClient(
-    name = "sample-user-1-admin-group", 
-    url = "${sample-user.api.url}/api/v1/admin/groups", 
+    name = "leaveschool-user-1-admin-group", 
+    url = "${leaveschool-user.api.url}/api/v1/admin/groups", 
     fallback = SampleUser1AdminGroupRemoteHystrix.class
 )
 public interface SampleUser1AdminGroupRemoteService {
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
index 0f74258..80b387e 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
@@ -14,8 +14,8 @@
 import com.supwisdom.leaveschool.proxy.user.domain.Role;
 
 @FeignClient(
-    name = "sample-user-1-admin-role", 
-    url = "${sample-user.api.url}/api/v1/admin/roles", 
+    name = "leaveschool-user-1-admin-role", 
+    url = "${leaveschool-user.api.url}/api/v1/admin/roles", 
     fallback = SampleUser1AdminRoleRemoteHystrix.class
 )
 public interface SampleUser1AdminRoleRemoteService {
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
index 6d361df..4fa2665 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
@@ -14,8 +14,8 @@
 import com.supwisdom.leaveschool.proxy.user.domain.User;
 
 @FeignClient(
-    name = "sample-user-1-admin-user", 
-    url = "${sample-user.api.url}/api/v1/admin/users", 
+    name = "leaveschool-user-1-admin-user", 
+    url = "${leaveschool-user.api.url}/api/v1/admin/users", 
     fallback = SampleUser1AdminUserRemoteHystrix.class
 )
 public interface SampleUser1AdminUserRemoteService {
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java
index 9a55516..fee6be2 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java
@@ -11,8 +11,8 @@
 import com.supwisdom.leaveschool.proxy.user.model.SecurityUser;
 
 @FeignClient(
-    name = "sample-user-1-security-user", 
-    url = "${sample-user.api.url}/api/v1/security/users", 
+    name = "leaveschool-user-1-security-user", 
+    url = "${leaveschool-user.api.url}/api/v1/security/users", 
     fallback = SampleUser1SecurityUserRemoteHystrix.class
 )
 public interface SampleUser1SecurityUserRemoteService {
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/DictionaryType1RemoteHystrix.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/DictionaryType1RemoteHystrix.java
index de6a7a7..7fccb1b 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/DictionaryType1RemoteHystrix.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/DictionaryType1RemoteHystrix.java
@@ -4,7 +4,7 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
-import com.supwisdom.leaveschool.client.service.basicsdata.DictionaryType1RemoteService;
+import com.supwisdom.leaveschool.client.service.DictionaryType1RemoteService;
 import com.supwisdom.leaveschool.proxy.basicsdata.domain.DictionaryType;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
 import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java
index 0f32960..130b35f 100644
--- a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java
@@ -83,6 +83,7 @@
     return pagerResponseModel;
   }
   
+  
   /**
    * 
    * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:10010/${API_PATH_PREFIX}/domains/1' 
diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java
index adc2db5..e141905 100644
--- a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java
@@ -1,6 +1,7 @@
 package com.supwisdom.leaveschool.common.model;
 
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.Map;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -14,8 +15,22 @@
 
   private int pageIndex = 0;
   private int pageSize = 20;
+  
+  public PagerRequestModel() {
+	super();
+  }
+  
+  
 
-  public int getPageIndex() {
+	public PagerRequestModel(int pageIndex, int pageSize) {
+		super();
+		this.pageIndex = pageIndex;
+		this.pageSize = pageSize;
+	}
+
+
+
+public int getPageIndex() {
     return pageIndex;
   }
 
@@ -32,7 +47,7 @@
   }
 
   @ApiModelProperty(hidden=true)
-  private Map<String, Object> mapBean;
+  private Map<String, Object> mapBean = new HashMap<String, Object>();
 
   public Map<String, Object> getMapBean() {
     return mapBean;
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 5df7315..548440a 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
@@ -3,6 +3,8 @@
 import java.io.Serializable;
 import java.util.Collection;
 
+import org.springframework.data.domain.Page;
+
 public class PagerResponseModel<T> extends PagerRequestModel implements Serializable {
 
   /**
@@ -26,15 +28,38 @@
     super.setPageSize(pagerRequestModel.getPageSize());
     super.setMapBean(pagerRequestModel.getMapBean());
   }
+  
+  public PagerResponseModel(PagerRequestModel pagerRequestModel,Page<T> page) {
+	  super.setPageIndex(pagerRequestModel.getPageIndex());
+	  super.setPageSize(pagerRequestModel.getPageSize());
+	  super.setMapBean(pagerRequestModel.getMapBean());
+	  this.setCurrentItemCount(page.getNumberOfElements());
+	  this.setPageCount(page.getTotalPages());
+	  this.setRecordCount(page.getTotalElements());
+	  this.setItems(page.getContent());
+	  }
 
-  public static <T> PagerResponseModel<T> of(PagerRequestModel pagerRequestModel) {
+  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());
 
     return pagerResponseModell;
   }
+  
+  	public static <T> PagerResponseModel<T> of(PagerRequestModel pagerRequestModel) {
+	    PagerResponseModel<T> pagerResponseModell = new PagerResponseModel<T>();
+	    pagerResponseModell.setPageIndex(pagerRequestModel.getPageIndex());
+	    pagerResponseModell.setPageSize(pagerRequestModel.getPageSize());
+	    pagerResponseModell.setMapBean(pagerRequestModel.getMapBean());
+
+	    return pagerResponseModell;
+	  }
 
   public int getCurrentItemCount() {
     return currentItemCount;
