Commit Graph

2586 Commits

Author SHA1 Message Date
YunaiV
3c1748aff1 !208 使用外部中间件时,如:金蝶、东方通 在不重启整个中间件的情况下,二次部署或多个服务同时部署在一个虚拟机下(JVM) IdTypeEnvir… 2025-11-24 11:24:52 +08:00
芋道源码
949ef86bbf !208 使用外部中间件时,如:金蝶、东方通 在不重启整个中间件的情况下,二次部署或多个服务同时部署在一个虚拟机下(JVM) IdTypeEnvir…
Merge pull request !208 from 墨轩/master
2025-11-24 03:22:58 +00:00
YunaiV
187148ee8b fix: 【framework】TimestampLocalDateTimeSerializer 中,使用 ReflectUtil 替代 2025-11-24 11:18:53 +08:00
YunaiV
d0d563ae61 【同步】BOOT 和 CLOUD 的功能(AI) 2025-11-24 11:11:40 +08:00
YunaiV
f881cb74c5 【同步】BOOT 和 CLOUD 的功能(AI) 2025-11-24 11:10:53 +08:00
YunaiV
e98716e526 【同步】BOOT 和 CLOUD 的功能 2025-11-24 10:54:10 +08:00
YunaiV
a901928986 chore:flowable from 7.0.1 to 7.2.0 2025-11-23 17:36:36 +08:00
YunaiV
69e595d62e 【同步】BOOT 和 CLOUD 的功能 2025-11-23 09:07:03 +08:00
YunaiV
a0b7777783 fix:【bpm】LoadBalanced 的 RestTemplate 场景下,影响普通域名的访问,解决 https://gitee.com/zhijiantianya/yudao-cloud/issues/ICY7H3 问题 2025-11-22 16:12:56 +08:00
芋道源码
a5aa2c84e3 !220 回退 'Pull Request !216 : feat(pay,mall-trade): 小程序商品订单详情path配置支持'
Merge pull request !220 from 芋道源码/revert-merge-216-master-jdk17
2025-11-21 13:21:49 +00:00
芋道源码
f63b837300 回退 'Pull Request !216 : feat(pay,mall-trade): 小程序商品订单详情path配置支持' 2025-11-21 13:21:34 +00:00
芋道源码
32260511d9 !216 feat(pay,mall-trade): 小程序商品订单详情path配置支持
Merge pull request !216 from wuKong/feat(pay,mall-trade)-小程序商品订单详情path配置
2025-11-21 13:19:22 +00:00
芋道源码
bb2f5827e9 Merge pull request #273 from cetuer/master-jdk17
fix:【bpm工作流】BpmProcessInstanceCopyServiceImpl抄送时参数顺序错误的问题
2025-11-21 20:33:33 +08:00
wuKong
45603c7132 fix(trade):优化订单详情接口参数处理
- 将同步支付状态参数改为字符串类型以避免空指针异常
- 添加参数非空判断逻辑
- 保留原有 Long 类型订单 ID 查询方式
- 增强接口对不同输入参数的兼容性处理
- 使用 Hutool 工具类进行参数转换与校验
- 维持原接口功能不变的基础上提升健壮性
2025-11-10 17:30:56 +08:00
wuKong
d952cdec59 docs(order): 更新订单详情接口参数说明 2025-11-10 16:34:33 +08:00
wuKong
2d7bad4e98 🎨 feat(trade): 调整订单详情接口支持多种查询方式
- 修改 getOrderDetail 接口参数 id 类型为 String
- 根据 sync 参数决定调用不同的订单查询方法
- 删除冗余的 getOrderDetailByOutTradeNo 接口
- 优化订单支付状态同步逻辑
- 保持原有订单详情返回结构不变
2025-11-10 16:25:39 +08:00
wuKong
534b7e1f73 feat(pay,mall-trade): 小程序商品订单详情path配置支持
- 在 PayOrderApi 中新增 getMerchantOrderIdByPayOrderNo 方法
- 在 PayOrderApiImpl 中实现该方法,调用 service 层逻辑
- 在 PayOrderMapper 中增加 selectByNo 查询方法
- 在 PayOrderService 中定义 getMerchantOrderIdByNo 接口
- 在 PayOrderServiceImpl 中实现 getMerchantOrderIdByNo 业务逻辑
- 支持通过支付订单编号查询对应的商户订单编号feat(trade): 新增通过支付订单编号查询交易订单详情功能
- 在 AppTradeOrderController 中新增 getOrderDetailByOutTradeNo 接口
- 支持微信小程序订单中心跳转到订单详情页面
- 在 TradeOrderQueryService 中定义 getOrderByOutTradeNo 方法
- 在 TradeOrderQueryServiceImpl 中实现该方法
- 通过 PayOrderApi 调用获取商户订单编号
- 根据商户订单编号查询对应的交易订单信息
2025-11-10 11:36:47 +08:00
wuKong
0ec835244d feat(mp): 新增公众号消息模板功能
- 新增消息模板和模板发送记录的增删改查接口
- 新增消息模板和发送记录的分页查询及导出功能
- 新增批量发送模板消息功能
- 新增同步公众号模板功能
- 添加相关数据对象和错误码定义
- 扩展用户分页请求参数支持openid列表查询
- 完善模板消息相关的VO类和转换逻辑
2025-11-05 11:53:06 +08:00
zhangqb
9b891ecf3c fix:【bpm工作流】BpmProcessInstanceCopyServiceImpl抄送时参数顺序错误的问题 2025-10-28 14:18:45 +08:00
芋道源码
d64f4e9343 !211 修改iot中xxljob任务名称重复导致服务启动报错
Merge pull request !211 from huppygo/master-jdk17
2025-10-19 10:36:05 +00:00
YunaiV
2a6b685ed7 (〃'▽'〃) v2025.10 发布:新增工作流的工单打印、优化物联网的场景联动、完善 vben5 的 antd、vben 版本的功能 v2025.10(jdk8/11) 2025-10-12 15:26:08 +08:00
YunaiV
aaaaa77f59 Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud
# Conflicts:
#	pom.xml
#	yudao-dependencies/pom.xml
2025-10-12 15:25:28 +08:00
YunaiV
5ede07de09 (〃'▽'〃) v2025.10 发布:新增工作流的工单打印、优化物联网的场景联动、完善 vben5 的 antd、vben 版本的功能 v2025.10(jdk17/21) 2025-10-12 15:25:09 +08:00
YunaiV
517fb22ecc 【同步】BOOT 和 CLOUD 的功能 2025-10-12 15:19:36 +08:00
YunaiV
909890f68c Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud 2025-10-12 15:13:11 +08:00
YunaiV
1d41aa37c8 【同步】BOOT 和 CLOUD 的功能 2025-10-12 15:11:45 +08:00
huppygo
1618213494 修改iot中xxljob任务名称重复导致服务启动报错
Signed-off-by: huppygo <huppygo@qq.com>
2025-10-11 01:44:54 +00:00
YunaiV
bf7bd49dd2 【同步】BOOT 和 CLOUD 的功能 2025-10-02 18:51:44 +08:00
YunaiV
bf0c7dadc7 【同步】BOOT 和 CLOUD 的功能 2025-10-02 18:51:27 +08:00
YunaiV
25ebe6edef Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud 2025-10-02 17:59:00 +08:00
YunaiV
cd685e2304 【同步】BOOT 和 CLOUD 的功能 2025-10-02 17:58:54 +08:00
YunaiV
4f7a61d8d8 Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud 2025-10-02 17:57:47 +08:00
YunaiV
186bb144c9 【同步】BOOT 和 CLOUD 的功能 2025-10-02 17:57:40 +08:00
YunaiV
dd30e9e111 Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud
# Conflicts:
#	yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java
#	yudao-module-bpm/yudao-module-bpm-server/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java
#	yudao-module-bpm/yudao-module-bpm-server/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java
#	yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleServiceImpl.java
#	yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlSceneRuleAction.java
#	yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherManager.java
#	yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
2025-10-02 17:56:24 +08:00
YunaiV
96c6f184fa 【同步】BOOT 和 CLOUD 的功能 2025-10-02 17:51:59 +08:00
YunaiV
f02c004736 【同步】BOOT 和 CLOUD 的功能 2025-10-02 17:51:49 +08:00
墨轩
17f8047da0 IdTypeEnvironmentPostProcessor.java.
代码优化

Signed-off-by: 墨轩 <8813596+mx990420@user.noreply.gitee.com>
2025-09-24 02:43:31 +00:00
YunaiV
ec3a391981 fix:【framework 框架】确保在 Bean 创建前映射应用请求前缀 2025-09-20 21:50:04 +08:00
芋道源码
fb47ed6c14 !209 fix(web): 确保在 Bean 创建前映射应用请求前缀
Merge pull request !209 from egd/fix-PathMatcher
2025-09-20 13:43:10 +00:00
YunaiV
c5fbd548a8 Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud
# Conflicts:
#	yudao-dependencies/pom.xml
2025-09-20 21:23:26 +08:00
YunaiV
f1167638ce feat:【infra 基础设施】ftp、sftp 库升级与兼容 2025-09-20 21:22:12 +08:00
芋道源码
a660f407d8 !207 feat: ftp/sftp功能优化
Merge pull request !207 from Henry/feture/sftp
2025-09-20 13:15:32 +00:00
YunaiV
4e4dc22740 fix:【iot 物联网】增强 jdk8 的兼容性 2025-09-20 12:14:24 +08:00
YunaiV
09b332ef42 Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud 2025-09-20 12:03:36 +08:00
YunaiV
17e2c10b05 fix:【framework 框架】XXL-Job 多租户任务不生效的问题 2025-09-20 12:00:28 +08:00
YunaiV
aaed2f4827 fix:【ai 大模型】swagger-annotations-jakarta 依赖冲突 2025-09-20 11:03:22 +08:00
egd
4cb9af22a2 fix(web): 确保在 Bean 创建前映射应用请求前缀
场景:
当 app 和 admin 下的接口地址一致时(比如:/system/user/get),需要依赖前缀(admin-api | app-api)来区分,防止 URI 冲突。
问题:
- 当 xss.enable=true 时,会触发 TechXssAutoConfiguration 中 xssJacksonCustomizer 的构建,间接触发 PathMatcher 注入,调用 DelegatingWebMvcConfiguration.configurePathMatch。
- 此时 RequestMappingHandlerMapping 的 mapping 还未加上前缀。
- 当 api-encrypt.enable=true 时,提前注入的 RequestMappingHandlerMapping 没有前缀,导致接口地址重复报错。
解决:
- 不依赖 DelegatingWebMvcConfiguration 的回调顺序。
- 确保即使其他 Bean 提前触发 Mapping 创建时,也能正确加上前缀,避免 URI 冲突。
2025-09-09 09:51:21 +08:00
YunaiV
34c9f1c285 Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud 2025-09-01 13:17:04 +08:00
YunaiV
5211b4e64f chore: mybatis-plus from 3.5.12 to 3.5.14
fix:BaseDO 移除 jdbcType = JdbcType.VARCHAR 避免被转义
2025-09-01 13:16:47 +08:00
温艺伟
f12162e7ff 使用外部中间件时,如:金蝶、东方通 在不重启整个中间件的情况下,二次部署或多个服务同时部署在一个虚拟机下(JVM) IdTypeEnvironmentPostProcessor.setIdType 会将一个IdType对象put进SystemPropertiesPropertySource,而SystemPropertiesPropertySource在整个JVM中是共用的,导致两处问题:
报错信息:org.springframework.core.convert.ConverterNotFoundException:
        No converter found capable of converting from type [com.baomidou.mybatisplus.annotation.IdType] to type [com.baomidou.mybatisplus.annotation.IdType]
    问题一:IdTypeEnvironmentPostProcessor.getIdType 中 environment.getProperty(ID_TYPE_KEY, IdType.class) 获取到了上一次部署应用时的 IdType 对象,而上一次的 IdType 对象,和本次部署时 IdType.class 的类加载器不一致,导致报错;
    问题二:org.springframework.boot.context.properties.bind.BindConverter.convert 中,delegate.canConvert 返回的都是false,最终:throw (failure != null) ? failure : new ConverterNotFoundException(sourceType, targetType);
    原因分析:
    首先 ConfigurableEnvironment
        ConfigurableEnvironment.getProperty(...) 的查找顺序是分层次的:
        1、命令行参数(CommandLinePropertySource,即 --key=value)
        2、Java 系统属性(System.getProperties(),对应 SystemPropertiesPropertySource)
        3、操作系统环境变量(System.getenv(),对应 SystemEnvironmentPropertySource)
        4、application.yml / application.properties(OriginTrackedMapPropertySource)
        5、默认属性(DefaultPropertiesPropertySource)
    其次:Spring 的属性绑定用到了 ConfigurationPropertySource
        ConfigurationPropertySource:
            它是 Spring Boot 2.x 以后引入的抽象,表示配置属性的来源。
            比如:
            .properties / .yml 文件,
            系统属性(System.getProperties()),
            环境变量(System.getenv()),
            甚至 Nacos、Apollo 这样的远程配置中心。
            它统一成 ConfigurationPropertySource 接口,Spring Boot 就能用同一套逻辑去读取配置。
        和 ConfigurableEnvironment 的关系
            ConfigurableEnvironment 内部持有一系列 PropertySource。
            Spring Boot 启动时会把这些 PropertySource 适配成 ConfigurationPropertySource,
            这样属性绑定器(Binder)就可以从中读取配置值。
            也就是说:
            environment.getProperty("my.key") 读出来的值,
            和 Binder 里 ConfigurationPropertySource 提供的值,
            本质上是同一批配置源,只是走的 API 不一样。
        导致的问题:org.springframework.boot.context.properties.bind.BindConverter.convert 的参数:Object source, TypeDescriptor sourceType, TypeDescriptor targetType
            source 是上一次部署时的 IdType 对象
            sourceType 的类加载器 (sourceType.getType().getClassLoader()) 与 targetType 的类加载器 (targetType.getType().getClassLoader())不一致,抛出:ConverterNotFoundException

        org.springframework.boot.context.properties.bind.BindConverter.convert:
        private Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
            ConversionException failure = null;
            for (ConversionService delegate : this.delegates) {
                try {
                    if (delegate.canConvert(sourceType, targetType)) {
                        return delegate.convert(source, sourceType, targetType);
                    }
                }
                catch (ConversionException ex) {
                    if (failure == null && ex instanceof ConversionFailedException) {
                        failure = ex;
                    }
                }
            }
            throw (failure != null) ? failure : new ConverterNotFoundException(sourceType, targetType);
        }
2025-09-01 11:45:37 +08:00