# 2026-08-01 工作记录 ## 订单自动取消改造:超时时间改为后台「订单设置」驱动 ### 需求 自动取消未付款订单的超时时间,需由管理后台「商城设置 → 订单设置 → 未付款自动关闭」控制;设置为 0 分钟 = 不自动取消。 ### 改造要点(已全部落地) - 后台设置存于 `ShopSetting` 表 `setting_key='shop_order'` 的 JSON 中,字段 `orderAutoCloseMins`(前端 order.vue 已支持保存)。 - 新增 `ShopSettingService.getOrderAutoCloseMinutes()`:参照 `getSalesAccumulateType()` 写法,从 `getCategoryValues("order")` 读 `orderAutoCloseMins`;0=禁用(合法返回);负数/读取失败兜底 30(常量 `DEFAULT_AUTO_CLOSE_MINUTES=30`)。 - `OrderAutoCancelTask.cancelExpiredOrders()`:先读 DB,`==0` 直接 return(全局禁用,含租户特殊配置 tenantConfigs 一起跳过);`>0` 用它替换原先 YAML 的 `defaultTimeoutMinutes` 传给 `findExpiredUnpaidOrders`。 - `OrderConfigProperties.AutoCancel.defaultTimeoutMinutes` 标 `@Deprecated`,仅作兜底。 - 前端 `order.vue`:`orderAutoCloseMins` 的 `min` 由 1 改 0,placeholder/文案/校验提示改为「0 表示不自动取消」。 ### 设计决策(用户已确认) 1. DB 未配置/异常兜底 = 30 分钟(与历史默认一致) 2. 现状 YAML `tenantConfigs`(租户特殊超时)保留不做改造;0=全局禁用时 tenantConfigs 也不执行 3. 不引入缓存,定时任务每次查一次 DB(开销极小),改后台 1~5 分钟内生效 4. 前端交互全部调整(min=0 + 文案 + 校验) ### 涉及文件 - JAVA: `ShopSettingService.java`、`ShopSettingServiceImpl.java`、`task/OrderAutoCancelTask.java`、`config/OrderConfigProperties.java` - 前端: `src/views/shop/shopSetting/components/order.vue` ### 未做 - 未编译验证(本地无 maven/mvnw 不可用);改动为标准增量,已逐文件核对语法。 - SQL / 取消逻辑 / 库存回退 / 优惠券退还 / 销量回滚 全部未动。