更新销售合同/提成/业绩、精工工序工价/生产审核/工时统计、仓储盘点/库存/补货/入库/库房管理,新增提成设置/销售业绩/库房管理/入库单移动端等模块及SQL脚本

This commit is contained in:
Developer
2026-08-05 08:13:08 +08:00
parent 33549c3787
commit fd84f9d3ca
94 changed files with 14531 additions and 345 deletions

View File

@@ -0,0 +1,456 @@
/*
修改人: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