-
[BUG] 商品:C 端商品列表只传 sortField 不传 sortAsc 恒 500——Boolean 对 null 拆箱
-
[BUG] 拼团:C 端活动列表无排序,新上架活动被挤到后页——app 面 selectPage 缺 orderBy
-
[ENHANCE]
-
[BUG] CRM:合同金额边界缺口——无明细合同的填写金额被重算覆盖为 0;合同金额字段无负值校验
-
[FIX] Excel 框架:导入模板下拉对空字典/空选项源整列跳过+AreaConvert 补写方向(A43,惠及所有模板)
-
[FIX] CRM:数据权限切面对无登录用户的系统调用放行,修公海自动掉落 Null key 恒失败(A34)
-
[BUG] 商品分类:编辑一级类目把"上级分类"选成自己,保存成功且该类目从分类树消失
-
[BUG] HRM:管理端「候选人转员工」恒失败——服务端回填 channelId 与 createEmployee 隐藏字段校验互斥(1050100034)
-
[BUG] CRM/ERP:产品删除无引用校验——被业务单据引用的产品可被直接软删,留下悬空引用
-
[BUG] ERP:采购入库单反审批后订单入库进度不回退——inCount 汇总不按审核状态过滤
-
[BUG] BPM:动态表单必填字段可绕过——OA 请假必填项全留空仍可发起成功,脏单审批时 500
-
CRM:修改回款(改金额)保存成功,但操作日志没有这次修改的记录
-
[ENHANCE]
-
[FIX] 框架:@EnableAsync 显式 proxyTargetClass=true,修 IM 写操作 getSelf() NoSuchBean 全量 500(ISSUE-001)
-
[ENHANCE] 商城:商品 SKU 五个金额字段补接口层下限校验(>=0)
-
[FIX] CRM:回款计划创建查最大期次改单表查询,修 Unknown column 't.contract_id'(A6)
-
getContractById 原 executeBefore=true:模板在方法执行前解析, #receivable/#receivablePlan 等 LogRecordContext 变量此时尚未绑定(方法 内部末尾才 putVariable),取值为 null 抛 SpelEvaluationException EL1007E(2026-09-21 23:50:39 实抓:LogRecordInterceptor:75 log record parse before function exception)。函数只用于日志展示合同名、无前置对比 需求,改后置相取值(与 getAdminUserById 同相,其 #clue 上下文变量后置相 解析正常)。 同修 CRM_RECEIVABLE_UPDATE_SUCCESS 模板变量名:updateReceivable 绑定的 是 oldReceivable 而非 receivable,原写法后置相仍会空引用。
-
接口发起动态表单(formType=10 流程表单)流程时,必填字段未填也能 code=0 发起成功(前后端均漏校验,A51),建成变量缺失的脏实例。 在管理端 API 发起入口(VO 路径)补动态表单必填校验:按表单字段 定义(兼容 field/key 两种字段标识、数组/对象两种 required 标记) 逐一检查变量,缺失即抛新增业务错误 1_009_004_009。 仅校验 VO 路径:内部业务链路(DTO 路径,如 OA 请假只传部分变量) 不经过本校验,避免误伤。
-
原A39修复把 selectListByOrderId 过滤成只查已审核,导致同方法内的超订单数量校验 (inCount>count 抛错)也只算已审核——未审核的超额入库单不再触发拦截,ERP-22 复验时 超额入库被误放行(回归)。现拆成两条口径:inCount 展示用已审核(反审核自然回退), 超量校验用新增 selectListAllByOrderId 查全部入库单,二者互不影响。
-
原删除链路只校验产品存在,不校验引用即软删:被引用产品删除后, 引用方明细(product_id)成悬空引用,订单/合同明细数据不一致 (2026-09-21 23:50:36 实抓:被销售单明细引用产品 DELETE 仍 code=0 放行, 载体 CRM-07/ERP-01 翻用例后预期拒绝)。 - CRM:crm_contract_product / crm_business_product 存在未删引用即拒绝, 新增错误码 1_020_008_003/004。 - ERP:采购订单/入库/退货 + 销售订单/出库/退货 共 6 张业务明细表存在 未删引用即拒绝(库存表为派生数据不纳入),新增错误码 1_030_500_002~007。 引用计数走 @TableLogic 软删过滤,已删明细不阻断。
-
1) CrmContractSaveReqVO.totalPrice 加 @DecimalMin(0):负金额原可直接建单 (2026-09-21 23:50:39 实抓:totalPrice=-100 code=0 放行,载体 CRM-24)。 2) calculateTotalPrice 无产品明细时不再重算覆盖:原逻辑恒以 明细合计-折扣 覆盖 totalPrice,无明细合同(服务类/总额类交易)手工 填写的合同金额被覆写为 0(同实证:10000000.01 落库回显 0)。 有明细路径行为不变(明细合计-折扣)。 discountPercent 本身 @NotNull,无明细早返回不引入新空值路径。
-
新建商品开多规格开关(specType=true)但不传规格列表时,validateSkuList 收集到的 propertyIds 为空集合,getPropertyList 走 selectByIds 生成 IN() 非法 SQL 直接 500(A33)。 补空集合短路:propertyIds 为空时抛新增业务错误 SKU_PROPERTIES_EMPTY (1_008_006_005) 明确拒绝,不再崩到 SQL 层。
-
商品/SKU 允许填负价格并保存成功(A19):ProductSkuSaveReqVO 的 price/marketPrice/costPrice/firstBrokeragePrice/secondBrokeragePrice 均无下限校验,管理端前端 el-input-number min=0 恰好掩盖后端缺口, 绕过前端(直接接口/H5/第三方)即可写入负价。 给五个价格字段补 @Min(0),后端校验层统一拒绝非正价格(SPU 创建/ 更新经 skus 的 @Valid 级联一并生效)。
-
采购入库单数量填 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。
-
更新类目时把 parentId 设成分类自身的 id 可保存成功(一级类目自身 通过'父分类不能是二级分类'校验后放行),形成循环层级(A53); 创建路径父级必须是已存在分类,天然挡死。 updateCategory 补环检测:parentId==id 时抛新增业务错误 CATEGORY_PARENT_IS_SELF (1_008_001_006)。
-
GET /app-api/product/spu/page 只带 sortField、缺 sortAsc(合法但参数 不完整)时,getSortAsc()(Boolean)在 orderBy/三目拆箱处 null 直接 NPE 500(A52),旧版 App/第三方/爬虫都会踩空。 排序逻辑处统一取空安全默认(缺省按升序),三个排序分支共用, 缺参/显式 null 均不再崩。
-
公海自动掉落定时任务(crmCustomerAutoPutPoolJob,ForkJoinPool 线程无登录 用户)→ putCustomerPool → contactService.updateOwnerUserIdByCustomerId (@CrmPermission)→ CrmPermissionAspect.validatePermission → isCrmAdmin() → hasAnyRoles(null) → @Cacheable(user_role_ids, key=#userId) 取值为 null,Spring 6 抛 IllegalArgumentException: Null key,事务回滚, 客户永远掉不进公海(job 日志恒"掉入公海客户 0 个",2026-09-21 23:50:36 实抓全链路堆栈:CrmCustomerServiceImpl:459/476 → CrmPermissionAspect:70 → CrmPermissionUtils:36 → PermissionServiceImpl:261)。 数据权限是按登录用户的访问控制:/admin-api 外部请求必有登录用户, 登录用户为 null 只可能是系统内部可信调用,切面入口直接放行; 用户发起路径行为不变。
-
MPJLambdaWrapperX 会给列拼表别名前缀 t.,但 BaseMapper.selectOne 生成的 FROM 不带别名,单表查询直接 SQL 语法错误(2026-09-21 23:50:39 实抓堆栈: CrmReceivablePlanMapper.selectMaxPeriodByContractId:27 → createReceivablePlan:65 → 500 系统异常)。同文件 selectCount+MPJ 走 MPJ 自带 FROM 别名不受影响, 仅 selectOne 路径改 LambdaQueryWrapperX。
-
导入模板下载恒500有两处独立根因:(1)空字典下拉拼出 $F$1:$F$0 非法区间致 FormulaParseException(已由 SelectSheetWriteHandler 跳过空字典修复);(2)修复(1)后暴露 第二处——bankAreaId 列用 AreaConvert,但 AreaConvert 只实现了 convertToJavaData(读), 未实现 convertToExcelData(写),生成模板写示例数据时抛 UnsupportedOperationException。 现补 convertToExcelData:地区编号经 AreaUtils.format(id,"/") 转全路径,与读方向 parseArea 的 "/" 分隔一致可往返。
-
…ion 500(A43,框架层单点修复惠及所有模板)
-
…未显示」互斥(1050100034)(A41)
-
…is-Plus 按主键升序致最旧在前,新上架活动被挤后页 C 端首页不可见;对齐 admin 面 orderByDesc(id)(A56)
-
仅含 @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 仅接口型。