diff --git a/kernel-d-mongodb/README.md b/kernel-d-mongodb/README.md new file mode 100644 index 000000000..4cc40b983 --- /dev/null +++ b/kernel-d-mongodb/README.md @@ -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 + + + cn.stylefeng.roses + mongodb-integration-beetl + 7.0.2 + +``` + diff --git a/kernel-d-mongodb/mongodb-api/pom.xml b/kernel-d-mongodb/mongodb-api/pom.xml new file mode 100644 index 000000000..0bfac98fd --- /dev/null +++ b/kernel-d-mongodb/mongodb-api/pom.xml @@ -0,0 +1,34 @@ + + + + kernel-d-mongodb + cn.stylefeng.roses + 7.0.2 + + 4.0.0 + + mongodb-api + + + 8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + cn.stylefeng.roses + db-api + 7.0.2 + + + + \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/MongoFileApi.java b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/MongoFileApi.java new file mode 100644 index 000000000..028f45a50 --- /dev/null +++ b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/MongoFileApi.java @@ -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 { + + /** + * 保存文件 + * @param file + * @return + */ + T saveFile(MultipartFile file); + + + /** + * 删除文件 + * @param id + */ + void removeFile(ID id); + + /** + * 根据id获取文件 + * @param id + * @return + */ + Optional getFileById(ID id); + + + /** + * 分页获取文件 + * @param fileDocument 查询条件 + * @return + */ + PageResult getFilesByPage(T fileDocument); + + +} diff --git a/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/MongodbApi.java b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/MongodbApi.java new file mode 100644 index 000000000..0e7ccf858 --- /dev/null +++ b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/MongodbApi.java @@ -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 { + + /** + * 新增操作 + * @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 findById(ID id); + + /** + * 查询所有 + * @return + */ + List findAll(); +} diff --git a/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/constants/MongodbConstants.java b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/constants/MongodbConstants.java new file mode 100644 index 000000000..0938ce64f --- /dev/null +++ b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/constants/MongodbConstants.java @@ -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"; +} diff --git a/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/exception/MongodbException.java b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/exception/MongodbException.java new file mode 100644 index 000000000..d8b13dac5 --- /dev/null +++ b/kernel-d-mongodb/mongodb-api/src/main/java/cn/stylefeng/roses/kernel/mongodb/api/exception/MongodbException.java @@ -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); + } + +} diff --git a/kernel-d-mongodb/mongodb-integration-beetl/pom.xml b/kernel-d-mongodb/mongodb-integration-beetl/pom.xml new file mode 100644 index 000000000..1c0d67366 --- /dev/null +++ b/kernel-d-mongodb/mongodb-integration-beetl/pom.xml @@ -0,0 +1,36 @@ + + + + kernel-d-mongodb + cn.stylefeng.roses + 7.0.2 + + 4.0.0 + + mongodb-integration-beetl + + + 8 + 8 + + + + + + + cn.stylefeng.roses + scanner-api + 7.0.2 + + + + + cn.stylefeng.roses + mongodb-spring-boot-starter + 7.0.2 + + + + \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/mongodb/integration/controller/ModelViewController.java b/kernel-d-mongodb/mongodb-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/mongodb/integration/controller/ModelViewController.java new file mode 100644 index 000000000..331a0fbb5 --- /dev/null +++ b/kernel-d-mongodb/mongodb-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/mongodb/integration/controller/ModelViewController.java @@ -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"; + } + +} diff --git a/kernel-d-mongodb/mongodb-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/mongodb/integration/controller/MongoFileController.java b/kernel-d-mongodb/mongodb-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/mongodb/integration/controller/MongoFileController.java new file mode 100644 index 000000000..d25a15efa --- /dev/null +++ b/kernel-d-mongodb/mongodb-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/mongodb/integration/controller/MongoFileController.java @@ -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 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 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"); + } + } + +} diff --git a/kernel-d-mongodb/mongodb-integration-beetl/src/main/resources/assets/modular/mongodb/fileList.js b/kernel-d-mongodb/mongodb-integration-beetl/src/main/resources/assets/modular/mongodb/fileList.js new file mode 100644 index 000000000..ab7f05e78 --- /dev/null +++ b/kernel-d-mongodb/mongodb-integration-beetl/src/main/resources/assets/modular/mongodb/fileList.js @@ -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); + } + }); + +}); diff --git a/kernel-d-mongodb/mongodb-integration-beetl/src/main/resources/pages/modular/mongodb/fileList.html b/kernel-d-mongodb/mongodb-integration-beetl/src/main/resources/pages/modular/mongodb/fileList.html new file mode 100644 index 000000000..a8beb387a --- /dev/null +++ b/kernel-d-mongodb/mongodb-integration-beetl/src/main/resources/pages/modular/mongodb/fileList.html @@ -0,0 +1,35 @@ +@layout("/layout/_container.html",{js:["/assets/modular/mongodb/fileList.js"]}){ + +
+ Mongodb文件存储 +
+ +
+
+
+
+
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
+
+
+ + + +@} diff --git a/kernel-d-mongodb/mongodb-sdk-file/pom.xml b/kernel-d-mongodb/mongodb-sdk-file/pom.xml new file mode 100644 index 000000000..040ea9c86 --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-file/pom.xml @@ -0,0 +1,45 @@ + + + + kernel-d-mongodb + cn.stylefeng.roses + 7.0.2 + + 4.0.0 + + mongodb-sdk-file + + + 8 + 8 + + + + + + + + + cn.stylefeng.roses + auth-api + 7.0.2 + true + + + + + + cn.stylefeng.roses + mongodb-api + 7.0.2 + + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/entity/MongoFileEntity.java b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/entity/MongoFileEntity.java new file mode 100644 index 000000000..419f2d9e0 --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/entity/MongoFileEntity.java @@ -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; +} diff --git a/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/mapper/MongoFileMapper.java b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/mapper/MongoFileMapper.java new file mode 100644 index 000000000..cf97ad1cb --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/mapper/MongoFileMapper.java @@ -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 { +} diff --git a/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/service/MongoFileService.java b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/service/MongoFileService.java new file mode 100644 index 000000000..e9443ccf0 --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/service/MongoFileService.java @@ -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 getFileById(String id); + + + /** + * 分页获取文件 + * @param fileDocument 查询条件 + * @return + */ + PageResult getFilesByPage(MongoFileEntity fileDocument); + + +} diff --git a/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/service/impl/MongoFileServiceImpl.java b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/service/impl/MongoFileServiceImpl.java new file mode 100644 index 000000000..1cc1d7241 --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-file/src/main/java/cn/stylefeng/roses/kernel/mongodb/file/service/impl/MongoFileServiceImpl.java @@ -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 { + @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 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 getFileById(String id) { + Optional 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 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 example = Example.of(fileDocument, ExampleMatcher.matching() + .withIgnoreCase(true) + .withIgnorePaths("_class","pageSize","pageNo","content") + ); + Page all = mongoFileMapper.findAll(example, pageRequest); + return PageResultFactory.createPageResult(all.getContent(), mongoFileMapper.count(example), pageSize, pageIndex); + } + +} diff --git a/kernel-d-mongodb/mongodb-sdk-springboot/pom.xml b/kernel-d-mongodb/mongodb-sdk-springboot/pom.xml new file mode 100644 index 000000000..bceb6a9aa --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-springboot/pom.xml @@ -0,0 +1,36 @@ + + + + kernel-d-mongodb + cn.stylefeng.roses + 7.0.2 + + 4.0.0 + + mongodb-sdk-springboot + + + 8 + 8 + + + + + + + cn.stylefeng.roses + mongodb-api + 7.0.2 + + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + + + \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/entity/GunsMapEntity.java b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/entity/GunsMapEntity.java new file mode 100644 index 000000000..574cf59b4 --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/entity/GunsMapEntity.java @@ -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 data = new HashMap<>(); + + +} diff --git a/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/mapper/GunsMapRepository.java b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/mapper/GunsMapRepository.java new file mode 100644 index 000000000..14301698b --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/mapper/GunsMapRepository.java @@ -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 { +} \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/service/GunsMapService.java b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/service/GunsMapService.java new file mode 100644 index 000000000..d183252e4 --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/service/GunsMapService.java @@ -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 findById(String id); + + /** + * 查询所有 + * @return + */ + List findAll(); + +} \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/service/impl/GunsMapServiceImpl.java b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/service/impl/GunsMapServiceImpl.java new file mode 100644 index 000000000..398e3ffea --- /dev/null +++ b/kernel-d-mongodb/mongodb-sdk-springboot/src/main/java/cn/stylefeng/roses/kernel/mongodb/service/impl/GunsMapServiceImpl.java @@ -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 { + + + @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 findById(String id){ + return gunsMapRepository.findById(id); + } + + @Override + public List findAll(){ + return gunsMapRepository.findAll(); + } + +} diff --git a/kernel-d-mongodb/mongodb-spring-boot-starter/pom.xml b/kernel-d-mongodb/mongodb-spring-boot-starter/pom.xml new file mode 100644 index 000000000..8d0b006b4 --- /dev/null +++ b/kernel-d-mongodb/mongodb-spring-boot-starter/pom.xml @@ -0,0 +1,35 @@ + + + + kernel-d-mongodb + cn.stylefeng.roses + 7.0.2 + + 4.0.0 + + mongodb-spring-boot-starter + + + 8 + 8 + + + + + + cn.stylefeng.roses + mongodb-sdk-springboot + 7.0.2 + + + + + cn.stylefeng.roses + mongodb-sdk-file + 7.0.2 + + + + \ No newline at end of file diff --git a/kernel-d-mongodb/mongodb-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/mongodb/starter/GunsMongodbAutoConfiguration.java b/kernel-d-mongodb/mongodb-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/mongodb/starter/GunsMongodbAutoConfiguration.java new file mode 100644 index 000000000..48613d92c --- /dev/null +++ b/kernel-d-mongodb/mongodb-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/mongodb/starter/GunsMongodbAutoConfiguration.java @@ -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(); + } + + +} + diff --git a/kernel-d-mongodb/mongodb-spring-boot-starter/src/main/resources/META-INF/spring.factories b/kernel-d-mongodb/mongodb-spring-boot-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..df858df4d --- /dev/null +++ b/kernel-d-mongodb/mongodb-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + cn.stylefeng.roses.kernel.mongodb.starter.GunsMongodbAutoConfiguration \ No newline at end of file diff --git a/kernel-d-mongodb/pom.xml b/kernel-d-mongodb/pom.xml new file mode 100644 index 000000000..ce25670ed --- /dev/null +++ b/kernel-d-mongodb/pom.xml @@ -0,0 +1,38 @@ + + + + roses-kernel + cn.stylefeng.roses + 7.0.2 + + 4.0.0 + + kernel-d-mongodb + pom + + mongodb-api + mongodb-sdk-springboot + mongodb-spring-boot-starter + mongodb-sdk-file + mongodb-integration-beetl + + + + 8 + 8 + + + + + + + cn.stylefeng.roses + kernel-a-rule + 7.0.2 + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index a63332a33..6e16f984c 100644 --- a/pom.xml +++ b/pom.xml @@ -91,6 +91,9 @@ kernel-s-message + + kernel-d-mongodb + kernel-s-system