-- 修改人:Ld 修改时间:2026-07-28 15:26:14; 销售绩效组件测试数据，合同编号统一使用 TEST-JX- 前缀。
SET NOCOUNT ON;

BEGIN TRY
  BEGIN TRANSACTION;

  DECLARE @待清理项目 TABLE (项目流水号 int PRIMARY KEY);

  INSERT INTO @待清理项目 (项目流水号)
  SELECT 项目流水号
  FROM dbo.PDM_项目名称
  WHERE 合同编号 LIKE N'TEST-JX-%';

  DELETE r
  FROM dbo.财务管理_收款记录 r
  INNER JOIN @待清理项目 p ON r.项目流水号 = p.项目流水号;

  DELETE p
  FROM dbo.PDM_项目名称 p
  INNER JOIN @待清理项目 d ON p.项目流水号 = d.项目流水号;

  DECLARE @测试项目 TABLE
  (
    场景 nvarchar(50) NOT NULL,
    项目流水号 int NOT NULL
  );

  INSERT INTO dbo.PDM_项目名称
  (
    合同编号,
    客户流水号,
    合同金额,
    付款方式流水号,
    客户要求,
    签订日期,
    交货日期,
    签订人,
    合同备注,
    是否生成订单,
    操作日期,
    合同类型,
    操作者,
    税率,
    交货人,
    提交日期,
    收货人员,
    交货期限,
    是否启用,
    通知人,
    通知日期,
    合同协议,
    是否审核,
    未收款项,
    收款日期,
    提成类型
  )
  OUTPUT N'跨月达标模块首单', inserted.项目流水号 INTO @测试项目(场景, 项目流水号)
  VALUES
  (
    N'TEST-JX-202607-A',
    2507,
    100000,
    2,
    N'销售绩效测试：6月回款40%，7月累计达到90%，8月尾款。',
    '2026-06-20',
    '2026-08-20',
    273,
    N'销售绩效测试数据，可按 TEST-JX- 前缀清理。',
    1,
    GETDATE(),
    1,
    273,
    0.13,
    273,
    '2026-06-20',
    N'罗伟',
    N'付款后30日',
    1,
    273,
    GETDATE(),
    N'销售绩效测试合同',
    1,
    0,
    '2026-08-12',
    N'首单提成(模块)'
  );

  INSERT INTO dbo.PDM_项目名称
  (
    合同编号, 客户流水号, 合同金额, 付款方式流水号, 客户要求, 签订日期, 交货日期, 签订人,
    合同备注, 是否生成订单, 操作日期, 合同类型, 操作者, 税率, 交货人, 提交日期, 收货人员,
    交货期限, 是否启用, 通知人, 通知日期, 合同协议, 是否审核, 未收款项, 收款日期, 提成类型
  )
  OUTPUT N'当月达标专机首单', inserted.项目流水号 INTO @测试项目(场景, 项目流水号)
  VALUES
  (
    N'TEST-JX-202607-B', 2506, 200000, 2, N'销售绩效测试：7月全额回款。',
    '2026-07-02', '2026-09-02', 5, N'销售绩效测试数据，可按 TEST-JX- 前缀清理。',
    1, GETDATE(), 2, 5, 0.13, 5, '2026-07-02', N'最高管理员', N'付款后45日',
    1, 5, GETDATE(), N'销售绩效测试合同', 1, 0, '2026-07-21', N'首单提成(专机)'
  );

  INSERT INTO dbo.PDM_项目名称
  (
    合同编号, 客户流水号, 合同金额, 付款方式流水号, 客户要求, 签订日期, 交货日期, 签订人,
    合同备注, 是否生成订单, 操作日期, 合同类型, 操作者, 税率, 交货人, 提交日期, 收货人员,
    交货期限, 是否启用, 通知人, 通知日期, 合同协议, 是否审核, 未收款项, 收款日期, 提成类型
  )
  OUTPUT N'复购当月达标', inserted.项目流水号 INTO @测试项目(场景, 项目流水号)
  VALUES
  (
    N'TEST-JX-202608-C', 2505, 50000, 2, N'销售绩效测试：8月达到90%。',
    '2026-08-03', '2026-09-15', 28, N'销售绩效测试数据，可按 TEST-JX- 前缀清理。',
    1, GETDATE(), 1, 28, 0.13, 28, '2026-08-03', N'章乐红', N'付款后20日',
    1, 28, GETDATE(), N'销售绩效测试合同', 1, 0, '2026-08-28', N'复购提成'
  );

  INSERT INTO dbo.PDM_项目名称
  (
    合同编号, 客户流水号, 合同金额, 付款方式流水号, 客户要求, 签订日期, 交货日期, 签订人,
    合同备注, 是否生成订单, 操作日期, 合同类型, 操作者, 税率, 交货人, 提交日期, 收货人员,
    交货期限, 是否启用, 通知人, 通知日期, 合同协议, 是否审核, 未收款项, 收款日期, 提成类型
  )
  OUTPUT N'退款扣回绩效', inserted.项目流水号 INTO @测试项目(场景, 项目流水号)
  VALUES
  (
    N'TEST-JX-202608-D', 2504, 80000, 2, N'销售绩效测试：8月达标，9月退款扣回。',
    '2026-08-10', '2026-10-10', 273, N'销售绩效测试数据，可按 TEST-JX- 前缀清理。',
    1, GETDATE(), 2, 273, 0.13, 273, '2026-08-10', N'罗伟', N'付款后30日',
    1, 273, GETDATE(), N'销售绩效测试合同', 1, 0, '2026-09-05', N'转介绍提成(专机)'
  );

  INSERT INTO dbo.PDM_项目名称
  (
    合同编号, 客户流水号, 合同金额, 付款方式流水号, 客户要求, 签订日期, 交货日期, 签订人,
    合同备注, 是否生成订单, 操作日期, 合同类型, 操作者, 税率, 交货人, 提交日期, 收货人员,
    交货期限, 是否启用, 通知人, 通知日期, 合同协议, 是否审核, 未收款项, 收款日期, 提成类型
  )
  OUTPUT N'未达90不计绩效', inserted.项目流水号 INTO @测试项目(场景, 项目流水号)
  VALUES
  (
    N'TEST-JX-202609-E', 2503, 120000, 2, N'销售绩效测试：只回款60%，不应进入绩效。',
    '2026-09-01', '2026-11-01', 5, N'销售绩效测试数据，可按 TEST-JX- 前缀清理。',
    1, GETDATE(), 1, 5, 0.13, 5, '2026-09-01', N'最高管理员', N'付款后30日',
    1, 5, GETDATE(), N'销售绩效测试合同', 1, 48000, '2026-09-18', N'转介绍提成(模块)'
  );

  INSERT INTO dbo.财务管理_收款记录 (项目流水号, 金额, 时间, 备注)
  SELECT 项目流水号, 40000, '2026-06-25T10:00:00', N'销售绩效测试：首付款40%' FROM @测试项目 WHERE 场景 = N'跨月达标模块首单'
  UNION ALL SELECT 项目流水号, 50000, '2026-07-10T15:30:00', N'销售绩效测试：累计达到90%' FROM @测试项目 WHERE 场景 = N'跨月达标模块首单'
  UNION ALL SELECT 项目流水号, 10000, '2026-08-12T09:20:00', N'销售绩效测试：尾款10%' FROM @测试项目 WHERE 场景 = N'跨月达标模块首单'
  UNION ALL SELECT 项目流水号, 120000, '2026-07-08T11:00:00', N'销售绩效测试：第一笔回款60%' FROM @测试项目 WHERE 场景 = N'当月达标专机首单'
  UNION ALL SELECT 项目流水号, 80000, '2026-07-21T16:45:00', N'销售绩效测试：第二笔回款40%' FROM @测试项目 WHERE 场景 = N'当月达标专机首单'
  UNION ALL SELECT 项目流水号, 45000, '2026-08-28T14:10:00', N'销售绩效测试：复购达到90%' FROM @测试项目 WHERE 场景 = N'复购当月达标'
  UNION ALL SELECT 项目流水号, 72000, '2026-08-18T10:10:00', N'销售绩效测试：转介绍专机达到90%' FROM @测试项目 WHERE 场景 = N'退款扣回绩效'
  UNION ALL SELECT 项目流水号, -8000, '2026-09-05T13:40:00', N'销售绩效测试：退款扣回绩效' FROM @测试项目 WHERE 场景 = N'退款扣回绩效'
  UNION ALL SELECT 项目流水号, 72000, '2026-09-18T09:35:00', N'销售绩效测试：未达到90%，不计绩效' FROM @测试项目 WHERE 场景 = N'未达90不计绩效';

  COMMIT TRANSACTION;

  SELECT
    t.场景,
    p.项目流水号,
    p.合同编号,
    p.合同金额,
    p.提成类型,
    v.客户名称,
    v.经手人 AS 销售员
  FROM @测试项目 t
  INNER JOIN dbo.PDM_项目名称 p ON t.项目流水号 = p.项目流水号
  LEFT JOIN dbo.PDM_项目名称_视图 v ON p.项目流水号 = v.项目流水号
  ORDER BY p.项目流水号;
END TRY
BEGIN CATCH
  IF @@TRANCOUNT > 0
    ROLLBACK TRANSACTION;

  -- 修改人:Ld 修改时间:2026-07-28 15:26:14; 测试库 SQL Server 兼容旧版本错误抛出方式。
  DECLARE @错误信息 nvarchar(4000);
  DECLARE @错误级别 int;
  DECLARE @错误状态 int;

  SELECT
    @错误信息 = ERROR_MESSAGE(),
    @错误级别 = ERROR_SEVERITY(),
    @错误状态 = ERROR_STATE();

  RAISERROR(@错误信息, @错误级别, @错误状态);
END CATCH;
