v2.2 正式发布,移除jpa升级后台为mytisplus

This commit is contained in:
xuwenbo
2020-05-19 12:29:07 +08:00
parent 7a69a2abaf
commit 5db1bd8b35
902 changed files with 22572 additions and 18839 deletions

View File

@ -1,65 +0,0 @@
package co.yixiang.domain;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 支付宝配置类
* @author Zheng Jie
* @date 2018-12-31
*/
@Data
@Entity
@Table(name = "alipay_config")
public class AlipayConfig implements Serializable {
@Id
private Long id;
/** 应用ID,APPID收款账号既是APPID对应支付宝账号 */
@NotBlank
@Column(name = "app_id")
private String appId;
/** 商户私钥您的PKCS8格式RSA2私钥 */
@NotBlank
@Column(name = "private_key", columnDefinition = "text")
private String privateKey;
/** 支付宝公钥 */
@NotBlank
@Column(name = "public_key", columnDefinition = "text")
private String publicKey;
/** 签名方式,固定格式 */
@Column(name = "sign_type")
private String signType="RSA2";
/** 支付宝开放安全地址,一般不会变 */
@Column(name = "gateway_url")
private String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
/** 编码,固定格式 */
private String charset= "utf-8";
/** 异步通知地址 */
@NotBlank
@Column(name = "notify_url")
private String notifyUrl;
/** 订单完成后返回的页面 */
@NotBlank
@Column(name = "return_url")
private String returnUrl;
/** 类型,固定格式 */
private String format="JSON";
/** 商户号 */
@NotBlank
@Column(name = "sys_service_provider_id")
private String sysServiceProviderId;
}

View File

@ -1,41 +0,0 @@
package co.yixiang.domain;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 邮件配置类,数据存覆盖式存入数据存
* @author Zheng Jie
* @date 2018-12-26
*/
@Entity
@Data
@Table(name = "email_config")
public class EmailConfig implements Serializable {
@Id
private Long id;
/** 邮件服务器SMTP地址 */
@NotBlank
private String host;
/** 邮件服务器 SMTP 端口 */
@NotBlank
private String port;
/** 发件者用户名,默认为发件人邮箱前缀 */
@NotBlank
private String user;
@NotBlank
private String pass;
/** 收件人 */
@NotBlank
@Column(name = "from_user")
private String fromUser;
}

View File

@ -1,53 +0,0 @@
package co.yixiang.domain;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* sm.ms图床
*
* @author Zheng Jie
* @date 2018-12-27
*/
@Data
@Entity
@Table(name = "picture")
public class Picture implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String filename;
private String url;
private String size;
private String height;
private String width;
@Column(name = "delete_url")
private String delete;
private String username;
@CreationTimestamp
@Column(name = "create_time")
private Timestamp createTime;
/** 用于检测文件是否重复 */
private String md5Code;
@Override
public String toString() {
return "Picture{" +
"filename='" + filename + '\'' +
'}';
}
}

View File

@ -1,52 +0,0 @@
package co.yixiang.domain;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 七牛云对象存储配置类
* @author Zheng Jie
* @date 2018-12-31
*/
@Data
@Entity
@Table(name = "qiniu_config")
public class QiniuConfig implements Serializable {
@Id
private Long id;
/** 一个账号最多拥有两对密钥(Access/Secret Key) */
@NotBlank
@Column(name = "access_key", columnDefinition = "text")
private String accessKey;
/** 一个账号最多拥有两对密钥(Access/Secret Key) */
@NotBlank
@Column(name = "secret_key", columnDefinition = "text")
private String secretKey;
/** 存储空间名称作为唯一的 Bucket 识别符 */
@NotBlank
private String bucket;
/**
* Zone表示与机房的对应关系
* 华东 Zone.zone0()
* 华北 Zone.zone1()
* 华南 Zone.zone2()
* 北美 Zone.zoneNa0()
* 东南亚 Zone.zoneAs0()
*/
@NotBlank
private String zone;
/** 外链域名,可自定义,需在七牛云绑定 */
@NotBlank
private String host;
/** 空间类型:公开/私有 */
private String type = "公开";
}

View File

@ -1,45 +0,0 @@
package co.yixiang.domain;
import lombok.Data;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* 上传成功后,存储结果
* @author Zheng Jie
* @date 2018-12-31
*/
@Data
@Entity
@Table(name = "qiniu_content")
public class QiniuContent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/** 文件名 */
@Column(name = "name")
private String key;
/** 空间名 */
private String bucket;
/** 大小 */
private String size;
/** 文件地址 */
private String url;
private String suffix;
/** 空间类型:公开/私有 */
private String type = "公开";
@UpdateTimestamp
@Column(name = "update_time")
private Timestamp updateTime;
}

View File

@ -1,11 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.AlipayConfig;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author Zheng Jie
* @date 2018-12-31
*/
public interface AlipayRepository extends JpaRepository<AlipayConfig,Long> {
}

View File

@ -1,11 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.EmailConfig;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author Zheng Jie
* @date 2018-12-26
*/
public interface EmailRepository extends JpaRepository<EmailConfig,Long> {
}

View File

@ -1,12 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.LocalStorage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
public interface LocalStorageRepository extends JpaRepository<LocalStorage, Long>, JpaSpecificationExecutor<LocalStorage> {
}

View File

@ -1,26 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.Picture;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author Zheng Jie
* @date 2018-12-27
*/
public interface PictureRepository extends JpaRepository<Picture,Long>, JpaSpecificationExecutor<Picture> {
/**
* 根据 Mds 值查询文件
* @param code 值
* @return /
*/
Picture findByMd5Code(String code);
/**
* 根据连接地址查询
* @param url /
* @return /
*/
boolean existsByUrl(String url);
}

View File

@ -1,21 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.QiniuConfig;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
/**
* @author Zheng Jie
* @date 2018-12-31
*/
public interface QiNiuConfigRepository extends JpaRepository<QiniuConfig,Long> {
/**
* 编辑类型
* @param type
*/
@Modifying
@Query(value = "update QiniuConfig set type = ?1")
void update(String type);
}

View File

@ -1,19 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.QiniuContent;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author Zheng Jie
* @date 2018-12-31
*/
public interface QiniuContentRepository extends JpaRepository<QiniuContent,Long>, JpaSpecificationExecutor<QiniuContent> {
/**
* 根据key查询
* @param key 文件名
* @return QiniuContent
*/
QiniuContent findByKey(String key);
}

View File

@ -1,20 +0,0 @@
package co.yixiang.repository;
import co.yixiang.domain.VerificationCode;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author Zheng Jie
* @date 2018-12-26
*/
public interface VerificationCodeRepository extends JpaRepository<VerificationCode, Long> {
/**
* 获取有效的验证码
* @param scenes 业务场景,如重置密码,重置邮箱等等
* @param type 类型
* @param value 值
* @return VerificationCode
*/
VerificationCode findByScenesAndTypeAndValueAndStatusIsTrue(String scenes, String type, String value);
}

View File

@ -1,71 +0,0 @@
package co.yixiang.rest;
import co.yixiang.aop.log.Log;
import co.yixiang.domain.LocalStorage;
import co.yixiang.service.LocalStorageService;
import co.yixiang.service.dto.LocalStorageQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
@Api(tags = "工具:本地存储管理")
@RestController
@RequestMapping("/api/localStorage")
public class LocalStorageController {
private final LocalStorageService localStorageService;
public LocalStorageController(LocalStorageService localStorageService) {
this.localStorageService = localStorageService;
}
@ApiOperation("查询文件")
@GetMapping
@PreAuthorize("@el.check('storage:list')")
public ResponseEntity<Object> getLocalStorages(LocalStorageQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(localStorageService.queryAll(criteria,pageable),HttpStatus.OK);
}
@Log("导出数据")
@ApiOperation("导出数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('storage:list')")
public void download(HttpServletResponse response, LocalStorageQueryCriteria criteria) throws IOException {
localStorageService.download(localStorageService.queryAll(criteria), response);
}
@ApiOperation("上传文件")
@PostMapping
@PreAuthorize("@el.check('storage:add')")
public ResponseEntity<Object> create(@RequestParam String name, @RequestParam("file") MultipartFile file){
return new ResponseEntity<>(localStorageService.create(name, file),HttpStatus.CREATED);
}
@ApiOperation("修改文件")
@PutMapping
@PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody LocalStorage resources){
localStorageService.update(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("多选删除")
@DeleteMapping
@ApiOperation("多选删除")
public ResponseEntity<Object> deleteAll(@RequestBody Long[] ids) {
localStorageService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -1,72 +0,0 @@
package co.yixiang.rest;
import cn.hutool.core.util.StrUtil;
import co.yixiang.annotation.AnonymousAccess;
import co.yixiang.aop.log.Log;
import co.yixiang.domain.LocalStorage;
import co.yixiang.domain.QiniuContent;
import co.yixiang.service.LocalStorageService;
import co.yixiang.service.QiNiuService;
import co.yixiang.service.dto.LocalStorageDTO;
import co.yixiang.service.dto.LocalStorageQueryCriteria;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author hupeng
* @date 2020-01-09
*/
@Api(tags = "上传统一管理")
@RestController
@RequestMapping("/api/upload")
@SuppressWarnings("unchecked")
public class UploadController {
@Value("${file.localUrl}")
private String localUrl;
private final LocalStorageService localStorageService;
private final QiNiuService qiNiuService;
public UploadController(LocalStorageService localStorageService,QiNiuService qiNiuService) {
this.localStorageService = localStorageService;
this.qiNiuService = qiNiuService;
}
@ApiOperation("上传文件")
@PostMapping
@AnonymousAccess
public ResponseEntity<Object> create(@RequestParam(defaultValue = "") String name, @RequestParam("file") MultipartFile file){
String url = "";
if(StrUtil.isNotEmpty(localUrl)){ //存在走本地
LocalStorageDTO localStorageDTO = localStorageService.create(name, file);
url = localUrl+"/file/"+localStorageDTO.getType()+"/"+localStorageDTO.getRealName();
}else{//走七牛云
QiniuContent qiniuContent = qiNiuService.upload(file,qiNiuService.find());
url = qiniuContent.getUrl();
}
Map<String,Object> map = new HashMap<>(2);
map.put("errno",0);
map.put("link",url);
return new ResponseEntity(map,HttpStatus.CREATED);
}
}

View File

@ -1,66 +0,0 @@
package co.yixiang.service;
import co.yixiang.domain.Picture;
import co.yixiang.service.dto.PictureQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author Zheng Jie
* @date 2018-12-27
*/
public interface PictureService {
/**
* 分页查询
* @param criteria 条件
* @param pageable 分页参数
* @return /
*/
Object queryAll(PictureQueryCriteria criteria, Pageable pageable);
/**
* 查询全部数据
* @param criteria 条件
* @return /
*/
List<Picture> queryAll(PictureQueryCriteria criteria);
/**
* 上传文件
* @param file /
* @param username /
* @return /
*/
Picture upload(MultipartFile file, String username);
/**
* 根据ID查询
* @param id /
* @return /
*/
Picture findById(Long id);
/**
* 多选删除
* @param ids /
*/
void deleteAll(Long[] ids);
/**
* 导出
* @param queryAll 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<Picture> queryAll, HttpServletResponse response) throws IOException;
/**
* 同步数据
*/
void synchronize();
}

View File

@ -1,26 +0,0 @@
package co.yixiang.service.dto;
import lombok.Data;
import co.yixiang.annotation.Query;
import java.sql.Timestamp;
import java.util.List;
/**
* sm.ms图床
*
* @author Zheng Jie
* @date 2019-6-4 09:52:09
*/
@Data
public class PictureQueryCriteria{
@Query(type = Query.Type.INNER_LIKE)
private String filename;
@Query(type = Query.Type.INNER_LIKE)
private String username;
@Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime;
}

View File

@ -1,141 +0,0 @@
package co.yixiang.service.impl;
import cn.hutool.core.util.ObjectUtil;
import co.yixiang.domain.LocalStorage;
import co.yixiang.exception.BadRequestException;
import co.yixiang.repository.LocalStorageRepository;
import co.yixiang.service.LocalStorageService;
import co.yixiang.service.dto.LocalStorageDTO;
import co.yixiang.service.dto.LocalStorageQueryCriteria;
import co.yixiang.service.mapper.LocalStorageMapper;
import co.yixiang.utils.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
@Service
@CacheConfig(cacheNames = "localStorage")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class LocalStorageServiceImpl implements LocalStorageService {
private final LocalStorageRepository localStorageRepository;
private final LocalStorageMapper localStorageMapper;
@Value("${file.path}")
private String path;
@Value("${file.maxSize}")
private long maxSize;
public LocalStorageServiceImpl(LocalStorageRepository localStorageRepository, LocalStorageMapper localStorageMapper) {
this.localStorageRepository = localStorageRepository;
this.localStorageMapper = localStorageMapper;
}
@Override
@Cacheable
public Object queryAll(LocalStorageQueryCriteria criteria, Pageable pageable){
Page<LocalStorage> page = localStorageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(localStorageMapper::toDto));
}
@Override
@Cacheable
public List<LocalStorageDTO> queryAll(LocalStorageQueryCriteria criteria){
return localStorageMapper.toDto(localStorageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
@Cacheable(key = "#p0")
public LocalStorageDTO findById(Long id){
LocalStorage localStorage = localStorageRepository.findById(id).orElseGet(LocalStorage::new);
ValidationUtil.isNull(localStorage.getId(),"LocalStorage","id",id);
return localStorageMapper.toDto(localStorage);
}
@Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public LocalStorageDTO create(String name, MultipartFile multipartFile) {
FileUtil.checkSize(maxSize, multipartFile.getSize());
String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename());
String type = FileUtil.getFileType(suffix);
File file = FileUtil.upload(multipartFile, path + type + File.separator);
if(ObjectUtil.isNull(file)){
throw new BadRequestException("上传失败");
}
try {
name = StringUtils.isBlank(name) ? FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()) : name;
LocalStorage localStorage = new LocalStorage(
file.getName(),
name,
suffix,
file.getPath(),
type,
FileUtil.getSize(multipartFile.getSize()),
SecurityUtils.getUsername()
);
return localStorageMapper.toDto(localStorageRepository.save(localStorage));
}catch (Exception e){
FileUtil.del(file);
throw e;
}
}
@Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void update(LocalStorage resources) {
LocalStorage localStorage = localStorageRepository.findById(resources.getId()).orElseGet(LocalStorage::new);
ValidationUtil.isNull( localStorage.getId(),"LocalStorage","id",resources.getId());
localStorage.copy(resources);
localStorageRepository.save(localStorage);
}
@Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Long[] ids) {
for (Long id : ids) {
LocalStorage storage = localStorageRepository.findById(id).orElseGet(LocalStorage::new);
FileUtil.del(storage.getPath());
localStorageRepository.delete(storage);
}
}
@Override
public void download(List<LocalStorageDTO> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (LocalStorageDTO localStorageDTO : queryAll) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("文件名", localStorageDTO.getRealName());
map.put("备注名", localStorageDTO.getName());
map.put("文件类型", localStorageDTO.getType());
map.put("文件大小", localStorageDTO.getSize());
map.put("操作人", localStorageDTO.getOperate());
map.put("创建日期", localStorageDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

View File

@ -1,16 +0,0 @@
package co.yixiang.service.mapper;
import co.yixiang.domain.LocalStorage;
import co.yixiang.service.dto.LocalStorageDTO;
import co.yixiang.base.BaseMapper;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author Zheng Jie
* @date 2019-09-05
*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface LocalStorageMapper extends BaseMapper<LocalStorageDTO, LocalStorage> {
}

View File

@ -1,4 +1,9 @@
package co.yixiang.config;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.config;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
@ -27,4 +32,4 @@ public class MultipartConfig {
factory.setLocation(location);
return factory.createMultipartConfig();
}
}
}

View File

@ -0,0 +1,83 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
@TableName("alipay_config")
public class AlipayConfig implements Serializable {
/** 主键 */
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private Long id;
/** 应用ID */
// @Column(name = "app_id")
private String appId;
/** 编码 */
// @Column(name = "charset")
private String charset;
/** 类型 固定格式json */
// @Column(name = "format")
private String format;
/** 网关地址 */
// @Column(name = "gateway_url")
private String gatewayUrl;
/** 异步回调 */
// @Column(name = "notify_url")
private String notifyUrl;
/** 私钥 */
// @Column(name = "private_key")
private String privateKey;
/** 公钥 */
// @Column(name = "public_key")
private String publicKey;
/** 回调地址 */
// @Column(name = "return_url")
private String returnUrl;
/** 签名方式 */
// @Column(name = "sign_type")
private String signType;
/** 商户号 */
// @Column(name = "sys_service_provider_id")
private String sysServiceProviderId;
public void copy(AlipayConfig source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -0,0 +1,59 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
@TableName("email_config")
public class EmailConfig implements Serializable {
/** ID */
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private Long id;
/** 收件人 */
// @Column(name = "from_user")
private String fromUser;
/** 邮件服务器SMTP地址 */
// @Column(name = "host")
private String host;
/** 密码 */
// @Column(name = "pass")
private String pass;
/** 端口 */
// @Column(name = "port")
private String port;
/** 发件者用户名 */
// @Column(name = "user")
private String user;
public void copy(EmailConfig source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -1,62 +1,74 @@
package co.yixiang.domain;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import lombok.*;
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author Zheng Jie
* @date 2019-09-05
* @author hupeng
* @date 2020-05-13
*/
@Getter
@Setter
@Entity
@Table(name="local_storage")
@NoArgsConstructor
public class LocalStorage implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@Data
@TableName("local_storage")
public class LocalStorage implements Serializable {
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private Long id;
/** 真实文件名 */
@Column(name = "real_name")
/** 文件真实的名称 */
// @Column(name = "real_name")
private String realName;
/**文件名 */
@Column(name = "name")
/** 文件名 */
// @Column(name = "name")
private String name;
/**后缀 */
@Column(name = "suffix")
/** 后缀 */
// @Column(name = "suffix")
private String suffix;
/** 路径 */
@Column(name = "path")
// @Column(name = "path")
private String path;
/** 类型 */
@Column(name = "type")
// @Column(name = "type")
private String type;
/** 大小 */
@Column(name = "size")
// @Column(name = "size")
private String size;
/** 操作人 */
@Column(name = "operate")
// @Column(name = "operate")
private String operate;
@Column(name = "create_time")
@CreationTimestamp
private Timestamp createTime;
/** 创建日期 */
// @Column(name = "create_time")
@TableField(fill= FieldFill.INSERT)
private Timestamp createTime;
public LocalStorage(String realName,String name, String suffix, String path, String type, String size, String operate) {
this.realName = realName;
this.name = name;
@ -70,4 +82,4 @@ public class LocalStorage implements Serializable {
public void copy(LocalStorage source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
}

View File

@ -0,0 +1,82 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
@TableName("picture")
public class Picture implements Serializable {
/** ID */
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private Long id;
/** 上传日期 */
// @Column(name = "create_time")
@TableField(fill= FieldFill.INSERT)
private Timestamp createTime;
/** 删除的URL */
// @Column(name = "delete_url")
private String deleteUrl;
/** 图片名称 */
// @Column(name = "filename")
private String filename;
/** 图片高度 */
// @Column(name = "height")
private String height;
/** 图片大小 */
// @Column(name = "size")
private String size;
/** 图片地址 */
// @Column(name = "url")
private String url;
/** 用户名称 */
// @Column(name = "username")
private String username;
/** 图片宽度 */
// @Column(name = "width")
private String width;
/** 文件的MD5值 */
// @Column(name = "md5code")
private String md5code;
public void copy(Picture source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -0,0 +1,65 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
@TableName("qiniu_config")
public class QiniuConfig implements Serializable {
/** ID */
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private Long id;
/** accessKey */
// @Column(name = "access_key")
private String accessKey;
/** Bucket 识别符 */
// @Column(name = "bucket")
private String bucket;
/** 外链域名 */
// @Column(name = "host",nullable = false)
private String host;
/** secretKey */
// @Column(name = "secret_key")
private String secretKey;
/** 空间类型 */
// @Column(name = "type")
private String type;
/** 机房 */
// @Column(name = "zone")
private String zone;
public void copy(QiniuConfig source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -0,0 +1,72 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
@TableName("qiniu_content")
public class QiniuContent implements Serializable {
/** ID */
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id")
private Long id;
/** Bucket 识别符 */
// @Column(name = "bucket")
private String bucket;
/** 文件名称 */
@TableField("name")
private String name;
/** 文件大小 */
// @Column(name = "size")
private String size;
/** 文件类型:私有或公开 */
// @Column(name = "type")
private String type;
/** 上传或同步的时间 */
// @Column(name = "update_time")
@TableField(fill= FieldFill.INSERT_UPDATE)
private Timestamp updateTime;
/** 文件url */
// @Column(name = "url")
private String url;
// @Column(name = "suffix")
private String suffix;
public void copy(QiniuContent source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -1,28 +1,33 @@
package co.yixiang.domain;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-26
*/
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "verification_code")
@TableName("verification_code")
public class VerificationCode implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@TableId
//@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String code;
@ -34,16 +39,14 @@ public class VerificationCode implements Serializable {
private Boolean status = true;
/** 类型 phone 和 email */
@NotBlank
private String type;
/** 具体的phone与email */
@NotBlank
private String value;
/** 创建日期 */
@CreationTimestamp
@Column(name = "create_time")
@TableField(fill= FieldFill.INSERT)
// @Column(name = "create_time")
private Timestamp createTime;
public VerificationCode(String code, String scenes, @NotBlank String type, @NotBlank String value) {

View File

@ -1,4 +1,9 @@
package co.yixiang.domain.vo;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@ -1,4 +1,9 @@
package co.yixiang.domain.vo;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -9,7 +14,7 @@ import java.sql.Timestamp;
/**
* 交易详情按需应该存入数据库这里存入数据库仅供临时测试
* @author Zheng Jie
* @author hupeng
* @date 2018-12-31
*/
@Data

View File

@ -1,8 +1,13 @@
package co.yixiang.express;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.express;
import cn.hutool.http.HttpUtil;
import co.yixiang.express.config.ExpressProperties;
import co.yixiang.express.dao.ExpressInfo;
import co.yixiang.tools.express.config.ExpressProperties;
import co.yixiang.tools.express.dao.ExpressInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

View File

@ -1,6 +1,11 @@
package co.yixiang.express.config;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.express.ExpressService;
*/
package co.yixiang.tools.express.config;
import co.yixiang.tools.express.ExpressService;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

View File

@ -1,4 +1,9 @@
package co.yixiang.express.config;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.express.config;
import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@ -1,7 +1,12 @@
/**
* Copyright 2018 bejson.com
*/
package co.yixiang.express.dao;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.express.dao;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@ -38,4 +43,4 @@ public class ExpressInfo {
private String OrderCode;
}
}

View File

@ -1,7 +1,12 @@
/**
* Copyright 2018 bejson.com
*/
package co.yixiang.express.dao;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.express.dao;
import com.fasterxml.jackson.annotation.JsonProperty;
@ -34,4 +39,4 @@ public class Traces {
this.AcceptTime = AcceptTime;
}
}
}

View File

@ -1,15 +1,20 @@
package co.yixiang.rest;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.aop.log.Log;
import co.yixiang.utils.AliPayStatusEnum;
*/
package co.yixiang.tools.rest;
import co.yixiang.logging.aop.log.Log;
import co.yixiang.tools.service.AlipayConfigService;
import co.yixiang.tools.utils.AliPayStatusEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import co.yixiang.annotation.AnonymousAccess;
import co.yixiang.domain.vo.TradeVo;
import co.yixiang.domain.AlipayConfig;
import co.yixiang.utils.AlipayUtils;
import co.yixiang.service.AlipayService;
import co.yixiang.tools.domain.vo.TradeVo;
import co.yixiang.tools.domain.AlipayConfig;
import co.yixiang.tools.utils.AlipayUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
@ -21,7 +26,7 @@ import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-31
*/
@Slf4j
@ -32,9 +37,9 @@ public class AliPayController {
private final AlipayUtils alipayUtils;
private final AlipayService alipayService;
private final AlipayConfigService alipayService;
public AliPayController(AlipayUtils alipayUtils, AlipayService alipayService) {
public AliPayController(AlipayUtils alipayUtils, AlipayConfigService alipayService) {
this.alipayUtils = alipayUtils;
this.alipayService = alipayService;
}

View File

@ -1,11 +1,16 @@
package co.yixiang.rest;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.aop.log.Log;
*/
package co.yixiang.tools.rest;
import co.yixiang.logging.aop.log.Log;
import co.yixiang.tools.service.EmailConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import co.yixiang.domain.vo.EmailVo;
import co.yixiang.domain.EmailConfig;
import co.yixiang.service.EmailService;
import co.yixiang.tools.domain.vo.EmailVo;
import co.yixiang.tools.domain.EmailConfig;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
@ -21,9 +26,9 @@ import org.springframework.web.bind.annotation.*;
@Api(tags = "工具:邮件管理")
public class EmailController {
private final EmailService emailService;
private final EmailConfigService emailService;
public EmailController(EmailService emailService) {
public EmailController(EmailConfigService emailService) {
this.emailService = emailService;
}

View File

@ -0,0 +1,82 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.rest;
import java.util.Arrays;
import co.yixiang.dozer.service.IGenerator;
import lombok.AllArgsConstructor;
import co.yixiang.logging.aop.log.Log;
import co.yixiang.tools.domain.LocalStorage;
import co.yixiang.tools.service.LocalStorageService;
import co.yixiang.tools.service.dto.LocalStorageQueryCriteria;
import co.yixiang.tools.service.dto.LocalStorageDto;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-05-13
*/
@AllArgsConstructor
@Api(tags = "文件管理")
@RestController
@RequestMapping("/api/localStorage")
public class LocalStorageController {
private final LocalStorageService localStorageService;
private final IGenerator generator;
@Log("导出数据")
@ApiOperation("导出数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('admin','localStorage:list')")
public void download(HttpServletResponse response, LocalStorageQueryCriteria criteria) throws IOException {
localStorageService.download(generator.convert(localStorageService.queryAll(criteria), LocalStorageDto.class), response);
}
@GetMapping
@Log("查询文件")
@ApiOperation("查询文件")
@PreAuthorize("@el.check('admin','localStorage:list')")
public ResponseEntity<Object> getLocalStorages(LocalStorageQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(localStorageService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@Log("新增文件")
@ApiOperation("新增文件")
@PreAuthorize("@el.check('admin','localStorage:add')")
public ResponseEntity<Object> create(@Validated @RequestBody LocalStorage resources){
return new ResponseEntity<>(localStorageService.save(resources),HttpStatus.CREATED);
}
@PutMapping
@Log("修改文件")
@ApiOperation("修改文件")
@PreAuthorize("@el.check('admin','localStorage:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody LocalStorage resources){
localStorageService.updateById(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除文件")
@ApiOperation("删除文件")
@PreAuthorize("@el.check('admin','localStorage:del')")
@DeleteMapping
public ResponseEntity<Object> deleteAll(@RequestBody Long[] ids) {
Arrays.asList(ids).forEach(id->{
localStorageService.removeById(id);
});
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -1,11 +1,18 @@
package co.yixiang.rest;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.aop.log.Log;
*/
package co.yixiang.tools.rest;
import co.yixiang.tools.service.dto.PictureDto;
import co.yixiang.logging.aop.log.Log;
import co.yixiang.dozer.service.IGenerator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import co.yixiang.domain.Picture;
import co.yixiang.service.PictureService;
import co.yixiang.service.dto.PictureQueryCriteria;
import co.yixiang.tools.domain.Picture;
import co.yixiang.tools.service.PictureService;
import co.yixiang.tools.service.dto.PictureQueryCriteria;
import co.yixiang.utils.SecurityUtils;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
@ -17,17 +24,18 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 郑杰
* @author hupeng
* @date 2018/09/20 14:13:32
*/
@RestController
@RequestMapping("/api/pictures")
@Api(tags = "工具:免费图床管理")
public class PictureController {
private final IGenerator generator;
private final PictureService pictureService;
public PictureController(PictureService pictureService) {
public PictureController(IGenerator generator, PictureService pictureService) {
this.generator = generator;
this.pictureService = pictureService;
}
@ -44,7 +52,7 @@ public class PictureController {
@GetMapping(value = "/download")
@PreAuthorize("@el.check('pictures:list')")
public void download(HttpServletResponse response, PictureQueryCriteria criteria) throws IOException {
pictureService.download(pictureService.queryAll(criteria), response);
pictureService.download(generator.convert(pictureService.queryAll(criteria), PictureDto.class), response);
}
@Log("上传图片")

View File

@ -1,12 +1,15 @@
package co.yixiang.rest;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import cn.hutool.core.util.StrUtil;
import co.yixiang.aop.log.Log;
import co.yixiang.domain.QiniuConfig;
import co.yixiang.domain.QiniuContent;
import co.yixiang.exception.BadRequestException;
import co.yixiang.service.QiNiuService;
import co.yixiang.service.dto.QiniuQueryCriteria;
*/
package co.yixiang.tools.rest;
import co.yixiang.logging.aop.log.Log;
import co.yixiang.tools.domain.QiniuConfig;
import co.yixiang.tools.domain.QiniuContent;
import co.yixiang.tools.service.QiNiuService;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

View File

@ -0,0 +1,80 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.rest;
import cn.hutool.core.util.StrUtil;
import co.yixiang.annotation.AnonymousAccess;
import co.yixiang.tools.domain.QiniuContent;
import co.yixiang.tools.service.LocalStorageService;
import co.yixiang.tools.service.QiNiuService;
import co.yixiang.tools.service.dto.LocalStorageDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.Map;
/**
* @author hupeng
* @date 2020-01-09
*/
@Api(tags = "上传统一管理")
@RestController
@RequestMapping("/api/upload")
@SuppressWarnings("unchecked")
public class UploadController {
@Value("${file.localUrl}")
private String localUrl;
private final LocalStorageService localStorageService;
private final QiNiuService qiNiuService;
public UploadController(LocalStorageService localStorageService, QiNiuService qiNiuService) {
this.localStorageService = localStorageService;
this.qiNiuService = qiNiuService;
}
@ApiOperation("上传文件")
@PostMapping
@AnonymousAccess
public ResponseEntity<Object> create(@RequestParam(defaultValue = "") String name, @RequestParam("file") MultipartFile[] files) {
StringBuilder url = new StringBuilder();
if (StrUtil.isNotEmpty(localUrl)) { //存在走本地
for (MultipartFile file : files) {
LocalStorageDto localStorageDTO = localStorageService.create(name, file);
if ("".equals(url.toString())) {
url = url.append(localUrl + "/file/" + localStorageDTO.getType() + "/" + localStorageDTO.getRealName());
} else {
url = url.append(","+localUrl + "/file/" + localStorageDTO.getType() + "/" + localStorageDTO.getRealName());
}
}
} else {//走七牛云
for (MultipartFile file : files) {
QiniuContent qiniuContent = qiNiuService.upload(file, qiNiuService.find());
if ("".equals(url.toString())) {
url = url.append(qiniuContent.getUrl());
}else{
url = url.append(","+qiniuContent.getUrl());
}
}
}
Map<String, Object> map = new HashMap<>(2);
map.put("errno", 0);
map.put("link", url);
return new ResponseEntity(map, HttpStatus.CREATED);
}
}

View File

@ -1,18 +1,23 @@
package co.yixiang.rest;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.rest;
import co.yixiang.tools.service.EmailConfigService;
import co.yixiang.utils.YshopConstant;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import co.yixiang.domain.VerificationCode;
import co.yixiang.domain.vo.EmailVo;
import co.yixiang.service.EmailService;
import co.yixiang.service.VerificationCodeService;
import co.yixiang.tools.domain.VerificationCode;
import co.yixiang.tools.domain.vo.EmailVo;
import co.yixiang.tools.service.VerificationCodeService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-26
*/
@RestController
@ -22,9 +27,9 @@ public class VerificationCodeController {
private final VerificationCodeService verificationCodeService;
private final EmailService emailService;
private final EmailConfigService emailService;
public VerificationCodeController(VerificationCodeService verificationCodeService, EmailService emailService) {
public VerificationCodeController(VerificationCodeService verificationCodeService, EmailConfigService emailService) {
this.verificationCodeService = verificationCodeService;
this.emailService = emailService;
}

View File

@ -1,13 +1,18 @@
package co.yixiang.service;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.AlipayConfig;
import co.yixiang.domain.vo.TradeVo;
*/
package co.yixiang.tools.service;
import co.yixiang.tools.domain.AlipayConfig;
import co.yixiang.tools.domain.vo.TradeVo;
import co.yixiang.common.service.BaseService;
/**
* @author Zheng Jie
* @date 2018-12-31
*/
public interface AlipayService {
* @author hupeng
* @date 2020-05-13
*/
public interface AlipayConfigService extends BaseService<AlipayConfig>{
/**
* 处理来自PC的交易请求
@ -38,5 +43,5 @@ public interface AlipayService {
* @param alipayConfig 支付宝配置
* @return AlipayConfig
*/
AlipayConfig update(AlipayConfig alipayConfig);
void update(AlipayConfig alipayConfig);
}

View File

@ -1,22 +1,26 @@
package co.yixiang.service;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.EmailConfig;
import co.yixiang.domain.vo.EmailVo;
*/
package co.yixiang.tools.service;
import co.yixiang.tools.domain.EmailConfig;
import co.yixiang.tools.domain.vo.EmailVo;
import co.yixiang.common.service.BaseService;
import org.springframework.scheduling.annotation.Async;
/**
* @author Zheng Jie
* @date 2018-12-26
*/
public interface EmailService {
* @author hupeng
* @date 2020-05-13
*/
public interface EmailConfigService extends BaseService<EmailConfig>{
/**
* 更新邮件配置
* @param emailConfig 邮件配置
* @param old 旧的配置
* @return EmailConfig
*/
EmailConfig update(EmailConfig emailConfig, EmailConfig old);
void update(EmailConfig emailConfig, EmailConfig old);
/**
* 查询配置

View File

@ -1,19 +1,26 @@
package co.yixiang.service;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.LocalStorage;
import co.yixiang.service.dto.LocalStorageDTO;
import co.yixiang.service.dto.LocalStorageQueryCriteria;
*/
package co.yixiang.tools.service;
import co.yixiang.tools.domain.LocalStorage;
import co.yixiang.tools.service.dto.LocalStorageDto;
import co.yixiang.common.service.BaseService;
import co.yixiang.tools.service.dto.LocalStorageQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author Zheng Jie
* @date 2019-09-05
* @author hupeng
* @date 2020-05-13
*/
public interface LocalStorageService {
public interface LocalStorageService extends BaseService<LocalStorage>{
/**
* 分页查询
@ -21,21 +28,21 @@ public interface LocalStorageService {
* @param pageable 分页参数
* @return /
*/
Object queryAll(LocalStorageQueryCriteria criteria, Pageable pageable);
Map<String, Object> queryAll(LocalStorageQueryCriteria criteria, Pageable pageable);
/**
* 查询全部数据
* @param criteria 条件
* @return /
*/
List<LocalStorageDTO> queryAll(LocalStorageQueryCriteria criteria);
List<LocalStorageDto> queryAll(LocalStorageQueryCriteria criteria);
/**
* 根据ID查询
* @param id /
* @return /
*/
LocalStorageDTO findById(Long id);
LocalStorageDto findById(Long id);
/**
* 上传
@ -43,13 +50,8 @@ public interface LocalStorageService {
* @param file 文件
* @return /
*/
LocalStorageDTO create(String name, MultipartFile file);
LocalStorageDto create(String name, MultipartFile file);
/**
* 编辑
* @param resources 文件信息
*/
void update(LocalStorage resources);
/**
* 多选删除
@ -63,5 +65,5 @@ public interface LocalStorageService {
* @param response /
* @throws IOException /
*/
void download(List<LocalStorageDTO> localStorageDtos, HttpServletResponse response) throws IOException;
}
void download(List<LocalStorageDto> localStorageDtos, HttpServletResponse response) throws IOException;
}

View File

@ -0,0 +1,75 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service;
import co.yixiang.tools.domain.Picture;
import co.yixiang.tools.service.dto.PictureDto;
import co.yixiang.common.service.BaseService;
import co.yixiang.tools.service.dto.PictureQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-05-13
*/
public interface PictureService extends BaseService<Picture>{
/**
* 查询数据分页
* @param criteria 条件
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(PictureQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<PictureDto>
*/
List<Picture> queryAll(PictureQueryCriteria criteria);
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<PictureDto> all, HttpServletResponse response) throws IOException;
/**
* 上传文件
* @param file /
* @param username /
* @return /
*/
Picture upload(MultipartFile file, String username);
/**
* 根据ID查询
* @param id /
* @return /
*/
Picture findById(Long id);
/**
* 多选删除
* @param ids /
*/
void deleteAll(Long[] ids);
/**
* 同步数据
*/
void synchronize();
}

View File

@ -1,8 +1,13 @@
package co.yixiang.service;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.QiniuConfig;
import co.yixiang.domain.QiniuContent;
import co.yixiang.service.dto.QiniuQueryCriteria;
*/
package co.yixiang.tools.service;
import co.yixiang.tools.domain.QiniuConfig;
import co.yixiang.tools.domain.QiniuContent;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
@ -11,7 +16,7 @@ import java.io.IOException;
import java.util.List;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-31
*/
public interface QiNiuService {

View File

@ -0,0 +1,48 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service;
import co.yixiang.common.service.BaseService;
import co.yixiang.tools.domain.QiniuConfig;
import co.yixiang.tools.service.dto.QiniuConfigDto;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-05-13
*/
public interface QiniuConfigService extends BaseService<QiniuConfig>{
/**
* 查询数据分页
* @param criteria 条件
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(QiniuQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<QiniuConfigDto>
*/
List<QiniuConfig> queryAll(QiniuQueryCriteria criteria);
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<QiniuConfigDto> all, HttpServletResponse response) throws IOException;
void update(String type);
}

View File

@ -0,0 +1,45 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service;
import co.yixiang.tools.service.dto.QiniuContentDto;
import co.yixiang.common.service.BaseService;
import co.yixiang.tools.domain.QiniuContent;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-05-13
*/
public interface QiniuContentService extends BaseService<QiniuContent>{
/**
* 查询数据分页
* @param criteria 条件
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(QiniuQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<QiniuContentDto>
*/
List<QiniuContent> queryAll(QiniuQueryCriteria criteria);
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<QiniuContentDto> all, HttpServletResponse response) throws IOException;
}

View File

@ -1,10 +1,15 @@
package co.yixiang.service;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.VerificationCode;
import co.yixiang.domain.vo.EmailVo;
*/
package co.yixiang.tools.service;
import co.yixiang.tools.domain.VerificationCode;
import co.yixiang.tools.domain.vo.EmailVo;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-26
*/
public interface VerificationCodeService {

View File

@ -1,16 +1,20 @@
package co.yixiang.service.dto;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author Zheng Jie
* @date 2019-09-05
* @author hupeng
* @date 2020-05-13
*/
@Data
public class LocalStorageDTO implements Serializable {
public class LocalStorageDto implements Serializable {
private Long id;
private String realName;
@ -26,4 +30,4 @@ public class LocalStorageDTO implements Serializable {
private String operate;
private Timestamp createTime;
}
}

View File

@ -1,14 +1,19 @@
package co.yixiang.service.dto;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
import co.yixiang.annotation.Query;
/**
* @author Zheng Jie
* @date 2019-09-05
* @author hupeng
* @date 2020-05-13
*/
@Data
public class LocalStorageQueryCriteria{
@ -18,4 +23,4 @@ public class LocalStorageQueryCriteria{
@Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime;
}
}

View File

@ -0,0 +1,48 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
public class PictureDto implements Serializable {
/** ID */
private Long id;
/** 上传日期 */
private Timestamp createTime;
/** 删除的URL */
private String deleteUrl;
/** 图片名称 */
private String filename;
/** 图片高度 */
private String height;
/** 图片大小 */
private String size;
/** 图片地址 */
private String url;
/** 用户名称 */
private String username;
/** 图片宽度 */
private String width;
/** 文件的MD5值 */
private String md5code;
}

View File

@ -0,0 +1,18 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.util.List;
import co.yixiang.annotation.Query;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
public class PictureQueryCriteria{
}

View File

@ -0,0 +1,38 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
public class QiniuConfigDto implements Serializable {
/** ID */
private Long id;
/** accessKey */
private String accessKey;
/** Bucket 识别符 */
private String bucket;
/** 外链域名 */
private String host;
/** secretKey */
private String secretKey;
/** 空间类型 */
private String type;
/** 机房 */
private String zone;
}

View File

@ -0,0 +1,18 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.util.List;
import co.yixiang.annotation.Query;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
public class QiniuConfigQueryCriteria{
}

View File

@ -0,0 +1,45 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
public class QiniuContentDto implements Serializable {
/** ID */
private Long id;
/** Bucket 识别符 */
private String bucket;
/** 文件名称 */
private String name;
/** 文件大小 */
private String size;
/** 文件类型:私有或公开 */
private String type;
/** 上传或同步的时间 */
private Timestamp updateTime;
/** 文件url */
private String url;
private String suffix;
public String getKey(){
return this.name;
}
}

View File

@ -0,0 +1,18 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import java.util.List;
import co.yixiang.annotation.Query;
/**
* @author hupeng
* @date 2020-05-13
*/
@Data
public class QiniuContentQueryCriteria{
}

View File

@ -1,4 +1,9 @@
package co.yixiang.service.dto;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.dto;
import lombok.Data;
import co.yixiang.annotation.Query;
@ -7,14 +12,14 @@ import java.sql.Timestamp;
import java.util.List;
/**
* @author Zheng Jie
* @author hupeng
* @date 2019-6-4 09:54:37
*/
@Data
public class QiniuQueryCriteria{
@Query(type = Query.Type.INNER_LIKE)
private String key;
private String name;
@Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime;

View File

@ -1,39 +1,39 @@
package co.yixiang.service.impl;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.AlipayConfig;
import co.yixiang.domain.vo.TradeVo;
*/
package co.yixiang.tools.service.impl;
import co.yixiang.tools.domain.AlipayConfig;
import co.yixiang.tools.domain.vo.TradeVo;
import co.yixiang.tools.service.AlipayConfigService;
import co.yixiang.tools.service.mapper.AlipayConfigMapper;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.exception.BadRequestException;
import co.yixiang.repository.AlipayRepository;
import co.yixiang.service.AlipayService;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import java.util.Optional;
/**
* @author Zheng Jie
* @date 2018-12-31
*/
* @author hupeng
* @date 2020-05-13
*/
@Service
@CacheConfig(cacheNames = "alipay")
@SuppressWarnings("all")
@AllArgsConstructor
//@CacheConfig(cacheNames = "alipayConfig")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class AlipayServiceImpl implements AlipayService {
private final AlipayRepository alipayRepository;
public AlipayServiceImpl(AlipayRepository alipayRepository) {
this.alipayRepository = alipayRepository;
}
public class AlipayConfigServiceImpl extends BaseServiceImpl<AlipayConfigMapper, AlipayConfig> implements AlipayConfigService {
@Override
public String toPayAsPc(AlipayConfig alipay, TradeVo trade) throws Exception {
@ -94,16 +94,16 @@ public class AlipayServiceImpl implements AlipayService {
}
@Override
@Cacheable(key = "'1'")
// @Cacheable(key = "'1'")
public AlipayConfig find() {
Optional<AlipayConfig> alipayConfig = alipayRepository.findById(1L);
return alipayConfig.orElseGet(AlipayConfig::new);
AlipayConfig alipayConfig = this.list().get(0);
return alipayConfig;
}
@Override
@CachePut(key = "'1'")
// @CachePut(key = "'1'")
@Transactional(rollbackFor = Exception.class)
public AlipayConfig update(AlipayConfig alipayConfig) {
return alipayRepository.save(alipayConfig);
public void update(AlipayConfig alipayConfig) {
this.save(alipayConfig);
}
}

View File

@ -1,40 +1,46 @@
package co.yixiang.service.impl;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.impl;
import cn.hutool.extra.mail.Mail;
import cn.hutool.extra.mail.MailAccount;
import co.yixiang.domain.EmailConfig;
import co.yixiang.domain.vo.EmailVo;
import co.yixiang.repository.EmailRepository;
import co.yixiang.service.EmailService;
import co.yixiang.tools.domain.EmailConfig;
import co.yixiang.tools.domain.vo.EmailVo;
import co.yixiang.tools.service.EmailConfigService;
import co.yixiang.tools.service.mapper.EmailConfigMapper;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.exception.BadRequestException;
import co.yixiang.utils.EncryptUtils;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import co.yixiang.utils.*;
import lombok.AllArgsConstructor;
import co.yixiang.dozer.service.IGenerator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
/**
* @author Zheng Jie
* @date 2018-12-26
*/
* @author hupeng
* @date 2020-05-13
*/
@Service
@CacheConfig(cacheNames = "email")
@AllArgsConstructor
//@CacheConfig(cacheNames = "emailConfig")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class EmailServiceImpl implements EmailService {
public class EmailConfigServiceImpl extends BaseServiceImpl<EmailConfigMapper, EmailConfig> implements EmailConfigService {
private final EmailRepository emailRepository;
public EmailServiceImpl(EmailRepository emailRepository) {
this.emailRepository = emailRepository;
}
private final IGenerator generator;
@Override
@CachePut(key = "'1'")
// @CachePut(key = "'1'")
@Transactional(rollbackFor = Exception.class)
public EmailConfig update(EmailConfig emailConfig, EmailConfig old) {
public void update(EmailConfig emailConfig, EmailConfig old) {
try {
if(!emailConfig.getPass().equals(old.getPass())){
// 对称加密
@ -43,14 +49,14 @@ public class EmailServiceImpl implements EmailService {
} catch (Exception e) {
e.printStackTrace();
}
return emailRepository.save(emailConfig);
this.save(emailConfig);
}
@Override
@Cacheable(key = "'1'")
// @Cacheable(key = "'1'")
public EmailConfig find() {
Optional<EmailConfig> emailConfig = emailRepository.findById(1L);
return emailConfig.orElseGet(EmailConfig::new);
EmailConfig emailConfig = this.list().get(0);
return emailConfig;
}
@Override

View File

@ -0,0 +1,139 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.impl;
import cn.hutool.core.util.ObjectUtil;
import co.yixiang.tools.domain.LocalStorage;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.exception.BadRequestException;
import co.yixiang.utils.*;
import co.yixiang.dozer.service.IGenerator;
import com.github.pagehelper.PageInfo;
import co.yixiang.common.utils.QueryHelpPlus;
import co.yixiang.tools.service.LocalStorageService;
import co.yixiang.tools.service.dto.LocalStorageDto;
import co.yixiang.tools.service.dto.LocalStorageQueryCriteria;
import co.yixiang.tools.service.mapper.LocalStorageMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @author hupeng
* @date 2020-05-13
*/
@Service
//@CacheConfig(cacheNames = "localStorage")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class LocalStorageServiceImpl extends BaseServiceImpl<LocalStorageMapper, LocalStorage> implements LocalStorageService {
private final IGenerator generator;
@Value("${file.path}")
private String path;
@Value("${file.maxSize}")
private long maxSize;
public LocalStorageServiceImpl(IGenerator generator) {
this.generator = generator;
}
@Override
//@Cacheable
public Map<String, Object> queryAll(LocalStorageQueryCriteria criteria, Pageable pageable) {
getPage(pageable);
PageInfo<LocalStorage> page = new PageInfo<>(baseMapper.selectList(QueryHelpPlus.getPredicate(LocalStorage.class, criteria)));
Map<String, Object> map = new LinkedHashMap<>(2);
map.put("content", generator.convert(page.getList(), LocalStorageDto.class));
map.put("totalElements", page.getTotal());
return map;
}
@Override
//@Cacheable
public List<LocalStorageDto> queryAll(LocalStorageQueryCriteria criteria){
return generator.convert(baseMapper.selectList(QueryHelpPlus.getPredicate(LocalStorage.class, criteria)),LocalStorageDto.class);
}
@Override
public LocalStorageDto findById(Long id) {
LocalStorage localStorage = this.getById(id);
return generator.convert(localStorage,LocalStorageDto.class);
}
@Override
public LocalStorageDto create(String name, MultipartFile multipartFile) {
FileUtil.checkSize(maxSize, multipartFile.getSize());
String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename());
String type = FileUtil.getFileType(suffix);
File file = FileUtil.upload(multipartFile, path + type + File.separator);
if(ObjectUtil.isNull(file)){
throw new BadRequestException("上传失败");
}
try {
name = StringUtils.isBlank(name) ? FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()) : name;
LocalStorage localStorage = new LocalStorage(
file.getName(),
name,
suffix,
file.getPath(),
type,
FileUtil.getSize(multipartFile.getSize()),
SecurityUtils.getUsername()
);
return generator.convert(localStorage,LocalStorageDto.class);
}catch (Exception e){
FileUtil.del(file);
throw e;
}
}
@Override
public void deleteAll(Long[] ids) {
for (Long id : ids) {
LocalStorage storage = this.getById(id);
FileUtil.del(storage.getPath());
this.removeById(id);
}
}
@Override
public void download(List<LocalStorageDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (LocalStorageDto localStorage : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("文件真实的名称", localStorage.getRealName());
map.put("文件名", localStorage.getName());
map.put("后缀", localStorage.getSuffix());
// map.put("路径", localStorage.getPath());
map.put("类型", localStorage.getType());
map.put("大小", localStorage.getSize());
map.put("操作人", localStorage.getOperate());
map.put("创建日期", localStorage.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

View File

@ -1,43 +1,61 @@
package co.yixiang.service.impl;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import co.yixiang.domain.Picture;
import co.yixiang.service.dto.PictureQueryCriteria;
import co.yixiang.utils.*;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import co.yixiang.repository.PictureRepository;
import co.yixiang.service.PictureService;
import co.yixiang.tools.domain.Picture;
import co.yixiang.tools.service.PictureService;
import co.yixiang.tools.service.dto.PictureDto;
import co.yixiang.tools.service.dto.PictureQueryCriteria;
import co.yixiang.tools.service.mapper.PictureMapper;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.exception.BadRequestException;
import co.yixiang.dozer.service.IGenerator;
import co.yixiang.utils.TranslatorUtil;
import co.yixiang.utils.ValidationUtil;
import co.yixiang.utils.YshopConstant;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import co.yixiang.common.utils.QueryHelpPlus;
import co.yixiang.utils.FileUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author Zheng Jie
* @date 2018-12-27
*/
@Slf4j
@Service(value = "pictureService")
@CacheConfig(cacheNames = "picture")
* @author hupeng
* @date 2020-05-13
*/
@Service
//@AllArgsConstructor
//@CacheConfig(cacheNames = "picture")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class PictureServiceImpl implements PictureService {
public class PictureServiceImpl extends BaseServiceImpl<PictureMapper, Picture> implements PictureService {
private final IGenerator generator;
@Value("${smms.token}")
private String token;
private final PictureRepository pictureRepository;
private static final String SUCCESS = "success";
@ -45,18 +63,46 @@ public class PictureServiceImpl implements PictureService {
private static final String MSG = "message";
public PictureServiceImpl(PictureRepository pictureRepository) {
this.pictureRepository = pictureRepository;
public PictureServiceImpl(IGenerator generator) {
this.generator = generator;
}
@Override
public Object queryAll(PictureQueryCriteria criteria, Pageable pageable){
return PageUtil.toPage(pictureRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable));
//@Cacheable
public Map<String, Object> queryAll(PictureQueryCriteria criteria, Pageable pageable) {
getPage(pageable);
PageInfo<Picture> page = new PageInfo<>(queryAll(criteria));
Map<String, Object> map = new LinkedHashMap<>(2);
map.put("content", generator.convert(page.getList(), PictureDto.class));
map.put("totalElements", page.getTotal());
return map;
}
@Override
public List<Picture> queryAll(PictureQueryCriteria criteria) {
return pictureRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
//@Cacheable
public List<Picture> queryAll(PictureQueryCriteria criteria){
return baseMapper.selectList(QueryHelpPlus.getPredicate(Picture.class, criteria));
}
@Override
public void download(List<PictureDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (PictureDto picture : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("上传日期", picture.getCreateTime());
map.put("删除的URL", picture.getDeleteUrl());
map.put("图片名称", picture.getFilename());
map.put("图片高度", picture.getHeight());
map.put("图片大小", picture.getSize());
map.put("图片地址", picture.getUrl());
map.put("用户名称", picture.getUsername());
map.put("图片宽度", picture.getWidth());
map.put("文件的MD5值", picture.getMd5code());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
@ -64,9 +110,9 @@ public class PictureServiceImpl implements PictureService {
public Picture upload(MultipartFile multipartFile, String username) {
File file = FileUtil.toFile(multipartFile);
// 验证是否重复上传
Picture picture = pictureRepository.findByMd5Code(FileUtil.getMd5(file));
Picture picture = this.getOne(new QueryWrapper<Picture>().eq("md5code",FileUtil.getMd5(file)));
if(picture != null){
return picture;
return picture;
}
HashMap<String, Object> paramMap = new HashMap<>(1);
paramMap.put("smfile", file);
@ -83,9 +129,9 @@ public class PictureServiceImpl implements PictureService {
picture = JSON.parseObject(jsonObject.get("data").toString(), Picture.class);
picture.setSize(FileUtil.getSize(Integer.parseInt(picture.getSize())));
picture.setUsername(username);
picture.setMd5Code(FileUtil.getMd5(file));
picture.setMd5code(FileUtil.getMd5(file));
picture.setFilename(FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename())+"."+FileUtil.getExtensionName(multipartFile.getOriginalFilename()));
pictureRepository.save(picture);
this.save(picture);
//删除临时文件
FileUtil.del(file);
return picture;
@ -94,7 +140,7 @@ public class PictureServiceImpl implements PictureService {
@Override
public Picture findById(Long id) {
Picture picture = pictureRepository.findById(id).orElseGet(Picture::new);
Picture picture = this.getById(id);
ValidationUtil.isNull(picture.getId(),"Picture","id",id);
return picture;
}
@ -104,10 +150,10 @@ public class PictureServiceImpl implements PictureService {
for (Long id : ids) {
Picture picture = findById(id);
try {
HttpUtil.get(picture.getDelete());
pictureRepository.delete(picture);
HttpUtil.get(picture.getDeleteUrl());
this.removeById(id);
} catch(Exception e){
pictureRepository.delete(picture);
this.removeById(id);
}
}
}
@ -123,30 +169,12 @@ public class PictureServiceImpl implements PictureService {
JSONObject jsonObject = JSONUtil.parseObj(result);
List<Picture> pictures = JSON.parseArray(jsonObject.get("data").toString(), Picture.class);
for (Picture picture : pictures) {
if(!pictureRepository.existsByUrl(picture.getUrl())){
if(this.getOne(new QueryWrapper<Picture>().eq("url",picture.getUrl()))==null){
picture.setSize(FileUtil.getSize(Integer.parseInt(picture.getSize())));
picture.setUsername("System Sync");
picture.setMd5Code("");
pictureRepository.save(picture);
picture.setMd5code("");
this.save(picture);
}
}
}
@Override
public void download(List<Picture> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Picture picture : queryAll) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("文件名", picture.getFilename());
map.put("图片地址", picture.getUrl());
map.put("文件大小", picture.getSize());
map.put("操作人", picture.getUsername());
map.put("高度", picture.getHeight());
map.put("宽度", picture.getWidth());
map.put("删除地址", picture.getDelete());
map.put("创建日期", picture.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

View File

@ -1,10 +1,20 @@
package co.yixiang.service.impl;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
import co.yixiang.domain.QiniuConfig;
import co.yixiang.domain.QiniuContent;
import co.yixiang.service.QiNiuService;
import co.yixiang.utils.QiNiuUtil;
*/
package co.yixiang.tools.service.impl;
import co.yixiang.tools.domain.QiniuConfig;
import co.yixiang.tools.domain.QiniuContent;
import co.yixiang.tools.service.QiNiuService;
import co.yixiang.tools.service.QiniuConfigService;
import co.yixiang.tools.service.QiniuContentService;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import co.yixiang.tools.utils.QiNiuUtil;
import co.yixiang.dozer.service.IGenerator;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
@ -13,19 +23,9 @@ import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import co.yixiang.repository.QiniuContentRepository;
import co.yixiang.service.dto.QiniuQueryCriteria;
import co.yixiang.exception.BadRequestException;
import co.yixiang.repository.QiNiuConfigRepository;
import co.yixiang.utils.FileUtil;
import co.yixiang.utils.PageUtil;
import co.yixiang.utils.QueryHelp;
import co.yixiang.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -36,46 +36,49 @@ import java.io.IOException;
import java.util.*;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-31
*/
@Service
@CacheConfig(cacheNames = "qiNiu")
//@CacheConfig(cacheNames = "qiNiu")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class QiNiuServiceImpl implements QiNiuService {
private final QiNiuConfigRepository qiNiuConfigRepository;
private final QiniuConfigService qiniuConfigService;
private final QiniuContentRepository qiniuContentRepository;
private final QiniuContentService qiniuContentService;
public QiNiuServiceImpl(QiNiuConfigRepository qiNiuConfigRepository, QiniuContentRepository qiniuContentRepository) {
this.qiNiuConfigRepository = qiNiuConfigRepository;
this.qiniuContentRepository = qiniuContentRepository;
}
private final IGenerator generator;
@Value("${qiniu.max-size}")
private Long maxSize;
public QiNiuServiceImpl(QiniuConfigService qiniuConfigService, QiniuContentService qiniuContentService, IGenerator generator) {
this.qiniuConfigService = qiniuConfigService;
this.qiniuContentService = qiniuContentService;
this.generator = generator;
}
@Override
@Cacheable
// @Cacheable
public Object queryAll(QiniuQueryCriteria criteria, Pageable pageable){
return PageUtil.toPage(qiniuContentRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable));
return qiniuContentService.queryAll(criteria,pageable);
}
@Override
public List<QiniuContent> queryAll(QiniuQueryCriteria criteria) {
return qiniuContentRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
return qiniuContentService.queryAll(criteria);
}
@Override
@Cacheable(key = "'1'")
// @Cacheable(key = "'1'")
public QiniuConfig find() {
Optional<QiniuConfig> qiniuConfig = qiNiuConfigRepository.findById(1L);
return qiniuConfig.orElseGet(QiniuConfig::new);
QiniuConfig qiniuConfig = qiniuConfigService.getById(1L);
return qiniuConfig;
}
@Override
@CachePut(cacheNames = "qiNiuConfig", key = "'1'")
// @CachePut(cacheNames = "qiNiuConfig", key = "'1'")
@Transactional(rollbackFor = Exception.class)
public QiniuConfig update(QiniuConfig qiniuConfig) {
String http = "http://", https = "https://";
@ -83,11 +86,12 @@ public class QiNiuServiceImpl implements QiNiuService {
throw new BadRequestException("外链域名必须以http://或者https://开头");
}
qiniuConfig.setId(1L);
return qiNiuConfigRepository.save(qiniuConfig);
qiniuConfigService.saveOrUpdate(qiniuConfig);
return qiniuConfig;
}
@Override
@CacheEvict(allEntries = true)
// @CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public QiniuContent upload(MultipartFile file, QiniuConfig qiniuConfig) {
FileUtil.checkSize(maxSize, file.getSize());
@ -101,7 +105,7 @@ public class QiNiuServiceImpl implements QiNiuService {
String upToken = auth.uploadToken(qiniuConfig.getBucket());
try {
String key = file.getOriginalFilename();
if(qiniuContentRepository.findByKey(key) != null) {
if(qiniuContentService.getOne(new QueryWrapper<QiniuContent>().eq("name",key)) != null) {
key = QiNiuUtil.getKey(key);
}
Response response = uploadManager.put(file.getBytes(), key, upToken);
@ -113,25 +117,25 @@ public class QiNiuServiceImpl implements QiNiuService {
qiniuContent.setSuffix(FileUtil.getExtensionName(putRet.key));
qiniuContent.setBucket(qiniuConfig.getBucket());
qiniuContent.setType(qiniuConfig.getType());
qiniuContent.setKey(FileUtil.getFileNameNoEx(putRet.key));
qiniuContent.setName(FileUtil.getFileNameNoEx(putRet.key));
qiniuContent.setUrl(qiniuConfig.getHost()+"/"+putRet.key);
qiniuContent.setSize(FileUtil.getSize(Integer.parseInt(file.getSize()+"")));
return qiniuContentRepository.save(qiniuContent);
qiniuContentService.save(qiniuContent);
return qiniuContent;
} catch (Exception e) {
throw new BadRequestException(e.getMessage());
}
}
@Override
@Cacheable
// @Cacheable
public QiniuContent findByContentId(Long id) {
QiniuContent qiniuContent = qiniuContentRepository.findById(id).orElseGet(QiniuContent::new);
ValidationUtil.isNull(qiniuContent.getId(),"QiniuContent", "id",id);
QiniuContent qiniuContent = qiniuContentService.getById(id);
return qiniuContent;
}
@Override
@Cacheable
// @Cacheable
public String download(QiniuContent content,QiniuConfig config){
String finalUrl;
String type = "公开";
@ -147,7 +151,7 @@ public class QiNiuServiceImpl implements QiNiuService {
}
@Override
@CacheEvict(allEntries = true)
// @CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void delete(QiniuContent content, QiniuConfig config) {
//构造一个带指定Zone对象的配置类
@ -155,15 +159,15 @@ public class QiNiuServiceImpl implements QiNiuService {
Auth auth = Auth.create(config.getAccessKey(), config.getSecretKey());
BucketManager bucketManager = new BucketManager(auth, cfg);
try {
bucketManager.delete(content.getBucket(), content.getKey() + "." + content.getSuffix());
qiniuContentRepository.delete(content);
bucketManager.delete(content.getBucket(), content.getName() + "." + content.getSuffix());
qiniuContentService.removeById(content.getId());
} catch (QiniuException ex) {
qiniuContentRepository.delete(content);
qiniuConfigService.removeById(content.getId());
}
}
@Override
@CacheEvict(allEntries = true)
// @CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void synchronize(QiniuConfig config) {
if(config.getId() == null){
@ -186,22 +190,23 @@ public class QiNiuServiceImpl implements QiNiuService {
QiniuContent qiniuContent;
FileInfo[] items = fileListIterator.next();
for (FileInfo item : items) {
if(qiniuContentRepository.findByKey(FileUtil.getFileNameNoEx(item.key)) == null){
if(qiniuContentService.getOne(new QueryWrapper<QiniuContent>().eq("name",FileUtil.getFileNameNoEx(item.key)))
== null){
qiniuContent = new QiniuContent();
qiniuContent.setSize(FileUtil.getSize(Integer.parseInt(item.fsize+"")));
qiniuContent.setSuffix(FileUtil.getExtensionName(item.key));
qiniuContent.setKey(FileUtil.getFileNameNoEx(item.key));
qiniuContent.setName(FileUtil.getFileNameNoEx(item.key));
qiniuContent.setType(config.getType());
qiniuContent.setBucket(config.getBucket());
qiniuContent.setUrl(config.getHost()+"/"+item.key);
qiniuContentRepository.save(qiniuContent);
qiniuContentService.save(qiniuContent);
}
}
}
}
@Override
@CacheEvict(allEntries = true)
// @CacheEvict(allEntries = true)
public void deleteAll(Long[] ids, QiniuConfig config) {
for (Long id : ids) {
delete(findByContentId(id), config);
@ -209,10 +214,10 @@ public class QiNiuServiceImpl implements QiNiuService {
}
@Override
@CacheEvict(allEntries = true)
// @CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void update(String type) {
qiNiuConfigRepository.update(type);
qiniuConfigService.update(type);
}
@Override
@ -220,7 +225,7 @@ public class QiNiuServiceImpl implements QiNiuService {
List<Map<String, Object>> list = new ArrayList<>();
for (QiniuContent content : queryAll) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("文件名", content.getKey());
map.put("文件名", content.getName());
map.put("文件类型", content.getSuffix());
map.put("空间名称", content.getBucket());
map.put("文件大小", content.getSize());

View File

@ -0,0 +1,87 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.impl;
import co.yixiang.tools.service.QiniuConfigService;
import co.yixiang.tools.domain.QiniuConfig;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import lombok.AllArgsConstructor;
import co.yixiang.dozer.service.IGenerator;
import com.github.pagehelper.PageInfo;
import co.yixiang.common.utils.QueryHelpPlus;
import co.yixiang.utils.FileUtil;
import co.yixiang.tools.service.dto.QiniuConfigDto;
import co.yixiang.tools.service.mapper.QiniuConfigMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @author hupeng
* @date 2020-05-13
*/
@Service
@AllArgsConstructor
//@CacheConfig(cacheNames = "qiniuConfig")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class QiniuConfigServiceImpl extends BaseServiceImpl<QiniuConfigMapper, QiniuConfig> implements QiniuConfigService {
private final IGenerator generator;
private final QiniuConfigMapper qiniuConfigMapper;
@Override
//@Cacheable
public Map<String, Object> queryAll(QiniuQueryCriteria criteria, Pageable pageable) {
getPage(pageable);
PageInfo<QiniuConfig> page = new PageInfo<>(queryAll(criteria));
Map<String, Object> map = new LinkedHashMap<>(2);
map.put("content", generator.convert(page.getList(), QiniuConfigDto.class));
map.put("totalElements", page.getTotal());
return map;
}
@Override
//@Cacheable
public List<QiniuConfig> queryAll(QiniuQueryCriteria criteria){
return baseMapper.selectList(QueryHelpPlus.getPredicate(QiniuConfig.class, criteria));
}
@Override
public void download(List<QiniuConfigDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (QiniuConfigDto qiniuConfig : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("accessKey", qiniuConfig.getAccessKey());
map.put("Bucket 识别符", qiniuConfig.getBucket());
map.put("外链域名", qiniuConfig.getHost());
map.put("secretKey", qiniuConfig.getSecretKey());
map.put("空间类型", qiniuConfig.getType());
map.put("机房", qiniuConfig.getZone());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public void update(String type) {
qiniuConfigMapper.updateType(type);
}
}

View File

@ -0,0 +1,82 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.impl;
import co.yixiang.tools.service.dto.QiniuContentDto;
import co.yixiang.tools.domain.QiniuContent;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.tools.service.dto.QiniuQueryCriteria;
import lombok.AllArgsConstructor;
import co.yixiang.dozer.service.IGenerator;
import com.github.pagehelper.PageInfo;
import co.yixiang.common.utils.QueryHelpPlus;
import co.yixiang.utils.FileUtil;
import co.yixiang.tools.service.QiniuContentService;
import co.yixiang.tools.service.mapper.QiniuContentMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @author hupeng
* @date 2020-05-13
*/
@Service
@AllArgsConstructor
//@CacheConfig(cacheNames = "qiniuContent")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class QiniuContentServiceImpl extends BaseServiceImpl<QiniuContentMapper, QiniuContent> implements QiniuContentService {
private final IGenerator generator;
@Override
//@Cacheable
public Map<String, Object> queryAll(QiniuQueryCriteria criteria, Pageable pageable) {
getPage(pageable);
PageInfo<QiniuContent> page = new PageInfo<>(queryAll(criteria));
Map<String, Object> map = new LinkedHashMap<>(2);
map.put("content", generator.convert(page.getList(), QiniuContentDto.class));
map.put("totalElements", page.getTotal());
return map;
}
@Override
//@Cacheable
public List<QiniuContent> queryAll(QiniuQueryCriteria criteria){
return baseMapper.selectList(QueryHelpPlus.getPredicate(QiniuContent.class, criteria));
}
@Override
public void download(List<QiniuContentDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (QiniuContentDto qiniuContent : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("Bucket 识别符", qiniuContent.getBucket());
map.put("文件名称", qiniuContent.getKey());
map.put("文件大小", qiniuContent.getSize());
map.put("文件类型:私有或公开", qiniuContent.getType());
map.put("上传或同步的时间", qiniuContent.getUpdateTime());
map.put("文件url", qiniuContent.getUrl());
map.put(" suffix", qiniuContent.getSuffix());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

View File

@ -1,4 +1,9 @@
package co.yixiang.service.impl;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.impl;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.RandomUtil;
@ -6,11 +11,13 @@ import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import co.yixiang.domain.VerificationCode;
import co.yixiang.domain.vo.EmailVo;
import co.yixiang.service.VerificationCodeService;
import co.yixiang.tools.domain.VerificationCode;
import co.yixiang.tools.domain.vo.EmailVo;
import co.yixiang.tools.service.VerificationCodeService;
import co.yixiang.tools.service.mapper.VerificationCodeMapper;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.exception.BadRequestException;
import co.yixiang.repository.VerificationCodeRepository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -19,28 +26,24 @@ import java.util.Collections;
import java.util.concurrent.*;
/**
* @author Zheng Jie
* @author hupeng
* @date 2018-12-26
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class VerificationCodeServiceImpl implements VerificationCodeService {
private final VerificationCodeRepository verificationCodeRepository;
public class VerificationCodeServiceImpl extends BaseServiceImpl<VerificationCodeMapper, VerificationCode> implements VerificationCodeService {
@Value("${code.expiration}")
private Integer expiration;
public VerificationCodeServiceImpl(VerificationCodeRepository verificationCodeRepository) {
this.verificationCodeRepository = verificationCodeRepository;
}
@Override
@Transactional(rollbackFor = Exception.class)
public EmailVo sendEmail(VerificationCode code) {
EmailVo emailVo;
String content;
VerificationCode verificationCode = verificationCodeRepository.findByScenesAndTypeAndValueAndStatusIsTrue(code.getScenes(),code.getType(),code.getValue());
VerificationCode verificationCode = this.getOne(new QueryWrapper<VerificationCode>()
.eq("scenes",code.getScenes()).eq("type",code.getType()).eq("value",code.getValue()));
// 如果不存在有效的验证码就创建一个新的
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
Template template = engine.getTemplate("email/email.ftl");
@ -48,7 +51,8 @@ public class VerificationCodeServiceImpl implements VerificationCodeService {
code.setCode(RandomUtil.randomNumbers (6));
content = template.render(Dict.create().set("code",code.getCode()));
emailVo = new EmailVo(Collections.singletonList(code.getValue()),"yshop后台管理系统",content);
timedDestruction(verificationCodeRepository.save(code));
this.save(code);
timedDestruction(code);
// 存在就再次发送原来的验证码
} else {
content = template.render(Dict.create().set("code",verificationCode.getCode()));
@ -59,12 +63,14 @@ public class VerificationCodeServiceImpl implements VerificationCodeService {
@Override
public void validated(VerificationCode code) {
VerificationCode verificationCode = verificationCodeRepository.findByScenesAndTypeAndValueAndStatusIsTrue(code.getScenes(),code.getType(),code.getValue());
VerificationCode verificationCode = this.getOne(new QueryWrapper<VerificationCode>()
.eq("scenes",code.getScenes()).eq("type",code.getType()).eq("value",code.getValue())
.eq("status",true));
if(verificationCode == null || !verificationCode.getCode().equals(code.getCode())){
throw new BadRequestException("无效验证码");
} else {
verificationCode.setStatus(false);
verificationCodeRepository.save(verificationCode);
this.save(verificationCode);
}
}
@ -78,7 +84,7 @@ public class VerificationCodeServiceImpl implements VerificationCodeService {
try {
executorService.schedule(() -> {
verifyCode.setStatus(false);
verificationCodeRepository.save(verifyCode);
this.save(verifyCode);
}, expiration * 60 * 1000L, TimeUnit.MILLISECONDS);
}catch (Exception e){
e.printStackTrace();

View File

@ -0,0 +1,21 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.tools.domain.AlipayConfig;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-13
*/
@Repository
@Mapper
public interface AlipayConfigMapper extends CoreMapper<AlipayConfig> {
}

View File

@ -0,0 +1,21 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.tools.domain.EmailConfig;
import co.yixiang.common.mapper.CoreMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-13
*/
@Repository
@Mapper
public interface EmailConfigMapper extends CoreMapper<EmailConfig> {
}

View File

@ -0,0 +1,21 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.tools.domain.LocalStorage;
import co.yixiang.common.mapper.CoreMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-13
*/
@Repository
@Mapper
public interface LocalStorageMapper extends CoreMapper<LocalStorage> {
}

View File

@ -0,0 +1,21 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.tools.domain.Picture;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-13
*/
@Repository
@Mapper
public interface PictureMapper extends CoreMapper<Picture> {
}

View File

@ -0,0 +1,26 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.tools.domain.QiniuConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-13
*/
@Repository
@Mapper
public interface QiniuConfigMapper extends CoreMapper<QiniuConfig> {
@Update("update qiniu_config set type = #{type} ")
void updateType(@Param("type") String type);
}

View File

@ -0,0 +1,21 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.tools.domain.QiniuContent;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-13
*/
@Repository
@Mapper
public interface QiniuContentMapper extends CoreMapper<QiniuContent> {
}

View File

@ -0,0 +1,18 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.service.mapper;
import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.tools.domain.VerificationCode;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface VerificationCodeMapper extends CoreMapper<VerificationCode> {
}

View File

@ -1,4 +1,9 @@
package co.yixiang.utils;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.utils;
/**
* 支付状态

View File

@ -1,8 +1,13 @@
package co.yixiang.utils;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.utils;
import co.yixiang.tools.domain.AlipayConfig;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import co.yixiang.domain.AlipayConfig;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;

View File

@ -1,4 +1,9 @@
package co.yixiang.utils;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;

View File

@ -1,5 +1,11 @@
package co.yixiang.utils;
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.tools.utils;
import co.yixiang.utils.FileUtil;
import com.qiniu.storage.Region;
import java.text.SimpleDateFormat;
@ -7,7 +13,7 @@ import java.util.Date;
/**
* 七牛云存储工具类
* @author Zheng Jie
* @author hupeng
* @date 2018-12-31
*/
public class QiNiuUtil {