Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
ezijing-node-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
ezijing-node-server
Commits
8e3f59a3
提交
8e3f59a3
authored
9月 22, 2026
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 新增数据迁移脚本以统一阶段附件字段并优化流式响应头
上级
4b7d3d0c
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
79 行增加
和
0 行删除
+79
-0
fix_stage_attachment_data.sql
migrations/fix_stage_attachment_data.sql
+76
-0
gateway.service.js
src/services/ai/gateway.service.js
+3
-0
没有找到文件。
migrations/fix_stage_attachment_data.sql
0 → 100644
浏览文件 @
8e3f59a3
-- 阶段附件字段数据迁移(MySQL 8+)
--
-- 背景:各阶段附件字段统一成了 attachment_file_url,其中两个阶段是「两列合并成一列」:
-- project_initiations : application_file_url + argument_file_url → attachment_file_url(合并)
-- project_procurements: winning_notice_file_url + bid_archive_file_url → attachment_file_url(合并)
-- project_contracts : archive_file_url → attachment_file_url(改名)
-- project_acceptances : acceptance_report_url → attachment_file_url(改名)
-- project_list / project_deliveries 原本没有附件字段,只新增,不涉及本文件
--
-- 前置:先执行 fix_project_stage_attachments.sql(它负责 ADD COLUMN attachment_file_url)。
-- 只跑那个的话新列全是 NULL,页面上附件会「消失」——数据还在旧列里,只是没人读。
--
-- 本文件只做数据搬运,不删任何列。旧列原样保留,出问题可以从旧列重来。
-- 幂等:每条 UPDATE 都带「attachment_file_url 为空」条件,重复执行不会重复写入。
--
-- ⚠️ 如果下面的诊断查询报 Unknown column,说明这个库是从最新版 001_init_dms_schema.sql
-- 新建的(没有旧列),本文件不需要执行。诊断在最前面,任何列缺失都会在任何写入之前报错退出。
-- ── 第 1 步:诊断。先跑这一条,看清楚要迁移多少行 ──────────────────────────
SELECT
(
SELECT
COUNT
(
*
)
FROM
project_initiations
WHERE
attachment_file_url
IS
NULL
AND
(
COALESCE
(
application_file_url
,
''
)
>
''
OR
COALESCE
(
argument_file_url
,
''
)
>
''
))
AS
initiation_
待迁移
,
(
SELECT
COUNT
(
*
)
FROM
project_procurements
WHERE
attachment_file_url
IS
NULL
AND
(
COALESCE
(
winning_notice_file_url
,
''
)
>
''
OR
COALESCE
(
bid_archive_file_url
,
''
)
>
''
))
AS
procurement_
待迁移
,
(
SELECT
COUNT
(
*
)
FROM
project_contracts
WHERE
attachment_file_url
IS
NULL
AND
COALESCE
(
archive_file_url
,
''
)
>
''
)
AS
contract_
待迁移
,
(
SELECT
COUNT
(
*
)
FROM
project_acceptances
WHERE
attachment_file_url
IS
NULL
AND
COALESCE
(
acceptance_report_url
,
''
)
>
''
)
AS
acceptance_
待迁移
;
-- ── 第 2 步:改名(一列 → 一列,直接复制)──────────────────────────────────
UPDATE
project_contracts
SET
attachment_file_url
=
archive_file_url
WHERE
attachment_file_url
IS
NULL
AND
COALESCE
(
archive_file_url
,
''
)
>
''
;
UPDATE
project_acceptances
SET
attachment_file_url
=
acceptance_report_url
WHERE
attachment_file_url
IS
NULL
AND
COALESCE
(
acceptance_report_url
,
''
)
>
''
;
-- ── 第 3 步:合并(两列 → 一列,拼成一个 JSON 数组)────────────────────────
-- 两个旧列各存一份文件列表,合并成一个数组。
-- 用 JSON_VALID 过滤:格式不合法的值不参与合并,否则整条语句会因一条脏数据报错中断。
-- 建议先肉眼看一下值:SELECT id, application_file_url, argument_file_url FROM project_initiations
-- WHERE COALESCE(application_file_url,'') > '' OR COALESCE(argument_file_url,'') > '' LIMIT 10;
UPDATE
project_initiations
SET
attachment_file_url
=
JSON_MERGE_PRESERVE
(
IF
(
JSON_VALID
(
application_file_url
),
application_file_url
,
JSON_ARRAY
()),
IF
(
JSON_VALID
(
argument_file_url
),
argument_file_url
,
JSON_ARRAY
())
)
WHERE
attachment_file_url
IS
NULL
AND
(
COALESCE
(
application_file_url
,
''
)
>
''
OR
COALESCE
(
argument_file_url
,
''
)
>
''
);
UPDATE
project_procurements
SET
attachment_file_url
=
JSON_MERGE_PRESERVE
(
IF
(
JSON_VALID
(
winning_notice_file_url
),
winning_notice_file_url
,
JSON_ARRAY
()),
IF
(
JSON_VALID
(
bid_archive_file_url
),
bid_archive_file_url
,
JSON_ARRAY
())
)
WHERE
attachment_file_url
IS
NULL
AND
(
COALESCE
(
winning_notice_file_url
,
''
)
>
''
OR
COALESCE
(
bid_archive_file_url
,
''
)
>
''
);
-- ── 第 4 步:核对。四个数应全为 0(和第 1 步同一个查询)─────────────────────
SELECT
(
SELECT
COUNT
(
*
)
FROM
project_initiations
WHERE
attachment_file_url
IS
NULL
AND
(
COALESCE
(
application_file_url
,
''
)
>
''
OR
COALESCE
(
argument_file_url
,
''
)
>
''
))
AS
initiation_
待迁移
,
(
SELECT
COUNT
(
*
)
FROM
project_procurements
WHERE
attachment_file_url
IS
NULL
AND
(
COALESCE
(
winning_notice_file_url
,
''
)
>
''
OR
COALESCE
(
bid_archive_file_url
,
''
)
>
''
))
AS
procurement_
待迁移
,
(
SELECT
COUNT
(
*
)
FROM
project_contracts
WHERE
attachment_file_url
IS
NULL
AND
COALESCE
(
archive_file_url
,
''
)
>
''
)
AS
contract_
待迁移
,
(
SELECT
COUNT
(
*
)
FROM
project_acceptances
WHERE
attachment_file_url
IS
NULL
AND
COALESCE
(
acceptance_report_url
,
''
)
>
''
)
AS
acceptance_
待迁移
;
src/services/ai/gateway.service.js
浏览文件 @
8e3f59a3
...
@@ -260,6 +260,9 @@ export const streamChatCompletion = async ({ mapping, path, body, reply, signal,
...
@@ -260,6 +260,9 @@ export const streamChatCompletion = async ({ mapping, path, body, reply, signal,
'content-type'
:
response
.
headers
.
get
(
'content-type'
)
||
'text/event-stream; charset=utf-8'
,
'content-type'
:
response
.
headers
.
get
(
'content-type'
)
||
'text/event-stream; charset=utf-8'
,
'cache-control'
:
'no-cache'
,
'cache-control'
:
'no-cache'
,
connection
:
'keep-alive'
,
connection
:
'keep-alive'
,
// nginx / ingress 默认 proxy_buffering on,会把 SSE 攒满缓冲区再一起吐,
// 表现就是「看着像流式、其实是分批到」。这个头让 nginx 对本响应关闭缓冲。
'x-accel-buffering'
:
'no'
,
'x-request-id'
:
reply
.
request
.
id
,
'x-request-id'
:
reply
.
request
.
id
,
})
})
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论