Forráskód Böngészése

修改图片上传逻辑

xusonglin 5 éve
szülő
commit
4a53f45fb2

+ 21 - 0
src/main/java/com/jkcredit/sysnews/enums/PhotoStatusEnum.java

@@ -0,0 +1,21 @@
+package com.jkcredit.sysnews.enums;
+
+import com.jkcredit.sysnews.enums.base.EnumStatus;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum PhotoStatusEnum implements EnumStatus {
+    /**
+     * 已上传服务器,未使用
+     */
+    UPLOAD_SUCCESS_NOT_USE(1, "已上传服务器,未使用"),
+    /**
+     * 已上传服务器, 已使用
+     */
+    UPLOAD_SUCCESS_HAVE_USED(1, "已上传服务器, 已使用");
+
+    private Integer value;
+    private String desc;
+}

+ 2 - 0
src/main/java/com/jkcredit/sysnews/mapper/PhotoMapper.java

@@ -15,4 +15,6 @@ import org.apache.ibatis.annotations.Param;
  **/
 public interface PhotoMapper extends BaseMapper<PhotoPo> {
     IPage<PhotoPo> getPhotos(Page page, @Param("query")PhotoDto photoDto);
+
+    PhotoPo getPhotoByUrl(String url);
 }

+ 3 - 0
src/main/java/com/jkcredit/sysnews/model/dto/newsArticle/NewsArticleDto.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @description:
@@ -27,4 +28,6 @@ public class NewsArticleDto implements Serializable {
     private Long navigationBarId;
 
     private MultipartFile photo;
+
+    private List<String> urlList;
 }

+ 1 - 0
src/main/java/com/jkcredit/sysnews/model/dto/photo/PhotoDto.java

@@ -20,5 +20,6 @@ public class PhotoDto implements Serializable {
     private Integer type;
     private Integer activated;
     private Integer status;
+    // 新闻首图
     private MultipartFile photo;
 }

+ 3 - 0
src/main/java/com/jkcredit/sysnews/resource/web/newsArticle/fb/NewsArticleFB.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @description:
@@ -28,4 +29,6 @@ public class NewsArticleFB implements Serializable {
     private Long navigationBarId;
 
     private MultipartFile photo;
+
+    private List<String> urlList;
 }

+ 0 - 1
src/main/java/com/jkcredit/sysnews/resource/web/photo/fb/PhotoEditFB.java

@@ -19,5 +19,4 @@ public class PhotoEditFB implements Serializable {
     @NotNull(message = "图片id不能为空")
     private Long id;
     private String name;
-    private Integer status;
 }

+ 0 - 2
src/main/java/com/jkcredit/sysnews/resource/web/photo/fb/PhotoFB.java

@@ -4,8 +4,6 @@ import lombok.Data;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.util.Date;
 
 /**
  * @description:

+ 0 - 1
src/main/java/com/jkcredit/sysnews/resource/web/photo/fb/PhotoQueryFB.java

@@ -14,5 +14,4 @@ import java.io.Serializable;
 public class PhotoQueryFB implements Serializable {
     private static final long serialVersionUID = 7982101743998041038L;
     private String name;
-    private Integer status;
 }

+ 26 - 3
src/main/java/com/jkcredit/sysnews/service/newsArticle/NewsArticleServiceImpl.java

@@ -2,11 +2,13 @@ package com.jkcredit.sysnews.service.newsArticle;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jkcredit.sysnews.enums.PhotoStatusEnum;
 import com.jkcredit.sysnews.enums.PhotoTypeEnum;
 import com.jkcredit.sysnews.mapper.NewsArticleMapper;
 import com.jkcredit.sysnews.model.dto.newsArticle.NewsArticleDto;
 import com.jkcredit.sysnews.model.dto.photo.PhotoDto;
 import com.jkcredit.sysnews.model.po.newsArticle.NewsArticlePo;
+import com.jkcredit.sysnews.model.po.photo.PhotoPo;
 import com.jkcredit.sysnews.model.vo.newsArticle.NewsArticleVo;
 import com.jkcredit.sysnews.model.vo.photo.PhotoVo;
 import com.jkcredit.sysnews.service.base.BaseService;
@@ -22,6 +24,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.Date;
@@ -34,6 +37,7 @@ import java.util.Date;
  **/
 @Slf4j
 @Service
+@Transactional(readOnly = true)
 public class NewsArticleServiceImpl extends BaseService implements NewsArticleService {
     @Value("${photo.relativePath}")
     private String relativePath;
@@ -63,22 +67,39 @@ public class NewsArticleServiceImpl extends BaseService implements NewsArticleSe
     }
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public void saveNewsArticle(NewsArticleDto newsArticleDto) {
         validate(newsArticleDto);
 
         PhotoDto photoDto = new PhotoDto();
         photoDto.setName(newsArticleDto.getTitle());
         photoDto.setType(PhotoTypeEnum.NEWS_PHOTO.getValue());
-        photoDto.setPhoto(newsArticleDto.getPhoto());
+        photoDto.setStatus(PhotoStatusEnum.UPLOAD_SUCCESS_HAVE_USED.getValue());
 
+        // 更新新闻content中的图片
+        try {
+            for (String url : newsArticleDto.getUrlList()) {
+                PhotoPo photoPo = photoService.getPhotoByUrl(url);
+                photoDto.setId(photoPo.getId());
+                photoService.editPhoto(photoDto);
+            }
+        } catch (ServiceException e) {
+            log.error("新增新闻-更新图片失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("新增新闻失败");
+        }
+
+        // 保存新闻首图
         PhotoVo photoVo;
         try {
+            photoDto.setPhoto(newsArticleDto.getPhoto());
+            photoDto.setId(null);
             photoVo = photoService.savePhoto(photoDto);
         } catch (ServiceException e) {
-            log.error("新增图片失败,失败原因:{}", e.getMessage());
-            throw new ServiceException("新增图片失败");
+            log.error("新增新闻-新增首图失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("新增新闻失败");
         }
 
+        // 保存新闻
         NewsArticlePo newsArticlePo = new NewsArticlePo();
         BeanUtil.copyProperties(newsArticlePo, newsArticleDto);
         newsArticlePo.setCreateTime(new Date());
@@ -92,6 +113,7 @@ public class NewsArticleServiceImpl extends BaseService implements NewsArticleSe
     }
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public void editNewsArticle(NewsArticleDto newsArticleDto) {
         validate(newsArticleDto);
 
@@ -125,6 +147,7 @@ public class NewsArticleServiceImpl extends BaseService implements NewsArticleSe
     }
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public void deleteNewsArticle(Long id) {
         NewsArticlePo newsArticlePo = mapper.getNewsArticleById(id);
         newsArticlePo.setActivated(CommonConstant.ACTIVATED_DELETED);

+ 2 - 0
src/main/java/com/jkcredit/sysnews/service/permission/PermissionServiceImpl.java

@@ -4,6 +4,7 @@ import com.jkcredit.sysnews.mapper.PermissionMapper;
 import com.jkcredit.sysnews.model.po.permission.PermissionPo;
 import com.jkcredit.sysnews.service.base.BaseService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -15,6 +16,7 @@ import java.util.List;
  * @version: V1.0
  **/
 @Service
+@Transactional(readOnly = true)
 public class PermissionServiceImpl extends BaseService implements PermissionService {
     @Resource
     PermissionMapper permissionMapper;

+ 3 - 0
src/main/java/com/jkcredit/sysnews/service/photo/PhotoService.java

@@ -3,6 +3,7 @@ package com.jkcredit.sysnews.service.photo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jkcredit.sysnews.model.dto.photo.PhotoDto;
+import com.jkcredit.sysnews.model.po.photo.PhotoPo;
 import com.jkcredit.sysnews.model.vo.photo.PhotoVo;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -24,4 +25,6 @@ public interface PhotoService {
     void deletePhoto(Long id);
 
     PhotoVo getPhotoById(Long id);
+
+    PhotoPo getPhotoByUrl(String url);
 }

+ 28 - 1
src/main/java/com/jkcredit/sysnews/service/photo/PhotoServiceImpl.java

@@ -2,6 +2,7 @@ package com.jkcredit.sysnews.service.photo;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jkcredit.sysnews.enums.PhotoStatusEnum;
 import com.jkcredit.sysnews.mapper.PhotoMapper;
 import com.jkcredit.sysnews.model.dto.photo.PhotoDto;
 import com.jkcredit.sysnews.model.po.photo.PhotoPo;
@@ -17,6 +18,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -33,6 +35,7 @@ import java.util.UUID;
  **/
 @Slf4j
 @Service
+@Transactional(readOnly = true)
 public class PhotoServiceImpl extends BaseService implements PhotoService {
     @Value("${photo.relativePath}")
     private String relativePath;
@@ -41,17 +44,30 @@ public class PhotoServiceImpl extends BaseService implements PhotoService {
     PhotoMapper photoMapper;
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public String upload(MultipartFile photo) {
         String fileName = UUID.randomUUID().toString().replace("-","") + "-" +
                 photo.getOriginalFilename();
         String filePath = relativePath + File.separator + fileName;
         try {
             UploadUtil.upload(photo, filePath);
-            return filePath;
         } catch (IOException ioe) {
             log.error("图片上传失败,失败原因:{}", ioe.getMessage());
             throw new ServiceException("图片上传失败");
         }
+
+        try {
+            PhotoPo photoPo = new PhotoPo();
+            photoPo.setCreateTime(new Date());
+            photoPo.setStatus(PhotoStatusEnum.UPLOAD_SUCCESS_NOT_USE.getValue());
+            photoPo.setUrl(filePath);
+            photoMapper.insert(photoPo);
+        } catch (Exception e) {
+            log.error("图片上传-新增图片失败, 图片地址:{}", filePath);
+            log.error("图片上传-新增图片失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("图片上传-新增图片失败");
+        }
+        return filePath;
     }
 
     @Override
@@ -67,6 +83,7 @@ public class PhotoServiceImpl extends BaseService implements PhotoService {
     }
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public PhotoVo savePhoto(PhotoDto photoDto) {
         validate(photoDto);
         String fileName = UUID.randomUUID().toString().replace("-","") + "-" +
@@ -98,6 +115,7 @@ public class PhotoServiceImpl extends BaseService implements PhotoService {
     }
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public void editPhoto(PhotoDto photoDto) {
         validate(photoDto);
 
@@ -110,6 +128,9 @@ public class PhotoServiceImpl extends BaseService implements PhotoService {
         if (photoDto.getStatus() != null) {
             photoPo.setStatus(photoDto.getStatus());
         }
+        if (photoDto.getType() != null) {
+            photoPo.setType(photoDto.getType());
+        }
         photoPo.setUpdateTime(new Date());
         try {
             photoMapper.updateById(photoPo);
@@ -120,6 +141,7 @@ public class PhotoServiceImpl extends BaseService implements PhotoService {
     }
 
     @Override
+    @Transactional(rollbackFor = ServiceException.class)
     public void deletePhoto(Long id) {
         PhotoPo photoPo = photoMapper.selectById(id);
         AssertUtils.assertNotNull(photoPo, CommonConstant.PHOTO_NOT_EXIST);
@@ -153,4 +175,9 @@ public class PhotoServiceImpl extends BaseService implements PhotoService {
         BeanUtil.copyProperties(photoVo, photoPo);
         return photoVo;
     }
+
+    @Override
+    public PhotoPo getPhotoByUrl(String url) {
+        return photoMapper.getPhotoByUrl(url);
+    }
 }

+ 10 - 0
src/main/resources/mapper/PhotoMapper.xml

@@ -30,6 +30,7 @@
             photo
         <where>
             and activated = 1
+            and status = 2
             <if test="query.name != null and query.name != ''">
                 and name like CONCAT('%',#{query.name},'%')
             </if>
@@ -39,4 +40,13 @@
             order by type asc, create_time desc
         </where>
     </select>
+
+    <select id="getPhotoByUrl" resultMap="baseResultMap">
+        select
+            <include refid="photo"/>
+        from
+            photo
+        where
+            url = #{url}
+    </select>
 </mapper>