feat(customer): 新增ICC客户信息同步功能 - OAuth2密码模式鉴权拉取org_base客户、按icc_code幂等upsert写入并记录icc_sync_log,注册每10分钟定时任务;客户档案管理页新增手动'同步客户'按钮(POST /api/customers/sync/icc),同步后自动刷新列表与统计;customer表新增icc_code字段及唯一索引,同步db_seed与设计文档

This commit is contained in:
wk authored and trae-solo-agent committed 2026-10-23 18:20:25 +08:00
1 parent be91d04431
commit 9d3bb13ecf
24 files changed
+1159 -5

No files matched your search

+3
View File
@@ -191,6 +191,7 @@ DROP TABLE IF EXISTS customer CASCADE;
CREATE TABLE customer (
id BIGSERIAL PRIMARY KEY,
customer_no VARCHAR(64) NOT NULL UNIQUE,
icc_code VARCHAR(64),
customer_name VARCHAR(128) NOT NULL,
province VARCHAR(64),
city VARCHAR(64),
@@ -209,6 +210,7 @@ CREATE TABLE customer (
COMMENT ON TABLE customer IS '客户信息表';
COMMENT ON COLUMN customer.id IS '自增主键';
COMMENT ON COLUMN customer.customer_no IS '客户业务编号(KH+YYYYMMDD+3位序号)';
COMMENT ON COLUMN customer.icc_code IS 'ICC客户编码(ICC平台 orgCode,同步来源)';
COMMENT ON COLUMN customer.customer_name IS '客户名称';
COMMENT ON COLUMN customer.province IS '省';
COMMENT ON COLUMN customer.city IS '市';
@@ -227,6 +229,7 @@ CREATE INDEX idx_customer_name ON customer (customer_name);
CREATE INDEX idx_customer_salesman ON customer (salesman_id);
CREATE INDEX idx_customer_status ON customer (status);
CREATE INDEX idx_customer_region ON customer (province, city, district);
CREATE UNIQUE INDEX uk_customer_icc_code ON customer (icc_code);
CREATE TRIGGER trg_customer_updated_at BEFORE UPDATE ON customer
FOR EACH ROW EXECUTE FUNCTION trigger_set_updated_at();
+8
View File
@@ -404,6 +404,14 @@ INSERT INTO sys_job (job_key, job_name, cron_expression, params, retry_times, re
'从 ICC 平台拉取智电改造线路并按 line_code 幂等 upsert(默认每 10 分钟)')
ON CONFLICT (job_key) DO NOTHING;
-- ------------------------------------------------------------
-- 10b. 客户信息同步任务种子(sys_job,按 job_key 幂等;默认每 10 分钟)
-- ------------------------------------------------------------
INSERT INTO sys_job (job_key, job_name, cron_expression, params, retry_times, retry_interval, status, remark) VALUES
('icc_customer_sync', '客户信息同步', '*/10 * * * *', '{}'::jsonb, 1, 300, 1,
'从 ICC 平台拉取 org_base 组织数据并按 iccCode 幂等新增/变更客户(默认每 10 分钟)')
ON CONFLICT (job_key) DO NOTHING;
-- ------------------------------------------------------------
-- 11. 通知规则种子(sys_notice_rule,按 rule_key 幂等;接收对象可在「通知管理」页调整)
-- ------------------------------------------------------------
@@ -0,0 +1,21 @@
-- ICC 客户信息同步(第一阶段):
-- 1) 幂等新增 customer.icc_code 列(ICC 平台 orgCode,作为 ICC 同步的幂等匹配键)
-- 2) 幂等创建唯一索引 uk_customer_icc_code(icc_code 可空,PostgreSQL 下多个 NULL 不冲突)
BEGIN;
-- ------------------------------------------------------------
-- 1) 新增列 icc_code(可空,幂等;与 db_init.sql / customer.entity.ts 保持一致)
-- ------------------------------------------------------------
ALTER TABLE customer ADD COLUMN IF NOT EXISTS icc_code VARCHAR(64);
-- ------------------------------------------------------------
-- 2) 唯一索引(icc_code 可空,PostgreSQL 中多个 NULL 不冲突,唯一索引安全)
-- ------------------------------------------------------------
CREATE UNIQUE INDEX IF NOT EXISTS uk_customer_icc_code ON customer (icc_code);
-- ------------------------------------------------------------
-- 3) 列注释
-- ------------------------------------------------------------
COMMENT ON COLUMN customer.icc_code IS 'ICC客户编码(ICC平台 orgCode,同步来源)';
COMMIT;