second 2021年11月1日11:24:03

master
zhangmeng 2021-11-01 11:24:18 +08:00
parent 312073ed9f
commit 26cdee56a5
35 changed files with 2064 additions and 6 deletions

View File

@ -10,6 +10,18 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>mystyle-cloud-file</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
@ -41,5 +53,16 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
</dependency>
<dependency>
<groupId>com.zhangmeng</groupId>
<artifactId>mystyle-cloud-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@ -4,10 +4,17 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
/**
* @author zhangmeng
* @date 202111111:21:28
* @version 1.0
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@ComponentScan(basePackages = {"com.zhangmeng.model","com.zhangmeng.file"})
public class FileApplication {
public static void main(String[] args) {

View File

@ -1,20 +1,35 @@
package com.zhangmeng.file.controller;
import com.zhangmeng.file.feign.UserFeignService;
import com.zhangmeng.file.service.FileService;
import com.zhangmeng.model.base.baseController.BaseController;
import com.zhangmeng.model.entity.FileInfo;
import com.zhangmeng.model.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author zhangmeng
* @date 202111111:21:28
* @version 1.0
*/
@RestController
@RequestMapping("/file")
public class FileController {
public class FileController extends BaseController {
@Autowired
private UserFeignService userFeignService;
@GetMapping("/name")
public String file_name(String name){
return this.userFeignService.hi(name);
@Autowired
private FileService fileService;
@GetMapping("/list")
public Result list(){
List<FileInfo> all = this.fileService.findAll();
return this.success("查询成功",all);
}
}

View File

@ -0,0 +1,15 @@
package com.zhangmeng.file.dao;
import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
import com.zhangmeng.model.entity.FileInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
/**
* @author zhangmeng
* @version 1.0
* @date 20211809:46:19
*/
@Mapper
public interface FileInfoDao extends AbstractBaseMapper<FileInfo> {
}

View File

@ -0,0 +1,8 @@
package com.zhangmeng.file.service;
import com.zhangmeng.model.base.baseService.BaseService;
import com.zhangmeng.model.dto.File;
import com.zhangmeng.model.entity.FileInfo;
public interface FileService extends BaseService<FileInfo> {
}

View File

@ -0,0 +1,11 @@
package com.zhangmeng.file.service.impl;
import com.zhangmeng.file.service.FileService;
import com.zhangmeng.model.base.baseService.impl.AbstractBaseServiceImpl;
import com.zhangmeng.model.dto.File;
import com.zhangmeng.model.entity.FileInfo;
import org.springframework.stereotype.Service;
@Service
public class FileServiceImpl extends AbstractBaseServiceImpl<FileInfo> implements FileService {
}

View File

@ -0,0 +1,195 @@
package com.zhangmeng.file.utils;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.springframework.core.io.ClassPathResource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FastDfsClient {
static {
//从classpath下获取文件对象获取路径
String path = new ClassPathResource("fastDFS.config").getPath();
try {
ClientGlobal.init(path);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*
* @param file
* @return
*/
public static String[] upload(com.zhangmeng.model.dto.File file) {
try {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
//参数1 字节数组
//参数2 扩展名(不带点)
//参数3 元数据( 文件的大小,文件的作者,文件的创建时间戳)
NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())};
String[] strings = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
return strings;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
*
*
* @param groupName
* @param remoteFileName
* @return
*/
public static InputStream downFile(String groupName, String remoteFileName) {
ByteArrayInputStream byteArrayInputStream = null;
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//5.创建stroageserver 对象
//6.创建storageclient 对象
StorageClient storageClient = new StorageClient(trackerServer, null);
//7.根据组名 和 文件名 下载图片
//参数1:指定组名
//参数2 :指定远程的文件名
byte[] bytes = storageClient.download_file(groupName, remoteFileName);
byteArrayInputStream = new ByteArrayInputStream(bytes);
return byteArrayInputStream;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (byteArrayInputStream != null) {
byteArrayInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
*
*
* @param groupName
* @param remoteFileName
*/
public static void deleteFile(String groupName, String remoteFileName) {
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//5.创建stroageserver 对象
//6.创建storageclient 对象
StorageClient storageClient = new StorageClient(trackerServer, null);
int i = storageClient.delete_file(groupName, remoteFileName);
if (i == 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
//根据组名获取组的信息
public static StorageServer getStorages(String groupName) {
try {
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//参数1 指定traqckerserver 对象
//参数2 指定组名
StorageServer group1 = trackerClient.getStoreStorage(trackerServer, groupName);
return group1;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//根据文件名和组名获取文件的信息
public static FileInfo getFile(String groupName, String remoteFileName) {
try {
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
//参数1 指定组名
//参数2 指定文件的路径
FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName);
return fileInfo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
*
*
* @param groupName
* @param remoteFileName
* @return ServerInfo[]
*/
public static ServerInfo[] getServerInfo(String groupName, String remoteFileName) {
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
ServerInfo[] group1s = trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
return group1s;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* tracker ip
*
* @return
*/
public static String getTrackerUrl() {
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//tracker 的ip的信息
String hostString = trackerServer.getInetSocketAddress().getHostString();
int g_tracker_http_port = ClientGlobal.getG_tracker_http_port();
return "http://" + hostString + ":" + g_tracker_http_port;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

View File

@ -1,9 +1,23 @@
server:
port: 8763
spring:
application:
name: mystyle-cloud-file
datasource:
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/mystyle-blog?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database: mysql
hibernate:
ddl-auto: update
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
zipkin:
sender:
type: web
@ -16,4 +30,14 @@ spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server-addr: 127.0.0.1:8848
mybatis:
type-aliases-package: com.zhangmeng.domain.blog
configuration:
mapUnderscoreToCamelCase: true
default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
mapper:
style: normal
enum-as-simple-type: true
identity: MYSQL
check-example-entity-class: true

View File

@ -0,0 +1,5 @@
connect_timeout=60
network_timeout=60
charset=UTF-8
http.tracker_http_port=8081
tracker_server=192.168.52.165:22122

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mystyle-cloud-parent</artifactId>
<groupId>com.zhangmeng</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mystyle-cloud-model</artifactId>
<description>实体数据相关</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- 操作数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,31 @@
package com.zhangmeng.model.base.baseController;
import com.zhangmeng.model.vo.Result;
import com.zhangmeng.model.vo.StatusCode;
public class BaseController extends ResponseController {
protected Result success(){
return new Result(true, StatusCode.OK,"成功");
}
protected Result success(String message){
return new Result(true,StatusCode.OK,message);
}
protected Result success(String message,Object data){
return new Result(true,StatusCode.OK,message,data);
}
protected Result failure() {
return new Result(false,StatusCode.ERROR,"失败");
}
protected Result failure(String message) {
return new Result(false,StatusCode.ERROR,message);
}
protected Result failure(String message,Object data) {
return new Result(false,StatusCode.ERROR,message,data);
}
}

View File

@ -0,0 +1,5 @@
package com.zhangmeng.model.base.baseController;
public class ResponseController extends ResultController{
}

View File

@ -0,0 +1,59 @@
package com.zhangmeng.model.base.baseController;
import com.zhangmeng.model.vo.ResultTree;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;
public class ResultController {
protected HttpServletRequest request;
protected HttpServletResponse response;
protected HttpSession session;
@ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
this.session = request.getSession();
}
/**
*
* */
protected ModelAndView jumpPage(String path){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName(path);
return modelAndView;
}
/**
*
* */
public ModelAndView jumpPage(String path, Map<String,?> params){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName(path);
modelAndView.addAllObjects(params);
return modelAndView;
}
/**
* Describe: Tree
* Param data
* Return Tree
* */
protected static ResultTree dataTree(Object data){
ResultTree resuTree = new ResultTree();
resuTree.setData(data);
return resuTree;
}
}

View File

@ -0,0 +1,19 @@
package com.zhangmeng.model.base.baseDao;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.BaseMapper;
import tk.mybatis.mapper.common.ConditionMapper;
import tk.mybatis.mapper.common.ExampleMapper;
import tk.mybatis.mapper.common.IdsMapper;
/**
* @param <T>
* @author zhangmeng
* @version 1.0
* @date 2020111309:55:03
*/
@RegisterMapper
public interface AbstractBaseMapper<T extends BaseEntity<Long>> extends BaseMapper<T>, ConditionMapper<T>, InsertListMapper<T>, IdsMapper<T>, ExampleMapper<T> {
}

View File

@ -0,0 +1,9 @@
package com.zhangmeng.model.base.baseDao;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//数据访问层
public interface JpaDataAccessObject <T extends BaseEntity<Long>> extends JpaRepository<T, Long>, JpaSpecificationExecutor<T> {
}

View File

@ -0,0 +1,34 @@
package com.zhangmeng.model.base.baseEntity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author zhangmeng
* @version 1.0
* @date 2020111309:58:11
* @param <ID>
*/
@Data
@MappedSuperclass
@JsonIgnoreProperties(ignoreUnknown = true, value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
public class BaseEntity<ID extends Serializable> implements Serializable {
@Id //主键id
@GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
@Column(name="id")//数据库字段名
private ID id;
@Column(name = "addTime",length = 0)
private Date addTime = new Date();
@Column(name = "updateTime",length = 0)
private Date updateTime = new Date();
@Column(name = "deleteStatus")
private Boolean deleteStatus = false;
}

View File

@ -0,0 +1,70 @@
package com.zhangmeng.model.base.baseService;
import com.github.pagehelper.PageInfo;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import com.zhangmeng.model.dto.JpaQueryData;
import com.zhangmeng.model.dto.QueryParams;
import com.zhangmeng.model.dto.QueryResult;
import com.zhangmeng.model.dto.QuerySingleParams;
import com.zhangmeng.model.vo.Result;
import org.springframework.lang.NonNull;
import tk.mybatis.mapper.entity.Condition;
import java.util.List;
import java.util.Map;
/**
* @param <T>
* @author zhangmeng
* @version 1.0
* @date 2020111309:55:45
*/
public interface BaseService<T extends BaseEntity<Long>> {
public void save(T model);//持久化
public void save(List<T> models);//批量持久化
public void deleteById(Long id);//通过主鍵刪除
public void deleteByIds(String ids);//批量刪除 egids -> “1,2,3,4”
public void update(T model);//更新
public T findById(Long id);//通过ID查找
public List<T> findByObj(T t);
public List<T> findByIds(String ids);//通过多个ID查找//egids -> “1,2,3,4”
public List<T> findByCondition(Condition condition);//根据条件查找
public List<T> findAll();//获取所有
public List<T> findAll(QueryParams queryParams);
public List<Map<String, Object>> query(String sql);
public List<T> findByCondition(QueryParams queryParams);
public Integer selectCountByCondition(Condition condition);
public Integer selectCountEq(String key, Object value);
public PageInfo<T> findByCondition(QueryParams queryParams, boolean isPageInfo);
public List<T> findBySingleParams(@NonNull QuerySingleParams querySingleParams);
public List<T> findByParams(List<QuerySingleParams> querySingleParamsList);
public List<T> findByMapWithEq(Map<String, Object> map);
public Result<T> findByByConditionWithResult(QueryParams queryParams);
public QueryResult<T> findByCondition(QueryParams QueryParams, boolean isPageInfo, boolean isQueryResult);
public T jpa_findById(Long id);
public List<T> jpa_findByCondition(List<JpaQueryData> jpaQueryDataList);
}

View File

@ -0,0 +1,368 @@
package com.zhangmeng.model.base.baseService.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import com.zhangmeng.model.base.baseService.BaseService;
import com.zhangmeng.model.dto.JpaQueryData;
import com.zhangmeng.model.dto.QueryParams;
import com.zhangmeng.model.dto.QueryResult;
import com.zhangmeng.model.dto.QuerySingleParams;
import com.zhangmeng.model.vo.Result;
import com.zhangmeng.model.vo.StatusCode;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import org.springframework.jdbc.core.JdbcTemplate;
import tk.mybatis.mapper.entity.Condition;
import tk.mybatis.mapper.entity.Example;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @param <T>
* @author zhangmeng
* @version 1.0
* @date 2020111309:56:22
*/
public abstract class AbstractBaseServiceImpl<T extends BaseEntity<Long>> implements BaseService<T> {
@Autowired
private AbstractBaseMapper<T> baseDao;
@Autowired
private JdbcTemplate jdbcTemplate;
private final Class<T> modelClass;
@PersistenceContext
private EntityManager entityManager;
@SuppressWarnings("unchecked")
public AbstractBaseServiceImpl() {
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
modelClass = (Class<T>) pt.getActualTypeArguments()[0];
}
@Override
public void save(T model) {
this.baseDao.insert(model);
}
@Override
public void save(List<T> models) {
this.baseDao.insertList(models);
}
@Override
public void deleteById(Long id) {
this.baseDao.deleteByPrimaryKey(id);
}
@Override
public void deleteByIds(String ids) {
this.baseDao.deleteByIds(ids);
}
@Override
public void update(T model) {
this.baseDao.updateByPrimaryKeySelective(model);
}
@Override
public T findById(Long id) {
return this.baseDao.selectByPrimaryKey(id);
}
@Override
public List<T> findByIds(String ids) {
return this.baseDao.selectByIds(ids);
}
@Override
public List<T> findByCondition(Condition condition) {
return this.baseDao.selectByCondition(condition);
}
@Override
public List<T> findAll() {
return this.baseDao.selectAll();
}
@Override
public List<T> findAll(QueryParams queryParams) {
if (queryParams != null) {
PageHelper.startPage(queryParams.getPageNum(), queryParams.getPageSize(), queryParams.getOrderBy());
List<T> list = this.baseDao.selectAll();
PageInfo<T> pageInfo = new PageInfo<>(list);
return pageInfo.getList();
}
return null;
}
@Override
public List<Map<String, Object>> query(String sql) {
return this.jdbcTemplate.queryForList(sql);
}
@Override
public Integer selectCountByCondition(Condition condition) {
return this.baseDao.selectCountByCondition(condition);
}
@Override
public Integer selectCountEq(String key, Object value) {
Condition condition = new Condition(modelClass);
Example.Criteria criteria = condition.createCriteria();
criteria.andEqualTo(key, value);
return this.selectCountByCondition(condition);
}
@Override
@SuppressWarnings("unchecked")
public List<T> findByCondition(QueryParams QueryParams) {
return (List<T>) findByParams(QueryParams, false, false);
}
/**
*
*
* @param QueryParams
* @param isPageInfo
* @return obj
*/
@SuppressWarnings("unchecked")
public PageInfo<T> findByCondition(QueryParams QueryParams, boolean isPageInfo) {
return (PageInfo<T>) findByParams(QueryParams, isPageInfo, false);
}
@SuppressWarnings("unchecked")
public QueryResult<T> findByCondition(QueryParams QueryParams, boolean isPageInfo, boolean isQueryResult) {
return (QueryResult<T>) findByParams(QueryParams, isPageInfo, isQueryResult);
}
/**
*
*
* @return List<T>
*/
public List<T> findBySingleParams(QuerySingleParams querySingleParams) {
Condition condition = new Condition(modelClass);
Example.Criteria criteria = condition.createCriteria();
if (querySingleParams != null) {
String key = querySingleParams.getKey();
Object value = querySingleParams.getValue();
QuerySingleParams.Type type = querySingleParams.getType();
switch (type) {
case equal:
criteria.andEqualTo(key, value);
break;
case not_equal:
criteria.andNotEqualTo(key, value);
break;
case like:
criteria.andLike(key, "%" + value + "%");
break;
case not_like:
criteria.andNotLike(key, "%" + value + "%");
break;
}
}
return this.baseDao.selectByCondition(condition);
}
/**
*
*
* @return List<T>
*/
public List<T> findByParams(List<QuerySingleParams> querySingleParamsList) {
Condition condition = new Condition(modelClass);
Example.Criteria criteria = condition.createCriteria();
if (querySingleParamsList.size() > 0) {
for (QuerySingleParams querySingleParams : querySingleParamsList) {
if (querySingleParams != null) {
String key = querySingleParams.getKey();
Object value = querySingleParams.getValue();
QuerySingleParams.Type type = querySingleParams.getType();
switch (type) {
case equal:
criteria.andEqualTo(key, value);
break;
case not_equal:
criteria.andNotEqualTo(key, value);
break;
case like:
criteria.andLike(key, "%" + value + "%");
break;
case not_like:
criteria.andNotLike(key, "%" + value + "%");
break;
}
}
}
}
return this.baseDao.selectByCondition(condition);
}
public List<T> findByMapWithEq(Map<String, Object> map) {
Condition condition = new Condition(modelClass);
Example.Criteria criteria = condition.createCriteria();
criteria.andEqualTo(map);
return this.baseDao.selectByCondition(condition);
}
@Override
public List<T> findByObj(T t) {
return this.baseDao.select(t);
}
@Override
public Result<T> findByByConditionWithResult(QueryParams queryParams) {
PageInfo pageInfo = this.findByCondition(queryParams, true);
return new Result<>(true, StatusCode.OK, null, pageInfo.getTotal(), pageInfo.getList());
}
private Object findByParams(QueryParams QueryParams, boolean isPageInfo, boolean isQueryResult) {
PageInfo<T> pageInfo = null;
if (QueryParams.getPageNum() == null) {
QueryParams.setPageNum(1);
}
if (QueryParams.getPageSize() == null) {
QueryParams.setPageSize(10);
}
if (isNotNull(QueryParams.getOrderBy())) {
pageInfo = pageHelper(QueryParams.getPageNum(), QueryParams.getPageSize(), QueryParams.getOrderBy(), QueryParams.getCondition());
} else {
pageInfo = pageHelper(QueryParams.getPageNum(), QueryParams.getPageSize(), QueryParams.getCondition());
}
if (isQueryResult) {
return page_params_response(pageInfo);
}
if (isPageInfo) {
return pageInfo;
}
return pageInfo.getList();
}
/**
* @param pageNum
* @param pageSize
* @param condition
* @return object
*/
private PageInfo<T> pageHelper(Integer pageNum, Integer pageSize, Condition condition) {
PageHelper.startPage(pageNum, pageSize);
List<T> ts = this.baseDao.selectByCondition(condition);
return new PageInfo<>(ts);
}
/**
* @param pageNum
* @param pageSize
* @param orderBy
* @param condition
* @return object
*/
private PageInfo<T> pageHelper(Integer pageNum, Integer pageSize, String orderBy, Condition condition) {
PageHelper.startPage(pageNum, pageSize, orderBy);
List<T> ts = this.baseDao.selectByCondition(condition);
return new PageInfo<>(ts);
}
public T jpa_findById(Long id) {
SimpleJpaRepository<T, Long> jpaRepository = new SimpleJpaRepository<>(modelClass, entityManager);
return jpaRepository.getOne(id);
}
public List<T> jpa_findByCondition(List<JpaQueryData> jpaQueryDataList) {
SimpleJpaRepository<T, Long> jpaRepository = new SimpleJpaRepository<>(modelClass, entityManager);
Specification<T> spec = spec(jpaQueryDataList);
return jpaRepository.findAll(spec);
}
private Specification<T> spec(List<JpaQueryData> jpaQueryDataList) {
return new Specification<T>() {
/**
* @param root
* @param criteriaQuery select from order
* @param criteriaBuilder
* @return Predicate
*/
@SneakyThrows
@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> list = new ArrayList<>();
if (jpaQueryDataList.size() > 0) {
for (JpaQueryData jpaQueryData : jpaQueryDataList) {
String key = jpaQueryData.getKey();
Object value = jpaQueryData.getValue();
JpaQueryData.Condition condition = jpaQueryData.getCondition();
switch (condition) {
case like:
list.add(criteriaBuilder.like(root.get(key), "%" + value + "%"));
break;
case equal:
list.add(criteriaBuilder.equal(root.get(key), value));
break;
case between:
JpaQueryData.Between between = jpaQueryData.getBetween();
Object var1 = between.getVar1();
Object var2 = between.getVar2();
if (var1 instanceof String) {
list.add(criteriaBuilder.between(root.get(key), var1.toString(), var2.toString()));
} else if (var1 instanceof Date) {
list.add(criteriaBuilder.between(root.get(key), (Date) var1, (Date) var2));
}
break;
}
}
Predicate[] arr = new Predicate[list.size()];
return criteriaBuilder.and(list.toArray(arr));
}
return null;
}
};
}
public static boolean isNotNull(Object object) {
return object != null && !"".equals(object);
}
public static <T> QueryResult<T> page_params_response(PageInfo<T> pageInfo) {
QueryResult<T> queryResult = new QueryResult<>();
queryResult.setPageNum(pageInfo.getPageNum());
queryResult.setPageSize(pageInfo.getPageSize());
if (pageInfo.getPrePage() == 0 ){
queryResult.setPrevPage(1);
}else {
queryResult.setPrevPage(pageInfo.getPrePage());
}
if (pageInfo.getNextPage() == 0 ){
queryResult.setNextPage(1);
}else {
queryResult.setNextPage(pageInfo.getNextPage());
}
queryResult.setList(pageInfo.getList());
queryResult.setCount(pageInfo.getTotal());
return queryResult;
}
}

View File

@ -0,0 +1,18 @@
package com.zhangmeng.model.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class File implements Serializable {
private String author;
private String name;
private byte[] content;
private String ext;
}

View File

@ -0,0 +1,53 @@
package com.zhangmeng.model.dto;
import lombok.Data;
import java.io.Serializable;
/**
* jpa
*
* @author zhangmeng
* @version 1.0
* @date 202161714:33:52
*/
@Data
public class JpaQueryData implements Serializable {
public enum Condition {
between,
like,
equal;
}
private String key; //字段
private Object value; //值
private Condition condition; //条件
private Between between;
public static class Between {
private Object var1;
private Object var2;
public Object getVar1() {
return var1;
}
public void setVar1(Object var1) {
this.var1 = var1;
}
public Object getVar2() {
return var2;
}
public void setVar2(Object var2) {
this.var2 = var2;
}
}
}

View File

@ -0,0 +1,64 @@
package com.zhangmeng.model.dto;
import lombok.Data;
import tk.mybatis.mapper.entity.Condition;
import java.io.Serializable;
@Data
public class QueryParams implements Serializable {
private Integer pageNum;
private Integer pageSize;
private Condition condition;
private String orderBy;
public QueryParams(){
}
/**
*
* @param pageNum
* @param pageSize
* @param orderBy
*/
public QueryParams(Integer pageNum, Integer pageSize, String orderBy) {
this.pageNum = pageNum;
this.pageSize = pageSize;
this.orderBy = orderBy;
}
public QueryParams(Condition condition) {
this.condition = condition;
}
/**
*
* @param pageNum
* @param pageSize
* @param condition
*/
public QueryParams(Integer pageNum, Integer pageSize, Condition condition) {
this.pageNum = pageNum;
this.pageSize = pageSize;
this.condition = condition;
}
/**
*
* @param pageNum
* @param pageSize
* @param condition
* @param orderBy
*/
public QueryParams(Integer pageNum, Integer pageSize, Condition condition, String orderBy) {
this.pageNum = pageNum;
this.pageSize = pageSize;
this.condition = condition;
this.orderBy = orderBy;
}
}

View File

@ -0,0 +1,24 @@
package com.zhangmeng.model.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class QueryResult<T> implements Serializable {
private Integer pageNum;
private Integer pageSize;
private Integer prevPage;
private Integer nextPage;
private List<T> list;
private Long count;
private Object extend;//扩展参数
}

View File

@ -0,0 +1,40 @@
package com.zhangmeng.model.dto;
import lombok.Data;
import java.io.Serializable;
/**
*
*/
@Data
public class QuerySingleParams implements Serializable {
public enum Type{
equal,
not_equal,
not_like,
like;
}
private String key;
private Object value;
private Type type;
private String orderBy;
public QuerySingleParams(String key, Object value, Type type) {
this.key = key;
this.value = value;
this.type = type;
}
public QuerySingleParams(String key, Object value, Type type, String orderBy) {
this.key = key;
this.value = value;
this.type = type;
this.orderBy = orderBy;
}
}

View File

@ -0,0 +1,9 @@
package com.zhangmeng.model.dto;
/**
* @author
* @version 1.0
* @date 2021/9/8 22:23
*/
public class RequestData {
}

View File

@ -0,0 +1,150 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @author zhengmeng
* @version 1.0
* @date 20211717:44:40
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "file_info")
public class FileInfo extends BaseEntity<Long> {
/**
*
*/
public enum StorageType{
LocalStorage("本地"),
FastDFS("fastDFS");
/**
*
*/
private String description;
private StorageType(String description) {
this.description = description;
}
public String getDesc() {
return description;
}
public void setDesc(String description) {
this.description = description;
}
}
/**
*
*/
public enum UploadType {
images("图片"),
video("视频"),
audio("视频");
/**
*
*/
private String description;
private UploadType(String description) {
this.description = description;
}
public String getDesc() {
return description;
}
public void setDesc(String description) {
this.description = description;
}
}
/**
*
*/
public enum FileType {
jpeg("图片"),
jpg("图片"),
png("图片"),
bmp("图片"),
gif("图片"),
svg("图片"),
mp4("视频"),
avi("视频"),
flv("视频");
/**
*
*/
private String description;
private FileType(String description) {
this.description = description;
}
public String getDesc() {
return description;
}
public void setDesc(String description) {
this.description = description;
}
}
private UploadType uploadType;//上传类型
private StorageType storageType;
private String path;//上传的路径
private String fullPath;//上传的真实全路径
private Integer imageWidth;//上传图片的宽度
private Integer imageHeight;//上传图片的高度
private String videoImages;//视频的封面
private Integer videoImagesWidth;//视频封面的宽
private Integer videoImagesHeight;//视频封面的高
private Long duration;//时长
private String fileTypeString;//文件格式字符传
private FileType fileType;
private Long size;//文件的大小
private String fileSize;//文件大小
private String md5;//md5
private String originalFileName;
private String name;
private String ext;//文件扩展名
private String author;//文件创建作者
private Long user_id;
private Long image_info_expand_id;
}

View File

@ -0,0 +1,99 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zhengmeng
* @version 1.0
* @date 20211711:38:42
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "permission")
public class Permission extends BaseEntity<Long> {
public enum Status{
show("显示"),
hidden("隐藏");
private String description;//描述
Status(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
public enum Type{
CATALOG("目录"),
MENU("菜单"),
BUTTON("按钮");
private String description;//描述
Type(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static List<Map<String,Object>> valueListMap(){
Type[] values = Type.values();
List<Map<String, Object>> list = new ArrayList<>();
for (Type value : values) {
Map<String, Object> map = new HashMap<>();
String description = value.getDescription();
map.put("description",description);
map.put("value",value);
list.add(map);
}
return list;
}
}
private String title;
private Type type;
private String href;
private String openType;
private Long parent_id;
private String icon;
private String code;
private String checkArr = "0";
private Integer sort;
}

View File

@ -0,0 +1,108 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zhengmeng
* @version 1.0
* @date 20211717:44:40
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "role")
public class Role extends BaseEntity<Long> {
public enum Type {
Super_Administrator("超级管理员") ,//超级管理员
Administrator("管理员"),//管理员
User("用户");//用户
private String description;//描述
Type(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static List<Map<String,Object>> enumListMap(){
Type[] values = Type.values();
List<Map<String, Object>> list = new ArrayList<>();
for (Type value : values) {
Map<String, Object> map = new HashMap<>();
String description = value.getDescription();
map.put("description",description);
map.put("value",value);
list.add(map);
}
return list;
}
}
public enum Status {
Enable("开启") ,
DisEnable("关闭");
private String description;//描述
Status(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static List<Map<String,Object>> enumListMap(){
Status[] values = Status.values();
List<Map<String, Object>> list = new ArrayList<>();
for (Status value : values) {
Map<String, Object> map = new HashMap<>();
String description = value.getDescription();
map.put("description",description);
map.put("value",value);
list.add(map);
}
return list;
}
}
private String roleName;
private String roleCode;
private Status status;
private String description;
private Type type;
private Long createUserId;
}

View File

@ -0,0 +1,26 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @author zhengmeng
* @version 1.0
* @date 20211711:38:42
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "role_permission")
public class RolePermission extends BaseEntity<Long> {
private Long role_id;
private Long permission_id;
}

View File

@ -0,0 +1,125 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.*;
/**
* @author zhengmeng
* @version 1.0
* @date 20211711:38:42
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "user")
public class User extends BaseEntity<Long> {
public enum Status {
DISABLED("已停用"),
VALID("正常"),
LOCKED("锁定");
Status(String description) {
this.description = description;
}
private String description;//描述
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static List<Map<String,Object>> enumListMap(){
Status[] values = Status.values();
List<Map<String, Object>> list = new ArrayList<>();
for (Status value : values) {
Map<String, Object> map = new HashMap<>();
String description = value.getDescription();
map.put("description",description);
map.put("value",value);
list.add(map);
}
return list;
}
}
public enum Gender {
male("男"),
female("女");
Gender(String description) {
this.description = description;
}
private String description;//描述
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static List<Map<String,Object>> enumListMap(){
Gender[] values = Gender.values();
List<Map<String, Object>> list = new ArrayList<>();
for (Gender value : values) {
Map<String, Object> map = new HashMap<>();
String description = value.getDescription();
map.put("description",description);
map.put("value",value);
list.add(map);
}
return list;
}
}
private String username;
private String password;
private Status status;
@Column(columnDefinition = "longtext")
private String sign;
private String avatar;
private String email;
private String name;//姓名
private String nickname;//昵称
private String profession;//职业
private String qq;
private String telephone;
private Date birthday;
private Gender gender;//性别
private String remarks;//备注
private Role.Type roleType;//角色类型
private Long photo_id;
}

View File

@ -0,0 +1,27 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @author zhengmeng
* @version 1.0
* @date 20211711:38:42
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "user_role")
public class UserRole extends BaseEntity<Long> {
private Long user_id;
private Long role_id;
}

View File

@ -0,0 +1,93 @@
package com.zhangmeng.model.entity;
import com.zhangmeng.model.base.baseEntity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
*
*
* @author zhangmeng
* @version 1.0
* @date 2021/4/1 21:29
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "verification_code")
public class VerificationCode extends BaseEntity<Long> {
/**
*
*/
public enum Type{
/**
*
*/
mobile("手机"),
/**
*
*/
pc("web");
Type(String description) {
this.description = description;
}
//描述
private String description;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
/**
*
*/
public enum Status{
/**
*
*/
login("登录"),
/**
*
*/
register("注册");
Status(String description) {
this.description = description;
}
private String description;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
private Type type;
private Status status;
private String code;
private String telephone;
}

View File

@ -0,0 +1,117 @@
package com.zhangmeng.model.vo;
import java.io.Serializable;
/**
* @author zhangmeng
* @version 1.0
* @date 2020111309:59:13
*
*/
public class Result<T> implements Serializable {
private static final long serialVersionUID = -212536912267261005L;
/**
*
*/
private boolean flag;
/**
*
*/
private Integer code;
/**
*
*/
private String message;
private long count;
/**
*
*/
private T data;
public static Result error(String message) {
return new Result(false,StatusCode.ERROR,message);
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public Result() {
}
public Result(boolean flag, Integer code) {
this.flag = flag;
this.code = code;
}
public Result(boolean flag, Integer code, String message) {
this.flag = flag;
this.code = code;
this.message = message;
}
public Result(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = (T)data;
}
public Result(boolean flag, Integer code, String message, Object data) {
this.flag = flag;
this.code = code;
this.message = message;
this.data = (T) data;
}
public Result(boolean flag, Integer code, String message, long count, Object data){
this.flag = flag;
this.code = code;
this.message = message;
this.data = (T)data;
this.count = count;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(Object data) {
this.data = (T)data;
}
}

View File

@ -0,0 +1,29 @@
package com.zhangmeng.model.vo;
import lombok.Data;
@Data
public class ResultTree {
/**
*
* */
private Status status = new Status();
/**
*
* */
private Object data;
/**
*
* */
@Data
public static class Status{
private Integer code = 200;
private String message = "默认";
}
}

View File

@ -0,0 +1,66 @@
package com.zhangmeng.model.vo;
import java.io.Serializable;
/**
* @author zhangmeng
* @version 1.0
* @date 2020111309:59:37
*/
public class StatusCode implements Serializable {
/**
*
*/
public static final int OK = 2001;
/**
*
*/
public static final int ERROR = 1001;
/**
*
*/
public static final int FILE_UPLOAD_SUCCESS = 3001;
/**
*
*/
public static final int FILE_UPLOAD_ERROR = 3002;
/**
* exist
*/
public static final int FILE_UPLOAD_EXIST = 3003;
/**
* register
*/
public static final int FILE_UPLOAD_REGISTER = 3004;
/**
* !
*/
public static final int BODY_NOT_MATCH = 4000;
/**
* !
*/
public static final int SIGNATURE_NOT_MATCH = 4001;
/**
*
*/
public static final int NOT_FOUND = 4004;
/**
* !
*/
public static final int INTERNAL_SERVER_ERROR= 5000;
/**
* !
*/
public static final int SERVER_BUSY = 5003;
}

40
pom.xml
View File

@ -8,10 +8,23 @@
<artifactId>mystyle-cloud-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>mystyle-cloud-user</module>
<module>mystyle-cloud-file</module>
<module>mystyle-cloud-gateway</module>
<module>mystyle-cloud-model</module>
</modules>
<properties>
@ -19,6 +32,10 @@
<spring-boot.version>2.4.4</spring-boot.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
<spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
<tk.mapper.version>2.1.5</tk.mapper.version>
<pagehelper.version>1.3.0</pagehelper.version>
<fastdfs-client-java.version>1.27.0.0</fastdfs-client-java.version>
<jackson.version>2.9.7</jackson.version>
</properties>
<dependencyManagement>
@ -47,6 +64,29 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${tk.mapper.version}</version>
</dependency>
<!--分页-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>${fastdfs-client-java.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>