Giter Site home page Giter Site logo

yunaiv / yudao-cloud Goto Github PK

View Code? Open in Web Editor NEW
15.8K 334.0 3.8K 38.55 MB

ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城、CRM、ERP 等功能。你的 ⭐️ Star ⭐️,是作者生发的动力!

Home Page: https://cloud.iocoder.cn

License: MIT License

Java 75.21% PLpgSQL 15.95% TSQL 8.52% Dockerfile 0.09% Python 0.23% Shell 0.01%
dubbo springcloud springboot rocketmq zookeeper mysql redis skywalking elasticsearch sharding-sphere

yudao-cloud's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yudao-cloud's Issues

发现有好些todo,项目好久没有更新了,还会后续更新吗

读了这个项目后,这里发现一些问题,以供参考:

前端相关:

  1. 增加品牌时候,不发出请求
  2. 增加子种类的时候,点击上传图片就跳过.
  3. Invalid Host header,这个问题,请求商城子项目,部署到云上时候
  4. 发布商品时候,规格明细那里,产生数量和价格的条目数,应该是商品规格属性的排列组合,不能有重复,现在出现重复,前端页面生成数据bug
  5. 优惠券,折扣卷那里,会崩

后端相关,主要是好一些todo还没做,看起来还是有些不完善,少量问题自己阅读时候发现:
todo 系列:

  1. 下订单,没减库存
  2. 订单过期逻辑还没有
  3. 退货相关,重新入库的好像没加(不知道是不是需要手动入库比较合理,这样的考虑?)
  4. 还有一些其他todo
  5. 还有一个支付成功通知逻辑,代码注释写的是
    定时任务,扫描 nextNotifyTime < lastExecuteTime 的任务
    感觉不用这个lastExecuteTime,加上感觉疑惑,是不是 nextNotifyTime < now()时候就可以执行通知逻辑了

【欢迎贡献】多租户工具类

image

多租户的情情况下,子线程是不是就获取不到主线程中的关于租户的一些设置,threadLocal变量是不共享的,这个TenantUtils是不是有点小问题呢,还是我理解的片面了

master分支项目整体编译无法通过

1、很多模块的pom中依赖了system-sdk、user-sdk,但是项目已经没有这两个模块
2、各子项目中service-impl模块中的dataobject中的实体类集成的BaseDO或DeletableDO引入的还是cn.iocoder.common.framework.dataobject包下,这个类似乎已经已经移动到cn.iocoder.mall.mybatis.dataobject,导致很多模块都是编译报错的

提问

mapstruct的convert类的方法用convert1,convert2这样排可不可以换成名字全部convert,因为方法重载调用的时候已经很明确调的是哪个转换器,除非特殊情况下,转换的源和目标类型不一样,此时用1,2区分下,不过这样极端情况应该不会太多

待确认修复的逻辑问题

fork 的代码,梳理逻辑时,发现三个问题:
1:
AdminServiceImpl.java
updateAdmin() 方法
password参数未encodePassword存储,账号修改后无法登陆
2:
updateAdminStatus()
DISABLE 时会将当前用户token失效,应该是被更新的用户token失效,参数传错了
3:
AdminErrorCodeEnum.java
账号被禁用 与 账号已经存在 状态码相同

IP 域名映射

所有的 配置文件里边的 ip 都可以替换成域名,比如说 127.0.0.1 替换成 zookeeper.onemall.com
这样,开发者配置 Host ,就可以不用更改源码就可以进行调试了。

生成代码时,报错:Cause: java.sql.SQLException: Field 'table_id' doesn't have a default value,疑似mybatis-plus插入数据后,未返回主键

基本信息

  • yudao-cloud:
  • 操作系统:win10 ltsc 2021 64bit
  • 数据库:mysql 8.0

你猜测可能的原因

插入数据后未返回table.id
codegenTableMapper.insert(table);
导致下一步table.id无值可用

       // 构建 CodegenColumnDO 数组,插入到 DB 中
        List<CodegenColumnDO> columns = codegenBuilder.buildColumns(table.getId(), tableInfo.getFields());
        // 如果没有主键,则使用第一个字段作为主键
        if (!tableInfo.isHavePrimaryKey()) {
            columns.get(0).setPrimaryKey(true);
        }
        codegenColumnMapper.insertBatch(columns);

复现步骤

第一步,进入后台管理系统,选择左侧“基础设施”菜单

第二步,选择“代码生成”

第三步,点击“导入”按钮,选择表后确定

报错信息

系统异常
图片

Cause: java.sql.SQLException: Field 'table_id' doesn't have a default value

; Field 'table_id' doesn't have a default value; nested exception is java.sql.SQLException: Field 'table_id' doesn't have a default value
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
at com.sun.proxy.$Proxy205.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at com.sun.proxy.$Proxy232.insert(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1259)

swagger功能还是有问题

yudao-cloud已更新最新程序(1113日),并写了一个demo,demo正常访问没问题,也屏蔽了tanent_id和配置了gateway路由,但是仍然报“租户的请求未传递,请进行排查”,急急急!
1
2
3
4
5

租户的请求未传递,请进行排查

碰到问题,请在 https://github.com/YunaiV/yudao-cloud/issues 搜索是否存在相似的 issue。

不按照模板提交的 issue,会被系统自动删除。

基本信息

  • ruoyi-vue-pro 版本:1.6.6-snapshot
  • 操作系统:win10
  • 数据库:mysql

你猜测可能的原因

(必填)我花费了 2-4 小时自查,发现可能的原因是:一直没有发现问题在哪里。断点调式了

我按文档新建了一个模块。新增了demo/test
image
这里也添加了过滤
image
用postman通过网关请求也没有问题。但是后台却报一下错误
image
image
我在TenantSecurityWebFilter->isIgnoreUrl 方法中添加了日志。request.getRequestURI()的值不是我请求的app-api/demo/test/get url,而是 /rpc-api/infra/api-access-log/create 这个不知道为什么。
image

贡献参与

cloud版本进度怎么样了,想加入版本开发

无token时如何进行的认证?

碰到问题,请在 https://github.com/YunaiV/yudao-cloud/issues 搜索是否存在相似的 issue。

不按照模板提交的 issue,会被系统自动删除。

基本信息

  • yudao-cloud 版本:1.6.2-snapshot
  • 操作系统:windows
  • 数据库:mysql

请问如果请求头不携带token请求时,是如何鉴权的,我看这两个filter里面,cn.iocoder.yudao.gateway.filter.security.TokenAuthenticationFilter,cn.iocoder.yudao.framework.security.core.filter.TokenAuthenticationFilter,如果没有token都是直接过了,那不相当于没有认证也可以调用接口了吗?

网关日志日志功能创建的LinkedHashMap对象没有指定初始长度,可以指定以提高性能

基本信息

  • ruoyi-vue-pro 版本:4.0.0
  • 操作系统:无
  • 数据库:无

你猜测可能的原因

浏览代码时,发现网关日志日志打印时候用的是无默认大小初始化值的linkhashmap对象,而打印网关日志代码为固定在map中放置15个项目,所以可以在新建对象的时候指定初始化map中对象个数为15,以节省内存和提高性能。

复现步骤

Uploading image.png…
AccessLogFilter.java
private void writeAccessLog(AccessLog gatewayLog) {
Map<String, Object> values = new LinkedHashMap<>(); // 手工拼接,保证排序
values.put("userId", gatewayLog.getUserId());
values.put("userType", gatewayLog.getUserType());
values.put("routeId", gatewayLog.getRoute() != null ? gatewayLog.getRoute().getId() : null);
values.put("schema", gatewayLog.getSchema());
values.put("requestUrl", gatewayLog.getRequestUrl());
values.put("queryParams", gatewayLog.getQueryParams().toSingleValueMap());
values.put("requestBody", JsonUtils.isJson(gatewayLog.getRequestBody()) ? // 保证 body 的展示好看
JSONUtil.parse(gatewayLog.getRequestBody()) : gatewayLog.getRequestBody());
values.put("requestHeaders", JsonUtils.toJsonString(gatewayLog.getRequestHeaders().toSingleValueMap()));
values.put("userIp", gatewayLog.getUserIp());
values.put("responseBody", JsonUtils.isJson(gatewayLog.getResponseBody()) ? // 保证 body 的展示好看
JSONUtil.parse(gatewayLog.getResponseBody()) : gatewayLog.getResponseBody());
values.put("responseHeaders", gatewayLog.getResponseHeaders() != null ?
JsonUtils.toJsonString(gatewayLog.getResponseHeaders().toSingleValueMap()) : null);
values.put("httpStatus", gatewayLog.getHttpStatus());
values.put("startTime", DateUtil.format(gatewayLog.getStartTime(), NORM_DATETIME_MS_FORMAT));
values.put("endTime", DateUtil.format(gatewayLog.getEndTime(), NORM_DATETIME_MS_FORMAT));
values.put("duration", gatewayLog.getDuration() != null ? gatewayLog.getDuration() + " ms" : null);
log.info("[writeAccessLog][网关日志:{}]", JsonUtils.toJsonPrettyString(values));
}

报错信息

【欢迎贡献】yudao项目版本号问题

基本信息
ruoyi-vue-pro 版本:1.7.1-snapshot
操作系统:macOS
数据库:mysql

问题
<spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
使用当前版本 nacos配置的 server-addr 使用域名可以正常访问,
当版本切换为<spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
会导致nacos服务连接不上

token方案是否存在问题

package:

cn.iocoder.mall.systemservice.service.oauth.refreshAccessToken

code

`

OAuth2RefreshTokenDO refreshTokenDO = oauth2RefreshTokenMapper.selectById(refreshAccessTokenDTO.getRefreshToken());

    // 校验刷新令牌是否合法
    if (refreshTokenDO == null) { // 不存在
        throw ServiceExceptionUtil.exception(OAUTH2_REFRESH_TOKEN_NOT_FOUND);
    }
    if (refreshTokenDO.getExpiresTime().getTime() < System.currentTimeMillis()) { // 已过期
        throw ServiceExceptionUtil.exception(OAUTH_REFRESH_TOKEN_EXPIRED);
    }

    // 标记 refreshToken 对应的 accessToken 都不合法
    // 这块的实现,参考了 Spring Security OAuth2 的代码
    List<OAuth2AccessTokenDO> accessTokenDOs = oauth2AccessTokenMapper.selectListByRefreshToken(refreshAccessTokenDTO.getRefreshToken());
    accessTokenDOs.forEach(accessTokenDO -> deleteOAuth2AccessToken(accessTokenDO.getId()));

    // 创建访问令牌
    OAuth2AccessTokenDO oauth2AccessTokenDO = createOAuth2AccessToken(refreshTokenDO, refreshAccessTokenDTO.getCreateIp());
    // 返回访问令牌
    return OAuth2Convert.INSTANCE.convert(oauth2AccessTokenDO);

`

上述代码中对refreshToken对应的accessToken进行了移除,并重新创建了accessToken,但是并未刷新refreshToken的过期时间,

当refreshToken过期时间到达,会导致refreh-token接口错误

Unable to find instance for system-server

碰到问题,请在 https://github.com/YunaiV/yudao-cloud/issues 搜索是否存在相似的 issue。

不按照模板提交的 issue,会被系统自动删除。

基本信息

  • ruoyi-vue-pro 版本:最新版
  • 操作系统:Windows11
  • 数据库:5.7

项目启动出现问题

  • 在gateway,system,infra以及前端都启动之后,浏览器登录界面出现“Unable to find instance for system-server”

但是在nacos服务列表中有system-server,不知道是什么原因

你猜测可能的原因

(必填)我花费了 2-4 小时自查,发现可能的原因是:xxxxxx

复现步骤

第一步,

第二步,

第三步,

报错信息

带上必要的截图
Snipaste_2023-04-24_18-18-27

发送邮件,rocketmq上的topic没绑定消费者

基本信息

  • ruoyi-vue-pro 版本:1.7.1-snapshot
  • 操作系统:macOS
  • 数据库:mysql

你猜测可能的原因

(必填)我花费了 2-4 小时自查,发现可能的原因是:rocketmq消费者和topic没有绑定

复现步骤

第一步,调用邮件中发送邮件的接口, rocketmq上有相应的消息,和消费者,但是并没有绑定

image

image

image

配置信息
image

maven打包打的都是快照

碰到问题,请在 https://github.com/YunaiV/yudao-cloud/issues 搜索是否存在相似的 issue。

不按照模板提交的 issue,会被系统自动删除。

基本信息

  • ruoyi-vue-pro 版本:
  • 操作系统:
  • 数据库:

你猜测可能的原因

(必填)我花费了 2-4 小时自查,发现可能的原因是:xxxxxx

复现步骤

第一步,

第二步,

第三步,

报错信息

带上必要的截图

将配置放至Nacos后报错Unable to find instance for xxx

把applicaton-local.yaml里的配置移动到Nacos后,gateway就一直报Unable to find instance for xxx,无论是新创建的服务,还是自带的system、infra服务,请大家指导下哪里有错误或者缺少什么步骤

基本信息
ruoyi-vue-pro 版本:1.6.5
操作系统:CentOS 7
数据库:MySQL5.7
你猜测可能的原因
(必填)我花费了 2-4 小时自查,发现可能的原因是:未知

复现步骤
第一步,我新建的namespace,创建了 lighting-server配置(lighting-server是spring.application.name),里面的配置是把application-local.yaml里的配置复制进来,和system服务的配置基本一样
image

第二步,在bootstrap-local.yaml里修改namespace为创建的namesapce的id
修改bootstrap-local.yaml里Nacos的namespace

第三步,把原来本地的application-local.yaml的内容清空掉

第四步,把脚本deploy.sh里的启动命令的--spring.profiles.active改为-Dspring.profiles.active
image

第五步,gateway服务配置里的route加上lighting-server的配置
image

报错信息
Unable to find instance for lighting-server
image

多个committer代码规范不统一

首先感谢作者,这是一个非常好的springboot综合项目实例,能从工程中学到springboot,dubbo,微服务的知识。应用分层这篇文章中讲到项目结构的时候,讲到service层和controller层的入参都是DTO,但是实际代码中出现了PO的概念,例如UserAddressAddPO,在这里,应该和DTO是一个意思,建议统一一下

功能增加-不是bug

碰到问题,请在 https://github.com/YunaiV/yudao-cloud/issues 搜索是否存在相似的 issue。

不按照模板提交的 issue,会被系统自动删除。

基本信息

我在自己的项目中,实现了一个字段级别权限管理,这个项目中是否需要添加进来

相关设计
知识库权限业务设计.pdf

  • ruoyi-vue-pro 版本:
  • 操作系统:
  • 数据库:

你猜测可能的原因

系统功能增加

复现步骤

报错信息

查询自己的站内信信息异常提示 “获取不到数据库的类型”

基本信息

  • yudao-cloud版本:1.6.6-snapshot
  • 操作系统:win11
  • 数据库:mysql8.0

你猜测可能的原因

使用nacos配置中心,mybatis组件IdTypeEnvironmentPostProcessor比拉取配置中心先执行,获取不到 DbType,初始化 SQL 静态变量为空,在使用QueryWrapperX的limitN方法的时候 提示,Assert.notNull(SqlConstants.DB_TYPE, "获取不到数据库的类型");

复现步骤

第一步,
使用nacos配置中心
第二步,
点击个人的站内信按钮,报系统异常

报错信息

image

image

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.