-
[ENHANCE]
-
…500(ISSUE-001)- #1223 #1223
-
[FIX] 框架:@EnableAsync 显式 proxyTargetClass=true,修 IM 写操作 getSelf() NoSuchBean 全量 500(ISSUE-001)
-
[ENHANCE] 商城:商品 SKU 五个金额字段补接口层下限校验(>=0)
-
#1219
-
[FIX] CRM:回款计划创建查最大期次改单表查询,修 Unknown column 't.contract_id'(A6)
-
采购入库单数量填 0 或负数也能保存(count 仅 @NotNull、无 >0 约束), 数量为 0 的入库单审核时 updateCountIncrement 生成空 SET 的 UPDATE, MyBatis-Plus 直接抛异常 500(A23)。 两层修复: 1. 建单/改单入口:items 补 @Valid 级联 + count 补 @DecimalMin(0, inclusive=false),0/负数量建单返回参数校验错误; 2. 审核链路:updateCountIncrement 对 count=0 直接跳过(无库存增量), 历史已落库的 0 数量单审核不再 500。
-
商品/SKU 允许填负价格并保存成功(A19):ProductSkuSaveReqVO 的 price/marketPrice/costPrice/firstBrokeragePrice/secondBrokeragePrice 均无下限校验,管理端前端 el-input-number min=0 恰好掩盖后端缺口, 绕过前端(直接接口/H5/第三方)即可写入负价。 给五个价格字段补 @Min(0),后端校验层统一拒绝非正价格(SPU 创建/ 更新经 skus 的 @Valid 级联一并生效)。
-
MPJLambdaWrapperX 会给列拼表别名前缀 t.,但 BaseMapper.selectOne 生成的 FROM 不带别名,单表查询直接 SQL 语法错误(2026-09-21 23:50:39 实抓堆栈: CrmReceivablePlanMapper.selectMaxPeriodByContractId:27 → createReceivablePlan:65 → 500 系统异常)。同文件 selectCount+MPJ 走 MPJ 自带 FROM 别名不受影响, 仅 selectOne 路径改 LambdaQueryWrapperX。
-
仅含 @Async 而无 CGLIB 触发器(如 @Transactional)的 bean(如 ImWebSocketServiceImpl) 被 JDK 动态代理后,getSelf()=SpringUtil.getBean(getClass()) 按实现类取 bean 必抛 NoSuchBeanDefinitionException,致 IM 模块全部写操作事务内通知发送回滚整体 500。 与 @EnableTransactionManagement(proxyTargetClass = true) 口径对齐根治。 验证:修复后 IM 域回归 7 例两轮全绿(jobs 1422-1425/1427-1431); 诊断实证 proxyClass=jdk.proxy2.$Proxy926 仅接口型。
-
- 新增 FlowableUtils 发起人 ID 变量读取方法 - 发起人部门负责人策略优先使用 PROCESS_START_USER_ID - 补充流程变量优先场景单测
-
使用 weixin-java-pay 的内存证书配置,替代临时文件路径,避免系统清理临时文件后导致微信支付不可用;同时使用 Hutool 的 UTF-8 字节转换方法,保持 JDK8 兼容性。
-
- 将 iot:device:message-end 改为 iot:device:message-send - 与各数据库菜单 SQL 保持一致
-
Merge pull request !1588 from 司徒俊杰/master-jdk17