20261030_qqflow_multi_corp_routing.sql 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. -- =====================================================================
  2. -- qqflow 企微通知/免登多企业支持:企业 agent_id 与用户 corp_id 维度
  3. --
  4. -- 执行库:qqflow 审批引擎库(qqflowengine)
  5. --
  6. -- 背景:每个商户是独立企微企业。qqflow 发通知/免登固定走第一条授权企业
  7. -- (五菱汽车)的 token + 全局 agent-id,导致其他商户的审批人
  8. -- 收不到通知(81013 user & party & tag all invalid)、点进 H5 免登失败。
  9. -- 本次为「企业」补 agent_id(代开发各企业应用 agentid 不同)、
  10. -- 为「用户」补 corp_id(归属企业,发送时按企业路由 token + agentid)。
  11. --
  12. -- 说明:
  13. -- · 企业表复用现有 enterprise_wechat_corp(授权回调自动写行),不新建;
  14. -- · sys_user.corp_id 为空 → 回退默认授权企业(第一条 = 五菱汽车),
  15. -- 存量数据零迁移即可保持原行为;
  16. -- · 新企业授权回调(create_auth)会在代码发布后自动写入 agent_id;
  17. -- · 脚本幂等:条件式加列 + 条件式回填,可重复执行。
  18. -- =====================================================================
  19. -- 执行前确认当前库:必须是 qqflowengine。
  20. SELECT DATABASE() AS current_database;
  21. -- -------------------------------------------------------------------
  22. -- 1) enterprise_wechat_corp 增加 agent_id(代开发应用在该企业内的 agentid)
  23. -- -------------------------------------------------------------------
  24. SET @hasCorpAgentId = (SELECT COUNT(*) FROM information_schema.COLUMNS
  25. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'enterprise_wechat_corp'
  26. AND COLUMN_NAME = 'agent_id');
  27. SET @ddlCorpAgentId = IF(@hasCorpAgentId = 0,
  28. 'ALTER TABLE `enterprise_wechat_corp` ADD COLUMN `agent_id` INT NULL COMMENT ''代开发应用在该企业内的 agentid(各企业不同);为空回退全局 enterprice-wechat.agent-id'' AFTER `corp_name`',
  29. 'SELECT ''skip: agent_id 已存在'' AS upgrade_result');
  30. PREPARE stmt_corp_agent_id FROM @ddlCorpAgentId;
  31. EXECUTE stmt_corp_agent_id;
  32. DEALLOCATE PREPARE stmt_corp_agent_id;
  33. -- -------------------------------------------------------------------
  34. -- 2) sys_user 增加 corp_id(用户归属企微企业)
  35. -- -------------------------------------------------------------------
  36. SET @hasUserCorpId = (SELECT COUNT(*) FROM information_schema.COLUMNS
  37. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sys_user'
  38. AND COLUMN_NAME = 'corp_id');
  39. SET @ddlUserCorpId = IF(@hasUserCorpId = 0,
  40. 'ALTER TABLE `sys_user` ADD COLUMN `corp_id` VARCHAR(64) NULL COMMENT ''所属企微企业 corp_id;为空回退默认授权企业'' AFTER `wecom_user_id`',
  41. 'SELECT ''skip: corp_id 已存在'' AS upgrade_result');
  42. PREPARE stmt_user_corp_id FROM @ddlUserCorpId;
  43. EXECUTE stmt_user_corp_id;
  44. DEALLOCATE PREPARE stmt_user_corp_id;
  45. -- -------------------------------------------------------------------
  46. -- 3) 回填:存量授权企业补 agent_id(全局配置 1000136 即五菱汽车的 agentid)
  47. -- -------------------------------------------------------------------
  48. UPDATE enterprise_wechat_corp
  49. SET agent_id = 1000136
  50. WHERE corp_id = 'wpU17nDAAANKJiASPpuci_9pBEh2Nnow'
  51. AND agent_id IS NULL;
  52. -- -------------------------------------------------------------------
  53. -- 4) 回填:存量 qqflow 用户的 corp_id
  54. -- 数据来源:wl-scrm 库 qqflow_user_map JOIN wxcp_member
  55. -- (2026-10-30 生产实际数据,见校验语句核对)
  56. -- -------------------------------------------------------------------
  57. UPDATE sys_user
  58. SET corp_id = 'wpU17nDAAANKJiASPpuci_9pBEh2Nnow' -- 五菱汽车
  59. WHERE id = 16
  60. AND corp_id IS NULL;
  61. UPDATE sys_user
  62. SET corp_id = 'wpU17nDAAAdkW4OnezBiL6LVaPZ95NDQ' -- 五菱新事业
  63. WHERE id = 20
  64. AND corp_id IS NULL;
  65. -- =====================================================================
  66. -- 5) 校验
  67. -- =====================================================================
  68. -- 5.1 企业:应至少 1 行,五菱汽车行 agent_id=1000136
  69. SELECT id, corp_id, corp_name, agent_id, permanent_code IS NOT NULL AS has_permanent_code
  70. FROM enterprise_wechat_corp
  71. ORDER BY id;
  72. -- 5.2 用户:id=20(scrm_* 五菱新事业审批人)corp_id 应为 wpU17nDAAAdkW4OnezBiL6LVaPZ95NDQ
  73. SELECT id, username, real_name, wecom_user_id, corp_id
  74. FROM sys_user
  75. WHERE id IN (16, 20);