-- 本地测试数据:给「可选推薦人」配可售方案(AMLPortal_AgentUserPlans) -- -- 背景 —— 恢复的 AML-local-dev.bak 里存在一处数据断层: -- · AMLPortal_AgentUserSettings 决定下单页「推薦人」下拉里出现谁(本地为 agent_A/U7D191·HKG、 -- agentTest3/C87654·HKG、agentTest2/D6Y6U0·JPN); -- · AMLPortal_AgentUserPlans 决定该推薦人能卖哪些方案(后端 GetPlanList 按 AgentCode 裁剪)。 -- 两张表零交集:有关联的只有 SalesAdmin / XiaoJunlong,且它们关联的方案全部 IsDeleted=1 -- (上一代旧方案,无 PlanDetail)。结果是**任选一个推薦人,任何行業都买不到东西** -- (BFF 严格模式返回 agentNoPlans,前端红字阻断下单)。 -- -- 本脚本按「不同推薦人可售范围不同」的业务语义补齐关联,供本地验证推薦人过滤链路: -- agent_A (U7D191, HKG) → Standard 12/24(HKG)+ Add Login + jQuota 50/200 -- agentTest3(C87654, HKG) → Starter 12 / NGO 12 / CPA 24(HKG)+ Add Login + jQuota 50 -- agentTest2(D6Y6U0, JPN) → Standard 12(JPN)+ Add Login + jQuota 50 -- -- 幂等:先软删该 agent 已有关联,再插入。仅用于本地开发库,勿用于 dev/stag/prod。 -- -- 执行: -- docker exec -i aml-mssql /opt/mssql-tools18/bin/sqlcmd \ -- -S localhost -U sa -P "Aml@Local2026" -C -d AbpAML -i /dev/stdin < seed-agent-plans.sql SET NOCOUNT ON; DECLARE @agentA uniqueidentifier = (SELECT Id FROM AbpUsers WHERE UserCode = 'U7D191'); DECLARE @agentT3 uniqueidentifier = (SELECT Id FROM AbpUsers WHERE UserCode = 'C87654'); DECLARE @agentT2 uniqueidentifier = (SELECT Id FROM AbpUsers WHERE UserCode = 'D6Y6U0'); IF @agentA IS NULL OR @agentT3 IS NULL OR @agentT2 IS NULL BEGIN RAISERROR('找不到预期的推薦人(U7D191 / C87654 / D6Y6U0),请确认已恢复 AML-local-dev.bak', 16, 1); RETURN; END -- 目标关联:(AgentUserId, PlanId)。PlanDetailId 取该方案当前有效的第一条明细。 DECLARE @want TABLE (AgentUserId uniqueidentifier, PlanId uniqueidentifier); INSERT INTO @want (AgentUserId, PlanId) VALUES -- agent_A · HKG:只卖 Standard 系 (@agentA, '00000000-0000-0000-0051-000000000001'), -- Standard 12 Months (HKG) (@agentA, '00000000-0000-0000-0051-000000000002'), -- Standard 24 Months (HKG) (@agentA, '00000000-0000-0000-0051-000000000013'), -- Add Login (HKG) (@agentA, '00000000-0000-0000-0051-000000000007'), -- jQuota 50 (HKG) (@agentA, '00000000-0000-0000-0051-000000000008'), -- jQuota 200 (HKG) -- agentTest3 · HKG:只卖入门 / NGO / CPA 系(与 agent_A 完全不重叠的基础方案) (@agentT3, '00000000-0000-0000-0051-000000000003'), -- Starter 12 Months (HKG) (@agentT3, '00000000-0000-0000-0051-000000000005'), -- NGO 12 Months (HKG) (@agentT3, '00000000-0000-0000-0051-000000000006'), -- CPA 24 Months (HKG) (@agentT3, '00000000-0000-0000-0051-000000000013'), -- Add Login (HKG) (@agentT3, '00000000-0000-0000-0051-000000000007'), -- jQuota 50 (HKG) -- agentTest2 · JPN:只卖 Standard 12 (@agentT2, '00000000-0000-0000-0051-000000000017'), -- Standard 12 Months (JPN) (@agentT2, '00000000-0000-0000-0051-000000000026'), -- Add Login (JPN) (@agentT2, '00000000-0000-0000-0051-000000000021'); -- jQuota 50 (JPN) -- 幂等:先清掉这三个 agent 的现有关联(软删,保留审计痕迹) UPDATE AMLPortal_AgentUserPlans SET IsDeleted = 1, DeletionTime = SYSUTCDATETIME() WHERE IsDeleted = 0 AND AgentUserId IN (@agentA, @agentT3, @agentT2); INSERT INTO AMLPortal_AgentUserPlans (Id, AgentUserId, PlanId, PlanDetailId, CreationTime, IsDeleted) SELECT NEWID(), w.AgentUserId, w.PlanId, d.Id, SYSUTCDATETIME(), 0 FROM @want w CROSS APPLY ( SELECT TOP 1 pd.Id FROM AMLPortal_PlanDetails pd WHERE pd.PlanId = w.PlanId AND pd.IsDeleted = 0 ORDER BY pd.CreationTime ) d; SELECT u.UserCode, u.UserName, p.NameEN, p.Tag1Code, p.CountryCode FROM AMLPortal_AgentUserPlans a JOIN AbpUsers u ON u.Id = a.AgentUserId JOIN AMLPortal_Plans p ON p.Id = a.PlanId WHERE a.IsDeleted = 0 AND a.AgentUserId IN (@agentA, @agentT3, @agentT2) ORDER BY u.UserCode, p.Tag1Code, p.NameEN;