package com.jkcredit.sysnews.service.photo; import com.alibaba.fastjson.JSONObject; 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; import com.jkcredit.sysnews.model.vo.photo.PhotoVo; import com.jkcredit.sysnews.service.base.BaseService; import com.jkcredit.sysnews.spi.lang.constant.CommonConstant; import com.jkcredit.sysnews.spi.lang.exception.ServiceException; import com.jkcredit.sysnews.util.AssertUtils; import com.jkcredit.sysnews.util.BeanUtil; import com.jkcredit.sysnews.util.UploadUtil; import lombok.extern.slf4j.Slf4j; 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; import java.io.File; import java.io.IOException; import java.util.*; /** * @description: * @author: xusonglin * @create: 2020/3/1 0:26 * @version: V1.0 **/ @Slf4j @Service @Transactional(readOnly = true) public class PhotoServiceImpl extends BaseService implements PhotoService { @Value("${photo.uploadPath}") private String uploadPath; @Value("${photo.accessPath}") private String accessPath; @Value("${photo.accessResource}") private String accessResource; @Resource PhotoMapper photoMapper; @Override @Transactional(rollbackFor = ServiceException.class) public String upload(MultipartFile photo) { String fileName = UUID.randomUUID().toString().replace("-","") + "-" + photo.getOriginalFilename(); Calendar cal = Calendar.getInstance(); int month = cal.get(Calendar.MONTH) + 1; int year = cal.get(Calendar.YEAR); String directoryName = year+"-"+month; String filePath = uploadPath + directoryName + File.separator + fileName; try { UploadUtil.upload(photo, 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(File.separator+ directoryName + File.separator + fileName); photoMapper.insert(photoPo); } catch (Exception e) { log.error("图片上传-新增图片失败, 图片地址:{}", filePath); log.error("图片上传-新增图片失败,失败原因:{}", e.getMessage()); throw new ServiceException("图片上传-新增图片失败"); } return accessPath + accessResource + File.separator + directoryName + File.separator + fileName; } @Override public IPage getPhotos(Page page, PhotoDto photoDto) { IPage photoPoIPage = photoMapper.getPhotos(page, photoDto); return photoPoIPage.convert(this::convert); } private PhotoVo convert(PhotoPo po) { PhotoVo vo = new PhotoVo(); BeanUtils.copyProperties(po, vo); return vo; } @Override @Transactional(rollbackFor = ServiceException.class) public PhotoVo savePhoto(PhotoDto photoDto) { validate(photoDto); String fileName = UUID.randomUUID().toString().replace("-","") + "-" + photoDto.getPhoto().getOriginalFilename(); Calendar cal = Calendar.getInstance(); int month = cal.get(Calendar.MONTH) + 1; int year = cal.get(Calendar.YEAR); String directoryName = year+"-"+month; String filePath = uploadPath + File.separator + directoryName + File.separator + fileName; try { UploadUtil.upload(photoDto.getPhoto(), filePath); } catch (IOException ioe) { log.error("图片上传失败,失败原因:{}", ioe.getMessage()); throw new ServiceException("图片上传失败"); } File dest = new File(filePath); if (!dest.getParentFile().exists()) { log.error("图片上传失败,失败原因:服务器图片不存在"); throw new ServiceException("图片上传失败"); } photoDto.setUrl(File.separator+ directoryName + File.separator + fileName); PhotoPo photoPo = new PhotoPo(); BeanUtil.copyProperties(photoPo, photoDto); photoPo.setCreateTime(new Date()); try { photoMapper.insert(photoPo); PhotoVo photoVo = new PhotoVo(); BeanUtil.copyProperties(photoVo, photoPo); photoVo.setStatus(2); return photoVo; } catch (Exception e) { log.error("新增图片数据失败,失败原因:{}", e.getMessage()); throw new ServiceException("新增图片数据失败"); } } @Override @Transactional(rollbackFor = ServiceException.class) public void editPhoto(PhotoDto photoDto) { validate(photoDto); PhotoPo photoPo = photoMapper.selectById(photoDto.getId()); AssertUtils.assertNotNull(photoPo, CommonConstant.PHOTO_NOT_EXIST); if (!StringUtils.isBlank(photoDto.getName())) { photoPo.setName(photoDto.getName()); } if (photoDto.getStatus() != null) { photoPo.setStatus(photoDto.getStatus()); } if (photoDto.getType() != null) { photoPo.setType(photoDto.getType()); } if (photoDto.getGoPageUrl() != null) { photoPo.setGoPageUrl(photoDto.getGoPageUrl()); } photoPo.setUpdateTime(new Date()); try { photoMapper.updateById(photoPo); } catch (Exception e) { log.error("修改图片数据失败,失败原因:{}", e.getMessage()); throw new ServiceException("修改图片数据异常"); } } @Override @Transactional(rollbackFor = ServiceException.class) public void deletePhoto(Long id) { PhotoPo photoPo = photoMapper.selectById(id); AssertUtils.assertNotNull(photoPo, CommonConstant.PHOTO_NOT_EXIST); String url = uploadPath + photoPo.getUrl(); File file = new File(url); boolean deleteResult = false; if (file.exists()) { deleteResult = file.delete(); } if (deleteResult) { photoPo.setActivated(CommonConstant.ACTIVATED_DELETED); photoPo.setUpdateTime(new Date()); try { photoMapper.updateById(photoPo); } catch (Exception e) { log.error("删除图片失败,失败原因:{}", e.getMessage()); throw new ServiceException("删除图片失败"); } } else { throw new ServiceException("删除图片失败"); } } @Override public PhotoVo getPhotoById(Long id) { PhotoPo photoPo = photoMapper.selectById(id); PhotoVo photoVo = new PhotoVo(); BeanUtil.copyProperties(photoVo, photoPo); if (photoPo.getUrl() != null) { String url = accessPath + accessResource + photoPo.getUrl().replace("/",""); photoVo.setUrl(url); } return photoVo; } @Override public PhotoPo getPhotoByUrl(String url) { return photoMapper.getPhotoByUrl(url); } @Override public JSONObject getPhotosForHomePage() { JSONObject result = new JSONObject(); PhotoPo middlePhoto = photoMapper.getHomePageMiddlePhoto(); PhotoVo middlePhotoVo = new PhotoVo(); if (middlePhoto != null) { BeanUtil.copyProperties(middlePhotoVo, middlePhoto); if (middlePhoto.getUrl() != null) { String url = accessPath + accessResource + middlePhoto.getUrl().replace("/",""); middlePhotoVo.setUrl(url); } } List homePageMainPhotos = photoMapper.getHomePageMainPhotos(); List mainPhotos = new ArrayList<>(); for (PhotoPo po : homePageMainPhotos) { PhotoVo vo = new PhotoVo(); BeanUtil.copyProperties(vo, po); if (po.getUrl() != null) { String url = accessPath + accessResource + po.getUrl().replace("/",""); vo.setUrl(url); } mainPhotos.add(vo); } result.put("1", mainPhotos); result.put("2", middlePhotoVo); return result; } }