diff --git a/README.md b/README.md
index 8f8807bf..2f611fd9 100644
--- a/README.md
+++ b/README.md
@@ -1,49 +1,107 @@
-# 🚀`kicc`(康来智慧冷链) 微服务架构平台 © 长沙康来生物有限公司版权所有
+
+
+ 
+
+
-## 💡 简介
-服务于医疗智慧冷链行业微服务架构平台,目前采用最新微服务技术栈搭建,支持标本箱配送,监控,地图路线规划,
-努力做成中国最好的智慧冷链平台。
+ 一个快速开发软件的平台
-## 🎡 功能特点
-- 主体框架:采用最新的`Spring Cloud 2021.0.1`, `Spring Boot 2.6.4`, `Spring Cloud Alibaba 2021.1`版本进行系统设计;
+
+ Website •
+ Documentation
+
-- 统一注册:支持`Nacos`作为注册中心,实现多配置、分群组、分命名空间、多业务模块的注册和发现功能;
+
-- 统一认证:统一`Oauth2`认证协议,并支持自定义grant_type实现手机号码登录,第三方登录集成JustAuth实现微信、支付宝等多种登录模式;
+## 🐬 介绍
+海豚生态计划-打造一个web端,安卓端,ios端的一个海豚开发平台生态圈,不接收任何商业化,并且完全免费开源(包含高级功能)。
-- 业务监控:利用`Spring Boot Admin`来监控各个独立Service的运行状态。
+## 💪 愿景
+让人人都可以快速高效的开发软件
+## ✨ 特性
+- 主体框架:采用最新的`Spring Cloud 2021.0.1`, `Spring Boot 2.6.4`, `Spring Cloud Alibaba 2021.1`版本进行系统设计。
+- 统一注册:支持`Nacos`作为注册中心,实现多配置、分群组、分命名空间、多业务模块的注册和发现功能。
+- 统一认证:统一`Oauth2`认证协议,并支持自定义grant_type实现手机号码登录,第三方登录集成JustAuth实现微信、支付宝等多种登录模式。
+- 业务监控:利用`Spring Boot Admin`来监控各个独立微服务运行状态。
- 内部调用:集成了`Feign`与自定义内部注解,支持内部调用。
+- 业务熔断:采用`Sentinel`实现业务熔断处理,避免服务之间出现雪崩。
+- 在线文档:通过接入`Knife4j`,实现在线API文档的查看与调试。
+- 业务分离:采用前后端分离的框架设计,提高开发效率、降低维护成本、增强系统稳定性和灵活性。
+- 多租户功能:集成`Mybatis Plus`,自定义sql执行拦截器,实现SAAS多租户。
+- 消息中间件:采用`RocketMQ`,实现服务之间消息转发。
+- 分布式事物方案:采用`seata`,实现多个微服务分布式事物一致。
+- 分布式定时器:采用`XXL-JOB`,实现多个微服务分布式任务调度。
+- 微服务网关:采用`Spring Gateway`实现流量配置动态化、API管理和路由、负载均衡和容错、解决跨域问题、鉴权,限流,熔断,防火墙等等。
-- 业务熔断:采用`Sentinel`实现业务熔断处理,避免服务之间出现雪崩;
-
-- 在线文档:通过接入`Knife4j`,实现在线API文档的查看与调试;
-
-- 业务分离:采用前后端分离的框架设计,前端采用基于 `vben Admin` 的 `kicc-ui`
-
-- 多租户功能:集成`Mybatis Plus`,实现SAAS多租户功能
-
-
-## 🎯 文件结构
-```lua
-kicc -- 父项目,各模块分离,方便集成和微服务
-│ ├─kicc-auth -- 认证授权中心,基于 spring security oAuth2
-│ ├─kicc-common -- 公共通用模块,主模块
-│ │ ├─kicc-common-bom -- 全局jar BOM标准定义
-│ │ ├─kicc-common-core -- 公共工具类核心包
-│ │ ├─kicc-common-data -- 数据服务核心包
-│ │ ├─kicc-common-datasource -- 动态切换数据源组件
-│ │ ├─kicc-common-feign -- feign-sentinel服务降级熔断、限流组件
-│ │ ├─kicc-common-job -- 定时任务,基于xxl-job
-│ │ ├─kicc-common-log -- 日志服务
-│ │ ├─kicc-common-mock -- 单元模拟测试工具类
-│ │ ├─kicc-common-rocketmq -- 阿里 rocketmq 消息中间件
-│ │ ├─kicc-common-seata -- 阿里巴巴-seata分布式事务解决方案
-│ │ ├─kicc-common-security -- 安全工具类
-│ │ ├─kicc-common-swagger -- 接口文档
-│ │─kicc-common-demo -- 组件使用案列
-│ │─kicc-gateway -- 服务网关,基于 spring cloud gateway
-│ │─kicc-register -- 注册配置中心
-│ │─kicc-system -- 通用系统权限管理聚合模块
-│ │─kicc-visual 图形化相关功能
+##
黑客节
+加入[Github HackToberFest](https://hacktoberfest.com/) 开始为此项目做出贡献.
+
+## 🔨 开发目录
+
+```
+├─dolphin -- 父项目,各模块分离,方便微服务扩展
+│ ├─doc -- 文档数据-包含项目的一些数据资料
+│ ├─docker-cloud -- docker-compose容器配置
+│ ├─dolphin-auth -- 认证授权中心,基于 spring security oAuth2
+│ ├─dolphin-common -- 公共通用模块,主模块
+│ │ ├─dolphin-common-bom -- 全局jar BOM标准定义
+│ │ ├─dolphin-common-core -- 公共工具类核心包
+│ │ ├─dolphin-common-data -- 数据服务核心包
+│ │ ├─dolphin-common-datasource -- 动态切换数据源组件
+│ │ ├─dolphin-common-feign -- feign-sentinel服务降级熔断、限流组件
+│ │ ├─dolphin-common-job -- 定时任务,基于xxl-job
+│ │ ├─dolphin-common-log -- 日志服务
+│ │ ├─dolphin-common-mock -- 单元模拟测试工具类
+│ │ ├─dolphin-common-rocketmq -- 阿里 rocketmq 消息中间件
+│ │ ├─dolphin-common-seata -- 阿里巴巴-seata分布式事务解决方案
+│ │ ├─dolphin-common-security -- 安全工具类
+│ │ ├─dolphin-common-swagger -- 接口文档
+│ │─dolphin-common-demo -- 组件使用案列
+│ │ ├─dolphin-common-demo-mq -- 消息中心间演示
+│ │ ├─dolphin-common-demo-seata -- 分布式事务解决方案演示
+│ │─dolphin-gateway -- 服务网关,基于 spring cloud gateway
+│ │─ddolphin-platform -- 微服务平台
+│ │ ├─dolphin-platform-api -- 微服务api调用(添加调用的微服务api依赖库,实现调用)
+│ │ │ ├─dolphin-common-api -- 通用业务模块公共api模块
+│ │ │ ├─dolphin-monitor-api -- 运维监控api模块
+│ │ │ ├─dolphin-system-api -- 系统api模块
+│ │ │ ├─dolphin-template-api -- 新建api模块模板,只提供基础依赖
+│ │ ├─dolphin-platform-biz -- 微服务业务模块
+│ │ │ ├─dolphin-common-biz -- 通用业务模块
+│ │ │ ├─dolphin-monitor-biz -- 运维监控业务模块
+│ │ │ ├─dolphin-system-biz -- 系统业务模块
+│ │ │ ├─dolphin-template-biz -- 新建业务模块模板,只提供基础依赖
+│ │─dolphin-register -- 注册配置中心
+│ │─dolphin-visual 可视化图形界面
+│ │ ├─dolphin-rocketmq-dashboard -- RocketMQ可视化监控平台
+│ │ ├─dolphin-sentinel-dashboard -- 哨兵流量控制可视化平台
+│ │ ├─dolphin-spring-dashboard -- SpringBoot可视化监控平台
+│ │ ├─dolphin-xxl-job-admin -- XXL-JOB可视化监控平台
```
+
+## 🤔 一起讨论
+加入我们的 [Discord](https://discord.gg/DREuQWrRYQ) 开始与大家交流。
+
+## 🤗 我想成为开发团队的一员!
+欢迎😀!我们正在寻找有才华的开发者加入我们,让海豚开发平台变得更好!如果您想加入开发团队,请联系我们,非常欢迎您加入我们!💖
+
+## 在线一键设置
+您可以使用 Gitpod,一个在线 IDE(开源免费)来在线贡献或运行示例。
+
+[](https://gitpod.io/#https://github.com/wangxiang4/dolphin)
+
+## 📄 执照
+[Dolphin Development Platform 是获得MIT许可](https://github.com/wangxiang4/dolphin/blob/master/LICENSE) 的开源软件 。
+
+
diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/File.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/File.java
index b6954f58..1798c7a0 100644
--- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/File.java
+++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/File.java
@@ -54,4 +54,19 @@ public class File extends CommonEntity {
*/
private Long fileSize;
+ /**
+ * 有效原始路径
+ */
+ private String availablePath;
+
+ /**
+ * 视频时长
+ */
+ private Long duration;
+
+ /**
+ * 媒体资源类型
+ */
+ private String mimeType;
+
}
diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/FileController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/FileController.java
index 6bc877f9..bba90966 100644
--- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/FileController.java
+++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/FileController.java
@@ -2,6 +2,7 @@ package com.cloud.kicc.system.controller;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -23,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
+import java.util.Optional;
/**
*
@@ -53,10 +55,12 @@ public class FileController {
}
@PostMapping("/upload")
- public Map upload(@RequestPart("file") MultipartFile file) {
- return fileService.uploadFile(file);
+ public File upload(@RequestPart("file") MultipartFile file,
+ @RequestParam(value = "ossFile", required=false) String ossFile) {
+ return fileService.uploadFile(file, Optional.ofNullable(ossFile).map(item -> JSONUtil.parseObj(ossFile).toBean(File.class)).orElse(null));
}
+
@Inner(false)
@GetMapping("/getFile/{bucket}/{fileName}")
public void getById(@PathVariable String bucket, @PathVariable String fileName, HttpServletResponse response) {
diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/RegionController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/RegionController.java
index bb6aec56..87b47542 100644
--- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/RegionController.java
+++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/RegionController.java
@@ -9,9 +9,10 @@ import com.cloud.kicc.system.api.entity.Region;
import com.cloud.kicc.system.api.vo.ResultVo;
import com.cloud.kicc.system.service.RegionService;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
-
+import com.cloud.dolphin.system.util.ObjectUtil;
import java.util.List;
/**
@@ -38,15 +39,22 @@ public class RegionController {
.orderByAsc(Region::getSort);
}
+ @ApiOperation("查询")
@GetMapping("/list")
public R list(Region region) {
List result = regionService.list(getQueryWrapper(region));
return R.ok(result, result.size());
}
+ @ApiOperation("懒加载查询")
@GetMapping("/lazyList")
- public R lazyList(String parentId){
- return R.ok(regionService.lazyList(parentId));
+ public R lazyList(Region region) throws IllegalAccessException {
+ String[] fields = {"name", "code", "beginTime", "endTime" };
+ List result;
+ if (ObjectUtil.isAnyFieldsNotNull(region, fields)) {
+ result = regionService.list(getQueryWrapper(region));
+ } else result = regionService.lazyList(region.getParentId());
+ return R.ok(result, result.size());
}
@Inner
diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java
index d5af3709..e12cf8c5 100644
--- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java
+++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java
@@ -8,15 +8,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
-import com.cloud.kicc.common.data.entity.KiccUser;
+import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.log.annotation.SysLog;
import com.cloud.kicc.common.security.annotation.Inner;
import com.cloud.kicc.common.security.util.SecurityUtils;
+import com.cloud.kicc.system.api.entity.Menu;
import com.cloud.kicc.system.api.entity.Role;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.system.api.entity.UserRole;
import com.cloud.kicc.system.api.vo.ResultVo;
-import com.cloud.kicc.system.service.FileService;
+import com.cloud.kicc.system.service.MenuService;
import com.cloud.kicc.system.service.RoleService;
import com.cloud.kicc.system.service.UserRoleService;
import com.cloud.kicc.system.service.UserService;
@@ -29,11 +30,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -52,7 +50,7 @@ public class UserController {
private final UserService userService;
private final UserRoleService userRoleService;
private final RoleService roleService;
- private final FileService fileService;
+ private final MenuService menuService;
private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
private LambdaQueryWrapper getQueryWrapper(User user) {
@@ -124,7 +122,7 @@ public class UserController {
return R.ok(userService.getUserAuthority(user));
}
- @SysLog("用户修改管理用户角色表")
+ @SysLog("用户修改")
@PutMapping("/update")
@PreAuthorize("@pms.hasPermission('user_edit')")
public R update(@RequestBody User user) {
@@ -132,14 +130,6 @@ public class UserController {
return R.ok();
}
- @SysLog("用户修改")
- @PutMapping("/updateUser")
- @PreAuthorize("@pms.hasPermission('user_edit')")
- public R updateUser(@RequestBody User user) {
- userService.updateById(user);
- return R.ok();
- }
-
@SysLog("用户删除")
@DeleteMapping("/remove/{ids:[\\w,]+}")
@PreAuthorize("@pms.hasPermission('user_del')")
@@ -152,26 +142,6 @@ public class UserController {
return R.ok();
}
- @GetMapping("/profile")
- public R profile() {
- KiccUser kiccUser = SecurityUtils.getUser();
- if (kiccUser != null) {
- ResultVo resultVo = new ResultVo();
- User user = userService.getById(kiccUser.getId());
- if (user != null) {
- String roleNames = SecurityUtils.getRoles()
- .stream().map(roleId -> roleService.getById(roleId).getName())
- .collect(Collectors.joining(","));
- user.setPassword(null);
- resultVo.setResult(user);
- resultVo.setExtend(roleNames);
- }
- return R.ok(resultVo);
- } else {
- return R.error("登录信息已过期,请重新登录");
- }
- }
-
@SysLog("用户信息修改")
@PutMapping("/updateProfile")
@PreAuthorize("@pms.hasPermission('user_edit')")
@@ -184,13 +154,6 @@ public class UserController {
return R.ok();
}
- @SysLog("用户头像修改")
- @PutMapping("/updateAvatar")
- @PreAuthorize("@pms.hasPermission('user_edit')")
- public Map updateAvatar(@RequestParam("avatarFile") MultipartFile file) {
- return fileService.uploadFile(file);
- }
-
@SysLog("用户密码修改")
@PutMapping("/updatePwd")
@PreAuthorize("@pms.hasPermission('user_edit')")
@@ -233,7 +196,19 @@ public class UserController {
@GetMapping("/changeTenant/{tenantIds:[\\w,]+}")
@PreAuthorize("@pms.hasPermission('user_edit')")
public R changeTenant(@PathVariable String[] tenantIds) {
+ String originTenantIds = SecurityUtils.getUser().getTenantId();
userService.setCurrentUserTenant(tenantIds);
+ try {
+ // 检测切换的多租户下是否已经配置好了基础数据,没配置会导致系统直接404
+ Set