xc-service-manage-cms服务目录如下:
先看CmsPageController,它实现了CmsPageControllerApi(该接口在xc-service-api服务下)接口:
@Api(value="cms页面管理接口",description = "cms页面管理接口,提供页面的增、删、改、查")
public interface CmsPageControllerApi {
//页面查询
@ApiOperation("分页查询页面列表")
@ApiImplicitParams({
@ApiImplicitParam(name="page",value = "页码",required=true,paramType="path",dataType="int"),
@ApiImplicitParam(name="size",value = "每页记录数",required=true,paramType="path",dataType="int")
})
public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
//新增页面
@ApiOperation("新增页面")
public CmsPageResult add(CmsPage cmsPage);
//根据页面Id查询页面信息
@ApiOperation("根据页面Id查询页面")
public CmsPage findById(String id);
//修改页面
@ApiOperation("修改页面")
public CmsPageResult edit(String id , CmsPage cmsPage);
//删除页面
@ApiOperation("删除页面")
public ResponseResult delete(String id);
//页面发布
@ApiOperation("页面发布")
public ResponseResult post(String pageId);
//保存页面
@ApiOperation("保存页面")
public CmsPageResult save(CmsPage cmsPage);
@ApiOperation("一键发布页面")
public CmsPostPageResult postPageQuick(CmsPage cmsPage);
}
@RestController
@RequestMapping("/cms/page")
public class CmsPageController implements CmsPageControllerApi {
@Autowired
PageService pageService;
@Override
@GetMapping("/list/{page}/{size}")
public QueryResponseResult findList(@PathVariable("page") int page, @PathVariable("size") int size, QueryPageRequest queryPageRequest) {
return pageService.findList(page,size,queryPageRequest);
}
@Override
@PostMapping("/add")
public CmsPageResult add(@RequestBody CmsPage cmsPage){
return pageService.add(cmsPage);
}
@Override
@GetMapping("/get/{id}")
public CmsPage findById(@PathVariable("id") String id){
return pageService.getById(id);
}
@Override
@PutMapping("/edit/{id}")
public CmsPageResult edit(@PathVariable("id") String id ,@RequestBody CmsPage cmsPage){
return pageService.update(id,cmsPage);
}
@Override
@DeleteMapping("/del/{id}")
public ResponseResult delete(@PathVariable("id") String id) {
return pageService.delete(id);
}
@Override
@PostMapping("/postPage/{pageId}")
public ResponseResult post(@PathVariable("pageId") String pageId) {
return pageService.post(pageId);
}
@Override
@PostMapping("/save")
public CmsPageResult save(@RequestBody CmsPage cmsPage) {
return pageService.save(cmsPage);
}
@Override
@PostMapping("/postPageQuick")
public CmsPostPageResult postPageQuick(@RequestBody CmsPage cmsPage) {
return pageService.postPageQuick(cmsPage);
}
}
Controller层没什么好说的,都是调用的Service层的方法。
先看页面查询(分页)方法:
// page页码,从1开始计数;
// size每页记录数;
// queryPageRequest查询条件
public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest){
if (queryPageRequest == null){
queryPageRequest = new QueryPageRequest();
}
//自定义条件查询
//定义条件匹配器
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("pageAliase" , ExampleMatcher.GenericPropertyMatchers.contains());
//条件值对象
CmsPage cmsPage = new CmsPage();
//设置条件值(站点Id)
if (StringUtils.isNotEmpty(queryPageRequest.getSiteId())){
cmsPage.setSiteId(queryPageRequest.getSiteId());
}
//设置条件值(模板Id)
if (StringUtils.isNotEmpty(queryPageRequest.getTemplateId())){
cmsPage.setTemplateId(queryPageRequest.getTemplateId());
}
//设置条件值(页面别名)
if (StringUtils.isNotEmpty(queryPageRequest.getPageAliase())){
cmsPage.setPageAliase(queryPageRequest.getPageAliase());
}
//定义条件对象
Example<CmsPage> example = Example.of(cmsPage , exampleMatcher);
if(page <= 0){
page = 1;
}
page = page-1;
if(size <= 0){
size = 10;
}
Pageable pageable = PageRequest.of(page, size);
Page<CmsPage> all = cmsPageRepository.findAll(example , pageable);
QueryResult queryResult = new QueryResult();
queryResult.setList(all.getContent()); //数据列表
queryResult.setTotal(all.getTotalElements()); //数据总记录数
QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);
return queryResponseResult;
}
该方法用到了CmsPageRepository,Spring-Data-MongoDB和Spring-Data-JPA的用法几乎是一样的,给我们提供了很多默认的方法,只需要继承MongoRepository:
public interface CmsPageRepository extends MongoRepository<CmsPage,String> {
//根据页面名称、站点Id、页面webpath查询
CmsPage findByPageNameAndSiteIdAndPageWebPath(String pageName,String siteId,String pageWebPath);
}
新增页面方法如下:
//新增页面
public CmsPageResult add(CmsPage cmsPage){
//校验页面名称、站点Id、页面webpath的唯一性(查询页面是否已经存在)
CmsPage cmsPage1 = cmsPageRepository.findByPageNameAndSiteIdAndPageWebPath(cmsPage.getPageName(), cmsPage.getSiteId(), cmsPage.getPageWebPath());
if (cmsPage1 != null){
//页面已经存在
//抛出异常
ExceptionCast.cast(CmsCode.CMS_ADDPAGE_EXISTSNAME);
}
//调用DAO新增页面
cmsPage.setPageId(null);
cmsPageRepository.save(cmsPage);
return new CmsPageResult(CommonCode.SUCCESS , cmsPage);
}
其它的方法都是Spring-Data的常规操作,如下:
//根据页面Id查询页面
public CmsPage getById(String id){
Optional<CmsPage> optional = cmsPageRepository.findById(id);
if (optional.isPresent()){
CmsPage cmsPage = optional.get();
return cmsPage;
}
return null;
}
//修改页面
public CmsPageResult update(String id,CmsPage cmsPage){
CmsPage one = this.getById(id);
if (one!=null){
//更新数据
//更新模板id
one.setTemplateId(cmsPage.getTemplateId());
//更新所属站点
one.setSiteId(cmsPage.getSiteId());
//更新页面别名
one.setPageAliase(cmsPage.getPageAliase());
//更新页面名称
one.setPageName(cmsPage.getPageName());
//更新访问路径
one.setPageWebPath(cmsPage.getPageWebPath());
//更新物理路径
one.setPagePhysicalPath(cmsPage.getPagePhysicalPath());
//更新DataUrl
one.setDataUrl(cmsPage.getDataUrl());
//执行更新
cmsPageRepository.save(one);
return new CmsPageResult(CommonCode.SUCCESS,one);
}
return new CmsPageResult(CommonCode.FAIL,null);
}
//删除页面
public ResponseResult delete(String id){
Optional<CmsPage> optional = cmsPageRepository.findById(id);
if (optional.isPresent()){
cmsPageRepository.deleteById(id);
return new ResponseResult(CommonCode.SUCCESS);
}
return new ResponseResult(CommonCode.FAIL);
}
CmsPage类及其对应的MongoDB数据库Collections如下:
@Data
@ToString
@Document(collection = "cms_page")
public class CmsPage {
/**
* 页面名称、别名、访问地址、类型(静态/动态)、页面模版、状态
*/
//站点ID
private String siteId;
//页面ID
@Id
private String pageId;
//页面名称
private String pageName;
//别名
private String pageAliase;
//访问地址
private String pageWebPath;
//参数
private String pageParameter;
//物理路径
private String pagePhysicalPath;
//类型(静态/动态)
private String pageType;
//页面模版
private String pageTemplate;
//页面静态化内容
private String pageHtml;
//状态
private String pageStatus;
//创建时间
private Date pageCreateTime;
//模版id
private String templateId;
//参数列表
private List<CmsPageParam> pageParams;
//模版文件Id
// private String templateFileId;
//静态文件Id
private String htmlFileId;
//数据Url
private String dataUrl;
}
注意,pageTemplate、pageHtml和pageStatus字段在MongoDB的cms_page中并不存在。(可能是忘记创建这些字段了?)
这里的id是怎么得出的?
除了上述最基本的增删改查,CmsPageController还有页面发布、保存页面和一键发布页面的功能。