feat: update MES pages and tracking docs

This commit is contained in:
2026-06-29 18:27:00 +08:00
parent ebee02d103
commit e0e1b5d2bb
59 changed files with 8405 additions and 1398 deletions

View File

@@ -0,0 +1,169 @@
USE [YL_MESDB]
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'名称') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [名称] nvarchar(100) NULL
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_增加]
@名称 nvarchar(50) = NULL,
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 nvarchar(50) = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 nvarchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@公司编码, N'') = N'' BEGIN SELECT '0' AS result, N'公司编码不能为空' AS message; RETURN; END
INSERT INTO [dbo].[基础数据_设备工位点检表] ([名称],[公司编码],[设备名称],[设备型号],[设备类型],[设备信息],[使用部门],[入账日期],[单位],[数量],[状态],[维修记录],[维保记录],[工位绑定],[主要设备],[设备标准开机工时],[特种设备],[证书有效期至])
VALUES (@名称,@公司编码,@设备名称,@设备型号,@设备类型,@设备信息,@使用部门,TRY_CONVERT(date, NULLIF(@入账日期, N'')),@单位,@数量,@状态,@维修记录,@维保记录,@工位绑定,@主要设备,@设备标准开机工时,@特种设备,TRY_CONVERT(date, NULLIF(@证书有效期至, N'')));
SELECT '1' AS result;
END
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_编辑]
@设备流水号 int = NULL,
@名称 nvarchar(50) = NULL,
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 nvarchar(50) = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 nvarchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[基础数据_设备工位点检表]
SET [名称]=@名称,[设备名称]=@设备名称,[设备型号]=@设备型号,[设备类型]=@设备类型,[设备信息]=@设备信息,[使用部门]=@使用部门,[入账日期]=TRY_CONVERT(date, NULLIF(@入账日期, N'')),[单位]=@单位,[数量]=@数量,[状态]=@状态,[维修记录]=@维修记录,[维保记录]=@维保记录,[工位绑定]=@工位绑定,[主要设备]=@主要设备,[设备标准开机工时]=@设备标准开机工时,[特种设备]=@特种设备,[证书有效期至]=TRY_CONVERT(date, NULLIF(@证书有效期至, N''))
WHERE [设备流水号]=@设备流水号;
SELECT '1' AS result;
END
GO
DECLARE @导入设备 TABLE ([名称] nvarchar(100),[公司编码] nvarchar(100),[生产用名] nvarchar(50),[型号规格] nvarchar(50),[设备信息] nvarchar(500),[使用部门] nvarchar(100),[入账日期] date,[单位] nvarchar(50),[数量] decimal(18,4),[状态] nvarchar(50));
INSERT INTO @导入设备 VALUES (N'气泵(空压机)',N'REALLY-11',N'气泵',N'1.4MPa/YT132S-4',N'最大压力0.8Mpa',N'一楼机加车间','2006-12-31',N'台',1,N'停用');
INSERT INTO @导入设备 VALUES (N'台钻',N'REALLY-21',N'台钻',N'JW7114',N'φ2-12mm/0.1mm',N'二楼机加车间','2007-01-01',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控加工中心',N'REALLY-6',N'加1',N'VDL-600A',N'X600/Y420/Z520/',N'一楼机加车间','2008-12-23',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'普通车床',N'REALLY-1',N'普1',N'CD6240A',N'回转直径400/转速1400/0.04mm',N'一楼机加车间','2010-12-31',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'砂轮机',N'REALLY-19',N'砂轮机',N'MQ3225',N'转速3000/砂轮直径250',N'一楼机加车间','2010-12-31',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-3',N'数2',N'CAK5085di',N'床鞍直径280',N'一楼机加车间','2011-09-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'万能外圆磨床',N'REALLY-8',N'磨2',N'MG1420E',N'0.005mm',N'一楼机加车间','2012-03-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-2',N'数1',N'CAK3665DI',N'0.01mm',N'一楼机加车间','2013-12-31',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数显鼓风干燥箱/烤箱',N'REALLY-14',N'烤箱',N'101A-0',NULL,N'二楼装配区','2014-06-05',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-4',N'数3',N'Viva T2c/500',N'0.01mm',N'一楼机加车间','2015-03-17',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'超声波清洗机',N'REALLY-16',N'清洗机',N'FRQ-20100ST',NULL,N'二楼清洗室','2015-04-12',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'抛光机',N'REALLY-44',N'抛光机',N'ZXH-Z615-1/ZXH-756',NULL,N'一楼机加车间','2015-05-17',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'激光打标机',N'REALLY-13',N'打标机',N'骄子LMK-F20',NULL,N'二楼装配区','2016-02-01',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-5',N'数4',N'Viva T2C/500',N'0.01mm',N'一楼机加车间','2018-05-11',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'锯床',N'REALLY-10',N'锯1',N'GZ4232',N'0.1mm',N'一楼机加车间','2018-08-26',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'内燃叉车',N'REALLY-33',N'油叉',N'CPCD30/3.0T',N'<3T',N'一楼机加车间','2020-04-15',N'辆',1,NULL);
INSERT INTO @导入设备 VALUES (N'螺杆空压机',N'REALLY-23',N'15KW空压机',N'LU15 Pmi',N'最大压力0.8Mpa',N'一楼空压机室','2020-06-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'冷干机',N'已报废',NULL,N'PRIMAK D21',NULL,N'一楼空压机室','2020-06-29',N'台',1,N'报废');
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-25',N'数5',N'T55M含自动排屑器',N'0.01mm',N'一楼机加车间','2020-11-05',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'立卧两用数控台',N'加1#用',N'加1四轴',N'SKT13170F',N'0.05mm',N'加1设备内','2020-12-10',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'立式加工中心',N'REALLY-26',N'加3',N'VDF-850A',N'0.02mm',N'一楼机加车间','2020-12-10',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'立卧两用数控台',N'加3#用',NULL,N'SKT13200F',N'0.05mm',N'一楼机加车间','2020-12-10',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'带锯床',N'REALLY-31',N'锯2',N'B33',N'0.1mm',N'一楼机加车间','2021-02-01',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'电动攻丝机',N'RELLY-29',N'攻丝机2#',N'SW-U16-L',N'夹头范围M3-M16',N'一楼机加车间','2021-02-28',N'台',1,N'停用');
INSERT INTO @导入设备 VALUES (N'自动数控穿孔机',N'REALLY-28',N'电火花',N'NC4030高精度线规结构',N'穿孔直径0.8-3.0mm/0.05mm',N'一楼机加车间','2021-03-03',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'立式加工中心',N'REALLY-27',N'加4',N'VDF-850A',N'0.02mm',N'一楼机加车间','2021-03-11',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'摇臂钻床',N'REALLY-30',N'钻床',N'Z3050/16',N'夹头范围3-50',N'一楼机加车间','2021-03-17',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'航车',N'起重机/吊车',N'5T吊',N'YLHC-27',N'<5T',N'一楼机加车间','2021-04-05',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'电动叉车',N'REALLY-34',N'1.5T电叉',N'CDD-1525/CPCZ1.5T',N'<1.5T',N'二楼机加车间','2021-04-05',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'普通车床',N'REALLY-32',N'普2',N'CDE6150A',N'0.03mm',N'一楼机加车间','2021-09-02',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-36',N'数7',N'T55S',N'0.01mm',N'一楼机加车间','2022-04-03',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控车床',N'REALLY-37',N'数8',N'T55S',N'0.01mm',N'一楼机加车间','2022-04-03',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'洗地机',N'RELLY-38',N'洗地机',N'YZ-X2',NULL,N'一楼机加车间','2022-04-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'自动上下料设备',N'REALLY-39',N'数8机械人',N'HY2119/HY-JCSXL1-2',NULL,N'一楼机加车间','2022-06-22',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'加工中心',N'REALLY-40',N'加5',N'V11L',N'0.02mm',N'一楼机加车间','2022-12-09',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'转台',N'加5#用',N'加5四轴',N'HR-255N-K',N'0.05mm',N'一楼机加车间','2022-12-22',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'旋转接头',N'数7#数#8用',NULL,N'YQXJ56M-20',N'0.1mm',N'一楼机加车间','2023-02-06',N'台',2,NULL);
INSERT INTO @导入设备 VALUES (N'中实三爪液压卡盘',N'数7#数#8用',N'液压卡盘',N'CL-06A5',NULL,N'一楼机加车间','2023-02-14',N'台',2,NULL);
INSERT INTO @导入设备 VALUES (N'套丝机',N'RELLY-41',N'套丝机',N'SQ-50B1',NULL,N'一楼机加车间','2023-03-12',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'线号机',N'REALLY-17',N'线号机',N'LM-550B/LM550E',NULL,N'二楼装配车间','2023-04-22',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'高频加热炉',N'REALLY-42',N'高频加热',N'TGG-35KW进品版',NULL,N'二楼装配车间','2023-08-06',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'普通车床',N'REALLY-43',N'普3',N'CW6163E/1000',N'0.03mm',N'一楼机加车间','2023-08-14',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'光栅尺数显系统',N'普3#用',N'普3数显',N'Z向1100mm,X向570mm',NULL,N'一楼机加车间','2023-08-16',N'套',1,NULL);
INSERT INTO @导入设备 VALUES (N'卧式加工中心',N'REALLY-45',N'卧加1',N'HCN-6000L',N'0.01mm',N'一楼机加车间','2023-11-27',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'姊妹刀功能软件',N'数7#数#8用',N'对刀仪',N'6FC5800-OAM78-OYB0',NULL,N'一楼机加车间','2023-12-03',N'套',2,NULL);
INSERT INTO @导入设备 VALUES (N'自动料仓',N'机器人用',N'机器人料仓',N'配机械手定制件',NULL,N'一楼机加车间','2024-01-28',N'套',1,NULL);
INSERT INTO @导入设备 VALUES (N'电动悬挂起重机(欧式)',N'REALLY-46',N'普车吊',N'LX2.8T-7.3M/LD2-70/YJ',N'<1.5T',N'一楼机加车间','2024-06-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'电动悬挂起重机(欧式)',N'REALLY-47',N'装配吊',N'LX2.8T-7M/LD2-40/OR6',N'<1.5T',N'二楼车间装配区','2024-06-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'多功能除渣除油一体机',N'REALLY-50',N'除渣除油机',N'FGB-4',NULL,N'一楼机加车间','2024-06-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'桥式悬挂起重机',N'REALLY-49',N'原料吊',N'LX2-7m/LD2-70Y/YK',N'<1.5T',N'一楼车间库房区','2024-06-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'切割剥皮两用机',N'REALLY-60',N'割管机',N'QB-51',NULL,N'二楼车间清洗间','2024-09-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'缩管机',N'REALLY-61',N'缩管机',N'KM-91C8-323',NULL,N'二楼车间清洗间','2024-09-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'冷冻式干燥机',N'REALLY-59',N'冷干机',N'AD2-10',NULL,N'一楼三坐标室','2024-11-25',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'工业脉冲集尘机',N'REALLY-52',N'磨床除尘机',N'FMCJC-2200',NULL,N'一楼机加车间','2024-11-25',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'闪链云智能物',N'REALLY-58',N'刀具柜',N'智能刀具柜主柜88货道+40侧边格/SCCM-03',NULL,N'一楼机加车间','2024-11-25',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'小锯床',N'REALLY-63',N'小带锯',N'DLY-18F1',N'切割范围45°φ100mm/90°180mm',N'二楼车间装配区','2024-11-25',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'车床桁架机械手',N'REALLY-51',N'数5机械手',N'CNPR-B02/CNPR-3000-B',NULL,N'一楼机加车间','2024-11-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'二氧焊机',N'REALLY-55',N'二氧焊机',N'YM-350FR2',NULL,N'一楼车间打磨间','2024-11-29',N'台',1,N'停用');
INSERT INTO @导入设备 VALUES (N'弯管机',N'REALLY-62',N'弯管机',N'DW38NC',NULL,N'二楼车间装配区','2024-11-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'数控机床(多主轴车削中心)',N'REALLY-57',N'数9',N'DUAL TURN200/DT200',N'0.01mm',N'一楼机加车间','2024-12-10',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'外圆磨床',N'REALLY-53',N'磨1',N'M1332B/1000',N'0.005mm',N'一楼机加车间','2024-12-25',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'气动压力机',N'REALLY-64',N'压力机1',N'大双柱63型 推力200KG',NULL,N'二楼车间装配','2024-12-03',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'气动压力机',N'REALLY-65',N'压力机2',N'大双柱63型 推力200KG',NULL,N'二楼车间装配','2024-12-03',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'气动压力机',N'REALLY-66',N'压力机3',N'大双柱63型 推力200KG',NULL,N'二楼车间装配','2024-12-03',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'卡套预装机+模具四套',N'REALLY-67',N'卡套预装机',N'KC-A01',NULL,N'二楼车间装配区','2025-01-01',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'单臂移动式焊烟净化器',N'REALLY-56',N'焊烟净化器',N'LW1201L-030AF(LW-C-M1201-030A1)',N'3000m³/小时',N'一楼车间打磨间','2025-02-13',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'冷干机',N'REALLY-24(注:替换原冷干机)',N'冷干机',N'FX45-230/1/50-CN',NULL,N'一楼空压机室','2025-02-07',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'管型预绝缘端子压接机',N'REALLY-68',N'端子机1',N'MD-E(0.5-4平方)',N'压接端子范围0.5-4mm²',N'二楼装配车间','2025-08-29',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'OTUT端子压接机2#',N'REALLY-69',N'端子机2',N'MD-180S/MD-180TUT',N'截面积0.33-0.82mm²',N'二楼装配车间','2025-09-04',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'车床桁架机械手',N'REALLY-70',N'数7机械手',N'CNPR-B02/SX-621',NULL,N'一楼机加车间','2025-08-31',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'氩弧焊机',N'REALLY-71',N'氩弧焊机',N'WSE-315',N'使用焊丝规格φ1.0-3.0mm/电流范围20-315A',N'一楼焊接区','2014-06-03',N'台',1,N'停用');
INSERT INTO @导入设备 VALUES (N'车床桁架机械手',N'REALLY-74',N'数9机械手',N'CNPR-B02/SX-620',N'0.1mm',N'一楼机加车间','2025-08-31',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'电动悬挂起重机(欧式)',N'REALLY-72',N'阀类吊',N'LX2.8T-6M',N'最大起重2.8T/链长6M',N'二楼阀类测试区','2025-12-04',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'马扎克数控车床',N'REALLY-73',N'数6',N'QTE200/500L',N'12工位刀塔/加工φ290/行程500',N'一楼机加车间','2026-01-10',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'马扎克加工中心',N'REALLY-75',N'加2',N'FF400V/30L',N'X500/Y400/Z400',N'一楼机加车间','2026-02-10',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'电动攻丝机',N'RELLY-54',N'攻丝机1#',N'M3-M20(YZ-20C)',N'夹头范围M3-M20',N'一楼机加车间','2025-12-01',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'手动液压叉车',N'REALLY-76',N'手动搬运车',N'黄色AC540 2.5T',N'最大承重2.5T',N'一楼机加车间','2025-12-11',N'辆',1,NULL);
INSERT INTO @导入设备 VALUES (N'455铜铝型材切割机(全自动)',N'REALLY-77',N'自动切割机',N'455铜铝型材切割机',N'最大切割行程100',N'一楼机加车间','2026-03-09',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-78',N'数5用',N'YWJC-LD300',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-79',N'数7用',N'YWJC-LD300',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-80',N'数8用',N'YWJC-LD300',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-81',N'数6用',N'YWJC-LD300',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-82',N'加2用',N'YWJC-LD1100',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-83',N'加3用',N'YWJC-LD1100',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-84',N'加5用',N'YWJC-LD1100',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-85',N'卧加用',N'YWJC-LD1500',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'油雾收集器',N'REALLY-86',N'数9用',N'YWJC-LD600',NULL,N'一楼机加车间',NULL,N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'无尘环保带锯床',N'REALLY-87',N'小带锯2#',N'DLY-18F1',N'45°切割范围φ100',N'一楼机打磨间','2026-05-20',N'台',1,NULL);
INSERT INTO @导入设备 VALUES (N'车床桁架机械手',N'REALLY-88',N'数6机械手',N'CNPR-B03',NULL,N'一楼机加车间',NULL,N'套',1,NULL);
MERGE [dbo].[基础数据_设备工位点检表] AS target
USING @导入设备 AS source
ON ISNULL(target.[公司编码], N'') = ISNULL(source.[公司编码], N'') AND ISNULL(source.[公司编码], N'') <> N''
WHEN MATCHED THEN UPDATE SET
target.[名称]=source.[名称], target.[设备名称]=source.[生产用名], target.[设备型号]=source.[型号规格], target.[设备信息]=source.[设备信息], target.[使用部门]=source.[使用部门], target.[入账日期]=source.[入账日期], target.[单位]=source.[单位], target.[数量]=source.[数量], target.[状态]=source.[状态]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([名称],[公司编码],[设备名称],[设备型号],[设备信息],[使用部门],[入账日期],[单位],[数量],[状态])
VALUES (source.[名称],source.[公司编码],source.[生产用名],source.[型号规格],source.[设备信息],source.[使用部门],source.[入账日期],source.[单位],source.[数量],source.[状态]);
GO
SELECT COUNT(*) AS [设备信息导入后总数] FROM [dbo].[基础数据_设备工位点检表];
GO

View File

@@ -0,0 +1,43 @@
USE [YL_MESDB]
GO
DECLARE @NewMenuId INT;
SELECT @NewMenuId = MAX(id)
FROM [dbo].[登录基础数据_二级菜单]
WHERE title = N'结算工时'
OR componet = '/ProductionManagement/SettlementWorkhours/index';
IF @NewMenuId IS NULL
BEGIN
SELECT @NewMenuId = ISNULL(MAX(id), 0) + 1
FROM [dbo].[登录基础数据_二级菜单];
END;
INSERT INTO [dbo].[登录基础数据_二级菜单]
(id, pid, path, componet, redirect, name, title, icon, 账号代码, 模块代码, 是否启用, AddData, DeleteData, EditData, SearchData)
SELECT
@NewMenuId AS id,
3 AS pid,
'SettlementWorkhours/index' AS path,
'/ProductionManagement/SettlementWorkhours/index' AS componet,
'' AS redirect,
'SettlementWorkhours' AS name,
N'结算工时' AS title,
ISNULL(NULLIF(w.icon, ''), 'DimensionsSummaryReport') AS icon,
w.账号代码,
w.模块代码,
ISNULL(w.是否启用, 1) AS 是否启用,
w.AddData,
w.DeleteData,
w.EditData,
w.SearchData
FROM [dbo].[登录基础数据_二级菜单] w
WHERE w.title = N'工时查询'
AND NOT EXISTS (
SELECT 1
FROM [dbo].[登录基础数据_二级菜单] existing
WHERE existing.title = N'结算工时'
AND existing.账号代码 = w.账号代码
);
GO

View File

@@ -0,0 +1,85 @@
USE [YL_MESDB]
GO
SET NOCOUNT ON;
DECLARE @Title nvarchar(100) = N'及时齐套跟踪结果';
DECLARE @Path nvarchar(300) = N'TimelyKitTrackingResult/index';
DECLARE @Component nvarchar(300) = N'/PlanManagement/TimelyKitTrackingResult/index';
DECLARE @Name nvarchar(100) = N'TimelyKitTrackingResult';
DECLARE @SourcePath nvarchar(300) = N'PlanShell/index';
DECLARE @SourceComponent nvarchar(300) = N'/PlanManagement/PlanShell/index';
IF OBJECT_ID(N'dbo.登录基础数据_二级菜单', N'U') IS NULL
BEGIN
RAISERROR(N'未找到表 dbo.登录基础数据_二级菜单。', 16, 1);
RETURN;
END;
DECLARE @IdIsIdentity bit = ISNULL(COLUMNPROPERTY(OBJECT_ID(N'dbo.登录基础数据_二级菜单'), N'id', 'IsIdentity'), 0);
IF @IdIsIdentity = 1
BEGIN
;WITH SourceRows AS (
SELECT
src.[账号代码],
src.[pid],
src.[icon]
FROM [dbo].[登录基础数据_二级菜单] src
WHERE src.[是否启用] = 1
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'计划用表')
AND NOT EXISTS (
SELECT 1
FROM [dbo].[登录基础数据_二级菜单] existing
WHERE existing.[账号代码] = src.[账号代码]
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
)
)
INSERT INTO [dbo].[登录基础数据_二级菜单]
([pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [是否启用])
SELECT [pid], @Path, @Component, NULL, @Name, @Title, [icon], [账号代码], 1
FROM SourceRows;
END
ELSE
BEGIN
;WITH SourceRows AS (
SELECT
ROW_NUMBER() OVER (ORDER BY src.[账号代码], src.[id]) AS rn,
src.[账号代码],
src.[pid],
src.[icon]
FROM [dbo].[登录基础数据_二级菜单] src
WHERE src.[是否启用] = 1
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'计划用表')
AND NOT EXISTS (
SELECT 1
FROM [dbo].[登录基础数据_二级菜单] existing
WHERE existing.[账号代码] = src.[账号代码]
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
)
),
BaseId AS (
SELECT ISNULL(MAX([id]), 0) AS maxId
FROM [dbo].[登录基础数据_二级菜单]
)
INSERT INTO [dbo].[登录基础数据_二级菜单]
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [是否启用])
SELECT BaseId.maxId + SourceRows.rn, SourceRows.[pid], @Path, @Component, NULL, @Name, @Title, SourceRows.[icon], SourceRows.[账号代码], 1
FROM SourceRows
CROSS JOIN BaseId;
END;
UPDATE [dbo].[登录基础数据_二级菜单]
SET
[path] = @Path,
[componet] = @Component,
[name] = @Name,
[title] = @Title,
[模块代码] = [id],
[是否启用] = 1
WHERE [title] = @Title OR [componet] = @Component;
SELECT [id], [pid], [path], [componet], [name], [title], [icon], [账号代码], [是否启用]
FROM [dbo].[登录基础数据_二级菜单]
WHERE [path] = @Path OR [componet] = @Component OR [title] = @Title
ORDER BY [账号代码], [id];

View File

@@ -0,0 +1,231 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'[dbo].[生产管理_结算工时_查询]', N'P') IS NULL
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_结算工时_查询] AS BEGIN SET NOCOUNT ON; END')
GO
ALTER PROCEDURE [dbo].[生产管理_结算工时_查询]
@合同号 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工位 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL,
@数据条数 INT = 100
AS
BEGIN
SET NOCOUNT ON;
;WITH 结算任务 AS (
SELECT
AID,
订单编号,
物料编号,
物料描述
FROM [dbo].[MES_接口_生产计划]
WHERE 单据状态 IS NULL
),
基础数据 AS (
SELECT TOP (CASE WHEN ISNULL(@数据条数, 0) <= 0 THEN 100 ELSE @数据条数 END)
v.TaskAID,
v.开始时间,
v.操作内容,
v.操作类别,
v.操作人,
v.加工工时,
v.操作数值,
v.订单合同号,
v.订单号,
v.订单行号,
v.产品编码,
v.产品名称,
v.工序名称,
v.工位名称,
p.物料编号,
p.物料描述
FROM [dbo].[View_生产工时视图] v
INNER JOIN 结算任务 p ON p.AID = v.TaskAID
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR v.开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR v.开始时间 < DATEADD(DAY, 1, @结束日期))
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 = @订单号)
AND (@工位 IS NULL OR @工位 = '' OR v.工位名称 LIKE '%' + @工位 + '%')
AND ISNULL(v.加工工时, 0) > 0
AND (ISNULL(v.操作内容, '') IN ('报工', '辅助结束') OR ISNULL(v.操作类别, '') IN ('报工', '辅助结束'))
ORDER BY v.开始时间 DESC
),
明细键 AS (
SELECT DISTINCT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间
FROM 基础数据
),
操作人明细 AS (
SELECT
k.TaskAID,
k.开始时间,
LTRIM(RTRIM(s.value)) AS 操作人
FROM 明细键 k
INNER JOIN [dbo].[View_生产工时视图全部] v2
ON v2.TaskAID = k.TaskAID
AND v2.开始时间 >= CONVERT(DATETIME, k.开始时间, 120)
AND v2.开始时间 < DATEADD(SECOND, 1, CONVERT(DATETIME, k.开始时间, 120))
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(ISNULL(v2.操作人, ''), N',', ','), N'、', ','), ',') s
WHERE ISNULL(v2.加工工时, 0) <= 0
AND NULLIF(LTRIM(RTRIM(s.value)), '') IS NOT NULL
),
操作人拼接 AS (
SELECT
TaskAID,
开始时间,
STRING_AGG(操作人, ',') AS 操作人
FROM (
SELECT DISTINCT TaskAID, 开始时间, 操作人
FROM 操作人明细
) x
GROUP BY TaskAID, 开始时间
),
结算明细 AS (
SELECT
ISNULL(b.物料编号, b.产品编码) AS 物料编号,
ISNULL(b.物料描述, b.产品名称) AS 物料描述,
b.订单号,
b.工位名称,
b.TaskAID,
b.工序名称,
b.订单行号,
ISNULL(o.操作人, '') AS 操作人,
CASE
WHEN ISNULL(b.操作内容, '') LIKE '%辅助%' OR ISNULL(b.操作类别, '') LIKE '%辅助%' THEN '辅助结束'
ELSE '报工'
END AS 操作类型,
CAST(ISNULL(b.加工工时, 0) / 60.0 / 60.0 AS DECIMAL(18, 4)) AS 工时小时,
ISNULL(b.操作数值, 0) AS 完成数
FROM 基础数据 b
LEFT JOIN 操作人拼接 o
ON o.TaskAID = b.TaskAID
AND o.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
),
订单工位汇总基础 AS (
SELECT
物料编号,
物料描述,
订单号,
工位名称,
MAX(工序名称) AS 工序名称,
MAX(订单行号) AS 工序顺序,
COUNT(*) AS 记录数,
SUM(CASE WHEN 操作类型 = '报工' THEN 工时小时 ELSE 0 END) AS 报工工时,
SUM(CASE WHEN 操作类型 = '辅助结束' THEN 工时小时 ELSE 0 END) AS 主辅工时,
SUM(CASE WHEN 操作类型 = '报工' THEN 完成数 ELSE 0 END) AS 报工完成数,
SUM(CASE WHEN 操作类型 = '辅助结束' THEN 完成数 ELSE 0 END) AS 辅助完成数,
SUM(工时小时) AS 合计工时
FROM 结算明细 j
GROUP BY 物料编号, 物料描述, 订单号, 工位名称
),
订单工位操作人 AS (
SELECT
物料编号,
订单号,
ISNULL(工位名称, '') AS 工位名称,
STRING_AGG(操作人, ',') AS 操作人
FROM (
SELECT DISTINCT
j.物料编号,
j.订单号,
ISNULL(j.工位名称, '') AS 工位名称,
LTRIM(RTRIM(s.value)) AS 操作人
FROM 结算明细 j
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(ISNULL(j.操作人, ''), N',', ','), N'、', ','), ',') s
WHERE NULLIF(LTRIM(RTRIM(s.value)), '') IS NOT NULL
) x
GROUP BY 物料编号, 订单号, ISNULL(工位名称, '')
),
订单工位汇总 AS (
SELECT
b.物料编号,
b.物料描述,
b.订单号,
b.工位名称,
b.工序名称,
b.工序顺序,
b.记录数,
b.报工工时,
b.主辅工时,
b.报工完成数,
b.辅助完成数,
b.合计工时,
ISNULL(o.操作人, '') AS 操作人
FROM 订单工位汇总基础 b
LEFT JOIN 订单工位操作人 o
ON o.物料编号 = b.物料编号
AND o.订单号 = b.订单号
AND o.工位名称 = ISNULL(b.工位名称, '')
),
物料汇总 AS (
SELECT
物料编号,
物料描述,
SUM(记录数) AS 记录数,
SUM(报工工时) AS 报工工时,
SUM(主辅工时) AS 主辅工时,
SUM(报工完成数) AS 报工完成数,
SUM(辅助完成数) AS 辅助完成数,
SUM(合计工时) AS 合计工时
FROM 订单工位汇总
GROUP BY 物料编号, 物料描述
)
SELECT
1 AS [Level],
物料编号 AS materialCode,
物料描述 AS materialDesc,
ISNULL(物料描述, '') + ' ' + ISNULL(物料编号, '') AS taskDescription,
'' AS productionOrderNo,
'' AS station,
CAST(报工工时 AS VARCHAR(20)) AS reportWorkHours,
CAST(主辅工时 AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST(报工完成数 AS VARCHAR(20)) AS reportFinishQty,
CAST(辅助完成数 AS VARCHAR(20)) AS auxiliaryFinishQty,
CAST(合计工时 AS VARCHAR(20)) AS totalWorkHours,
CAST(CASE WHEN 报工完成数 > 0 THEN (报工工时 - 0 * 报工完成数) / 报工完成数 ELSE 0 END AS VARCHAR(20)) AS clampingTime,
CAST(0 AS VARCHAR(20)) AS programTime,
CAST(CASE WHEN 报工完成数 > 0 THEN 报工工时 / 报工完成数 ELSE 0 END AS VARCHAR(20)) AS settlementReportPieceHours,
CAST(CASE WHEN 辅助完成数 > 0 THEN 主辅工时 / 辅助完成数 ELSE 0 END AS VARCHAR(20)) AS settlementAuxiliaryPieceHours,
'' AS operatorNames,
CAST(记录数 AS VARCHAR(20)) AS recordCount
FROM 物料汇总
UNION ALL
SELECT
2 AS [Level],
物料编号 AS materialCode,
物料描述 AS materialDesc,
ISNULL(物料描述, '') + ' ' + ISNULL(物料编号, '')
+ CASE WHEN NULLIF(ISNULL(工序名称, ''), '') IS NULL THEN '' ELSE ' ' + 工序名称 END
+ CASE WHEN 工序顺序 IS NULL THEN '' ELSE ' 序' + CAST(工序顺序 AS VARCHAR(20)) END AS taskDescription,
ISNULL(订单号, '') AS productionOrderNo,
ISNULL(工位名称, '') AS station,
CAST(报工工时 AS VARCHAR(20)) AS reportWorkHours,
CAST(主辅工时 AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST(报工完成数 AS VARCHAR(20)) AS reportFinishQty,
CAST(辅助完成数 AS VARCHAR(20)) AS auxiliaryFinishQty,
CAST(合计工时 AS VARCHAR(20)) AS totalWorkHours,
CAST(CASE WHEN 报工完成数 > 0 THEN (报工工时 - 0 * 报工完成数) / 报工完成数 ELSE 0 END AS VARCHAR(20)) AS clampingTime,
CAST(0 AS VARCHAR(20)) AS programTime,
CAST(CASE WHEN 报工完成数 > 0 THEN 报工工时 / 报工完成数 ELSE 0 END AS VARCHAR(20)) AS settlementReportPieceHours,
CAST(CASE WHEN 辅助完成数 > 0 THEN 主辅工时 / 辅助完成数 ELSE 0 END AS VARCHAR(20)) AS settlementAuxiliaryPieceHours,
ISNULL(操作人, '') AS operatorNames,
CAST(记录数 AS VARCHAR(20)) AS recordCount
FROM 订单工位汇总
ORDER BY materialCode, [Level], productionOrderNo, station
END
GO

View File

@@ -0,0 +1,410 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
BEGIN
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询]
@订单号 int = 0,
@物料类型 nvarchar(50) = N'',
@合同号 nvarchar(50) = N'',
@产品编码 nvarchar(50) = N'',
@产品名称 nvarchar(50) = N'',
@工序名称 nvarchar(50) = N'',
@计划开始 nvarchar(50) = N'',
@计划完成 nvarchar(50) = N'',
@排产状态 nvarchar(50) = N'全部',
@指派对象 nvarchar(50) = N'全部',
@计划号 nvarchar(50) = N'',
@发货状态 nvarchar(50) = N'全部',
@齐套 nvarchar(50) = N'全部',
@检验状态 nvarchar(50) = N'',
@发料状态 nvarchar(50) = N'全部',
@自制件属性 nvarchar(50) = N'全部'
AS
BEGIN
SET NOCOUNT ON;
;WITH SAP缺件源 AS (
SELECT
s.DocEntry,
s.Project COLLATE DATABASE_DEFAULT AS Project,
s.[行号],
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
ISNULL(s.[属性] COLLATE DATABASE_DEFAULT, N'') AS 属性,
ISNULL(s.[未发货数量], 0) AS 未发货数量,
ISNULL(s.[在制采购], 0) AS 在制采购,
s.[采购员] COLLATE DATABASE_DEFAULT AS 采购员,
s.[采购预计交货日期],
ISNULL(s.[采购未清数量], 0) AS 采购未清数量,
ISNULL(s.[到货草稿], 0) AS 到货草稿
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
WHERE ISNULL(s.[未发货数量], 0) > 0
),
SAP缺件 AS (
SELECT TOP (2000)
src.*
FROM (
SELECT
SAP缺件源.*,
ROW_NUMBER() OVER (
PARTITION BY
SAP缺件源.DocEntry,
SAP缺件源.Project,
SAP缺件源.ItemCode,
SAP缺件源.属性
ORDER BY
SAP缺件源.[未发货数量] DESC,
SAP缺件源.[行号]
) AS rn
FROM SAP缺件源
) AS src
WHERE src.rn = 1
),
查询结果 AS (
SELECT
ISNULL(v.[计划号], N'') AS [计划号],
ISNULL(v.[合同号], N'') AS [合同号],
v.[订单编号] AS [订单号],
v.[物料编号] AS [产品编码],
v.[物料描述] AS [产品名称],
v.[计划数量订单],
v.[入库数量],
v.[计划完成] AS [要求完工日期],
v.[要求发货日期],
CASE
WHEN ISNULL(v.[发货状态], 0) = 1 THEN N'已发货'
ELSE N'未发货'
END AS [发货状态],
CASE
WHEN ISNULL(v.[齐套], 0) = 1 THEN N'是'
ELSE N'否'
END AS [齐套],
CASE
WHEN ISNULL(v.[拣配状态], 0) = 1 THEN N'已拣配'
ELSE N'未拣配'
END AS [拣配状态],
CASE
WHEN ISNULL(v.[发料状态], N'') = N'1' THEN N'发料齐套'
WHEN ISNULL(v.[发料状态], N'') = N'2' THEN N'发料缺件'
ELSE N'未发料'
END AS [发料状态],
CASE
WHEN ISNULL(v.[任务状态], 0) IN (2, 4) OR v.[开工时间] > '1900-01-01' THEN N'已开工'
ELSE N'待执行'
END AS [装配开工],
v.[完成数量],
CASE
WHEN final_check.[计划号] IS NOT NULL THEN N'是'
ELSE N'否'
END AS [终检],
CASE WHEN ISNULL(v.[生产工艺], 0) = 1 THEN N'是' ELSE N'否' END AS [生产工艺],
CASE WHEN ISNULL(v.[排产状态], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [排产状态],
ISNULL(v.[自制件属性], N'') AS [自制件属性],
v.[计划开始时间] AS [预计齐套时间],
sap.ItemCode AS [缺件物料编码],
sap.U_Name AS [缺件物料名称],
sap.[未发货数量] AS [缺件数量],
CASE WHEN sap.[属性] = N'' THEN N'外购' ELSE sap.[属性] END AS [缺件属性],
CASE
WHEN sap.[属性] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[到货草稿], 0)), N'')
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[订单编号]), N'')
END AS [缺件生产订单号],
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(current_step.[当前序], N'') END AS [进度],
CASE
WHEN sap.[属性] = N'' THEN
N'采购员:' + ISNULL(NULLIF(sap.[采购员], N''), N'-') +
N' / 未清数量:' + CONVERT(nvarchar(30), sap.[采购未清数量]) +
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[到货草稿]) +
N' / 质检状态:' + ISNULL(purchase_check.[质检状态], N'未完成')
ELSE ISNULL(route.[工艺路线], N'')
END AS [工艺路线],
CASE
WHEN sap.[属性] = N'' THEN sap.[采购预计交货日期]
ELSE route.[预计完成时间]
END AS [预计完成时间],
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(route.[工艺路线明细], N'[]') END AS [工艺路线明细],
sap.[采购员],
sap.[采购未清数量],
sap.[到货草稿],
ISNULL(purchase_check.[质检状态], CASE WHEN sap.[属性] = N'' THEN N'未完成' ELSE N'' END) AS [质检状态],
sap.DocEntry AS [SAP单据],
sap.[行号] AS [SAP行号]
FROM SAP缺件 AS sap
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[物料类型] = N'pit_Resource'
AND ISNULL(m.[排产状态], 0) = 1
AND m.[订单编号] = sap.DocEntry
ORDER BY m.[订单行号]
) AS v
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[物料类型] = N'pit_Resource'
AND ISNULL(m.[排产状态], 0) = 1
AND m.[订单编号] <> v.[订单编号]
AND (
(sap.[属性] = N'机加件' AND m.[物料编号] = sap.ItemCode)
OR (sap.[属性] LIKE N'%装配%' AND m.[物料编号] = sap.ItemCode AND ISNULL(m.[合同号], N'') = ISNULL(sap.Project, N''))
)
ORDER BY m.[订单编号] DESC, m.[订单行号]
) AS detail_order
OUTER APPLY (
SELECT TOP (1) q.[计划号]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[质检类型] = N'终检'
AND q.[计划号] = v.[订单编号]
) AS final_check
OUTER APPLY (
SELECT
MAX(p.[计划完成时间]) AS [预计完成时间],
STUFF((
SELECT N'、' + p2.[工序名称] +
CASE WHEN ISNULL(p2.[指派对象], N'') = N'' THEN N'' ELSE N'(' + p2.[指派对象] + N')' END
FROM [dbo].[View_生产订单_MES] AS p2
WHERE p2.[订单编号] = detail_order.[订单编号]
AND p2.[物料类型] = N'pit_Resource'
ORDER BY p2.[订单行号]
FOR XML PATH(N''), TYPE
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [工艺路线],
(
SELECT
p2.[订单行号],
p2.[工序名称],
p2.[指派对象],
p2.[计划开始时间],
p2.[计划完成时间],
ISNULL(p2.[进度], 0) AS [进度],
ISNULL(p2.[完成数量], 0) AS [完成数量],
ISNULL(p2.[收料数量], 0) AS [收料数量],
ISNULL(p2.[加工状态], 0) AS [加工状态],
p2.[开工时间],
ISNULL(check_qty.[收检合格数], 0) AS [收检合格数],
ISNULL(check_qty.[收检不合格数], 0) AS [收检不合格数]
FROM [dbo].[View_生产订单_MES] AS p2
OUTER APPLY (
SELECT
SUM(ISNULL(q.[合格数], 0)) AS [收检合格数],
SUM(ISNULL(q.[不合格数], 0)) AS [收检不合格数]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[TaskAID] = p2.[TaskAID]
AND q.[质检类型] = N'收检'
) AS check_qty
WHERE p2.[订单编号] = detail_order.[订单编号]
AND p2.[物料类型] = N'pit_Resource'
ORDER BY p2.[订单行号]
FOR JSON PATH
) AS [工艺路线明细]
FROM [dbo].[View_生产订单_MES] AS p
WHERE p.[订单编号] = detail_order.[订单编号]
AND p.[物料类型] = N'pit_Resource'
) AS route
OUTER APPLY (
SELECT TOP (1)
pending.[订单行号],
pending.[工序名称],
pending.[加工状态],
pending.[进度],
pending.[完成数量],
pending.[计划数量],
pending.[开工时间]
FROM [dbo].[View_生产订单_MES] AS pending
WHERE pending.[订单编号] = detail_order.[订单编号]
AND pending.[物料类型] = N'pit_Resource'
AND NOT (
ISNULL(pending.[进度], 0) >= 100
OR (ISNULL(pending.[计划数量], 0) > 0 AND ISNULL(pending.[完成数量], 0) >= ISNULL(pending.[计划数量], 0))
)
ORDER BY pending.[订单行号]
) AS pending
OUTER APPLY (
SELECT TOP (1) prev.[工序名称]
FROM [dbo].[View_生产订单_MES] AS prev
WHERE prev.[订单编号] = detail_order.[订单编号]
AND prev.[物料类型] = N'pit_Resource'
AND prev.[订单行号] < pending.[订单行号]
ORDER BY prev.[订单行号] DESC
) AS prev_step
OUTER APPLY (
SELECT TOP (1) last_step.[工序名称]
FROM [dbo].[View_生产订单_MES] AS last_step
WHERE last_step.[订单编号] = detail_order.[订单编号]
AND last_step.[物料类型] = N'pit_Resource'
ORDER BY last_step.[订单行号] DESC
) AS last_step
OUTER APPLY (
SELECT
CASE
WHEN detail_order.[订单编号] IS NULL THEN N''
WHEN pending.[订单行号] IS NULL THEN ISNULL(last_step.[工序名称], N'') + N'毕'
WHEN ISNULL(pending.[进度], 0) > 0
OR ISNULL(pending.[完成数量], 0) > 0
OR ISNULL(pending.[加工状态], 0) IN (2, 3, 4, 5, 6)
OR pending.[开工时间] > '1900-01-01'
THEN ISNULL(pending.[工序名称], N'') + N'中'
WHEN prev_step.[工序名称] IS NULL THEN N''
ELSE prev_step.[工序名称] + N'毕待' + ISNULL(pending.[工序名称], N'')
END AS [当前序]
) AS current_step
OUTER APPLY (
SELECT
CASE
WHEN sap.[属性] <> N'' THEN N''
WHEN EXISTS (
SELECT 1
FROM [dbo].[质量检验_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[检测类型编号] = 5
AND q.[计划号] = task.[订单编号]
AND q.[行号] = task.[行号]
AND q.[订单类型] = task.[订单类型]
) AS checked_qty
WHERE sap.[到货草稿] > 0
AND task.[订单类型] = N'20'
AND task.[订单编号] = sap.[到货草稿]
AND ISNULL(task.[入库数量], 0) > 0
)
AND NOT EXISTS (
SELECT 1
FROM [dbo].[质量检验_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[检测类型编号] = 5
AND q.[计划号] = task.[订单编号]
AND q.[行号] = task.[行号]
AND q.[订单类型] = task.[订单类型]
) AS checked_qty
WHERE sap.[到货草稿] > 0
AND task.[订单类型] = N'20'
AND task.[订单编号] = sap.[到货草稿]
AND (
ISNULL(task.[入库数量], 0) <= 0
OR ISNULL(checked_qty.[已检验数量], 0) < ISNULL(task.[入库数量], 0)
)
) THEN N'已完成'
ELSE N'未完成'
END AS [质检状态]
) AS purchase_check
WHERE
v.[订单编号] IS NOT NULL
AND (@订单号 <= 0 OR v.[订单编号] = @订单号)
AND (@计划号 = N'' OR ISNULL(v.[计划号], N'') = @计划号)
AND (@合同号 = N'' OR ISNULL(v.[合同号], N'') LIKE N'%' + @合同号 + N'%')
AND (@产品编码 = N'' OR ISNULL(v.[物料编号], N'') LIKE N'%' + @产品编码 + N'%')
AND (@产品名称 = N'' OR ISNULL(v.[物料描述], N'') LIKE N'%' + @产品名称 + N'%')
AND (@工序名称 = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS fp
WHERE fp.[订单编号] = v.[订单编号]
AND fp.[工序名称] = @工序名称
))
AND (@计划开始 = N'' OR v.[计划开始时间] >= TRY_CONVERT(datetime, @计划开始))
AND (@计划完成 = N'' OR v.[计划开始时间] <= TRY_CONVERT(datetime, @计划完成))
AND (@排产状态 = N'全部' OR @排产状态 = N'' OR
(@排产状态 = N'已完成' AND ISNULL(v.[排产状态], 0) = 1) OR
(@排产状态 = N'未完成' AND ISNULL(v.[排产状态], 0) = 0)
)
AND (@指派对象 = N'全部' OR @指派对象 = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS ap
WHERE ap.[订单编号] = v.[订单编号]
AND ap.[指派对象] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@指派对象, N','))
))
AND (@发货状态 = N'全部' OR @发货状态 = N'' OR
(@发货状态 = N'已发货' AND ISNULL(v.[发货状态], N'0') = N'1') OR
(@发货状态 = N'未发货' AND ISNULL(v.[发货状态], N'0') <> N'1')
)
AND (@齐套 = N'全部' OR @齐套 = N'' OR
(@齐套 = N'是' AND ISNULL(v.[齐套], 0) = 1) OR
(@齐套 = N'否' AND ISNULL(v.[齐套], 0) <> 1)
)
AND (@发料状态 = N'全部' OR @发料状态 = N'' OR
(@发料状态 = N'发料齐套' AND ISNULL(v.[发料状态], N'0') = N'1') OR
(@发料状态 = N'发料缺件' AND ISNULL(v.[发料状态], N'0') = N'2') OR
(@发料状态 = N'未发料' AND ISNULL(v.[发料状态], N'0') NOT IN (N'1', N'2'))
)
AND (@自制件属性 = N'全部' OR @自制件属性 = N'' OR
(@自制件属性 = N'机加' AND (sap.[属性] = N'机加件' OR v.[自制件属性] = N'机加件')) OR
(@自制件属性 = N'装配' AND (sap.[属性] LIKE N'%装配%' OR v.[自制件属性] LIKE N'%装配%'))
)
AND (@检验状态 = N'' OR (sap.[属性] = N'' AND ISNULL(purchase_check.[质检状态], N'') = @检验状态))
)
SELECT TOP (1000)
[计划号],
[合同号],
[订单号],
[产品编码],
[产品名称],
[计划数量订单],
[入库数量],
[要求完工日期],
[要求发货日期],
[发货状态],
[齐套],
[拣配状态],
[发料状态],
[装配开工],
[完成数量],
[终检],
[生产工艺],
[排产状态],
[自制件属性],
[预计齐套时间],
[缺件物料编码],
[缺件物料名称],
[缺件数量],
[缺件属性],
[缺件生产订单号],
[进度],
[工艺路线],
[预计完成时间],
[工艺路线明细],
[采购员],
[采购未清数量],
[到货草稿],
[质检状态],
[SAP单据],
[SAP行号]
FROM (
SELECT
查询结果.*,
ROW_NUMBER() OVER (
PARTITION BY
[订单号],
CASE
WHEN ISNULL([缺件生产订单号], N'') <> N'' THEN [缺件生产订单号]
ELSE [缺件物料编码] + N':' + CONVERT(nvarchar(30), [SAP行号])
END
ORDER BY [缺件数量] DESC, [SAP单据], [SAP行号]
) AS rn
FROM 查询结果
) AS dedup
WHERE rn = 1
ORDER BY
[预计齐套时间],
[订单号],
[缺件生产订单号],
[缺件物料编码];
END
GO

View File

@@ -0,0 +1,76 @@
USE [YL_MESDB]
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_增加]
@名称 nvarchar(50) = NULL,
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 nvarchar(50) = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 nvarchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@公司编码, N'') = N''
BEGIN
SELECT '0' AS result, N'公司编码不能为空' AS message;
RETURN;
END
INSERT INTO [dbo].[基础数据_设备工位点检表] (
[名称],
[公司编码],
[设备名称],
[设备型号],
[设备类型],
[设备信息],
[使用部门],
[入账日期],
[单位],
[数量],
[状态],
[维修记录],
[维保记录],
[工位绑定],
[主要设备],
[设备标准开机工时],
[特种设备],
[证书有效期至]
)
VALUES (
@名称,
@公司编码,
@设备名称,
@设备型号,
@设备类型,
@设备信息,
@使用部门,
TRY_CONVERT(date, NULLIF(@入账日期, N'')),
@单位,
@数量,
@状态,
@维修记录,
@维保记录,
@工位绑定,
@主要设备,
@设备标准开机工时,
@特种设备,
TRY_CONVERT(date, NULLIF(@证书有效期至, N''))
);
SELECT '1' AS result;
END
GO

View File

@@ -0,0 +1,96 @@
USE [YL_MESDB]
GO
DECLARE @导入设备日期 TABLE ([公司编码] nvarchar(100), [入账日期] date);
INSERT INTO @导入设备日期 VALUES (N'REALLY-11', '2007-01-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-21', '2007-01-02');
INSERT INTO @导入设备日期 VALUES (N'REALLY-6', '2008-12-24');
INSERT INTO @导入设备日期 VALUES (N'REALLY-1', '2011-01-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-19', '2011-01-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-3', '2011-09-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-8', '2012-03-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-2', '2014-01-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-14', '2014-06-06');
INSERT INTO @导入设备日期 VALUES (N'REALLY-4', '2015-03-18');
INSERT INTO @导入设备日期 VALUES (N'REALLY-16', '2015-04-13');
INSERT INTO @导入设备日期 VALUES (N'REALLY-44', '2015-05-18');
INSERT INTO @导入设备日期 VALUES (N'REALLY-13', '2016-02-02');
INSERT INTO @导入设备日期 VALUES (N'REALLY-5', '2018-05-12');
INSERT INTO @导入设备日期 VALUES (N'REALLY-10', '2018-08-27');
INSERT INTO @导入设备日期 VALUES (N'REALLY-33', '2020-04-16');
INSERT INTO @导入设备日期 VALUES (N'REALLY-23', '2020-06-30');
INSERT INTO @导入设备日期 VALUES (N'已报废', '2020-06-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-25', '2020-11-06');
INSERT INTO @导入设备日期 VALUES (N'加1#用', '2020-12-11');
INSERT INTO @导入设备日期 VALUES (N'REALLY-26', '2020-12-11');
INSERT INTO @导入设备日期 VALUES (N'加3#用', '2020-12-11');
INSERT INTO @导入设备日期 VALUES (N'REALLY-31', '2021-02-02');
INSERT INTO @导入设备日期 VALUES (N'RELLY-29', '2021-03-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-28', '2021-03-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-27', '2021-03-12');
INSERT INTO @导入设备日期 VALUES (N'REALLY-30', '2021-03-18');
INSERT INTO @导入设备日期 VALUES (N'起重机/吊车', '2021-04-06');
INSERT INTO @导入设备日期 VALUES (N'REALLY-34', '2021-04-06');
INSERT INTO @导入设备日期 VALUES (N'REALLY-32', '2021-09-03');
INSERT INTO @导入设备日期 VALUES (N'REALLY-36', '2022-04-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-37', '2022-04-04');
INSERT INTO @导入设备日期 VALUES (N'RELLY-38', '2022-04-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-39', '2022-06-23');
INSERT INTO @导入设备日期 VALUES (N'REALLY-40', '2022-12-10');
INSERT INTO @导入设备日期 VALUES (N'加5#用', '2022-12-23');
INSERT INTO @导入设备日期 VALUES (N'数7#数#8用', '2023-02-07');
INSERT INTO @导入设备日期 VALUES (N'数7#数#8用', '2023-02-15');
INSERT INTO @导入设备日期 VALUES (N'RELLY-41', '2023-03-13');
INSERT INTO @导入设备日期 VALUES (N'REALLY-17', '2023-04-23');
INSERT INTO @导入设备日期 VALUES (N'REALLY-42', '2023-08-07');
INSERT INTO @导入设备日期 VALUES (N'REALLY-43', '2023-08-15');
INSERT INTO @导入设备日期 VALUES (N'普3#用', '2023-08-17');
INSERT INTO @导入设备日期 VALUES (N'REALLY-45', '2023-11-28');
INSERT INTO @导入设备日期 VALUES (N'数7#数#8用', '2023-12-04');
INSERT INTO @导入设备日期 VALUES (N'机器人用', '2024-01-29');
INSERT INTO @导入设备日期 VALUES (N'REALLY-46', '2024-06-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-47', '2024-06-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-50', '2024-06-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-49', '2024-06-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-60', '2024-09-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-61', '2024-09-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-59', '2024-11-26');
INSERT INTO @导入设备日期 VALUES (N'REALLY-52', '2024-11-26');
INSERT INTO @导入设备日期 VALUES (N'REALLY-58', '2024-11-26');
INSERT INTO @导入设备日期 VALUES (N'REALLY-63', '2024-11-26');
INSERT INTO @导入设备日期 VALUES (N'REALLY-51', '2024-11-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-55', '2024-11-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-62', '2024-11-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-57', '2024-12-11');
INSERT INTO @导入设备日期 VALUES (N'REALLY-53', '2024-12-26');
INSERT INTO @导入设备日期 VALUES (N'REALLY-64', '2024-12-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-65', '2024-12-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-66', '2024-12-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-67', '2025-01-02');
INSERT INTO @导入设备日期 VALUES (N'REALLY-56', '2025-02-14');
INSERT INTO @导入设备日期 VALUES (N'REALLY-24(注:替换原冷干机)', '2025-02-08');
INSERT INTO @导入设备日期 VALUES (N'REALLY-68', '2025-08-30');
INSERT INTO @导入设备日期 VALUES (N'REALLY-69', '2025-09-05');
INSERT INTO @导入设备日期 VALUES (N'REALLY-70', '2025-09-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-71', '2014-06-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-74', '2025-09-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-72', '2025-12-04');
INSERT INTO @导入设备日期 VALUES (N'REALLY-73', '2026-01-10');
INSERT INTO @导入设备日期 VALUES (N'REALLY-75', '2026-02-10');
INSERT INTO @导入设备日期 VALUES (N'RELLY-54', '2025-12-01');
INSERT INTO @导入设备日期 VALUES (N'REALLY-76', '2025-12-11');
INSERT INTO @导入设备日期 VALUES (N'REALLY-77', '2026-03-09');
INSERT INTO @导入设备日期 VALUES (N'REALLY-78', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-79', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-80', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-81', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-82', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-83', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-84', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-85', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-86', NULL);
INSERT INTO @导入设备日期 VALUES (N'REALLY-87', '2026-05-20');
INSERT INTO @导入设备日期 VALUES (N'REALLY-88', NULL);
UPDATE target SET target.[入账日期] = source.[入账日期]
FROM [dbo].[基础数据_设备工位点检表] target INNER JOIN @导入设备日期 source ON target.[公司编码] = source.[公司编码];
SELECT COUNT(*) AS [设备信息日期修正后总数] FROM [dbo].[基础数据_设备工位点检表];
GO

View File

@@ -0,0 +1,120 @@
USE [YL_MESDB]
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_增加]
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 nvarchar(50) = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 nvarchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@公司编码, N'') = N''
BEGIN
SELECT '0' AS result, N'公司编码不能为空' AS message;
RETURN;
END
INSERT INTO [dbo].[基础数据_设备工位点检表] (
[公司编码],
[设备名称],
[设备型号],
[设备类型],
[设备信息],
[使用部门],
[入账日期],
[单位],
[数量],
[状态],
[维修记录],
[维保记录],
[工位绑定],
[主要设备],
[设备标准开机工时],
[特种设备],
[证书有效期至]
)
VALUES (
@公司编码,
@设备名称,
@设备型号,
@设备类型,
@设备信息,
@使用部门,
TRY_CONVERT(date, NULLIF(@入账日期, N'')),
@单位,
@数量,
@状态,
@维修记录,
@维保记录,
@工位绑定,
@主要设备,
@设备标准开机工时,
@特种设备,
TRY_CONVERT(date, NULLIF(@证书有效期至, N''))
);
SELECT '1' AS result;
END
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_编辑]
@设备流水号 int = NULL,
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 nvarchar(50) = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 nvarchar(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[基础数据_设备工位点检表]
SET
[设备名称] = @设备名称,
[设备型号] = @设备型号,
[设备类型] = @设备类型,
[设备信息] = @设备信息,
[使用部门] = @使用部门,
[入账日期] = TRY_CONVERT(date, NULLIF(@入账日期, N'')),
[单位] = @单位,
[数量] = @数量,
[状态] = @状态,
[维修记录] = @维修记录,
[维保记录] = @维保记录,
[工位绑定] = @工位绑定,
[主要设备] = @主要设备,
[设备标准开机工时] = @设备标准开机工时,
[特种设备] = @特种设备,
[证书有效期至] = TRY_CONVERT(date, NULLIF(@证书有效期至, N''))
WHERE [设备流水号] = @设备流水号;
SELECT '1' AS result;
END
GO

View File

@@ -0,0 +1,208 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '异常' THEN -ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM [dbo].[View_生产工时视图全部] v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
筛选明细 AS (
SELECT *
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
WHERE 操作类别编号 = 6
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
),
报工明细 AS (
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
b.TaskAID,
b.订单合同号 AS 合同号,
b.订单号,
b.产品编码,
b.产品名称,
b.工序名称,
b.工时类型,
b.计划数量,
b.工位名称 AS 指派对象,
ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(b.有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
b.异常说明,
b.工序说明,
b.操作类别
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
),
操作人报工数量 AS (
SELECT 操作人, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, TaskAID, 开始时间
) x
GROUP BY 操作人
),
日期报工数量 AS (
SELECT 操作人, 工作日期, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, 工作日期, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, 工作日期, TaskAID, 开始时间
) x
GROUP BY 操作人, 工作日期
),
操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 筛选明细
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM 筛选明细
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
)
SELECT
1 AS [Level],
s.操作人 AS operator,
'' AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.总工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 操作人汇总 s
LEFT JOIN 操作人报工数量 q ON q.操作人 = s.操作人
UNION ALL
SELECT
2 AS [Level],
s.操作人 AS operator,
s.工作日期 AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 日期汇总 s
LEFT JOIN 日期报工数量 q ON q.操作人 = s.操作人 AND q.工作日期 = s.工作日期
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
计划数量 AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(TaskAID AS VARCHAR(50)) AS TaskAID
FROM 报工明细
ORDER BY operator, dateLabel, [Level], startTime
END

View File

@@ -0,0 +1,192 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '异常' THEN -ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM [dbo].[View_生产工时视图全部] v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
SUM(CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END) AS 报工数量,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END) AS 报工数量,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
工时类型,
计划数量,
工位名称 AS 指派对象,
CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
异常说明,
工序说明,
操作类别
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
)
SELECT
1 AS [Level],
操作人 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
计划数量 AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END

View File

@@ -0,0 +1,209 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '异常' THEN -ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM [dbo].[View_生产工时视图全部] v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
筛选明细 AS (
SELECT *
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
where 操作类别编号 = 6
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
),
报工明细 AS (
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
b.TaskAID,
b.订单合同号 AS 合同号,
b.订单号,
b.产品编码,
b.产品名称,
b.工序名称,
b.工时类型,
b.计划数量,
b.工位名称 AS 指派对象,
ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(b.有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
b.异常说明,
b.工序说明,
b.操作类别
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
),
操作人报工数量 AS (
SELECT 操作人, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, TaskAID, 开始时间
) x
GROUP BY 操作人
),
日期报工数量 AS (
SELECT 操作人, 工作日期, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, 工作日期, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, 工作日期, TaskAID, 开始时间
) x
GROUP BY 操作人, 工作日期
),
操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 筛选明细
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM 筛选明细
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
)
SELECT
1 AS [Level],
s.操作人 AS operator,
'' AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.总工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 操作人汇总 s
LEFT JOIN 操作人报工数量 q ON q.操作人 = s.操作人
UNION ALL
SELECT
2 AS [Level],
s.操作人 AS operator,
s.工作日期 AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 日期汇总 s
LEFT JOIN 日期报工数量 q ON q.操作人 = s.操作人 AND q.工作日期 = s.工作日期
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
计划数量 AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(TaskAID AS VARCHAR(50)) AS TaskAID
FROM 报工明细
ORDER BY operator, dateLabel, [Level], startTime
END

View File

@@ -0,0 +1,209 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '异常' THEN -ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM [dbo].[View_生产工时视图全部] v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
筛选明细 AS (
SELECT *
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM 筛选明细
WHERE TaskAID IS NOT NULL
AND 开始时间 IS NOT NULL
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
),
报工明细 AS (
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
b.TaskAID,
b.订单合同号 AS 合同号,
b.订单号,
b.产品编码,
b.产品名称,
b.工序名称,
b.工时类型,
b.计划数量,
b.工位名称 AS 指派对象,
ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(b.有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
b.异常说明,
b.工序说明,
b.操作类别
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
),
操作人报工数量 AS (
SELECT 操作人, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, TaskAID, 开始时间
) x
GROUP BY 操作人
),
日期报工数量 AS (
SELECT 操作人, 工作日期, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, 工作日期, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, 工作日期, TaskAID, 开始时间
) x
GROUP BY 操作人, 工作日期
),
操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 筛选明细
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM 筛选明细
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
)
SELECT
1 AS [Level],
s.操作人 AS operator,
'' AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.总工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 操作人汇总 s
LEFT JOIN 操作人报工数量 q ON q.操作人 = s.操作人
UNION ALL
SELECT
2 AS [Level],
s.操作人 AS operator,
s.工作日期 AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 日期汇总 s
LEFT JOIN 日期报工数量 q ON q.操作人 = s.操作人 AND q.工作日期 = s.工作日期
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
计划数量 AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(TaskAID AS VARCHAR(50)) AS TaskAID
FROM 报工明细
ORDER BY operator, dateLabel, [Level], startTime
END

View File

@@ -0,0 +1,71 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
;WITH 筛选明细 AS (
SELECT *
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
WHERE 操作类别编号 = 6
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
)
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
ISNULL(b.订单合同号, '') AS 合同号,
ISNULL(b.订单号, '') AS 订单号,
ISNULL(b.产品编码, '') AS 产品编码,
ISNULL(b.产品名称, '') AS 产品名称,
ISNULL(b.工序名称, '') AS 工序名称,
ISNULL(b.工位名称, '') AS 指派对象,
CAST(ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END) AS VARCHAR(20)) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(CAST(b.总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
ORDER BY b.操作人, b.开始时间
END

View File

@@ -0,0 +1,47 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
ISNULL(工位名称, '') AS 指派对象,
CASE WHEN 操作类别 IN ('报工', '辅助结束', '加班', '异常', '开始加工') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
ORDER BY 操作人, 开始时间
END

View File

@@ -0,0 +1,70 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
;WITH 筛选明细 AS (
SELECT *
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
)
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
ISNULL(b.订单合同号, '') AS 合同号,
ISNULL(b.订单号, '') AS 订单号,
ISNULL(b.产品编码, '') AS 产品编码,
ISNULL(b.产品名称, '') AS 产品名称,
ISNULL(b.工序名称, '') AS 工序名称,
ISNULL(b.工位名称, '') AS 指派对象,
CAST(ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END) AS VARCHAR(20)) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(CAST(b.总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
ORDER BY b.操作人, b.开始时间
END

View File

@@ -0,0 +1,72 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
;WITH 筛选明细 AS (
SELECT *
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM 筛选明细
WHERE TaskAID IS NOT NULL
AND 开始时间 IS NOT NULL
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
)
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
ISNULL(b.订单合同号, '') AS 合同号,
ISNULL(b.订单号, '') AS 订单号,
ISNULL(b.产品编码, '') AS 产品编码,
ISNULL(b.产品名称, '') AS 产品名称,
ISNULL(b.工序名称, '') AS 工序名称,
ISNULL(b.工位名称, '') AS 指派对象,
CAST(ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END) AS VARCHAR(20)) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(CAST(b.总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
ORDER BY b.操作人, b.开始时间
END

View File

@@ -0,0 +1,298 @@
/*
过程异常管控并行审批调整
目标:
1. sp_创建流程_简化版 支持前端传入多个审批人,审批人ID/审批人姓名使用英文逗号分隔。
2. 多个审批人写入同一个步骤序号的多个 processing 节点,所有审批人可同时看到待办。
3. sp_获取待处理任务 兼容同一步骤多行节点,也兼容旧过程已写入的逗号分隔审批人ID。
4. sp_处理审批 中任意一个审批人同意后,当前流程直接完成,并关闭同一步骤其他待处理节点。
说明:本脚本仅定义存储过程,不插入业务数据。
*/
CREATE OR ALTER PROCEDURE [dbo].[sp_创建流程_简化版]
@流程标题 NVARCHAR(200),
@流程描述 NVARCHAR(MAX),
@优先级 NVARCHAR(20) = N'normal',
@发起人ID NVARCHAR(100),
@发起人姓名 NVARCHAR(100),
@审批人ID NVARCHAR(MAX),
@审批人姓名 NVARCHAR(MAX),
@新流程ID INT = 0,
@已关联计划号 NVARCHAR(100) = N'',
@零件名称 NVARCHAR(100) = N'',
@零件编号 NVARCHAR(100) = N'',
@工序名称 NVARCHAR(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @结果 INT = 0;
DECLARE @消息 NVARCHAR(500) = N'';
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @审批人IDXml XML;
DECLARE @审批人姓名Xml XML;
SET @审批人IDXml = CAST(
N'<i>' +
REPLACE(REPLACE(REPLACE(REPLACE(ISNULL(@审批人ID, N''), N'&', N'&amp;'), N'<', N'&lt;'), N'>', N'&gt;'), N',', N'</i><i>') +
N'</i>' AS XML
);
SET @审批人姓名Xml = CAST(
N'<i>' +
REPLACE(REPLACE(REPLACE(REPLACE(ISNULL(@审批人姓名, N''), N'&', N'&amp;'), N'<', N'&lt;'), N'>', N'&gt;'), N',', N'</i><i>') +
N'</i>' AS XML
);
DECLARE @审批人表 TABLE (
序号 INT IDENTITY(1, 1) PRIMARY KEY,
审批人ID NVARCHAR(100),
审批人姓名 NVARCHAR(100)
);
DECLARE @审批人ID表 TABLE (
序号 INT IDENTITY(1, 1) PRIMARY KEY,
审批人ID NVARCHAR(100)
);
DECLARE @审批人姓名表 TABLE (
序号 INT IDENTITY(1, 1) PRIMARY KEY,
审批人姓名 NVARCHAR(100)
);
INSERT INTO @审批人ID表 (审批人ID)
SELECT NULLIF(LTRIM(RTRIM(T.C.value(N'.', N'NVARCHAR(100)'))), N'')
FROM @审批人IDXml.nodes(N'/i') AS T(C);
INSERT INTO @审批人姓名表 (审批人姓名)
SELECT NULLIF(LTRIM(RTRIM(T.C.value(N'.', N'NVARCHAR(100)'))), N'')
FROM @审批人姓名Xml.nodes(N'/i') AS T(C);
INSERT INTO @审批人表 (审批人ID, 审批人姓名)
SELECT I.审批人ID, ISNULL(N.审批人姓名, I.审批人ID)
FROM @审批人ID表 I
LEFT JOIN @审批人姓名表 N ON N.序号 = I.序号
WHERE I.审批人ID IS NOT NULL;
IF NOT EXISTS (SELECT 1 FROM @审批人表)
BEGIN
INSERT INTO @审批人表 (审批人ID, 审批人姓名)
VALUES (@发起人ID, @发起人姓名);
END;
INSERT INTO [dbo].[流程表] (
流程标题,
流程描述,
优先级,
状态,
发起人ID,
发起人姓名,
当前节点,
当前步骤,
总步骤数,
已关联计划号,
零件名称,
零件编号,
工序名称,
创建时间,
更新时间
)
VALUES (
@流程标题,
@流程描述,
ISNULL(NULLIF(@优先级, N''), N'normal'),
N'processing',
@发起人ID,
@发起人姓名,
N'异常审批',
1,
1,
ISNULL(@已关联计划号, N''),
ISNULL(@零件名称, N''),
ISNULL(@零件编号, N''),
ISNULL(@工序名称, N''),
GETDATE(),
GETDATE()
);
SET @新流程ID = SCOPE_IDENTITY();
INSERT INTO [dbo].[流程节点表] (
流程ID,
节点名称,
审批人ID,
审批人姓名,
步骤序号,
状态,
是否转办
)
SELECT
@新流程ID,
N'异常审批',
审批人ID,
审批人姓名,
1,
N'processing',
0
FROM @审批人表;
SET @结果 = 1;
SET @消息 = N'流程创建成功,流程ID: ' + CAST(@新流程ID AS NVARCHAR(20));
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
SET @结果 = 0;
SET @消息 = N'错误: ' + ERROR_MESSAGE();
END CATCH;
SELECT @结果 AS 结果, @消息 AS 消息, @新流程ID AS 新流程ID;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[sp_获取待处理任务]
@审批人ID NVARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
SELECT
p.流程ID,
p.流程标题,
p.流程描述,
p.优先级,
p.状态,
p.发起人姓名 AS 申请人,
p.创建时间 AS 申请时间,
p.已关联计划号,
p.零件名称,
p.零件编号,
p.工序名称,
pn.节点ID,
pn.节点名称 AS 当前节点,
pn.是否转办
FROM [dbo].[流程节点表] pn
INNER JOIN [dbo].[流程表] p ON p.流程ID = pn.流程ID
WHERE pn.状态 = N'processing'
AND p.状态 = N'processing'
AND (
pn.审批人ID = @审批人ID
OR CHARINDEX(N',' + @审批人ID + N',', N',' + REPLACE(ISNULL(pn.审批人ID, N''), N',', N',') + N',') > 0
)
ORDER BY p.更新时间 DESC, p.创建时间 DESC;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[sp_处理审批]
@流程ID INT,
@节点ID INT,
@审批人ID NVARCHAR(100),
@审批人姓名 NVARCHAR(100),
@处理结果 NVARCHAR(20),
@审批意见 NVARCHAR(MAX) = N'',
@成功 BIT = 0
AS
BEGIN
SET NOCOUNT ON;
SET @成功 = 0;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @当前步骤 INT;
SELECT @当前步骤 = 步骤序号
FROM [dbo].[流程节点表]
WHERE 节点ID = @节点ID
AND 流程ID = @流程ID
AND 状态 = N'processing';
IF @当前步骤 IS NULL
BEGIN
RAISERROR(N'待处理节点不存在或已处理。', 16, 1);
END;
INSERT INTO [dbo].[审批记录表] (
流程ID,
节点ID,
审批人ID,
审批人姓名,
处理结果,
审批意见
)
VALUES (
@流程ID,
@节点ID,
@审批人ID,
@审批人姓名,
@处理结果,
ISNULL(@审批意见, N'')
);
IF @处理结果 = N'approved'
BEGIN
UPDATE [dbo].[流程节点表]
SET 状态 = N'approved'
WHERE 流程ID = @流程ID
AND 步骤序号 = @当前步骤
AND 状态 = N'processing';
UPDATE [dbo].[流程表]
SET 状态 = N'completed',
当前节点 = N'已完成',
更新时间 = GETDATE()
WHERE 流程ID = @流程ID;
IF COL_LENGTH(N'dbo.流程表', N'完成人') IS NOT NULL
BEGIN
EXEC sp_executesql
N'UPDATE [dbo].[流程表] SET 完成人 = @p审批人姓名 WHERE 流程ID = @p流程ID',
N'@p审批人姓名 NVARCHAR(100), @p流程ID INT',
@p审批人姓名 = @审批人姓名,
@p流程ID = @流程ID;
END;
IF COL_LENGTH(N'dbo.流程表', N'完成时间') IS NOT NULL
BEGIN
EXEC sp_executesql
N'UPDATE [dbo].[流程表] SET 完成时间 = GETDATE() WHERE 流程ID = @p流程ID',
N'@p流程ID INT',
@p流程ID = @流程ID;
END;
END
ELSE IF @处理结果 = N'rejected'
BEGIN
UPDATE [dbo].[流程节点表]
SET 状态 = N'rejected'
WHERE 流程ID = @流程ID
AND 步骤序号 = @当前步骤
AND 状态 = N'processing';
UPDATE [dbo].[流程表]
SET 状态 = N'rejected',
当前节点 = N'已拒绝',
更新时间 = GETDATE()
WHERE 流程ID = @流程ID;
END
ELSE
BEGIN
UPDATE [dbo].[流程节点表]
SET 状态 = @处理结果
WHERE 节点ID = @节点ID;
END;
SET @成功 = 1;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
SET @成功 = 0;
THROW;
END CATCH;
SELECT @成功 AS 成功;
END;
GO

View File

@@ -0,0 +1,190 @@
USE [YL_MESDB]
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'公司编码') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [公司编码] nvarchar(100) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'设备信息') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [设备信息] nvarchar(500) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'使用部门') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [使用部门] nvarchar(100) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'入账日期') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [入账日期] date NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'单位') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [单位] nvarchar(50) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'数量') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [数量] decimal(18, 4) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'状态') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [状态] nvarchar(50) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'维修记录') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [维修记录] nvarchar(1000) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'维保记录') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [维保记录] nvarchar(1000) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'工位绑定') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [工位绑定] nvarchar(1000) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'主要设备') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [主要设备] nvarchar(10) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'设备标准开机工时') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [设备标准开机工时] decimal(18, 4) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'特种设备') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [特种设备] nvarchar(10) NULL
GO
IF COL_LENGTH(N'dbo.基础数据_设备工位点检表', N'证书有效期至') IS NULL
ALTER TABLE [dbo].[基础数据_设备工位点检表] ADD [证书有效期至] date NULL
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_查询]
@设备名称_check bit = NULL,
@设备名称 nvarchar(50) = NULL,
@设备类型_check bit = NULL,
@设备类型 int = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
a.*,
d.[词条名称] AS [设备类型名称]
FROM [dbo].[基础数据_设备工位点检表] a
LEFT JOIN [dbo].[YL_基础表_数据字典] d ON a.[设备类型] = d.[AID]
WHERE (@设备名称_check IS NULL OR @设备名称_check = 0 OR a.[设备名称] LIKE N'%' + ISNULL(@设备名称, N'') + N'%')
AND (@设备类型_check IS NULL OR @设备类型_check = 0 OR a.[设备类型] = CONVERT(nvarchar(50), @设备类型))
ORDER BY
CASE
WHEN a.[证书有效期至] IS NOT NULL AND a.[证书有效期至] < CONVERT(date, GETDATE()) THEN 0
WHEN a.[证书有效期至] IS NOT NULL AND a.[证书有效期至] <= DATEADD(day, 30, CONVERT(date, GETDATE())) THEN 1
ELSE 2
END,
a.[证书有效期至],
a.[设备流水号] DESC;
END
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_增加]
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 date = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 date = NULL
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@公司编码, N'') = N''
BEGIN
SELECT '0' AS result, N'公司编码不能为空' AS message;
RETURN;
END
INSERT INTO [dbo].[基础数据_设备工位点检表] (
[公司编码],
[设备名称],
[设备型号],
[设备类型],
[设备信息],
[使用部门],
[入账日期],
[单位],
[数量],
[状态],
[维修记录],
[维保记录],
[工位绑定],
[主要设备],
[设备标准开机工时],
[特种设备],
[证书有效期至]
)
VALUES (
@公司编码,
@设备名称,
@设备型号,
@设备类型,
@设备信息,
@使用部门,
@入账日期,
@单位,
@数量,
@状态,
@维修记录,
@维保记录,
@工位绑定,
@主要设备,
@设备标准开机工时,
@特种设备,
@证书有效期至
);
SELECT '1' AS result;
END
GO
ALTER PROCEDURE [dbo].[设备管理_设备信息_编辑]
@设备流水号 int = NULL,
@公司编码 nvarchar(100) = NULL,
@设备名称 nvarchar(50) = NULL,
@设备型号 nvarchar(50) = NULL,
@设备类型 nvarchar(50) = NULL,
@设备信息 nvarchar(500) = NULL,
@使用部门 nvarchar(100) = NULL,
@入账日期 date = NULL,
@单位 nvarchar(50) = NULL,
@数量 decimal(18, 4) = NULL,
@状态 nvarchar(50) = NULL,
@维修记录 nvarchar(1000) = NULL,
@维保记录 nvarchar(1000) = NULL,
@工位绑定 nvarchar(1000) = NULL,
@主要设备 nvarchar(10) = NULL,
@设备标准开机工时 decimal(18, 4) = NULL,
@特种设备 nvarchar(10) = NULL,
@证书有效期至 date = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[基础数据_设备工位点检表]
SET
[设备名称] = @设备名称,
[设备型号] = @设备型号,
[设备类型] = @设备类型,
[设备信息] = @设备信息,
[使用部门] = @使用部门,
[入账日期] = @入账日期,
[单位] = @单位,
[数量] = @数量,
[状态] = @状态,
[维修记录] = @维修记录,
[维保记录] = @维保记录,
[工位绑定] = @工位绑定,
[主要设备] = @主要设备,
[设备标准开机工时] = @设备标准开机工时,
[特种设备] = @特种设备,
[证书有效期至] = @证书有效期至
WHERE [设备流水号] = @设备流水号;
SELECT '1' AS result;
END
GO

View File

@@ -0,0 +1,290 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '异常' THEN -ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM [dbo].[View_生产工时视图全部] v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
筛选明细 AS (
SELECT *
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
),
报工明细 AS (
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
b.TaskAID,
b.订单合同号 AS 合同号,
b.订单号,
b.产品编码,
b.产品名称,
b.工序名称,
b.工时类型,
b.计划数量,
b.工位名称 AS 指派对象,
CASE
WHEN ISNULL(b.工位名称, '') LIKE '%装配%' THEN 0
ELSE ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END)
END AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(b.有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
b.异常说明,
b.工序说明,
b.操作类别
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
),
操作人报工数量 AS (
SELECT 操作人, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, TaskAID, 开始时间
) x
GROUP BY 操作人
),
日期报工数量 AS (
SELECT 操作人, 工作日期, SUM(报工数量) AS 报工数量
FROM (
SELECT 操作人, 工作日期, TaskAID, 开始时间, MAX(报工数量) AS 报工数量
FROM 报工明细
WHERE TaskAID IS NOT NULL AND 开始时间 IS NOT NULL AND 开始时间 != ''
GROUP BY 操作人, 工作日期, TaskAID, 开始时间
) x
GROUP BY 操作人, 工作日期
),
操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 筛选明细
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM 筛选明细
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
)
SELECT
1 AS [Level],
s.操作人 AS operator,
'' AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.总工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 操作人汇总 s
LEFT JOIN 操作人报工数量 q ON q.操作人 = s.操作人
UNION ALL
SELECT
2 AS [Level],
s.操作人 AS operator,
s.工作日期 AS dateLabel,
CAST(s.报工次数 AS VARCHAR(20)) AS reportCount,
CAST(ISNULL(q.报工数量, 0) AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(s.工时小时 AS VARCHAR(20)) AS workHours,
'' AS TaskAID
FROM 日期汇总 s
LEFT JOIN 日期报工数量 q ON q.操作人 = s.操作人 AND q.工作日期 = s.工作日期
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
计划数量 AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(TaskAID AS VARCHAR(50)) AS TaskAID
FROM 报工明细
ORDER BY operator, dateLabel, [Level], startTime
END
GO
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
;WITH 筛选明细 AS (
SELECT *
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 NOT IN ('异常') THEN ISNULL(操作数值, 0)
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE 0
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
)
SELECT
b.操作人,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
ISNULL(b.订单合同号, '') AS 合同号,
ISNULL(b.订单号, '') AS 订单号,
ISNULL(b.产品编码, '') AS 产品编码,
ISNULL(b.产品名称, '') AS 产品名称,
ISNULL(b.工序名称, '') AS 工序名称,
ISNULL(b.工位名称, '') AS 指派对象,
CAST(CASE
WHEN ISNULL(b.工位名称, '') LIKE '%装配%' THEN 0
ELSE ISNULL(q.报工数量, CASE
WHEN b.操作类别 NOT IN ('异常') THEN ISNULL(b.操作数值, 0)
WHEN b.操作类别 = '异常' THEN -ISNULL(b.操作数值, 0)
ELSE 0
END)
END AS VARCHAR(20)) AS 报工数量,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), b.结束时间, 120) AS 结束时间,
CAST(CAST(b.总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM 筛选明细 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
ORDER BY b.操作人, b.开始时间
END
GO

View File

@@ -0,0 +1,253 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[生产管理_工时查询_工序工时_查询]
@合同号 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL,
@数据条数 INT = 100
AS
BEGIN
SET NOCOUNT ON;
;WITH 基础数据 AS (
SELECT TOP (CASE WHEN ISNULL(@数据条数, 0) <= 0 THEN 100 ELSE @数据条数 END)
v.开始时间,
v.结束时间,
v.操作内容,
v.操作类别,
v.操作描述,
v.加工工时,
v.操作数值,
v.订单号,
v.订单行号,
v.订单合同号,
v.产品编码,
v.产品名称,
v.工序名称,
v.TaskAID,
v.工位名称,
CASE
WHEN ISNULL(v.操作内容, '') LIKE '%辅助%' OR ISNULL(v.操作类别, '') LIKE '%辅助%' THEN '调机'
WHEN ISNULL(v.操作内容, '') LIKE '%报工%' OR ISNULL(v.操作类别, '') LIKE '%报工%' THEN '正常'
ELSE ISNULL(NULLIF(v.操作内容, ''), v.操作类别)
END AS 报工类型,
p.标准工时 AS 工艺工时
FROM [dbo].[View_生产工时视图] v
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] p
ON v.订单号 = p.订单编号
AND v.订单行号 = p.工艺顺序
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR v.开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR v.开始时间 < DATEADD(DAY, 1, @结束日期))
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 = @订单号)
AND (ISNULL(v.操作内容, '') IN ('报工', '辅助结束') OR ISNULL(v.操作类别, '') IN ('报工', '辅助结束'))
AND ISNULL(v.加工工时, 0) > 0
ORDER BY v.开始时间 DESC
),
明细键 AS (
SELECT DISTINCT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间
FROM 基础数据
),
TaskStart报工数量 AS (
SELECT
TaskAID,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
MAX(CASE
WHEN 操作类别 = '异常' THEN -ISNULL(操作数值, 0)
ELSE ISNULL(操作数值, 0)
END) AS 报工数量
FROM [dbo].[View_生产工时视图全部]
GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)
),
TaskStart扩展 AS (
SELECT
k.TaskAID,
k.开始时间,
CASE
WHEN EXISTS (
SELECT 1
FROM [dbo].[View_生产工时视图全部] v
WHERE v.TaskAID = k.TaskAID
AND CONVERT(VARCHAR(19), v.开始时间, 120) = k.开始时间
AND ISNULL(v.操作描述, '') LIKE '%白班%'
) THEN '白班'
WHEN EXISTS (
SELECT 1
FROM [dbo].[View_生产工时视图全部] v
WHERE v.TaskAID = k.TaskAID
AND CONVERT(VARCHAR(19), v.开始时间, 120) = k.开始时间
AND ISNULL(v.操作描述, '') LIKE '%夜班%'
) THEN '夜班'
ELSE ''
END AS 班次,
(
SELECT STRING_AGG(x.操作人, ',')
FROM (
SELECT DISTINCT LTRIM(RTRIM(v2.操作人)) AS 操作人
FROM [dbo].[View_生产工时视图全部] v2
WHERE v2.TaskAID = k.TaskAID
AND CONVERT(VARCHAR(19), v2.开始时间, 120) = k.开始时间
AND ISNULL(v2.加工工时, 0) <= 0
AND NULLIF(LTRIM(RTRIM(ISNULL(v2.操作人, ''))), '') IS NOT NULL
) x
) AS 操作人
FROM 明细键 k
),
明细数据 AS (
SELECT
b.TaskAID,
ISNULL(b.产品名称, '') + ' ' + ISNULL(b.产品编码, '') + ' ' + ISNULL(b.工序名称, '') + ' 序' + CAST(ISNULL(b.订单行号, 0) AS VARCHAR(50)) AS 任务描述,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
e.班次,
e.操作人,
b.订单号 AS 生产订单号,
b.报工类型,
qv.报工数量,
b.工位名称 AS 工位名称,
CAST(ISNULL(b.加工工时, 0) / 60.0 / 60.0 AS DECIMAL(10, 2)) AS 工时小时,
CAST(ISNULL(b.加工工时, 0) / 60.0 AS DECIMAL(10, 2)) AS 工时分钟,
'' AS 程序时间,
CASE
WHEN qv.报工数量 > 0 THEN CAST((ISNULL(b.加工工时, 0) / 60.0) / qv.报工数量 AS DECIMAL(10, 2))
ELSE CAST(ISNULL(b.工艺工时, 0) AS DECIMAL(10, 2))
END AS 单件工时,
b.工艺工时,
CONVERT(VARCHAR(19), b.开始时间, 120) AS 开始时间
FROM 基础数据 b
LEFT JOIN TaskStart报工数量 q
ON q.TaskAID = b.TaskAID
AND q.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
LEFT JOIN TaskStart扩展 e
ON e.TaskAID = b.TaskAID
AND e.开始时间 = CONVERT(VARCHAR(19), b.开始时间, 120)
CROSS APPLY (
SELECT CASE
WHEN ISNULL(b.工位名称, '') LIKE '%装配%' THEN 0
ELSE ISNULL(q.报工数量, ISNULL(b.操作数值, 0))
END AS 报工数量
) qv
),
去重数量 AS (
SELECT
TaskAID,
工作日期,
开始时间,
MAX(报工数量) AS 报工数量
FROM 明细数据
GROUP BY TaskAID, 工作日期, 开始时间
),
Task数量汇总 AS (
SELECT TaskAID, SUM(报工数量) AS 报工数量
FROM 去重数量
GROUP BY TaskAID
),
日期数量汇总 AS (
SELECT TaskAID, 工作日期, SUM(报工数量) AS 报工数量
FROM 去重数量
GROUP BY TaskAID, 工作日期
),
Task汇总 AS (
SELECT
m.TaskAID,
MAX(m.任务描述) AS 任务描述,
COUNT(*) AS 报工次数,
ISNULL(q.报工数量, 0) AS 报工数量,
SUM(m.工时小时) AS 工时小时,
SUM(m.工时分钟) AS 工时分钟,
MAX(m.工艺工时) AS 工艺工时
FROM 明细数据 m
LEFT JOIN Task数量汇总 q ON q.TaskAID = m.TaskAID
GROUP BY m.TaskAID, q.报工数量
),
日期汇总 AS (
SELECT
m.TaskAID,
MAX(m.任务描述) AS 任务描述,
m.工作日期,
COUNT(*) AS 报工次数,
ISNULL(q.报工数量, 0) AS 报工数量,
SUM(m.工时小时) AS 工时小时,
SUM(m.工时分钟) AS 工时分钟,
MAX(m.工艺工时) AS 工艺工时
FROM 明细数据 m
LEFT JOIN 日期数量汇总 q ON q.TaskAID = m.TaskAID AND q.工作日期 = m.工作日期
GROUP BY m.TaskAID, m.工作日期, q.报工数量
)
SELECT
1 AS [Level],
TaskAID,
任务描述 AS taskDescription,
'' AS dateLabel,
'' AS shift,
'' AS operatorNames,
'' AS productionOrderNo,
'' AS reportType,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS station,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(工时小时 AS VARCHAR(20)) AS actualWorkHours,
'' AS programTime,
CAST(CASE WHEN 报工数量 > 0 THEN 工时分钟 / 报工数量 ELSE ISNULL(工艺工时, 0) END AS VARCHAR(20)) AS pieceWorkHours,
CAST(ISNULL(工艺工时, 0) AS VARCHAR(20)) AS processWorkHours,
'' AS startTime,
CAST(报工次数 AS VARCHAR(20)) AS reportCount
FROM Task汇总
UNION ALL
SELECT
2 AS [Level],
TaskAID,
任务描述 AS taskDescription,
工作日期 AS dateLabel,
'' AS shift,
'' AS operatorNames,
'' AS productionOrderNo,
'' AS reportType,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS station,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(工时小时 AS VARCHAR(20)) AS actualWorkHours,
'' AS programTime,
CAST(CASE WHEN 报工数量 > 0 THEN 工时分钟 / 报工数量 ELSE ISNULL(工艺工时, 0) END AS VARCHAR(20)) AS pieceWorkHours,
CAST(ISNULL(工艺工时, 0) AS VARCHAR(20)) AS processWorkHours,
'' AS startTime,
CAST(报工次数 AS VARCHAR(20)) AS reportCount
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
TaskAID,
任务描述 AS taskDescription,
工作日期 AS dateLabel,
班次 AS shift,
ISNULL(操作人, '') AS operatorNames,
ISNULL(生产订单号, '') AS productionOrderNo,
ISNULL(报工类型, '') AS reportType,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(工位名称, '') AS station,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
CAST(工时小时 AS VARCHAR(20)) AS actualWorkHours,
程序时间 AS programTime,
CAST(单件工时 AS VARCHAR(20)) AS pieceWorkHours,
CAST(ISNULL(工艺工时, 0) AS VARCHAR(20)) AS processWorkHours,
开始时间 AS startTime,
'' AS reportCount
FROM 明细数据
ORDER BY TaskAID, dateLabel, [Level], startTime
END
GO

View File

@@ -0,0 +1,238 @@
CREATE PROCEDURE [dbo].[生产管理_工时查询_工序工时_查询]
@合同号 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL,
@数据条数 int = 100
AS
BEGIN
SET NOCOUNT ON;
-- 获取班次信息
DECLARE @白班开始时间 TIME = '07:45:00'
DECLARE @白班结束时间 TIME = '16:30:00'
DECLARE @夜班开始时间 TIME = '16:30:00'
DECLARE @夜班结束时间 TIME = '00:40:00'
;WITH 基础数据 AS (
SELECT top (@数据条数)
v.开始时间,
v.结束时间,
v.操作内容,
v.加工工时,
v.操作数值,
v.订单号,
v.订单行号,
v.订单合同号,
v.产品编码,
v.产品名称,
v.工序名称,
v.TaskAID,
v.工位名称,
-- 根据时间判断班次
CASE
WHEN CAST(v.开始时间 AS TIME) >= @白班开始时间
AND CAST(v.开始时间 AS TIME) < @白班结束时间 THEN '白班'
WHEN CAST(v.开始时间 AS TIME) >= @夜班开始时间
OR CAST(v.开始时间 AS TIME) < @夜班结束时间 THEN '夜班'
ELSE '其他'
END AS 计算班次,
-- 标记实际工时和辅助工时
CASE WHEN v.操作内容 = '报工' THEN v.加工工时 ELSE 0 END AS 实际加工工时,
CASE WHEN v.操作内容 = '辅助结束' THEN v.加工工时 ELSE 0 END AS 辅助加工工时,
-- 标记报工数量和辅助数量
CASE WHEN v.操作内容 = '报工' THEN v.操作数值 ELSE 0 END AS 实际报工数量,
CASE WHEN v.操作内容 = '辅助结束' THEN v.操作数值 ELSE 0 END AS 辅助报工数量,
-- 关联工艺库获取标准工时(工艺工时)
p.标准工时 AS 工艺工时
FROM View_生产工时视图 v
LEFT JOIN 车间生产管理工艺_零件生产工艺_工艺库 p
ON v.订单号 = p.订单编号
AND v.订单行号 = p.工艺顺序
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR v.开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR v.结束时间 >= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 = @订单号)
-- 去掉报工时间为0的数据(实际加工工时或辅助加工工时不为0)
AND (CASE WHEN v.操作内容 = '报工' THEN v.加工工时 ELSE 0 END > 0
OR CASE WHEN v.操作内容 = '辅助结束' THEN v.加工工时 ELSE 0 END > 0)
),
-- 获取每个TaskAID对应的任务描述(取第一条记录)
Task描述 AS (
SELECT DISTINCT
TaskAID,
-- 任务描述:产品名称 + 产品编码 + 工序名称
ISNULL(产品名称, '') + ' ' + ISNULL(产品编码, '') + ' ' + ISNULL(工序名称, '') + ' 序'+ CAST(订单行号 AS VARCHAR(50)) AS 任务描述
FROM 基础数据
),
-- 第一层:按TaskAID汇总
TaskAID汇总 AS (
SELECT
b.TaskAID,
t.任务描述,
'' AS 工作日期,
'' AS 班次,
COUNT(*) AS 报工次数,
SUM(实际报工数量) AS 实际报工数量,
SUM(辅助报工数量) AS 辅助报工数量,
CAST(SUM(实际加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 实际工时小时,
CAST(SUM(辅助加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 辅助工时小时,
-- 计算平均实际工时(实际加工工时/实际报工数量)
CASE
WHEN SUM(实际报工数量) > 0
THEN CAST((SUM(实际加工工时) / 60.0 / 60.0) / SUM(实际报工数量) AS DECIMAL(10,2))
ELSE 0
END AS 平均实际工时,
-- 计算平均辅助工时(辅助加工工时/辅助报工数量)
CASE
WHEN SUM(辅助报工数量) > 0
THEN CAST((SUM(辅助加工工时) / 60.0 / 60.0) / SUM(辅助报工数量) AS DECIMAL(10,2))
ELSE 0
END AS 平均辅助工时,
-- 工艺工时(取第一条记录的工艺工时)
MAX(b.工艺工时) AS 工艺工时
FROM 基础数据 b
LEFT JOIN Task描述 t ON b.TaskAID = t.TaskAID
GROUP BY b.TaskAID, t.任务描述
),
-- 第二层:按TaskAID和日期汇总
日期汇总 AS (
SELECT
b.TaskAID,
t.任务描述,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
'' AS 班次,
COUNT(*) AS 报工次数,
SUM(实际报工数量) AS 实际报工数量,
SUM(辅助报工数量) AS 辅助报工数量,
CAST(SUM(实际加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 实际工时小时,
CAST(SUM(辅助加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 辅助工时小时,
-- 计算平均实际工时(实际加工工时/实际报工数量)
CASE
WHEN SUM(实际报工数量) > 0
THEN CAST((SUM(实际加工工时) / 60.0 / 60.0) / SUM(实际报工数量) AS DECIMAL(10,2))
ELSE 0
END AS 平均实际工时,
-- 计算平均辅助工时(辅助加工工时/辅助报工数量)
CASE
WHEN SUM(辅助报工数量) > 0
THEN CAST((SUM(辅助加工工时) / 60.0 / 60.0) / SUM(辅助报工数量) AS DECIMAL(10,2))
ELSE 0
END AS 平均辅助工时,
-- 工艺工时(取该日期第一条记录的工艺工时)
MAX(b.工艺工时) AS 工艺工时
FROM 基础数据 b
LEFT JOIN Task描述 t ON b.TaskAID = t.TaskAID
GROUP BY b.TaskAID, t.任务描述, CONVERT(VARCHAR(10), b.开始时间, 120)
),
-- 第三层:按TaskAID、日期和班次汇总
班次汇总 AS (
SELECT
b.TaskAID,
t.任务描述,
CONVERT(VARCHAR(10), b.开始时间, 120) AS 工作日期,
b.计算班次,
b.工位名称,
COUNT(*) AS 报工次数,
SUM(实际报工数量) AS 实际报工数量,
SUM(辅助报工数量) AS 辅助报工数量,
CAST(SUM(实际加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 实际工时小时,
CAST(SUM(辅助加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 辅助工时小时,
-- 计算平均实际工时(实际加工工时/实际报工数量)
CASE
WHEN SUM(实际报工数量) > 0
THEN CAST((SUM(实际加工工时) / 60.0 / 60.0) / SUM(实际报工数量) AS DECIMAL(10,2))
ELSE 0
END AS 平均实际工时,
-- 计算平均辅助工时(辅助加工工时/辅助报工数量)
CASE
WHEN SUM(辅助报工数量) > 0
THEN CAST((SUM(辅助加工工时) / 60.0 / 60.0) / SUM(辅助报工数量) AS DECIMAL(10,2))
ELSE 0
END AS 平均辅助工时,
-- 工艺工时(取该班次第一条记录的工艺工时)
MAX(b.工艺工时) AS 工艺工时
FROM 基础数据 b
LEFT JOIN Task描述 t ON b.TaskAID = t.TaskAID
GROUP BY b.TaskAID, t.任务描述, CONVERT(VARCHAR(10), b.开始时间, 120), b.计算班次, b.工位名称
)
-- 第一层:TaskAID汇总
SELECT
1 AS [Level],
TaskAID,
任务描述 AS taskDescription,
'' AS dateLabel,
'' AS shift,
'' AS 工位名称,
CAST(实际报工数量 AS VARCHAR(20)) AS reportQty,
CAST(实际工时小时 AS VARCHAR(20)) AS actualWorkHours,
CAST(辅助工时小时 AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST(平均实际工时 AS VARCHAR(20)) AS avgActualWorkHours,
CAST(平均辅助工时 AS VARCHAR(20)) AS avgAuxiliaryWorkHours,
CAST(ISNULL(工艺工时, 0) AS VARCHAR(20)) AS processWorkHours, -- 工艺工时
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(报工次数 AS VARCHAR(20)) AS reportCount
FROM TaskAID汇总
WHERE 实际工时小时 > 0 OR 辅助工时小时 > 0
UNION ALL
-- 第二层:日期汇总
SELECT
2 AS [Level],
TaskAID,
任务描述 AS taskDescription,
工作日期 AS dateLabel,
'' AS shift,
'' AS 工位名称,
CAST(实际报工数量 AS VARCHAR(20)) AS reportQty,
CAST(实际工时小时 AS VARCHAR(20)) AS actualWorkHours,
CAST(辅助工时小时 AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST(平均实际工时 AS VARCHAR(20)) AS avgActualWorkHours,
CAST(平均辅助工时 AS VARCHAR(20)) AS avgAuxiliaryWorkHours,
CAST(ISNULL(工艺工时, 0) AS VARCHAR(20)) AS processWorkHours, -- 工艺工时
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(报工次数 AS VARCHAR(20)) AS reportCount
FROM 日期汇总
WHERE 实际工时小时 > 0 OR 辅助工时小时 > 0
UNION ALL
-- 第三层:班次汇总
SELECT
3 AS [Level],
TaskAID,
任务描述 AS taskDescription,
工作日期 AS dateLabel,
计算班次 AS shift,
工位名称 AS 工位名称,
CAST(实际报工数量 AS VARCHAR(20)) AS reportQty,
CAST(实际工时小时 AS VARCHAR(20)) AS actualWorkHours,
CAST(辅助工时小时 AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST(平均实际工时 AS VARCHAR(20)) AS avgActualWorkHours,
CAST(平均辅助工时 AS VARCHAR(20)) AS avgAuxiliaryWorkHours,
CAST(ISNULL(工艺工时, 0) AS VARCHAR(20)) AS processWorkHours, -- 工艺工时
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(报工次数 AS VARCHAR(20)) AS reportCount
FROM 班次汇总
WHERE 实际工时小时 > 0 OR 辅助工时小时 > 0
ORDER BY TaskAID, dateLabel, shift, [Level]
END