更新设备维修、发货、精工车间工序工价/生产审核/工时统计、仓储盘点/库存查询/库位/入库,新增车间派工移动端及SQL脚本
This commit is contained in:
322
sql/inventory_demand_performance_optimize_20260714.sql
Normal file
322
sql/inventory_demand_performance_optimize_20260714.sql
Normal file
@@ -0,0 +1,322 @@
|
||||
-- 库存查询需求量性能优化:直连基础表判断订单完成状态,减少重视图展开
|
||||
-- 修改人:Ld 修改时间:2026-07-14 16:35:00;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_零件基本件_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.PDM_零件明细表_基本件'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX IX_Ld_零件基本件_物料组件_20260714
|
||||
ON dbo.PDM_零件明细表_基本件 (物料流水号, 组件流水号)
|
||||
INCLUDE (零件数量, 已领数量);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_零件标准外购_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.PDM_零件明细表_标准件和外购件'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX IX_Ld_零件标准外购_物料组件_20260714
|
||||
ON dbo.PDM_零件明细表_标准件和外购件 (物料流水号, 组件流水号)
|
||||
INCLUDE (零件数量, 已领数量);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_临时领料_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_装配执行_临时领料明细'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX IX_Ld_临时领料_物料组件_20260714
|
||||
ON dbo.车间装配管理_装配执行_临时领料明细 (物料流水号, 组件流水号)
|
||||
INCLUDE (实领数);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_基本件_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_基本件_20260714
|
||||
ON dbo.车间装配管理_领料单明细 (基本件流水号)
|
||||
INCLUDE (已领数量);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_标准外购_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_标准外购_20260714
|
||||
ON dbo.车间装配管理_领料单明细 (标准件和外购件流水号)
|
||||
INCLUDE (已领数量);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_物料组件_20260714
|
||||
ON dbo.车间装配管理_领料单明细 (物料流水号, 组件流水号)
|
||||
INCLUDE (已领数量);
|
||||
END;
|
||||
GO
|
||||
|
||||
ALTER VIEW dbo.物料管理_需求量_视图
|
||||
AS
|
||||
WITH 组件订单 AS
|
||||
(
|
||||
SELECT
|
||||
c.组件流水号,
|
||||
c.是否分配,
|
||||
o.订单类型,
|
||||
o.是否提交,
|
||||
p.是否启用
|
||||
FROM dbo.PDM_组件名称 c
|
||||
INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号 = m.机床流水号
|
||||
INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号 = p.项目流水号
|
||||
INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号 = o.项目流水号
|
||||
),
|
||||
需求 AS
|
||||
(
|
||||
SELECT b.物料流水号, SUM(ISNULL(b.零件数量, 0)) AS 需求量
|
||||
FROM dbo.PDM_零件明细表_基本件 b
|
||||
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
|
||||
WHERE co.是否分配 = 1
|
||||
AND co.订单类型 <> 3
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 直接用基础字段排除已完成订单
|
||||
GROUP BY b.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT s.物料流水号, SUM(ISNULL(s.零件数量, 0)) AS 需求量
|
||||
FROM dbo.PDM_零件明细表_标准件和外购件 s
|
||||
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
|
||||
WHERE co.是否分配 = 1
|
||||
AND co.订单类型 <> 3
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 直接用基础字段排除已完成订单
|
||||
GROUP BY s.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT t.物料流水号, SUM(ISNULL(t.实领数, 0)) AS 需求量
|
||||
FROM dbo.车间装配管理_装配执行_临时领料明细 t
|
||||
LEFT JOIN 组件订单 co ON t.组件流水号 = co.组件流水号
|
||||
WHERE t.物料流水号 IS NOT NULL
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时领料同口径排除已完成订单
|
||||
GROUP BY t.物料流水号
|
||||
),
|
||||
需求汇总 AS
|
||||
(
|
||||
SELECT 物料流水号, SUM(需求量) AS 需求量
|
||||
FROM 需求
|
||||
GROUP BY 物料流水号
|
||||
),
|
||||
已领 AS
|
||||
(
|
||||
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
|
||||
FROM dbo.车间装配管理_领料单明细 l
|
||||
INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号 = b.基本件流水号
|
||||
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
|
||||
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 扣减已领数时同步排除已完成订单
|
||||
GROUP BY b.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT s.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
|
||||
FROM dbo.车间装配管理_领料单明细 l
|
||||
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
|
||||
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
|
||||
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 扣减已领数时同步排除已完成订单
|
||||
GROUP BY s.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT l.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
|
||||
FROM dbo.车间装配管理_领料单明细 l
|
||||
LEFT JOIN 组件订单 co ON l.组件流水号 = co.组件流水号
|
||||
WHERE l.物料流水号 IS NOT NULL
|
||||
AND ISNULL(l.物料流水号, 0) <> 0
|
||||
AND ISNULL(l.基本件流水号, 0) = 0
|
||||
AND ISNULL(l.标准件和外购件流水号, 0) = 0
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时件扣减已领数时同步排除已完成订单
|
||||
GROUP BY l.物料流水号
|
||||
),
|
||||
已领汇总 AS
|
||||
(
|
||||
SELECT 物料流水号, SUM(已领数) AS 已领数
|
||||
FROM 已领
|
||||
GROUP BY 物料流水号
|
||||
)
|
||||
SELECT
|
||||
d.物料流水号,
|
||||
CASE WHEN d.需求量 > ISNULL(l.已领数, 0) THEN d.需求量 - ISNULL(l.已领数, 0) ELSE 0 END AS 需求量
|
||||
FROM 需求汇总 d
|
||||
LEFT JOIN 已领汇总 l ON d.物料流水号 = l.物料流水号;
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[物料管理_需求量_更新]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DELETE FROM dbo.物料管理_需求量;
|
||||
|
||||
INSERT INTO dbo.物料管理_需求量
|
||||
SELECT 物料流水号, 需求量
|
||||
FROM dbo.物料管理_需求量_视图
|
||||
WHERE 需求量 > 0;
|
||||
END;
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[仓储管理_报缺补货_需求量明细_查询]
|
||||
@物料流水号 INT = 15448
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
;WITH 组件订单 AS
|
||||
(
|
||||
SELECT
|
||||
c.组件流水号,
|
||||
o.订单编号,
|
||||
c.是否分配,
|
||||
o.订单类型,
|
||||
o.是否提交,
|
||||
p.是否启用,
|
||||
ISNULL(k.简称, '') AS 简称
|
||||
FROM dbo.PDM_组件名称 c
|
||||
INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号 = m.机床流水号
|
||||
INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号 = p.项目流水号
|
||||
INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号 = o.项目流水号
|
||||
LEFT JOIN dbo.客户关系管理系统_客户名称 k ON p.客户流水号 = k.客户流水号
|
||||
),
|
||||
需求明细 AS
|
||||
(
|
||||
SELECT
|
||||
co.订单编号,
|
||||
b.组件流水号,
|
||||
b.物料流水号,
|
||||
SUM(ISNULL(b.零件数量, 0)) AS 需求量,
|
||||
N'生产订单需求' AS 来源
|
||||
FROM dbo.PDM_零件明细表_基本件 b
|
||||
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
|
||||
WHERE co.是否分配 = 1
|
||||
AND co.订单类型 <> 3
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细不显示已完成订单
|
||||
AND (@物料流水号 IS NULL OR b.物料流水号 = @物料流水号)
|
||||
GROUP BY co.订单编号, b.组件流水号, b.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
co.订单编号,
|
||||
s.组件流水号,
|
||||
s.物料流水号,
|
||||
SUM(ISNULL(s.零件数量, 0)) AS 需求量,
|
||||
N'生产订单需求' AS 来源
|
||||
FROM dbo.PDM_零件明细表_标准件和外购件 s
|
||||
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
|
||||
WHERE co.是否分配 = 1
|
||||
AND co.订单类型 <> 3
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细不显示已完成订单
|
||||
AND (@物料流水号 IS NULL OR s.物料流水号 = @物料流水号)
|
||||
GROUP BY co.订单编号, s.组件流水号, s.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
co.订单编号,
|
||||
t.组件流水号,
|
||||
t.物料流水号,
|
||||
SUM(ISNULL(t.实领数, 0)) AS 需求量,
|
||||
N'临时领料需求' AS 来源
|
||||
FROM dbo.车间装配管理_装配执行_临时领料明细 t
|
||||
LEFT JOIN 组件订单 co ON t.组件流水号 = co.组件流水号
|
||||
WHERE t.物料流水号 IS NOT NULL
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时领料明细不显示已完成订单
|
||||
AND (@物料流水号 IS NULL OR t.物料流水号 = @物料流水号)
|
||||
GROUP BY co.订单编号, t.组件流水号, t.物料流水号
|
||||
),
|
||||
已领明细 AS
|
||||
(
|
||||
SELECT
|
||||
co.订单编号,
|
||||
b.组件流水号,
|
||||
b.物料流水号,
|
||||
SUM(ISNULL(l.已领数量, 0)) AS 已领数
|
||||
FROM dbo.车间装配管理_领料单明细 l
|
||||
INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号 = b.基本件流水号
|
||||
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
|
||||
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细扣减已领数时同步排除已完成订单
|
||||
AND (@物料流水号 IS NULL OR b.物料流水号 = @物料流水号)
|
||||
GROUP BY co.订单编号, b.组件流水号, b.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
co.订单编号,
|
||||
s.组件流水号,
|
||||
s.物料流水号,
|
||||
SUM(ISNULL(l.已领数量, 0)) AS 已领数
|
||||
FROM dbo.车间装配管理_领料单明细 l
|
||||
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
|
||||
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
|
||||
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细扣减已领数时同步排除已完成订单
|
||||
AND (@物料流水号 IS NULL OR s.物料流水号 = @物料流水号)
|
||||
GROUP BY co.订单编号, s.组件流水号, s.物料流水号
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
co.订单编号,
|
||||
l.组件流水号,
|
||||
l.物料流水号,
|
||||
SUM(ISNULL(l.已领数量, 0)) AS 已领数
|
||||
FROM dbo.车间装配管理_领料单明细 l
|
||||
LEFT JOIN 组件订单 co ON l.组件流水号 = co.组件流水号
|
||||
WHERE l.物料流水号 IS NOT NULL
|
||||
AND ISNULL(l.物料流水号, 0) <> 0
|
||||
AND ISNULL(l.基本件流水号, 0) = 0
|
||||
AND ISNULL(l.标准件和外购件流水号, 0) = 0
|
||||
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时件明细扣减已领数时同步排除已完成订单
|
||||
AND (@物料流水号 IS NULL OR l.物料流水号 = @物料流水号)
|
||||
GROUP BY co.订单编号, l.组件流水号, l.物料流水号
|
||||
),
|
||||
已领汇总 AS
|
||||
(
|
||||
SELECT 订单编号, 组件流水号, 物料流水号, SUM(已领数) AS 已领数
|
||||
FROM 已领明细
|
||||
GROUP BY 订单编号, 组件流水号, 物料流水号
|
||||
),
|
||||
明细 AS
|
||||
(
|
||||
SELECT
|
||||
d.订单编号,
|
||||
d.组件流水号,
|
||||
d.物料流水号,
|
||||
d.需求量,
|
||||
ISNULL(l.已领数, 0) AS 已领数,
|
||||
CASE WHEN d.需求量 > ISNULL(l.已领数, 0) THEN d.需求量 - ISNULL(l.已领数, 0) ELSE 0 END AS 最终需求量,
|
||||
d.来源
|
||||
FROM 需求明细 d
|
||||
LEFT JOIN 已领汇总 l
|
||||
ON d.物料流水号 = l.物料流水号
|
||||
AND d.组件流水号 = l.组件流水号
|
||||
AND ISNULL(d.订单编号, '') = ISNULL(l.订单编号, '')
|
||||
)
|
||||
SELECT
|
||||
d.订单编号,
|
||||
d.组件流水号,
|
||||
d.物料流水号,
|
||||
d.需求量,
|
||||
d.已领数,
|
||||
d.最终需求量,
|
||||
ISNULL(co.简称, '') AS 简称,
|
||||
d.来源
|
||||
FROM 明细 d
|
||||
LEFT JOIN 组件订单 co ON d.组件流水号 = co.组件流水号
|
||||
ORDER BY d.订单编号, d.组件流水号, d.来源;
|
||||
|
||||
;WITH 汇总 AS
|
||||
(
|
||||
SELECT 物料流水号, 需求量
|
||||
FROM dbo.物料管理_需求量_视图
|
||||
WHERE (@物料流水号 IS NULL OR 物料流水号 = @物料流水号)
|
||||
)
|
||||
SELECT
|
||||
物料流水号,
|
||||
需求量 AS 总需求量,
|
||||
0 AS 总已领数,
|
||||
需求量 AS 总最终需求量
|
||||
FROM 汇总
|
||||
ORDER BY 物料流水号;
|
||||
END;
|
||||
GO
|
||||
Reference in New Issue
Block a user