emailConfig = emailRepository.findById(1L);
+ if(emailConfig.isPresent()){
+ return emailConfig.get();
+ } else {
+ return new EmailConfig();
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void send(EmailVo emailVo, EmailConfig emailConfig){
+ if(emailConfig == null){
+ throw new BadRequestException("请先配置,再操作");
+ }
+ /**
+ * 封装
+ */
+ MailAccount account = new MailAccount();
+ account.setHost(emailConfig.getHost());
+ account.setPort(Integer.parseInt(emailConfig.getPort()));
+ account.setAuth(true);
+ try {
+ // 对称解密
+ account.setPass(EncryptUtils.desDecrypt(emailConfig.getPass()));
+ } catch (Exception e) {
+ throw new BadRequestException(e.getMessage());
+ }
+ account.setFrom(emailConfig.getUser()+"<"+emailConfig.getFromUser()+">");
+ //ssl方式发送
+ account.setStartttlsEnable(true);
+ String content = emailVo.getContent()+ "----- 邮件来自 eladmin 后台管理系统
";
+ /**
+ * 发送
+ */
+ try {
+ MailUtil.send(account,
+ emailVo.getTos(),
+ emailVo.getSubject(),
+ content,
+ true);
+ }catch (Exception e){
+ throw new BadRequestException(e.getMessage());
+ }
+ }
+}
diff --git a/src/main/java/me/zhengjie/tools/service/impl/PictureServiceImpl.java b/src/main/java/me/zhengjie/tools/service/impl/PictureServiceImpl.java
new file mode 100644
index 00000000..3deec4f9
--- /dev/null
+++ b/src/main/java/me/zhengjie/tools/service/impl/PictureServiceImpl.java
@@ -0,0 +1,102 @@
+package me.zhengjie.tools.service.impl;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import me.zhengjie.common.exception.BadRequestException;
+import me.zhengjie.common.utils.FileUtil;
+import me.zhengjie.common.utils.ValidationUtil;
+import me.zhengjie.tools.domain.Picture;
+import me.zhengjie.tools.repository.PictureRepository;
+import me.zhengjie.tools.service.PictureService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Optional;
+
+/**
+ * @author jie
+ * @date 2018-12-27
+ */
+@Slf4j
+@Service(value = "pictureService")
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
+public class PictureServiceImpl implements PictureService {
+
+ @Autowired
+ private PictureRepository pictureRepository;
+
+ public static final String SUCCESS = "success";
+
+ public static final String CODE = "code";
+
+ public static final String MSG = "msg";
+
+ @Override
+ @Transactional(rollbackFor = Throwable.class)
+ public Picture upload(MultipartFile multipartFile, String username) {
+ File file = FileUtil.toFile(multipartFile);
+ //将参数合成一个请求
+ RestTemplate rest = new RestTemplate();
+
+ FileSystemResource resource = new FileSystemResource(file);
+ MultiValueMap param = new LinkedMultiValueMap<>();
+ param.add("smfile", resource);
+
+ //设置头部,必须
+ HttpHeaders headers = new HttpHeaders();
+ headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
+ headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
+
+ HttpEntity> httpEntity = new HttpEntity>(param,headers);
+ ResponseEntity responseEntity = rest.exchange("https://sm.ms/api/upload", HttpMethod.POST, httpEntity, String.class);
+
+ JSONObject jsonObject = JSONUtil.parseObj(responseEntity.getBody());
+ Picture picture = null;
+ if(!jsonObject.get(CODE).toString().equals(SUCCESS)){
+ throw new BadRequestException(jsonObject.get(MSG).toString());
+ }
+ //转成实体类
+ picture = JSON.parseObject(jsonObject.get("data").toString(), Picture.class);
+ picture.setSize(FileUtil.getSize(Integer.valueOf(picture.getSize())));
+ picture.setUsername(username);
+ picture.setFilename(FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()));
+ pictureRepository.save(picture);
+ //删除临时文件
+ FileUtil.deleteFile(file);
+ return picture;
+ }
+
+ @Override
+ public Picture findById(Long id) {
+ Optional picture = pictureRepository.findById(id);
+ ValidationUtil.isNull(picture,"Picture","id",id);
+ return picture.get();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void delete(Picture picture) {
+ RestTemplate rest = new RestTemplate();
+ try {
+ ResponseEntity str = rest.getForEntity(picture.getDelete(), String.class);
+ if(str.getStatusCode().is2xxSuccessful()){
+ pictureRepository.delete(picture);
+ }
+ //如果删除的地址出错,直接删除数据库数据
+ } catch(Exception e){
+ pictureRepository.delete(picture);
+ }
+
+ }
+}
diff --git a/src/main/java/me/zhengjie/tools/service/query/PictureQueryService.java b/src/main/java/me/zhengjie/tools/service/query/PictureQueryService.java
new file mode 100644
index 00000000..13d8fcbe
--- /dev/null
+++ b/src/main/java/me/zhengjie/tools/service/query/PictureQueryService.java
@@ -0,0 +1,66 @@
+package me.zhengjie.tools.service.query;
+
+import me.zhengjie.common.utils.PageUtil;
+import me.zhengjie.tools.domain.Picture;
+import me.zhengjie.tools.repository.PictureRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author jie
+ * @date 2018-12-03
+ */
+@Service
+@CacheConfig(cacheNames = "picture")
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
+public class PictureQueryService {
+
+ @Autowired
+ private PictureRepository pictureRepository;
+
+ /**
+ * 分页
+ */
+ @Cacheable(keyGenerator = "keyGenerator")
+ public Object queryAll(Picture picture, Pageable pageable){
+ return PageUtil.toPage(pictureRepository.findAll(new Spec(picture),pageable));
+ }
+
+ class Spec implements Specification {
+
+ private Picture picture;
+
+ public Spec(Picture picture){
+ this.picture = picture;
+ }
+
+ @Override
+ public Predicate toPredicate(Root root, CriteriaQuery> criteriaQuery, CriteriaBuilder cb) {
+
+ List list = new ArrayList();
+
+ if(!ObjectUtils.isEmpty(picture.getFilename())){
+ /**
+ * 模糊
+ */
+ list.add(cb.like(root.get("filename").as(String.class),"%"+picture.getFilename()+"%"));
+ }
+
+ Predicate[] p = new Predicate[list.size()];
+ return cb.and(list.toArray(p));
+ }
+ }
+}