PhotoServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package com.jkcredit.sysnews.service.photo;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.jkcredit.sysnews.enums.PhotoStatusEnum;
  6. import com.jkcredit.sysnews.mapper.PhotoMapper;
  7. import com.jkcredit.sysnews.model.dto.photo.PhotoDto;
  8. import com.jkcredit.sysnews.model.po.photo.PhotoPo;
  9. import com.jkcredit.sysnews.model.vo.photo.PhotoVo;
  10. import com.jkcredit.sysnews.service.base.BaseService;
  11. import com.jkcredit.sysnews.spi.lang.constant.CommonConstant;
  12. import com.jkcredit.sysnews.spi.lang.exception.ServiceException;
  13. import com.jkcredit.sysnews.util.AssertUtils;
  14. import com.jkcredit.sysnews.util.BeanUtil;
  15. import com.jkcredit.sysnews.util.UploadUtil;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang.StringUtils;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.web.multipart.MultipartFile;
  23. import javax.annotation.Resource;
  24. import java.io.File;
  25. import java.io.IOException;
  26. import java.util.*;
  27. /**
  28. * @description:
  29. * @author: xusonglin
  30. * @create: 2020/3/1 0:26
  31. * @version: V1.0
  32. **/
  33. @Slf4j
  34. @Service
  35. @Transactional(readOnly = true)
  36. public class PhotoServiceImpl extends BaseService implements PhotoService {
  37. @Value("${photo.uploadPath}")
  38. private String uploadPath;
  39. @Value("${photo.accessPath}")
  40. private String accessPath;
  41. @Value("${photo.accessResource}")
  42. private String accessResource;
  43. @Resource
  44. PhotoMapper photoMapper;
  45. @Override
  46. @Transactional(rollbackFor = ServiceException.class)
  47. public String upload(MultipartFile photo) {
  48. String fileName = UUID.randomUUID().toString().replace("-","") + "-" +
  49. photo.getOriginalFilename();
  50. Calendar cal = Calendar.getInstance();
  51. int month = cal.get(Calendar.MONTH) + 1;
  52. int year = cal.get(Calendar.YEAR);
  53. String directoryName = year+"-"+month;
  54. String filePath = uploadPath + File.separator + directoryName + File.separator + fileName;
  55. try {
  56. UploadUtil.upload(photo, filePath);
  57. } catch (IOException ioe) {
  58. log.error("图片上传失败,失败原因:{}", ioe.getMessage());
  59. throw new ServiceException("图片上传失败");
  60. }
  61. try {
  62. PhotoPo photoPo = new PhotoPo();
  63. photoPo.setCreateTime(new Date());
  64. photoPo.setStatus(PhotoStatusEnum.UPLOAD_SUCCESS_NOT_USE.getValue());
  65. photoPo.setUrl(File.separator+ directoryName + File.separator + fileName);
  66. photoMapper.insert(photoPo);
  67. } catch (Exception e) {
  68. log.error("图片上传-新增图片失败, 图片地址:{}", filePath);
  69. log.error("图片上传-新增图片失败,失败原因:{}", e.getMessage());
  70. throw new ServiceException("图片上传-新增图片失败");
  71. }
  72. return accessPath + accessResource + File.separator + directoryName + File.separator + fileName;
  73. }
  74. @Override
  75. public IPage<PhotoVo> getPhotos(Page page, PhotoDto photoDto) {
  76. IPage<PhotoPo> photoPoIPage = photoMapper.getPhotos(page, photoDto);
  77. return photoPoIPage.convert(this::convert);
  78. }
  79. private PhotoVo convert(PhotoPo po) {
  80. PhotoVo vo = new PhotoVo();
  81. BeanUtils.copyProperties(po, vo);
  82. return vo;
  83. }
  84. @Override
  85. @Transactional(rollbackFor = ServiceException.class)
  86. public PhotoVo savePhoto(PhotoDto photoDto) {
  87. validate(photoDto);
  88. String fileName = UUID.randomUUID().toString().replace("-","") + "-" +
  89. photoDto.getPhoto().getOriginalFilename();
  90. Calendar cal = Calendar.getInstance();
  91. int month = cal.get(Calendar.MONTH) + 1;
  92. int year = cal.get(Calendar.YEAR);
  93. String directoryName = year+"-"+month;
  94. String filePath = uploadPath + File.separator + directoryName + File.separator + fileName;
  95. try {
  96. UploadUtil.upload(photoDto.getPhoto(), filePath);
  97. } catch (IOException ioe) {
  98. log.error("图片上传失败,失败原因:{}", ioe.getMessage());
  99. throw new ServiceException("图片上传失败");
  100. }
  101. File dest = new File(filePath);
  102. if (!dest.getParentFile().exists()) {
  103. log.error("图片上传失败,失败原因:服务器图片不存在");
  104. throw new ServiceException("图片上传失败");
  105. }
  106. photoDto.setUrl(File.separator+ directoryName + File.separator + fileName);
  107. PhotoPo photoPo = new PhotoPo();
  108. BeanUtil.copyProperties(photoPo, photoDto);
  109. photoPo.setCreateTime(new Date());
  110. try {
  111. photoMapper.insert(photoPo);
  112. PhotoVo photoVo = new PhotoVo();
  113. BeanUtil.copyProperties(photoVo, photoPo);
  114. photoVo.setStatus(2);
  115. return photoVo;
  116. } catch (Exception e) {
  117. log.error("新增图片数据失败,失败原因:{}", e.getMessage());
  118. throw new ServiceException("新增图片数据失败");
  119. }
  120. }
  121. @Override
  122. @Transactional(rollbackFor = ServiceException.class)
  123. public void editPhoto(PhotoDto photoDto) {
  124. validate(photoDto);
  125. PhotoPo photoPo = photoMapper.selectById(photoDto.getId());
  126. AssertUtils.assertNotNull(photoPo, CommonConstant.PHOTO_NOT_EXIST);
  127. if (!StringUtils.isBlank(photoDto.getName())) {
  128. photoPo.setName(photoDto.getName());
  129. }
  130. if (photoDto.getStatus() != null) {
  131. photoPo.setStatus(photoDto.getStatus());
  132. }
  133. if (photoDto.getType() != null) {
  134. photoPo.setType(photoDto.getType());
  135. }
  136. if (photoDto.getGoPageUrl() != null) {
  137. photoPo.setGoPageUrl(photoDto.getGoPageUrl());
  138. }
  139. photoPo.setUpdateTime(new Date());
  140. try {
  141. photoMapper.updateById(photoPo);
  142. } catch (Exception e) {
  143. log.error("修改图片数据失败,失败原因:{}", e.getMessage());
  144. throw new ServiceException("修改图片数据异常");
  145. }
  146. }
  147. @Override
  148. @Transactional(rollbackFor = ServiceException.class)
  149. public void deletePhoto(Long id) {
  150. PhotoPo photoPo = photoMapper.selectById(id);
  151. AssertUtils.assertNotNull(photoPo, CommonConstant.PHOTO_NOT_EXIST);
  152. String url = uploadPath + photoPo.getUrl();
  153. File file = new File(url);
  154. boolean deleteResult = false;
  155. if (file.exists()) {
  156. deleteResult = file.delete();
  157. }
  158. if (deleteResult) {
  159. photoPo.setActivated(CommonConstant.ACTIVATED_DELETED);
  160. photoPo.setUpdateTime(new Date());
  161. try {
  162. photoMapper.updateById(photoPo);
  163. } catch (Exception e) {
  164. log.error("删除图片失败,失败原因:{}", e.getMessage());
  165. throw new ServiceException("删除图片失败");
  166. }
  167. } else {
  168. throw new ServiceException("删除图片失败");
  169. }
  170. }
  171. @Override
  172. public PhotoVo getPhotoById(Long id) {
  173. PhotoPo photoPo = photoMapper.selectById(id);
  174. PhotoVo photoVo = new PhotoVo();
  175. BeanUtil.copyProperties(photoVo, photoPo);
  176. if (photoPo.getUrl() != null) {
  177. String[] photoUrlArgs = photoPo.getUrl().split("/");
  178. String url = accessPath + accessResource + photoUrlArgs[0] + File.separator + photoUrlArgs[1];
  179. photoVo.setUrl(url);
  180. }
  181. return photoVo;
  182. }
  183. @Override
  184. public PhotoPo getPhotoByUrl(String url) {
  185. return photoMapper.getPhotoByUrl(url);
  186. }
  187. @Override
  188. public JSONObject getPhotosForHomePage() {
  189. JSONObject result = new JSONObject();
  190. PhotoPo middlePhoto = photoMapper.getHomePageMiddlePhoto();
  191. PhotoVo middlePhotoVo = new PhotoVo();
  192. if (middlePhoto != null) {
  193. BeanUtil.copyProperties(middlePhotoVo, middlePhoto);
  194. if (middlePhoto.getUrl() != null) {
  195. String url = accessPath + accessResource + middlePhoto.getUrl().replace("/","");
  196. middlePhotoVo.setUrl(url);
  197. }
  198. }
  199. List<PhotoPo> homePageMainPhotos = photoMapper.getHomePageMainPhotos();
  200. List<PhotoVo> mainPhotos = new ArrayList<>();
  201. for (PhotoPo po : homePageMainPhotos) {
  202. PhotoVo vo = new PhotoVo();
  203. BeanUtil.copyProperties(vo, po);
  204. if (po.getUrl() != null) {
  205. String url = accessPath + accessResource + po.getUrl().replace("/","");
  206. vo.setUrl(url);
  207. }
  208. mainPhotos.add(vo);
  209. }
  210. result.put("1", mainPhotos);
  211. result.put("2", middlePhotoVo);
  212. return result;
  213. }
  214. }