更新销售合同/提成/业绩、精工工序工价/生产审核/工时统计、仓储盘点/库存/补货/入库/库房管理,新增提成设置/销售业绩/库房管理/入库单移动端等模块及SQL脚本
This commit is contained in:
345
sql/工序工价_自动化拷贝_正式库_20260804.sql
Normal file
345
sql/工序工价_自动化拷贝_正式库_20260804.sql
Normal 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
|
||||
Reference in New Issue
Block a user