• 采购入库单数量填 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。
    dadiyang authored
     
    Browse Code »
  • 商品/SKU 允许填负价格并保存成功(A19):ProductSkuSaveReqVO 的
    price/marketPrice/costPrice/firstBrokeragePrice/secondBrokeragePrice
    均无下限校验,管理端前端 el-input-number min=0 恰好掩盖后端缺口,
    绕过前端(直接接口/H5/第三方)即可写入负价。
    
    给五个价格字段补 @Min(0),后端校验层统一拒绝非正价格(SPU 创建/
    更新经 skus 的 @Valid 级联一并生效)。
    dadiyang authored
     
    Browse Code »




  • 仅含 @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 仅接口型。
    dadiyang authored
     
    Browse Code »