-- 客户拜访功能扩展:补齐台账/记录页所需的业务字段、更新时间与查询索引 -- 背景:db_init.sql 中 customer_visit 原为 9 字段的极简结构, -- 现按「客户拜访台帐」「客户拜访记录」两份 UI 稿完整落地。 -- 幂等:全部使用 IF NOT EXISTS,可重复执行。 BEGIN; -- 1) 拜访属性 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS visit_type SMALLINT DEFAULT 1; -- 拜访类型:1首访摸排 2方案沟通 3商务二访 4维保回访 5应急巡检 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS visit_mode SMALLINT DEFAULT 1; -- 拜访方式:1现场拜访 2商务拜访 3电话沟通 4线上会议 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS priority SMALLINT DEFAULT 3; -- 优先级:1特急P1 2加急P2 3常规P3 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS subject VARCHAR(128); -- 拜访主题/目的 -- 2) 计划与签到 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS plan_time TIMESTAMPTZ; -- 计划拜访开始时间 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS plan_end_time TIMESTAMPTZ; -- 计划拜访结束时间 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS checkin_time TIMESTAMPTZ; -- 到场签到时间 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS checkin_status SMALLINT DEFAULT 0; -- 签到状态:0未签到 1已签到 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS checkin_lng DECIMAL(10,6); -- 签到经度 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS checkin_lat DECIMAL(10,6); -- 签到纬度 -- 3) 现场信息与意向 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS space_desc VARCHAR(128); -- 客户空间性质/场所描述 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS intent_level SMALLINT; -- 意向评级:1=A高意向 2=B中意向 3=C低意向 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS intent_desc VARCHAR(64); -- 现场意向说明 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS demands VARCHAR(512); -- 诉求痛点(逗号分隔) ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS companion VARCHAR(128); -- 陪同人员 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS reception_person VARCHAR(64); -- 客户接待人 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS reception_title VARCHAR(64); -- 接待人职务 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS reception_phone VARCHAR(20); -- 接待人联系方式 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS result_rating VARCHAR(64); -- 现场成果评级/结论 -- 4) 状态与后续跟进 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS status SMALLINT DEFAULT 0; -- 状态:0待执行 1已完成待复核 2取证待技术复核 3已立项转勘察 4已归档 5已取消 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS next_visit_time DATE; -- 预计下次回访日期 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS next_action VARCHAR(128); -- 下一步行动目标 -- 5) 现场照片(对象存储 key 的 JSON 数组字符串) ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS photos VARCHAR(1024); -- 现场照片对象key(JSON数组字符串) -- 6) 工程关联 ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS survey_order_id BIGINT; -- 关联勘察单ID ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS project_no VARCHAR(64); -- 关联工程编号 -- 7) 更新时间(Sequelize 实体已开启 updated_at,缺列会导致写入失败) ALTER TABLE customer_visit ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); -- 8) 字段注释 COMMENT ON COLUMN customer_visit.visit_type IS '拜访类型:1首访摸排 2方案沟通 3商务二访 4维保回访 5应急巡检'; COMMENT ON COLUMN customer_visit.visit_mode IS '拜访方式:1现场拜访 2商务拜访 3电话沟通 4线上会议'; COMMENT ON COLUMN customer_visit.priority IS '优先级:1特急P1 2加急P2 3常规P3'; COMMENT ON COLUMN customer_visit.subject IS '拜访主题/目的'; COMMENT ON COLUMN customer_visit.plan_time IS '计划拜访开始时间'; COMMENT ON COLUMN customer_visit.plan_end_time IS '计划拜访结束时间'; COMMENT ON COLUMN customer_visit.checkin_time IS '到场签到时间'; COMMENT ON COLUMN customer_visit.checkin_status IS '签到状态:0未签到 1已签到'; COMMENT ON COLUMN customer_visit.checkin_lng IS '签到经度'; COMMENT ON COLUMN customer_visit.checkin_lat IS '签到纬度'; COMMENT ON COLUMN customer_visit.space_desc IS '客户空间性质/场所描述'; COMMENT ON COLUMN customer_visit.intent_level IS '意向评级:1=A高意向 2=B中意向 3=C低意向'; COMMENT ON COLUMN customer_visit.intent_desc IS '现场意向说明'; COMMENT ON COLUMN customer_visit.demands IS '诉求痛点(逗号分隔)'; COMMENT ON COLUMN customer_visit.companion IS '陪同人员'; COMMENT ON COLUMN customer_visit.reception_person IS '客户接待人'; COMMENT ON COLUMN customer_visit.reception_title IS '接待人职务'; COMMENT ON COLUMN customer_visit.reception_phone IS '接待人联系方式'; COMMENT ON COLUMN customer_visit.result_rating IS '现场成果评级/结论'; COMMENT ON COLUMN customer_visit.status IS '状态:0待执行 1已完成待复核 2取证待技术复核 3已立项转勘察 4已归档 5已取消'; COMMENT ON COLUMN customer_visit.next_visit_time IS '预计下次回访日期'; COMMENT ON COLUMN customer_visit.next_action IS '下一步行动目标'; COMMENT ON COLUMN customer_visit.photos IS '现场照片对象key(JSON数组字符串)'; COMMENT ON COLUMN customer_visit.survey_order_id IS '关联勘察单ID'; COMMENT ON COLUMN customer_visit.project_no IS '关联工程编号'; COMMENT ON COLUMN customer_visit.updated_at IS '更新时间'; -- 9) 查询索引(台账按状态、计划时间过滤与排序) CREATE INDEX IF NOT EXISTS idx_visit_status ON customer_visit (status); CREATE INDEX IF NOT EXISTS idx_visit_plan_time ON customer_visit (plan_time); -- 10) 更新时间触发器(与 customer 等表保持一致的库级约定) DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trg_customer_visit_updated_at') THEN CREATE TRIGGER trg_customer_visit_updated_at BEFORE UPDATE ON customer_visit FOR EACH ROW EXECUTE FUNCTION trigger_set_updated_at(); END IF; END $$; COMMIT;