package com.mossle.cms.support; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import com.mossle.api.cms.ArticleDTO; import com.mossle.api.cms.CatalogDTO; import com.mossle.api.cms.CmsConnector; import com.mossle.api.cms.CommentDTO; import com.mossle.core.page.Page; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.annotation.Transactional; public class DatabaseCmsConnector implements CmsConnector { private JdbcTemplate jdbcTemplate; public CatalogDTO findCatalogByCode(String code, String tenantId) { String sql = "select id,code,name,description from CMS_CATALOG where code=? and tenant_id=?"; Map<String, Object> map = jdbcTemplate.queryForMap(sql, code, tenantId); CatalogDTO catalogDto = new CatalogDTO(); catalogDto.setId(map.get("id").toString()); catalogDto.setCode((String) map.get("code")); catalogDto.setName((String) map.get("name")); catalogDto.setDescription((String) map.get("description")); return catalogDto; } public Page findArticles(String code, String tenantId, int pageNo, int pageSize) { Page page = this.findArticlePageInfo(code, tenantId, pageNo, pageSize); int start = (pageNo - 1) * pageSize; String selectSql = "select a.id as id,a.title as title,a.summary as summary,a.content as content," + "a.create_time as createTime,a.user_id as userId,a.hit_count as hitCount," + "a.comment_count as commentCount,c.id as catalogId,c.code as catalogCode " + "from CMS_ARTICLE a,CMS_CATALOG c " + "where a.catalog_id=c.ID and c.code=? and c.tenant_id=? order by a.create_time desc limit " + start + "," + pageSize; List<Map<String, Object>> list = jdbcTemplate.queryForList(selectSql, code, tenantId); List<ArticleDTO> articleDtos = new ArrayList<ArticleDTO>(); for (Map<String, Object> map : list) { ArticleDTO articleDto = this.convertArticleDto(map); articleDtos.add(articleDto); } page.setResult(articleDtos); return page; } public Page findArticlePageInfo(String code, String tenantId, int pageNo, int pageSize) { int start = (pageNo - 1) * pageSize; String countSql = "select count(*) from CMS_ARTICLE a,CMS_CATALOG c " + "where a.catalog_id=c.ID and c.code=? and c.tenant_id=?"; int totalCount = jdbcTemplate.queryForObject(countSql, Integer.class, code, tenantId); Page page = new Page(null, totalCount); page.setPageNo(pageNo); page.setPageSize(pageSize); return page; } public ArticleDTO findArticleById(String id) { String sql = "select a.id as id,a.title as title,a.summary as summary,a.content as content," + "a.create_time as createTime,a.user_id as userId,a.hit_count as hitCount," + "a.comment_count as commentCount,c.id as catalogId,c.code as catalogCode " + "from CMS_ARTICLE a,CMS_CATALOG c " + "where a.catalog_id=c.id and a.id=?"; Map<String, Object> map = jdbcTemplate.queryForMap(sql, id); ArticleDTO articleDto = this.convertArticleDto(map); return articleDto; } public ArticleDTO convertArticleDto(Map<String, Object> map) { ArticleDTO articleDto = new ArticleDTO(); articleDto.setId(map.get("id").toString()); articleDto.setTitle((String) map.get("title")); articleDto.setSummary((String) map.get("summary")); articleDto.setContent((String) map.get("content")); articleDto.setCreateTime((Date) map.get("createTime")); articleDto.setUserId((String) map.get("userId")); articleDto.setHitCount((Integer) map.get("hitCount")); articleDto.setCommentCount((Integer) map.get("commentCount")); articleDto.setCatalogId(map.get("catalogId").toString()); articleDto.setCatalogCode((String) map.get("catalogCode")); return articleDto; } public Page findComments(String id, int pageNo, int pageSize) { Page page = this.findCommentPageInfo(id, pageNo, pageSize); int start = (pageNo - 1) * pageSize; String selectSql = "select c.id as id,c.content as content," + "c.create_time as createTime,c.user_id as userId," + "c.article_id as articleId " + "from CMS_COMMENT c " + "where c.article_id=? order by c.create_time desc limit " + start + "," + pageSize; List<Map<String, Object>> list = jdbcTemplate.queryForList(selectSql, Long.parseLong(id)); List<CommentDTO> commentDtos = new ArrayList<CommentDTO>(); for (Map<String, Object> map : list) { CommentDTO commentDto = this.convertCommentDto(map); commentDtos.add(commentDto); } page.setResult(commentDtos); return page; } public Page findCommentPageInfo(String id, int pageNo, int pageSize) { int start = (pageNo - 1) * pageSize; String countSql = "select count(*) from CMS_COMMENT c " + "where c.article_id=?"; int totalCount = jdbcTemplate.queryForObject(countSql, Integer.class, Long.parseLong(id)); Page page = new Page(null, totalCount); page.setPageNo(pageNo); page.setPageSize(pageSize); return page; } public CommentDTO convertCommentDto(Map<String, Object> map) { CommentDTO commentDto = new CommentDTO(); commentDto.setId(map.get("id").toString()); commentDto.setContent((String) map.get("content")); commentDto.setCreateTime((Date) map.get("createTime")); commentDto.setUserId((String) map.get("userId")); commentDto.setArticleId(map.get("articleId").toString()); return commentDto; } @Transactional public void addComment(String articleId, String content, String userId) { String sql = "insert into CMS_COMMENT(content,create_time,user_id,article_id) VALUES(?,?,?,?)"; jdbcTemplate.update(sql, content, new Date(), userId, Long.parseLong(articleId)); } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }