portal web service

ArticleService.java 25KB

    package com.ekexiu.portal.service; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jfw.apt.annotation.Autowrie; import org.jfw.apt.annotation.DefaultValue; import org.jfw.apt.annotation.Nullable; import org.jfw.apt.web.annotation.Path; import org.jfw.apt.web.annotation.operate.Get; import org.jfw.apt.web.annotation.operate.Post; import org.jfw.apt.web.annotation.param.JdbcConn; import org.jfw.util.JpgUtil; import org.jfw.util.PageQueryResult; import org.jfw.util.StringUtil; import org.jfw.util.exception.JfwBaseException; import org.jfw.util.io.IoUtil; import com.ekexiu.portal.dao.ArticleAgreeDao; import com.ekexiu.portal.dao.ArticleDao; import com.ekexiu.portal.dao.ArticleProDao; import com.ekexiu.portal.dao.ArticleResDao; import com.ekexiu.portal.dao.LeaveWordDao; import com.ekexiu.portal.dao.OrgDao; import com.ekexiu.portal.dao.ProfessorDao; import com.ekexiu.portal.dao.ResearchAreaDao; import com.ekexiu.portal.dao.ResourceDao; import com.ekexiu.portal.dao.WatchDao; import com.ekexiu.portal.po.Article; import com.ekexiu.portal.po.ArticleAgree; import com.ekexiu.portal.po.ArticlePro; import com.ekexiu.portal.po.ArticleRes; import com.ekexiu.portal.po.Image; import com.ekexiu.portal.pojo.EditOrganization; import com.ekexiu.portal.pojo.EditProfessor; import com.ekexiu.portal.pojo.FindInfo; @Path("/article") public class ArticleService { private File tmpPath; private File articlePath; private String dateFormat = "yyyyMMdd"; private String timeFormat = "yyyyMMddHHmmss"; private int artMaxLen=640; private static final String JPG = "jpg"; public static final String MAX_MODIFYTIME = "9"; @Autowrie private ArticleDao articleDao; @Autowrie private ArticleAgreeDao articleAgreeDao; @Autowrie private ProfessorDao professorDao; @Autowrie private ResourceDao resourceDao; @Autowrie private ImageService imageService; @Autowrie private ImagesService imagesService; @Autowrie private ResearchAreaDao researchAreaDao; @Autowrie private LeaveWordDao leaveWordDao; @Autowrie private OrgDao orgDao; @Autowrie private WatchDao watchDao; @Autowrie private ArticleProDao articleProDao; @Autowrie private ArticleResDao articleResDao; public String getDateFormat() { return dateFormat; } public void setDateFormat(String dateFormat) { this.dateFormat = dateFormat; } public String getTimeFormat() { return timeFormat; } public void setTimeFormat(String timeFormat) { this.timeFormat = timeFormat; } public File getTmpPath() { return tmpPath; } public void setTmpPath(File tmpPath) { this.tmpPath = tmpPath; } public File getArticlePath() { return articlePath; } public void setArticlePath(File articlePath) { this.articlePath = articlePath; } public int getArtMaxLen() { return artMaxLen; } public void setArtMaxLen(int artMaxLen) { this.artMaxLen = artMaxLen; } public ArticleDao getArticleDao() { return articleDao; } public void setArticleDao(ArticleDao articleDao) { this.articleDao = articleDao; } public ArticleAgreeDao getArticleAgreeDao() { return articleAgreeDao; } public void setArticleAgreeDao(ArticleAgreeDao articleAgreeDao) { this.articleAgreeDao = articleAgreeDao; } public ProfessorDao getProfessorDao() { return professorDao; } public void setProfessorDao(ProfessorDao professorDao) { this.professorDao = professorDao; } public ResourceDao getResourceDao() { return resourceDao; } public void setResourceDao(ResourceDao resourceDao) { this.resourceDao = resourceDao; } public ImageService getImageService() { return imageService; } public void setImageService(ImageService imageService) { this.imageService = imageService; } public ImagesService getImagesService() { return imagesService; } public void setImagesService(ImagesService imagesService) { this.imagesService = imagesService; } public ResearchAreaDao getResearchAreaDao() { return researchAreaDao; } public void setResearchAreaDao(ResearchAreaDao researchAreaDao) { this.researchAreaDao = researchAreaDao; } public LeaveWordDao getLeaveWordDao() { return leaveWordDao; } public void setLeaveWordDao(LeaveWordDao leaveWordDao) { this.leaveWordDao = leaveWordDao; } public OrgDao getOrgDao() { return orgDao; } public void setOrgDao(OrgDao orgDao) { this.orgDao = orgDao; } public WatchDao getWatchDao() { return watchDao; } public void setWatchDao(WatchDao watchDao) { this.watchDao = watchDao; } public ArticleProDao getArticleProDao() { return articleProDao; } public void setArticleProDao(ArticleProDao articleProDao) { this.articleProDao = articleProDao; } public ArticleResDao getArticleResDao() { return articleResDao; } public void setArticleResDao(ArticleResDao articleResDao) { this.articleResDao = articleResDao; } private byte[] resImage(byte[] src, int maxLen) throws IOException { ByteArrayInputStream in = new ByteArrayInputStream(src); ByteArrayOutputStream out = new ByteArrayOutputStream(); JpgUtil.scalingZoom(in, out, maxLen); out.flush(); return out.toByteArray(); } private byte[] readTmpFile(String fn) throws JfwBaseException { File file = new File(this.tmpPath, fn); if (!file.exists()) throw new JfwBaseException(90, "resource image not exists"); try { InputStream in = new FileInputStream(file); ByteArrayOutputStream out = new ByteArrayOutputStream(); IoUtil.copy(in, out, true, true); return out.toByteArray(); } catch (IOException e) { throw new JfwBaseException(91, "read temp resource image error", e); } } private void saveArtImg(String fn, String id) throws JfwBaseException, IOException{ byte[] src = this.readTmpFile(fn); src = JpgUtil.read(src); byte[] shareResImage = this.resImage(src, this.artMaxLen); String savePath = this.articlePath + "/" + this.createDate(); File dateFile = new File(savePath); if (!dateFile.exists()) { // 创建日期目录 dateFile.mkdirs(); } IoUtil.saveStream(new FileOutputStream(new File(dateFile, id + "." + JPG)), src, true); IoUtil.saveStream(new FileOutputStream(new File(dateFile, id + "_s." + JPG)), shareResImage, true); } private String createDate(){ SimpleDateFormat df = new SimpleDateFormat(this.dateFormat); String date = df.format(new Date()); return date; } private String publishTime(){ SimpleDateFormat df = new SimpleDateFormat(this.timeFormat); String publishTime = df.format(new Date()); return publishTime; } @Post @Path public String insert(@JdbcConn(true) Connection con, Article article) throws SQLException, IOException, JfwBaseException{ String articleId = StringUtil.buildUUID(); if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), articleId); article.setArticleImg(this.createDate()+"/"+articleId+"."+JPG); } article.setArticleId(articleId); article.setArticleAgree(0); article.setPageViews(0); article.setStatus("1"); article.setPublishTime(this.publishTime()); if(article.getProfessorId() != null && article.getOrgId() == null){ article.setArticleType("1"); }else if(article.getProfessorId() == null && article.getOrgId() != null){ article.setArticleType("2"); }else{ throw new JfwBaseException(-1, "错误参数:文章发布者ID"); } this.articleDao.insert(con, article); return articleId; } @Post @Path("/save") public String saveArticle(@JdbcConn(true) Connection con,Article article,@Nullable String[] professors, @Nullable String[] resources) throws SQLException, IOException, JfwBaseException{ if(article.getArticleId() == null){ String articleId = StringUtil.buildUUID(); if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), articleId); article.setArticleImg(this.createDate()+"/"+articleId+"."+JPG); } article.setArticleId(articleId); article.setArticleAgree(0); article.setPageViews(0); article.setStatus("1"); article.setPublishTime(this.publishTime()); if(article.getProfessorId() != null && article.getOrgId() == null){ article.setArticleType("1"); }else if(article.getProfessorId() == null && article.getOrgId() != null){ article.setArticleType("2"); }else{ throw new JfwBaseException(-1, "错误参数:文章发布者ID"); } this.articleDao.insert(con, article); if(professors != null){ for (String professor : professors) { ArticlePro articlePro = new ArticlePro(); articlePro.setArticleId(articleId); articlePro.setProfessorId(professor); this.articleProDao.insert(con, articlePro); } } if(resources != null){ for (String resource : resources) { ArticleRes articleRes = new ArticleRes(); articleRes.setArticleId(articleId); articleRes.setResourceId(resource); this.articleResDao.insert(con, articleRes); } } return articleId; }else if(article.getArticleId().trim().length() == 32){ if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), article.getArticleId()); article.setArticleImg(this.createDate()+"/"+article.getArticleId()+"."+JPG); } this.articleDao.update(con, article); this.articleDao.updatePublishTime(con, article.getArticleId(), "1", this.publishTime()); this.articleProDao.delete(con, article.getArticleId()); this.articleResDao.delete(con, article.getArticleId()); if(professors != null){ for (String professor : professors) { ArticlePro articlePro = new ArticlePro(); articlePro.setArticleId(article.getArticleId()); articlePro.setProfessorId(professor); this.articleProDao.insert(con, articlePro); } } if(resources != null){ for (String resource : resources) { ArticleRes articleRes = new ArticleRes(); articleRes.setArticleId(article.getArticleId()); articleRes.setResourceId(resource); this.articleResDao.insert(con, articleRes); } } return article.getArticleId(); }else{ throw new JfwBaseException(-2, "bad parameter:articleId"); } } @Post @Path("/draft") public String draft(@JdbcConn(true) Connection con,Article article,@Nullable String[] professors, @Nullable String[] resources) throws SQLException, IOException, JfwBaseException{ if(article.getArticleId() == null){ String articleId = StringUtil.buildUUID(); if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), articleId); article.setArticleImg(this.createDate()+"/"+articleId+"."+JPG); } article.setArticleId(articleId); article.setArticleAgree(0); article.setPageViews(0); article.setStatus("0"); if(article.getProfessorId() != null && article.getOrgId() == null){ article.setArticleType("1"); }else if(article.getProfessorId() == null && article.getOrgId() != null){ article.setArticleType("2"); }else{ throw new JfwBaseException(-1, "错误参数:文章发布者ID"); } this.articleDao.insert(con, article); if(professors != null){ for (String professor : professors) { ArticlePro articlePro = new ArticlePro(); articlePro.setArticleId(articleId); articlePro.setProfessorId(professor); this.articleProDao.insert(con, articlePro); } } if(resources != null){ for (String resource : resources) { ArticleRes articleRes = new ArticleRes(); articleRes.setArticleId(articleId); articleRes.setResourceId(resource); this.articleResDao.insert(con, articleRes); } } return articleId; }else if(article.getArticleId().trim().length() == 32){ if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), article.getArticleId()); article.setArticleImg(this.createDate()+"/"+article.getArticleId()+"."+JPG); } this.articleDao.update(con, article); this.articleDao.updateStatus(con, article.getArticleId(), "0"); this.articleProDao.delete(con, article.getArticleId()); this.articleResDao.delete(con, article.getArticleId()); if(professors != null){ for (String professor : professors) { ArticlePro articlePro = new ArticlePro(); articlePro.setArticleId(article.getArticleId()); articlePro.setProfessorId(professor); this.articleProDao.insert(con, articlePro); } } if(resources != null){ for (String resource : resources) { ArticleRes articleRes = new ArticleRes(); articleRes.setArticleId(article.getArticleId()); articleRes.setResourceId(resource); this.articleResDao.insert(con, articleRes); } } return article.getArticleId(); }else{ throw new JfwBaseException(-2, "bad parameter:articleId"); } } @Post @Path("/timing") public String timingPublish(@JdbcConn(true) Connection con,Article article,@Nullable String[] professors, @Nullable String[] resources) throws SQLException, IOException, JfwBaseException{ if(article.getPublishTime() == null){ throw new JfwBaseException(-3, "no parameter found:publishTime"); } if(article.getArticleId() == null){ String articleId = StringUtil.buildUUID(); if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), articleId); article.setArticleImg(this.createDate()+"/"+articleId+"."+JPG); } article.setArticleId(articleId); article.setArticleAgree(0); article.setPageViews(0); article.setStatus("2"); if(article.getProfessorId() != null && article.getOrgId() == null){ article.setArticleType("1"); }else if(article.getProfessorId() == null && article.getOrgId() != null){ article.setArticleType("2"); }else{ throw new JfwBaseException(-1, "错误参数:文章发布者ID"); } this.articleDao.insert(con, article); if(professors != null){ for (String professor : professors) { ArticlePro articlePro = new ArticlePro(); articlePro.setArticleId(articleId); articlePro.setProfessorId(professor); this.articleProDao.insert(con, articlePro); } } if(resources != null){ for (String resource : resources) { ArticleRes articleRes = new ArticleRes(); articleRes.setArticleId(articleId); articleRes.setResourceId(resource); this.articleResDao.insert(con, articleRes); } } return articleId; }else if(article.getArticleId().trim().length() == 32){ if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), article.getArticleId()); article.setArticleImg(this.createDate()+"/"+article.getArticleId()+"."+JPG); } this.articleDao.update(con, article); this.articleDao.updatePublishTime(con, article.getArticleId(), "2", article.getPublishTime()); this.articleResDao.delete(con, article.getArticleId()); this.articleProDao.delete(con, article.getArticleId()); this.articleResDao.delete(con, article.getArticleId()); if(professors != null){ for (String professor : professors) { ArticlePro articlePro = new ArticlePro(); articlePro.setArticleId(article.getArticleId()); articlePro.setProfessorId(professor); this.articleProDao.insert(con, articlePro); } } if(resources != null){ for (String resource : resources) { ArticleRes articleRes = new ArticleRes(); articleRes.setArticleId(article.getArticleId()); articleRes.setResourceId(resource); this.articleResDao.insert(con, articleRes); } } return article.getArticleId(); }else{ throw new JfwBaseException(-2, "bad parameter:articleId"); } } @Post @Path("/updateArt") public void update(@JdbcConn(true) Connection con, Article article) throws SQLException, JfwBaseException, IOException{ if(article.getArticleImg() != null){ this.saveArtImg(article.getArticleImg(), article.getArticleId()); article.setArticleImg(this.createDate()+"/"+article.getArticleId()+"."+JPG); } this.articleDao.update(con, article); } @Post @Path("/pageViews") public void pageViews(@JdbcConn(true) Connection con,String articleId) throws SQLException{ this.articleDao.incPageViews(con, articleId); } @Post @Path("/updateDraft") public void updateDraft(@JdbcConn(true) Connection con, String articleId) throws SQLException{ //修改文章状态为草稿 this.articleDao.updateStatus(con, articleId, "0"); } @Post @Path("/publish") public void publish(@JdbcConn(true) Connection con,String articleId) throws SQLException{ //修改文章状态为发布 this.articleDao.updateStatus(con, articleId, "1"); } @Post @Path("/deleteArticle") public void deleteArticle(@JdbcConn(true) Connection con,String articleId) throws SQLException{ //修改文章状态为删除 this.articleDao.updateStatus(con, articleId, "3"); } @Post @Path("/close") public void closeArticle(@JdbcConn(true) Connection con,String articleId) throws SQLException{ //修改文章状态为关闭 this.articleDao.updateStatus(con, articleId, "4"); } @Post @Path("/agree") public void agree(@JdbcConn(true) Connection con,String operateId,String articleId)throws SQLException{ if(this.articleDao.incAgree(con, articleId) > 0){ ArticleAgree articleAgree = new ArticleAgree(); articleAgree.setOperateId(operateId); articleAgree.setArticleId(articleId); this.articleAgreeDao.insert(con, articleAgree); } } @Post @Path("/unAgree") public void unAgree(@JdbcConn(true) Connection con,String operateId,String articleId)throws SQLException{ if(this.articleDao.decAgree(con, articleId) > 0){ this.articleAgreeDao.deleteAgree(con, operateId, articleId); } } @Get @Path("/isAgree") public ArticleAgree queryAgree(@JdbcConn Connection con,String operateId,String articleId)throws SQLException{ return this.articleAgreeDao.queryOne(con, operateId, articleId); } @Get @Path("/agreeList") public List<ArticleAgree> queryAgreeList(@JdbcConn Connection con,String articleId)throws SQLException{ return this.articleAgreeDao.query(con, articleId); } @Get @Path("/qaPro") public List<Article> queryPro(@JdbcConn Connection con, String professorId) throws SQLException{ return this.articleDao.queryPro(con, professorId); } @Get @Path("/qaProPublish") public List<Article> queryProPublish(@JdbcConn Connection con, String professorId) throws SQLException{ return this.articleDao.queryProPublish(con, professorId); } @Get @Path("/pqProPublish") public PageQueryResult<Article> pageQueryProPublish(@JdbcConn Connection con, String professorId,@DefaultValue("10") int pageSize,@DefaultValue("1") int pageNo) throws SQLException{ return this.articleDao.pageQueryProPublish(con, professorId,pageSize,pageNo); } @Get @Path("/qaForDesk") public List<Article> queryForDesk(@JdbcConn Connection con, String professorId) throws SQLException{ return this.articleDao.queryForDesk(con, professorId); } @Get @Path("/qaOrg") public List<Article> queryOrg(@JdbcConn Connection con,String orgId)throws SQLException{ return this.articleDao.queryOrg(con, orgId); } @Get @Path("/qaOrgPublish") public List<Article> queryOrgPublish(@JdbcConn Connection con,String orgId)throws SQLException{ return this.articleDao.queryOrgPublish(con, orgId); } @Get @Path("/pqOrgPublish") public PageQueryResult<Article> pageQueryOrgPublish(@JdbcConn Connection con,String orgId,@DefaultValue("10") int pageSize,@DefaultValue("1") int pageNo)throws SQLException{ return this.articleDao.pageQueryOrgPublish(con, orgId,pageSize,pageNo); } @Get @Path("/qlOrg") public List<Article> queryLimitOrg(@JdbcConn Connection con,String orgId,@DefaultValue("com.ekexiu.portal.service.ArticleService.MAX_MODIFYTIME") String modifyTime,@DefaultValue("20") int rows)throws SQLException{ return this.articleDao.queryLimit(con, orgId, modifyTime, rows); } @Get @Path("/query") public Article queryOne(@JdbcConn Connection con, String articleId) throws SQLException{ return this.articleDao.queryOne(con, articleId); } @Get @Path("/pqpublish") public PageQueryResult<Article> queryPagePublish(@JdbcConn Connection con,@Nullable String articleTitle, @DefaultValue("10") int pageSize,@DefaultValue("1") int pageNo)throws SQLException{ if(articleTitle != null){ articleTitle = "%" + articleTitle + "%"; } return this.articleDao.queryPageForPublish(con, articleTitle, pageSize, pageNo); } @Get @Path("/firstpq") public PageQueryResult<Article> firstPageQuery(@JdbcConn Connection con,@Nullable String key, @DefaultValue("20") int pageSize,@DefaultValue("1") int pageNo)throws SQLException{ if(key != null){ key = "%" + key + "%"; } PageQueryResult<Article> queryResult = this.articleDao.firstPageQuery(con, key, pageSize, pageNo); List<Article> articles = queryResult.getData(); if(!articles.isEmpty()){ for (Article article : articles) { if("1".equals(article.getArticleType())){ EditProfessor professor = this.professorDao.queryBaseInfo(con, article.getProfessorId()); if(professor != null){ professor.setHasHeadImage(this.imageService.hasProfessorImage(professor.getId())); } article.setProfessor(professor); }else if("2".equals(article.getArticleType())){ EditOrganization organization = this.orgDao.queryEditOrg(con, article.getOrgId()); if(organization != null){ organization.setHasOrgLogo(this.imageService.hasOrgLogo(organization.getId())); } article.setEditOrganization(organization); } } } return queryResult; } @Get @Path("/pqself") public PageQueryResult<Article> queryPageSelf(@JdbcConn Connection con,@Nullable String professorId,@Nullable String orgId, @Nullable String articleTitle,@DefaultValue("10") int pageSize,@DefaultValue("1") int pageNo)throws SQLException{ if(articleTitle != null){ articleTitle = "%" + articleTitle + "%"; } return this.articleDao.queryPageForSelf(con, professorId, orgId, articleTitle, pageSize, pageNo); } @Get @Path("/pqFind") public PageQueryResult<FindInfo> queryPage(@JdbcConn Connection con,@DefaultValue("10") int pageSize,@DefaultValue("1") int pageNo)throws SQLException{ PageQueryResult<FindInfo> queryResult = this.articleDao.queryPage(con, pageSize, pageNo); List<FindInfo> findInfos = queryResult.getData(); for (FindInfo findInfo : findInfos) { if("3".equals(findInfo.getType())){ List<Image> images = this.imagesService.queryRes(con, findInfo.getId()); if(images.size() > 0){ findInfo.setImage(findInfo.getId()+".jpg"); } } } queryResult.setData(findInfos); return queryResult; } @Get @Path("/findHot") public PageQueryResult<FindInfo> queryFindHot(@JdbcConn Connection con,@DefaultValue("10") int pageSize,@DefaultValue("1") int pageNo)throws SQLException{ PageQueryResult<FindInfo> queryResult = this.articleDao.queryFindHot(con, pageSize, pageNo); List<FindInfo> findInfos = queryResult.getData(); if(!findInfos.isEmpty()){ for (FindInfo findInfo : findInfos) { if("3".equals(findInfo.getType()) || "4".equals(findInfo.getType())){ List<Image> images = this.imagesService.queryRes(con, findInfo.getId()); if(images.size() > 0){ findInfo.setImage(images.get(0).getImageSrc()); } } } queryResult.setData(findInfos); } return queryResult; } @Get @Path("/ralatePro") public List<ArticlePro> ralatePro(@JdbcConn Connection con,String articleId) throws SQLException{ return this.articleProDao.query(con, articleId); } @Get @Path("/ralateRes") public List<ArticleRes> ralateRes(@JdbcConn Connection con,String articleId) throws SQLException{ return this.articleResDao.query(con, articleId); } @Get @Path("/ralateArticles") public List<Article> ralateArticles(@JdbcConn Connection con,@Nullable String[] keys,@Nullable String professorId, @Nullable String orgId,String articleId,@DefaultValue("10") int rows)throws SQLException{ List<Article> articles = new ArrayList<Article>(); if(keys != null){ articles = this.articleDao.queryLimit(con, keys, articleId, rows); } if(articles.isEmpty()){ articles = this.articleDao.queryByAuthor(con, professorId, orgId, articleId, rows); if(articles.isEmpty()){ articles = this.articleDao.queryByPageViews(con, articleId, rows); } } return articles; } @Post @Path("/delete") public void delete(@JdbcConn(true) Connection con, String articleId) throws SQLException{ this.articleDao.delete(con, articleId); this.leaveWordDao.deleteArticle(con, articleId); this.articleAgreeDao.delete(con, articleId); this.watchDao.deleteWatch(con, articleId); } }