You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
4.0 KiB

3 days ago
# -*- coding: utf-8 -*-
"""票 05 前置 DB 探查 v2:交割前提 / 提醒样例 / 导入与待发表现状。"""
import json
import pymysql
CONF = dict(host='8.129.84.155', port=3306, user='root',
password='Itc@123456', database='crm', charset='utf8mb4',
autocommit=True, connect_timeout=10)
ADMIN = '739564171091247104'
BUDDY = '744842318024015872'
def q(cur, sql, args=None):
cur.execute(sql, args or ())
return [dict(r) for r in cur.fetchall()]
out = {}
conn = pymysql.connect(**CONF)
try:
cur = conn.cursor(pymysql.cursors.DictCursor)
# 1. admin/BUDDY 用户
out['users'] = q(cur, """
SELECT * FROM crm_auth_user
WHERE id IN (%s, %s) AND deleted = 0""", (ADMIN, BUDDY))
# 2. 部门全量(本地找 leader 列)
out['depts'] = q(cur, "SELECT * FROM sys_dept WHERE deleted = 0 ORDER BY id")
# 3. 全部用户(找潜在销售/总监)
out['all_users'] = q(cur, """
SELECT id, username, account, dept_id, enabled, employment_status, title
FROM crm_auth_user WHERE deleted = 0 ORDER BY id""")
# 4. admin/BUDDY 名下客户分布(交割范围)
out['owner_dist'] = q(cur, """
SELECT owner_user_id, owner_user_name_snapshot, COUNT(*) cnt,
SUM(archive_status = 1) active_cnt
FROM customer WHERE deleted = 0
GROUP BY owner_user_id, owner_user_name_snapshot""")
# 5. 提醒锚点样例
out['anchor_samples'] = q(cur, """
SELECT id, customer_no, customer_name, owner_user_id, archive_status,
last_valid_follow_time, enter_pool_time
FROM customer
WHERE customer_name LIKE '%%提醒%%' OR customer_name LIKE '%%e2c-跟进%%'""")
# 6. customer_pending_notice 现状 + 结构
out['pending_notice_cnt'] = q(cur, "SELECT COUNT(*) cnt FROM customer_pending_notice")
out['pending_notice_rows'] = q(cur, "SELECT * FROM customer_pending_notice LIMIT 5")
out['pending_notice_cols'] = [c['Field'] for c in
q(cur, "SHOW COLUMNS FROM customer_pending_notice")]
# 7. dedup / reminder 单例表
out['dedup_rule_tables'] = q(cur, "SHOW TABLES LIKE '%%dedup%%'")
out['reminder_rule_tables'] = q(cur, "SHOW TABLES LIKE '%%reminder%%'")
for t in out['reminder_rule_tables']:
tn = list(t.values())[0]
out['reminder_rows_' + tn] = q(cur, f"SELECT * FROM {tn}")
# 8. customer_transfer 现状
out['transfers'] = q(cur, """
SELECT id, transfer_no, from_user_id, from_user_name, to_director_id,
to_director_name, reason, status, total_count, assigned_count
FROM customer_transfer ORDER BY id DESC LIMIT 10""")
# 9. seed 商机绑定(经 opportunity_customer 中间表)
out['opp_bind'] = q(cur, """
SELECT o.id, o.opp_name, o.opp_status, o.deleted,
oc.customer_id, oc.customer_role, oc.delete_key,
c.customer_name
FROM opportunity o
JOIN opportunity_customer oc ON oc.opportunity_id = o.id
JOIN customer c ON c.id = oc.customer_id
WHERE c.customer_name LIKE '%%e2c%%'""")
# 10. 交割样例客户
out['transfer_custs'] = q(cur, """
SELECT id, customer_no, customer_name, owner_user_id, archive_status,
last_valid_follow_time
FROM customer WHERE customer_name LIKE '%%e2c-交割%%'""")
# 11. 导入任务表
out['import_tables'] = q(cur, "SHOW TABLES LIKE '%%import%%'")
if any('import_task' in list(t.values())[0] for t in out['import_tables']):
out['import_task_cnt'] = q(cur, "SELECT COUNT(*) cnt FROM customer_import_task")
# 12. 字典:全拉本地过滤(列名未知,防御式)
out['dict_groups'] = q(cur, "SELECT * FROM dict_group WHERE deleted = 0")
out['dict_items_all'] = q(cur, "SELECT * FROM dict_item WHERE deleted = 0")
finally:
conn.close()
with open(r'e:\code\crm-backend-matt\.scratch\customer-e2e\db-scout-heavy.json', 'w', encoding='utf-8') as f:
json.dump(out, f, ensure_ascii=False, indent=1, default=str)
print('OK -> db-scout-heavy.json')