更新销售合同/提成/业绩、精工工序工价/生产审核/工时统计、仓储盘点/库存/补货/入库/库房管理,新增提成设置/销售业绩/库房管理/入库单移动端等模块及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,345 @@
USE [ERPTOOL_JY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 工序工价自动补齐,按零件名称和图号检索已有工价,未找到则默认 0修改人:Ld 修改时间:2026-08-04 16:31:18;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_自动补齐数据]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[_工序工价_自动补齐数据];
GO
CREATE PROCEDURE [dbo].[_工序工价_自动补齐数据]
@ INT = NULL,
@ NVARCHAR(50) = N'',
@ BIT = 1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ NVARCHAR(50) = NULLIF(@, N'');
DECLARE @ DATETIME = GETDATE();
IF @ IS NULL
BEGIN
IF @ = 1
SELECT N'0' AS result, N'工艺计划流水号不能为空' AS message;
RETURN;
END;
IF NOT EXISTS (
SELECT 1
FROM [dbo].[_零件工艺计划_视图]
WHERE = @
AND >= 1
)
BEGIN
IF @ = 1
SELECT N'0' AS result, N'工艺计划不存在或未生效' AS message;
RETURN;
END;
;WITH TargetRows AS (
SELECT
gp.,
gx.,
gx.,
gp.,
gp. AS ,
ISNULL(base., N'未设置工序') AS
FROM [dbo].[_零件工艺计划_视图] gp
INNER JOIN [dbo].[_零件工序] gx ON gp. = gx.
LEFT JOIN [dbo].[_基础表_工艺名称] base ON gx. = base.
WHERE gp. = @
AND gp. >= 1
AND NULLIF(LTRIM(RTRIM(base.)), N'') IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM [dbo].[_工序工价] price
WHERE price. = gx.
)
)
INSERT INTO [dbo].[_工序工价](
,
,
,
,
,
[s],
[s],
[s],
[()],
[],
[()],
[(/)],
,
,
,
,
,
,
,
,
,
,
,
,
,
,
)
SELECT
targetRow.,
targetRow.,
targetRow.,
targetRow.,
targetRow.,
COALESCE(exactPrice.[s], fallbackPrice.[s], 0),
COALESCE(exactPrice.[s], fallbackPrice.[s], 0),
COALESCE(exactPrice.[s], fallbackPrice.[s], 0),
COALESCE(exactPrice.[()], fallbackPrice.[()], 0),
COALESCE(exactPrice.[], fallbackPrice.[], 0),
COALESCE(exactPrice.[()], fallbackPrice.[()], 0),
COALESCE(exactPrice.[(/)], fallbackPrice.[(/)], 0),
COALESCE(exactPrice., fallbackPrice.),
COALESCE(exactPrice., fallbackPrice., 0),
COALESCE(exactPrice., fallbackPrice., 1),
NULL,
@,
@,
@,
@,
N'按件',
COALESCE(exactPrice.[(/)], fallbackPrice.[(/)], 0),
0,
0,
1,
1,
1
FROM TargetRows targetRow
OUTER APPLY (
-- 修改人:Ld 修改时间:2026-08-04 16:31:18; 优先同零件名称、图号、工序顺序和工艺名称精确匹配
SELECT TOP 1
price.*
FROM [dbo].[_零件工艺计划_视图] sourceGp
INNER JOIN [dbo].[_零件工序] sourceGx ON sourceGp. = sourceGx.
LEFT JOIN [dbo].[_基础表_工艺名称] sourceBase ON sourceGx. = sourceBase.
INNER JOIN [dbo].[_工序工价] price ON sourceGx. = price.
WHERE sourceGp. >= 1
AND sourceGp. <> targetRow.
AND sourceGp. = targetRow.
AND sourceGp. = targetRow.
AND sourceGx. = targetRow.
AND ISNULL(sourceBase., N'未设置工序') = targetRow.
ORDER BY sourceGp. DESC, sourceGp. DESC, price. DESC, price. DESC
) exactPrice
OUTER APPLY (
-- 修改人:Ld 修改时间:2026-08-04 16:31:18; 精确工序未命中时,按零件名称和图号取最近一条已有工价兜底
SELECT TOP 1
price.*
FROM [dbo].[_零件工艺计划_视图] sourceGp
INNER JOIN [dbo].[_零件工序] sourceGx ON sourceGp. = sourceGx.
INNER JOIN [dbo].[_工序工价] price ON sourceGx. = price.
WHERE exactPrice. IS NULL
AND sourceGp. >= 1
AND sourceGp. <> targetRow.
AND sourceGp. = targetRow.
AND sourceGp. = targetRow.
ORDER BY sourceGp. DESC, sourceGp. DESC, price. DESC, price. DESC
) fallbackPrice;
IF @ = 1
SELECT N'1' AS result, @@ROWCOUNT AS ;
END
GO
-- 工序工序插入时自动补齐工价,按零件名称和图号直接拷贝已有数据;修改人:Ld 修改时间:2026-08-04 16:31:18;
IF OBJECT_ID(N'[dbo].[TR_车间生产管理工艺_零件工序_工价自动补齐]', N'TR') IS NOT NULL
DROP TRIGGER [dbo].[TR_车间生产管理工艺_零件工序_工价自动补齐];
GO
CREATE TRIGGER [dbo].[TR_车间生产管理工艺_零件工序_工价自动补齐]
ON [dbo].[_零件工序]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ INT;
DECLARE CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT i.
FROM inserted i
WHERE i. IS NOT NULL;
OPEN ;
FETCH NEXT FROM INTO @;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC [dbo].[_工序工价_自动补齐数据]
@ = @,
@ = N'Ld',
@ = 0;
FETCH NEXT FROM INTO @;
END
CLOSE ;
DEALLOCATE ;
END
GO
-- 清理历史自动备注,取消自动写入备注后的残留文案;修改人:Ld 修改时间:2026-08-04 16:31:18;
UPDATE [dbo].[_工序工价]
SET = NULL
WHERE LIKE N'自动拷贝来源工价流水号:%'
OR LIKE N'自动按零件图号兜底拷贝来源工价流水号:%'
OR = N'自动生成默认工价';
GO
-- 工序工价分页查询增加自动补齐调用,确保打开零件后立即生成缺失工价;修改人:Ld 修改时间:2026-08-04 16:31:18;
ALTER PROCEDURE [dbo].[_工序工价_查询数据]
@_check INT = 0,
@ INT = NULL,
@_check INT = 0,
@ INT = NULL,
@_check INT = 0,
@ INT = NULL,
@_check INT = 0,
@ NVARCHAR(100) = N'',
@_check INT = 0,
@ NVARCHAR(100) = N'',
@_check INT = 0,
@ NVARCHAR(100) = N'',
@_check INT = 0,
@ NVARCHAR(100) = N'',
@_check INT = 0,
@ NVARCHAR(20) = N'',
@PageCurrent INT = 1,
@PageSize INT = 1000
AS
BEGIN
SET NOCOUNT ON;
IF @_check = 1 AND @ IS NOT NULL
BEGIN
EXEC [dbo].[_工序工价_自动补齐数据]
@ = @,
@ = N'Ld',
@ = 0;
END
IF @PageCurrent IS NULL OR @PageCurrent < 1 SET @PageCurrent = 1;
IF @PageSize IS NULL OR @PageSize < 1 SET @PageSize = 1000;
;WITH PlanData AS (
-- 与制定工艺组件订单、产品、零件选择保持同一工艺计划来源口径;修改人:Ld 修改时间:2026-08-04 16:31:18;
SELECT gp.*
FROM [dbo].[_零件工艺计划_视图] gp
WHERE gp. >= 1
AND (@_check = 0 OR gp. = @)
AND (@_check = 0 OR gp. = @)
AND (@_check = 0 OR gp. = @)
AND (@_check = 0 OR gp. + gp. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR gp. LIKE N'%' + @ + N'%')
),
ProcessData AS (
SELECT
ROW_NUMBER() OVER (
ORDER BY gp. DESC, gp. DESC, gx. ASC, gx. ASC
) AS RowNum,
price.,
gx.,
gx.,
gp.,
gp.,
base. AS ,
base. AS ,
gp.,
gp. AS ,
gx.,
gx.,
gx.,
ISNULL(price.[()], 0) AS [()],
ISNULL(price.[], 0) AS [],
ISNULL(price.[s], 0) AS [s],
ISNULL(price.[s], 0) AS [s],
ISNULL(price.[s], 0) + ISNULL(price.[s], 0) AS [s],
ISNULL(price.[()], 0) AS [()],
ISNULL(price.[()], 0) AS [()],
ISNULL(price.[()], 0) AS [()],
ISNULL(price.[(/)], 0) AS [(/)],
ISNULL(price.[], 0) AS ,
ISNULL(price.[(/)], ISNULL(price.[()], 0)) AS [()],
ISNULL(price.[], ISNULL(price.[(/)], 0)) AS [(/)],
CONVERT(VARCHAR(10), price., 23) AS ,
ISNULL(price., 0) AS ,
ISNULL(price., 1) AS ,
price.,
price.,
CONVERT(VARCHAR(19), price., 120) AS ,
price.,
CONVERT(VARCHAR(19), price., 120) AS
FROM PlanData gp
INNER JOIN [dbo].[_零件工序] gx ON gp. = gx.
LEFT JOIN [dbo].[_基础表_工艺名称] base ON gx. = base.
LEFT JOIN [dbo].[_工序工价] price ON gx. = price.
WHERE NULLIF(LTRIM(RTRIM(base.)), N'') IS NOT NULL
AND (@_check = 0 OR base. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR base. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR CAST(ISNULL(price., 1) AS NVARCHAR(20)) = @)
)
SELECT
,
,
,
,
,
,
,
,
,
,
,
,
[()],
,
[s],
[s],
[s],
[()],
[()],
[()],
[(/)],
,
[()],
[(/)],
,
,
,
,
,
,
,
FROM ProcessData
WHERE RowNum BETWEEN ((@PageCurrent - 1) * @PageSize + 1) AND (@PageCurrent * @PageSize)
ORDER BY RowNum;
SELECT COUNT(1) AS total
FROM [dbo].[_零件工艺计划_视图] gp
INNER JOIN [dbo].[_零件工序] gx ON gp. = gx.
LEFT JOIN [dbo].[_基础表_工艺名称] base ON gx. = base.
LEFT JOIN [dbo].[_工序工价] price ON gx. = price.
WHERE gp. >= 1
AND (@_check = 0 OR gp. = @)
AND (@_check = 0 OR gp. = @)
AND (@_check = 0 OR gp. = @)
AND NULLIF(LTRIM(RTRIM(base.)), N'') IS NOT NULL
AND (@_check = 0 OR base. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR base. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR gp. + gp. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR gp. LIKE N'%' + @ + N'%')
AND (@_check = 0 OR CAST(ISNULL(price., 1) AS NVARCHAR(20)) = @);
END
GO