USE [ERPTOOL_JY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- 补齐正式库截图中的工价计算字段;修改人:Ld 修改时间:2026-08-04 09:49:39; 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) NOT 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) NOT 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) NOT 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) NOT 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) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_工价定额] DEFAULT ((0)); GO -- 保护正式库旧数据:按已有日产能和最终单价反推新公式输入字段;修改人:Ld 修改时间:2026-08-04 09:49:39; IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL BEGIN UPDATE price SET [总时间s] = ISNULL([机动时间s], 0) + ISNULL([辅助时间s], 0), [标准产能(件/天)] = ISNULL([日产能(件)], 0), [工价定额] = ISNULL([最终单价(元/件)], 0), [工作时间(时)] = CASE WHEN ISNULL([工作时间(时)], 0) <> 0 THEN [工作时间(时)] WHEN ISNULL([日产能(件)], 0) <> 0 AND ISNULL([机动时间s], 0) + ISNULL([辅助时间s], 0) <> 0 THEN ISNULL([日产能(件)], 0) * (ISNULL([机动时间s], 0) + ISNULL([辅助时间s], 0)) / 3600 ELSE 0 END, [日工资(元)] = CASE WHEN ISNULL([日工资(元)], 0) <> 0 THEN [日工资(元)] WHEN ISNULL([最终单价(元/件)], 0) <> 0 AND ISNULL([日产能(件)], 0) <> 0 THEN ISNULL([最终单价(元/件)], 0) * ISNULL([日产能(件)], 0) ELSE 0 END FROM [dbo].[车间生产管理工艺_工序工价] price; END GO -- 用完整字段公式触发器替代之前仅计算总时间的触发器;修改人:Ld 修改时间:2026-08-04 09:49:39; IF OBJECT_ID(N'[dbo].[TR_车间生产管理工艺_工序工价_总时间自动计算]', N'TR') IS NOT NULL DROP TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_总时间自动计算]; GO 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) AS 机动时间s, ISNULL(price.[辅助时间s], 0) AS 辅助时间s, ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) AS 总时间s, -- 修改人:Ld 修改时间:2026-08-04 09:49:39; 前端编辑过程仍通过旧字段提交,优先按日产能反推工作时间。 CASE WHEN ISNULL(price.[日产能(件)], 0) <> 0 AND ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) <> 0 THEN ISNULL(price.[日产能(件)], 0) * (ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0)) / 3600 ELSE 0 END AS 工作时间时, ISNULL(price.[宽放时间(时)], 0) AS 宽放时间时, -- 修改人:Ld 修改时间:2026-08-04 09:49:39; 前端编辑过程仍通过旧字段提交,优先按工价定额和标准产能反推日工资。 CASE WHEN ISNULL(price.[最终单价(元/件)], 0) <> 0 AND ISNULL(price.[日产能(件)], 0) <> 0 THEN 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 THEN calc.日工资元 / calc.标准产能件天 ELSE 0 END, -- 修改人:Ld 修改时间:2026-08-04 09:49:39; 旧字段继续同步,兼容现有页面和历史接口。 price.[日产能(件)] = calc.标准产能件天, price.[最终单价(元/件)] = CASE WHEN calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.标准产能件天 ELSE 0 END, price.单件工价 = CASE WHEN calc.标准产能件天 <> 0 THEN calc.日工资元 / calc.标准产能件天 ELSE 0 END FROM [dbo].[车间生产管理工艺_工序工价] price INNER JOIN FormulaResult calc ON price.工价流水号 = calc.工价流水号; END GO -- 触发一次计算,确保正式库现有数据按公式同步;修改人:Ld 修改时间:2026-08-04 09:49:39; IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL BEGIN UPDATE [dbo].[车间生产管理工艺_工序工价] SET [机动时间s] = [机动时间s]; END GO -- 工序工价分页查询增加截图字段,并保留旧字段兼容前端;修改人:Ld 修改时间:2026-08-04 09:49:39; ALTER PROCEDURE [dbo].[车间生产管理工艺_工序工价_查询数据] @订单流水号_check INT = 0, @订单流水号 INT = NULL, @组件流水号_check INT = 0, @组件流水号 INT = NULL, @工艺计划流水号_check INT = 0, @工艺计划流水号 INT = NULL, @工艺名称_check INT = 0, @工艺名称 NVARCHAR(100) = N'', @工序名称_check INT = 0, @工序名称 NVARCHAR(100) = N'', @零件名称_check INT = 0, @零件名称 NVARCHAR(100) = N'', @图号_check INT = 0, @图号 NVARCHAR(100) = N'', @是否启用_check INT = 0, @是否启用 NVARCHAR(20) = N'', @PageCurrent INT = 1, @PageSize INT = 1000 AS BEGIN SET NOCOUNT ON; IF @PageCurrent IS NULL OR @PageCurrent < 1 SET @PageCurrent = 1; IF @PageSize IS NULL OR @PageSize < 1 SET @PageSize = 1000; ;WITH PlanData AS ( -- 与制定工艺组件订单、产品、零件选择保持同一工艺计划来源口径;修改人:Ld 修改时间:2026-08-04 09:49:39; SELECT gp.* FROM [dbo].[车间生产管理_零件工艺计划_视图] gp WHERE gp.考核状态 >= 1 AND (@订单流水号_check = 0 OR gp.订单流水号 = @订单流水号) AND (@组件流水号_check = 0 OR gp.组件流水号 = @组件流水号) AND (@工艺计划流水号_check = 0 OR gp.工艺计划流水号 = @工艺计划流水号) AND (@零件名称_check = 0 OR gp.零件名称 + gp.零件图号 LIKE N'%' + @零件名称 + N'%') AND (@图号_check = 0 OR gp.零件图号 LIKE N'%' + @图号 + N'%') ), ProcessData AS ( SELECT ROW_NUMBER() OVER ( ORDER BY gp.工艺更新时间 DESC, gp.工艺计划流水号 DESC, gx.工序顺序 ASC, gx.工序流水号 ASC ) AS RowNum, price.工价流水号, gx.工序流水号, gx.工艺计划流水号, gp.订单号, gp.产品名称, base.工艺名称 AS 工艺名称, base.工艺名称 AS 工序名称, gp.零件名称, gp.零件图号 AS 图号, gx.工序顺序, gx.定额工时, gx.准结工时, ISNULL(price.[单装数量(件)], 0) AS [单装数量(件)], ISNULL(price.[操作台数], 0) AS [操作台数], ISNULL(price.[机动时间s], 0) AS [机动时间s], ISNULL(price.[辅助时间s], 0) AS [辅助时间s], ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) AS [总时间s], ISNULL(price.[工作时间(时)], 0) AS [工作时间(时)], ISNULL(price.[宽放时间(时)], 0) AS [宽放时间(时)], ISNULL(price.[日工资(元)], 0) AS [日工资(元)], ISNULL(price.[标准产能(件/天)], 0) AS [标准产能(件/天)], ISNULL(price.[工价定额], 0) AS 工价定额, ISNULL(price.[标准产能(件/天)], ISNULL(price.[日产能(件)], 0)) AS [日产能(件)], ISNULL(price.[工价定额], ISNULL(price.[最终单价(元/件)], 0)) AS [最终单价(元/件)], CONVERT(VARCHAR(10), price.生效日期, 23) AS 生效日期, ISNULL(price.变更次数, 0) AS 变更次数, ISNULL(price.是否启用, 1) AS 是否启用, price.备注, price.创建人, CONVERT(VARCHAR(19), price.创建时间, 120) AS 创建时间, price.修改人, CONVERT(VARCHAR(19), price.修改时间, 120) AS 修改时间 FROM PlanData gp INNER JOIN [dbo].[车间生产管理工艺_零件工序] gx ON gp.工艺计划流水号 = gx.工艺计划流水号 LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] base ON gx.工艺编号 = base.工艺编号 LEFT JOIN [dbo].[车间生产管理工艺_工序工价] price ON gx.工序流水号 = price.工序流水号 WHERE NULLIF(LTRIM(RTRIM(base.工艺名称)), N'') IS NOT NULL AND (@工艺名称_check = 0 OR base.工艺名称 LIKE N'%' + @工艺名称 + N'%') AND (@工序名称_check = 0 OR base.工艺名称 LIKE N'%' + @工序名称 + N'%') AND (@是否启用_check = 0 OR CAST(ISNULL(price.是否启用, 1) AS NVARCHAR(20)) = @是否启用) ) SELECT 工价流水号, 工序流水号, 工艺计划流水号, 订单号, 产品名称, 工艺名称, 工序名称, 零件名称, 图号, 工序顺序, 定额工时, 准结工时, [单装数量(件)], 操作台数, [机动时间s], [辅助时间s], [总时间s], [工作时间(时)], [宽放时间(时)], [日工资(元)], [标准产能(件/天)], 工价定额, [日产能(件)], [最终单价(元/件)], 生效日期, 变更次数, 是否启用, 备注, 创建人, 创建时间, 修改人, 修改时间 FROM ProcessData WHERE RowNum BETWEEN ((@PageCurrent - 1) * @PageSize + 1) AND (@PageCurrent * @PageSize) ORDER BY RowNum; SELECT COUNT(1) AS total FROM [dbo].[车间生产管理_零件工艺计划_视图] gp INNER JOIN [dbo].[车间生产管理工艺_零件工序] gx ON gp.工艺计划流水号 = gx.工艺计划流水号 LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] base ON gx.工艺编号 = base.工艺编号 LEFT JOIN [dbo].[车间生产管理工艺_工序工价] price ON gx.工序流水号 = price.工序流水号 WHERE gp.考核状态 >= 1 AND (@订单流水号_check = 0 OR gp.订单流水号 = @订单流水号) AND (@组件流水号_check = 0 OR gp.组件流水号 = @组件流水号) AND (@工艺计划流水号_check = 0 OR gp.工艺计划流水号 = @工艺计划流水号) AND NULLIF(LTRIM(RTRIM(base.工艺名称)), N'') IS NOT NULL AND (@工艺名称_check = 0 OR base.工艺名称 LIKE N'%' + @工艺名称 + N'%') AND (@工序名称_check = 0 OR base.工艺名称 LIKE N'%' + @工序名称 + N'%') AND (@零件名称_check = 0 OR gp.零件名称 + gp.零件图号 LIKE N'%' + @零件名称 + N'%') AND (@图号_check = 0 OR gp.零件图号 LIKE N'%' + @图号 + N'%') AND (@是否启用_check = 0 OR CAST(ISNULL(price.是否启用, 1) AS NVARCHAR(20)) = @是否启用); END GO -- 工序工价导出增加截图字段;修改人:Ld 修改时间:2026-08-04 09:49:39; ALTER PROCEDURE [dbo].[车间生产管理工艺_工序工价_导出表格_查询] @订单流水号_check INT = 0, @订单流水号 INT = NULL, @组件流水号_check INT = 0, @组件流水号 INT = NULL, @工艺计划流水号_check INT = 0, @工艺计划流水号 INT = NULL, @工艺名称_check INT = 0, @工艺名称 NVARCHAR(100) = N'', @工序名称_check INT = 0, @工序名称 NVARCHAR(100) = N'', @零件名称_check INT = 0, @零件名称 NVARCHAR(100) = N'', @图号_check INT = 0, @图号 NVARCHAR(100) = N'', @是否启用_check INT = 0, @是否启用 NVARCHAR(20) = N'' AS BEGIN SET NOCOUNT ON; SELECT N'工序工价_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype; SELECT 256 * 20 AS 工价名称, 256 * 28 AS 工序内容, 256 * 16 AS [单装数量(件)], 256 * 18 AS [操作台数(台/人)], 256 * 16 AS [机动时间(秒)], 256 * 16 AS [辅助时间(秒)], 256 * 14 AS [总时间(秒)], 256 * 16 AS [工作时间(时)], 256 * 16 AS [宽放时间(时)], 256 * 14 AS [日工资(元)], 256 * 20 AS [标准产能(件/天)], 256 * 14 AS 工价定额; SELECT 0 AS 工价名称, 0 AS 工序内容, 1 AS [单装数量(件)], 1 AS [操作台数(台/人)], 1 AS [机动时间(秒)], 1 AS [辅助时间(秒)], 1 AS [总时间(秒)], 1 AS [工作时间(时)], 1 AS [宽放时间(时)], 1 AS [日工资(元)], 1 AS [标准产能(件/天)], 1 AS 工价定额; ;WITH PlanData AS ( -- 页面查询同源工艺计划数据源,确保导出与列表一致;修改人:Ld 修改时间:2026-08-04 09:49:39; SELECT gp.* FROM [dbo].[车间生产管理_零件工艺计划_视图] gp WHERE gp.考核状态 >= 1 AND (@订单流水号_check = 0 OR gp.订单流水号 = @订单流水号) AND (@组件流水号_check = 0 OR gp.组件流水号 = @组件流水号) AND (@工艺计划流水号_check = 0 OR gp.工艺计划流水号 = @工艺计划流水号) AND (@零件名称_check = 0 OR gp.零件名称 + gp.零件图号 LIKE N'%' + @零件名称 + N'%') AND (@图号_check = 0 OR gp.零件图号 LIKE N'%' + @图号 + N'%') ) SELECT base.工艺名称 AS 工价名称, gp.零件名称 + N' ' + gp.零件图号 AS 工序内容, ISNULL(price.[单装数量(件)], 0) AS [单装数量(件)], ISNULL(price.[操作台数], 0) AS [操作台数(台/人)], ISNULL(price.[机动时间s], 0) AS [机动时间(秒)], ISNULL(price.[辅助时间s], 0) AS [辅助时间(秒)], ISNULL(price.[机动时间s], 0) + ISNULL(price.[辅助时间s], 0) AS [总时间(秒)], ISNULL(price.[工作时间(时)], 0) AS [工作时间(时)], ISNULL(price.[宽放时间(时)], 0) AS [宽放时间(时)], ISNULL(price.[日工资(元)], 0) AS [日工资(元)], ISNULL(price.[标准产能(件/天)], 0) AS [标准产能(件/天)], ISNULL(price.[工价定额], 0) AS 工价定额 FROM PlanData gp INNER JOIN [dbo].[车间生产管理工艺_零件工序] gx ON gp.工艺计划流水号 = gx.工艺计划流水号 LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] base ON gx.工艺编号 = base.工艺编号 LEFT JOIN [dbo].[车间生产管理工艺_工序工价] price ON gx.工序流水号 = price.工序流水号 WHERE NULLIF(LTRIM(RTRIM(base.工艺名称)), N'') IS NOT NULL AND (@工艺名称_check = 0 OR base.工艺名称 LIKE N'%' + @工艺名称 + N'%') AND (@工序名称_check = 0 OR base.工艺名称 LIKE N'%' + @工序名称 + N'%') AND (@是否启用_check = 0 OR CAST(ISNULL(price.是否启用, 1) AS NVARCHAR(20)) = @是否启用) ORDER BY gp.工艺更新时间 DESC, gp.工艺计划流水号 DESC, gx.工序顺序 ASC, gx.工序流水号 ASC; END GO