huangzd1997
|
c1922d9e26
|
task-213: 前端共享层导出白名单(node --test 源码扫描:页面不直连 http.ts/axios/不拼 /newApi URL,shared 内部与 bridge 放行,违规 helper 可检出)+ 8 条测试
|
2026-09-05 00:22:06 +08:00 |
|
huangzd1997
|
541e397ca6
|
task-208: JavaApiResponse 包装契约(前端 node --test:success/message/data 解包、失败抛 message、null data、多余字段容忍、LegacyApiSuccess(msg) 兼容、extractErrorMessage 各字段回退)+ 8 条测试
|
2026-09-05 00:21:27 +08:00 |
|
huangzd1997
|
f5d4410063
|
task-211: ArchUnit Controller 边界规则(不直接访问 Mapper/外部 Client,零违规)+ task→业务 依赖防恶化基线
- archunit-junit5(test) 依赖引入一次到位
- Controller 不访问 ..mapper.. / ..client.. 两条规则全绿(探针确认存量零违规)
- task 模块经 *ResultFileJobHandler 等依赖业务 128 处(存量)→ 冻结上限防增长;module 切片存在 collectdata→dedupe→task 环,清零需 Handler 迁移等重构,另行处理
|
2026-09-05 00:18:16 +08:00 |
|
huangzd1997
|
5c63604b5b
|
task-201: 迁移演练 runbook(docs/flyway-migration-drill.md:clean migrate/validate/验证SQL/回滚/锁窗口/校验和/幂等重跑/不动历史)+ 8 条测试
on-DB 的 migrate 执行需在副本库按 runbook 进行(本环境无数据库,仓库内以静态检查+清单兜底)
|
2026-09-05 00:09:37 +08:00 |
|
huangzd1997
|
1b27a3f1ca
|
task-200: 巡检报表任务落地(InspectionSqlReportTask 跑 6 张只读报表 SQL:默认 disabled、分布式锁、单条失败不阻断、只 query)+ 8 条测试
|
2026-09-05 00:08:44 +08:00 |
|
huangzd1997
|
d6b223ba25
|
task-199: 超保留期活跃 job 巡检 SQL(06_over_retention_active_job.sql,RUNNING 超24h 候选,清理走 stuck 扫描)+ 8 条测试
|
2026-09-05 00:06:45 +08:00 |
|
huangzd1997
|
b6cf693e05
|
task-198: 终态任务活跃 job 巡检 SQL(05_terminal_task_active_job.sql)+ 8 条测试
|
2026-09-05 00:06:45 +08:00 |
|
huangzd1997
|
187c123071
|
task-197: 结果缺文件候选巡检 SQL(04_result_missing_file.sql,OSS 对象存在由 Java 反查)+ 8 条测试
|
2026-09-05 00:06:45 +08:00 |
|
huangzd1997
|
402c3e2cb3
|
task-196: 终态任务缺结果巡检 SQL(03_task_missing_result.sql,SUCCESS/FAILED 无结果)+ 8 条测试
|
2026-09-05 00:06:44 +08:00 |
|
huangzd1997
|
7f7090f433
|
task-195: 孤儿结果(payload) 巡检 SQL(02_orphan_result.sql,biz_file_result 无父任务)+ 8 条测试
|
2026-09-05 00:06:44 +08:00 |
|
huangzd1997
|
bcd5879a08
|
task-194: 孤儿 task_file_job 巡检 SQL(01_orphan_job.sql,只读 SELECT 反连无任务/结果;base 提供 8 项静态契约)+ 8 条测试
|
2026-09-05 00:06:44 +08:00 |
|
huangzd1997
|
5688870788
|
task-193: 历史迁移盘点(docs/migration-inventory.md + 只读审计:整数版本 1..108 连续、无重复、识别 V25_1 历史小版本、命名合规、校验和可复算)+ 8 条测试
|
2026-09-05 00:02:57 +08:00 |
|
huangzd1997
|
36463f2119
|
task-192: 迁移规范模板(docs/flyway-migration-template.md,六项必填头注释:目的/影响表数据量/锁表风险/验证SQL/回滚/窗口)+ 8 条测试
|
2026-09-05 00:01:24 +08:00 |
|
huangzd1997
|
75d553f99a
|
task-191: 双实例指标区分回归契约(instanceId 分桶不串、未配置归 unknown、跨实例可聚合、名集合一致)+ 8 条测试
|
2026-09-04 23:53:24 +08:00 |
|
huangzd1997
|
b468750d00
|
task-190: 日志脱敏契约(StructuredLog.maskToken 统一 Token 部分脱敏,ImageVideo maskForLog 委托;URL query/异常消息体不入日志、防注入)+ 8 条测试
|
2026-09-04 23:53:23 +08:00 |
|
huangzd1997
|
4179e0de23
|
task-189: 指标命名一致性契约(aiimage.* 前缀、全小写点分、全量名快照对齐 spec11 §1、无拼写漂移)+ 8 条测试
|
2026-09-04 23:53:22 +08:00 |
|
huangzd1997
|
7967f454ec
|
task-188: 指标标签规范契约(moduleType/instanceId 必带、null 归一 unknown、无用户级标签、磁盘按 path、标签名冻结)+ 8 条测试
|
2026-09-04 23:53:20 +08:00 |
|
huangzd1997
|
7b73a2cf6e
|
task-187: 临时磁盘容量/占用指标契约(tmpdisk.capacity/used gauge,path 标签,可算占用比对接 09 告警)+ 8 条测试
|
2026-09-04 23:48:21 +08:00 |
|
huangzd1997
|
03f5b827e2
|
task-186: 上传耗时/大小/成功率指标契约(upload.duration/size/result)+ 8 条测试
|
2026-09-04 23:48:21 +08:00 |
|
huangzd1997
|
e365fc84f8
|
task-185: file-job.* 指标契约(pending/running/success/failed/retry/duration,分模块/实例)+ 8 条测试
|
2026-09-04 23:48:21 +08:00 |
|
huangzd1997
|
17cfd6902b
|
task-184: task.heartbeat.age 心跳年龄 gauge 契约(新鲜/陈旧/负时钟保护/未写无 meter)+ 8 条测试
|
2026-09-04 23:48:21 +08:00 |
|
huangzd1997
|
0ec4fb3534
|
task-183: task.duration 耗时指标契约(Timer,非负、分模块、名称冻结)+ 8 条测试
|
2026-09-04 23:48:20 +08:00 |
|
huangzd1997
|
0863614e66
|
task-182: task.success/failed/cancelled 终态计数指标契约(aiimage.task.*,分 moduleType/instanceId)+ 8 条测试
|
2026-09-04 23:48:20 +08:00 |
|
huangzd1997
|
a2c60d319f
|
task-181: task.created/running 指标埋点(TaskObservabilityMetrics recorder:created 计数 + running gauge + moduleType/instanceId 标签,名称冻结)+ 8 条测试
- 标准指标名 aiimage.task.created/running(spec11 §1);moduleType/instanceId null 归 unknown;running 不为负
- Micrometer 可选:无注册表降级 debug 日志不抛错;recorder 为唯一接线面,各业务状态流转按 spec 待监控栈就绪后挂载
- 仅新增类与测试,不接调用点,零生产行为变化
|
2026-09-04 23:46:49 +08:00 |
|
huangzd1997
|
39fb23bd16
|
task-180: Worker 日志字段对齐规范(TaskResultFileJobWorker 关键阶段补 stage=/errorType=,保留 [task-file-job] 前缀)+ 8 条测试
- dispatch/success/failure/orphan/heartbeat/requeue/defer/waittxllm/finalize 日志追加规范 stage 字面量
- 失败/孤儿分支追加 errorType={}(exception 类名);保留 jobId/taskId/moduleType 与既有语义,仅消息文本追加、无逻辑改动
- 审计测试锁定字段名一致、阶段字面量白名单、无敏感字段
|
2026-09-04 23:44:39 +08:00 |
|
huangzd1997
|
5fa59680f2
|
task-179: 禁止记录清单审计(语句级扫描 src/main log.*,Token/Cookie/完整body/二进制/凭据/APIKey 白名单校验)+ 8 条测试
- 多行感知扫描:body={}/authorization/Bearer/token 语句必须过 maskChatBody/maskSecretsForLog/maskForLog/toJsonForLog/abbreviate 等脱敏,否则判违规
- Cookie/凭据/API Key/二进制类字段一律不允许出现;LLM 脱敏后的 body 诊断保留(allowed_fields_kept)
- 审计结果:现网 LLM 客户端日志均已脱敏,零裸漏,无需修正;纯扫描可重复
|
2026-09-04 23:40:38 +08:00 |
|
huangzd1997
|
620ee15a48
|
task-178: 日志字段规范落地(StructuredLog 规范字段集+缺失占位+值消毒,字段名冻结)+ 8 条测试
- 规范字段 traceId/taskId/moduleType/stage/submissionId/chunkIndex/chunkTotal/jobId/result/errorType,顺序与 spec11 §2 一致
- format 只输出规范字段、缺失用 "-" 占位、换行/控制字符消毒、超长截断,防日志注入与字段漂移
- 源码锚点断言 Worker(task-file-job)/心跳(task-heartbeat) 代表性日志已带 taskId/moduleType 核心字段;不删现有日志
|
2026-09-04 23:37:50 +08:00 |
|
huangzd1997
|
05da03c5ba
|
task-176: 重试计数与日志字段(IdempotentRetryGuard 观测扩展:WARN 日志字段 + aiimage.http.retry 指标)+ 8 条测试
- 重试/最终失败打 WARN:client/url(去 query)/method/retry/耗时/延迟/原因类名,不打印含敏感信息的异常消息体
- 重试记 aiimage.http.retry 指标(method/client 标签),Micrometer 注册表可选,无注册表静默跳过
- 保留 task-172 原 API(构造器/execute 兼容),原 8 条测试不受影响;守卫仍不接调用点
|
2026-09-04 23:29:13 +08:00 |
|
huangzd1997
|
02cff8ea63
|
task-175: Python 回调/代理超时与重试契约冻结(只读确认,Python 零改动)+ 8 条断言
- 锁定 Python→Java HTTP 面(admin_api._get_backend_java_session/_proxy_backend_java):默认 timeout=10、HTTPAdapter(max_retries=0)、超时/失败转 502
- 断言 Java aiimage.http-client.* 治理不外溢到 Python(非测试 Python 无引用、代理签名超时为字面量)
- 纯测试,不改任何生产 Python 代码
|
2026-09-04 23:25:59 +08:00 |
|
huangzd1997
|
2a2d23e0dc
|
task-174: 连接复用测试(HttpClientConnectionReuseTest2,本机计数 TCP 服务观测真实复用)+ 8 条测试
- 自建最小 HTTP/1.1 keep-alive 计数服务:连续顺序请求复用同一连接、多客户端工厂共享连接池、短暂空闲后复用、顺序突发不新建
- 不同 host 各自建连、非共享池客户端不复用(暴露不复用场景)、并发平息后顺序追加复用既有连接
- 记录平台边界:JDK HTTP/1.1 无多路复用,并发在途各自建连;复用体现在顺序/间歇复用空闲连接
- 纯测试,零生产代码改动,全本地确定性
|
2026-09-04 23:24:26 +08:00 |
|
huangzd1997
|
19121f6239
|
task-173: 超时生效测试(HttpClientTimeoutEffectiveTest,本机慢端点 mock)+ 8 条测试
- 验证 HttpClientPool.requestFactory(readTimeout) 真实管线:慢端点超时内失败、快/预算内响应不误杀、时长随配置缩放、非正值钳制、连接超时生效、默认值生效
- 核实并记录平台边界:JDK 请求超时封顶"到响应头"时长,流式 body 读取不受请求超时约束(不编造总时长封顶断言)
- 纯测试,零生产代码改动,全本地确定性无外部网络
|
2026-09-04 23:22:43 +08:00 |
|
huangzd1997
|
e248b2b935
|
task-172: 幂等重试守卫(仅 GET/HEAD 或显式幂等标记在传输错误时自动重试,次数/退避取自配置并封顶)+ 8 条测试
- IdempotentRetryGuard:isIdempotent/backoffMillis/isTransportError/execute 纯策略组件
- 非幂等(POST 等)不自动重试;退避 2 次幂增长、5s 封顶;总尝试严格受 aiimage.http-client.max-retries 约束防风暴
- 仅新增类与测试,不接调用点,零生产行为变化
|
2026-09-04 23:13:41 +08:00 |
|
huangzd1997
|
c1f03d64d1
|
task-171: 图片下载客户端配置接入(ImageDownloadHttpConfigResolver,download/prefetch 模块级现有配置优先、命名空间兜底)+ 8 条测试
- 真实基线:SimilarAsinImageEmbedder(OkHttp) connect/read=imageDownloadTimeoutSeconds(5s)、call=2×download(10s)、prefetch 1800s
- resolver 提供 connect/read/call/prefetch/maxRetries 访问面,模块级优先、命名空间兜底,不改调用点
- 仅新增类与测试,零生产行为变化
|
2026-09-04 23:10:36 +08:00 |
|
huangzd1997
|
ec23c0d77c
|
task-170: 紫鸟客户端配置接入(ZiniaoHttpConfigResolver 超时/重试读取,read 模块级现有配置优先、命名空间兜底)+ 8 条测试
- resolver 提供 connect/read/call/maxRetries/baseRetryDelay 访问面,不改动 ZiniaoClientImpl 调用点
- read 优先取 aiimage.ziniao.read-timeout-seconds(生产默认 15s,与 requestFactory(15000) 现状一致),未配置回退 aiimage.http-client.*
- 仅新增类与测试,零生产行为变化
|
2026-09-04 23:07:58 +08:00 |
|
huangzd1997
|
5ee99f9441
|
fix(admin): Flask 代理转发 Java 默认携带内部令牌与 operatorId
Build Backend JAR / build (push) Has been cancelled
A1 收敛后 Java 管理接口普遍要求 require* 身份,而浏览器打到 15124 的
请求不带 Java JWT/aiimage_token Cookie,list_shop_manages 等裸代理调用
只转发浏览器 Cookie,被 Java 判未登录,生产后台店铺列表报「加载失败:
未登录」。_proxy_backend_java 默认补 X-Internal-Token(凭 Flask 侧会话
校验通过的管理员身份)+ 自动注入当前操作用户 operatorId,修复同批全部
裸代理调用的 401;显式传身份参数或 use_internal_token=False 可绕过,
供转发浏览器原始 JWT 的场景。新增回归测试锁定默认行为。
|
2026-09-04 16:08:34 +08:00 |
|
huangzd1997
|
05bda8915a
|
feat(admin): 店铺数据重复检查撞款抽屉样式优化与导入测试按钮
Build Backend JAR / build (push) Has been cancelled
- 撞款详情抽屉:上架时间默认降序(晚到早)、去掉列头(按时间升序)小括号、加宽至 760px、
去掉全屏遮罩(底层仍可点击)、抽屉贴到「撞款详情」区块位置而非浏览器顶部
- 修复抽屉 fixed 定位失效:.tab-panel.active 入场动画带 transform 会成为包含块,
打开时把 drawer mask 挂到 body 下恢复视口定位
- 新增导入(新增-测试)/ 导入(删除-测试)按钮与上传弹窗,对应后端端点
/api/admin/shop-data-crawl/duplicate-check-import(ADD=按店名替换基线记录、DELETE=移除该店记录)
- 新增 ShopDataDuplicateCheckImportService 导入服务(复用 WorkbookParser/Aggregator,与扫描共用 Redis 锁)
- 新增 3 个单测:导入替换重聚合、删除移除、无基线报错
- _preview_mock.py 加入 .gitignore(本地预览工具不入库)
|
2026-09-04 12:25:31 +08:00 |
|
huangzd1997
|
8241cd704e
|
feat(admin): A1 管理后台收敛 Java 单后台完整实现并修复 guard 误拦内部令牌
Build Backend JAR / build (push) Has been cancelled
- Java 补齐后台全部迁移差集:shopduplicatecheck 店铺数据重复检查模块(V108 扫描表+查询/扫描服务)、
PinyinAbbrUtil 拼音缩写、ImageHistory 接口调整为内部可用、AdminUser 支持内部令牌操作并放宽列表上限
- Flask 后台 admin_api.py 路由收敛转发 Java、admin.html/admin.js 适配新后台形态
- AdminApiGuardFilter 对可信 X-Internal-Token 放行(controller 自校验兜底),修复客户端仅凭
内部令牌调用 /api/admin/shop-manages/credential 被误拦 401
- 测试:AdminApiGuardFilterTest 补可信/假令牌用例;AdminUserServiceTest 补菜单权限 mock;
shopduplicatecheck 新增查询/聚合/CSV 单测
|
2026-09-04 11:30:09 +08:00 |
|
huangzd1997
|
3420c72c1d
|
fix(oss): 软件版本安装包显式上传公开 client 桶,对齐历史直链布局
Build Backend JAR / build (push) Has been cancelled
生产 Java 未设 AIIMAGE_OSS_BUCKET,默认桶为私有 nanri-ai-images;而 web_config
历史版本全部存于公开 client 桶(oss.aishufu.top/client/nanri-image/versions/...,
桌面端检测更新匿名下载)。原 uploadSoftwareVersionPackage 走默认桶会把新版本写入
私桶导致客户端无法下载。改为显式写 software-version-bucket(新增可配属性,默认
client,env AIIMAGE_OSS_SOFTWARE_VERSION_BUCKET)并保持 nanri-image/versions/ 前缀。
注:本提交含 OssStorageService 上"软件版本上传"方法与早前 readObjectBytesBounded
改动,为软件版本模块(见 ③)的配套存储能力。
|
2026-09-04 10:21:47 +08:00 |
|
huangzd1997
|
64e4c19531
|
feat(admin): Java 补齐后台缺失能力(软件版本/图生视频管理/店铺记录列表)与菜单排序
将 Flask 后台仅本地实现、Java 缺失的模块落为原生端点(替代 15124 本地面,
向"单一 Java 后台、可退役 15124"收敛):
- softwareversion: GET /api/admin/versions、POST /api/admin/version(web_config +
公开桶 nanri-image/versions/ 直链,桌面端"检测更新"同表兼容)
- imagevideo 管理端: GET /api/admin/image-video-tasks、/{taskId}、
POST /download-zip(近3天 IMAGE_VIDEO_WORKFLOW,语义对齐 Flask)
- shopdatacrawl 管理端: GET /api/admin/shop-data-crawl-tasks(按店分组取最新结果,
窗口函数)、POST /download-zip(流式 + X-Archive-*-Count)
- 权限: 菜单同级拖拽排序 POST /column/reorder(事务内按序重排兄弟 sort_order);
PermissionMenuCreate/UpdateRequest 补 snake_case 别名兼容旧控制台 body
以上端点均 requireAdminOrInternal 鉴权;含 PermissionMenuService 早前已改动的
hasAnyAdminMenu 等菜单权限逻辑(本迁移一环)。
|
2026-09-04 10:21:38 +08:00 |
|
huangzd1997
|
bc5d5b3d2e
|
feat(admin): 管理后台页面同源托管到 Java(classpath:/static)并接入 Java 登录
把 Flask web_source/admin.html 与 static/* 拷入 backend-java resources/static,
经 Spring 默认静态映射同源服务于 api.aishufu.top:18080;/static 根相对引用通过
static/static 子目录镜像零改动保持。页面登录改直连 Java POST /login(cookie+
浏览器持久 deviceId),登出走 Java POST /logout。新增 AdminConsoleController:
GET /、/admin、/login、/logout 页面转发,及 /api/admin/current-user、
/current-user/menus(管理员角色,返回旧前端契约的 item/items 形状)。admin.js
增加全局 fetch 响应解包(ApiResponse data 展开且保留 data 键,401 跳登录)与
URL 兼容映射层(把 Flask 别名统一到 Java 规范路径)。
|
2026-09-04 10:21:24 +08:00 |
|
huangzd1997
|
e5909c9977
|
fix(admin): 补齐 /api/admin 方法级鉴权并加兜底过滤器
ShopKey/SkipPriceAsin/QueryAsin/ShopManage/ProductCategory 五个 controller
此前无任何 require* 鉴权,SecurityConfig 全局 permitAll 且 nginx 无 ACL,
公网 18080 上可匿名读写店铺密钥等敏感数据。统一补 requireAdminOrInternal;
其中 ShopManage/SkipPrice/QueryAsin 原先信任调用方传入 operatorId/superAdmin,
改为从已认证 principal 推导,消除传 superAdmin=true 越权扩大数据范围的问题。
新增 AdminApiGuardFilter 对 /api/admin/** 兜底要求有效身份(JWT 或内部令牌),
防止后续新增端点遗漏鉴权再裸奔;支持 admin-guard-enabled/exempt-prefixes 配置。
|
2026-09-04 10:21:12 +08:00 |
|
huangzd1997
|
1474f69c73
|
后台管理菜单改为服务端按权限渲染:修复刷新时先显示全量菜单再折叠的闪烁
Build Backend JAR / build (push) Has been cancelled
- main.py admin_page 调用 _load_current_backend_menu_items 取当前用户权限菜单,
经 render_html 传入模板;Java 权限接口不可用时降级不渲染(避免展示越权菜单)
- admin.html 删除写死的 16 个静态菜单按钮,改为 Jinja2 按权限渲染分组菜单,
渲染成功时 nav 带 data-server-rendered 标记,失败显示轻量占位
- admin.js loadAdminMenus 识别 data-server-rendered 后直接绑定事件并激活,
不再请求 /current-user/menus 重渲染(保留 API 兜底路径)
|
2026-09-04 00:31:04 +08:00 |
|
huangzd1997
|
11dba90780
|
登录页品牌标识换为 logo 图片:auth-brand-mark 与登录卡片展示 logo_thumb.png
Build Backend JAR / build (push) Has been cancelled
|
2026-09-04 00:16:19 +08:00 |
|
huangzd1997
|
92a7a2c478
|
权限回收级联清理:管理员被回收权限后自动清理其直建员工的越权授权
- 保存管理员权限时,若其权限被回收,级联删除其直接创建的员工中超出
该管理员当前有效范围的授权(创建时快照遗留的越权项)
- 只清理越权项,保留员工合法持有的其他授权;超级管理员不受此限制
|
2026-09-04 00:16:18 +08:00 |
|
huangzd1997
|
d0db577a9c
|
后台店铺数据重复检查独立成菜单:删除店铺导入测试、新增撞款详情卡片区
- 删除「店铺导入测试」菜单及全部实现:admin.html 面板、admin.js 逻辑、
admin_api.py 路由/常量/权限映射、Java 默认菜单
- 「店铺数据记录」页内子 tab 移除,只保留店铺数据列表
- 「店铺管理」下新增「店铺数据重复检查」菜单(V106 导入测试菜单保留并新增
V107 清理 + 幂等插入新菜单,Java 清单同步)
- 新面板:筛选/指标卡/店铺上架分布/矩阵表格/撞款详情卡片区(同 ASIN 跨店
上架明细,查看明细开抽屉,上架时间倒序)
- 重复扫描结果改为 MySQL 缓存 + 每日定时扫描(start_duplicate_scan_scheduler)
- 新增 test_admin_shop_data_duplicate_check.py 单元测试
|
2026-09-04 00:16:14 +08:00 |
|
huangzd1997
|
672b9f9b46
|
后台店铺数据重复ASIN:全选移至表头、Tab总数、独立筛选、按ASIN分组表格展示
Build Backend JAR / build (push) Has been cancelled
- 列表全选复选框从工具栏移到表格表头,事件委托处理动态元素
- 重复ASIN Tab 标题加总数(XX 为重复 ASIN 数量)
- 重复ASIN 筛选独立:ASIN/店铺/国家/上架时间(开始+结束),与原店铺数据筛选互不影响
- 后端支持 asin/shop_name/country/date_from/date_to 参数:
行级筛选命中 ASIN 后展示完整记录(含其他店铺,跨店语义更直观)
- 日期文本归一化(支持 2026年8月19日 上午4:34 中文格式)
- 按 ASIN 分组表格展示:ASIN/店铺数/记录条数/品牌/对应店铺/国家/上架时间/操作,
详情展开显示每条记录的店铺/分组/国家/日期/价格/品牌
- 修复 _shop_data_crawl_fetch_result_bytes 兼容 result_id 列别名(生产首个真实调用报 KeyError)
- 新增单测:筛选语义、日期归一化、record_count
|
2026-09-03 09:32:25 +08:00 |
|
huangzd1997
|
417a2bf831
|
后台店铺数据记录页新增 Tab 切换与重复 ASIN 分析;task-169/170 HTTP 客户端配置接入;dedupe/brand 相关改造
Build Backend JAR / build (push) Has been cancelled
- 管理后台:店铺数据记录改为列表分页展示(去任务号/文件列/累计标题,'最新'改'更新时间'),新增'重复 ASIN' Tab 按跨店聚合展示 ASIN/店铺/分组/国家/日期/价格;修复失败/进行中任务被过滤不显示的问题
- task-169: BrandCheckHttpConfigResolver 从 aiimage.http-client.* 读取品牌检查超时/重试(默认同现状、钳制),附 8 条测试
- task-170: surefire 内存调整为 1536m
- dedupe: DedupeRunService 重构(事务边界/进度)、新增 DedupeRunProgressVo、Controller 与结果 VO 调整,PermissionMenuService 相应适配
- brand/dedupe 前端:BrandDedupeTab/BrandPatrolDeleteTab 改造、新增 CountrySelector 组件与 country-options、类型与接口端对齐、测试更新
- 移除无引用文件:backend/static/logo.jpg、prompts/
|
2026-09-03 01:57:41 +08:00 |
|
huangzd1997
|
152ea6eec0
|
下线店铺管理-检测店铺密码功能:后台 UI 按钮/徽标、Python 代理路由、Java 接口与 service 全套移除,V105 迁移删除 biz_shop_credential_check 表及历史记录
Build Backend JAR / build (push) Has been cancelled
|
2026-09-02 16:55:54 +08:00 |
|
huangzd1997
|
664047dbe0
|
修复店铺数据抓取新店铺归档 daily_file 报 user_id 无默认值
线上现象:店铺数据抓取任务 26401 失败,错误
"Field 'user_id' doesn't have a default value",
INSERT 列清单不含 user_id(MyBatis-Plus 对 null 字段跳过该列)。
根因链:
1. V95(97ae8a7)累计文件改为店铺级共享(去 user 维度),
persistDailyAggregation 新建 daily_file 时删掉了 setUserId;
2. 但 V95 只改了唯一键为 (shop_key, business_date),未把 user_id 列改可空;
3. 表列 user_id 仍为 NOT NULL 无默认值 → 新店铺首次插入必报错;
已有 daily_file 行的店铺走 update 分支不受影响,因此只在
新店铺(如 26401)出现。
修复:
- persistDailyAggregation 新建 daily_file 时补回 setUserId(row.getUserId()),
新店铺也写入正确归属;
- V104 迁移把 user_id 改可空,兼容存量/历史数据(保留兼容,不再使用);
- 新增回归断言(新建累计文件必须写入 user_id),
shopdatacrawl 全包 255 测试全绿,双机已部署验证。
|
2026-09-02 14:23:48 +08:00 |
|
huangzd1997
|
1aea4674e3
|
修复货源查询 404 行被过滤且状态列置空:Python 404 的 ASIN 保留导出并标记「ASIN未找到」
线上现象:货源采集任务 26402(1212.xlsx)结果文件中存在 Python 端
404 Not Found 的行没有图,且状态列空白——这些行实际已完成采集但被后端过滤。
根因链:
1. Python 404 行 title/url/图全空 → isMissingRequired 必填校验拦截 →
markRowsFailed(status=FAILED,error 保留 "404 Not Found");
2. isExportableResultRow 对「其它错误需带 title/url/图」的判断把这类 404 行
过滤掉,即使存在也被 isSilentOutputFailure 把状态列置空。
修复:
- 新增 isAsinNotFound 判定(404 / not found / 商品未找到 等文案,大小写不敏感);
- resolveResultStatus 在图片判定后、rawStatus→失败 映射前插入
「ASIN未找到」状态;isExportableResultRow 对 404 行直接放行;
- writeResultWorkbook 状态列 gate 排除 404 行(不再被置空);
- 新增 2 条单元测试(404/中文文案命中、普通技术失败不误判)。
|
2026-09-02 13:47:58 +08:00 |
|