InfoService.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package com.caimei.modules.info.service;
  2. import java.util.Date;
  3. import java.util.List;
  4. import javax.servlet.http.HttpServletRequest;
  5. import com.caimei.modules.live.entity.NewPageLive;
  6. import com.caimei.modules.sys.utils.UploadImageUtils;
  7. import org.apache.commons.collections.CollectionUtils;
  8. import org.jsoup.Jsoup;
  9. import org.jsoup.nodes.Document;
  10. import org.jsoup.nodes.Element;
  11. import org.jsoup.select.Elements;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import com.caimei.dfs.image.beens.ImageUploadInfo;
  16. import com.caimei.modules.brand.utils.ImagePathUtils;
  17. import com.caimei.modules.info.dao.InfoDao;
  18. import com.caimei.modules.info.dao.InfoLabelDao;
  19. import com.caimei.modules.info.entity.Info;
  20. import com.caimei.modules.info.entity.InfoLabel;
  21. import com.thinkgem.jeesite.common.config.Global;
  22. import com.thinkgem.jeesite.common.persistence.Page;
  23. import com.thinkgem.jeesite.common.service.CrudService;
  24. import com.thinkgem.jeesite.common.utils.Encodes;
  25. import com.thinkgem.jeesite.common.utils.StringUtils;
  26. /**
  27. * 信息列表Service
  28. *
  29. * @author LG
  30. * @version 2016-06-27
  31. */
  32. @Service
  33. @Transactional(readOnly = true)
  34. public class InfoService extends CrudService<InfoDao, Info> {
  35. @Autowired
  36. private InfoDao infoDao;
  37. @Autowired
  38. private InfoLabelDao infoLabelDao;
  39. public Info get(String id) {
  40. Info info = super.get(id);
  41. if (null != info) {
  42. String admin2Server = Global.getConfig("admin2Server");//获取admin2文件服务器地址
  43. String image = info.getGuidanceImage();
  44. if (StringUtils.isNotBlank(image) && !image.contains("http:") && !image.contains("https:") && !image.contains("https:")) {//不包含http的
  45. info.setGuidanceImage(admin2Server + "/uploadFile/infoImage/" + image);
  46. }
  47. }
  48. return info;
  49. }
  50. public List<Info> findList(Info info) {
  51. return super.findList(info);
  52. }
  53. public Page<Info> findPage(Page<Info> page, Info info) {
  54. if (null != info.getPublishSource() && 2 == info.getPublishSource()) {
  55. page.setOrderBy("a.createDate desc");
  56. }
  57. Page<Info> infoPage = super.findPage(page, info);
  58. List<Info> infoList = infoPage.getList();
  59. infoList.forEach(infoItem -> {
  60. //是否置顶
  61. if (StringUtils.isNotEmpty(infoItem.getTopPosition())) {
  62. if ("1".equals(infoItem.getTopPosition())) {
  63. infoItem.setTopPosition("第一位");
  64. } else if ("2".equals(infoItem.getTopPosition())) {
  65. infoItem.setTopPosition("第二位");
  66. } else if ("3".equals(infoItem.getTopPosition())) {
  67. infoItem.setTopPosition("第三位");
  68. }
  69. }
  70. });
  71. return infoPage;
  72. }
  73. @Transactional(readOnly = false)
  74. public void save(Info info, HttpServletRequest request) {
  75. //替换中文逗号
  76. String label = StringUtils.replace(info.getLabel(), ",", ",");
  77. info.setLabel(label);
  78. String[] split = StringUtils.split(label, ",");
  79. for (String lab : split) {
  80. InfoLabel label2 = new InfoLabel(null, lab);
  81. List<InfoLabel> list = infoLabelDao.findByLabel(label2);
  82. if (CollectionUtils.isEmpty(list)) {
  83. label2.preInsert();
  84. infoLabelDao.insert(label2);
  85. }
  86. }
  87. String photoServer = Global.getConfig("photoServer");//获取文件服务器地址
  88. /**
  89. * 富文本内容处理+内置图片上传
  90. */
  91. String infoContent = Encodes.unescapeHtml(info.getInfoContent());
  92. infoContent = StringUtils.replace(infoContent, "<body", "<div");
  93. infoContent = StringUtils.replace(infoContent, "</body>", "</div>");
  94. //infoContent=Encodes.urlDecode(infoContent);
  95. Document doc = Jsoup.parse(infoContent);
  96. Elements links = doc.getElementsByTag("img");
  97. for (Element link : links) {
  98. String linkSrc = link.attr("src");
  99. String linkSrcOld = link.attr("src");
  100. if (StringUtils.isNotBlank(linkSrc) && !linkSrc.contains("http:") && !linkSrc.contains("https:") && !linkSrc.contains("uploadFile/ueditor")) {//不包含http开头的
  101. // String realPath = Encodes.urlDecode(request.getSession().getServletContext().getRealPath(linkSrc));
  102. linkSrc = Encodes.urlDecode(linkSrc);
  103. String realPath = UploadImageUtils.getAbsolutePath(linkSrc);
  104. int pointerIndex = realPath.lastIndexOf(".");
  105. ImageUploadInfo saveImageSerivce = new ImageUploadInfo();
  106. try {
  107. saveImageSerivce = ImagePathUtils.saveImageSerivce(realPath, pointerIndex, realPath);
  108. String src = photoServer + saveImageSerivce.getSource();
  109. infoContent = StringUtils.replace(infoContent, linkSrcOld, src);
  110. } catch (Exception e) {
  111. logger.error("图片上传错误:" + e.toString(), e);
  112. }
  113. }
  114. }
  115. info.setInfoContent(infoContent);
  116. //引导图
  117. String images = info.getGuidanceImage();
  118. if (StringUtils.isNotBlank(images) && !images.contains("http:") && !images.contains("https:")) {
  119. images = Encodes.urlDecode(images);
  120. String realPath = UploadImageUtils.getAbsolutePath(images);
  121. int pointerIndex = realPath.lastIndexOf(".");
  122. ImageUploadInfo saveImageSerivce = new ImageUploadInfo();
  123. try {
  124. saveImageSerivce = ImagePathUtils.saveImageSerivce(realPath, pointerIndex, realPath);
  125. info.setGuidanceImage(photoServer + saveImageSerivce.getSource());
  126. } catch (Exception e) {
  127. logger.error("图片上传错误:" + e.toString(), e);
  128. }
  129. }
  130. //商城首页图
  131. String homePageImage = info.getHomePageImage();
  132. if (StringUtils.isNotBlank(homePageImage) && !homePageImage.contains("http:") && !homePageImage.contains("https:")) {
  133. homePageImage = Encodes.urlDecode(homePageImage);
  134. String realPath = UploadImageUtils.getAbsolutePath(homePageImage);
  135. int pointerIndex = realPath.lastIndexOf(".");
  136. ImageUploadInfo saveImageSerivce = new ImageUploadInfo();
  137. try {
  138. saveImageSerivce = ImagePathUtils.saveImageSerivce(realPath, pointerIndex, realPath);
  139. info.setHomePageImage(photoServer + saveImageSerivce.getSource());
  140. } catch (Exception e) {
  141. logger.error("图片上传错误:" + e.toString(), e);
  142. }
  143. }
  144. boolean flg = false;
  145. if (StringUtils.isBlank(info.getId())) {
  146. flg = true;
  147. }
  148. // 管理员审核文章
  149. if (null != info.getAuditFlag() && 1 == info.getAuditFlag()) {
  150. info.setOnlineStatus(3);
  151. if(null != info.getAuditStatus() && 2 == info.getAuditStatus()){
  152. // 审核通过
  153. info.setPubdate(new Date());
  154. info.setOnlineStatus(2);
  155. }
  156. }
  157. super.save(info);
  158. if (flg) {
  159. infoDao.insertInfoPraise(info.getId());
  160. }
  161. //分段保存信息内容
  162. String page = "<div style=\"page-break-after: always;\">\r\n\t<span style=\"display: none;\"> </span></div>";//分页标记
  163. String[] sp = StringUtils.splitByWholeSeparator(infoContent, page);
  164. infoDao.deleteInfoPageByInfoId(info.getId());
  165. infoDao.insertInfoPage(info.getId(), sp);
  166. }
  167. @Transactional(readOnly = false)
  168. public void delete(Info info) {
  169. super.delete(info);
  170. infoDao.deleteInfoPraise(info.getId());//删除点赞
  171. infoDao.deleteInfoPageByInfoId(info.getId());//删除信息分页
  172. }
  173. @Transactional(readOnly = false)
  174. public void updateEnabledStatusByIds(String enabledStatus, String[] ids) {
  175. infoDao.updateEnabledStatusByIds(enabledStatus, ids);
  176. }
  177. @Transactional(readOnly = false)
  178. public void updateRecommendStatusByIds(String recommendStatus, String[] ids) {
  179. infoDao.updateRecommendStatusByIds(recommendStatus, ids);
  180. }
  181. @Transactional(readOnly = false)
  182. public void deleteByTypeId(String typeId) {
  183. infoDao.deleteByTypeId(typeId);
  184. }
  185. /**
  186. * 替换标签
  187. *
  188. * @param label 原标签值
  189. * @param reLabel 要替换的标签值
  190. * @author LG
  191. * @date 2016年8月15日
  192. * @version 1.0
  193. */
  194. @Transactional(readOnly = false)
  195. public void updateReplaceByLabel(String label, String reLabel) {
  196. infoDao.updateReplaceByLabel(label, reLabel);
  197. }
  198. @Transactional(readOnly = false)
  199. public void update(Info info){
  200. infoDao.update(info);
  201. }
  202. /**
  203. * 置顶文章列表
  204. * @return
  205. */
  206. public List<Info> findTopList() {
  207. Info info = new Info();
  208. info.setTopFlag("1");
  209. return infoDao.findList(info);
  210. }
  211. /**
  212. * 清除置顶,将后面置顶位的数据往前移
  213. * @param oldInfo
  214. */
  215. @Transactional(readOnly = false)
  216. public void moveTopList(Info oldInfo) {
  217. Integer oldPosition = Integer.parseInt(oldInfo.getTopPosition());
  218. List<Info> topInfoList = findTopList();
  219. topInfoList.forEach(topInfo->{
  220. Integer topPosition = Integer.parseInt(topInfo.getTopPosition());
  221. if (Integer.parseInt(topInfo.getTopPosition())>oldPosition) {
  222. topInfo.setTopPosition((--topPosition).toString());
  223. update(topInfo);
  224. }
  225. });
  226. }
  227. @Transactional(readOnly = false)
  228. public void auditInfo(Info info) {
  229. Date pubdate = null;
  230. if (info.getAuditStatus() == 2) {
  231. pubdate = new Date();
  232. }
  233. infoDao.auditInfo(info.getId(), info.getAuditStatus(), info.getFailReason(), pubdate);
  234. }
  235. @Transactional(readOnly = false)
  236. public void offlineInfo(Integer id) {
  237. infoDao.offlineInfo(id);
  238. }
  239. }