/*
修改人:Ld 修改时间:2026-07-27 12:00:00;
销售绩效与提成比例设置部署脚本，适用于测试库和正式库；正式库不插入测试合同数据。
*/

-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 正式库同步时补充合同提成类型字段。
IF COL_LENGTH(N'dbo.PDM_项目名称', N'提成类型') IS NULL
BEGIN
  ALTER TABLE dbo.PDM_项目名称 ADD 提成类型 nvarchar(50) NULL;
END;
GO

-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 合同编辑保存提成类型。
ALTER PROCEDURE [dbo].[PDM_项目名称_编辑数据]
@项目流水号 int,
@客户流水号 int=null,
@付款方式流水号 int=null,
@交货期限 nvarchar(50)=null,
@客户要求 nvarchar(200)=null,
@操作者 int=null,
@收货人 nvarchar(50)=null,
@签订日期 nvarchar(50)=null,
@税率 float=null,
@合同备注 nvarchar(50)=null,
@提成类型 nvarchar(50)=null
AS
update PDM_项目名称 set 客户流水号=@客户流水号,付款方式流水号=@付款方式流水号,交货期限=@交货期限,操作者=@操作者,客户要求=@客户要求,合同备注=@合同备注,提成类型=@提成类型
,签订日期=@签订日期,税率=@税率,收货人员=@收货人 where 项目流水号=@项目流水号
GO

-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 合同查询视图带出提成类型。
ALTER VIEW [dbo].[PDM_项目名称_视图]
AS
SELECT   CASE WHEN PDM_项目名称.提交日期 IS NULL AND
                PDM_项目名称.是否启用 = 1 THEN '未提交' WHEN PDM_项目名称.是否启用 = 0 THEN '终止执行' WHEN PDM_项目名称.提交日期
                 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND 是否提交 IS NULL
                THEN '未创建' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND 是否提交 = 1 AND
                是否审核 = 0 THEN '未审批' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
                是否提交 = 1 AND 技术审核 = 0 AND 是否审核 = 1 THEN '未投产' WHEN PDM_项目名称.提交日期 IS NOT NULL AND
                PDM_项目名称.是否启用 = 1 AND 是否提交 = 1 AND 技术审核 = 1 AND
                是否审核 = 1 THEN '未审核' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
                是否提交 = 2 THEN '已投产' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
                是否提交 = 3 THEN '生产中' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
                是否提交 = 4 THEN '装配中' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
                是否提交 = 5 THEN '待发货' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
                是否提交 = 6 THEN '已完成' END AS 状态, dbo.PDM_项目名称.合同编号, dbo.客户关系管理系统_客户名称.客户名称,
                dbo.PDM_项目名称.合同金额, dbo.合同管理_付款方式_基础表.付款方式, CASE WHEN CONVERT(varchar(100),
                dbo.PDM_项目名称.交货日期, 23) = '1900-01-01' THEN NULL ELSE CONVERT(varchar(100),
                dbo.PDM_项目名称.交货日期, 23) END AS 交货日期, dbo.PDM_项目名称.合同备注, dbo.PDM_项目名称.提成类型, dbo.PDM_项目名称.操作者,
                CASE WHEN CONVERT(varchar(100), dbo.PDM_项目名称.签订日期, 23) = '1900-01-01' THEN NULL
                ELSE CONVERT(varchar(100), dbo.PDM_项目名称.签订日期, 23) END AS 签订日期, CONVERT(varchar(100),
                dbo.PDM_项目名称.提交日期, 23) AS 提交日期, dbo.PDM_项目名称.是否生成订单, dbo.PDM_项目名称.项目流水号,
                dbo.PDM_项目名称.操作日期, dbo.PDM_项目名称.客户流水号, dbo.人事档案管理_人员名单.姓名 AS 经手人,
                ISNULL(dbo.合同管理_订单信息_基础表.是否提交, 0) AS 是否提交, dbo.PDM_项目名称.合同类型,
                dbo.PDM_项目名称.客户要求, dbo.客户关系管理系统_客户名称.省份流水号, dbo.基础表_省份表.省份,
                CASE WHEN CONVERT(varchar(7), dbo.PDM_项目名称.签订日期, 120) = '1900-01' THEN NULL
                ELSE CONVERT(varchar(7), dbo.PDM_项目名称.签订日期, 120) END AS 签订日期月, 1 AS 条数,
                CASE WHEN CONVERT(varchar(4), dbo.PDM_项目名称.签订日期, 120) = '1900' THEN NULL ELSE CONVERT(varchar(4),
                dbo.PDM_项目名称.签订日期, 120) END AS 签订日期年, dbo.客户关系管理系统_客户名称.地址,
                dbo.客户关系管理系统_客户名称.电话, dbo.客户关系管理系统_客户名称.联系人,
                dbo.客户关系管理系统_客户名称.传真, dbo.PDM_项目机床_视图.机床流水号,
                ISNULL(dbo.PDM_项目是否存在修改.条数, 0) AS 是否修改, CASE WHEN 交货期限 IS NULL
                THEN '' ELSE '付款后' + 交货期限 + '日' END AS 交货期限, CONVERT(nvarchar(50), dbo.PDM_项目名称.税率 * 100)
                + N'%' AS 税率, dbo.PDM_项目名称.交货期限 AS 交货, dbo.PDM_项目名称.是否启用,
                CASE WHEN 项目_合同留存信息_视图.项目流水号 IS NOT NULL THEN 1 ELSE 0 END AS 留存信息,
                CASE WHEN 项目_客户提供资料_视图.项目流水号 IS NOT NULL THEN 1 ELSE 0 END AS 客户资料,
                ISNULL(dbo.PDM_项目是否可删_视图.是否接收, 0) AS 是否接收, dbo.PDM_项目名称.收货人员,
                人事档案管理_人员名单_1.姓名 AS 通知人, CONVERT(varchar(10), dbo.PDM_项目名称.通知日期, 23) AS 通知日期,
                dbo.PDM_项目名称.合同协议, dbo.客户关系管理系统_客户名称.收货人, dbo.PDM_项目名称.是否审核,
                dbo.PDM_项目名称.付款方式流水号, dbo.PDM_项目名称.税率 AS 税率小数, dbo.PDM_项目名称.售后原因,
                dbo.PDM_项目名称.解决方案, dbo.合同管理_订单信息_基础表.订单备注, CASE WHEN 合同金额 = 0 OR
                未收款项 = 0 THEN 0 ELSE CONVERT(int, CONVERT(decimal(18, 2), (未收款项 / 合同金额)) * 100) END AS 已收金额,
                dbo.PDM_项目名称.未收款项
FROM      dbo.项目_客户提供资料_视图 RIGHT OUTER JOIN
                dbo.PDM_项目名称 INNER JOIN
                dbo.人事档案管理_人员名单 ON dbo.PDM_项目名称.操作者 = dbo.人事档案管理_人员名单.人员编号 LEFT OUTER JOIN
                dbo.人事档案管理_人员名单 AS 人事档案管理_人员名单_1 ON
                dbo.PDM_项目名称.通知人 = 人事档案管理_人员名单_1.人员编号 LEFT OUTER JOIN
                dbo.PDM_项目是否可删_视图 ON dbo.PDM_项目名称.项目流水号 = dbo.PDM_项目是否可删_视图.项目流水号 ON
                dbo.项目_客户提供资料_视图.项目流水号 = dbo.PDM_项目名称.项目流水号 LEFT OUTER JOIN
                dbo.项目_合同留存信息_视图 ON
                dbo.PDM_项目名称.项目流水号 = dbo.项目_合同留存信息_视图.项目流水号 LEFT OUTER JOIN
                dbo.PDM_项目是否存在修改 ON
                dbo.PDM_项目名称.项目流水号 = dbo.PDM_项目是否存在修改.项目流水号 LEFT OUTER JOIN
                dbo.PDM_项目机床_视图 ON dbo.PDM_项目名称.项目流水号 = dbo.PDM_项目机床_视图.项目流水号 LEFT OUTER JOIN
                dbo.合同管理_订单信息_基础表 ON
                dbo.PDM_项目名称.项目流水号 = dbo.合同管理_订单信息_基础表.项目流水号 LEFT OUTER JOIN
                dbo.合同管理_付款方式_基础表 ON
                dbo.PDM_项目名称.付款方式流水号 = dbo.合同管理_付款方式_基础表.付款方式流水号 LEFT OUTER JOIN
                dbo.基础表_省份表 RIGHT OUTER JOIN
                dbo.客户关系管理系统_客户名称 ON dbo.基础表_省份表.省份流水号 = dbo.客户关系管理系统_客户名称.省份流水号 ON
                 dbo.PDM_项目名称.客户流水号 = dbo.客户关系管理系统_客户名称.客户流水号
GO

IF OBJECT_ID(N'dbo.销售管理_提成比例设置', N'U') IS NULL
BEGIN
  CREATE TABLE dbo.销售管理_提成比例设置
  (
    提成比例ID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    提成类型 nvarchar(50) NOT NULL,
    提成比例 decimal(9,4) NOT NULL CONSTRAINT DF_销售管理_提成比例设置_提成比例 DEFAULT(0),
    是否启用 int NOT NULL CONSTRAINT DF_销售管理_提成比例设置_是否启用 DEFAULT(1),
    备注 nvarchar(500) NULL,
    操作者 int NULL,
    操作日期 datetime NOT NULL CONSTRAINT DF_销售管理_提成比例设置_操作日期 DEFAULT(GETDATE())
  );
  CREATE UNIQUE INDEX UX_销售管理_提成比例设置_提成类型 ON dbo.销售管理_提成比例设置(提成类型);
END;
GO

MERGE dbo.销售管理_提成比例设置 AS target
USING
(
  SELECT N'首单提成(专机)' AS 提成类型 UNION ALL
  SELECT N'首单提成(模块)' UNION ALL
  SELECT N'转介绍提成(专机)' UNION ALL
  SELECT N'转介绍提成(模块)' UNION ALL
  SELECT N'复购提成'
) AS source
ON target.提成类型 = source.提成类型
WHEN NOT MATCHED THEN
  INSERT(提成类型, 提成比例, 是否启用, 备注, 操作日期)
  VALUES(source.提成类型, 0, 1, N'初始化提成类型，请维护百分比', GETDATE());
GO

IF OBJECT_ID(N'dbo.销售管理_提成比例设置_查询数据', N'P') IS NOT NULL
  DROP PROCEDURE dbo.销售管理_提成比例设置_查询数据;
GO

CREATE PROCEDURE dbo.销售管理_提成比例设置_查询数据
  @提成类型_check int = 0,
  @提成类型 nvarchar(50) = NULL,
  @人员编号 int = NULL
AS
BEGIN
  SET NOCOUNT ON;
  -- 修改人:Ld 修改时间:2026-07-27 14:35:00; 提成比例设置仅允许人员编号5和273查看。
  IF ISNULL(@人员编号, 0) NOT IN (5, 273)
  BEGIN
    SELECT CAST(0 AS int) AS result, N'无权查看提成比例设置' AS msg;
    RETURN;
  END;

  SELECT 提成比例ID, 提成类型, CAST(提成比例 AS float) AS 提成比例, 是否启用, 备注,
         CONVERT(varchar(19), 操作日期, 120) AS 操作日期
  FROM dbo.销售管理_提成比例设置
  WHERE (@提成类型_check = 0 OR 提成类型 = @提成类型)
  ORDER BY 提成比例ID;
END;
GO

IF OBJECT_ID(N'dbo.销售管理_提成比例设置_保存数据', N'P') IS NOT NULL
  DROP PROCEDURE dbo.销售管理_提成比例设置_保存数据;
GO

CREATE PROCEDURE dbo.销售管理_提成比例设置_保存数据
  @提成比例ID int = NULL,
  @提成类型 nvarchar(50) = NULL,
  @提成比例 float = NULL,
  @是否启用 int = 1,
  @备注 nvarchar(500) = NULL,
  @操作者 int = NULL,
  @人员编号 int = NULL
AS
BEGIN
  SET NOCOUNT ON;
  -- 修改人:Ld 修改时间:2026-07-27 14:35:00; 保存时再次校验指定人员编号。
  IF ISNULL(@人员编号, 0) NOT IN (5, 273)
  BEGIN
    SELECT CAST(0 AS int) AS result, N'无权维护提成比例设置' AS msg;
    RETURN;
  END;

  IF ISNULL(LTRIM(RTRIM(@提成类型)), N'') = N''
  BEGIN
    SELECT CAST(0 AS int) AS result, N'提成类型不能为空' AS msg;
    RETURN;
  END;

  IF ISNULL(@提成比例, -1) < 0
  BEGIN
    SELECT CAST(0 AS int) AS result, N'提成比例不能小于0' AS msg;
    RETURN;
  END;

  IF EXISTS(SELECT 1 FROM dbo.销售管理_提成比例设置 WHERE 提成类型 = @提成类型 AND ISNULL(提成比例ID, 0) <> ISNULL(@提成比例ID, 0))
  BEGIN
    SELECT CAST(0 AS int) AS result, N'提成类型已存在' AS msg;
    RETURN;
  END;

  IF EXISTS(SELECT 1 FROM dbo.销售管理_提成比例设置 WHERE 提成比例ID = @提成比例ID)
  BEGIN
    UPDATE dbo.销售管理_提成比例设置
    SET 提成类型 = @提成类型,
        提成比例 = CAST(@提成比例 AS decimal(9,4)),
        是否启用 = ISNULL(@是否启用, 1),
        备注 = @备注,
        操作者 = @操作者,
        操作日期 = GETDATE()
    WHERE 提成比例ID = @提成比例ID;
  END
  ELSE
  BEGIN
    INSERT INTO dbo.销售管理_提成比例设置(提成类型, 提成比例, 是否启用, 备注, 操作者, 操作日期)
    VALUES(@提成类型, CAST(@提成比例 AS decimal(9,4)), ISNULL(@是否启用, 1), @备注, @操作者, GETDATE());
  END;

  SELECT CAST(1 AS int) AS result, N'保存成功' AS msg;
END;
GO

IF OBJECT_ID(N'dbo.销售管理_提成比例设置_删除数据', N'P') IS NOT NULL
  DROP PROCEDURE dbo.销售管理_提成比例设置_删除数据;
GO

CREATE PROCEDURE dbo.销售管理_提成比例设置_删除数据
  @提成比例ID int = NULL,
  @操作者 int = NULL,
  @人员编号 int = NULL
AS
BEGIN
  SET NOCOUNT ON;
  -- 修改人:Ld 修改时间:2026-07-27 12:00:00; 删除采用停用方式保留历史比例记录。
  -- 修改人:Ld 修改时间:2026-07-27 14:35:00; 停用时再次校验指定人员编号。
  IF ISNULL(@人员编号, 0) NOT IN (5, 273)
  BEGIN
    SELECT CAST(0 AS int) AS result, N'无权停用提成比例设置' AS msg;
    RETURN;
  END;

  UPDATE dbo.销售管理_提成比例设置
  SET 是否启用 = 0, 操作者 = @操作者, 操作日期 = GETDATE()
  WHERE 提成比例ID = @提成比例ID;

  SELECT CAST(1 AS int) AS result, N'停用成功' AS msg;
END;
GO

IF OBJECT_ID(N'dbo.销售管理_销售绩效_查询数据', N'P') IS NOT NULL
  DROP PROCEDURE dbo.销售管理_销售绩效_查询数据;
GO

CREATE PROCEDURE dbo.销售管理_销售绩效_查询数据
  @绩效月份 nvarchar(7) = NULL,
  @销售员_check int = 0,
  @销售员 nvarchar(50) = NULL,
  @提成类型_check int = 0,
  @提成类型 nvarchar(50) = NULL,
  @合同编号_check int = 0,
  @合同编号 nvarchar(50) = NULL
AS
BEGIN
  SET NOCOUNT ON;
  -- 修改人:Ld 修改时间:2026-07-27 12:00:00; 达到90%当月补算此前回款，退款按发生月份扣回绩效。
  ;WITH 收款流水 AS
  (
    SELECT
      r.id,
      r.项目流水号,
      CAST(ISNULL(r.金额, 0) AS decimal(18,2)) AS 金额,
      r.时间,
      p.合同编号,
      CAST(ISNULL(p.合同金额, 0) AS decimal(18,2)) AS 合同金额,
      v.客户名称,
      ISNULL(v.经手人, N'') AS 销售员,
      ISNULL(p.提成类型, N'') AS 提成类型,
      CAST(ISNULL(s.提成比例, 0) AS decimal(18,4)) AS 提成比例
    FROM dbo.财务管理_收款记录 r
    INNER JOIN dbo.PDM_项目名称 p ON r.项目流水号 = p.项目流水号
    LEFT JOIN dbo.PDM_项目名称_视图 v ON p.项目流水号 = v.项目流水号
    LEFT JOIN dbo.销售管理_提成比例设置 s ON p.提成类型 = s.提成类型 AND s.是否启用 = 1
    WHERE ISNULL(p.是否启用, 1) = 1
      AND ISNULL(p.合同金额, 0) > 0
      AND ISNULL(p.提成类型, N'') <> N''
  ),
  累计流水 AS
  (
    SELECT a.*,
      (
        SELECT ISNULL(SUM(b.金额), 0)
        FROM 收款流水 b
        WHERE b.项目流水号 = a.项目流水号
          AND (b.时间 < a.时间 OR (b.时间 = a.时间 AND b.id <= a.id))
      ) AS 累计回款
    FROM 收款流水 a
  ),
  达标 AS
  (
    SELECT 项目流水号, MIN(时间) AS 达标时间
    FROM 累计流水
    WHERE 累计回款 >= 合同金额 * 0.9
    GROUP BY 项目流水号
  ),
  绩效流水 AS
  (
    SELECT
      l.*,
      d.达标时间,
      CASE
        WHEN l.时间 <= d.达标时间 THEN CONVERT(varchar(7), d.达标时间, 120)
        ELSE CONVERT(varchar(7), l.时间, 120)
      END AS 绩效月份
    FROM 累计流水 l
    INNER JOIN 达标 d ON l.项目流水号 = d.项目流水号
  ),
  绩效汇总 AS
  (
    SELECT
      绩效月份,
      项目流水号,
      合同编号,
      客户名称,
      销售员,
      合同金额,
      提成类型,
      提成比例,
      SUM(金额) AS 本月回款金额,
      SUM(金额 * 提成比例 / 100.0) AS 本月绩效金额
    FROM 绩效流水
    GROUP BY 绩效月份, 项目流水号, 合同编号, 客户名称, 销售员, 合同金额, 提成类型, 提成比例
  )
  SELECT
    h.绩效月份,
    h.销售员,
    h.合同编号,
    h.客户名称,
    CAST(h.合同金额 AS float) AS 合同金额,
    CAST((SELECT ISNULL(SUM(r2.金额), 0) FROM dbo.财务管理_收款记录 r2 WHERE r2.项目流水号 = h.项目流水号 AND CONVERT(varchar(7), r2.时间, 120) <= h.绩效月份) AS float) AS 累计回款金额,
    CAST(h.本月回款金额 AS float) AS 本月回款金额,
    CAST(CASE WHEN h.合同金额 = 0 THEN 0 ELSE (SELECT ISNULL(SUM(r2.金额), 0) FROM dbo.财务管理_收款记录 r2 WHERE r2.项目流水号 = h.项目流水号 AND CONVERT(varchar(7), r2.时间, 120) <= h.绩效月份) / h.合同金额 * 100 END AS decimal(18,2)) AS 回款比例,
    h.提成类型,
    CAST(h.提成比例 AS float) AS 提成比例,
    CAST(h.本月绩效金额 AS decimal(18,2)) AS 本月绩效金额,
    h.项目流水号
  FROM 绩效汇总 h
  WHERE (@绩效月份 IS NULL OR @绩效月份 = N'' OR h.绩效月份 = @绩效月份)
    AND (@销售员_check = 0 OR h.销售员 LIKE N'%' + @销售员 + N'%')
    AND (@提成类型_check = 0 OR h.提成类型 = @提成类型)
    AND (@合同编号_check = 0 OR h.合同编号 LIKE N'%' + @合同编号 + N'%')
  ORDER BY h.绩效月份 DESC, h.销售员, h.合同编号;
END;
GO

IF OBJECT_ID(N'dbo.报表_销售管理_销售绩效_查询数据', N'P') IS NOT NULL
  DROP PROCEDURE dbo.报表_销售管理_销售绩效_查询数据;
GO

IF OBJECT_ID(N'dbo.销售管理_销售绩效_回款明细_查询数据', N'P') IS NOT NULL
  DROP PROCEDURE dbo.销售管理_销售绩效_回款明细_查询数据;
GO

CREATE PROCEDURE dbo.销售管理_销售绩效_回款明细_查询数据
  @项目流水号 int = NULL
AS
BEGIN
  SET NOCOUNT ON;
  -- 修改人:Ld 修改时间:2026-07-28 13:45:00; 销售绩效展开行查看合同回款明细。
  SELECT
    id AS 回款记录ID,
    项目流水号,
    CAST(ISNULL(金额, 0) AS float) AS 回款金额,
    CONVERT(varchar(19), 时间, 120) AS 回款时间,
    备注
  FROM dbo.财务管理_收款记录
  WHERE 项目流水号 = @项目流水号
  ORDER BY 时间 DESC, id DESC;
END;
GO

CREATE PROCEDURE dbo.报表_销售管理_销售绩效_查询数据
  @绩效月份 nvarchar(7) = NULL,
  @销售员_check int = 0,
  @销售员 nvarchar(50) = NULL,
  @提成类型_check int = 0,
  @提成类型 nvarchar(50) = NULL,
  @合同编号_check int = 0,
  @合同编号 nvarchar(50) = NULL
AS
BEGIN
  SET NOCOUNT ON;
  -- 修改人:Ld 修改时间:2026-07-27 12:00:00; 销售绩效导出列宽和数据。
  SELECT N'销售绩效_' + CONVERT(varchar(8), GETDATE(), 112) + N'-' + REPLACE(CONVERT(varchar(8), GETDATE(), 108), ':', '') AS tablename, N'07' AS tabletype;
  SELECT
    120 * 20 AS 绩效月份,
    100 * 20 AS 销售员,
    160 * 20 AS 合同编号,
    220 * 20 AS 客户名称,
    120 * 20 AS 合同金额,
    120 * 20 AS 累计回款金额,
    120 * 20 AS 本月回款金额,
    100 * 20 AS 回款比例,
    160 * 20 AS 提成类型,
    100 * 20 AS 提成比例,
    120 * 20 AS 本月绩效金额;

  EXEC dbo.销售管理_销售绩效_查询数据
    @绩效月份 = @绩效月份,
    @销售员_check = @销售员_check,
    @销售员 = @销售员,
    @提成类型_check = @提成类型_check,
    @提成类型 = @提成类型,
    @合同编号_check = @合同编号_check,
    @合同编号 = @合同编号;
END;
GO

-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 正式库模块ID可能已占用，按路径查找或自动分配空闲ID。
DECLARE @销售绩效模块ID int;
DECLARE @提成比例模块ID int;

SELECT @销售绩效模块ID = id
FROM dbo.基础表_模块信息
WHERE path = N'SalesManagement/SalesPerformance'
   OR component = N'/SalesManagement/SalesPerformance'
   OR name = N'SalesPerformance'
   OR title = N'销售绩效';

IF @销售绩效模块ID IS NULL
BEGIN
  SET @销售绩效模块ID = CASE WHEN NOT EXISTS(SELECT 1 FROM dbo.基础表_模块信息 WHERE id = 155) THEN 155 ELSE (SELECT ISNULL(MAX(id), 0) + 1 FROM dbo.基础表_模块信息) END;

  SET IDENTITY_INSERT dbo.基础表_模块信息 ON;
  INSERT INTO dbo.基础表_模块信息(id, path, component, redirect, name, title, icon, 是否通知, 消息通知来源, 通知条件, dashboardIcon, 是否禁用)
  VALUES(@销售绩效模块ID, N'SalesManagement/SalesPerformance', N'/SalesManagement/SalesPerformance', NULL, N'SalesPerformance', N'销售绩效', N'ContractCapitalManagement', 0, NULL, NULL, NULL, 0);
  SET IDENTITY_INSERT dbo.基础表_模块信息 OFF;
END;

SELECT @提成比例模块ID = id
FROM dbo.基础表_模块信息
WHERE path = N'SalesManagement/CommissionRateSetting'
   OR component = N'/SalesManagement/CommissionRateSetting'
   OR name = N'CommissionRateSetting'
   OR title = N'提成比例设置';

IF @提成比例模块ID IS NULL
BEGIN
  SET @提成比例模块ID = CASE WHEN NOT EXISTS(SELECT 1 FROM dbo.基础表_模块信息 WHERE id = 156) THEN 156 ELSE (SELECT ISNULL(MAX(id), 0) + 1 FROM dbo.基础表_模块信息) END;

  SET IDENTITY_INSERT dbo.基础表_模块信息 ON;
  INSERT INTO dbo.基础表_模块信息(id, path, component, redirect, name, title, icon, 是否通知, 消息通知来源, 通知条件, dashboardIcon, 是否禁用)
  VALUES(@提成比例模块ID, N'SalesManagement/CommissionRateSetting', N'/SalesManagement/CommissionRateSetting', NULL, N'CommissionRateSetting', N'提成比例设置', N'ProductMaintenance', 0, NULL, NULL, NULL, 0);
  SET IDENTITY_INSERT dbo.基础表_模块信息 OFF;
END;

INSERT INTO dbo.基础表_角色模块信息(id, pid, 模块顺序, 角色编号, 是否启用, 角色模块顺序)
SELECT @销售绩效模块ID, 10, @销售绩效模块ID, v.角色编号, 1, 32
FROM (VALUES(2),(3),(9),(11)) v(角色编号)
WHERE NOT EXISTS(SELECT 1 FROM dbo.基础表_角色模块信息 WHERE id = @销售绩效模块ID AND 角色编号 = v.角色编号);

INSERT INTO dbo.基础表_角色模块信息(id, pid, 模块顺序, 角色编号, 是否启用, 角色模块顺序)
SELECT @提成比例模块ID, 10, @提成比例模块ID, 2, 1, 33
WHERE NOT EXISTS(SELECT 1 FROM dbo.基础表_角色模块信息 WHERE id = @提成比例模块ID AND 角色编号 = 2);

SELECT @销售绩效模块ID AS 销售绩效模块ID, @提成比例模块ID AS 提成比例设置模块ID;
GO
