CMS功能(实现)

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还有页面发布、保存页面和一键发布页面的功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值