-
按执行数据源选择统计日期、分页及分批删除语法。 统一不计数的限量查询入口并迁移 Lambda 查询,补充按类回归测试。
-
新增真实权限切面测试,覆盖负责人、协作权限与 CRM 管理员。
-
新增真实权限切面测试,覆盖负责人、协作权限与 CRM 管理员。
-
启用并修复商品、DIY 页面及模板、交易订单测试,补齐测试表结构与依赖。 增加 CRM 删除日志上下文、优惠券模板已删除场景的回归测试,并对齐相关注释。 关联 #1313、#1315、#1317、#1319、#1321、#1323。
-
[BUG] CRM 删除产品/产品分类:操作日志必然记录失败(日志模板变量未放入上下文)
-
…,删除操作日志必抛 EL1007E 致审计留痕缺失
-
选择性移植 #1306 的业务对象 READ 权限注解,不包含原 PR 的 POM 调整。 8 类业务对象与 8 类访问状态,共 64 项权限 AOP 检查通过。 Refs #1306, #1305
-
精简合同删除、回款期数与提现初始化注释,对齐库存服务计数方法的 Javadoc。
-
[BUG] CRM 产品:产品被「已删除的合同」的明细行拦死,永远删不掉(删合同不清明细、产品引用计数不看合同删除状态)
-
- 迁移依赖坐标、包名和代码生成模板 - 修复全局 Long 转换器不生效导致的导出精度丢失(https://t.zsxq.com/a0w1V)
-
[BUG] CRM:合同金额边界缺口——无明细合同的填写金额被重算覆盖为 0;合同金额字段无负值校验
-
#1221
-
[FIX] CRM:数据权限切面对无登录用户的系统调用放行,修公海自动掉落 Null key 恒失败(A34)
-
[BUG] CRM/ERP:产品删除无引用校验——被业务单据引用的产品可被直接软删,留下悬空引用
-
#1247
-
CRM:修改回款(改金额)保存成功,但操作日志没有这次修改的记录
-
#1219
-
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,原写法后置相仍会空引用。
-
原删除链路只校验产品存在,不校验引用即软删:被引用产品删除后, 引用方明细(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,无明细早返回不引入新空值路径。
-
公海自动掉落定时任务(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。
-
- 新增客户公海、销售漏斗、产品销售、合同汇总等统计分析 - 新增业绩目标设置与业绩达成统计 - 新增客户负责人变更记录能力,并用于公海客户分析 - 完善销售漏斗阶段统计、商机转化率和明细筛选 - 补充产品分类、时间范围、空金额等统计边界处理 - 新增相关前端页面、API 与数据库菜单配置
-
- 新增客户公海、销售漏斗、产品销售、合同汇总等统计分析 - 新增业绩目标设置与业绩达成统计 - 新增客户负责人变更记录能力,并用于公海客户分析 - 完善销售漏斗阶段统计、商机转化率和明细筛选 - 补充产品分类、时间范围、空金额等统计边界处理 - 新增相关前端页面、API 与数据库菜单配置
-
升级 Spring Boot 3.5.15、Netty、Redisson、Tika、Hutool、jsch、AWS SDK、Alipay、weixin-java 等依赖。 - easy-trans 迁移到 org.dromara 并同步 Java import - 新增 system 侧 WxJava 配置类,绕过 httpclient4 provided 依赖问题 - 将 WxJava http-client-type 切换为 HttpComponents - 移除显式 httpclient4 依赖
-
AddressRespVO 加 areaName 字段;AddressConvert 补 convert03 (@Mapping areaId→areaName,复用 convertAreaIdToAreaName/AreaUtils.format), convertList2 自动带出。/member/address/list 返回可读地区名,替代前端展示原始 areaId 编码