七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s
This commit is contained in:
26
migrations/000182_add_shop_client_login_disabled.down.sql
Normal file
26
migrations/000182_add_shop_client_login_disabled.down.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
BEGIN;
|
||||
|
||||
-- 已启用限制的店铺属于有效配置事实,存在时禁止删列回滚。
|
||||
DO $$
|
||||
BEGIN
|
||||
IF to_regclass('tb_shop') IS NULL
|
||||
OR NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_attribute
|
||||
WHERE attrelid = to_regclass('tb_shop')
|
||||
AND attname = 'client_login_disabled'
|
||||
AND NOT attisdropped
|
||||
) THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
LOCK TABLE tb_shop IN ACCESS EXCLUSIVE MODE;
|
||||
IF EXISTS (SELECT 1 FROM tb_shop WHERE client_login_disabled = true LIMIT 1) THEN
|
||||
RAISE EXCEPTION 'tb_shop 已存在C端登录限制配置,禁止删列回滚,请保留字段并向前修复';
|
||||
END IF;
|
||||
|
||||
ALTER TABLE tb_shop DROP COLUMN client_login_disabled;
|
||||
END
|
||||
$$;
|
||||
|
||||
COMMIT;
|
||||
5
migrations/000182_add_shop_client_login_disabled.up.sql
Normal file
5
migrations/000182_add_shop_client_login_disabled.up.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- 店铺可独立禁止名下资产发起新的 C 端登录,不影响已有登录令牌。
|
||||
ALTER TABLE tb_shop
|
||||
ADD COLUMN client_login_disabled boolean NOT NULL DEFAULT false;
|
||||
|
||||
COMMENT ON COLUMN tb_shop.client_login_disabled IS '是否禁止该店铺资产发起新的C端登录';
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 回滚每日临期节点扫描索引。
|
||||
DROP INDEX IF EXISTS idx_package_usage_device_expiry_scan;
|
||||
DROP INDEX IF EXISTS idx_package_usage_card_expiry_scan;
|
||||
16
migrations/000183_add_package_expiry_scan_indexes.up.sql
Normal file
16
migrations/000183_add_package_expiry_scan_indexes.up.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
-- 为每日临期节点扫描增加按到期时间预筛的主套餐索引。
|
||||
CREATE INDEX IF NOT EXISTS idx_package_usage_card_expiry_scan
|
||||
ON tb_package_usage (expires_at, iot_card_id)
|
||||
WHERE deleted_at IS NULL
|
||||
AND master_usage_id IS NULL
|
||||
AND refund_id IS NULL
|
||||
AND status IN (1, 2)
|
||||
AND expires_at IS NOT NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_package_usage_device_expiry_scan
|
||||
ON tb_package_usage (expires_at, device_id)
|
||||
WHERE deleted_at IS NULL
|
||||
AND master_usage_id IS NULL
|
||||
AND refund_id IS NULL
|
||||
AND status IN (1, 2)
|
||||
AND expires_at IS NOT NULL;
|
||||
2
migrations/000184_create_wecom_application.down.sql
Normal file
2
migrations/000184_create_wecom_application.down.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
-- 回滚企业微信自建应用安全配置表。
|
||||
DROP TABLE IF EXISTS tb_wecom_application;
|
||||
32
migrations/000184_create_wecom_application.up.sql
Normal file
32
migrations/000184_create_wecom_application.up.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
-- 创建企业微信自建应用安全配置表;凭据仅保存 AES-256-GCM 密文。
|
||||
CREATE TABLE IF NOT EXISTS tb_wecom_application (
|
||||
id bigserial PRIMARY KEY,
|
||||
corp_id varchar(64) NOT NULL,
|
||||
agent_id bigint NOT NULL,
|
||||
name varchar(100) NOT NULL,
|
||||
secret_ciphertext bytea NOT NULL,
|
||||
callback_token_ciphertext bytea NOT NULL,
|
||||
encoding_aes_key_ciphertext bytea NOT NULL,
|
||||
status integer NOT NULL DEFAULT 1,
|
||||
created_by bigint NOT NULL,
|
||||
updated_by bigint NOT NULL,
|
||||
last_connected_at timestamptz,
|
||||
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at timestamptz,
|
||||
CONSTRAINT chk_wecom_application_status CHECK (status IN (0, 1)),
|
||||
CONSTRAINT chk_wecom_application_agent_id CHECK (agent_id > 0)
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_wecom_application_identity
|
||||
ON tb_wecom_application (corp_id, agent_id)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_wecom_application_status
|
||||
ON tb_wecom_application (status, id)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
COMMENT ON TABLE tb_wecom_application IS '企业微信自建应用安全连接配置';
|
||||
COMMENT ON COLUMN tb_wecom_application.secret_ciphertext IS '应用 Secret 的 AES-256-GCM 密文';
|
||||
COMMENT ON COLUMN tb_wecom_application.callback_token_ciphertext IS '回调 Token 的 AES-256-GCM 密文';
|
||||
COMMENT ON COLUMN tb_wecom_application.encoding_aes_key_ciphertext IS '回调 EncodingAESKey 的 AES-256-GCM 密文';
|
||||
8
migrations/000185_add_wecom_member_binding.down.sql
Normal file
8
migrations/000185_add_wecom_member_binding.down.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- 回滚企业微信可见成员快照及账号绑定字段。
|
||||
DROP TABLE IF EXISTS tb_wecom_member;
|
||||
DROP INDEX IF EXISTS uq_account_wecom_identity;
|
||||
|
||||
ALTER TABLE tb_account
|
||||
DROP COLUMN IF EXISTS wecom_name,
|
||||
DROP COLUMN IF EXISTS wecom_userid,
|
||||
DROP COLUMN IF EXISTS wecom_corp_id;
|
||||
36
migrations/000185_add_wecom_member_binding.up.sql
Normal file
36
migrations/000185_add_wecom_member_binding.up.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
-- 增加系统账号企微身份绑定,并保存应用可见成员选择快照。
|
||||
ALTER TABLE tb_account
|
||||
ADD COLUMN IF NOT EXISTS wecom_corp_id varchar(64) NOT NULL DEFAULT '',
|
||||
ADD COLUMN IF NOT EXISTS wecom_userid varchar(64) NOT NULL DEFAULT '',
|
||||
ADD COLUMN IF NOT EXISTS wecom_name varchar(100) NOT NULL DEFAULT '';
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_account_wecom_identity
|
||||
ON tb_account (wecom_corp_id, wecom_userid)
|
||||
WHERE deleted_at IS NULL AND wecom_corp_id <> '' AND wecom_userid <> '';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tb_wecom_member (
|
||||
id bigserial PRIMARY KEY,
|
||||
application_id bigint NOT NULL,
|
||||
corp_id varchar(64) NOT NULL,
|
||||
userid varchar(64) NOT NULL,
|
||||
name varchar(100) NOT NULL,
|
||||
department_ids jsonb NOT NULL DEFAULT '[]'::jsonb,
|
||||
visible boolean NOT NULL DEFAULT true,
|
||||
synced_at timestamptz NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT chk_wecom_member_application_id CHECK (application_id > 0),
|
||||
CONSTRAINT chk_wecom_member_userid CHECK (length(btrim(userid)) > 0)
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_wecom_member_identity
|
||||
ON tb_wecom_member (application_id, userid);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_wecom_member_visible_name
|
||||
ON tb_wecom_member (application_id, visible, name, userid);
|
||||
|
||||
COMMENT ON TABLE tb_wecom_member IS '企业微信应用可见成员的本地选择快照,不作为组织模型';
|
||||
COMMENT ON COLUMN tb_wecom_member.department_ids IS '企微部门 ID 列表,仅用于管理员辨认成员';
|
||||
COMMENT ON COLUMN tb_account.wecom_corp_id IS '绑定的企业微信企业 ID';
|
||||
COMMENT ON COLUMN tb_account.wecom_userid IS '绑定的企业微信成员 userid,入库前统一转为小写';
|
||||
COMMENT ON COLUMN tb_account.wecom_name IS '绑定时的企业微信成员姓名快照';
|
||||
2
migrations/000186_create_wecom_approval_scene.down.sql
Normal file
2
migrations/000186_create_wecom_approval_scene.down.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
-- 回滚企业微信审批场景配置表。
|
||||
DROP TABLE IF EXISTS tb_wecom_approval_scene;
|
||||
29
migrations/000186_create_wecom_approval_scene.up.sql
Normal file
29
migrations/000186_create_wecom_approval_scene.up.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- 创建企业微信审批业务场景与后台模板当前映射配置。
|
||||
CREATE TABLE IF NOT EXISTS tb_wecom_approval_scene (
|
||||
id bigserial PRIMARY KEY,
|
||||
business_type varchar(64) NOT NULL,
|
||||
application_id bigint NOT NULL,
|
||||
template_id varchar(128) NOT NULL,
|
||||
template_name varchar(255) NOT NULL DEFAULT '',
|
||||
control_mapping jsonb NOT NULL,
|
||||
template_snapshot jsonb NOT NULL,
|
||||
template_fingerprint char(64) NOT NULL,
|
||||
status integer NOT NULL DEFAULT 1,
|
||||
last_verified_at timestamptz NOT NULL,
|
||||
created_by bigint NOT NULL,
|
||||
updated_by bigint NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT uq_wecom_approval_scene_business UNIQUE (business_type),
|
||||
CONSTRAINT chk_wecom_approval_scene_business CHECK (business_type IN ('refund_approval', 'offline_recharge_approval')),
|
||||
CONSTRAINT chk_wecom_approval_scene_application CHECK (application_id > 0),
|
||||
CONSTRAINT chk_wecom_approval_scene_status CHECK (status IN (0, 1))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_wecom_approval_scene_application
|
||||
ON tb_wecom_approval_scene (application_id, status);
|
||||
|
||||
COMMENT ON TABLE tb_wecom_approval_scene IS '稳定审批业务类型到企微后台模板和控件的当前映射';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.control_mapping IS '已通过模板详情校验的业务字段、控件 ID、类型及选项 key 映射';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.template_snapshot IS '校验时读取的控件最小快照,不包含审批节点或审批人规则';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.template_fingerprint IS '模板控件最小快照 SHA-256 指纹';
|
||||
5
migrations/000187_add_wecom_approval_submission.down.sql
Normal file
5
migrations/000187_add_wecom_approval_submission.down.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
DROP TABLE IF EXISTS tb_wecom_approval_context;
|
||||
|
||||
ALTER TABLE tb_wecom_application
|
||||
DROP COLUMN IF EXISTS default_creator_name,
|
||||
DROP COLUMN IF EXISTS default_creator_userid;
|
||||
43
migrations/000187_add_wecom_approval_submission.up.sql
Normal file
43
migrations/000187_add_wecom_approval_submission.up.sql
Normal file
@@ -0,0 +1,43 @@
|
||||
-- 增加应用默认审批发起人,并创建企微审批渠道上下文。
|
||||
ALTER TABLE tb_wecom_application
|
||||
ADD COLUMN IF NOT EXISTS default_creator_userid varchar(64) NOT NULL DEFAULT '',
|
||||
ADD COLUMN IF NOT EXISTS default_creator_name varchar(100) NOT NULL DEFAULT '';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tb_wecom_approval_context (
|
||||
id bigserial PRIMARY KEY,
|
||||
approval_instance_id bigint NOT NULL,
|
||||
application_id bigint NOT NULL,
|
||||
business_type varchar(64) NOT NULL,
|
||||
template_id varchar(128) NOT NULL,
|
||||
creator_userid varchar(64) NOT NULL,
|
||||
creator_name varchar(100) NOT NULL,
|
||||
creator_source varchar(16) NOT NULL,
|
||||
control_mapping jsonb NOT NULL,
|
||||
template_snapshot jsonb NOT NULL,
|
||||
template_fingerprint char(64) NOT NULL,
|
||||
submission_status integer NOT NULL DEFAULT 0,
|
||||
sp_no varchar(128) NOT NULL DEFAULT '',
|
||||
last_error varchar(500) NOT NULL DEFAULT '',
|
||||
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT uq_wecom_approval_context_instance UNIQUE (approval_instance_id),
|
||||
CONSTRAINT chk_wecom_approval_context_instance CHECK (approval_instance_id > 0),
|
||||
CONSTRAINT chk_wecom_approval_context_application CHECK (application_id > 0),
|
||||
CONSTRAINT chk_wecom_approval_context_creator CHECK (length(btrim(creator_userid)) > 0),
|
||||
CONSTRAINT chk_wecom_approval_context_creator_source CHECK (creator_source IN ('bound', 'default')),
|
||||
CONSTRAINT chk_wecom_approval_context_submission_status CHECK (submission_status IN (0, 1, 2, 3, 4)),
|
||||
CONSTRAINT chk_wecom_approval_context_mapping CHECK (jsonb_typeof(control_mapping) = 'array'),
|
||||
CONSTRAINT chk_wecom_approval_context_template CHECK (jsonb_typeof(template_snapshot) = 'object')
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_wecom_approval_context_sp_no
|
||||
ON tb_wecom_approval_context (sp_no) WHERE sp_no <> '';
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_wecom_approval_context_recovery
|
||||
ON tb_wecom_approval_context (submission_status, updated_at, id);
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_application.default_creator_userid IS '代理等非企微账号提交业务时使用的默认企微审批发起人 userid';
|
||||
COMMENT ON COLUMN tb_wecom_application.default_creator_name IS '默认企微审批发起人姓名快照';
|
||||
COMMENT ON TABLE tb_wecom_approval_context IS '通用审批实例对应的企业微信提交安全快照与提交结果';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.creator_source IS '企微发起人来源:bound 系统账号绑定,default 应用默认发起人';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.submission_status IS '提交状态:0待提交,1请求处理中,2已提交,3明确失败,4结果未知';
|
||||
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE tb_wecom_approval_context
|
||||
DROP CONSTRAINT IF EXISTS chk_wecom_approval_context_detail_snapshot,
|
||||
DROP COLUMN IF EXISTS last_synced_at,
|
||||
DROP COLUMN IF EXISTS latest_detail_snapshot,
|
||||
DROP COLUMN IF EXISTS latest_sp_status;
|
||||
20
migrations/000188_add_wecom_approval_detail_snapshot.up.sql
Normal file
20
migrations/000188_add_wecom_approval_detail_snapshot.up.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- 增加企业微信审批详情当前快照,供回调同步和后续读取投影复用。
|
||||
ALTER TABLE tb_wecom_approval_context
|
||||
ADD COLUMN IF NOT EXISTS latest_sp_status integer NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS latest_detail_snapshot jsonb,
|
||||
ADD COLUMN IF NOT EXISTS last_synced_at timestamptz;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'chk_wecom_approval_context_detail_snapshot'
|
||||
) THEN
|
||||
ALTER TABLE tb_wecom_approval_context
|
||||
ADD CONSTRAINT chk_wecom_approval_context_detail_snapshot
|
||||
CHECK (latest_detail_snapshot IS NULL OR jsonb_typeof(latest_detail_snapshot) = 'object');
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.latest_sp_status IS '最近一次企微审批详情状态码';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.latest_detail_snapshot IS '最近一次权威企微审批详情快照,不含 access_token';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.last_synced_at IS '最近一次成功获取企微审批详情的时间';
|
||||
@@ -0,0 +1,7 @@
|
||||
-- 回滚企微审批恢复时间字段与索引。
|
||||
DROP INDEX IF EXISTS idx_wecom_approval_context_pending_sync;
|
||||
DROP INDEX IF EXISTS idx_wecom_approval_context_unknown_recovery;
|
||||
|
||||
ALTER TABLE tb_wecom_approval_context
|
||||
DROP COLUMN IF EXISTS last_recovery_at,
|
||||
DROP COLUMN IF EXISTS submission_attempted_at;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- 增加企微审批提交与恢复时间,避免周期恢复覆盖原始提交时间窗。
|
||||
ALTER TABLE tb_wecom_approval_context
|
||||
ADD COLUMN IF NOT EXISTS submission_attempted_at timestamptz,
|
||||
ADD COLUMN IF NOT EXISTS last_recovery_at timestamptz;
|
||||
|
||||
UPDATE tb_wecom_approval_context
|
||||
SET submission_attempted_at = updated_at
|
||||
WHERE submission_attempted_at IS NULL
|
||||
AND submission_status IN (1, 4);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_wecom_approval_context_unknown_recovery
|
||||
ON tb_wecom_approval_context (submission_status, last_recovery_at, id)
|
||||
WHERE submission_status = 4 AND sp_no = '';
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_wecom_approval_context_pending_sync
|
||||
ON tb_wecom_approval_context (last_synced_at, id)
|
||||
WHERE submission_status = 2 AND sp_no <> '';
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.submission_attempted_at IS '最近一次实际领取并准备调用企微提交接口的时间';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.last_recovery_at IS '最近一次结果未知主动恢复尝试时间';
|
||||
@@ -0,0 +1,6 @@
|
||||
-- 回滚员工线下代充值通用审批实例关联。
|
||||
DROP INDEX IF EXISTS uq_agent_recharge_approval_instance;
|
||||
|
||||
ALTER TABLE tb_agent_recharge_record
|
||||
DROP CONSTRAINT IF EXISTS chk_agent_recharge_approval_instance,
|
||||
DROP COLUMN IF EXISTS approval_instance_id;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- 为员工线下代充值关联唯一通用审批实例。
|
||||
ALTER TABLE tb_agent_recharge_record
|
||||
ADD COLUMN IF NOT EXISTS approval_instance_id bigint;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_recharge_approval_instance
|
||||
ON tb_agent_recharge_record (approval_instance_id)
|
||||
WHERE approval_instance_id IS NOT NULL;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'chk_agent_recharge_approval_instance'
|
||||
) THEN
|
||||
ALTER TABLE tb_agent_recharge_record
|
||||
ADD CONSTRAINT chk_agent_recharge_approval_instance
|
||||
CHECK (approval_instance_id IS NULL OR approval_instance_id > 0);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
COMMENT ON COLUMN tb_agent_recharge_record.approval_instance_id IS '员工线下代充值关联的唯一通用审批实例 ID,在线充值为空';
|
||||
6
migrations/000191_add_refund_approval_instance.down.sql
Normal file
6
migrations/000191_add_refund_approval_instance.down.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
-- 回滚退款申请通用审批实例关联。
|
||||
DROP INDEX IF EXISTS uq_refund_request_approval_instance;
|
||||
|
||||
ALTER TABLE tb_refund_request
|
||||
DROP CONSTRAINT IF EXISTS chk_refund_request_approval_instance,
|
||||
DROP COLUMN IF EXISTS approval_instance_id;
|
||||
20
migrations/000191_add_refund_approval_instance.up.sql
Normal file
20
migrations/000191_add_refund_approval_instance.up.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- 为退款申请关联唯一通用审批实例。
|
||||
ALTER TABLE tb_refund_request
|
||||
ADD COLUMN IF NOT EXISTS approval_instance_id bigint;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_refund_request_approval_instance
|
||||
ON tb_refund_request (approval_instance_id)
|
||||
WHERE approval_instance_id IS NOT NULL;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'chk_refund_request_approval_instance'
|
||||
) THEN
|
||||
ALTER TABLE tb_refund_request
|
||||
ADD CONSTRAINT chk_refund_request_approval_instance
|
||||
CHECK (approval_instance_id IS NULL OR approval_instance_id > 0);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
COMMENT ON COLUMN tb_refund_request.approval_instance_id IS '退款申请关联的唯一通用审批实例 ID,存量旧审批记录为空';
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS tb_asset_package_batch_order_task;
|
||||
@@ -0,0 +1,49 @@
|
||||
CREATE TABLE IF NOT EXISTS tb_asset_package_batch_order_task (
|
||||
id bigserial PRIMARY KEY,
|
||||
task_no varchar(50) NOT NULL,
|
||||
package_id bigint NOT NULL,
|
||||
package_code varchar(100) NOT NULL DEFAULT '',
|
||||
package_name varchar(255) NOT NULL DEFAULT '',
|
||||
payment_method varchar(20) NOT NULL,
|
||||
file_name varchar(255) NOT NULL DEFAULT '',
|
||||
storage_key varchar(500) NOT NULL,
|
||||
voucher_keys jsonb NOT NULL DEFAULT '[]'::jsonb,
|
||||
status integer NOT NULL DEFAULT 1,
|
||||
total_count integer NOT NULL DEFAULT 0,
|
||||
success_count integer NOT NULL DEFAULT 0,
|
||||
fail_count integer NOT NULL DEFAULT 0,
|
||||
result_items jsonb NOT NULL DEFAULT '[]'::jsonb,
|
||||
error_message text NOT NULL DEFAULT '',
|
||||
creator_user_type integer NOT NULL DEFAULT 0,
|
||||
creator_shop_id bigint NOT NULL DEFAULT 0,
|
||||
creator_name varchar(100) NOT NULL DEFAULT '',
|
||||
started_at timestamptz,
|
||||
completed_at timestamptz,
|
||||
creator bigint NOT NULL DEFAULT 0,
|
||||
updater bigint NOT NULL DEFAULT 0,
|
||||
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at timestamptz,
|
||||
CONSTRAINT chk_asset_package_batch_order_status CHECK (status IN (1, 2, 3, 4, 5)),
|
||||
CONSTRAINT chk_asset_package_batch_order_payment_method CHECK (payment_method IN ('wallet', 'offline')),
|
||||
CONSTRAINT chk_asset_package_batch_order_counts CHECK (
|
||||
total_count >= 0 AND success_count >= 0 AND fail_count >= 0
|
||||
AND success_count + fail_count <= total_count
|
||||
)
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_asset_package_batch_order_task_no
|
||||
ON tb_asset_package_batch_order_task (task_no)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_asset_package_batch_order_status_created
|
||||
ON tb_asset_package_batch_order_task (status, created_at DESC)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
COMMENT ON TABLE tb_asset_package_batch_order_task IS '单列CSV资产套餐批量订购任务';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.package_id IS '整批统一套餐ID';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.payment_method IS '整批统一支付方式(wallet/offline)';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.storage_key IS '源CSV对象存储Key';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.voucher_keys IS '线下支付凭证对象存储Key列表';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.status IS '任务状态(1待处理,2处理中,3已完成,4已失败,5已取消)';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.result_items IS '逐行成功或失败结果明细';
|
||||
@@ -0,0 +1,7 @@
|
||||
DROP INDEX IF EXISTS idx_device_import_task_operation_type;
|
||||
|
||||
ALTER TABLE tb_device_import_task
|
||||
DROP COLUMN IF EXISTS operator_shop_id,
|
||||
DROP COLUMN IF EXISTS operator_type,
|
||||
DROP COLUMN IF EXISTS target_id,
|
||||
DROP COLUMN IF EXISTS operation_type;
|
||||
@@ -0,0 +1,15 @@
|
||||
-- 扩展既有设备导入任务,承载单列 CSV 批量分配代理或套餐系列。
|
||||
ALTER TABLE tb_device_import_task
|
||||
ADD COLUMN IF NOT EXISTS operation_type VARCHAR(32) NOT NULL DEFAULT 'import',
|
||||
ADD COLUMN IF NOT EXISTS target_id BIGINT,
|
||||
ADD COLUMN IF NOT EXISTS operator_type INT NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS operator_shop_id BIGINT;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_device_import_task_operation_type
|
||||
ON tb_device_import_task(operation_type, created_at DESC)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_device_import_task.operation_type IS '任务业务类型(import=导入设备,assign_shop=分配目标代理,assign_series=设置套餐系列)';
|
||||
COMMENT ON COLUMN tb_device_import_task.target_id IS '批量分配目标店铺或套餐系列ID';
|
||||
COMMENT ON COLUMN tb_device_import_task.operator_type IS '任务创建时操作者类型快照';
|
||||
COMMENT ON COLUMN tb_device_import_task.operator_shop_id IS '任务创建时操作者店铺ID快照';
|
||||
77
migrations/000194_backfill_july_schema_comments.down.sql
Normal file
77
migrations/000194_backfill_july_schema_comments.down.sql
Normal file
@@ -0,0 +1,77 @@
|
||||
-- 回滚七月迭代字段注释补丁,不修改任何表结构或业务数据。
|
||||
|
||||
COMMENT ON COLUMN tb_card_observation_effect.id IS NULL;
|
||||
COMMENT ON COLUMN tb_card_observation_effect.created_at IS NULL;
|
||||
COMMENT ON COLUMN tb_card_observation_effect.updated_at IS NULL;
|
||||
COMMENT ON COLUMN tb_card_observation_effect.deleted_at IS NULL;
|
||||
COMMENT ON COLUMN tb_card_observation_effect.creator IS NULL;
|
||||
COMMENT ON COLUMN tb_card_observation_effect.updater IS NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_application.id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.corp_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.agent_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.name IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.status IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.created_by IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.updated_by IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.last_connected_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.created_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.updated_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_application.deleted_at IS NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_member.id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.application_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.corp_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.userid IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.name IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.visible IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.synced_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.created_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_member.updated_at IS NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.business_type IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.application_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.template_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.template_name IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.status IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.last_verified_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.created_by IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.updated_by IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.created_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.updated_at IS NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.approval_instance_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.application_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.business_type IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.template_id IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.creator_userid IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.creator_name IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.control_mapping IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.template_snapshot IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.template_fingerprint IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.sp_no IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.last_error IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.created_at IS NULL;
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.updated_at IS NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.id IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.task_no IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.package_code IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.package_name IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.file_name IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.total_count IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.success_count IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.fail_count IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.error_message IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator_user_type IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator_shop_id IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator_name IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.started_at IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.completed_at IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.updater IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.created_at IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.updated_at IS NULL;
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.deleted_at IS NULL;
|
||||
77
migrations/000194_backfill_july_schema_comments.up.sql
Normal file
77
migrations/000194_backfill_july_schema_comments.up.sql
Normal file
@@ -0,0 +1,77 @@
|
||||
-- 补齐七月迭代新增表的字段注释,确保数据库结构可直接识别字段业务含义。
|
||||
|
||||
COMMENT ON COLUMN tb_card_observation_effect.id IS '卡观测副作用处理记录ID';
|
||||
COMMENT ON COLUMN tb_card_observation_effect.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tb_card_observation_effect.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN tb_card_observation_effect.deleted_at IS '软删除时间';
|
||||
COMMENT ON COLUMN tb_card_observation_effect.creator IS '创建人账号ID';
|
||||
COMMENT ON COLUMN tb_card_observation_effect.updater IS '更新人账号ID';
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_application.id IS '企业微信应用配置ID';
|
||||
COMMENT ON COLUMN tb_wecom_application.corp_id IS '企业微信企业ID';
|
||||
COMMENT ON COLUMN tb_wecom_application.agent_id IS '企业微信自建应用AgentId';
|
||||
COMMENT ON COLUMN tb_wecom_application.name IS '企业微信应用配置名称';
|
||||
COMMENT ON COLUMN tb_wecom_application.status IS '启用状态:0禁用,1启用';
|
||||
COMMENT ON COLUMN tb_wecom_application.created_by IS '创建人账号ID';
|
||||
COMMENT ON COLUMN tb_wecom_application.updated_by IS '更新人账号ID';
|
||||
COMMENT ON COLUMN tb_wecom_application.last_connected_at IS '最近一次连接成功时间';
|
||||
COMMENT ON COLUMN tb_wecom_application.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tb_wecom_application.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN tb_wecom_application.deleted_at IS '软删除时间';
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_member.id IS '企业微信成员快照ID';
|
||||
COMMENT ON COLUMN tb_wecom_member.application_id IS '所属企业微信应用配置ID';
|
||||
COMMENT ON COLUMN tb_wecom_member.corp_id IS '企业微信企业ID';
|
||||
COMMENT ON COLUMN tb_wecom_member.userid IS '企业微信成员userid';
|
||||
COMMENT ON COLUMN tb_wecom_member.name IS '企业微信成员姓名';
|
||||
COMMENT ON COLUMN tb_wecom_member.visible IS '成员当前是否在应用可见范围内';
|
||||
COMMENT ON COLUMN tb_wecom_member.synced_at IS '最近一次从企业微信同步时间';
|
||||
COMMENT ON COLUMN tb_wecom_member.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tb_wecom_member.updated_at IS '更新时间';
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.id IS '企业微信审批场景配置ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.business_type IS '稳定审批业务类型编码';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.application_id IS '发起审批使用的企业微信应用配置ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.template_id IS '企业微信后台审批模板ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.template_name IS '企业微信审批模板名称快照';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.status IS '启用状态:0禁用,1启用';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.last_verified_at IS '最近一次模板结构校验通过时间';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.created_by IS '创建人账号ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.updated_by IS '更新人账号ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tb_wecom_approval_scene.updated_at IS '更新时间';
|
||||
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.id IS '企业微信审批渠道上下文ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.approval_instance_id IS '关联的通用审批实例ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.application_id IS '提交审批使用的企业微信应用配置ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.business_type IS '提交时冻结的稳定审批业务类型';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.template_id IS '提交时冻结的企业微信审批模板ID';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.creator_userid IS '实际企业微信审批发起人userid';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.creator_name IS '实际企业微信审批发起人姓名快照';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.control_mapping IS '提交时冻结的业务字段与企微控件映射';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.template_snapshot IS '提交时冻结的企微模板控件最小快照';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.template_fingerprint IS '提交时冻结的模板控件快照SHA-256指纹';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.sp_no IS '企业微信审批单号';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.last_error IS '最近一次提交或恢复失败的安全摘要';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tb_wecom_approval_context.updated_at IS '更新时间';
|
||||
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.id IS '资产套餐批量订购任务ID';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.task_no IS '批量订购任务编号';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.package_code IS '整批统一套餐编码快照';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.package_name IS '整批统一套餐名称快照';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.file_name IS '上传的源CSV文件名';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.total_count IS '任务总行数';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.success_count IS '处理成功行数';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.fail_count IS '处理失败行数';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.error_message IS '任务级失败原因';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator_user_type IS '任务创建人账号类型快照';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator_shop_id IS '任务创建人所属店铺ID快照';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator_name IS '任务创建人名称快照';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.started_at IS '任务开始处理时间';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.completed_at IS '任务处理完成时间';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.creator IS '创建人账号ID';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.updater IS '更新人账号ID';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN tb_asset_package_batch_order_task.deleted_at IS '软删除时间';
|
||||
Reference in New Issue
Block a user