!8 Mongodb 文件管理等api

Merge pull request !8 from William Hu/7.0.2-develop
pull/8/MERGE
stylefeng 2021-04-13 11:03:28 +08:00 committed by Gitee
commit 21922ee80e
26 changed files with 1013 additions and 0 deletions

View File

@ -0,0 +1,65 @@
# Mongodb模块
## GridFS文件管理
### 部署的sql并为角色配置菜单
```sql
INSERT INTO guns.sys_menu (menu_id, menu_parent_id, menu_pids, menu_name, menu_code, app_code, visible, menu_sort, status_flag, remark, layui_path, layui_icon, antdv_router, antdv_icon, antdv_component, antdv_link_open_type, antdv_link_url, del_flag, create_time, create_user, update_time, update_user) VALUES(1377141796257218561, 1339550467939639317, '[-1],[1339550467939639317],', 'Mongodb 文件存储', 'mongo_file', 'system', 'Y', 1000.00, 1, NULL, '/view/mongodb/file', 'layui-icon-star-fill', NULL, 'icon-default', NULL, 0, NULL, 'N', '2021-03-31 14:12:45', 1339550467939639299, NULL, NULL);
```
### application.yml添加mongodb配置
```yml
spring:
data:
mongodb:
uri: mongodb://localhost:8002
database: test
```
### SpringBoot启动类上添加配置
```java
@EnableMongoRepositories(basePackages = {"cn.stylefeng.roses.kernel.mongodb.file.mapper"})
```
### 添加GridFSBucket配置类
```java
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author huziyang
* @create 2021-03-26 17:28
*/
@Configuration
public class MongodbConfig {
@Value("${spring.data.mongodb.database}")
String db;
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase mongoDatabase = mongoClient.getDatabase(db);
return GridFSBuckets.create(mongoDatabase);
}
}
```
### pom中引用工作流的依赖
```xml
<!--mongodb文件管理的配置-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>mongodb-integration-beetl</artifactId>
<version>7.0.2</version>
</dependency>
```

View File

@ -0,0 +1,34 @@
<?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>kernel-d-mongodb</artifactId>
<groupId>cn.stylefeng.roses</groupId>
<version>7.0.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mongodb-api</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--文件对象使用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--查询流程信息,需要用到分页相关类-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>db-api</artifactId>
<version>7.0.2</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,43 @@
package cn.stylefeng.roses.kernel.mongodb.api;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import org.springframework.web.multipart.MultipartFile;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-30 11:06
*/
public interface MongoFileApi<T,ID> {
/**
*
* @param file
* @return
*/
T saveFile(MultipartFile file);
/**
*
* @param id
*/
void removeFile(ID id);
/**
* id
* @param id
* @return
*/
Optional<T> getFileById(ID id);
/**
*
* @param fileDocument
* @return
*/
PageResult<T> getFilesByPage(T fileDocument);
}

View File

@ -0,0 +1,46 @@
package cn.stylefeng.roses.kernel.mongodb.api;
import java.util.List;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
public interface MongodbApi<T,ID> {
/**
*
* @param gunsMapEntity
* @return
*/
T insert(T gunsMapEntity);
/**
*
* @param gunsMapEntity
* @return
*/
T update(T gunsMapEntity);
/**
* id
* @param id
*/
void deleteById(ID id);
/**
* id
* @param id
* @return
*/
Optional<T> findById(ID id);
/**
*
* @return
*/
List<T> findAll();
}

View File

@ -0,0 +1,19 @@
package cn.stylefeng.roses.kernel.mongodb.api.constants;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
public interface MongodbConstants {
/**
* mongodb
*/
String MONGODB_MODULE_NAME = "kernel-d-mongodb";
/**
*
*/
String MONGODB_EXCEPTION_STEP_CODE = "70";
}

View File

@ -0,0 +1,19 @@
package cn.stylefeng.roses.kernel.mongodb.api.exception;
import cn.stylefeng.roses.kernel.mongodb.api.constants.MongodbConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
/**
*
*
* @author fengshuonan
* @date 2021/13/17 23:59
*/
public class MongodbException extends ServiceException {
public MongodbException(AbstractExceptionEnum exception) {
super(MongodbConstants.MONGODB_MODULE_NAME, exception);
}
}

View File

@ -0,0 +1,36 @@
<?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>kernel-d-mongodb</artifactId>
<groupId>cn.stylefeng.roses</groupId>
<version>7.0.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mongodb-integration-beetl</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--资源api模块-->
<!--用在资源控制器,资源扫描上-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>scanner-api</artifactId>
<version>7.0.2</version>
</dependency>
<!--Mongodb file自动配置-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>mongodb-spring-boot-starter</artifactId>
<version>7.0.2</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,21 @@
package cn.stylefeng.roses.kernel.mongodb.integration.controller;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import org.springframework.stereotype.Controller;
/**
* @author huziyang
* @create 2021-03-30 15:21
*/
@Controller
@ApiResource(name = "MongoDB文件管理界面渲染控制器")
public class ModelViewController {
@GetResource(name = "Mongodb文件列表视图", path = "/view/mongodb/file")
public String mongodbFile() {
return "/modular/mongodb/fileList.html";
}
}

View File

@ -0,0 +1,63 @@
package cn.stylefeng.roses.kernel.mongodb.integration.controller;
import cn.stylefeng.roses.kernel.mongodb.api.MongoFileApi;
import cn.stylefeng.roses.kernel.mongodb.file.entity.MongoFileEntity;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-31 17:28
*/
@RestController
@ApiResource(name = "Mongodb文件接口控制器")
public class MongoFileController {
@Resource
private MongoFileApi<MongoFileEntity,String> mongoFileApi;
@PostResource(name = "Mongodb文件新增", path = "/view/mongodb/file/add")
public ResponseData mongodbFileAdd(@RequestPart("file") MultipartFile file) {
return new SuccessResponseData(mongoFileApi.saveFile(file));
}
@PostResource(name = "Mongodb文件删除", path = "/view/mongodb/file/del")
public ResponseData mongodbFileDel(@RequestParam String id) {
mongoFileApi.removeFile(id);
return new SuccessResponseData();
}
@GetResource(name = "Mongodb文件列表", path = "/view/mongodb/file/list")
public ResponseData mongodbFileList(MongoFileEntity mongoFileEntity) {
return new SuccessResponseData(mongoFileApi.getFilesByPage(mongoFileEntity));
}
@GetResource(name = "Mongodb文件下载", path = "/view/mongodb/file/down")
public ResponseEntity mongodbFileDown(@RequestParam String id) throws UnsupportedEncodingException {
Optional<MongoFileEntity> file = mongoFileApi.getFileById(id);
if(file.isPresent()){
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; fileName=" + URLEncoder.encode(file.get().getName() , "utf-8"))
.header(HttpHeaders.CONTENT_TYPE, "application/octet-stream")
.body(file.get().getContent());
}else {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("not found");
}
}
}

View File

@ -0,0 +1,99 @@
layui.use(['table', 'form', 'func', 'HttpRequest', 'util', 'upload'], function () {
var $ = layui.$;
var table = layui.table;
var form = layui.form;
var func = layui.func;
var HttpRequest = layui.HttpRequest;
var util = layui.util;
var upload = layui.upload;
// 模型设计管理
var MongoFile = {
tableId: "fileList"
};
// 初始化表格的列
MongoFile.initColumn = function () {
return [[
{type: 'checkbox'},
{field: 'id', title: '文件编号', width: 200},
{field: 'name', title: '文件名称', width: 200},
{field: 'uploadUserId', title: '创建人编号'},
{field: 'uploadDate', title: '创建日期'},
{align: 'center', toolbar: '#tableBar', title: '操作', width: 250}
]];
};
// 点击查询按钮
MongoFile.search = function () {
var queryData = {};
queryData['name'] = $("#fileName").val();
table.reload(MongoFile.tableId, {
where: queryData,
page: {curr: 1}
});
};
// 点击删除
MongoFile.delete = function (data) {
var operation = function () {
var httpRequest = new HttpRequest(Feng.ctxPath + "/view/mongodb/file/del?id="+data.id, 'post', function (data) {
Feng.success("删除成功!");
table.reload(MongoFile.tableId);
}, function (data) {
Feng.error("删除失败!" + data.message + "!");
});
httpRequest.set(data);
httpRequest.start(true);
};
Feng.confirm("是否删除文件" + data.name + "?", operation);
};
// 渲染表格
var tableResult = table.render({
elem: '#' + MongoFile.tableId,
url: Feng.ctxPath + '/view/mongodb/file/list',
page: true,
request: {pageName: 'pageNo', limitName: 'pageSize'},
height: "full-158",
cellMinWidth: 100,
cols: MongoFile.initColumn(),
parseData: Feng.parseData
});
// 搜索按钮点击事件
$('#btnSearch').click(function () {
MongoFile.search();
});
// 上传文件的点击事件
upload.render({
elem: '#modelUpload',
url: Feng.ctxPath + '/view/mongodb/file/add',
accept: 'file',
size: 10000, // 单位kb
done: function (res) {
Feng.success("上传文件成功!");
MongoFile.search();
},
error: function (err) {
Feng.error("上传文件失败!" + err.message);
}
});
// 工具条点击事件
table.on('tool(' + MongoFile.tableId + ')', function (obj) {
var data = obj.data;
var event = obj.event;
if (event === 'down') {
window.open(Feng.ctxPath + '/view/mongodb/file/down?id=' + data.id);
} else if (event === 'delete') {
MongoFile.delete(data);
}
});
});

View File

@ -0,0 +1,35 @@
@layout("/layout/_container.html",{js:["/assets/modular/mongodb/fileList.js"]}){
<div class="layui-body-header">
<span class="layui-body-header-title">Mongodb文件存储</span>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-form toolbar">
<div class="layui-form-item">
<div class="layui-inline">
<input id="fileName" class="layui-input" type="text" placeholder="文件名称"/>
</div>
<div class="layui-inline">
<button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
<button id="modelUpload" class="layui-btn icon-btn"><i class="layui-icon">&#xe681;</i>上传文件</button>
</div>
</div>
</div>
<table class="layui-table" id="fileList" lay-filter="fileList"></table>
</div>
</div>
</div>
</div>
</div>
<script type="text/html" id="tableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="down">下载</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">删除</a>
</script>
@}

View File

@ -0,0 +1,45 @@
<?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>kernel-d-mongodb</artifactId>
<groupId>cn.stylefeng.roses</groupId>
<version>7.0.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mongodb-sdk-file</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--auth模块的api-->
<!--记录日志时候有可能需要记录当前登录用户id-->
<!--如果不要记录当前登录用户id时就不用本模块所以optional=true-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>auth-api</artifactId>
<version>7.0.2</version>
<optional>true</optional>
</dependency>
<!--MongoDB模块的api-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>mongodb-api</artifactId>
<version>7.0.2</version>
</dependency>
<!--SpringBoot 与 MongoDB 整合-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,36 @@
package cn.stylefeng.roses.kernel.mongodb.file.entity;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
/**
* @author huziyang
* @create 2021-03-26 17:23
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document("mongo_file")
public class MongoFileEntity extends BaseRequest {
@Id
private String id;
private String name;
private Date uploadDate;
private Long uploadUserId;
private String suffix;
private String description;
private String gridfsId;
/**
*
*/
private byte[] content;
}

View File

@ -0,0 +1,13 @@
package cn.stylefeng.roses.kernel.mongodb.file.mapper;
import cn.stylefeng.roses.kernel.mongodb.file.entity.MongoFileEntity;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @author huziyang
* @create 2021-03-26 17:27
*/
@Configuration
public interface MongoFileMapper extends MongoRepository<MongoFileEntity,String> {
}

View File

@ -0,0 +1,44 @@
package cn.stylefeng.roses.kernel.mongodb.file.service;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.mongodb.file.entity.MongoFileEntity;
import org.springframework.web.multipart.MultipartFile;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-26 17:28
*/
public interface MongoFileService {
/**
*
* @param file
* @return
*/
MongoFileEntity saveFile(MultipartFile file);
/**
*
* @param id
*/
void removeFile(String id);
/**
* id
* @param id
* @return
*/
Optional<MongoFileEntity> getFileById(String id);
/**
*
* @param fileDocument
* @return
*/
PageResult<MongoFileEntity> getFilesByPage(MongoFileEntity fileDocument);
}

View File

@ -0,0 +1,114 @@
package cn.stylefeng.roses.kernel.mongodb.file.service.impl;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.mongodb.api.MongoFileApi;
import cn.stylefeng.roses.kernel.mongodb.file.entity.MongoFileEntity;
import cn.stylefeng.roses.kernel.mongodb.file.mapper.MongoFileMapper;
import cn.stylefeng.roses.kernel.mongodb.file.service.MongoFileService;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSDownloadStream;
import com.mongodb.client.gridfs.model.GridFSFile;
import lombok.extern.slf4j.Slf4j;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Date;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-26 17:29
*/
@Slf4j
@Service
public class MongoFileServiceImpl implements MongoFileService, MongoFileApi<MongoFileEntity,String> {
@Autowired
private MongoFileMapper mongoFileMapper;
@Autowired
private GridFsTemplate gridFsTemplate;
@Autowired
private GridFSBucket gridFSBucket;
@Override
public MongoFileEntity saveFile(MultipartFile file) {
MongoFileEntity fileDocument = new MongoFileEntity();
fileDocument.setName(file.getOriginalFilename());
fileDocument.setUploadDate(new Date());
try {
// 填充登录用户的userId
LoginUser loginUser = LoginContext.me().getLoginUser();
fileDocument.setUploadUserId(loginUser.getUserId());
}catch (Exception e){
// 获取不到用户登录信息,就不填充
}
fileDocument.setSuffix(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
try {
ObjectId store = gridFsTemplate.store(file.getInputStream(), IdUtil.simpleUUID(), file.getContentType());
fileDocument.setGridfsId(String.valueOf(store));
return mongoFileMapper.save(fileDocument);
}catch (IOException ex){
log.error(ex.getMessage());
}
return fileDocument;
}
@Override
public void removeFile(String id) {
Optional<MongoFileEntity> fileDocumentOptional = mongoFileMapper.findById(id);
if(fileDocumentOptional.isPresent()){
mongoFileMapper.deleteById(id);
gridFsTemplate.delete(new Query().addCriteria(Criteria.where("_id").is(fileDocumentOptional.get().getGridfsId())));
}
}
@Override
public Optional<MongoFileEntity> getFileById(String id) {
Optional<MongoFileEntity> fileDocumentOptional = mongoFileMapper.findById(id);
if(fileDocumentOptional.isPresent()){
MongoFileEntity fileDocument = fileDocumentOptional.get();
Query gridQuery = new Query().addCriteria(Criteria.where("_id").is(fileDocument.getGridfsId()));
GridFSFile fsFile = gridFsTemplate.findOne(gridQuery);
GridFSDownloadStream in = gridFSBucket.openDownloadStream(fsFile.getObjectId());
try {
if(in.getGridFSFile().getLength() > 0){
GridFsResource resource = new GridFsResource(fsFile, in);
fileDocument.setContent(IoUtil.readBytes(resource.getInputStream()));
return Optional.of(fileDocument);
}else {
return Optional.empty();
}
}catch (IOException e){
log.error(e.getMessage());
}
}
return Optional.empty();
}
@Override
public PageResult<MongoFileEntity> getFilesByPage(MongoFileEntity fileDocument) {
Integer pageIndex = fileDocument.getPageNo();
Integer pageSize = fileDocument.getPageSize();
Sort sort = Sort.by(Sort.Direction.DESC, "uploadDate");
PageRequest pageRequest = PageRequest.of(pageIndex-1, pageSize, sort);
Example<MongoFileEntity> example = Example.of(fileDocument, ExampleMatcher.matching()
.withIgnoreCase(true)
.withIgnorePaths("_class","pageSize","pageNo","content")
);
Page<MongoFileEntity> all = mongoFileMapper.findAll(example, pageRequest);
return PageResultFactory.createPageResult(all.getContent(), mongoFileMapper.count(example), pageSize, pageIndex);
}
}

View File

@ -0,0 +1,36 @@
<?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>kernel-d-mongodb</artifactId>
<groupId>cn.stylefeng.roses</groupId>
<version>7.0.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mongodb-sdk-springboot</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--MongoDB模块的api-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>mongodb-api</artifactId>
<version>7.0.2</version>
</dependency>
<!--SpringBoot 与 MongoDB 整合-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,27 @@
package cn.stylefeng.roses.kernel.mongodb.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "guns_map")
public class GunsMapEntity {
@Id
private String _id;
private Map<String,Object> data = new HashMap<>();
}

View File

@ -0,0 +1,13 @@
package cn.stylefeng.roses.kernel.mongodb.mapper;
import cn.stylefeng.roses.kernel.mongodb.entity.GunsMapEntity;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
@Configuration
public interface GunsMapRepository extends MongoRepository<GunsMapEntity,String> {
}

View File

@ -0,0 +1,47 @@
package cn.stylefeng.roses.kernel.mongodb.service;
import cn.stylefeng.roses.kernel.mongodb.entity.GunsMapEntity;
import java.util.List;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
public interface GunsMapService {
/**
*
* @param gunsMapEntity
* @return
*/
GunsMapEntity insert(GunsMapEntity gunsMapEntity);
/**
*
* @param gunsMapEntity
* @return
*/
GunsMapEntity update(GunsMapEntity gunsMapEntity);
/**
* id
* @param id
*/
void deleteById(String id);
/**
* id
* @param id
* @return
*/
Optional<GunsMapEntity> findById(String id);
/**
*
* @return
*/
List<GunsMapEntity> findAll();
}

View File

@ -0,0 +1,49 @@
package cn.stylefeng.roses.kernel.mongodb.service.impl;
import cn.stylefeng.roses.kernel.mongodb.api.MongodbApi;
import cn.stylefeng.roses.kernel.mongodb.entity.GunsMapEntity;
import cn.stylefeng.roses.kernel.mongodb.mapper.GunsMapRepository;
import cn.stylefeng.roses.kernel.mongodb.service.GunsMapService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
@Service
public class GunsMapServiceImpl implements GunsMapService, MongodbApi<GunsMapEntity,String> {
@Resource
private GunsMapRepository gunsMapRepository;
@Override
public GunsMapEntity insert(GunsMapEntity gunsMapEntity){
return gunsMapRepository.insert(gunsMapEntity);
}
@Override
public GunsMapEntity update(GunsMapEntity gunsMapEntity){
return gunsMapRepository.save(gunsMapEntity);
}
@Override
public void deleteById(String id){
gunsMapRepository.deleteById(id);
}
@Override
public Optional<GunsMapEntity> findById(String id){
return gunsMapRepository.findById(id);
}
@Override
public List<GunsMapEntity> findAll(){
return gunsMapRepository.findAll();
}
}

View File

@ -0,0 +1,35 @@
<?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>kernel-d-mongodb</artifactId>
<groupId>cn.stylefeng.roses</groupId>
<version>7.0.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mongodb-spring-boot-starter</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--MongoDB api模块的sdk-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>mongodb-sdk-springboot</artifactId>
<version>7.0.2</version>
</dependency>
<!--MongoDB文件管理模块的sdk-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>mongodb-sdk-file</artifactId>
<version>7.0.2</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,31 @@
package cn.stylefeng.roses.kernel.mongodb.starter;
import cn.stylefeng.roses.kernel.mongodb.api.MongoFileApi;
import cn.stylefeng.roses.kernel.mongodb.api.MongodbApi;
import cn.stylefeng.roses.kernel.mongodb.file.service.impl.MongoFileServiceImpl;
import cn.stylefeng.roses.kernel.mongodb.service.impl.GunsMapServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author huziyang
* @create 2021-03-20 16:24
*/
@Configuration
public class GunsMongodbAutoConfiguration {
@Bean
public MongodbApi mongodbApi() {
return new GunsMapServiceImpl();
}
@Bean
public MongoFileApi mongoFileApi() {
return new MongoFileServiceImpl();
}
}

View File

@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.stylefeng.roses.kernel.mongodb.starter.GunsMongodbAutoConfiguration

38
kernel-d-mongodb/pom.xml Normal file
View File

@ -0,0 +1,38 @@
<?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>roses-kernel</artifactId>
<groupId>cn.stylefeng.roses</groupId>
<version>7.0.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kernel-d-mongodb</artifactId>
<packaging>pom</packaging>
<modules>
<module>mongodb-api</module>
<module>mongodb-sdk-springboot</module>
<module>mongodb-spring-boot-starter</module>
<module>mongodb-sdk-file</module>
<module>mongodb-integration-beetl</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- 开发规则 -->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-a-rule</artifactId>
<version>7.0.2</version>
</dependency>
</dependencies>
</project>

View File

@ -91,6 +91,9 @@
<!--系统消息模块-->
<module>kernel-s-message</module>
<!--mongodb模块-->
<module>kernel-d-mongodb</module>
<!--系统管理基础业务-->
<module>kernel-s-system</module>