更新webpack配置、精工车间工序工价/生产计划/派工及移动端界面,新增菜单迁移与工价公式调整SQL脚本

This commit is contained in:
Developer
2026-08-08 16:02:24 +08:00
parent fd84f9d3ca
commit 9fc3aae3e9
15 changed files with 2007 additions and 97 deletions

View File

@@ -0,0 +1,592 @@
/* 修改人:Ld 修改时间:2026-08-06 09:50:27; 在测试库新增ERP经营管理、MES制造执行、PLM产品生产周期、QMS质量管理、WMS仓储管理、APS计划排产一级菜单,并给系统管理角色2追加权限 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @RoleId INT = 2;
DECLARE @ModuleId INT;
/* ERP经营管理 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE title = N'ERP经营管理'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'ERPManagement',
N'ERP经营管理',
N'SystemRrolemaintenance',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'ERPManagement',
title = N'ERP经营管理',
icon = N'SystemRrolemaintenance',
是否禁用 = 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(角色模块顺序), 0) + 1
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId;
END;
/* MES制造执行 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE title = N'MES制造执行'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'MESExecution',
N'MES制造执行',
N'车间',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'MESExecution',
title = N'MES制造执行',
icon = N'车间',
是否禁用 = 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(角色模块顺序), 0) + 1
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId;
END;
/* PLM产品生产周期 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE title = N'PLM产品生产周期'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'PLMProductLifecycle',
N'PLM产品生产周期',
N'ProductMaintenance',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'PLMProductLifecycle',
title = N'PLM产品生产周期',
icon = N'ProductMaintenance',
是否禁用 = 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(角色模块顺序), 0) + 1
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId;
END;
/* QMS质量管理 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE title = N'QMS质量管理'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'QMSQualityManagement',
N'QMS质量管理',
N'QualityInspectionQuery',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'QMSQualityManagement',
title = N'QMS质量管理',
icon = N'QualityInspectionQuery',
是否禁用 = 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(角色模块顺序), 0) + 1
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId;
END;
/* WMS仓储管理 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE title = N'WMS仓储管理'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'WMSWarehouseManagement',
N'WMS仓储管理',
N'仓储管理',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'WMSWarehouseManagement',
title = N'WMS仓储管理',
icon = N'仓储管理',
是否禁用 = 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(角色模块顺序), 0) + 1
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId;
END;
/* APS计划排产 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE title = N'APS计划排产'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'APSPlanScheduling',
N'APS计划排产',
N'ShopScheduling',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'APSPlanScheduling',
title = N'APS计划排产',
icon = N'ShopScheduling',
是否禁用 = 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(角色模块顺序), 0) + 1
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1
WHERE id = @ModuleId
AND pid = 0
AND 角色编号 = @RoleId;
END;
/* 修改人:Ld 修改时间:2026-08-06 09:50:27; 固定系统管理角色2下新增一级菜单的显示顺序 */
DECLARE @BaseRoleOrder INT;
SELECT @BaseRoleOrder = ISNULL(MAX(r.角色模块顺序), 0)
FROM dbo.基础表_角色模块信息 r
INNER JOIN dbo.基础表_模块信息 m ON m.id = r.id
WHERE r.角色编号 = @RoleId
AND r.pid = 0
AND m.title NOT IN (N'ERP经营管理', N'MES制造执行', N'PLM产品生产周期', N'QMS质量管理', N'WMS仓储管理', N'APS计划排产');
;WITH MenuOrder AS
(
SELECT N'ERP经营管理' AS title, 1 AS SortNo
UNION ALL SELECT N'MES制造执行', 2
UNION ALL SELECT N'PLM产品生产周期', 3
UNION ALL SELECT N'QMS质量管理', 4
UNION ALL SELECT N'WMS仓储管理', 5
UNION ALL SELECT N'APS计划排产', 6
)
UPDATE r
SET 角色模块顺序 = @BaseRoleOrder + MenuOrder.SortNo,
是否启用 = 1
FROM dbo.基础表_角色模块信息 r
INNER JOIN dbo.基础表_模块信息 m ON m.id = r.id
INNER JOIN MenuOrder ON MenuOrder.title = m.title
WHERE r.角色编号 = @RoleId
AND r.pid = 0;
SELECT id, [path], component, name, title, icon, 是否禁用
FROM dbo.基础表_模块信息
WHERE title IN (N'ERP经营管理', N'MES制造执行', N'PLM产品生产周期', N'QMS质量管理', N'WMS仓储管理', N'APS计划排产')
ORDER BY id;
SELECT id, pid, 模块顺序, 角色编号, 是否启用, 角色模块顺序
FROM dbo.基础表_角色模块信息
WHERE id IN
(
SELECT id
FROM dbo.基础表_模块信息
WHERE title IN (N'ERP经营管理', N'MES制造执行', N'PLM产品生产周期', N'QMS质量管理', N'WMS仓储管理', N'APS计划排产')
)
AND pid = 0
ORDER BY 角色编号, 角色模块顺序, id;
COMMIT TRAN;

View File

@@ -0,0 +1,140 @@
/* 修改人:Ld 修改时间:2026-08-06 15:22:59; 将测试库角色2下可明确归属的二级组件迁移到新一级菜单下 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @MoveMap TABLE
(
id INT PRIMARY KEY,
目标pid INT NOT NULL,
顺序 INT NOT NULL
);
INSERT INTO @MoveMap (id, 目标pid, 顺序)
VALUES
(67, 160, 1),
(11, 160, 2),
(12, 160, 3),
(13, 160, 4),
(14, 160, 5),
(147, 160, 6),
(68, 160, 7),
(17, 160, 8),
(16, 160, 9),
(18, 160, 10),
(81, 160, 11),
(19, 160, 12),
(15, 160, 13),
(99, 160, 14),
(86, 160, 15),
(87, 160, 16),
(108, 160, 17),
(114, 160, 18),
(120, 160, 19),
(82, 160, 20),
(129, 160, 21),
(155, 160, 22),
(156, 160, 23),
(35, 160, 24),
(36, 160, 25),
(37, 160, 26),
(41, 160, 27),
(124, 160, 28),
(157, 160, 29),
(94, 161, 1),
(78, 161, 2),
(28, 161, 3),
(98, 161, 4),
(80, 161, 5),
(29, 161, 6),
(79, 161, 7),
(30, 161, 8),
(100, 161, 9),
(84, 161, 10),
(95, 161, 11),
(153, 161, 12),
(154, 161, 13),
(25, 162, 1),
(69, 162, 2),
(24, 162, 3),
(102, 162, 4),
(21, 162, 5),
(22, 162, 6),
(23, 162, 7),
(117, 162, 8),
(134, 162, 9),
(150, 162, 10),
(104, 163, 1),
(110, 163, 2),
(103, 163, 3),
(121, 163, 4),
(128, 163, 5),
(131, 163, 6),
(135, 163, 7),
(43, 164, 1),
(112, 164, 2),
(44, 164, 3),
(46, 164, 4),
(47, 164, 5),
(48, 164, 6),
(49, 164, 7),
(75, 164, 8),
(51, 164, 9),
(76, 164, 10),
(77, 164, 11),
(50, 164, 12),
(92, 164, 13),
(93, 164, 14),
(96, 164, 15),
(118, 164, 16),
(122, 164, 17),
(123, 164, 18),
(130, 164, 19),
(138, 164, 20),
(143, 164, 21),
(151, 164, 22),
(158, 164, 23),
(45, 164, 24),
(132, 159, 1);
DECLARE @PidOrder TABLE
(
pid INT PRIMARY KEY,
基础序号 INT NOT NULL
);
INSERT INTO @PidOrder (pid, 基础序号)
SELECT
m.目标pid,
ISNULL(MAX(r.角色模块顺序), 0) AS 基础序号
FROM @MoveMap m
LEFT JOIN dbo.基础表_角色模块信息 r
ON r.pid = m.目标pid
AND r.角色编号 = 2
AND ISNULL(r.是否启用, 1) = 1
AND NOT EXISTS
(
SELECT 1
FROM @MoveMap mm
WHERE mm.id = r.id
)
GROUP BY m.目标pid;
UPDATE r
SET r.pid = m.目标pid,
r.模块顺序 = r.id,
r.是否启用 = 1,
r.角色模块顺序 = p.基础序号 + m.顺序
FROM dbo.基础表_角色模块信息 r
INNER JOIN @MoveMap m
ON m.id = r.id
INNER JOIN @PidOrder p
ON p.pid = m.目标pid
WHERE r.角色编号 = 2;
SELECT p.title AS 新一级菜单, m.id AS 二级ID, m.目标pid, m.顺序, r.角色模块顺序
FROM @MoveMap m
INNER JOIN dbo.基础表_模块信息 p ON p.id = m.目标pid
INNER JOIN dbo.基础表_角色模块信息 r ON r.id = m.id AND r.角色编号 = 2
ORDER BY m.目标pid, r.角色模块顺序, m.id;
COMMIT TRAN;

View File

@@ -0,0 +1,34 @@
/* 修改人:Ld 修改时间:2026-08-06 16:15:15; 精确修正角色2新一级菜单下误迁的占位授权记录 */
SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE dbo.基础表_角色模块信息
SET pid = 161,
是否启用 = 1,
角色模块顺序 = CASE IDD
WHEN 1184 THEN 1
WHEN 1181 THEN 3
WHEN 1183 THEN 10
WHEN 1185 THEN 11
WHEN 1187 THEN 12
WHEN 1182 THEN 7
WHEN 1186 THEN 13
ELSE 角色模块顺序
END
WHERE 角色编号 = 2
AND IDD IN (1184, 1181, 1183, 1185, 1187, 1182, 1186);
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 0
WHERE 角色编号 = 2
AND IDD = 1177;
SELECT p.title AS 一级菜单, c.id AS 二级ID, c.title AS 二级菜单, r.IDD, r.是否启用, r.角色模块顺序
FROM dbo.基础表_角色模块信息 r
INNER JOIN dbo.基础表_模块信息 c ON c.id = r.id
LEFT JOIN dbo.基础表_模块信息 p ON p.id = r.pid
WHERE r.角色编号 = 2
AND r.IDD IN (1184, 1181, 1183, 1185, 1187, 1182, 1186, 1177)
ORDER BY r.是否启用 DESC, p.id, r.角色模块顺序, c.id;
COMMIT TRAN;

View File

@@ -0,0 +1,199 @@
/* 修改人:Ld 修改时间:2026-08-06 16:15:15; 补回建议清单缺项并重排角色2新一级菜单下二级组件顺序 */
SET XACT_ABORT ON;
BEGIN TRAN;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = 135
AND pid = 163
AND 角色编号 = 2
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
VALUES
(
135,
163,
135,
2,
1,
7
);
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1,
角色模块顺序 = 7
WHERE id = 135
AND pid = 163
AND 角色编号 = 2;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = 45
AND pid = 164
AND 角色编号 = 2
)
BEGIN
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
VALUES
(
45,
164,
45,
2,
1,
24
);
END
ELSE
BEGIN
UPDATE dbo.基础表_角色模块信息
SET 是否启用 = 1,
角色模块顺序 = 24
WHERE id = 45
AND pid = 164
AND 角色编号 = 2;
END;
DECLARE @OrderMap TABLE
(
id INT PRIMARY KEY,
pid INT NOT NULL,
顺序 INT NOT NULL
);
INSERT INTO @OrderMap (id, pid, 顺序)
VALUES
(132, 159, 1),
(67, 160, 1),
(11, 160, 2),
(12, 160, 3),
(13, 160, 4),
(14, 160, 5),
(147, 160, 6),
(68, 160, 7),
(17, 160, 8),
(16, 160, 9),
(18, 160, 10),
(81, 160, 11),
(19, 160, 12),
(15, 160, 13),
(99, 160, 14),
(86, 160, 15),
(87, 160, 16),
(108, 160, 17),
(114, 160, 18),
(120, 160, 19),
(82, 160, 20),
(129, 160, 21),
(155, 160, 22),
(156, 160, 23),
(35, 160, 24),
(36, 160, 25),
(37, 160, 26),
(41, 160, 27),
(124, 160, 28),
(157, 160, 29),
(88, 160, 30),
(94, 161, 1),
(78, 161, 2),
(28, 161, 3),
(98, 161, 4),
(80, 161, 5),
(29, 161, 6),
(79, 161, 7),
(30, 161, 8),
(100, 161, 9),
(84, 161, 10),
(95, 161, 11),
(153, 161, 12),
(154, 161, 13),
(149, 161, 14),
(25, 162, 1),
(69, 162, 2),
(24, 162, 3),
(102, 162, 4),
(21, 162, 5),
(22, 162, 6),
(23, 162, 7),
(117, 162, 8),
(134, 162, 9),
(150, 162, 10),
(125, 162, 11),
(126, 162, 12),
(133, 162, 13),
(104, 163, 1),
(110, 163, 2),
(103, 163, 3),
(121, 163, 4),
(128, 163, 5),
(131, 163, 6),
(135, 163, 7),
(43, 164, 1),
(112, 164, 2),
(44, 164, 3),
(46, 164, 4),
(47, 164, 5),
(48, 164, 6),
(49, 164, 7),
(75, 164, 8),
(51, 164, 9),
(76, 164, 10),
(77, 164, 11),
(50, 164, 12),
(92, 164, 13),
(93, 164, 14),
(96, 164, 15),
(118, 164, 16),
(122, 164, 17),
(123, 164, 18),
(130, 164, 19),
(138, 164, 20),
(143, 164, 21),
(151, 164, 22),
(158, 164, 23),
(45, 164, 24);
UPDATE r
SET r.pid = o.pid,
r.模块顺序 = r.id,
r.是否启用 = 1,
r.角色模块顺序 = o.顺序
FROM dbo.基础表_角色模块信息 r
INNER JOIN @OrderMap o ON o.id = r.id
WHERE r.角色编号 = 2
AND r.pid IN (159, 160, 161, 162, 163, 164);
SELECT p.title AS 一级菜单, COUNT(*) AS 二级数量
FROM dbo.基础表_角色模块信息 r
INNER JOIN dbo.基础表_模块信息 p ON p.id = r.pid
WHERE r.角色编号 = 2
AND ISNULL(r.是否启用, 1) = 1
AND r.pid IN (159, 160, 161, 162, 163, 164)
GROUP BY p.title, r.pid
ORDER BY r.pid;
COMMIT TRAN;

View File

@@ -0,0 +1,287 @@
USE [ERPTOOL_JY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 工序工价编辑保存公式输入 F、G、H,并由触发器统一计算 I、J;修改人:Ld 修改时间:2026-08-08 10:24:44;
ALTER PROCEDURE [dbo].[车间生产管理工艺_工序工价_编辑数据]
@工价流水号 NVARCHAR(50) = N'',
@工艺名称 NVARCHAR(100) = N'',
@工序名称 NVARCHAR(100) = N'',
@零件名称 NVARCHAR(100) = N'',
@图号 NVARCHAR(100) = N'',
@机动时间s NVARCHAR(50) = N'',
@辅助时间s NVARCHAR(50) = N'',
@总时间s NVARCHAR(50) = N'',
@单装数量件 NVARCHAR(50) = N'',
@操作台数 NVARCHAR(50) = N'',
@日产能件 NVARCHAR(50) = N'',
@最终单价元件 NVARCHAR(50) = N'',
@生效日期 NVARCHAR(50) = N'',
@变更次数 NVARCHAR(50) = N'',
@是否启用 NVARCHAR(20) = N'',
@备注 NVARCHAR(500) = N'',
@工序流水号 NVARCHAR(50) = N'',
@修改人 NVARCHAR(50) = N'',
@工作时间时 NVARCHAR(50) = N'',
@宽放时间时 NVARCHAR(50) = N'',
@日工资元 NVARCHAR(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT;
DECLARE @Safe工序流水号 INT;
DECLARE @Safe机动时间s DECIMAL(18, 4);
DECLARE @Safe辅助时间s DECIMAL(18, 4);
DECLARE @Safe总时间s DECIMAL(18, 4);
DECLARE @Safe单装数量件 DECIMAL(18, 4);
DECLARE @Safe操作台数 DECIMAL(18, 4);
DECLARE @Safe日产能件 DECIMAL(18, 4);
DECLARE @Safe最终单价元件 DECIMAL(18, 4);
DECLARE @Safe工作时间时 DECIMAL(18, 4);
DECLARE @Safe宽放时间时 DECIMAL(18, 4);
DECLARE @Safe日工资元 DECIMAL(18, 4);
DECLARE @Safe生效日期 DATE;
DECLARE @Safe变更次数 INT;
DECLARE @Safe是否启用 BIT = CASE WHEN NULLIF(@是否启用, N'') IS NULL THEN 1 WHEN @是否启用 = N'1' THEN 1 ELSE 0 END;
DECLARE @操作人 NVARCHAR(50) = NULLIF(@修改人, N'');
DECLARE @当前时间 DATETIME = GETDATE();
DECLARE @旧数据 NVARCHAR(MAX);
DECLARE @新数据 NVARCHAR(MAX);
DECLARE @Old工序流水号 INT;
SET @Id = CASE WHEN ISNUMERIC(NULLIF(@工价流水号, N'')) = 1 THEN CONVERT(INT, @工价流水号) ELSE NULL END;
SET @Safe工序流水号 = CASE WHEN ISNUMERIC(NULLIF(@工序流水号, N'')) = 1 THEN CONVERT(INT, @工序流水号) ELSE NULL END;
SET @Safe机动时间s = CASE WHEN ISNUMERIC(NULLIF(@机动时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @机动时间s) ELSE 0 END;
SET @Safe辅助时间s = CASE WHEN ISNUMERIC(NULLIF(@辅助时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @辅助时间s) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; E 固定按 C+D 计算,不使用前端传入的总时间
SET @Safe总时间s = @Safe机动时间s + @Safe辅助时间s;
SET @Safe单装数量件 = CASE WHEN ISNUMERIC(NULLIF(@单装数量件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @单装数量件) ELSE 0 END;
SET @Safe操作台数 = CASE WHEN ISNUMERIC(NULLIF(@操作台数, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @操作台数) ELSE 0 END;
SET @Safe日产能件 = CASE WHEN ISNUMERIC(NULLIF(@日产能件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @日产能件) ELSE 0 END;
SET @Safe最终单价元件 = CASE WHEN ISNUMERIC(NULLIF(@最终单价元件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @最终单价元件) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; 兼容旧接口未传 F、G、H 时,按新公式反推输入字段
SET @Safe工作时间时 = CASE
WHEN ISNUMERIC(NULLIF(@工作时间时, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @工作时间时)
WHEN @Safe日产能件 <> 0 AND @Safe总时间s <> 0 AND @Safe单装数量件 <> 0
THEN @Safe日产能件 * @Safe总时间s / (3600 * @Safe单装数量件)
ELSE 0
END;
SET @Safe宽放时间时 = CASE WHEN ISNUMERIC(NULLIF(@宽放时间时, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @宽放时间时) ELSE 0 END;
SET @Safe日工资元 = CASE
WHEN ISNUMERIC(NULLIF(@日工资元, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @日工资元)
WHEN @Safe最终单价元件 <> 0 AND @Safe日产能件 <> 0 AND @Safe操作台数 <> 0
THEN @Safe最终单价元件 * @Safe操作台数 * @Safe日产能件
ELSE 0
END;
SET @Safe生效日期 = CASE WHEN ISDATE(NULLIF(@生效日期, N'')) = 1 THEN CONVERT(DATE, @生效日期) ELSE NULL END;
SET @Safe变更次数 = CASE WHEN ISNUMERIC(NULLIF(@变更次数, N'')) = 1 THEN CONVERT(INT, @变更次数) ELSE 0 END;
IF @Safe工序流水号 IS NULL
BEGIN
SELECT N'0' AS result, N'工序流水号不能为空' AS message;
RETURN;
END;
IF NULLIF(LTRIM(RTRIM(@工艺名称)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@工序名称)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@零件名称)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@图号)), N'') IS NULL
BEGIN
SELECT N'0' AS result, N'工艺名称、工序名称、零件名称和图号不能为空' AS message;
RETURN;
END;
IF @Id IS NULL
BEGIN
SELECT TOP 1 @Id = 工价流水号
FROM [dbo].[车间生产管理工艺_工序工价]
WHERE 工序流水号 = @Safe工序流水号;
END;
IF @Id IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM [dbo].[车间生产管理工艺_工序工价]
WHERE 工价流水号 = @Id
)
BEGIN
SELECT N'0' AS result, N'工序工价记录不存在' AS message;
RETURN;
END;
BEGIN TRY
BEGIN TRAN;
IF @Id IS NOT NULL
BEGIN
SELECT
@Old工序流水号 = 工序流水号,
@旧数据 = [dbo].[车间生产管理工艺_工序工价_历史快照](
[机动时间s],
[辅助时间s],
[总时间s],
[单装数量(件)],
[操作台数],
[日产能(件)],
[最终单价(元/件)],
生效日期,
变更次数
)
FROM [dbo].[车间生产管理工艺_工序工价]
WHERE 工价流水号 = @Id;
UPDATE [dbo].[车间生产管理工艺_工序工价]
SET 工序流水号 = @Safe工序流水号,
工艺名称 = LTRIM(RTRIM(@工艺名称)),
工序名称 = LTRIM(RTRIM(@工序名称)),
零件名称 = LTRIM(RTRIM(@零件名称)),
图号 = LTRIM(RTRIM(@图号)),
[机动时间s] = @Safe机动时间s,
[辅助时间s] = @Safe辅助时间s,
[总时间s] = @Safe总时间s,
[单装数量(件)] = @Safe单装数量件,
[操作台数] = @Safe操作台数,
[日产能(件)] = @Safe日产能件,
[最终单价(元/件)] = @Safe最终单价元件,
[工作时间(时)] = @Safe工作时间时,
[宽放时间(时)] = @Safe宽放时间时,
[日工资(元)] = @Safe日工资元,
生效日期 = @Safe生效日期,
变更次数 = @Safe变更次数,
是否启用 = @Safe是否启用,
备注 = NULLIF(@备注, N''),
计价方式 = N'按件',
单件工价 = @Safe最终单价元件,
修改人 = @操作人,
修改时间 = @当前时间
WHERE 工价流水号 = @Id;
END
ELSE
BEGIN
INSERT INTO [dbo].[车间生产管理工艺_工序工价](
工序流水号, 工艺名称, 工序名称, 零件名称, 图号,
[机动时间s], [辅助时间s], [总时间s], [单装数量(件)], [操作台数],
[日产能(件)], [最终单价(元/件)], [工作时间(时)], [宽放时间(时)], [日工资(元)],
生效日期, 变更次数, 是否启用, 备注,
创建人, 创建时间, 修改人, 修改时间, 计价方式, 单件工价
)
VALUES (
@Safe工序流水号, LTRIM(RTRIM(@工艺名称)), LTRIM(RTRIM(@工序名称)), LTRIM(RTRIM(@零件名称)), LTRIM(RTRIM(@图号)),
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe工作时间时, @Safe宽放时间时, @Safe日工资元,
@Safe生效日期, @Safe变更次数, @Safe是否启用, NULLIF(@备注, N''),
@操作人, @当前时间, @操作人, @当前时间, N'按件', @Safe最终单价元件
);
SET @Id = SCOPE_IDENTITY();
SET @Old工序流水号 = @Safe工序流水号;
SET @旧数据 = N'';
END;
SET @新数据 = [dbo].[车间生产管理工艺_工序工价_历史快照](
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe生效日期, @Safe变更次数
);
INSERT INTO [dbo].[车间生产管理工艺_工序工价历史记录](
工价流水号, 工序流水号, 工艺名称, 工序名称, 零件名称, 图号,
操作类型, 变更前, 变更后, 操作人, 操作时间, 备注
)
VALUES (
@Id, ISNULL(@Safe工序流水号, @Old工序流水号), LTRIM(RTRIM(@工艺名称)), LTRIM(RTRIM(@工序名称)),
LTRIM(RTRIM(@零件名称)), LTRIM(RTRIM(@图号)), CASE WHEN @旧数据 = N'' THEN N'新增' ELSE N'编辑' END,
@旧数据, @新数据, @操作人, @当前时间, NULLIF(@备注, N'')
);
COMMIT TRAN;
SELECT N'1' AS result, @Id AS 工价流水号;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
END CATCH;
END
GO
-- 工序工价字段公式:E=C+D,I=F*3600/E*A,J=H/B/I;修改人:Ld 修改时间:2026-08-08 10:24:44;
IF OBJECT_ID(N'[dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]', N'TR') IS NOT NULL
DROP TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算];
GO
CREATE TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]
ON [dbo].[车间生产管理工艺_工序工价]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF TRIGGER_NESTLEVEL() > 1
RETURN;
;WITH FormulaSource AS (
SELECT
price.工价流水号,
ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) AS 总时间s,
ISNULL(price.[单装数量(件)], 0) AS 单装数量件,
ISNULL(price.[操作台数], 0) AS 操作台数,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; F 优先保存页面输入,旧接口仅传日产能时按 I=F*3600/E*A 反推
CASE
WHEN ISNULL(price.[工作时间(时)], 0) <> 0 THEN ISNULL(price.[工作时间(时)], 0)
WHEN ISNULL(price.[日产能(件)], 0) <> 0
AND ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) <> 0
AND ISNULL(price.[单装数量(件)], 0) <> 0
THEN ISNULL(price.[日产能(件)], 0) * (ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0)) / (3600 * ISNULL(price.[单装数量(件)], 0))
ELSE 0
END AS 工作时间时,
ISNULL(price.[宽放时间(时)], 0) AS 宽放时间时,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; H 优先保存页面输入,旧接口仅传工价定额时按 J=H/B/I 反推
CASE
WHEN ISNULL(price.[日工资(元)], 0) <> 0 THEN ISNULL(price.[日工资(元)], 0)
WHEN ISNULL(price.[最终单价(元/件)], 0) <> 0
AND ISNULL(price.[日产能(件)], 0) <> 0
AND ISNULL(price.[操作台数], 0) <> 0
THEN ISNULL(price.[最终单价(元/件)], 0) * ISNULL(price.[操作台数], 0) * ISNULL(price.[日产能(件)], 0)
ELSE 0
END AS 日工资元
FROM [dbo].[车间生产管理工艺_工序工价] price
INNER JOIN inserted i ON price.工价流水号 = i.工价流水号
),
FormulaResult AS (
SELECT
工价流水号,
总时间s,
工作时间时,
宽放时间时,
日工资元,
单装数量件,
操作台数,
CASE WHEN 总时间s <> 0 THEN 工作时间时 * 3600 / 总时间s * 单装数量件 ELSE 0 END AS 标准产能件天
FROM FormulaSource
)
UPDATE price
SET price.[总时间s] = calc.总时间s,
price.[工作时间(时)] = calc.工作时间时,
price.[宽放时间(时)] = calc.宽放时间时,
price.[日工资(元)] = calc.日工资元,
price.[标准产能(件/天)] = calc.标准产能件天,
price.[工价定额] = CASE WHEN calc.操作台数 <> 0 AND calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.操作台数 / calc.标准产能件天 ELSE 0 END,
price.[日产能(件)] = calc.标准产能件天,
price.[最终单价(元/件)] = CASE WHEN calc.操作台数 <> 0 AND calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.操作台数 / calc.标准产能件天 ELSE 0 END,
price.单件工价 = CASE WHEN calc.操作台数 <> 0 AND calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.操作台数 / calc.标准产能件天 ELSE 0 END
FROM [dbo].[车间生产管理工艺_工序工价] price
INNER JOIN FormulaResult calc ON price.工价流水号 = calc.工价流水号;
END
GO
-- 按新公式回算测试库现有数据;修改人:Ld 修改时间:2026-08-08 10:24:44;
UPDATE [dbo].[车间生产管理工艺_工序工价]
SET [工作时间(时)] = [工作时间(时)];
GO

View File

@@ -0,0 +1,286 @@
USE [ERPTOOL_JY_20250826Back]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 工序工价编辑保存公式输入 F、G、H,并由触发器统一计算 I、J;修改人:Ld 修改时间:2026-08-08 10:24:44;
ALTER PROCEDURE [dbo].[车间生产管理工艺_工序工价_编辑数据]
@工价流水号 NVARCHAR(50) = N'',
@工艺名称 NVARCHAR(100) = N'',
@工序名称 NVARCHAR(100) = N'',
@零件名称 NVARCHAR(100) = N'',
@图号 NVARCHAR(100) = N'',
@机动时间s NVARCHAR(50) = N'',
@辅助时间s NVARCHAR(50) = N'',
@总时间s NVARCHAR(50) = N'',
@单装数量件 NVARCHAR(50) = N'',
@操作台数 NVARCHAR(50) = N'',
@日产能件 NVARCHAR(50) = N'',
@最终单价元件 NVARCHAR(50) = N'',
@生效日期 NVARCHAR(50) = N'',
@变更次数 NVARCHAR(50) = N'',
@是否启用 NVARCHAR(20) = N'',
@备注 NVARCHAR(500) = N'',
@工序流水号 NVARCHAR(50) = N'',
@修改人 NVARCHAR(50) = N'',
@工作时间时 NVARCHAR(50) = N'',
@宽放时间时 NVARCHAR(50) = N'',
@日工资元 NVARCHAR(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT;
DECLARE @Safe工序流水号 INT;
DECLARE @Safe机动时间s DECIMAL(18, 4);
DECLARE @Safe辅助时间s DECIMAL(18, 4);
DECLARE @Safe总时间s DECIMAL(18, 4);
DECLARE @Safe单装数量件 DECIMAL(18, 4);
DECLARE @Safe操作台数 DECIMAL(18, 4);
DECLARE @Safe日产能件 DECIMAL(18, 4);
DECLARE @Safe最终单价元件 DECIMAL(18, 4);
DECLARE @Safe工作时间时 DECIMAL(18, 4);
DECLARE @Safe宽放时间时 DECIMAL(18, 4);
DECLARE @Safe日工资元 DECIMAL(18, 4);
DECLARE @Safe生效日期 DATE;
DECLARE @Safe变更次数 INT;
DECLARE @Safe是否启用 BIT = CASE WHEN NULLIF(@是否启用, N'') IS NULL THEN 1 WHEN @是否启用 = N'1' THEN 1 ELSE 0 END;
DECLARE @操作人 NVARCHAR(50) = NULLIF(@修改人, N'');
DECLARE @当前时间 DATETIME = GETDATE();
DECLARE @旧数据 NVARCHAR(MAX);
DECLARE @新数据 NVARCHAR(MAX);
DECLARE @Old工序流水号 INT;
SET @Id = CASE WHEN ISNUMERIC(NULLIF(@工价流水号, N'')) = 1 THEN CONVERT(INT, @工价流水号) ELSE NULL END;
SET @Safe工序流水号 = CASE WHEN ISNUMERIC(NULLIF(@工序流水号, N'')) = 1 THEN CONVERT(INT, @工序流水号) ELSE NULL END;
SET @Safe机动时间s = CASE WHEN ISNUMERIC(NULLIF(@机动时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @机动时间s) ELSE 0 END;
SET @Safe辅助时间s = CASE WHEN ISNUMERIC(NULLIF(@辅助时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @辅助时间s) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; E 固定按 C+D 计算,不使用前端传入的总时间
SET @Safe总时间s = @Safe机动时间s + @Safe辅助时间s;
SET @Safe单装数量件 = CASE WHEN ISNUMERIC(NULLIF(@单装数量件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @单装数量件) ELSE 0 END;
SET @Safe操作台数 = CASE WHEN ISNUMERIC(NULLIF(@操作台数, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @操作台数) ELSE 0 END;
SET @Safe日产能件 = CASE WHEN ISNUMERIC(NULLIF(@日产能件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @日产能件) ELSE 0 END;
SET @Safe最终单价元件 = CASE WHEN ISNUMERIC(NULLIF(@最终单价元件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @最终单价元件) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; 兼容旧接口未传 F、G、H 时,按新公式反推输入字段
SET @Safe工作时间时 = CASE
WHEN ISNUMERIC(NULLIF(@工作时间时, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @工作时间时)
WHEN @Safe日产能件 <> 0 AND @Safe总时间s <> 0 AND @Safe单装数量件 <> 0
THEN @Safe日产能件 * @Safe总时间s / (3600 * @Safe单装数量件)
ELSE 0
END;
SET @Safe宽放时间时 = CASE WHEN ISNUMERIC(NULLIF(@宽放时间时, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @宽放时间时) ELSE 0 END;
SET @Safe日工资元 = CASE
WHEN ISNUMERIC(NULLIF(@日工资元, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @日工资元)
WHEN @Safe最终单价元件 <> 0 AND @Safe日产能件 <> 0 AND @Safe操作台数 <> 0
THEN @Safe最终单价元件 * @Safe操作台数 * @Safe日产能件
ELSE 0
END;
SET @Safe生效日期 = CASE WHEN ISDATE(NULLIF(@生效日期, N'')) = 1 THEN CONVERT(DATE, @生效日期) ELSE NULL END;
SET @Safe变更次数 = CASE WHEN ISNUMERIC(NULLIF(@变更次数, N'')) = 1 THEN CONVERT(INT, @变更次数) ELSE 0 END;
IF @Safe工序流水号 IS NULL
BEGIN
SELECT N'0' AS result, N'工序流水号不能为空' AS message;
RETURN;
END;
IF NULLIF(LTRIM(RTRIM(@工艺名称)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@工序名称)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@零件名称)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@图号)), N'') IS NULL
BEGIN
SELECT N'0' AS result, N'工艺名称、工序名称、零件名称和图号不能为空' AS message;
RETURN;
END;
IF @Id IS NULL
BEGIN
SELECT TOP 1 @Id = 工价流水号
FROM [dbo].[车间生产管理工艺_工序工价]
WHERE 工序流水号 = @Safe工序流水号;
END;
IF @Id IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM [dbo].[车间生产管理工艺_工序工价]
WHERE 工价流水号 = @Id
)
BEGIN
SELECT N'0' AS result, N'工序工价记录不存在' AS message;
RETURN;
END;
BEGIN TRY
BEGIN TRAN;
IF @Id IS NOT NULL
BEGIN
SELECT
@Old工序流水号 = 工序流水号,
@旧数据 = [dbo].[车间生产管理工艺_工序工价_历史快照](
[机动时间s],
[辅助时间s],
[总时间s],
[单装数量(件)],
[操作台数],
[日产能(件)],
[最终单价(元/件)],
生效日期,
变更次数
)
FROM [dbo].[车间生产管理工艺_工序工价]
WHERE 工价流水号 = @Id;
UPDATE [dbo].[车间生产管理工艺_工序工价]
SET 工序流水号 = @Safe工序流水号,
工艺名称 = LTRIM(RTRIM(@工艺名称)),
工序名称 = LTRIM(RTRIM(@工序名称)),
零件名称 = LTRIM(RTRIM(@零件名称)),
图号 = LTRIM(RTRIM(@图号)),
[机动时间s] = @Safe机动时间s,
[辅助时间s] = @Safe辅助时间s,
[总时间s] = @Safe总时间s,
[单装数量(件)] = @Safe单装数量件,
[操作台数] = @Safe操作台数,
[日产能(件)] = @Safe日产能件,
[最终单价(元/件)] = @Safe最终单价元件,
[工作时间(时)] = @Safe工作时间时,
[宽放时间(时)] = @Safe宽放时间时,
[日工资(元)] = @Safe日工资元,
生效日期 = @Safe生效日期,
变更次数 = @Safe变更次数,
是否启用 = @Safe是否启用,
备注 = NULLIF(@备注, N''),
计价方式 = N'按件',
单件工价 = @Safe最终单价元件,
修改人 = @操作人,
修改时间 = @当前时间
WHERE 工价流水号 = @Id;
END
ELSE
BEGIN
INSERT INTO [dbo].[车间生产管理工艺_工序工价](
工序流水号, 工艺名称, 工序名称, 零件名称, 图号,
[机动时间s], [辅助时间s], [总时间s], [单装数量(件)], [操作台数],
[日产能(件)], [最终单价(元/件)], [工作时间(时)], [宽放时间(时)], [日工资(元)],
生效日期, 变更次数, 是否启用, 备注,
创建人, 创建时间, 修改人, 修改时间, 计价方式, 单件工价
)
VALUES (
@Safe工序流水号, LTRIM(RTRIM(@工艺名称)), LTRIM(RTRIM(@工序名称)), LTRIM(RTRIM(@零件名称)), LTRIM(RTRIM(@图号)),
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe工作时间时, @Safe宽放时间时, @Safe日工资元,
@Safe生效日期, @Safe变更次数, @Safe是否启用, NULLIF(@备注, N''),
@操作人, @当前时间, @操作人, @当前时间, N'按件', @Safe最终单价元件
);
SET @Id = SCOPE_IDENTITY();
SET @Old工序流水号 = @Safe工序流水号;
SET @旧数据 = N'';
END;
SET @新数据 = [dbo].[车间生产管理工艺_工序工价_历史快照](
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe生效日期, @Safe变更次数
);
INSERT INTO [dbo].[车间生产管理工艺_工序工价历史记录](
工价流水号, 工序流水号, 工艺名称, 工序名称, 零件名称, 图号,
操作类型, 变更前, 变更后, 操作人, 操作时间, 备注
)
VALUES (
@Id, ISNULL(@Safe工序流水号, @Old工序流水号), LTRIM(RTRIM(@工艺名称)), LTRIM(RTRIM(@工序名称)),
LTRIM(RTRIM(@零件名称)), LTRIM(RTRIM(@图号)), CASE WHEN @旧数据 = N'' THEN N'新增' ELSE N'编辑' END,
@旧数据, @新数据, @操作人, @当前时间, NULLIF(@备注, N'')
);
COMMIT TRAN;
SELECT N'1' AS result, @Id AS 工价流水号;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
END CATCH;
END
GO
-- 工序工价字段公式:E=C+D,I=F*3600/E*A,J=H/B/I;修改人:Ld 修改时间:2026-08-08 10:24:44;
IF OBJECT_ID(N'[dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]', N'TR') IS NOT NULL
DROP TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算];
GO
CREATE TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]
ON [dbo].[车间生产管理工艺_工序工价]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF TRIGGER_NESTLEVEL() > 1
RETURN;
;WITH FormulaSource AS (
SELECT
price.工价流水号,
ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) AS 总时间s,
ISNULL(price.[单装数量(件)], 0) AS 单装数量件,
ISNULL(price.[操作台数], 0) AS 操作台数,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; F 优先保存页面输入,旧接口仅传日产能时按 I=F*3600/E*A 反推
CASE
WHEN ISNULL(price.[工作时间(时)], 0) <> 0 THEN ISNULL(price.[工作时间(时)], 0)
WHEN ISNULL(price.[日产能(件)], 0) <> 0
AND ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) <> 0
AND ISNULL(price.[单装数量(件)], 0) <> 0
THEN ISNULL(price.[日产能(件)], 0) * (ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0)) / (3600 * ISNULL(price.[单装数量(件)], 0))
ELSE 0
END AS 工作时间时,
ISNULL(price.[宽放时间(时)], 0) AS 宽放时间时,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; H 优先保存页面输入,旧接口仅传工价定额时按 J=H/B/I 反推
CASE
WHEN ISNULL(price.[日工资(元)], 0) <> 0 THEN ISNULL(price.[日工资(元)], 0)
WHEN ISNULL(price.[最终单价(元/件)], 0) <> 0
AND ISNULL(price.[日产能(件)], 0) <> 0
AND ISNULL(price.[操作台数], 0) <> 0
THEN ISNULL(price.[最终单价(元/件)], 0) * ISNULL(price.[操作台数], 0) * ISNULL(price.[日产能(件)], 0)
ELSE 0
END AS 日工资元
FROM [dbo].[车间生产管理工艺_工序工价] price
INNER JOIN inserted i ON price.工价流水号 = i.工价流水号
),
FormulaResult AS (
SELECT
工价流水号,
总时间s,
工作时间时,
宽放时间时,
日工资元,
单装数量件,
操作台数,
CASE WHEN 总时间s <> 0 THEN 工作时间时 * 3600 / 总时间s * 单装数量件 ELSE 0 END AS 标准产能件天
FROM FormulaSource
)
UPDATE price
SET price.[总时间s] = calc.总时间s,
price.[工作时间(时)] = calc.工作时间时,
price.[宽放时间(时)] = calc.宽放时间时,
price.[日工资(元)] = calc.日工资元,
price.[标准产能(件/天)] = calc.标准产能件天,
price.[工价定额] = CASE WHEN calc.操作台数 <> 0 AND calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.操作台数 / calc.标准产能件天 ELSE 0 END,
price.[日产能(件)] = calc.标准产能件天,
price.[最终单价(元/件)] = CASE WHEN calc.操作台数 <> 0 AND calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.操作台数 / calc.标准产能件天 ELSE 0 END,
price.单件工价 = CASE WHEN calc.操作台数 <> 0 AND calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.操作台数 / calc.标准产能件天 ELSE 0 END
FROM [dbo].[车间生产管理工艺_工序工价] price
INNER JOIN FormulaResult calc ON price.工价流水号 = calc.工价流水号;
END
GO
-- 按新公式回算测试库现有数据;修改人:Ld 修改时间:2026-08-08 10:24:44;
UPDATE [dbo].[车间生产管理工艺_工序工价]
SET [工作时间(时)] = [工作时间(时)];
GO

View File

@@ -0,0 +1,56 @@
/* 修改人:Ld 修改时间:2026-08-06 16:23:41; 将工艺查询、工艺管理迁到APS,并将通用件装配、专机装配下二级菜单迁到MES */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @MoveMap TABLE
(
id INT PRIMARY KEY,
目标pid INT NOT NULL,
顺序 INT NOT NULL
);
INSERT INTO @MoveMap (id, 目标pid, 顺序)
VALUES
(84, 159, 2),
(95, 159, 3),
(94, 161, 1),
(78, 161, 2),
(28, 161, 3),
(98, 161, 4),
(80, 161, 5),
(29, 161, 6),
(79, 161, 7),
(30, 161, 8),
(100, 161, 9),
(153, 161, 10),
(154, 161, 11),
(149, 161, 12),
(64, 161, 13),
(65, 161, 14),
(66, 161, 15),
(70, 161, 16),
(89, 161, 17),
(90, 161, 18),
(91, 161, 19),
(101, 161, 20),
(72, 161, 21),
(73, 161, 22),
(74, 161, 23);
UPDATE r
SET r.pid = m.目标pid,
r.模块顺序 = r.id,
r.是否启用 = 1,
r.角色模块顺序 = m.顺序
FROM dbo.基础表_角色模块信息 r
INNER JOIN @MoveMap m ON m.id = r.id
WHERE r.角色编号 = 2;
SELECT p.title AS 一级菜单, c.id AS 二级ID, c.title AS 二级菜单, r.角色模块顺序
FROM @MoveMap m
INNER JOIN dbo.基础表_角色模块信息 r ON r.id = m.id AND r.角色编号 = 2
INNER JOIN dbo.基础表_模块信息 c ON c.id = r.id
INNER JOIN dbo.基础表_模块信息 p ON p.id = r.pid
ORDER BY p.id, r.角色模块顺序, c.id;
COMMIT TRAN;

View File

@@ -0,0 +1,83 @@
ALTER PROCEDURE [dbo].[车间生产管理工艺_零件工序_派工]
@工序流水号 int = null,
@数量 int = null,
@人员编号 int = null,
@设备流水号 int = null,
@调拨员编号 int = null,
@计划完成日期 nvarchar(50)=null,
@计划开始日期 nvarchar(50)=null
AS
declare @工序顺序 int
declare @工艺计划流水号 int
declare @工艺任务流水号 int
declare @分配日期 nvarchar(50)
declare @剩余料数 int
declare @已领数量 int=0
-- 修改人:Ld 修改时间:2026-08-05 09:35:00; 后端兜底校验派工数量,避免空值或非正数落入任务分配表。
if @数量 is null or @数量 <= 0
begin
RAISERROR(N'派工数量不能为空且必须大于0', 16, 1)
return
end
update 车间生产管理工艺_零件工序 set 已分配数 = ISNULL(已分配数,0) + @数量 where 工序流水号=@工序流水号
select @工艺计划流水号=工艺计划流水号,@工序顺序=工序顺序,@剩余料数=ISNULL(剩余料数,0) from 车间生产管理工艺_零件工序 where 工序流水号=@工序流水号
select @分配日期 = 分配日期 from 车间生产管理工艺_零件工艺计划 where 工艺计划流水号=@工艺计划流水号
if @分配日期 is null
begin
update 车间生产管理工艺_零件工艺计划 set 分配日期 = getdate() where 工艺计划流水号=@工艺计划流水号
end
if @人员编号 = 16
begin
update 车间生产管理工艺_零件工序 set 工序间是否外协 = 1,外协数量=@数量 where 工序流水号=@工序流水号
end
else
begin
update 车间生产管理工艺_零件工序 set 工序间是否外协 = 0,外协数量=0 where 工序流水号=@工序流水号
end
if @工序顺序 = 1
begin
if @数量 > @剩余料数 and @剩余料数 > 0
begin
set @已领数量 = @剩余料数
update 车间生产管理工艺_零件工序 set 剩余料数=0 where 工序流水号=@工序流水号
end
else if @数量 <= @剩余料数 and @剩余料数 > 0
begin
set @已领数量 = @数量
update 车间生产管理工艺_零件工序 set 剩余料数=isnull(剩余料数,0)-@数量 where 工序流水号=@工序流水号
end
end
if (select COUNT(*) from 车间生产管理工艺_零件工序_任务分配 where 工序流水号=@工序流水号 and 人员编号=@人员编号 and 设备流水号=@设备流水号) = 1
begin
-- 修改人:Ld 修改时间:2026-08-05 09:35:00; 累加时对历史空值做默认值处理,避免 NULL + 新数量 仍然为 NULL。
update 车间生产管理工艺_零件工序_任务分配 set 数量=ISNULL(数量,0)+@数量,分配时间=GETDATE(),已领数量=isnull(已领数量,0)+@已领数量,调拨员编号=@调拨员编号,计划完成日期=@计划完成日期,计划开始日期=@计划开始日期 where 工序流水号=@工序流水号 and 人员编号=@人员编号 and 设备流水号=@设备流水号
end
else
begin
insert into 车间生产管理工艺_零件工序_任务分配(工序流水号,数量,人员编号,设备流水号,分配时间,已领数量,调拨员编号,计划完成日期,计划开始日期)values(@工序流水号,@数量,@人员编号,@设备流水号,GETDATE(),@已领数量,@调拨员编号,@计划完成日期,@计划开始日期)
if @人员编号 <> 16
begin
select @工艺任务流水号 = IDENT_CURRENT('车间生产管理工艺_零件工序_任务分配')
exec 车间生产管理工艺_零件工序_派工_生产计划_增加 @工艺任务流水号,@数量,@计划完成日期,@计划开始日期
end
end

View File

@@ -0,0 +1,36 @@
/* 修改人:Ld 修改时间:2026-08-06 16:15:15; 按确认归属补迁订单投产、物料采购进度和新产品合同类二级组件 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @MoveMap TABLE
(
id INT PRIMARY KEY,
目标pid INT NOT NULL,
顺序 INT NOT NULL
);
INSERT INTO @MoveMap (id, 目标pid, 顺序)
VALUES
(88, 160, 31),
(149, 161, 15),
(125, 162, 12),
(126, 162, 13),
(133, 162, 14);
UPDATE r
SET r.pid = m.目标pid,
r.模块顺序 = r.id,
r.是否启用 = 1,
r.角色模块顺序 = m.顺序
FROM dbo.基础表_角色模块信息 r
INNER JOIN @MoveMap m ON m.id = r.id
WHERE r.角色编号 = 2;
SELECT p.title AS 新一级菜单, c.id AS 二级ID, c.title AS 二级菜单, r.角色模块顺序
FROM @MoveMap m
INNER JOIN dbo.基础表_角色模块信息 r ON r.id = m.id AND r.角色编号 = 2
INNER JOIN dbo.基础表_模块信息 c ON c.id = r.id
INNER JOIN dbo.基础表_模块信息 p ON p.id = r.pid
ORDER BY p.id, r.角色模块顺序, c.id;
COMMIT TRAN;