更新设备维修、发货、精工车间工序工价/生产审核/工时统计、仓储盘点/库存查询/库位/入库,新增车间派工移动端及SQL脚本

This commit is contained in:
Developer
2026-07-17 09:49:34 +08:00
parent 9c1f52078d
commit 2b9058c69c
20 changed files with 3326 additions and 343 deletions

View File

@@ -0,0 +1,233 @@
-- 库存查询需求量排除已完成订单
-- 修改人:Ld 修改时间:2026-07-14 16:16:14;
ALTER VIEW dbo.物料管理_需求量_视图
AS
SELECT
b.物料流水号,
CASE WHEN b.需求量 > ISNULL(c.已领数, 0) THEN b.需求量 - ISNULL(c.已领数, 0) ELSE 0 END AS 需求量
FROM
(
SELECT 物料流水号, SUM(数量) AS 需求量
FROM
(
SELECT p.物料流水号, ISNULL(p.数量, 0) AS 数量
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 库存查询需求数不计入已完成订单
UNION ALL
SELECT t.物料流水号, ISNULL(t.实领数, 0) AS 数量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 临时领料需求不计入已完成订单
) AS a
GROUP BY 物料流水号
) AS b
LEFT JOIN
(
SELECT l.物料流水号, SUM(ISNULL(l.已领数, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
) AS c ON b.物料流水号 = c.物料流水号;
GO
ALTER PROCEDURE [dbo].[物料管理_需求量_更新]
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [dbo].[物料管理_需求量];
INSERT INTO [dbo].[物料管理_需求量]
SELECT
b.物料流水号,
CASE WHEN b.需求量 > ISNULL(c.已领数, 0) THEN b.需求量 - ISNULL(c.已领数, 0) ELSE 0 END AS 需求量
FROM
(
SELECT 物料流水号, SUM(数量) AS 需求量
FROM
(
SELECT p.物料流水号, ISNULL(p.数量, 0) AS 数量
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总需求量不计入已完成订单
UNION ALL
SELECT t.物料流水号, ISNULL(t.实领数, 0) AS 数量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总临时领料需求不计入已完成订单
) AS a
GROUP BY 物料流水号
) AS b
LEFT JOIN
(
SELECT l.物料流水号, SUM(ISNULL(l.已领数, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
) AS c ON b.物料流水号 = c.物料流水号
WHERE CASE WHEN b.需求量 > ISNULL(c.已领数, 0) THEN b.需求量 - ISNULL(c.已领数, 0) ELSE 0 END > 0;
END;
GO
ALTER PROCEDURE [dbo].[仓储管理_报缺补货_需求量明细_查询]
@物料流水号 INT = 15448
AS
BEGIN
SET NOCOUNT ON;
;WITH 需求明细 AS
(
SELECT
p.订单编号,
p.组件流水号,
p.物料流水号,
SUM(ISNULL(p.数量, 0)) AS 需求量,
N'生产订单需求' AS 来源
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 需求量明细不显示已完成订单
AND (@物料流水号 IS NULL OR p.物料流水号 = @物料流水号)
GROUP BY
p.订单编号,
p.组件流水号,
p.物料流水号
UNION ALL
SELECT
cv.订单编号,
t.组件流水号,
t.物料流水号,
SUM(ISNULL(t.实领数, 0)) AS 需求量,
N'临时领料需求' AS 来源
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 临时领料明细不显示已完成订单
AND (@物料流水号 IS NULL OR t.物料流水号 = @物料流水号)
GROUP BY
cv.订单编号,
t.组件流水号,
t.物料流水号
),
已领明细 AS
(
SELECT
cv.订单编号,
l.组件流水号,
l.物料流水号,
SUM(ISNULL(l.已领数, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 明细扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR l.物料流水号 = @物料流水号)
GROUP BY
cv.订单编号,
l.组件流水号,
l.物料流水号
)
SELECT
d.订单编号,
d.组件流水号,
d.物料流水号,
d.需求量,
ISNULL(l.已领数, 0) AS 已领数,
CASE
WHEN d.需求量 > ISNULL(l.已领数, 0)
THEN d.需求量 - ISNULL(l.已领数, 0)
ELSE 0
END AS 最终需求量,
ISNULL(o.简称, '') AS 简称,
d.来源
FROM 需求明细 d
LEFT JOIN 已领明细 l
ON d.物料流水号 = l.物料流水号
AND d.组件流水号 = l.组件流水号
AND ISNULL(d.订单编号, '') = ISNULL(l.订单编号, '')
LEFT JOIN dbo.PDM_订单信息_视图 o
ON d.订单编号 = o.订单编号
ORDER BY
d.订单编号,
d.组件流水号,
d.来源;
;WITH 原视图需求 AS
(
SELECT
x.物料流水号,
SUM(x.数量) AS 总需求量
FROM
(
SELECT
p.物料流水号,
ISNULL(p.数量, 0) AS 数量
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总明细不计入已完成订单
AND (@物料流水号 IS NULL OR p.物料流水号 = @物料流水号)
UNION ALL
SELECT
t.物料流水号,
ISNULL(t.实领数, 0) AS 数量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总临时领料不计入已完成订单
AND (@物料流水号 IS NULL OR t.物料流水号 = @物料流水号)
) x
GROUP BY x.物料流水号
),
原视图已领 AS
(
SELECT
l.物料流水号,
SUM(ISNULL(l.已领数, 0)) AS 总已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR l.物料流水号 = @物料流水号)
GROUP BY l.物料流水号
)
SELECT
d.物料流水号,
d.总需求量,
ISNULL(l.总已领数, 0) AS 总已领数,
CASE
WHEN d.总需求量 > ISNULL(l.总已领数, 0)
THEN d.总需求量 - ISNULL(l.总已领数, 0)
ELSE 0
END AS 总最终需求量
FROM 原视图需求 d
LEFT JOIN 原视图已领 l
ON d.物料流水号 = l.物料流水号
ORDER BY d.物料流水号;
END;
GO

View 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

View File

@@ -0,0 +1,149 @@
-- 库存查询需求量性能优化补充:补齐备货/临时备货领料扣减口径
-- 修改人:Ld 修改时间:2026-07-14 16:42:00;
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:42: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:42: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:42: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:42: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:42: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 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:42:00; 临时件扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_领料明细 b ON l.领料流水号 = b.领料流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 保留原口径中的备货领料扣减
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_临时领料明细 b ON l.临时流水号 = b.临时流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 保留原口径中的临时备货领料扣减
),
已领汇总 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; -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 复用优化后的视图口径刷新汇总表
END;
GO

View File

@@ -0,0 +1,111 @@
-- 库存查询需求量性能优化补充:已领扣减侧保留无订单链路数据,保持旧口径一致
-- 修改人:Ld 修改时间:2026-07-14 16:50:00;
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.项目流水号
LEFT 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:50: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:50: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:50: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.基本件流水号
LEFT JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 已领扣减侧保留无订单链路数据
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
LEFT JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50: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 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:50:00; 临时件扣减侧保留无订单链路数据
GROUP BY l.物料流水号
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_领料明细 b ON l.领料流水号 = b.领料流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 保留原口径中的备货领料扣减
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_临时领料明细 b ON l.临时流水号 = b.临时流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 保留原口径中的临时备货领料扣减
),
已领汇总 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

View File

@@ -0,0 +1,101 @@
-- 修复员工工时统计导出 null:统一导出元数据列名,并修正导出文件名前缀;修改人:Ld 修改时间:2026-07-17 07:53:49;
ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据]
@开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL,
@排序名称 INT = NULL,
@排序方式 INT = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 后端导出处理器未支持 tabletype=18,使用通用导出类型 15 防止返回 NULL;修改人:Ld 修改时间:2026-07-17 07:58:30;
SELECT N'员工工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT
256 * 15 AS 工序,
256 * 10 AS 工序顺序,
256 * 30 AS 零件名称,
256 * 30 AS 零件图号,
256 * 20 AS 物料编码,
256 * 10 AS 加工数,
256 * 12 AS 计价方式,
256 * 10 AS 单价,
256 * 12 AS 总价,
256 * 15 AS 加工工时M,
256 * 10 AS 暂停时长,
256 * 30 AS 开始加工时间,
256 * 30 AS 完成时间,
256 * 10 AS 操作者,
256 * 25 AS 设备,
246 * 25 AS 订单编号,
246 * 25 AS 产品名称;
SELECT
0 AS 工序,
1 AS 工序顺序,
0 AS 零件名称,
0 AS 零件图号,
0 AS 物料编码,
1 AS 加工数,
0 AS 计价方式,
1 AS 单价,
1 AS 总价,
1 AS 加工工时M,
1 AS 暂停时长,
0 AS 开始加工时间,
0 AS 完成时间,
0 AS 操作者,
0 AS 设备,
0 AS 订单编号,
0 AS 产品名称;
;WITH PriceData AS (
SELECT
data.*,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT
工序,
工序顺序,
零件名称,
图号 AS 零件图号,
物料编码,
完成数 AS 加工数,
计价方式,
单价,
总价,
加工时长 AS 加工工时M,
暂停时间 AS 暂停时长,
开始加工 AS 开始加工时间,
结束加工 AS 完成时间,
操作者,
工位号 AS 设备,
订单编号,
产品名称
FROM PriceData
ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END
GO

View File

@@ -7,7 +7,88 @@ GO
SET QUOTED_IDENTIFIER ON SET QUOTED_IDENTIFIER ON
GO GO
-- 员工工时汇总增加工价总价,工价取工序工价当前启用最终单价,总价=完成数量*工价;修改人:Ld 修改时间:2026-07-06 09:12:38; -- 完成过程表补充计价字段,工时统计按当次完成记录判断计件或计时;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'计价方式') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [计价方式] NVARCHAR(20) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_计价方式] DEFAULT (N'计件');
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单件工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单件工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单件工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单时工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单时工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单时工价] DEFAULT ((0));
GO
-- 旧完成记录默认计件,单件工价按工序工价当前启用价格回填;修改人:Ld 修改时间:2026-07-06 15:18:06;
UPDATE finishData
SET 计价方式 = ISNULL(NULLIF(finishData.计价方式, N''), N'计件'),
单件工价 = CASE
WHEN ISNULL(finishData.单件工价, 0) <> 0 THEN finishData.单件工价
ELSE ISNULL(priceData.单件工价, 0)
END,
单时工价 = ISNULL(finishData.单时工价, 0)
FROM [dbo].[设备管理_零件工序_工序完成过程情况] finishData
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = finishData.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE finishData.计价方式 IS NULL
OR finishData.计价方式 = N''
OR finishData.单件工价 IS NULL
OR finishData.单时工价 IS NULL;
GO
-- 工时统计明细视图补充完成过程流水号和计价字段,便于计时单价编辑回写;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER VIEW [dbo].[车间生产管理_零件工序加工时长_视图]
AS
SELECT
dbo.车间生产管理_零件工序_视图.工序,
dbo.车间生产管理_零件工序_视图.加工设备,
dbo.车间生产管理_零件工序_视图.零件名称,
dbo.车间生产管理_零件工序_视图.零件图号 AS 图号,
dbo.车间生产管理_零件工序_视图.数量,
dbo.设备管理_零件工序_工序完成过程情况.完成数量 AS 完成数,
dbo.设备管理_零件工序_工序完成过程情况.加工开始时间 AS 开始加工,
dbo.设备管理_零件工序_工序完成过程情况.加工完成时间 AS 结束加工,
ISNULL(dbo.设备管理_零件工序_工序完成过程情况.扫码工时, 0) AS 加工时长,
dbo.车间生产管理_零件工序_视图.订单号 AS 订单编号,
dbo.车间生产管理_零件工序_视图.产品名称,
dbo.设备管理_零件工序_工序完成过程情况.操作者编号,
CONVERT(VARCHAR(10), dbo.车间生产管理_零件工序_视图.派工日期, 23) AS 任务下达,
dbo.基础数据_设备工位点检表.设备名称 + N'-' + dbo.设备管理_零件工序_工序完成过程情况.工位号 AS 工位号,
dbo.人事档案管理_人员名单.姓名 AS 操作者,
dbo.车间生产管理_零件工序_视图.订单流水号,
dbo.车间生产管理_零件工序_视图.定额工时,
dbo.车间生产管理_零件工序_视图.准结工时,
dbo.车间生产管理_零件工序_视图.工艺计划流水号,
dbo.车间生产管理_零件工序_视图.物料编码,
dbo.车间生产管理_零件工序_视图.工序顺序,
dbo.设备管理_零件工序_工序完成过程情况.暂停时间,
dbo.设备管理_零件工序_工序完成过程情况.完成过程流水号,
ISNULL(NULLIF(dbo.设备管理_零件工序_工序完成过程情况.计价方式, N''), N'计件') AS 计价方式,
ISNULL(dbo.设备管理_零件工序_工序完成过程情况.单件工价, 0) AS 单件工价,
ISNULL(dbo.设备管理_零件工序_工序完成过程情况.单时工价, 0) AS 单时工价
FROM dbo.车间生产管理_零件工序_视图
INNER JOIN dbo.设备管理_零件工序_工序完成过程情况
ON dbo.车间生产管理_零件工序_视图.工序流水号 = dbo.设备管理_零件工序_工序完成过程情况.工序流水号
INNER JOIN dbo.基础数据_设备工位点检表
ON dbo.设备管理_零件工序_工序完成过程情况.工位号 = dbo.基础数据_设备工位点检表.工位号
INNER JOIN dbo.人事档案管理_人员名单
ON dbo.设备管理_零件工序_工序完成过程情况.操作者编号 = dbo.人事档案管理_人员名单.人员编号
GO
-- 员工工时汇总增加单价总价,计件按单件工价*数量,计时按单时工价*加工分钟/60;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[车间生产管理_工人工时统计_查询数据] ALTER PROCEDURE [dbo].[车间生产管理_工人工时统计_查询数据]
@开始时间 DATETIME = NULL, @开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL @结束时间 DATETIME = NULL
@@ -28,16 +109,24 @@ BEGIN
f.操作者编号, f.操作者编号,
f.完成日期, f.完成日期,
f.完成数量, f.完成数量,
ISNULL(f.完成数量, 0) * ISNULL(price.工价, 0) AS 总价 CASE
WHEN ISNULL(NULLIF(f.计价方式, N''), N'计件') = N'计时'
THEN ROUND(ISNULL(f.扫码工时, 0) / 60.0 * ISNULL(f.单时工价, 0), 4)
ELSE ROUND(ISNULL(f.完成数量, 0) * CASE WHEN ISNULL(f.单件工价, 0) <> 0 THEN f.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.设备管理_零件工序_工序完成过程情况 f FROM dbo.设备管理_零件工序_工序完成过程情况 f
INNER JOIN dbo.人事档案管理_人员名单 p ON f.操作者编号 = p.人员编号 INNER JOIN dbo.人事档案管理_人员名单 p ON f.操作者编号 = p.人员编号
OUTER APPLY ( OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价 SELECT TOP 1
FROM dbo.车间生产管理工艺_工序工价 pp CASE
WHERE pp.工序流水号 = f.工序流水号 WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
AND ISNULL(pp.是否启用, 1) = 1 ELSE ISNULL(price.[最终单价(元/件)], 0)
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC END AS 单件工价
) price FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.工序流水号 = f.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE f.完成日期 >= @开始时间 WHERE f.完成日期 >= @开始时间
AND f.完成日期 <= @结束时间 AND f.完成日期 <= @结束时间
) a ) a
@@ -45,7 +134,7 @@ BEGIN
END END
GO GO
-- 员工工时明细增加工价总价,明细按零件名称+图号+工序匹配工序工价;修改人:Ld 修改时间:2026-07-06 09:12:38; -- 员工工时明细返回单价,计时记录允许前端编辑单时工价;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[精工车间_员工工时统计_详情_查询数据] ALTER PROCEDURE [dbo].[精工车间_员工工时统计_详情_查询数据]
@操作者编号 INT = 62, @操作者编号 INT = 62,
@开始时间 DATETIME = NULL, @开始时间 DATETIME = NULL,
@@ -56,32 +145,43 @@ AS
BEGIN BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
SELECT ;WITH PriceData AS (
data.*, SELECT
data.加工时长 / NULLIF(data.完成数, 0) AS 单个工时, data.*,
ISNULL(price.工价, 0) AS 工价, data.加工时长 / NULLIF(data.完成数, 0) AS 单个工时,
ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价 CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
FROM dbo.车间生产管理_零件工序加工时长_视图 data CASE
OUTER APPLY ( WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价 ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
FROM dbo.车间生产管理工艺_工序工价 pp END AS 总价
WHERE pp.零件名称 = data.零件名称 FROM dbo.车间生产管理_零件工序加工时长_视图 data
AND pp.图号 = data.图号 OUTER APPLY (
AND pp.工序名称 = data.工序 SELECT TOP 1
AND ISNULL(pp.是否启用, 1) = 1 CASE
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
) price ELSE ISNULL(price.[最终单价(元/件)], 0)
WHERE data.操作者编号 = @操作者编号 END AS 单件工价
AND data.结束加工 >= @开始时间 FROM dbo.车间生产管理工艺_工序工价 price
AND data.结束加工 < DATEADD(DAY, 1, @结束时间) WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.操作者编号 = @操作者编号
AND data.结束加工 >= @开始时间
AND data.结束加工 < DATEADD(DAY, 1, @结束时间)
)
SELECT *
FROM PriceData
ORDER BY ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC, CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC, CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC; CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END END
GO GO
-- 设备工时汇总增加工价总价,工价取工序工价当前启用最终单价,总价=完成数量*工价;修改人:Ld 修改时间:2026-07-06 09:12:38; -- 设备工时汇总增加单价总价,计件按单件工价*数量,计时按单时工价*加工分钟/60;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[车间生产管理_设备工时统计_查询数据] ALTER PROCEDURE [dbo].[车间生产管理_设备工时统计_查询数据]
@开始时间 DATETIME = NULL, @开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL @结束时间 DATETIME = NULL
@@ -99,16 +199,24 @@ BEGIN
ISNULL(f.扫码工时, 0) AS 工时, ISNULL(f.扫码工时, 0) AS 工时,
e.设备名称 + N'-' + f.工位号 AS 工位号, e.设备名称 + N'-' + f.工位号 AS 工位号,
f.完成数量, f.完成数量,
ISNULL(f.完成数量, 0) * ISNULL(price.工价, 0) AS 总价 CASE
WHEN ISNULL(NULLIF(f.计价方式, N''), N'计件') = N'计时'
THEN ROUND(ISNULL(f.扫码工时, 0) / 60.0 * ISNULL(f.单时工价, 0), 4)
ELSE ROUND(ISNULL(f.完成数量, 0) * CASE WHEN ISNULL(f.单件工价, 0) <> 0 THEN f.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.设备管理_零件工序_工序完成过程情况 f FROM dbo.设备管理_零件工序_工序完成过程情况 f
INNER JOIN dbo.基础数据_设备工位点检表 e ON f.工位号 = e.工位号 INNER JOIN dbo.基础数据_设备工位点检表 e ON f.工位号 = e.工位号
OUTER APPLY ( OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价 SELECT TOP 1
FROM dbo.车间生产管理工艺_工序工价 pp CASE
WHERE pp.工序流水号 = f.工序流水号 WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
AND ISNULL(pp.是否启用, 1) = 1 ELSE ISNULL(price.[最终单价(元/件)], 0)
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC END AS 单件工价
) price FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.工序流水号 = f.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE f.完成日期 >= @开始时间 WHERE f.完成日期 >= @开始时间
AND f.完成日期 <= @结束时间 AND f.完成日期 <= @结束时间
) a ) a
@@ -116,7 +224,7 @@ BEGIN
END END
GO GO
-- 设备工时明细增加工价总价,明细按零件名称+图号+工序匹配工序工价;修改人:Ld 修改时间:2026-07-06 09:12:38; -- 设备工时明细返回单价,计时记录允许前端编辑单时工价;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[精工车间_设备工时统计_详情_查询数据] ALTER PROCEDURE [dbo].[精工车间_设备工时统计_详情_查询数据]
@设备 NVARCHAR(50) = NULL, @设备 NVARCHAR(50) = NULL,
@开始时间 DATETIME = NULL, @开始时间 DATETIME = NULL,
@@ -127,31 +235,76 @@ AS
BEGIN BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
SELECT ;WITH PriceData AS (
data.*, SELECT
ISNULL(price.工价, 0) AS 工价, data.*,
ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价 CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
FROM dbo.车间生产管理_零件工序加工时长_视图 data CASE
OUTER APPLY ( WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价 ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
FROM dbo.车间生产管理工艺_工序工价 pp END AS 总价
WHERE pp.零件名称 = data.零件名称 FROM dbo.车间生产管理_零件工序加工时长_视图 data
AND pp.图号 = data.图号 OUTER APPLY (
AND pp.工序名称 = data.工序 SELECT TOP 1
AND ISNULL(pp.是否启用, 1) = 1 CASE
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
) price ELSE ISNULL(price.[最终单价(元/件)], 0)
WHERE data.工位号 = @设备 END AS 单件工价
AND data.结束加工 >= @开始时间 FROM dbo.车间生产管理工艺_工序工价 price
AND data.结束加工 <= @结束时间 WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.工位号 = @设备
AND data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT *
FROM PriceData
ORDER BY ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC, CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC, CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC; CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END END
GO GO
-- 员工工时导出增加工价总价列,保持与页面明细一致;修改人:Ld 修改时间:2026-07-06 09:12:38; -- 计时记录单时工价编辑保存;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[车间生产管理_工时统计_单时工价_修改数据]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[车间生产管理_工时统计_单时工价_修改数据];
GO
CREATE PROCEDURE [dbo].[车间生产管理_工时统计_单时工价_修改数据]
@完成过程流水号 NVARCHAR(50) = N'',
@单时工价 NVARCHAR(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT;
DECLARE @Safe单时工价 DECIMAL(18, 4);
SET @Id = CASE WHEN ISNUMERIC(NULLIF(@完成过程流水号, N'')) = 1 THEN CONVERT(INT, @完成过程流水号) ELSE NULL END;
SET @Safe单时工价 = CASE WHEN ISNUMERIC(NULLIF(@单时工价, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @单时工价) ELSE 0 END;
IF @Id IS NULL
BEGIN
SELECT N'0' AS result, N'完成过程流水号不能为空' AS message;
RETURN;
END;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET 计价方式 = N'计时',
单时工价 = @Safe单时工价,
修改时间 = GETDATE()
WHERE 完成过程流水号 = @Id;
SELECT N'1' AS result;
END
GO
-- 员工工时导出增加计价方式、单价和总价列;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据] ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据]
@开始时间 DATETIME = NULL, @开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL, @结束时间 DATETIME = NULL,
@@ -161,7 +314,9 @@ AS
BEGIN BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
SELECT N'库存_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '17' AS tabletype; -- 修正导出文件名前缀,避免工时统计导出显示库存文件名;修改人:Ld 修改时间:2026-07-17 07:53:49;
-- 后端导出处理器未支持 tabletype=18,使用通用导出类型 15 防止返回 NULL;修改人:Ld 修改时间:2026-07-17 07:58:30;
SELECT N'员工工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT SELECT
256 * 15 AS 工序, 256 * 15 AS 工序,
@@ -170,10 +325,11 @@ BEGIN
256 * 30 AS 零件图号, 256 * 30 AS 零件图号,
256 * 20 AS 物料编码, 256 * 20 AS 物料编码,
256 * 10 AS 加工数, 256 * 10 AS 加工数,
256 * 12 AS 计价方式,
256 * 10 AS 单价,
256 * 12 AS 总价,
256 * 15 AS 加工工时M, 256 * 15 AS 加工工时M,
256 * 10 AS 暂停时长, 256 * 10 AS 暂停时长,
256 * 10 AS 工价,
256 * 12 AS 总价,
256 * 30 AS 开始加工时间, 256 * 30 AS 开始加工时间,
256 * 30 AS 完成时间, 256 * 30 AS 完成时间,
256 * 10 AS 操作者, 256 * 10 AS 操作者,
@@ -186,12 +342,14 @@ BEGIN
1 AS 工序顺序, 1 AS 工序顺序,
0 AS 零件名称, 0 AS 零件名称,
0 AS 零件图号, 0 AS 零件图号,
0 AS 物料编号, -- 修正导出元数据列名需与字段宽度和数据列一致;修改人:Ld 修改时间:2026-07-17 07:53:49;
0 AS 物料编码,
1 AS 加工数, 1 AS 加工数,
0 AS 计价方式,
1 AS 单价,
1 AS 总价,
1 AS 加工工时M, 1 AS 加工工时M,
1 AS 暂停时长, 1 AS 暂停时长,
1 AS 工价,
1 AS 总价,
0 AS 开始加工时间, 0 AS 开始加工时间,
0 AS 完成时间, 0 AS 完成时间,
0 AS 操作者, 0 AS 操作者,
@@ -199,38 +357,53 @@ BEGIN
0 AS 订单编号, 0 AS 订单编号,
0 AS 产品名称; 0 AS 产品名称;
;WITH PriceData AS (
SELECT
data.*,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT SELECT
data.工序, 工序,
data.工序顺序, 工序顺序,
data.零件名称, 零件名称,
data.图号 AS 零件图号, 图号 AS 零件图号,
data.物料编码, 物料编码,
data.完成数 AS 加工数, 完成数 AS 加工数,
data.加工时长 AS 加工工时M, 计价方式,
data.暂停时间 AS 暂停时长, 单价,
ISNULL(price.工价, 0) AS 工价, 总价,
ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价, 加工时长 AS 加工工时M,
data.开始加工 AS 开始加工时间, 暂停时间 AS 暂停时长,
data.结束加工 AS 完成时间, 开始加工 AS 开始加工时间,
data.操作者, 结束加工 AS 完成时间,
data.工位号 AS 设备, 操作者,
data.订单编号, 工位号 AS 设备,
data.产品名称 订单编号,
FROM dbo.车间生产管理_零件工序加工时长_视图 data 产品名称
OUTER APPLY ( FROM PriceData
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
FROM dbo.车间生产管理工艺_工序工价 pp
WHERE pp.零件名称 = data.零件名称
AND pp.图号 = data.图号
AND pp.工序名称 = data.工序
AND ISNULL(pp.是否启用, 1) = 1
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
) price
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
ORDER BY ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC, CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC, CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC; CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END END
GO GO

View File

@@ -1,4 +1,36 @@
-- 生产完成审核查询与审核处理 修改人:Ld 修改时间:2026-07-02 13:57:18; -- 生产完成审核查询与审核处理 修改人:Ld 修改时间:2026-07-02 13:57:18;
-- 生产审核补充计价方式和工价字段,用于传递到工时统计;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'计价方式') IS NULL
ALTER TABLE [dbo].[MES_机加工MES_加工完成整修审核表] ADD [计价方式] NVARCHAR(20) NULL CONSTRAINT [DF_MES_机加工MES_加工完成整修审核表_计价方式] DEFAULT (N'计件');
GO
IF OBJECT_ID(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'单件工价') IS NULL
ALTER TABLE [dbo].[MES_机加工MES_加工完成整修审核表] ADD [单件工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_MES_机加工MES_加工完成整修审核表_单件工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'单时工价') IS NULL
ALTER TABLE [dbo].[MES_机加工MES_加工完成整修审核表] ADD [单时工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_MES_机加工MES_加工完成整修审核表_单时工价] DEFAULT ((0));
GO
-- 审核通过后写入完成过程表的计价字段,保障本脚本可单独部署;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'计价方式') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [计价方式] NVARCHAR(20) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_计价方式] DEFAULT (N'计件');
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单件工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单件工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单件工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单时工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单时工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单时工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[机加工MES_加工完成整修审核_查询数据]', N'P') IS NOT NULL IF OBJECT_ID(N'[dbo].[机加工MES_加工完成整修审核_查询数据]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[机加工MES_加工完成整修审核_查询数据]; DROP PROCEDURE [dbo].[机加工MES_加工完成整修审核_查询数据];
GO GO
@@ -49,6 +81,9 @@ BEGIN
工作者.姓名 AS 工作者姓名, 工作者.姓名 AS 工作者姓名,
A.完成数量, A.完成数量,
A.完成类型, A.完成类型,
ISNULL(NULLIF(A.计价方式, N''), N'计件') AS 计价方式,
CASE WHEN ISNULL(A.单件工价, 0) <> 0 THEN A.单件工价 ELSE ISNULL(priceData.单件工价, 0) END AS 单件工价,
ISNULL(A.单时工价, 0) AS 单时工价,
A.录工票人员编号, A.录工票人员编号,
录工票人员.姓名 AS 录工票人员姓名, 录工票人员.姓名 AS 录工票人员姓名,
A.工位号, A.工位号,
@@ -90,6 +125,17 @@ BEGIN
OR A.审核人 = 审核人员.姓名 OR A.审核人 = 审核人员.姓名
LEFT JOIN [dbo].[基础数据_设备工位点检表] AS SB LEFT JOIN [dbo].[基础数据_设备工位点检表] AS SB
ON A.工位号 = SB.工位号 ON A.工位号 = SB.工位号
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = A.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE (@审核状态_check = 0 OR A.审核状态 = @审核状态) WHERE (@审核状态_check = 0 OR A.审核状态 = @审核状态)
AND (@审核类型_check = 0 OR A.审核类型 = @审核类型) AND (@审核类型_check = 0 OR A.审核类型 = @审核类型)
AND (@操作者_check = 0 OR ISNULL(操作者人员.姓名, ISNULL(A.操作者, N'')) LIKE N'%' + @操作者 + N'%') AND (@操作者_check = 0 OR ISNULL(操作者人员.姓名, ISNULL(A.操作者, N'')) LIKE N'%' + @操作者 + N'%')
@@ -115,6 +161,9 @@ BEGIN
工作者姓名, 工作者姓名,
完成数量, 完成数量,
完成类型, 完成类型,
计价方式,
单件工价,
单时工价,
录工票人员编号, 录工票人员编号,
录工票人员姓名, 录工票人员姓名,
工位号, 工位号,
@@ -155,12 +204,8 @@ BEGIN
END; END;
GO GO
-- 生产完成审核状态更新,审核通过时接入原 MES 完工链路 修改人:Ld 修改时间:2026-07-02 14:55:23; -- 生产审核普通通过只改审核状态为已审核;修改数量/时间才修正生产完成数据。修改人:Ld 修改时间:2026-07-17 09:10:08;
IF OBJECT_ID(N'[dbo].[机加工MES_加工完成整修审核_审核数据]', N'P') IS NOT NULL ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
DROP PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据];
GO
CREATE PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核流水号 INT, @审核流水号 INT,
@审核状态 NVARCHAR(20), @审核状态 NVARCHAR(20),
@审核人 NVARCHAR(100) = NULL, @审核人 NVARCHAR(100) = NULL,
@@ -170,28 +215,39 @@ CREATE PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核加工完成时间 DATETIME = NULL, @审核加工完成时间 DATETIME = NULL,
@审核整修开始时间 DATETIME = NULL, @审核整修开始时间 DATETIME = NULL,
@审核整修结束时间 DATETIME = NULL, @审核整修结束时间 DATETIME = NULL,
@审核整修方案 NVARCHAR(1000) = NULL @审核整修方案 NVARCHAR(1000) = NULL,
@计价方式 NVARCHAR(20) = NULL
AS AS
BEGIN BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
DECLARE @目标审核状态 NVARCHAR(20);
DECLARE @审核类型 NVARCHAR(50); DECLARE @审核类型 NVARCHAR(50);
DECLARE @工序流水号 INT; DECLARE @工序流水号 INT;
DECLARE @工作者考勤编号 NVARCHAR(50); DECLARE @原完成数量 FLOAT;
DECLARE @完成数量 FLOAT; DECLARE @最终完成数量 FLOAT;
DECLARE @完成类型 INT; DECLARE @数量差 FLOAT;
DECLARE @录工票人员编号 INT; DECLARE @录工票人员编号 INT;
DECLARE @工位号 NVARCHAR(100); DECLARE @工位号 NVARCHAR(100);
DECLARE @备注 NVARCHAR(500); DECLARE @设备流水号 INT;
DECLARE @完成过程流水号 INT;
DECLARE @设备号 NVARCHAR(100); DECLARE @设备号 NVARCHAR(100);
DECLARE @整修记录id INT; DECLARE @整修记录id INT;
DECLARE @整修方案 NVARCHAR(1000); DECLARE @整修方案 NVARCHAR(1000);
DECLARE @剩余工时 FLOAT; DECLARE @Safe计价方式 NVARCHAR(20);
DECLARE @剩余数量 INT; DECLARE @单件工价 DECIMAL(18, 4);
DECLARE @原流程结果 NVARCHAR(100); DECLARE @单时工价 DECIMAL(18, 4);
DECLARE @完成过程流水号 INT; DECLARE @是否修改加工 BIT = 0;
DECLARE @是否修改整修 BIT = 0;
DECLARE @是否本过程开启事务 BIT; DECLARE @是否本过程开启事务 BIT;
DECLARE @原流程返回 TABLE (result NVARCHAR(100));
SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END;
IF @目标审核状态 NOT IN (N'已审核', N'审核不通过')
BEGIN
SELECT N'0' AS result, N'审核状态不正确' AS message;
RETURN;
END;
IF NOT EXISTS ( IF NOT EXISTS (
SELECT 1 SELECT 1
@@ -204,172 +260,172 @@ BEGIN
RETURN; RETURN;
END; END;
IF @审核状态 NOT IN (N'审核通过', N'审核不通过')
BEGIN
SELECT N'0' AS result, N'审核状态不正确' AS message;
RETURN;
END;
SELECT SELECT
@审核类型 = 审核类型, @审核类型 = 审核类型,
@工序流水号 = 工序流水号, @工序流水号 = 工序流水号,
@工作者考勤编号 = 工作者考勤编号, @原完成数量 = ISNULL(完成数量, 0),
@完成数量 = ISNULL(@审核完成数量, 完成数量),
@完成类型 = 完成类型,
@录工票人员编号 = 录工票人员编号, @录工票人员编号 = 录工票人员编号,
@工位号 = 工位号, @工位号 = 工位号,
@备注 = 备注,
@设备号 = 设备号, @设备号 = 设备号,
@整修记录id = 整修记录id, @整修记录id = 整修记录id,
@整修方案 = ISNULL(@审核整修方案, 整修方案) @整修方案 = ISNULL(@审核整修方案, 整修方案),
@Safe计价方式 = ISNULL(NULLIF(@计价方式, N''), ISNULL(NULLIF(计价方式, N''), N'计件')),
@单时工价 = ISNULL(单时工价, 0)
FROM [dbo].[MES_机加工MES_加工完成整修审核表] FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号 WHERE id = @审核流水号
AND 审核状态 = N'待审核'; AND 审核状态 = N'待审核';
IF @Safe计价方式 NOT IN (N'计件', N'计时')
SET @Safe计价方式 = N'计件';
SET @最终完成数量 = ISNULL(@审核完成数量, @原完成数量);
SET @数量差 = ISNULL(@最终完成数量, 0) - ISNULL(@原完成数量, 0);
SET @是否修改加工 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'加工完成'
AND (@审核完成数量 IS NOT NULL OR @审核加工开始时间 IS NOT NULL OR @审核加工完成时间 IS NOT NULL OR @计价方式 IS NOT NULL)
THEN 1 ELSE 0 END;
SET @是否修改整修 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'结束整修'
AND (@审核整修开始时间 IS NOT NULL OR @审核整修结束时间 IS NOT NULL OR @审核整修方案 IS NOT NULL)
THEN 1 ELSE 0 END;
IF @是否修改加工 = 1 AND (@最终完成数量 < 0 OR @最终完成数量 <> FLOOR(@最终完成数量))
BEGIN
SELECT N'0' AS result, N'完成数量必须为大于等于 0 的整数' AS message;
RETURN;
END;
SELECT TOP 1 @单件工价 = CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = @工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC;
SET @单件工价 = ISNULL(@单件工价, 0);
SET @单时工价 = ISNULL(@单时工价, 0);
BEGIN TRY BEGIN TRY
SET @是否本过程开启事务 = CASE WHEN @@TRANCOUNT = 0 THEN 1 ELSE 0 END; SET @是否本过程开启事务 = CASE WHEN @@TRANCOUNT = 0 THEN 1 ELSE 0 END;
IF @是否本过程开启事务 = 1 IF @是否本过程开启事务 = 1
BEGIN
BEGIN TRAN; BEGIN TRAN;
END
ELSE ELSE
BEGIN
SAVE TRAN 生产完成审核保存点; SAVE TRAN 生产完成审核保存点;
END;
IF @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' IF @是否修改加工 = 1
BEGIN BEGIN
IF @工序流水号 IS NULL OR @工作者考勤编号 IS NULL OR @完成数量 IS NULL OR @完成类型 IS NULL OR @录工票人员编号 IS NULL SELECT @设备流水号 = [设备流水号]
FROM [dbo].[基础数据_设备工位点检表]
WHERE [工位号] = @工位号;
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
AND [完成数量] = @原完成数量
ORDER BY [完成过程流水号] DESC;
IF @完成过程流水号 IS NULL
BEGIN
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
ORDER BY [完成过程流水号] DESC;
END;
IF @完成过程流水号 IS NULL
BEGIN BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点; IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'审核记录缺少原 MES 完工必需参数' AS message; SELECT N'0' AS result, N'未找到对应生产完成记录' AS message;
RETURN; RETURN;
END; END;
IF @完成数量 <= 0 OR @完成数量 <> FLOOR(@完成数量) UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET [完成数量] = @最终完成数量,
[加工开始时间] = ISNULL(@审核加工开始时间, [加工开始时间]),
[加工完成时间] = ISNULL(@审核加工完成时间, [加工完成时间]),
[完成日期] = CASE WHEN @审核加工完成时间 IS NULL THEN [完成日期] ELSE CONVERT(DATE, @审核加工完成时间) END,
[操作日期] = ISNULL(@审核加工完成时间, [操作日期]),
[计价方式] = @Safe计价方式,
[单件工价] = @单件工价,
[单时工价] = CASE WHEN @Safe计价方式 = N'计时' THEN ISNULL([单时工价], @单时工价) ELSE 0 END,
[修改人员] = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE [修改人员] END,
[修改时间] = GETDATE()
WHERE [完成过程流水号] = @完成过程流水号;
IF ISNULL(@数量差, 0) <> 0
BEGIN BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点; UPDATE [dbo].[车间生产管理工艺_零件工序]
SELECT N'0' AS result, N'完成数量必须为大于 0 的整数' AS message; SET [完成数量] = ISNULL([完成数量], 0) + @数量差
RETURN; WHERE [工序流水号] = @工序流水号;
END;
INSERT INTO @原流程返回(result) UPDATE [dbo].[车间生产管理工艺_零件工序_任务分配]
EXEC [dbo].[设备管理_零件工序_工序完成过程情况_增加数据] SET [加工数量] = ISNULL([加工数量], 0) + @数量差
@工序流水号 = @工序流水号, WHERE [工序流水号] = @工序流水号
@工作者考勤编号 = @工作者考勤编号, AND [人员编号] = @录工票人员编号
@完成数量 = @完成数量, AND [设备流水号] = @设备流水号;
@完成类型 = @完成类型,
@录工票人员编号 = @录工票人员编号,
@工位号 = @工位号,
@备注 = @备注,
@剩余工时 = @剩余工时 OUTPUT,
@剩余数量 = @剩余数量 OUTPUT;
SELECT TOP 1 @原流程结果 = result FROM @原流程返回;
IF ISNULL(@原流程结果, N'') <> N'成功'
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, ISNULL(@原流程结果, N'原 MES 完工流程执行失败') AS message;
RETURN;
END; END;
IF @审核加工完成时间 IS NOT NULL IF @审核加工完成时间 IS NOT NULL
BEGIN BEGIN
SELECT @完成过程流水号 = MAX(完成过程流水号)
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE 工序流水号 = @工序流水号
AND 录工票人员编号 = @录工票人员编号
AND 完成数量 = @完成数量;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET 加工开始时间 = ISNULL(@审核加工开始时间, 加工开始时间),
加工完成时间 = @审核加工完成时间,
完成日期 = CONVERT(DATE, @审核加工完成时间),
操作日期 = @审核加工完成时间,
修改人员 = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE 修改人员 END,
修改时间 = GETDATE()
WHERE 完成过程流水号 = @完成过程流水号;
UPDATE [dbo].[车间生产管理工艺_零件工序] UPDATE [dbo].[车间生产管理工艺_零件工序]
SET 完成日期 = CASE WHEN 完成日期 IS NULL OR 完成数量 >= ISNULL(完成数量, 0) THEN @审核加工完成时间 ELSE 完成日期 END SET [完成日期] = @审核加工完成时间
WHERE 工序流水号 = @工序流水号; WHERE [工序流水号] = @工序流水号;
END;
IF @审核加工开始时间 IS NOT NULL AND @审核加工完成时间 IS NULL
BEGIN
SELECT @完成过程流水号 = MAX(完成过程流水号)
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE 工序流水号 = @工序流水号
AND 录工票人员编号 = @录工票人员编号
AND 完成数量 = @完成数量;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET 加工开始时间 = @审核加工开始时间,
修改人员 = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE 修改人员 END,
修改时间 = GETDATE()
WHERE 完成过程流水号 = @完成过程流水号;
END; END;
END; END;
IF @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' IF @是否修改整修 = 1
BEGIN BEGIN
IF @整修记录id IS NULL OR @设备号 IS NULL
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'审核记录缺少整修结束必需参数' AS message;
RETURN;
END;
UPDATE [dbo].[设备管理_整修] UPDATE [dbo].[设备管理_整修]
SET 整修开始时间 = CASE WHEN @审核整修开始时间 IS NULL THEN 整修开始时间 ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END, SET [整修开始时间] = CASE WHEN @审核整修开始时间 IS NULL THEN [整修开始时间] ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END,
整修结束时间 = CONVERT(VARCHAR(20), ISNULL(@审核整修结束时间, GETDATE()), 120), [整修结束时间] = CASE WHEN @审核整修结束时间 IS NULL THEN [整修结束时间] ELSE CONVERT(VARCHAR(20), @审核整修结束时间, 120) END,
整修状态 = N'1', [整修方案] = @整修方案
整修方案 = @整修方案 WHERE [id] = @整修记录id
WHERE id = @整修记录id AND [设备号] = @设备号;
AND 设备号 = @设备号;
END; END;
UPDATE [dbo].[MES_机加工MES_加工完成整修审核表] UPDATE [dbo].[MES_机加工MES_加工完成整修审核表]
SET 审核状态 = @审核状态, SET [审核状态] = @目标审核状态,
审核人 = @审核人, [审核人] = @审核人,
审核时间 = GETDATE(), [审核时间] = GETDATE(),
审核意见 = ISNULL(@审核意见, N''), [审核意见] = ISNULL(@审核意见, N''),
完成数量 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' THEN @完成数量 ELSE 完成数量 END, [完成数量] = CASE WHEN @是否修改加工 = 1 THEN @最终完成数量 ELSE [完成数量] END,
开始时间 = CASE [开始时间] = CASE
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间 WHEN @是否修改加工 = 1 AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间 WHEN @是否修改整修 = 1 AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间
ELSE 开始时间 ELSE [开始时间]
END, END,
结束时间 = CASE [结束时间] = CASE
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间 WHEN @是否修改加工 = 1 AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' THEN ISNULL(@审核整修结束时间, GETDATE()) WHEN @是否修改整修 = 1 AND @审核整修结束时间 IS NOT NULL THEN @审核整修结束时间
ELSE 结束时间 ELSE [结束时间]
END, END,
整修方案 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' THEN @整修方案 ELSE 整修方案 END, [整修方案] = CASE WHEN @是否修改整修 = 1 THEN @整修方案 ELSE [整修方案] END,
剩余工时 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' THEN @剩余工时 ELSE 剩余工时 END, [计价方式] = CASE WHEN @是否修改加工 = 1 THEN @Safe计价方式 ELSE [计价方式] END,
剩余数量 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' THEN @剩余数量 ELSE 剩余数量 END, [单件工价] = CASE WHEN @是否修改加工 = 1 THEN @单件工价 ELSE [单件工价] END,
修改人 = N'Ld', [单时工价] = CASE WHEN @是否修改加工 = 1 THEN @单时工价 ELSE [单时工价] END,
修改时间 = GETDATE() [修改人] = N'Ld',
WHERE id = @审核流水号 [修改时间] = GETDATE()
AND 审核状态 = N'待审核'; WHERE [id] = @审核流水号
AND [审核状态] = N'待审核';
IF @是否本过程开启事务 = 1 IF @是否本过程开启事务 = 1
BEGIN
COMMIT TRAN; COMMIT TRAN;
END;
END TRY END TRY
BEGIN CATCH BEGIN CATCH
IF @@TRANCOUNT > 0 IF @@TRANCOUNT > 0
BEGIN BEGIN
IF ISNULL(@是否本过程开启事务, 1) = 1 IF ISNULL(@是否本过程开启事务, 1) = 1
BEGIN
ROLLBACK TRAN; ROLLBACK TRAN;
END
ELSE ELSE
BEGIN
ROLLBACK TRAN 生产完成审核保存点; ROLLBACK TRAN 生产完成审核保存点;
END;
END; END;
SELECT N'0' AS result, ERROR_MESSAGE() AS message; SELECT N'0' AS result, ERROR_MESSAGE() AS message;
@@ -379,3 +435,5 @@ BEGIN
SELECT N'1' AS result; SELECT N'1' AS result;
END; END;
GO GO
GO

View File

@@ -0,0 +1,231 @@
-- 生产审核普通通过只改审核状态为已审核;修改数量/时间才修正生产完成数据。修改人:Ld 修改时间:2026-07-17 09:10:08;
ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核流水号 INT,
@审核状态 NVARCHAR(20),
@审核人 NVARCHAR(100) = NULL,
@审核意见 NVARCHAR(1000) = NULL,
@审核完成数量 FLOAT = NULL,
@审核加工开始时间 DATETIME = NULL,
@审核加工完成时间 DATETIME = NULL,
@审核整修开始时间 DATETIME = NULL,
@审核整修结束时间 DATETIME = NULL,
@审核整修方案 NVARCHAR(1000) = NULL,
@计价方式 NVARCHAR(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @目标审核状态 NVARCHAR(20);
DECLARE @审核类型 NVARCHAR(50);
DECLARE @工序流水号 INT;
DECLARE @原完成数量 FLOAT;
DECLARE @最终完成数量 FLOAT;
DECLARE @数量差 FLOAT;
DECLARE @录工票人员编号 INT;
DECLARE @工位号 NVARCHAR(100);
DECLARE @设备流水号 INT;
DECLARE @完成过程流水号 INT;
DECLARE @设备号 NVARCHAR(100);
DECLARE @整修记录id INT;
DECLARE @整修方案 NVARCHAR(1000);
DECLARE @Safe计价方式 NVARCHAR(20);
DECLARE @单件工价 DECIMAL(18, 4);
DECLARE @单时工价 DECIMAL(18, 4);
DECLARE @是否修改加工 BIT = 0;
DECLARE @是否修改整修 BIT = 0;
DECLARE @是否本过程开启事务 BIT;
SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END;
IF @目标审核状态 NOT IN (N'已审核', N'审核不通过')
BEGIN
SELECT N'0' AS result, N'审核状态不正确' AS message;
RETURN;
END;
IF NOT EXISTS (
SELECT 1
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核'
)
BEGIN
SELECT N'0' AS result, N'该审核记录不存在或已审核' AS message;
RETURN;
END;
SELECT
@审核类型 = 审核类型,
@工序流水号 = 工序流水号,
@原完成数量 = ISNULL(完成数量, 0),
@录工票人员编号 = 录工票人员编号,
@工位号 = 工位号,
@设备号 = 设备号,
@整修记录id = 整修记录id,
@整修方案 = ISNULL(@审核整修方案, 整修方案),
@Safe计价方式 = ISNULL(NULLIF(@计价方式, N''), ISNULL(NULLIF(计价方式, N''), N'计件')),
@单时工价 = ISNULL(单时工价, 0)
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核';
IF @Safe计价方式 NOT IN (N'计件', N'计时')
SET @Safe计价方式 = N'计件';
SET @最终完成数量 = ISNULL(@审核完成数量, @原完成数量);
SET @数量差 = ISNULL(@最终完成数量, 0) - ISNULL(@原完成数量, 0);
SET @是否修改加工 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'加工完成'
AND (@审核完成数量 IS NOT NULL OR @审核加工开始时间 IS NOT NULL OR @审核加工完成时间 IS NOT NULL OR @计价方式 IS NOT NULL)
THEN 1 ELSE 0 END;
SET @是否修改整修 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'结束整修'
AND (@审核整修开始时间 IS NOT NULL OR @审核整修结束时间 IS NOT NULL OR @审核整修方案 IS NOT NULL)
THEN 1 ELSE 0 END;
IF @是否修改加工 = 1 AND (@最终完成数量 < 0 OR @最终完成数量 <> FLOOR(@最终完成数量))
BEGIN
SELECT N'0' AS result, N'完成数量必须为大于等于 0 的整数' AS message;
RETURN;
END;
SELECT TOP 1 @单件工价 = CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = @工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC;
SET @单件工价 = ISNULL(@单件工价, 0);
SET @单时工价 = ISNULL(@单时工价, 0);
BEGIN TRY
SET @是否本过程开启事务 = CASE WHEN @@TRANCOUNT = 0 THEN 1 ELSE 0 END;
IF @是否本过程开启事务 = 1
BEGIN TRAN;
ELSE
SAVE TRAN 生产完成审核保存点;
IF @是否修改加工 = 1
BEGIN
SELECT @设备流水号 = [设备流水号]
FROM [dbo].[基础数据_设备工位点检表]
WHERE [工位号] = @工位号;
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
AND [完成数量] = @原完成数量
ORDER BY [完成过程流水号] DESC;
IF @完成过程流水号 IS NULL
BEGIN
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
ORDER BY [完成过程流水号] DESC;
END;
IF @完成过程流水号 IS NULL
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'未找到对应生产完成记录' AS message;
RETURN;
END;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET [完成数量] = @最终完成数量,
[加工开始时间] = ISNULL(@审核加工开始时间, [加工开始时间]),
[加工完成时间] = ISNULL(@审核加工完成时间, [加工完成时间]),
[完成日期] = CASE WHEN @审核加工完成时间 IS NULL THEN [完成日期] ELSE CONVERT(DATE, @审核加工完成时间) END,
[操作日期] = ISNULL(@审核加工完成时间, [操作日期]),
[计价方式] = @Safe计价方式,
[单件工价] = @单件工价,
[单时工价] = CASE WHEN @Safe计价方式 = N'计时' THEN ISNULL([单时工价], @单时工价) ELSE 0 END,
[修改人员] = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE [修改人员] END,
[修改时间] = GETDATE()
WHERE [完成过程流水号] = @完成过程流水号;
IF ISNULL(@数量差, 0) <> 0
BEGIN
UPDATE [dbo].[车间生产管理工艺_零件工序]
SET [完成数量] = ISNULL([完成数量], 0) + @数量差
WHERE [工序流水号] = @工序流水号;
UPDATE [dbo].[车间生产管理工艺_零件工序_任务分配]
SET [加工数量] = ISNULL([加工数量], 0) + @数量差
WHERE [工序流水号] = @工序流水号
AND [人员编号] = @录工票人员编号
AND [设备流水号] = @设备流水号;
END;
IF @审核加工完成时间 IS NOT NULL
BEGIN
UPDATE [dbo].[车间生产管理工艺_零件工序]
SET [完成日期] = @审核加工完成时间
WHERE [工序流水号] = @工序流水号;
END;
END;
IF @是否修改整修 = 1
BEGIN
UPDATE [dbo].[设备管理_整修]
SET [整修开始时间] = CASE WHEN @审核整修开始时间 IS NULL THEN [整修开始时间] ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END,
[整修结束时间] = CASE WHEN @审核整修结束时间 IS NULL THEN [整修结束时间] ELSE CONVERT(VARCHAR(20), @审核整修结束时间, 120) END,
[整修方案] = @整修方案
WHERE [id] = @整修记录id
AND [设备号] = @设备号;
END;
UPDATE [dbo].[MES_机加工MES_加工完成整修审核表]
SET [审核状态] = @目标审核状态,
[审核人] = @审核人,
[审核时间] = GETDATE(),
[审核意见] = ISNULL(@审核意见, N''),
[完成数量] = CASE WHEN @是否修改加工 = 1 THEN @最终完成数量 ELSE [完成数量] END,
[开始时间] = CASE
WHEN @是否修改加工 = 1 AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间
WHEN @是否修改整修 = 1 AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间
ELSE [开始时间]
END,
[结束时间] = CASE
WHEN @是否修改加工 = 1 AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间
WHEN @是否修改整修 = 1 AND @审核整修结束时间 IS NOT NULL THEN @审核整修结束时间
ELSE [结束时间]
END,
[整修方案] = CASE WHEN @是否修改整修 = 1 THEN @整修方案 ELSE [整修方案] END,
[计价方式] = CASE WHEN @是否修改加工 = 1 THEN @Safe计价方式 ELSE [计价方式] END,
[单件工价] = CASE WHEN @是否修改加工 = 1 THEN @单件工价 ELSE [单件工价] END,
[单时工价] = CASE WHEN @是否修改加工 = 1 THEN @单时工价 ELSE [单时工价] END,
[修改人] = N'Ld',
[修改时间] = GETDATE()
WHERE [id] = @审核流水号
AND [审核状态] = N'待审核';
IF @是否本过程开启事务 = 1
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
IF ISNULL(@是否本过程开启事务, 1) = 1
ROLLBACK TRAN;
ELSE
ROLLBACK TRAN 生产完成审核保存点;
END;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
RETURN;
END CATCH;
SELECT N'1' AS result;
END;
GO

View File

@@ -0,0 +1,81 @@
-- 物料入库组件自制件入库模块添加入库单按钮配套测试库脚本
-- 修改人:Ld 修改时间:2026-07-14 09:05:57;
ALTER PROCEDURE [dbo].[仓储管理_入库单_查询]
@类型_check bit = 0,
@类型 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON;
-- 修改人:Ld 修改时间:2026-07-14 09:05:57; 返回订单和类型字段,并支持采购/自制件入库单筛选
SELECT
入库单.入库单流水号,
入库单.入库单号,
入库单.采购合同流水号,
入库单.采购合同号,
供应商.供应商名称,
供应商.供应商流水号,
入库单.到货数,
入库单.是否入库,
入库单.入库时间,
入库单.订单流水号,
入库单.订单号,
入库单.类型
FROM dbo.仓储管理_入库单 AS 入库单
LEFT JOIN dbo.采购管理_供应商 AS 供应商
ON 入库单.供应商流水号 = 供应商.供应商流水号
WHERE
ISNULL(@类型_check, 0) = 0
OR (
@类型 = N'自制'
AND ISNULL(入库单.类型, N'') = N'自制'
)
OR (
@类型 = N'采购'
AND ISNULL(入库单.类型, N'') <> N'自制'
);
END
GO
IF OBJECT_ID(N'dbo.trg_库存管理_自制件_入库记录_回写入库单', N'TR') IS NOT NULL
DROP TRIGGER dbo.trg_库存管理_自制件_入库记录_回写入库单;
GO
CREATE TRIGGER dbo.trg_库存管理_自制件_入库记录_回写入库单
ON dbo.库存管理_自制件_入库记录
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- 修改人:Ld 修改时间:2026-07-14 09:05:57; 自制件完成入库后按订单回写最近一张待入库单状态
;WITH 候选入库单 AS (
SELECT
入库单.入库单流水号,
ROW_NUMBER() OVER (
PARTITION BY 新记录.入库记录流水号
ORDER BY
CASE WHEN CONVERT(float, ISNULL(入库单.到货数, 0)) = CONVERT(float, ISNULL(新记录.实际到货数量, 0)) THEN 0 ELSE 1 END,
入库单.入库单流水号
) AS 排序号
FROM inserted AS 新记录
INNER JOIN dbo.车间生产管理_零件工艺计划_视图 AS 工艺计划
ON 新记录.工艺计划流水号 = 工艺计划.工艺计划流水号
INNER JOIN dbo.仓储管理_入库单 AS 入库单
ON 入库单.订单流水号 = CONVERT(nvarchar(100), 工艺计划.订单流水号)
AND ISNULL(入库单.类型, N'') = N'自制'
AND ISNULL(入库单.是否入库, 0) = 0
)
UPDATE 入库单
SET
入库单.是否入库 = 1,
入库单.入库时间 = GETDATE()
FROM dbo.仓储管理_入库单 AS 入库单
INNER JOIN 候选入库单 AS 候选
ON 入库单.入库单流水号 = 候选.入库单流水号
WHERE 候选.排序号 = 1;
END
GO
-- 修改人:Ld 修改时间:2026-07-14 09:05:57;

View File

@@ -4,6 +4,8 @@
<div style="margin-top: 7px; margin-bottom: 7px"> <div style="margin-top: 7px; margin-bottom: 7px">
<el-input v-model="equipmentNo" placeholder="设备号" size="small" clearable style="width:160px" /> <el-input v-model="equipmentNo" placeholder="设备号" size="small" clearable style="width:160px" />
<el-input v-model="equipmentName" placeholder="设备名" size="small" clearable style="width:160px;margin-left: 10px" /> <el-input v-model="equipmentName" placeholder="设备名" size="small" clearable style="width:160px;margin-left: 10px" />
<!-- 添加报备人查询 修改人:Ld 修改时间:2026-07-06 14:12:26; -->
<el-input v-model="reporter" placeholder="报备人" size="small" clearable style="width:160px;margin-left: 10px" />
<span style="font-size: 13px;color: black;margin-left: 10px">整修时间</span> <span style="font-size: 13px;color: black;margin-left: 10px">整修时间</span>
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
@@ -25,6 +27,21 @@
<el-table-column label="结束时间" prop="整修结束时间" align="center" show-overflow-tooltip /> <el-table-column label="结束时间" prop="整修结束时间" align="center" show-overflow-tooltip />
<el-table-column label="工时" prop="工时" align="center" show-overflow-tooltip /> <el-table-column label="工时" prop="工时" align="center" show-overflow-tooltip />
<el-table-column label="报备人" prop="操作者" align="center" show-overflow-tooltip /> <el-table-column label="报备人" prop="操作者" align="center" show-overflow-tooltip />
<!-- 添加补助金额字段 修改人:Ld 修改时间:2026-07-06 14:12:26; -->
<el-table-column label="单时补助(元)" prop="单时补助" align="center" width="150px">
<template slot-scope="scope">
<el-input-number
v-model="scope.row.单时补助"
:min="0"
:precision="2"
:step="1"
controls-position="right"
size="mini"
style="width:130px"
@change="handleAllowanceChange(scope.row)" />
</template>
</el-table-column>
<el-table-column label="总金额(元)" prop="总金额" align="center" width="120px" show-overflow-tooltip />
<el-table-column label="整修状态" prop="整修状态" align="center" show-overflow-tooltip> <el-table-column label="整修状态" prop="整修状态" align="center" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.整修状态 === 0 || scope.row.整修状态 === '0'">整修中</span> <span v-if="scope.row.整修状态 === 0 || scope.row.整修状态 === '0'">整修中</span>
@@ -54,6 +71,7 @@ export default {
return { return {
equipmentNo: '', equipmentNo: '',
equipmentName: '', equipmentName: '',
reporter: '',
dateRange: '', dateRange: '',
tableData: [], tableData: [],
total: 0, total: 0,
@@ -71,9 +89,16 @@ export default {
param[1] = ['设备名', this.equipmentName] param[1] = ['设备名', this.equipmentName]
param[2] = ['开始时间', this.dateRange ? this.dateRange[0] : ''] param[2] = ['开始时间', this.dateRange ? this.dateRange[0] : '']
param[3] = ['结束时间', this.dateRange ? this.dateRange[1] : ''] param[3] = ['结束时间', this.dateRange ? this.dateRange[1] : '']
// 添加报备人查询参数 修改人:Ld 修改时间:2026-07-06 14:12:26;
param[4] = ['报备人', this.reporter]
var Data = this.CreateData('11', '设备管理_整修记录_查询', param, this.pageSize, this.pageCurrent) var Data = this.CreateData('11', '设备管理_整修记录_查询', param, this.pageSize, this.pageCurrent)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
this.tableData = response.data.rows // 查询回填补助金额并按分钟工时换算总金额 修改人:Ld 修改时间:2026-07-06 14:12:26;
this.tableData = response.data.rows.map(row => {
row.单时补助 = Number(row.单时补助 || 0)
row.总金额 = this.getTotalAmount(row)
return row
})
this.total = response.data.total this.total = response.data.total
}) })
}, },
@@ -92,8 +117,31 @@ export default {
param[1] = ['设备名', this.equipmentName] param[1] = ['设备名', this.equipmentName]
param[2] = ['开始时间', this.dateRange ? this.dateRange[0] : ''] param[2] = ['开始时间', this.dateRange ? this.dateRange[0] : '']
param[3] = ['结束时间', this.dateRange ? this.dateRange[1] : ''] param[3] = ['结束时间', this.dateRange ? this.dateRange[1] : '']
// 添加报备人导出查询参数 修改人:Ld 修改时间:2026-07-06 14:12:26;
param[4] = ['报备人', this.reporter]
var Data = this.CreateData('2001', '设备管理_整修记录_查询', param) var Data = this.CreateData('2001', '设备管理_整修记录_查询', param)
this.exportExcel_NPOI(Data) this.exportExcel_NPOI(Data)
},
getTotalAmount(row) {
// 工时单位为分钟,单时补助单位为元/时 修改人:Ld 修改时间:2026-07-06 14:12:26;
var workMinutes = Number(row.工时 || 0)
var allowance = Number(row.单时补助 || 0)
return (workMinutes / 60 * allowance).toFixed(2)
},
handleAllowanceChange(row) {
row.总金额 = this.getTotalAmount(row)
var param = []
param[0] = ['id', row.id]
param[1] = ['单时补助', row.单时补助]
param[2] = ['总金额', row.总金额]
var Data = this.CreateData('12', '设备管理_整修记录_补助保存', param)
this.ExecDatabase(Data).then(response => {
if (response.data[0].result === '1') {
this.$message.success('保存成功')
} else {
this.$message.error('保存失败')
}
})
} }
} }
} }

View File

@@ -1153,15 +1153,18 @@ export default {
this.totalAmount = response.data[0].总金额 this.totalAmount = response.data[0].总金额
this.totalCount = 0 this.totalCount = 0
for (let i = 0; i < response.data.length; i++) { for (let i = 0; i < response.data.length; i++) {
// 修改人:Ld 修改时间:2026-07-14 17:26:52; 打印数量以实际发量列输入框为准。
var currentRow = this.tableData2.find(item => item.发货单明细流水号 === response.data[i].发货单明细流水号) || this.tableData2[i]
var printNum = currentRow && currentRow.查询实际发量 !== '' && currentRow.查询实际发量 !== null && currentRow.查询实际发量 !== undefined ? currentRow.查询实际发量 : response.data[i].实际发量
this.returns.push({ this.returns.push({
序号: i + 1, 序号: i + 1,
产品名称: response.data[i].产品名称, 产品名称: response.data[i].产品名称,
单位: response.data[i].单位, 单位: response.data[i].单位,
销售单价: response.data[i].单价, 销售单价: response.data[i].单价,
辅助规格: response.data[i].产品详情, 辅助规格: response.data[i].产品详情,
数量: response.data[i].实际发量 数量: printNum
}) })
this.totalCount += response.data[i].实际发量 this.totalCount += Number(printNum)
} }
}).then(() => { }).then(() => {
this.exportTable() this.exportTable()

View File

@@ -1149,15 +1149,18 @@ export default {
this.totalAmount = response.data[0].总金额 this.totalAmount = response.data[0].总金额
this.totalCount = 0 this.totalCount = 0
for (let i = 0; i < response.data.length; i++) { for (let i = 0; i < response.data.length; i++) {
// 修改人:Ld 修改时间:2026-07-14 17:26:52; 打印数量以实际发量列输入框为准。
var currentRow = this.tableData2.find(item => item.发货单明细流水号 === response.data[i].发货单明细流水号) || this.tableData2[i]
var printNum = currentRow && currentRow.查询实际发量 !== '' && currentRow.查询实际发量 !== null && currentRow.查询实际发量 !== undefined ? currentRow.查询实际发量 : response.data[i].实际发量
this.returns.push({ this.returns.push({
序号: i + 1, 序号: i + 1,
产品名称: response.data[i].产品名称, 产品名称: response.data[i].产品名称,
单位: response.data[i].单位, 单位: response.data[i].单位,
销售单价: response.data[i].单价, 销售单价: response.data[i].单价,
辅助规格: response.data[i].产品详情, 辅助规格: response.data[i].产品详情,
数量: response.data[i].实际发量 数量: printNum
}) })
this.totalCount += response.data[i].实际发量 this.totalCount += Number(printNum)
} }
}).then(() => { }).then(() => {
this.exportTable() this.exportTable()

View File

@@ -20,8 +20,12 @@
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
<el-input v-model="queryForm.工序名称" clearable size="small" style="width: 150px" placeholder="工序名称" @keyup.enter.native="pageCurrent = 1;searchTable()" /> <el-input v-model="queryForm.工序名称" clearable size="small" style="width: 150px" placeholder="工序名称" @keyup.enter.native="pageCurrent = 1;searchTable()" />
<el-input v-model="queryForm.零件名称" clearable size="small" style="width: 150px" placeholder="零件名称" @keyup.enter.native="pageCurrent = 1;searchTable()" />
<el-input v-model="queryForm.图号" clearable size="small" style="width: 150px" placeholder="图号" @keyup.enter.native="pageCurrent = 1;searchTable()" />
<el-button icon="el-icon-search" type="primary" plain size="small" style="margin-left: 10px" @click="pageCurrent = 1;searchTable()">查询</el-button> <el-button icon="el-icon-search" type="primary" plain size="small" style="margin-left: 10px" @click="pageCurrent = 1;searchTable()">查询</el-button>
<el-button :disabled="!queryForm.工艺计划流水号 || tableData.length === 0" icon="el-icon-collection" type="success" plain size="small" @click="handleSaveSource()">保存</el-button>
<el-button :disabled="!queryForm.工艺计划流水号" icon="el-icon-document-copy" type="warning" plain size="small" @click="openCopyDialog()">拷贝</el-button> <el-button :disabled="!queryForm.工艺计划流水号" icon="el-icon-document-copy" type="warning" plain size="small" @click="openCopyDialog()">拷贝</el-button>
<el-tag v-if="savedSourceInfo" size="small" type="success" style="margin-left: 6px" closable @close="savedSourceInfo = null">已保存: {{ savedSourceInfo.零件名称 }}</el-tag>
</div> </div>
<!-- 修改人:Ld 修改时间:2026-07-02 15:33:23 --> <!-- 修改人:Ld 修改时间:2026-07-02 15:33:23 -->
@@ -355,6 +359,7 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex'
export default { export default {
data() { data() {
return { return {
@@ -365,6 +370,8 @@ export default {
组件流水号: '', 组件流水号: '',
工艺计划流水号: '', 工艺计划流水号: '',
工序名称: '', 工序名称: '',
零件名称: '',
图号: '',
是否启用: '' 是否启用: ''
}, },
// 修改人:Ld 修改时间:2026-07-06 08:36:02 // 修改人:Ld 修改时间:2026-07-06 08:36:02
@@ -401,6 +408,13 @@ export default {
}, },
copyPartList: [], copyPartList: [],
copyProcessList: [], copyProcessList: [],
// 保存的源零件信息(供拷贝时直接使用)
savedSourceInfo: null,
// 修改人:Ld 修改时间:2026-07-17 08:44:08; 从工时统计跳转时携带的查询条件,赋值后直接调用查询接口
jumpQuery订单号: '',
jumpDirectQuery: false,
// 跳转时是否需要自动级联选择
jumpAutoCascade: false,
// 修改人:Ld 修改时间:2026-07-02 15:33:23 // 修改人:Ld 修改时间:2026-07-02 15:33:23
// 表单主键 // 表单主键
form: { form: {
@@ -431,8 +445,26 @@ export default {
} }
} }
}, },
computed: {
...mapGetters([
'id'
])
},
created() { created() {
// 修改人:Ld 修改时间:2026-07-17 08:44:08; 支持从工时统计跳转后按携带值直接查询工价
if (this.$route.query.订单号) {
this.jumpQuery订单号 = this.$route.query.订单号
}
if (this.$route.query.零件名称 || this.$route.query.图号 || this.$route.query.工序名称) {
this.queryForm.零件名称 = this.$route.query.零件名称 || ''
this.queryForm.图号 = this.$route.query.图号 || ''
this.queryForm.工序名称 = this.$route.query.工序名称 || ''
this.jumpDirectQuery = true
}
this.getOrderNumberType() this.getOrderNumberType()
if (this.jumpDirectQuery) {
this.pageCurrent = 1
}
this.searchTable() this.searchTable()
}, },
methods: { methods: {
@@ -449,6 +481,23 @@ export default {
value: response.data[i].订单流水号 value: response.data[i].订单流水号
}) })
} }
// 修改人:Ld 修改时间:2026-07-17 08:44:08; 跳转携带明细条件时仅补充订单赋值并按当前条件查询,避免自动选中第一个零件覆盖查询条件
if (this.jumpQuery订单号) {
for (var j = 0; j < this.orderNumberType.length; j++) {
if (this.orderNumberType[j].label === this.jumpQuery订单号) {
this.queryForm.订单流水号 = this.orderNumberType[j].value
if (this.jumpDirectQuery) {
this.pageCurrent = 1
this.searchTable()
} else {
this.jumpAutoCascade = true
this.getproductName()
}
this.jumpQuery订单号 = ''
break
}
}
}
}) })
}, },
// 修改人:Ld 修改时间:2026-07-06 08:36:02 // 修改人:Ld 修改时间:2026-07-06 08:36:02
@@ -468,6 +517,7 @@ export default {
if (!this.queryForm.订单流水号) { if (!this.queryForm.订单流水号) {
return return
} }
this.productName = []
var param = [] var param = []
param[0] = ['订单流水号', this.queryForm.订单流水号] param[0] = ['订单流水号', this.queryForm.订单流水号]
var Data = this.CreateData('11', '订单信息_产品信息_查询数据', param) var Data = this.CreateData('11', '订单信息_产品信息_查询数据', param)
@@ -478,6 +528,11 @@ export default {
value: response.data[i].组件流水号 value: response.data[i].组件流水号
}) })
} }
// 修改人:Ld 修改时间:2026-07-09; 跳转时自动选中第一个产品
if (this.jumpAutoCascade && this.productName.length > 0) {
this.queryForm.组件流水号 = this.productName[0].value
this.getpartName()
}
}) })
}, },
// 修改人:Ld 修改时间:2026-07-06 08:36:02 // 修改人:Ld 修改时间:2026-07-06 08:36:02
@@ -495,6 +550,7 @@ export default {
if (!this.queryForm.组件流水号) { if (!this.queryForm.组件流水号) {
return return
} }
this.partName = []
var param = [] var param = []
param[0] = ['组件流水号', this.queryForm.组件流水号] param[0] = ['组件流水号', this.queryForm.组件流水号]
var Data = this.CreateData('11', '精工车间_制定工艺_零件名称_查询', param) var Data = this.CreateData('11', '精工车间_制定工艺_零件名称_查询', param)
@@ -506,6 +562,13 @@ export default {
value: response.data[i].工艺计划流水号 value: response.data[i].工艺计划流水号
}) })
} }
// 修改人:Ld 修改时间:2026-07-09; 跳转时自动选中第一个零件并查询
if (this.jumpAutoCascade && this.partName.length > 0) {
this.queryForm.工艺计划流水号 = this.partName[0].value
this.jumpAutoCascade = false
this.pageCurrent = 1
this.searchTable()
}
}) })
}, },
// 修改人:Ld 修改时间:2026-07-06 08:36:02 // 修改人:Ld 修改时间:2026-07-06 08:36:02
@@ -525,6 +588,11 @@ export default {
param[9] = ['工艺名称_check', this.queryForm.工序名称 ? 1 : 0] param[9] = ['工艺名称_check', this.queryForm.工序名称 ? 1 : 0]
param[10] = ['是否启用', this.queryForm.是否启用] param[10] = ['是否启用', this.queryForm.是否启用]
param[11] = ['是否启用_check', this.queryForm.是否启用 === '' || this.queryForm.是否启用 === null || typeof this.queryForm.是否启用 === 'undefined' ? 0 : 1] param[11] = ['是否启用_check', this.queryForm.是否启用 === '' || this.queryForm.是否启用 === null || typeof this.queryForm.是否启用 === 'undefined' ? 0 : 1]
param[12] = ['零件名称', this.queryForm.零件名称]
param[13] = ['零件名称_check', this.queryForm.零件名称 ? 1 : 0]
// 修改人:Ld 修改时间:2026-07-17 08:44:08; 工时统计跳转后按图号精确查询,避免同名零件匹配过宽
param[14] = ['图号', this.queryForm.图号]
param[15] = ['图号_check', this.queryForm.图号 ? 1 : 0]
var Data = this.CreateData('11', '车间生产管理工艺_工序工价_查询数据', param, this.pageSize, this.pageCurrent) var Data = this.CreateData('11', '车间生产管理工艺_工序工价_查询数据', param, this.pageSize, this.pageCurrent)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
this.tableData = response.data && response.data.rows ? response.data.rows : response.data this.tableData = response.data && response.data.rows ? response.data.rows : response.data
@@ -534,13 +602,62 @@ export default {
this.loading = false this.loading = false
}) })
}, },
// 修改人:Ld 修改时间:2026-07-06 08:45:45 // 修改人:Ld 修改时间:2026-07-08; 保存当前零件的工价信息,供拷贝时直接使用
// 打开工序工价拷贝 handleSaveSource() {
if (!this.queryForm.工艺计划流水号 || !this.tableData || this.tableData.length === 0) {
this.$message.warning('当前没有可保存的零件数据')
return
}
var firstRow = this.tableData[0]
this.savedSourceInfo = {
图号: firstRow.图号 || '',
零件名称: firstRow.零件名称 || '',
工艺计划流水号: this.queryForm.工艺计划流水号
}
this.$message.success('已保存「' + this.savedSourceInfo.零件名称 + '」的工价数据')
},
// 修改人:Ld 修改时间:2026-07-08; 打开工序工价拷贝(优先使用已保存数据)
openCopyDialog() { openCopyDialog() {
if (!this.queryForm.工艺计划流水号) { if (!this.queryForm.工艺计划流水号) {
this.$message.warning('请先选择要复制到的零件') this.$message.warning('请先选择要复制到的零件')
return return
} }
if (this.savedSourceInfo && this.savedSourceInfo.图号) {
this.$confirm(
'检测到已保存的工价数据(来源零件:' + this.savedSourceInfo.零件名称 + '),是否直接使用?',
'拷贝方式',
{ confirmButtonText: '使用已保存数据', cancelButtonText: '选择其他零件', type: 'info' }
).then(function() {
this.submitCopyFromSaved()
}.bind(this)).catch(function() {
this.openSourcePartDialog()
}.bind(this))
} else {
this.openSourcePartDialog()
}
},
// 修改人:Ld 修改时间:2026-07-08; 使用已保存的源零件信息直接调用后端复制
submitCopyFromSaved() {
if (!this.savedSourceInfo || !this.savedSourceInfo.图号) {
this.$message.warning('没有已保存的源零件数据')
return
}
var param = []
param[0] = ['目标工艺计划流水号', this.queryForm.工艺计划流水号]
param[1] = ['源零件图号', this.savedSourceInfo.图号]
param[2] = ['修改人', this.id]
var Data = this.CreateData('12', '车间生产管理工艺_工序工价_复制数据', param)
this.ExecDatabase(Data).then(function(response) {
if (response.data && response.data[0] && response.data[0].result === '1') {
this.$message.success('拷贝成功')
this.searchTable()
} else {
this.$message.error(response.data && response.data[0] && response.data[0].message ? response.data[0].message : '拷贝失败')
}
}.bind(this))
},
// 修改人:Ld 修改时间:2026-07-08; 打开源零件选择弹窗(原 openCopyDialog 逻辑)
openSourcePartDialog() {
this.copyVisible = true this.copyVisible = true
this.copyForm = { this.copyForm = {
零件筛选: '', 零件筛选: '',
@@ -597,6 +714,7 @@ export default {
var param = [] var param = []
param[0] = ['目标工艺计划流水号', this.queryForm.工艺计划流水号] param[0] = ['目标工艺计划流水号', this.queryForm.工艺计划流水号]
param[1] = ['源零件图号', this.copyForm.源零件图号] param[1] = ['源零件图号', this.copyForm.源零件图号]
param[2] = ['修改人', this.id]
var Data = this.CreateData('12', '车间生产管理工艺_工序工价_复制数据', param) var Data = this.CreateData('12', '车间生产管理工艺_工序工价_复制数据', param)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
if (response.data && response.data[0] && response.data[0].result === '1') { if (response.data && response.data[0] && response.data[0].result === '1') {
@@ -661,6 +779,7 @@ export default {
param[14] = ['是否启用', this.form.是否启用] param[14] = ['是否启用', this.form.是否启用]
param[15] = ['备注', this.form.备注] param[15] = ['备注', this.form.备注]
param[16] = ['工序流水号', this.form.工序流水号] param[16] = ['工序流水号', this.form.工序流水号]
param[17] = ['修改人', this.id]
var Data = this.CreateData('12', '车间生产管理工艺_工序工价_编辑数据', param) var Data = this.CreateData('12', '车间生产管理工艺_工序工价_编辑数据', param)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
if (response.data && response.data[0] && response.data[0].result === '1') { if (response.data && response.data[0] && response.data[0].result === '1') {
@@ -715,6 +834,7 @@ export default {
}).then(() => { }).then(() => {
var param = [] var param = []
param[0] = ['工价流水号', row.工价流水号] param[0] = ['工价流水号', row.工价流水号]
param[1] = ['修改人', this.id]
var Data = this.CreateData('12', '车间生产管理工艺_工序工价_删除数据', param) var Data = this.CreateData('12', '车间生产管理工艺_工序工价_删除数据', param)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
if (response.data && response.data[0] && response.data[0].result === '1') { if (response.data && response.data[0] && response.data[0].result === '1') {

View File

@@ -26,7 +26,7 @@
size="small" size="small"
clearable> clearable>
<el-option label="待审核" value="待审核"/> <el-option label="待审核" value="待审核"/>
<el-option label="审核通过" value="审核通过"/> <el-option label="已审核" value="已审核"/>
<el-option label="审核不通过" value="审核不通过"/> <el-option label="审核不通过" value="审核不通过"/>
</el-select> </el-select>
<span class="date-label">提交时间</span> <span class="date-label">提交时间</span>
@@ -69,8 +69,27 @@
<el-table-column label="工序" prop="工序" align="center" width="110" show-overflow-tooltip/> <el-table-column label="工序" prop="工序" align="center" width="110" show-overflow-tooltip/>
<el-table-column label="工作者" prop="工作者姓名" align="center" width="90" show-overflow-tooltip/> <el-table-column label="工作者" prop="工作者姓名" align="center" width="90" show-overflow-tooltip/>
<el-table-column label="完成数量" prop="完成数量" align="center" width="90"/> <el-table-column label="完成数量" prop="完成数量" align="center" width="90"/>
<!-- 修改人:Ld 修改时间:2026-07-06 15:18:06; 生产审核选择计件或计时并传给工时统计 -->
<el-table-column label="计价方式" prop="计价方式" align="center" width="120">
<template slot-scope="scope">
<el-select
v-if="scope.row.审核状态 === '待审核' && scope.row.审核类型 === '加工完成'"
v-model="scope.row.计价方式"
size="mini"
style="width: 94px">
<el-option label="计件" value="计件"/>
<el-option label="计时" value="计时"/>
</el-select>
<span v-else>{{ scope.row.计价方式 }}</span>
</template>
</el-table-column>
<el-table-column label="投产数量" prop="投产数量" align="center" width="90"/> <el-table-column label="投产数量" prop="投产数量" align="center" width="90"/>
<el-table-column label="已完成数" prop="已完成数" align="center" width="90"/> <el-table-column label="已完成数" prop="已完成数" align="center" width="90"/>
<el-table-column label="工时M" align="center" width="85">
<template slot-scope="scope">
{{ calcWorkMinutes(scope.row.开始时间, scope.row.结束时间) }}
</template>
</el-table-column>
<el-table-column label="工位号" prop="工位号" align="center" width="120" show-overflow-tooltip/> <el-table-column label="工位号" prop="工位号" align="center" width="120" show-overflow-tooltip/>
<el-table-column label="工位设备名称" prop="工位设备名称" align="center" width="150" show-overflow-tooltip/> <el-table-column label="工位设备名称" prop="工位设备名称" align="center" width="150" show-overflow-tooltip/>
<el-table-column label="设备号" prop="设备号" align="center" width="120" show-overflow-tooltip/> <el-table-column label="设备号" prop="设备号" align="center" width="120" show-overflow-tooltip/>
@@ -132,7 +151,15 @@
<el-dialog v-el-drag-dialog :visible.sync="editVisible" title="修改审核数据" width="420px"> <el-dialog v-el-drag-dialog :visible.sync="editVisible" title="修改审核数据" width="420px">
<el-form ref="editForm" :model="editForm" label-width="110px" size="small"> <el-form ref="editForm" :model="editForm" label-width="110px" size="small">
<el-form-item v-if="editForm.审核类型 === '加工完成'" label="完成数量"> <el-form-item v-if="editForm.审核类型 === '加工完成'" label="完成数量">
<el-input-number v-model="editForm.完成数量" :min="1" :step="1" step-strictly style="width: 220px"/> <!-- 完成数量为 0 的审核记录允许通过;修改人:Ld 修改时间:2026-07-15 10:06:11; -->
<el-input-number v-model="editForm.完成数量" :min="0" :step="1" step-strictly style="width: 220px"/>
</el-form-item>
<!-- 修改人:Ld 修改时间:2026-07-06 15:18:06; 加工完成审核时选择计件或计时 -->
<el-form-item v-if="editForm.审核类型 === '加工完成'" label="计价方式">
<el-radio-group v-model="editForm.计价方式" size="small">
<el-radio-button label="计件"/>
<el-radio-button label="计时"/>
</el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-if="editForm.审核类型 === '加工完成'" label="加工开始时间"> <el-form-item v-if="editForm.审核类型 === '加工完成'" label="加工开始时间">
<el-date-picker <el-date-picker
@@ -171,7 +198,7 @@
style="width: 220px"/> style="width: 220px"/>
</el-form-item> </el-form-item>
<el-form-item v-if="editForm.审核类型 === '结束整修'" label="整修方案"> <el-form-item v-if="editForm.审核类型 === '结束整修'" label="整修方案">
<el-input v-model="editForm.整修方案" type="textarea" :rows="3" style="width: 220px"/> <el-input v-model="editForm.整修方案" :rows="3" type="textarea" style="width: 220px"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@@ -202,6 +229,7 @@ export default {
editForm: { editForm: {
审核类型: '', 审核类型: '',
完成数量: 1, 完成数量: 1,
计价方式: '计件',
加工开始时间: '', 加工开始时间: '',
加工完成时间: '', 加工完成时间: '',
整修开始时间: '', 整修开始时间: '',
@@ -212,7 +240,8 @@ export default {
操作者: '', 操作者: '',
审核类型: '', 审核类型: '',
审核状态: '待审核' 审核状态: '待审核'
} },
peopleList: []
} }
}, },
computed: { computed: {
@@ -230,9 +259,31 @@ export default {
}, },
created() { created() {
this.searchTable() this.searchTable()
this.getPeople()
}, },
methods: { methods: {
// 生产完成审核查询 修改人:Ld 修改时间:2026-07-02 13:57:18; // 生产完成审核查询 修改人:Ld 修改时间:2026-07-02 13:57:18;
getPeople() {
var param = []
var Data = this.CreateData('11', '人员信息_查询', param)
this.ExecDatabase(Data).then(response => {
for (var i = 0; i < response.data.length; i++) {
this.peopleList.push({
人员编号: response.data[i].人员编号,
姓名: response.data[i].姓名
})
}
})
},
getPersonName(id) {
if (!id) return ''
for (var i = 0; i < this.peopleList.length; i++) {
if (String(this.peopleList[i].人员编号) === String(id)) {
return this.peopleList[i].姓名
}
}
return id
},
searchTable() { searchTable() {
var dateRangeCheck = this.dateRange ? 1 : 0 var dateRangeCheck = this.dateRange ? 1 : 0
var param = [] var param = []
@@ -291,6 +342,9 @@ export default {
{ label: '工作者姓名', value: row.工作者姓名 }, { label: '工作者姓名', value: row.工作者姓名 },
{ label: '完成类型', value: row.完成类型 }, { label: '完成类型', value: row.完成类型 },
{ label: '完成数量', value: row.完成数量 }, { label: '完成数量', value: row.完成数量 },
{ label: '计价方式', value: row.计价方式 },
{ label: '单件工价', value: row.单件工价 },
{ label: '单时工价', value: row.单时工价 },
{ label: '投产数量', value: row.投产数量 }, { label: '投产数量', value: row.投产数量 },
{ label: '已完成数', value: row.已完成数 }, { label: '已完成数', value: row.已完成数 },
{ label: '工序顺序', value: row.工序顺序 }, { label: '工序顺序', value: row.工序顺序 },
@@ -309,7 +363,7 @@ export default {
{ label: '开始时间', value: row.开始时间 }, { label: '开始时间', value: row.开始时间 },
{ label: '结束时间', value: row.结束时间 }, { label: '结束时间', value: row.结束时间 },
{ label: '提交时间', value: row.提交时间 }, { label: '提交时间', value: row.提交时间 },
{ label: '审核人', value: row.审核人 }, { label: '审核人', value: this.getPersonName(row.审核人) },
{ label: '审核时间', value: row.审核时间 }, { label: '审核时间', value: row.审核时间 },
{ label: '整修方案', value: row.整修方案 }, { label: '整修方案', value: row.整修方案 },
{ label: '备注', value: row.备注 }, { label: '备注', value: row.备注 },
@@ -317,14 +371,14 @@ export default {
] ]
this.detailVisible = true this.detailVisible = true
}, },
// 生产完成审核通过 修改人:Ld 修改时间:2026-07-02 13:57:18; // 生产完成普通通过只改审核表状态为已审核,不再触发生产完成数据修改。修改人:Ld 修改时间:2026-07-17 09:10:08;
approveRow(row) { approveRow(row) {
this.$confirm('确定审核通过该生产完成记录?', '提示', { this.$confirm('确定审核通过该生产完成记录?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.submitAudit(row, '审核通过', '') this.submitAudit(row, '已审核', '')
}).catch(() => { }).catch(() => {
this.$message({ this.$message({
type: 'info', type: 'info',
@@ -337,7 +391,9 @@ export default {
this.editRow = row this.editRow = row
this.editForm = { this.editForm = {
审核类型: row.审核类型, 审核类型: row.审核类型,
完成数量: row.完成数量 ? Number(row.完成数量) : 1, // 保留 0 完成数量,避免审核修改弹窗将 0 自动改成 1;修改人:Ld 修改时间:2026-07-15 10:06:11;
完成数量: row.完成数量 === null || row.完成数量 === undefined || row.完成数量 === '' ? 1 : Number(row.完成数量),
计价方式: row.计价方式 || '计件',
加工开始时间: row.开始时间 || '', 加工开始时间: row.开始时间 || '',
加工完成时间: row.结束时间 || '', 加工完成时间: row.结束时间 || '',
整修开始时间: row.开始时间 || '', 整修开始时间: row.开始时间 || '',
@@ -351,17 +407,19 @@ export default {
return return
} }
if (this.editForm.审核类型 === '加工完成') { if (this.editForm.审核类型 === '加工完成') {
if (!this.editForm.完成数量 || Number(this.editForm.完成数量) <= 0 || Number(this.editForm.完成数量) % 1 !== 0) { if (this.editForm.完成数量 === null || this.editForm.完成数量 === undefined || this.editForm.完成数量 === '' || Number(this.editForm.完成数量) < 0 || Number(this.editForm.完成数量) % 1 !== 0) {
this.$message.error('完成数量必须为大于 0 的整数') // 完成数量为 0 的审核记录允许通过;修改人:Ld 修改时间:2026-07-15 10:06:11;
this.$message.error('完成数量必须为大于等于 0 的整数')
return return
} }
this.submitAudit(this.editRow, '审核通过', '修改完成数量和加工完成时间后通过', { this.submitAudit(this.editRow, '已审核', '修改完成数量和加工完成时间后通过', {
finishQuantity: Number(this.editForm.完成数量), finishQuantity: Number(this.editForm.完成数量),
priceType: this.editForm.计价方式,
startTime: this.editForm.加工开始时间, startTime: this.editForm.加工开始时间,
finishTime: this.editForm.加工完成时间 finishTime: this.editForm.加工完成时间
}) })
} else if (this.editForm.审核类型 === '结束整修') { } else if (this.editForm.审核类型 === '结束整修') {
this.submitAudit(this.editRow, '审核通过', '修改整修开始和结束时间后通过', { this.submitAudit(this.editRow, '已审核', '修改整修开始和结束时间后通过', {
repairStartTime: this.editForm.整修开始时间, repairStartTime: this.editForm.整修开始时间,
repairEndTime: this.editForm.整修结束时间, repairEndTime: this.editForm.整修结束时间,
repairPlan: this.editForm.整修方案 repairPlan: this.editForm.整修方案
@@ -376,9 +434,15 @@ export default {
param[2] = ['审核人', this.id] param[2] = ['审核人', this.id]
param[3] = ['审核意见', opinion] param[3] = ['审核意见', opinion]
if (editData && editData.finishQuantity !== undefined) { if (editData && editData.finishQuantity !== undefined) {
// 仅修改数量通过时传审核完成数量,普通通过沿用审核单原完成数量 修改人:Ld 修改时间:2026-07-02 15:04:16; // 仅修改数量通过时传审核完成数量,普通通过只改审核状态。修改人:Ld 修改时间:2026-07-17 09:10:08;
param.push(['审核完成数量', editData.finishQuantity]) param.push(['审核完成数量', editData.finishQuantity])
} }
if (editData && editData.priceType) {
// 生产审核选择计件或计时,传给后端写入完成过程供工时统计判断 修改人:Ld 修改时间:2026-07-06 15:18:06;
param.push(['计价方式', editData.priceType])
} else if (row.计价方式) {
param.push(['计价方式', row.计价方式])
}
if (editData && editData.startTime) { if (editData && editData.startTime) {
// 加工完成审核可修正实际加工开始时间 修改人:Ld 修改时间:2026-07-06 08:11:25; // 加工完成审核可修正实际加工开始时间 修改人:Ld 修改时间:2026-07-06 08:11:25;
param.push(['审核加工开始时间', editData.startTime]) param.push(['审核加工开始时间', editData.startTime])
@@ -410,8 +474,17 @@ export default {
this.$message.error('审核失败') this.$message.error('审核失败')
}) })
}, },
// 修改人:Ld 修改时间:2026-07-09; 根据开始结束时间计算工时(分钟)
calcWorkMinutes(startTime, endTime) {
if (!startTime || !endTime) return ''
var start = new Date(startTime)
var end = new Date(endTime)
if (isNaN(start.getTime()) || isNaN(end.getTime())) return ''
var diff = (end.getTime() - start.getTime()) / 60000
return diff > 0 ? Math.round(diff) : ''
},
getAuditStateType(state) { getAuditStateType(state) {
if (state === '审核通过') { if (state === '已审核') {
return 'success' return 'success'
} else if (state === '审核不通过') { } else if (state === '审核不通过') {
return 'danger' return 'danger'

View File

@@ -18,7 +18,8 @@
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
@change="searchTable"/> @change="searchTable"/>
<el-button type="success" plain icon="el-icon-download" size="small" style="margin-left: 60px" @click="exportExcel()">导出</el-button> <el-input v-model="searchOperator" clearable size="small" style="width: 130px;margin-left: 10px" placeholder="操作者" @keyup.enter.native="filterOperator" @clear="filterOperator"/>
<el-button type="success" plain icon="el-icon-download" size="small" style="margin-left: 60px" @click="exportExcel()">导出</el-button>
</div> </div>
<!-- 修改人:Ld 修改时间:2026-07-06 09:12:38; 增加总价列后调整员工汇总表宽度 --> <!-- 修改人:Ld 修改时间:2026-07-06 09:12:38; 增加总价列后调整员工汇总表宽度 -->
<el-col style="margin-left: 7px;width: 371px"> <el-col style="margin-left: 7px;width: 371px">
@@ -27,7 +28,7 @@
<el-table <el-table
v-loading="loading" v-loading="loading"
ref="table" ref="table"
:data="tableData" :data="filteredTableData"
highlight-current-row highlight-current-row
show-summary show-summary
border border
@@ -109,53 +110,73 @@
{{ scope.row.完成数 }} {{ scope.row.完成数 }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 修改人:Ld 修改时间:2026-07-06 09:12:38; 员工明细显示工序工价组件维护的工价和按数量计算的总价 --> <!-- 修改人:Ld 修改时间:2026-07-06 15:18:06; 工价列改为单价,计时记录可编辑单时工价 -->
<el-table-column width="80px" label="工价" align="center" show-overflow-tooltip prop="工价"> <el-table-column width="80px" label="计价方式" align="center" show-overflow-tooltip prop="计价方式">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.工价 }} {{ scope.row.计价方式 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="90px" label="总价" align="center" show-overflow-tooltip prop="总价"> <el-table-column v-if="Number(token) === 2" width="100px" label="单价" align="center" show-overflow-tooltip prop="单价">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.总价 }} <el-input-number
</template> v-if="scope.row.计价方式 === '计时'"
</el-table-column> v-model="scope.row.单价"
<el-table-column :width="setColumnWidth('加工工时M')" label="加工工时M" align="center" show-overflow-tooltip prop="加工时长"> :min="0"
<template slot-scope="scope"> :precision="2"
{{ scope.row.加工时长 }} :step="1"
</template> controls-position="right"
</el-table-column> size="mini"
<el-table-column width="90px" label="暂停时长" align="center" show-overflow-tooltip prop="暂停时间"> style="width: 92px"
<template slot-scope="scope"> @change="changeTimePrice(scope.row, 'person')"/>
{{ scope.row.暂停时间 }} <span v-else>{{ scope.row.单价 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :width="setColumnWidth('日期时间')" label="开始加工时间" align="center"> <el-table-column v-if="Number(token) === 2" width="90px" label="总价" align="center" show-overflow-tooltip prop="总价">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.开始加工 }} {{ scope.row.总价 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :width="setColumnWidth('日期时间')" label="完成时间" align="center" prop="完成时间" sortable="完成时间"> <el-table-column :width="setColumnWidth('加工工时M')" label="加工工时M" align="center" show-overflow-tooltip prop="加工时长">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.结束加工 }} {{ scope.row.加工时长 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="设备" align="center" show-overflow-tooltip> <el-table-column width="90px" label="暂停时长" align="center" show-overflow-tooltip prop="暂停时间">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.工位号 }} {{ scope.row.暂停时间 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :width="setColumnWidth('订单编号')" label="订单编号" align="center"> <el-table-column :width="setColumnWidth('日期时间')" label="开始加工时间" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.订单编号 }} {{ scope.row.开始加工 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="产品/部件" align="center"> <el-table-column :width="setColumnWidth('日期时间')" label="完成时间" align="center" prop="完成时间" sortable="完成时间">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.产品名称 }} {{ scope.row.结束加工 }}
</template> </template>
</el-table-column> </el-table-column>
</el-table> <el-table-column label="设备" align="center" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.工位号 }}
</template>
</el-table-column>
<el-table-column :width="setColumnWidth('订单编号')" label="订单编号" align="center">
<template slot-scope="scope">
{{ scope.row.订单编号 }}
</template>
</el-table-column>
<el-table-column label="产品/部件" align="center">
<template slot-scope="scope">
{{ scope.row.产品名称 }}
</template>
</el-table-column>
<el-table-column width="80px" label="操作" align="center" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" icon="el-icon-setting" @click="jumpToProcessPrice(scope.row)">工价</el-button>
</template>
</el-table-column>
</el-table>
</div> </div>
<!-- </el-card>--> <!-- </el-card>-->
</el-col> </el-col>
@@ -268,18 +289,33 @@
{{ scope.row.完成数 }} {{ scope.row.完成数 }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 修改人:Ld 修改时间:2026-07-06 09:12:38; 设备明细显示工序工价组件维护的工价和按数量计算的总价 --> <!-- 修改人:Ld 修改时间:2026-07-06 15:18:06; 工价列改为单价,计时记录可编辑单时工价 -->
<el-table-column width="80px" label="工价" align="center" show-overflow-tooltip prop="工价"> <el-table-column width="80px" label="计价方式" align="center" show-overflow-tooltip prop="计价方式">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.工价 }} {{ scope.row.计价方式 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="90px" label="总价" align="center" show-overflow-tooltip prop="总价"> <el-table-column v-if="Number(token) === 2" width="100px" label="单价" align="center" show-overflow-tooltip prop="单价">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.总价 }} <el-input-number
</template> v-if="scope.row.计价方式 === '计时'"
</el-table-column> v-model="scope.row.单价"
<el-table-column :width="setColumnWidth('加工工时M')" label="加工工时M" align="center" show-overflow-tooltip prop="加工时长"> :min="0"
:precision="2"
:step="1"
controls-position="right"
size="mini"
style="width: 92px"
@change="changeTimePrice(scope.row, 'device')"/>
<span v-else>{{ scope.row.单价 }}</span>
</template>
</el-table-column>
<el-table-column v-if="Number(token) === 2" width="90px" label="总价" align="center" show-overflow-tooltip prop="总价">
<template slot-scope="scope">
{{ scope.row.总价 }}
</template>
</el-table-column>
<el-table-column :width="setColumnWidth('加工工时M')" label="加工工时M" align="center" show-overflow-tooltip prop="加工时长">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.加工时长 }} {{ scope.row.加工时长 }}
</template> </template>
@@ -314,6 +350,11 @@
{{ scope.row.产品名称 }} {{ scope.row.产品名称 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80px" label="操作" align="center" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" icon="el-icon-setting" @click="jumpToProcessPrice(scope.row)">工价</el-button>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
<!-- </el-card>--> <!-- </el-card>-->
@@ -347,6 +388,7 @@ export default {
} }
], // 合同状态数组 ], // 合同状态数组
loading: false, // 数据加载 loading: false, // 数据加载
searchOperator: '', // 修改人:Ld 修改时间:2026-07-09; 操作者筛选
total: 0, // 分页总数 total: 0, // 分页总数
total1: 0, // 分页总数 total1: 0, // 分页总数
total2: 0, // 分页总数 total2: 0, // 分页总数
@@ -373,7 +415,15 @@ export default {
...mapGetters([ ...mapGetters([
'id', 'id',
'token' 'token'
]) ]),
// 修改人:Ld 修改时间:2026-07-09; 按操作者筛选左侧汇总表
filteredTableData() {
if (!this.searchOperator || !this.tableData) return this.tableData
var keyword = this.searchOperator.trim()
return this.tableData.filter(function(row) {
return row.操作者 && row.操作者.indexOf(keyword) !== -1
})
}
}, },
updated() { updated() {
this.$nextTick(() => { this.$nextTick(() => {
@@ -384,6 +434,26 @@ export default {
}) })
}, },
methods: { methods: {
// 修改人:Ld 修改时间:2026-07-17 08:44:08; 跳转到工序工价页面时携带当前行订单、零件、图号和工序,目标页按赋值直接查询
jumpToProcessPrice(row) {
this.$router.push({
path: '/SeikoWorkshop/ProcessPrice',
query: {
订单号: row.订单编号 || '',
零件名称: row.零件名称 || '',
图号: row.图号 || row.零件图号 || '',
工序名称: row.工序 || row.工序名称 || ''
}
})
},
// 修改人:Ld 修改时间:2026-07-09; 操作者筛选后刷新表格布局
filterOperator() {
this.$nextTick(function() {
if (this.$refs.table) {
this.$refs.table.doLayout()
}
})
},
getData() { getData() {
if (this.PartType === '员工工时统计') { if (this.PartType === '员工工时统计') {
this.searchTable() this.searchTable()
@@ -426,6 +496,63 @@ export default {
this.tableData1 = response.data this.tableData1 = response.data
}) })
}, },
changeTimePrice(row, type) {
if (!row.完成过程流水号) {
this.$message.warning('缺少完成过程流水号,无法保存单时工价')
return
}
var param = []
param[0] = ['完成过程流水号', row.完成过程流水号]
param[1] = ['单时工价', row.单价]
// 计时单价保存到完成过程表,工时统计总价重新按加工时长计算 修改人:Ld 修改时间:2026-07-06 15:18:06;
var Data = this.CreateData('12', '车间生产管理_工时统计_单时工价_修改数据', param)
this.ExecDatabase(Data).then(response => {
if (response.data[0] && response.data[0].result === '1') {
this.$message.success('单价已保存')
if (type === 'device') {
this.refreshDeviceDetail()
} else {
this.refreshPersonDetail()
}
} else {
this.$message.error(response.data[0] && response.data[0].message ? response.data[0].message : '单价保存失败')
}
}).catch(() => {
this.$message.error('单价保存失败')
})
},
refreshPersonDetail() {
if (!this.rowNumber) {
return
}
var param = []
param[0] = ['操作者编号', this.rowNumber]
param[1] = ['开始时间', this.dateRange[0]]
param[2] = ['结束时间', this.dateRange[1]]
param[3] = ['排序名称', this.orderName]
param[4] = ['排序方式', this.order]
var Data = this.CreateData('11', '精工车间_员工工时统计_详情_查询数据', param)
this.ExecDatabase(Data).then(response => {
this.tableData1 = response.data
})
this.searchTable()
},
refreshDeviceDetail() {
if (!this.rowNumber1) {
return
}
var param = []
param[0] = ['设备', this.rowNumber1]
param[1] = ['开始时间', this.dateRange[0]]
param[2] = ['结束时间', this.dateRange[1]]
param[3] = ['排序名称', this.orderName1]
param[4] = ['排序方式', this.order1]
var Data = this.CreateData('11', '精工车间_设备工时统计_详情_查询数据', param)
this.ExecDatabase(Data).then(response => {
this.tableData3 = response.data
})
this.searchTable2()
},
searchTable2() { searchTable2() {
var param = [] var param = []
param[0] = ['开始时间', this.dateRange[0]] param[0] = ['开始时间', this.dateRange[0]]

View File

@@ -0,0 +1,945 @@
<template>
<!-- 修改人:Ld 修改时间:2026-07-14 13:12:40; 新增车间派工移动端自适应组件。 -->
<div class="app-container workshop-assignment-mobile">
<div class="dispatch-shell">
<section class="filter-panel">
<div class="filter-grid">
<el-select
v-model="orderNameValue"
:remote-method="getOrderName"
placeholder="订单号"
size="small"
filterable
clearable
remote
@change="pageCurrent = 1; getProductName(); searchTable()">
<el-option
v-for="item in orderName1"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
<el-select
v-model="productNameValue"
placeholder="产品/部件"
size="small"
filterable
clearable
@change="pageCurrent = 1; searchTable()">
<el-option
v-for="item in productName"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
<el-input
v-model="partNameValue"
size="small"
clearable
placeholder="名称或图号"
@keyup.enter.native="pageCurrent = 1; searchTable()"/>
<el-button icon="el-icon-search" type="primary" size="small" @click="pageCurrent = 1; searchTable()">查询</el-button>
</div>
<div class="quick-actions">
<el-button
:disabled="!processValue"
:type="IsItUrgent === 1 ? 'info' : 'warning'"
plain
size="small"
@click="IsItUrgent === 1 ? CancelUrgent() : Urgent()">
{{ IsItUrgent === 1 ? '取消加急' : '加急' }}
</el-button>
<el-button :disabled="!partTool" type="success" plain size="small" @click="getNum()">图纸</el-button>
</div>
</section>
<section class="content-grid">
<div class="part-panel">
<div class="panel-title">
<span>待派工零件</span>
<small>{{ total }} 条</small>
</div>
<div v-loading="loading" class="part-list">
<div
v-for="item in tableData"
:key="item.工艺计划流水号"
:class="['part-card', selectedPart && selectedPart.工艺计划流水号 === item.工艺计划流水号 ? 'is-active' : '', Number(item.是否加急) === 1 ? 'is-urgent' : '']"
@click="searchTable1(item)">
<div class="part-card-head">
<strong>{{ item.零件名称 || '未命名零件' }}</strong>
<el-tag v-if="Number(item.是否加急) === 1" type="danger" size="mini">加急</el-tag>
<el-tag v-else-if="Number(item.已分配) === 1" size="mini">已派</el-tag>
</div>
<div class="part-main">{{ item.零件图号 || '-' }}</div>
<div class="part-meta">
<span>订单 {{ item.订单号 || '-' }}</span>
<span>数量 {{ item.数量 || 0 }}</span>
<span>库存 {{ item.库存 || 0 }}</span>
</div>
<div class="part-meta">
<span>{{ item.产品名称 || '-' }}</span>
<span>期限 {{ formatDate(item.精工期限) }}</span>
</div>
</div>
<div v-if="!loading && tableData.length === 0" class="empty-state">暂无待派工零件</div>
</div>
<el-pagination
:current-page="pageCurrent"
:page-size="pageSize"
:total="total"
small
layout="prev, pager, next"
class="mobile-page"
@current-change="handleCurrentChanges"/>
</div>
<div class="task-panel">
<div class="panel-title">
<span>派工操作</span>
<small>{{ selectedPart ? selectedPart.零件名称 : '请先选择零件' }}</small>
</div>
<div class="assignee-grid">
<el-select v-model="peopleValue" placeholder="操作者" size="small" filterable clearable>
<el-option
v-for="item in people"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
<el-select v-model="machineValue" placeholder="设备" size="small" filterable clearable>
<el-option
v-for="item in machine"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</div>
<el-tabs v-model="activeTab" stretch>
<el-tab-pane label="可派工序" name="available">
<div v-loading="loadingProcess" class="process-list">
<div v-for="row in tableData2" :key="row.工序流水号" class="process-card">
<div class="process-head">
<span>{{ row.工序顺序 }}. {{ row.工序 }}</span>
<el-button type="primary" size="mini" @click="XUANRU(row)">派工</el-button>
</div>
<div class="process-field">
<label>分配数</label>
<el-input-number
v-model="row.分配数"
:min="0"
:max="row.最大分配数"
size="small"
controls-position="right"/>
</div>
<div class="date-grid">
<el-date-picker
v-model="row.计划开始日期"
size="small"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
placeholder="计划开始"/>
<el-date-picker
v-model="row.计划完成日期"
size="small"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
placeholder="计划完成"/>
</div>
<div class="part-meta">
<span>已分配 {{ row.已分配数 || 0 }}</span>
<span>投产 {{ row.数量 || 0 }}</span>
<span>最大 {{ row.最大分配数 || 0 }}</span>
</div>
</div>
<div v-if="!loadingProcess && tableData2.length === 0" class="empty-state">暂无可派工序</div>
</div>
</el-tab-pane>
<el-tab-pane label="已派工序" name="assigned">
<div v-loading="loadingProcess" class="process-list">
<div v-for="row in tableData1" :key="row.工艺任务流水号" class="process-card assigned-card">
<div class="process-head">
<span>{{ row.工序顺序 }}. {{ row.工序 }}</span>
<el-button
:disabled="Number(row.是否加工中) === 1 || Number(row.完成数) > 0 || Number(row.报废数量) > 0"
type="danger"
plain
size="mini"
@click="XUANCHU(row)">取消</el-button>
</div>
<div class="part-meta">
<span>操作者 {{ row.姓名 || '-' }}</span>
<span>设备 {{ row.设备 || '-' }}</span>
</div>
<div class="part-meta">
<span>投产 {{ row.数量 || 0 }}</span>
<span>完成 {{ row.完成数 || 0 }}</span>
<span>报废 {{ row.报废数量 || 0 }}</span>
</div>
<div class="process-actions">
<el-button
:disabled="Number(row.是否加工中) === 1 || Number(row.完成数) === 0 || (Number(row.数量) - Number(row.完成数)) === 0 || row.姓名 === '外协'"
type="text"
size="mini"
@click="editData(row)">修改投产数</el-button>
</div>
</div>
<div v-if="!loadingProcess && tableData1.length === 0" class="empty-state">暂无已派工序</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</section>
</div>
<el-dialog :visible.sync="dialogFormVisible" title="修改投产数" width="92%" class="mobile-dialog">
<el-form ref="form" :model="form" :rules="rules" label-width="82px">
<el-form-item label="投产数" prop="投产数">
<el-input-number
v-model="form.投产数"
:max="productionNum"
:min="finishNum"
:step="1"
size="small"
controls-position="right"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="small" @click="callOff()">取消</el-button>
<el-button type="primary" size="small" @click="submit()">确定</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogVisible" title="图纸文件" width="92%" class="mobile-dialog">
<div v-for="file in hadFile" :key="file.id" class="file-row">
<svg-icon :icon-class="getFileIcon(file.suffix)"/>
<a :href="file.url" target="view_window">{{ file.name }}</a>
</div>
<div v-if="hadFile.length === 0" class="empty-state">暂无图纸文件</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { MESDownloadFile, wsuri } from '@/utils/request'
import request from '@/utils/request'
export default {
name: 'WorkshopAssignmentMobile',
data() {
return {
// 修改人:Ld 修改时间:2026-07-14 13:12:40; 移动端派工组件状态独立维护,避免影响桌面端页面。
activeTab: 'available',
orderNameValue: '',
orderName1: [],
productNameValue: '',
productName: [],
partNameValue: '',
peopleValue: '',
people: [],
machineValue: '',
machine: [],
machineName: '',
selectedPart: null,
partTool: '',
processValue: '',
IsItUrgent: 0,
tableData: [],
tableData1: [],
tableData2: [],
total: 0,
pageCurrent: 1,
pageSize: 10,
loading: false,
loadingProcess: false,
loadingSubmit: true,
dialogVisible: false,
dialogFormVisible: false,
hadFile: [],
productionNum: '',
finishNum: '',
proccessStateValue: '',
processSequence: '',
form: {
投产数: ''
},
rules: {
投产数: [{ required: true, message: '请输入投产数', trigger: 'blur' }]
},
websock: null
}
},
computed: {
...mapGetters([
'id'
])
},
watch: {
machineValue(val) {
for (let i = 0; i < this.machine.length; i++) {
if (val === this.machine[i].value) {
this.machineName = this.machine[i].name
}
}
}
},
created() {
this.getOrderName('')
this.getMachine()
this.getPeople()
this.searchTable()
this.initWebpack()
},
mounted() {
// 修改人:Ld 修改时间:2026-07-14 14:33:59; 进入移动端派工页时标记页面,用于覆盖全局固定最小宽度。
document.body.classList.add('workshop-assignment-mobile-page')
},
beforeDestroy() {
document.body.classList.remove('workshop-assignment-mobile-page')
if (this.websock) {
this.websock.close()
}
},
methods: {
initWebpack() {
this.websock = new WebSocket(wsuri)
this.websock.onopen = this.websocketopen
this.websock.onclose = this.websocketclose
this.websock.onerror = this.websocketerror
},
websocketopen() {
console.log('WebSocket连接成功')
},
websocketclose() {
console.log('WebSocket关闭')
},
websocketerror() {
console.log('WebSocket连接失败')
},
sendRefreshWorkTasks(machineName) {
if (this.websock && this.websock.readyState === 1 && machineName) {
this.websock.send(`TOBS??${machineName}?MES|RefreshWorkTasks`)
}
},
getOrderName(query) {
this.orderName1 = []
var param = []
// 修改人:Ld 修改时间:2026-07-14 14:43:34; 订单号列表改用生产任务查询订单接口。
var Data = this.CreateData('11', '生产任务查询_订单信息_列表_查询数据', param)
this.ExecDatabase(Data).then(response => {
for (let i = 0; i < response.data.length; i++) {
this.orderName1.push({
label: response.data[i].订单编号,
value: response.data[i].订单流水号
})
}
})
},
getProductName() {
this.productNameValue = ''
this.productName = []
if (this.orderNameValue) {
var param = []
param[0] = ['订单流水号', this.orderNameValue]
var Data = this.CreateData('11', '订单信息_产品信息_查询数据', param)
this.ExecDatabase(Data).then(response => {
for (let i = 0; i < response.data.length; i++) {
this.productName.push({
label: response.data[i].产品名称,
value: response.data[i].组件流水号
})
}
})
}
},
getMachine() {
var param = []
var Data = this.CreateData('11', '设备信息_查询', param)
this.ExecDatabase(Data).then(response => {
for (let i = 0; i < response.data.length; i++) {
this.machine.push({
label: response.data[i].设备名称 !== '外协' ? response.data[i].设备名称 + '_' + response.data[i].工位号 : response.data[i].设备名称,
value: response.data[i].设备流水号,
name: response.data[i].工位号
})
}
})
},
getPeople() {
var param = []
param[0] = ['考核部门编号', 19]
var Data = this.CreateData('11', '人事档案管理_人员_部门与人员_派工_查询数据_根据部门编号', param)
this.ExecDatabase(Data).then(response => {
for (let i = 0; i < response.data.length; i++) {
this.people.push({
label: response.data[i].姓名,
value: response.data[i].人员编号
})
}
})
},
searchTable() {
this.loading = true
this.tableData1 = []
this.tableData2 = []
this.selectedPart = null
this.partTool = ''
this.processValue = ''
let orderNameValue_check, productNameValue_check, partNameValue_check
this.orderNameValue ? orderNameValue_check = 1 : orderNameValue_check = 0
this.productNameValue ? productNameValue_check = 1 : productNameValue_check = 0
this.partNameValue ? partNameValue_check = 1 : partNameValue_check = 0
var param = []
param[0] = ['订单流水号_check', orderNameValue_check]
param[1] = ['订单流水号', this.orderNameValue]
param[2] = ['组件流水号', this.productNameValue]
param[3] = ['组件流水号_check', productNameValue_check]
param[4] = ['零件名称_check', partNameValue_check]
param[5] = ['零件名称', this.partNameValue]
var Data = this.CreateData('11', '精工车间_车间派工_查询', param, this.pageSize, this.pageCurrent)
this.ExecDatabase(Data).then(response => {
this.tableData = response.data.rows || []
this.total = response.data.total || 0
this.loading = false
}).catch(() => {
this.loading = false
})
},
searchTable1(row) {
this.selectedPart = row
this.partTool = row.零件图号
this.processValue = row.工艺计划流水号
this.IsItUrgent = Number(row.是否加急)
this.loadingProcess = true
var param = []
param[0] = ['工艺计划流水号', row.工艺计划流水号]
var Data = this.CreateData('11', '车间生产管理工艺_零件工序_已派工查询', param)
this.ExecDatabase(Data).then(response => {
this.tableData1 = response.data || []
var param1 = []
param1[0] = ['工艺计划流水号', row.工艺计划流水号]
var Data1 = this.CreateData('11', '车间生产管理工艺_零件工序_派工_工序查询', param1)
this.ExecDatabase(Data1).then(response => {
this.tableData2 = response.data || []
this.copyPlanDate()
this.loadingProcess = false
}).catch(() => {
this.loadingProcess = false
})
}).catch(() => {
this.loadingProcess = false
})
},
copyPlanDate() {
for (let i = 0; i < this.tableData2.length; i++) {
const item = this.tableData2[i]
const table1Item = this.tableData1.find(t1 => t1.工序 === item.工序)
if (table1Item) {
item.计划开始日期 = table1Item.计划开始日期
item.计划完成日期 = table1Item.Expr1
}
}
},
reloadProcess(row) {
const target = row || this.selectedPart
if (target) {
this.searchTable1(target)
}
},
refreshAfterOperate() {
// 修改人:Ld 修改时间:2026-07-14 13:12:40; 操作后保留当前零件上下文,便于移动端连续派工。
const target = this.selectedPart
this.searchTable()
if (target) {
this.searchTable1(target)
}
},
XUANRU(row) {
if (!this.peopleValue) {
this.$message.warning('操作者不能为空')
return
}
if (!this.machineValue) {
this.$message.warning('设备不能为空')
return
}
if (Number(row.分配数) === 0) {
this.$message.warning('分配数不能为0')
return
}
if (this.loadingSubmit) {
this.loadingSubmit = false
var param = []
param[0] = ['工序流水号', row.工序流水号]
param[1] = ['数量', row.分配数]
param[2] = ['人员编号', this.peopleValue]
param[3] = ['设备流水号', this.machineValue]
param[4] = ['调拨员编号', this.id]
param[5] = ['计划完成日期', row.计划完成日期]
param[6] = ['计划开始日期', row.计划开始日期]
// 修改人:Ld 修改时间:2026-07-14 13:12:40; 保持派工参数与原桌面组件存储过程一致。
var Data = this.CreateData('12', '车间生产管理工艺_零件工序_派工', param)
this.ExecDatabase(Data).then(response => {
this.loadingSubmit = true
if (response.data[0].result === '1') {
this.$message.success('派工成功')
this.sendRefreshWorkTasks(this.machineName)
this.refreshAfterOperate()
} else {
this.$message.error('派工失败')
}
}).catch(() => {
this.loadingSubmit = true
})
}
},
XUANCHU(row) {
if (Number(row.完成数) === 0 && Number(row.是否加工中) === 0) {
if (Number(row.报废数量) === 0) {
var param = []
param[0] = ['工序流水号', row.工序流水号]
param[1] = ['数量', row.数量]
param[2] = ['工艺任务流水号', row.工艺任务流水号]
param[3] = ['退货人', this.id]
param[4] = ['订单流水号', row.订单流水号]
// 修改人:Ld 修改时间:2026-07-14 13:12:40; 移动端取消派工沿用原业务参数。
var Data = this.CreateData('12', '车间生产管理工艺_零件工序_取消派工', param)
this.ExecDatabase(Data).then(response => {
if (response.data[0].result === '1') {
this.$message.success('取消成功')
this.sendRefreshWorkTasks(row.工位号)
this.refreshAfterOperate()
} else {
this.$message.error('取消失败')
}
})
} else {
this.$message.warning('零件存在质检记录!不能取消派工')
}
} else {
this.$message.warning('零件已加工!不能取消派工')
}
},
editData(row) {
this.productionNum = row.数量
this.form.投产数 = row.数量
this.finishNum = row.完成数
this.proccessStateValue = row.工艺任务流水号
this.processSequence = row.工序顺序
this.dialogFormVisible = true
},
submit() {
this.$refs['form'].validate((valid) => {
if (valid) {
if (this.productionNum === this.form.投产数) {
this.$message.warning('数量未发生改变')
return
}
var param = []
param[0] = ['工艺任务流水号', this.proccessStateValue]
param[1] = ['原数量', this.productionNum]
param[2] = ['数量', this.form.投产数]
param[3] = ['工序顺序', this.processSequence]
var Data = this.CreateData('12', '车间生产管理工艺_零件工序_派工_修改数量', param)
this.ExecDatabase(Data).then(response => {
if (response.data[0].result === '1') {
this.$message.success('修改成功')
this.dialogFormVisible = false
this.reloadProcess()
} else {
this.$message.error('修改失败')
}
})
}
})
},
callOff() {
this.dialogFormVisible = false
},
Urgent() {
if (this.processValue) {
var param = []
param[0] = ['工艺计划流水号', this.processValue]
var Data = this.CreateData('12', '车间生产管理工艺_零件_加急', param)
this.ExecDatabase(Data).then(response => {
if (response.data[0].result === '1') {
this.$message.success('加急成功')
this.searchTable()
} else {
this.$message.error('加急失败')
}
})
} else {
this.$message.warning('请选择要加急的零件')
}
},
CancelUrgent() {
if (this.processValue) {
var param = []
param[0] = ['工艺计划流水号', this.processValue]
var Data = this.CreateData('12', '车间生产管理工艺_零件_取消加急', param)
this.ExecDatabase(Data).then(response => {
if (response.data[0].result === '1') {
this.$message.success('取消成功')
this.searchTable()
} else {
this.$message.error('取消失败')
}
})
} else {
this.$message.warning('请选择要取消加急的零件')
}
},
handleCurrentChanges(val) {
this.pageCurrent = val
this.searchTable()
},
getNum() {
if (this.partTool) {
this.dialogVisible = true
this.getFileList(this.partTool)
} else {
this.$message.warning('请先选择零件')
}
},
getFileList(value) {
value = value.replace('B1', '')
this.hadFile = []
if (value) {
request({
url: '',
method: 'post',
data: {
type: '3',
name: `select * from 机加工MES_零件图PDF表 where 是否启用 = 1 and name = '${value}'`
}
}).then(data => {
if (data.data.length > 0) {
const server = `${MESDownloadFile}`.split('/')
data.data.map(item => {
this.hadFile.push({
url: `http://${server[2]}/webpage/part/${item.uid}.${item.suffix}`,
name: `${item.name}.${item.suffix}`,
suffix: item.suffix,
id: item.uid
})
})
}
})
}
},
getFileIcon(suffix) {
if (suffix === 'pdf') return 'pdf'
if (suffix === 'docx' || suffix === 'doc') return 'doc'
if (suffix === 'xlsx' || suffix === 'xls') return 'excel'
if (suffix === 'pptx' || suffix === 'ppt') return 'ppt'
if (suffix === 'jpg' || suffix === 'jpeg' || suffix === 'png') return 'pic'
return 'file'
},
formatDate(value) {
if (!value) return '-'
return String(value).split(' ')[0]
}
}
}
</script>
<style scoped>
/* 修改人:Ld 修改时间:2026-07-14 13:12:40; 新增派工移动端自适应样式。 */
.workshop-assignment-mobile {
/* 修改人:Ld 修改时间:2026-07-14 13:40:23; 修复移动端容器和内部控件固定最小宽度导致的横向溢出。 */
width: 100%;
max-width: 100%;
min-height: calc(100vh - 84px);
padding: 10px;
overflow-x: hidden;
box-sizing: border-box;
background: #f4f7fb;
}
.dispatch-shell {
width: 100%;
max-width: none;
margin: 0 auto;
box-sizing: border-box;
}
.filter-panel,
.part-panel,
.task-panel {
min-width: 0;
box-sizing: border-box;
border: 1px solid #d8e1ec;
border-radius: 8px;
background: #fff;
}
.filter-panel {
padding: 10px;
margin-bottom: 10px;
}
.filter-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 8px;
min-width: 0;
}
.quick-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 8px;
}
.content-grid {
display: grid;
grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);
gap: 10px;
min-width: 0;
}
.part-panel,
.task-panel {
min-height: 640px;
padding: 10px;
}
.panel-title {
display: flex;
align-items: center;
justify-content: space-between;
height: 28px;
margin-bottom: 8px;
color: #1f2d3d;
font-weight: 600;
}
.panel-title small {
color: #6b778c;
font-size: 12px;
font-weight: 400;
}
.part-list,
.process-list {
display: grid;
gap: 8px;
min-width: 0;
}
.part-list {
max-height: calc(100vh - 226px);
min-height: 420px;
overflow: auto;
}
.process-list {
max-height: calc(100vh - 236px);
min-height: 450px;
overflow: auto;
}
.part-card,
.process-card {
min-width: 0;
box-sizing: border-box;
border: 1px solid #dbe4ef;
border-radius: 8px;
padding: 10px;
background: #fff;
}
.part-card {
cursor: pointer;
}
.part-card.is-active {
border-color: #409eff;
box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.14);
}
.part-card.is-urgent {
border-left: 4px solid #f56c6c;
}
.part-card-head,
.process-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.part-card-head strong,
.process-head span {
overflow: hidden;
color: #172b4d;
text-overflow: ellipsis;
white-space: nowrap;
}
.part-main {
margin: 6px 0;
color: #303133;
font-size: 14px;
}
.part-meta {
display: flex;
flex-wrap: wrap;
gap: 8px 12px;
min-width: 0;
margin-top: 6px;
color: #6b778c;
font-size: 12px;
line-height: 18px;
}
.assignee-grid,
.date-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
min-width: 0;
margin-bottom: 8px;
}
.process-field {
display: grid;
grid-template-columns: 56px minmax(0, 1fr);
align-items: center;
gap: 8px;
min-width: 0;
margin: 10px 0 8px;
color: #606266;
font-size: 13px;
}
.process-actions {
margin-top: 4px;
}
.assigned-card {
background: #fbfcfe;
}
.mobile-page {
margin-top: 10px;
text-align: center;
}
.file-row {
display: flex;
align-items: center;
gap: 8px;
min-height: 36px;
border-bottom: 1px solid #ebeef5;
}
.file-row a {
color: #409eff;
text-decoration: none;
}
.workshop-assignment-mobile >>> .el-select,
.workshop-assignment-mobile >>> .el-date-editor.el-input,
.workshop-assignment-mobile >>> .el-input-number,
.workshop-assignment-mobile >>> .el-input,
.workshop-assignment-mobile >>> .el-button {
max-width: 100%;
min-width: 0;
box-sizing: border-box;
}
.workshop-assignment-mobile >>> .el-select,
.workshop-assignment-mobile >>> .el-date-editor.el-input,
.workshop-assignment-mobile >>> .el-input-number,
.workshop-assignment-mobile >>> .el-input {
width: 100%;
}
.workshop-assignment-mobile >>> .el-input__inner {
min-width: 0;
}
@media (max-width: 1080px) {
.filter-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.content-grid {
grid-template-columns: 1fr;
}
.part-panel,
.task-panel {
min-height: auto;
}
.part-list,
.process-list {
max-height: none;
min-height: 0;
}
}
@media (max-width: 768px) {
.workshop-assignment-mobile {
padding: 6px;
}
.filter-grid,
.content-grid,
.assignee-grid,
.date-grid {
grid-template-columns: 1fr;
}
.part-panel,
.task-panel {
min-height: auto;
padding: 8px;
}
.part-list,
.process-list {
max-height: none;
min-height: 0;
overflow: visible;
}
.quick-actions .el-button {
flex: 1;
}
}
</style>
<style>
/* 修改人:Ld 修改时间:2026-07-14 14:33:59; 仅在移动端派工页覆盖全局 main-container 的 1360px 最小宽度。 */
body.workshop-assignment-mobile-page #app .main-container,
body.workshop-assignment-mobile-page #app .app-main {
max-width: 100% !important;
min-width: 0 !important;
overflow-x: hidden !important;
}
body.workshop-assignment-mobile-page #app .app-main {
width: 100% !important;
}
body.workshop-assignment-mobile-page #app .mobile .main-container {
width: 100vw !important;
max-width: 100vw !important;
min-width: 0 !important;
margin-left: 0 !important;
}
body.workshop-assignment-mobile-page {
overflow-x: hidden;
}
</style>

View File

@@ -393,10 +393,38 @@ export default {
} }
sendMessage = sendMessage + number + word sendMessage = sendMessage + number + word
this.websock.send(sendMessage) this.websock.send(sendMessage)
this.printSelected()
} else { } else {
this.$message.warning('请选择要打印的物料') this.$message.warning('请选择要打印的物料')
} }
}, },
printSelected() {
var list = this.multipleSelection
var printHtml = '<!DOCTYPE html><html><head><meta charset="utf-8"><title>库存盘点打印</title>'
printHtml += '<style>'
printHtml += 'body { font-family: "Microsoft YaHei", sans-serif; margin: 10px; }'
printHtml += 'table { width: 100%; border-collapse: collapse; }'
printHtml += 'th, td { border: 1px solid #333; padding: 8px 12px; text-align: center; font-size: 14px; }'
printHtml += 'th { background-color: #f0f0f0; font-weight: bold; }'
printHtml += '@media print { @page { size: auto; margin: 10mm; } }'
printHtml += '</style></head><body>'
printHtml += '<h2 style="text-align:center;">库存盘点</h2>'
printHtml += '<table><thead><tr><th>物料编码</th><th>物料名称</th><th>图号</th><th>库位</th></tr></thead><tbody>'
for (var i = 0; i < list.length; i++) {
printHtml += '<tr>'
printHtml += '<td>' + (list[i].物料编码 || '') + '</td>'
printHtml += '<td>' + (list[i].物料名称 || '') + '</td>'
printHtml += '<td>' + (list[i].图号或型号 || '') + '</td>'
printHtml += '<td>' + (list[i].货位名称 || '') + '</td>'
printHtml += '</tr>'
}
printHtml += '</tbody></table></body></html>'
var printWindow = window.open('', '_blank')
printWindow.document.write(printHtml)
printWindow.document.close()
printWindow.focus()
printWindow.print()
},
getWord(number, name, val, location) { getWord(number, name, val, location) {
let word let word
word = '' word = ''

View File

@@ -80,7 +80,7 @@
@cell-click="handleEdit" @cell-click="handleEdit"
@sort-change="sortChange" @sort-change="sortChange"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="40" :reserve-selection="true" /> <el-table-column :reserve-selection="true" type="selection" width="40" />
<el-table-column type="expand" width="1"> <el-table-column type="expand" width="1">
<template slot-scope="scope"> <template slot-scope="scope">
<el-table <el-table
@@ -93,7 +93,7 @@
style="width:962px" style="width:962px"
height="258px" height="258px"
size="small"> size="small">
<el-table-column label="物料编码" align="center" prop="物料码"><!-- 备注:修改人:Ld 修改时间:2026-06-29 14:24:00 --> <el-table-column label="物料编码" align="center" prop="物料码"><!-- 备注:修改人:Ld 修改时间:2026-07-15 17:14:07; 展开行恢复原出入库记录数据。 -->
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.物料编码 }} {{ scope.row.物料编码 }}
</template> </template>
@@ -168,14 +168,23 @@
{{ scope.row.图号或型号 }} {{ scope.row.图号或型号 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :width="setColumnWidth('数量')" label="库位" sortable="库位" prop="库位" align="center">
<template slot-scope="scope">
{{ scope.row.货位名称 }}
</template>
</el-table-column>
<el-table-column :width="setColumnWidth('数量')" label="库存" sortable="库存" prop="库存" align="center"> <el-table-column :width="setColumnWidth('数量')" label="库存" sortable="库存" prop="库存" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.库存 }} <el-popover
placement="bottom"
width="300"
trigger="click"
@show="getStockLocationDetail(scope.row)">
<el-table v-loading="stockLocationLoading" :data="stockLocationData" border stripe size="mini" max-height="300">
<el-table-column prop="货位名称" label="库位" align="center" show-overflow-tooltip/>
<el-table-column prop="货位存量" label="数量" align="center">
<template slot-scope="stockScope">
{{ stockScope.row.货位存量 || stockScope.row.库存 || 0 }}
</template>
</el-table-column>
</el-table>
<span slot="reference" style="cursor: pointer; color: #409EFF; text-decoration: underline;">{{ scope.row.库存 }}</span><!-- 备注:修改人:Ld 修改时间:2026-07-15 17:14:07; 库存库位明细改为参考需求数的小窗显示。 -->
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :width="setColumnWidth('数量')" label="需求数" align="center"> <el-table-column :width="setColumnWidth('数量')" label="需求数" align="center">
@@ -185,7 +194,7 @@
width="400" width="400"
trigger="click" trigger="click"
@show="getDemandDetail(scope.row)"> @show="getDemandDetail(scope.row)">
<el-table :data="demandDetailData" border stripe size="mini" max-height="300" v-loading="demandDetailLoading"> <el-table v-loading="demandDetailLoading" :data="demandDetailData" border stripe size="mini" max-height="300">
<el-table-column prop="订单编号" label="订单号" align="center" show-overflow-tooltip/> <el-table-column prop="订单编号" label="订单号" align="center" show-overflow-tooltip/>
<el-table-column prop="最终需求量" label="需求量" align="center"/> <el-table-column prop="最终需求量" label="需求量" align="center"/>
<el-table-column prop="简称" label="客户" align="center"/> <el-table-column prop="简称" label="客户" align="center"/>
@@ -404,7 +413,9 @@ export default {
order: '', // 排序方式 order: '', // 排序方式
multipleSelection: [], // 选中的行 multipleSelection: [], // 选中的行
demandDetailData: [], demandDetailData: [],
demandDetailLoading: false demandDetailLoading: false,
stockLocationData: [],
stockLocationLoading: false
} }
}, },
computed: { computed: {
@@ -465,18 +476,48 @@ export default {
this.pageCurrent1 = val this.pageCurrent1 = val
this.searchTable2() this.searchTable2()
}, },
getInventoryLocationRows(row) {
var param = []
var materialName_check = row.物料名称 ? 1 : 0
var specificationsModel_check = row.图号或型号 ? 1 : 0
param[0] = ['物料名称_check', materialName_check]
param[1] = ['物料名称', row.物料名称]
param[2] = ['图号或型号_check', specificationsModel_check]
param[3] = ['图号或型号', row.图号或型号]
param[4] = ['库位_check', 0]
param[5] = ['库位', '']
param[6] = ['排序名称', '']
param[7] = ['排序方式', '']
var Data = this.CreateData('11', '仓储管理_库存盘点_查询', param)
return this.ExecDatabase(Data).then(response => {
var rows = response.data.rows || response.data || []
// 备注:修改人:Ld 修改时间:2026-07-15 17:14:07; 库存小窗只显示有库存的库位和对应数量。
return rows.filter(function(item) {
return Number(item.货位存量 || item.库存 || 0) > 0
})
})
},
getStockLocationDetail(row) {
this.stockLocationLoading = true
this.stockLocationData = []
this.getInventoryLocationRows(row).then(rows => {
this.stockLocationData = rows
this.stockLocationLoading = false
}).catch(() => {
this.stockLocationLoading = false
})
},
searchTable2() { searchTable2() {
var param = [] var param = []
param[0] = ['物料流水号', this.materialSerialNumber] param[0] = ['物料流水号', this.materialSerialNumber]
var Data = this.CreateData('11', '库存查询_物料出入库记录_查询', param, this.pageSize1, this.pageCurrent1) var Data = this.CreateData('11', '库存查询_物料出入库记录_查询', param, this.pageSize1, this.pageCurrent1)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
console.log('response.data', response.data)
this.tableData9 = response.data.rows this.tableData9 = response.data.rows
this.total1 = response.data.total this.total1 = response.data.total
}) })
}, },
handleEdit(row, column) { handleEdit(row, column) {
if (column.label === '物料编码') { // 备注:修改人:Ld 修改时间:2026-06-29 14:24:00 if (column.label === '物料编码') { // 备注:修改人:Ld 修改时间:2026-07-15 17:14:07; 展开行继续使用原物料出入库记录。
this.materialSerialNumber = row.物料流水号 this.materialSerialNumber = row.物料流水号
this.tableData9 = [] this.tableData9 = []
this.searchTable2() this.searchTable2()
@@ -559,11 +600,11 @@ export default {
Promise.all(promises).then(function(results) { Promise.all(promises).then(function(results) {
var data = [] var data = []
// 表头 // 表头
data.push(['物料编码', '物料名称', '图号型号', '库位', '库存', '需求数', '可用库存', '加工中', '采购中', '毛坯数', '单位', '类型', '库存批次', '待入库', '最低库存', '安全库存', '最高库存', '', '物料编码', '物料名称', '图号/型号', '类型', '出/入库数', '出/入库日期', '批次编码']) // 备注:修改人:Ld 修改时间:2026-06-29 14:24:00 data.push(['物料编码', '物料名称', '图号型号', '库存', '需求数', '可用库存', '加工中', '采购中', '毛坯数', '单位', '类型', '库存批次', '待入库', '最低库存', '安全库存', '最高库存', '', '物料编码', '物料名称', '图号/型号', '类型', '出/入库数', '出/入库日期', '批次编码']) // 备注:修改人:Ld 修改时间:2026-07-15 17:14:07; 选中导出恢复原展开出入库记录明细。
results.forEach(function(item) { results.forEach(function(item) {
var row = item.row var row = item.row
var mainRow = [ var mainRow = [
row.物料编码, row.物料名称, row.图号或型号, row.货位名称, row.库存, row.物料编码, row.物料名称, row.图号或型号, row.库存,
row.需求量, row.库存 - row.需求量, row.加工中 < 0 ? 0 : row.加工中, row.需求量, row.库存 - row.需求量, row.加工中 < 0 ? 0 : row.加工中,
row.采购中, row.毛坯库存, row.单位, row.类型, row.批次, row.预库存, row.采购中, row.毛坯库存, row.单位, row.类型, row.批次, row.预库存,
row.最低库存, row.安全库存, row.最高库存, '' row.最低库存, row.安全库存, row.最高库存, ''
@@ -573,7 +614,7 @@ export default {
if (idx === 0) { if (idx === 0) {
data.push(mainRow.concat([expand.物料编码, expand.物料名称, expand.图号或型号, expand.类型, expand.数量, expand.日期, expand.批次编号 || expand.批次编码])) data.push(mainRow.concat([expand.物料编码, expand.物料名称, expand.图号或型号, expand.类型, expand.数量, expand.日期, expand.批次编号 || expand.批次编码]))
} else { } else {
data.push(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', expand.物料编码, expand.物料名称, expand.图号或型号, expand.类型, expand.数量, expand.日期, expand.批次编号 || expand.批次编码]) data.push(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', expand.物料编码, expand.物料名称, expand.图号或型号, expand.类型, expand.数量, expand.日期, expand.批次编号 || expand.批次编码])
} }
}) })
} else { } else {
@@ -582,12 +623,11 @@ export default {
}) })
var ws = XLSX.utils.aoa_to_sheet(data) var ws = XLSX.utils.aoa_to_sheet(data)
ws['!cols'] = [ ws['!cols'] = [
{ wch: 15 }, { wch: 20 }, { wch: 15 }, { wch: 10 }, { wch: 8 }, { wch: 15 }, { wch: 20 }, { wch: 15 }, { wch: 8 }, { wch: 8 },
{ wch: 8 }, { wch: 10 }, { wch: 8 }, { wch: 8 }, { wch: 8 }, { wch: 10 }, { wch: 8 }, { wch: 8 }, { wch: 8 }, { wch: 6 },
{ wch: 6 }, { wch: 8 }, { wch: 12 }, { wch: 8 }, { wch: 10 }, { wch: 8 }, { wch: 12 }, { wch: 8 }, { wch: 10 }, { wch: 10 },
{ wch: 10 }, { wch: 10 }, { wch: 2 }, { wch: 10 }, { wch: 2 }, { wch: 15 }, { wch: 20 }, { wch: 15 },
{ wch: 15 }, { wch: 20 }, { wch: 15 }, { wch: 8 }, { wch: 10 }, { wch: 8 }, { wch: 10 }, { wch: 15 }, { wch: 15 }
{ wch: 15 }, { wch: 15 }
] ]
var wb = XLSX.utils.book_new() var wb = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(wb, ws, '库存查询') XLSX.utils.book_append_sheet(wb, ws, '库存查询')
@@ -605,8 +645,6 @@ export default {
this.orderName = 1 this.orderName = 1
} else if (column.prop === '物料名称') { } else if (column.prop === '物料名称') {
this.orderName = 2 this.orderName = 2
} else if (column.prop === '库位') {
this.orderName = 3
} else if (column.prop === '库存') { } else if (column.prop === '库存') {
this.orderName = 4 this.orderName = 4
} else if (column.prop === '最低库存') { } else if (column.prop === '最低库存') {

View File

@@ -7,9 +7,12 @@
<el-input v-model="DrawingNo" style="width: 200px " size="small" clearable placeholder="图号/型号"/> <el-input v-model="DrawingNo" style="width: 200px " size="small" clearable placeholder="图号/型号"/>
<el-input v-model="locationWarehouseValue" style="width:200px" placeholder="库位" size="small" clearable/> <el-input v-model="locationWarehouseValue" style="width:200px" placeholder="库位" size="small" clearable/>
<el-button style="margin-left: 7px;width: 80px" type="primary" plain size="small" @click="searchTable()">查询</el-button> <el-button style="margin-left: 7px;width: 80px" type="primary" plain size="small" @click="searchTable()">查询</el-button>
<el-button type="primary" icon="el-icon-printer" style="margin-left: 7px" plain size="small" @click="printReceiptDoc1()">打印</el-button>
</div> </div>
<div> <div>
<el-table v-loading="loading" :data="tableData" highlight-current-row show-summary border stripe size="small" style="width: 731px" height="740px"> <el-table ref="table" v-loading="loading" :data="tableData" highlight-current-row show-summary border stripe size="small" style="width: 731px" height="740px"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="50px"/>
<el-table-column :width="setColumnWidth('序号')" type="index" label="序号" align="center"/> <el-table-column :width="setColumnWidth('序号')" type="index" label="序号" align="center"/>
<el-table-column label="物料编码" align="center" show-overflow-tooltip><!-- 备注:修改人:Ld 修改时间:2026-06-29 14:24:00 --> <el-table-column label="物料编码" align="center" show-overflow-tooltip><!-- 备注:修改人:Ld 修改时间:2026-06-29 14:24:00 -->
<template slot-scope="scope"> <template slot-scope="scope">
@@ -44,15 +47,57 @@
@current-change="handleCurrentChanges"/> @current-change="handleCurrentChanges"/>
</div> </div>
</el-card> </el-card>
<el-card v-show="false">
<div style="width:900px;margin-left: 350px">
<el-card>
<div id="WGBLD" style="width: 840px;margin: 0 auto">
<div style="width: 260px;margin: 0 auto 20px">
<h3>浙江景耀数控物料库位清单</h3>
</div>
<div style="margin: 0 0 20px">
<span style="float: right; font-size: 14px;margin-right: 10px">日期:{{ NowTime }}</span>
</div>
<table align="center" border="1 solid black" cellspacing="0px" width="100%">
<tr id="tablehead12" style="height: 35px">
<td colspan="3" style="text-align: center;width: 25%;font-size: 14px">物料编码</td>
<td colspan="5" style="text-align: center;width: 30%;font-size: 14px">物料名称</td>
<td colspan="4" style="text-align: center;width: 22%;font-size: 14px">图号或型号</td>
<td colspan="6" style="text-align: center;width: 23%;font-size: 14px">库位</td>
</tr>
<tr v-for="(list, index) in returns" :key="index" style="height: 35px">
<td colspan="3" style="text-align: center;width: 25%;font-size: 14px">{{ list.物料编码 }}</td>
<td colspan="5" style="text-align: center;width: 30%;font-size: 14px">{{ list.物料名称 }}</td>
<td colspan="4" style="text-align: center;width: 22%;font-size: 14px">{{ list.规格型号 }}</td>
<td colspan="6" style="text-align: center;width: 23%;font-size: 14px">{{ list.库位 }}</td>
</tr>
<tr style="height: 35px">
<td colspan="12" style="text-align: center;font-size: 14px">合计</td>
<td colspan="6" style="text-align: center;">
<div>
<span style="float: right;margin-right: 24%;font-size: 14px">{{ returns.length }} 条</span>
</div>
</td>
</tr>
</table>
<div style="margin-top: 15px"><span style="margin-left: 10px;font-size: 14px">制单:</span></div>
</div>
</el-card>
</div>
</el-card>
</div> </div>
</template> </template>
<script> <script>
import { ExecDatabase } from '@/main' import { ExecDatabase } from '@/main'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import $ from 'jquery'
import { getNowDAY } from '@/utils'
export default { export default {
data() { data() {
return { return {
NowTime: getNowDAY(),
returns: [],
multipleSelection: [],
locationWarehouseValue: '', // 库位 locationWarehouseValue: '', // 库位
MaterialCode: '', MaterialCode: '',
MaterialName: '', MaterialName: '',
@@ -130,6 +175,49 @@ export default {
handleCurrentChanges(val) { handleCurrentChanges(val) {
this.pageCurrent = val this.pageCurrent = val
this.searchTable() this.searchTable()
},
handleSelectionChange(val) {
this.multipleSelection = val
},
async printReceiptDoc1() {
const aa = this.printReceiptDoc()
if (aa === 2) {
await this.sleep(500)
await this.exportTable()
} else if (aa === 1) {
this.$message.warning('请勾选要打印的物料!!')
}
},
sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
},
exportTable() {
const htmlNode = $('#WGBLD').html()
const body = $('body')
body.children().hide()
const printNode = $(htmlNode)
body.append(printNode)
window.print()
body.children().not('script').show()
body.children().not('#app').hide()
printNode.remove()
},
printReceiptDoc() {
this.returns = []
if (this.multipleSelection.length !== 0) {
for (let i = 0; i < this.multipleSelection.length; i++) {
this.returns.push({
物料编码: this.multipleSelection[i].物料编号,
物料名称: this.multipleSelection[i].物料名称,
规格型号: this.multipleSelection[i].图号或型号,
库位: this.multipleSelection[i].货位名称
})
}
return 2
} else {
this.$message.warning('未勾选物料!!')
return 1
}
} }
} }
} }

View File

@@ -5,7 +5,7 @@
v-model="PartType" v-model="PartType"
type="border-card" type="border-card"
style="height: 850px;padding: 0" style="height: 850px;padding: 0"
@tab-click="pageCurrent=1;pageCurrent1=1"> @tab-click="handleTabClick">
<el-tab-pane label="采购入库" name="采购入库"> <el-tab-pane label="采购入库" name="采购入库">
<div style="margin-top: 7px; margin-bottom: 7px"> <div style="margin-top: 7px; margin-bottom: 7px">
<el-select <el-select
@@ -279,6 +279,17 @@
size="small" size="small"
@click="submitInStorage2">入库 @click="submitInStorage2">入库
</el-button> </el-button>
<!-- 修改人:Ld 修改时间:2026-07-14 09:05:57; 自制件入库增加入库单入口,按自制件类型加载待入库单 -->
<el-badge :value="selfMadeRKDCount" class="item">
<el-button
type="primary"
icon="el-icon-s-home"
style="margin-left: 10px"
plain
size="small"
@click="showSelfMadeRKDDialog">入库单
</el-button>
</el-badge>
</div> </div>
<div> <div>
<el-table <el-table
@@ -546,8 +557,11 @@
<el-dialog v-el-drag-dialog :visible.sync="dialogFormVisibleRKD" title="入库单" center width="700px"> <el-dialog v-el-drag-dialog :visible.sync="dialogFormVisibleRKD" title="入库单" center width="700px">
<el-table :data="tableDataRKDMerged" border stripe size="small" height="400px"> <el-table :data="tableDataRKDMerged" border stripe size="small" height="400px">
<el-table-column prop="入库单号" label="入库单号" align="center" show-overflow-tooltip/> <el-table-column prop="入库单号" label="入库单号" align="center" show-overflow-tooltip/>
<el-table-column prop="采购合同号" label="采购合同" align="center" show-overflow-tooltip/> <el-table-column v-if="rkdDialogType === '采购'" prop="采购合同号" label="采购合同" align="center" show-overflow-tooltip/>
<el-table-column prop="供应商名称" label="供应商" align="center" show-overflow-tooltip/> <el-table-column v-if="rkdDialogType === '采购'" prop="供应商名称" label="供应商" align="center" show-overflow-tooltip/>
<!-- 修改人:Ld 修改时间:2026-07-14 09:05:57; 自制件入库单弹窗显示订单信息 -->
<el-table-column v-if="rkdDialogType === '自制'" prop="订单号" label="订单号" align="center" show-overflow-tooltip/>
<el-table-column v-if="rkdDialogType === '自制'" prop="类型" label="类型" align="center" show-overflow-tooltip/>
<el-table-column prop="到货数" label="到货数" align="center" show-overflow-tooltip/> <el-table-column prop="到货数" label="到货数" align="center" show-overflow-tooltip/>
<el-table-column label="操作" align="center" width="80px"> <el-table-column label="操作" align="center" width="80px">
<template slot-scope="scope"> <template slot-scope="scope">
@@ -711,6 +725,7 @@ export default {
tableData3: [], // 合同信息表 tableData3: [], // 合同信息表
tableData30: [], // 合同信息表 tableData30: [], // 合同信息表
dialogFormVisibleRKD: false, dialogFormVisibleRKD: false,
rkdDialogType: '采购', // 修改人:Ld 修改时间:2026-07-14 09:05:57; 区分采购/自制件入库单弹窗
tableDataRKD: [], tableDataRKD: [],
pageCurrent: 1, // 分页当前页 pageCurrent: 1, // 分页当前页
pageSize: 30, // 分页每页显示条数 pageSize: 30, // 分页每页显示条数
@@ -739,6 +754,16 @@ export default {
} }
} }
return result return result
},
selfMadeRKDCount() {
// 修改人:Ld 修改时间:2026-07-14 09:05:57; 统计自制件待入库单数量用于按钮角标
var count = 0
for (var i = 0; i < this.tableDataRKD.length; i++) {
if (this.tableDataRKD[i].类型 === '自制') {
count++
}
}
return this.rkdDialogType === '自制' ? this.tableDataRKDMerged.length : count
} }
}, },
updated() { updated() {
@@ -762,10 +787,20 @@ export default {
}, },
methods: { methods: {
loadRKDCounter() { loadRKDCounter() {
// 修改人:Ld 修改时间:2026-07-14 09:05:57; 默认加载采购入库单数量,避免采购页混入自制件入库单
this.loadRKDData('采购', false)
},
loadRKDData(type, showDialog) {
// 修改人:Ld 修改时间:2026-07-14 09:05:57; 按采购/自制类型统一加载入库单数据
var param = [] var param = []
param[0] = ['类型_check', 1]
param[1] = ['类型', type]
var Data = this.CreateData('11', '仓储管理_入库单_查询', param) var Data = this.CreateData('11', '仓储管理_入库单_查询', param)
this.ExecDatabase(Data).then(response => { this.ExecDatabase(Data).then(response => {
this.tableDataRKD = response.data.filter(item => item.是否入库 === 0 || item.是否入库 === false) this.tableDataRKD = response.data.filter(item => item.是否入库 === 0 || item.是否入库 === false)
if (showDialog) {
this.dialogFormVisibleRKD = true
}
}) })
}, },
handleSupplierChange() { handleSupplierChange() {
@@ -797,14 +832,23 @@ export default {
this.supplierSelectionName = obj ? obj.label : '' this.supplierSelectionName = obj ? obj.label : ''
}, },
showRKDDialog() { showRKDDialog() {
var param = [] this.rkdDialogType = '采购'
var Data = this.CreateData('11', '仓储管理_入库单_查询', param) this.loadRKDData('采购', true)
this.ExecDatabase(Data).then(response => { },
this.tableDataRKD = response.data.filter(item => item.是否入库 === 0 || item.是否入库 === false ) showSelfMadeRKDDialog() {
this.dialogFormVisibleRKD = true // 修改人:Ld 修改时间:2026-07-14 09:05:57; 自制件入库页打开自制件入库单列表
}) this.rkdDialogType = '自制'
this.loadRKDData('自制', true)
}, },
selectRKDRow(row) { selectRKDRow(row) {
if (this.rkdDialogType === '自制') {
this.orderSelectionValue = Number(row.订单流水号) || row.订单流水号
this.numberSelectionValue = ''
this.getnumberSelection()
this.searchTable3()
this.dialogFormVisibleRKD = false
return
}
this.supplierSelectionValue = row.供应商流水号 this.supplierSelectionValue = row.供应商流水号
this.getContractState() this.getContractState()
this.$nextTick(() => { this.$nextTick(() => {
@@ -814,6 +858,13 @@ export default {
}) })
this.dialogFormVisibleRKD = false this.dialogFormVisibleRKD = false
}, },
handleTabClick() {
// 修改人:Ld 修改时间:2026-07-14 09:05:57; 切换页签时刷新对应类型的入库单数量
this.pageCurrent = 1
this.pageCurrent1 = 1
this.rkdDialogType = this.PartType === '自制件入库' ? '自制' : '采购'
this.loadRKDData(this.rkdDialogType, false)
},
exportTable() { exportTable() {
const htmlNode = $('#WGBLD').html() const htmlNode = $('#WGBLD').html()
const body = $('body') const body = $('body')