From e0e1b5d2bbc4c90884ef37db9a0a8bce50dba398 Mon Sep 17 00:00:00 2001 From: zhangxinyang Date: Mon, 29 Jun 2026 18:27:00 +0800 Subject: [PATCH] feat: update MES pages and tracking docs --- ..._device_name_and_import_excel_20260629.sql | 169 +++ ...add_settlement_workhours_menu_20260627.sql | 43 + ...mely_kit_tracking_result_menu_20260629.sql | 85 ++ ...te_settlement_workhours_query_20260627.sql | 231 ++++ ...te_timely_kit_tracking_result_20260629.sql | 410 ++++++ ...vice_add_company_code_message_20260629.sql | 76 ++ ...fix_device_excel_import_dates_20260629.sql | 96 ++ ..._device_information_date_edit_20260629.sql | 120 ++ ..._before_assembly_zero_reportqty_20260627_145839.sql | 208 +++ ...查询_before_taskstart_reportqty_20260627_133625.sql | 192 +++ ..._before_taskstart_reportqty_type6_20260627_144642.sql | 209 +++ ...re_unfiltered_taskstart_reportqty_20260627_141106.sql | 209 +++ ...出_before_assembly_zero_reportqty_20260627_145839.sql | 71 + ..._导出_before_taskstart_reportqty_20260627_133625.sql | 47 + ..._before_taskstart_reportqty_type6_20260627_144642.sql | 70 + ...fore_unfiltered_taskstart_reportqty_20260627_141106.sql | 72 + ...mal_control_parallel_approval_20260627.sql | 298 +++++ ...evice_information_maintenance_20260629.sql | 190 +++ ...perator_report_qty_task_start_20260627.sql | 290 ++++ ...update_workhours_query_detail_20260627.sql | 253 ++++ ...序工时_查询_before_detail_query_20260627_152142.sql | 238 ++++ doc/修改工时报表.docx | Bin 0 -> 133153 bytes doc/修改设备信息维护.docx | Bin 0 -> 18500 bytes doc/修改过程异常管控.docx | Bin 0 -> 73193 bytes doc/工时查询界面.docx | Bin 0 -> 64907 bytes doc/新增及时齐套跟踪结果.docx | Bin 0 -> 117302 bytes doc/新增结算工时页面.docx | Bin 0 -> 30350 bytes doc/设备信息.xlsx | Bin 0 -> 18573 bytes gptlog-process/gpdlog.md | 1167 +++++++++++++++++ .../DeviceInformation/index.vue | 631 +++++---- .../TimelyKitTrackingResult/index.vue | 544 ++++++++ .../AbnormalControl/index.vue | 1013 +------------- .../AssemblyCenter/index.vue | 19 +- .../MachiningCenter/index.vue | 97 +- .../SettlementWorkhours/index.vue | 298 +++++ .../ProductionManagement/Timesheet/index.vue | 124 +- .../ProductionManagement/Workhours/index.vue | 161 +-- .../components/AbnormalControlPanel.vue | 994 ++++++++++++++ .../DeviceInformation/01-项目功能内容.md | 61 + .../02-项目程序开发详细步骤.md | 58 + .../DeviceInformation/03-推进台账.md | 185 +++ .../DeviceInformation/04-任务矩阵.md | 25 + .../DeviceInformation/05-验收证据.md | 288 ++++ .../DeviceInformation/06-决策记录.md | 49 + .../DeviceInformation/README.md | 18 + .../DeviceInformation/修改设备信息维护.docx | Bin 0 -> 18500 bytes .../DeviceInformation/设备信息.xlsx | Bin 0 -> 18573 bytes .../01-项目功能内容.md | 34 + .../02-项目程序开发详细步骤.md | 45 + .../TimelyKitTrackingResult/03-推进台账.md | 105 ++ .../TimelyKitTrackingResult/04-任务矩阵.md | 20 + .../TimelyKitTrackingResult/05-验收证据.md | 200 +++ .../TimelyKitTrackingResult/06-决策记录.md | 73 ++ .../TimelyKitTrackingResult/README.md | 17 + .../新增及时齐套跟踪结果.docx | Bin 0 -> 117302 bytes .../SettlementWorkhours/新增结算工时页面.docx | Bin 0 -> 30350 bytes .../Timesheet/修改工时报表.docx | Bin 0 -> 133153 bytes .../WorkHoursCheck/修改过程异常管控.docx | Bin 0 -> 73193 bytes .../Workhours/工时查询界面.docx | Bin 0 -> 64907 bytes 59 files changed, 8405 insertions(+), 1398 deletions(-) create mode 100644 db_backups/add_device_name_and_import_excel_20260629.sql create mode 100644 db_backups/add_settlement_workhours_menu_20260627.sql create mode 100644 db_backups/add_timely_kit_tracking_result_menu_20260629.sql create mode 100644 db_backups/create_settlement_workhours_query_20260627.sql create mode 100644 db_backups/create_timely_kit_tracking_result_20260629.sql create mode 100644 db_backups/fix_device_add_company_code_message_20260629.sql create mode 100644 db_backups/fix_device_excel_import_dates_20260629.sql create mode 100644 db_backups/fix_device_information_date_edit_20260629.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_assembly_zero_reportqty_20260627_145839.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_20260627_133625.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_type6_20260627_144642.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_unfiltered_taskstart_reportqty_20260627_141106.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_assembly_zero_reportqty_20260627_145839.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_20260627_133625.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_type6_20260627_144642.sql create mode 100644 db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_unfiltered_taskstart_reportqty_20260627_141106.sql create mode 100644 db_backups/update_abnormal_control_parallel_approval_20260627.sql create mode 100644 db_backups/update_device_information_maintenance_20260629.sql create mode 100644 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql create mode 100644 db_backups/update_workhours_query_detail_20260627.sql create mode 100644 db_backups/workhours_query_backups/生产管理_工时查询_工序工时_查询_before_detail_query_20260627_152142.sql create mode 100644 doc/修改工时报表.docx create mode 100644 doc/修改设备信息维护.docx create mode 100644 doc/修改过程异常管控.docx create mode 100644 doc/工时查询界面.docx create mode 100644 doc/新增及时齐套跟踪结果.docx create mode 100644 doc/新增结算工时页面.docx create mode 100644 doc/设备信息.xlsx create mode 100644 gptlog-process/gpdlog.md create mode 100644 src/views/PlanManagement/TimelyKitTrackingResult/index.vue create mode 100644 src/views/ProductionManagement/SettlementWorkhours/index.vue create mode 100644 src/views/ProductionManagement/components/AbnormalControlPanel.vue create mode 100644 work/DeviceManagement/DeviceInformation/01-项目功能内容.md create mode 100644 work/DeviceManagement/DeviceInformation/02-项目程序开发详细步骤.md create mode 100644 work/DeviceManagement/DeviceInformation/03-推进台账.md create mode 100644 work/DeviceManagement/DeviceInformation/04-任务矩阵.md create mode 100644 work/DeviceManagement/DeviceInformation/05-验收证据.md create mode 100644 work/DeviceManagement/DeviceInformation/06-决策记录.md create mode 100644 work/DeviceManagement/DeviceInformation/README.md create mode 100644 work/DeviceManagement/DeviceInformation/修改设备信息维护.docx create mode 100644 work/DeviceManagement/DeviceInformation/设备信息.xlsx create mode 100644 work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/README.md create mode 100644 work/PlanManagement/TimelyKitTrackingResult/新增及时齐套跟踪结果.docx create mode 100644 work/ProductionManagement/SettlementWorkhours/新增结算工时页面.docx create mode 100644 work/ProductionManagement/Timesheet/修改工时报表.docx create mode 100644 work/ProductionManagement/WorkHoursCheck/修改过程异常管控.docx create mode 100644 work/ProductionManagement/Workhours/工时查询界面.docx diff --git a/db_backups/add_device_name_and_import_excel_20260629.sql b/db_backups/add_device_name_and_import_excel_20260629.sql new file mode 100644 index 0000000..f92ec90 --- /dev/null +++ b/db_backups/add_device_name_and_import_excel_20260629.sql @@ -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 diff --git a/db_backups/add_settlement_workhours_menu_20260627.sql b/db_backups/add_settlement_workhours_menu_20260627.sql new file mode 100644 index 0000000..2152d1b --- /dev/null +++ b/db_backups/add_settlement_workhours_menu_20260627.sql @@ -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 diff --git a/db_backups/add_timely_kit_tracking_result_menu_20260629.sql b/db_backups/add_timely_kit_tracking_result_menu_20260629.sql new file mode 100644 index 0000000..3422f66 --- /dev/null +++ b/db_backups/add_timely_kit_tracking_result_menu_20260629.sql @@ -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]; diff --git a/db_backups/create_settlement_workhours_query_20260627.sql b/db_backups/create_settlement_workhours_query_20260627.sql new file mode 100644 index 0000000..9cc86a1 --- /dev/null +++ b/db_backups/create_settlement_workhours_query_20260627.sql @@ -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 diff --git a/db_backups/create_timely_kit_tracking_result_20260629.sql b/db_backups/create_timely_kit_tracking_result_20260629.sql new file mode 100644 index 0000000..066949f --- /dev/null +++ b/db_backups/create_timely_kit_tracking_result_20260629.sql @@ -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 diff --git a/db_backups/fix_device_add_company_code_message_20260629.sql b/db_backups/fix_device_add_company_code_message_20260629.sql new file mode 100644 index 0000000..76000b7 --- /dev/null +++ b/db_backups/fix_device_add_company_code_message_20260629.sql @@ -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 diff --git a/db_backups/fix_device_excel_import_dates_20260629.sql b/db_backups/fix_device_excel_import_dates_20260629.sql new file mode 100644 index 0000000..74499bd --- /dev/null +++ b/db_backups/fix_device_excel_import_dates_20260629.sql @@ -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 \ No newline at end of file diff --git a/db_backups/fix_device_information_date_edit_20260629.sql b/db_backups/fix_device_information_date_edit_20260629.sql new file mode 100644 index 0000000..b71ab48 --- /dev/null +++ b/db_backups/fix_device_information_date_edit_20260629.sql @@ -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 diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_assembly_zero_reportqty_20260627_145839.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_assembly_zero_reportqty_20260627_145839.sql new file mode 100644 index 0000000..975b5b3 --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_assembly_zero_reportqty_20260627_145839.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_20260627_133625.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_20260627_133625.sql new file mode 100644 index 0000000..cf6ed15 --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_20260627_133625.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_type6_20260627_144642.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_type6_20260627_144642.sql new file mode 100644 index 0000000..05029ac --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_type6_20260627_144642.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_unfiltered_taskstart_reportqty_20260627_141106.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_unfiltered_taskstart_reportqty_20260627_141106.sql new file mode 100644 index 0000000..8b98b25 --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_unfiltered_taskstart_reportqty_20260627_141106.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_assembly_zero_reportqty_20260627_145839.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_assembly_zero_reportqty_20260627_145839.sql new file mode 100644 index 0000000..cc2882e --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_assembly_zero_reportqty_20260627_145839.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_20260627_133625.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_20260627_133625.sql new file mode 100644 index 0000000..a579e7e --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_20260627_133625.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_type6_20260627_144642.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_type6_20260627_144642.sql new file mode 100644 index 0000000..e60a24d --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_type6_20260627_144642.sql @@ -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 + diff --git a/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_unfiltered_taskstart_reportqty_20260627_141106.sql b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_unfiltered_taskstart_reportqty_20260627_141106.sql new file mode 100644 index 0000000..f451bd9 --- /dev/null +++ b/db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_unfiltered_taskstart_reportqty_20260627_141106.sql @@ -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 + diff --git a/db_backups/update_abnormal_control_parallel_approval_20260627.sql b/db_backups/update_abnormal_control_parallel_approval_20260627.sql new file mode 100644 index 0000000..edc80a9 --- /dev/null +++ b/db_backups/update_abnormal_control_parallel_approval_20260627.sql @@ -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'' + + REPLACE(REPLACE(REPLACE(REPLACE(ISNULL(@审批人ID, N''), N'&', N'&'), N'<', N'<'), N'>', N'>'), N',', N'') + + N'' AS XML + ); + + SET @审批人姓名Xml = CAST( + N'' + + REPLACE(REPLACE(REPLACE(REPLACE(ISNULL(@审批人姓名, N''), N'&', N'&'), N'<', N'<'), N'>', N'>'), N',', N'') + + N'' 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 diff --git a/db_backups/update_device_information_maintenance_20260629.sql b/db_backups/update_device_information_maintenance_20260629.sql new file mode 100644 index 0000000..4c4ba76 --- /dev/null +++ b/db_backups/update_device_information_maintenance_20260629.sql @@ -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 diff --git a/db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql b/db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql new file mode 100644 index 0000000..1f4ed64 --- /dev/null +++ b/db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql @@ -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 diff --git a/db_backups/update_workhours_query_detail_20260627.sql b/db_backups/update_workhours_query_detail_20260627.sql new file mode 100644 index 0000000..c34fdd2 --- /dev/null +++ b/db_backups/update_workhours_query_detail_20260627.sql @@ -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 diff --git a/db_backups/workhours_query_backups/生产管理_工时查询_工序工时_查询_before_detail_query_20260627_152142.sql b/db_backups/workhours_query_backups/生产管理_工时查询_工序工时_查询_before_detail_query_20260627_152142.sql new file mode 100644 index 0000000..c5470ae --- /dev/null +++ b/db_backups/workhours_query_backups/生产管理_工时查询_工序工时_查询_before_detail_query_20260627_152142.sql @@ -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 + diff --git a/doc/修改工时报表.docx b/doc/修改工时报表.docx new file mode 100644 index 0000000000000000000000000000000000000000..e4f2272a3003291ec5e1d36fe87573c0244eab1f GIT binary patch literal 133153 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 literal 0 HcmV?d00001 diff --git a/doc/修改过程异常管控.docx b/doc/修改过程异常管控.docx new file mode 100644 index 0000000000000000000000000000000000000000..74240ee3b69cd87f5db871ce6bd105723dbd48a5 GIT binary patch literal 73193 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 {VRyvG8C}b2CWbz9L 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%0A; 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 Q^;F=ag#-OvJw_e<9~#th_W%F@ literal 0 HcmV?d00001 diff --git a/doc/新增及时齐套跟踪结果.docx b/doc/新增及时齐套跟踪结果.docx new file mode 100644 index 0000000000000000000000000000000000000000..c0131cc6757a7d993fdd87d21939a0b443b267e7 GIT binary patch literal 117302 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

JEcRYHXcheZ( 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/新增结算工时页面.docx b/doc/新增结算工时页面.docx new file mode 100644 index 0000000000000000000000000000000000000000..0c12fb49937c6ef0f4be4164fb6a482f283629c9 GIT binary patch literal 30350 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 bcfmg?ES^i>x%}d>f!kwcfUU@Q>7)C9hkMP> literal 0 HcmV?d00001 diff --git a/doc/设备信息.xlsx b/doc/设备信息.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c1825ae1fbaac32663ccc12b7a7cc958ec5b23d8 GIT binary patch literal 18573 zcmZ^~b9`mpvMwCkM#r{oc5K^DR%~=^+a24sI<~D&(y{F?{qA$mJ^Ot7&Ohdyzp<&xqys}#+|@s@{&XcacC@4XFIZA zUyiF%2aXg@L79$070)0#0)8P!>-HB7;q-f`O2qmB$%pjviS)~IMzR4FXNz=y{BAu~ z=Xia#y9WPvcI#6ExmCW{HThx}`G2x&3~)64OK)_-w$uP4*5D=hcHVxs?B~RZ@Vft4 zH5wR2gd5Rwb26KyWd5d}Xy+X=7{CV)e7nDK(<)TYJ^eE4&2j2`!l)M76bWT^DzljX zAqgZYjR!p@ReQSZChES02w9036_FV3j70(-K4~R!rHXyg7);Wr5Kjszo1tn%%8&|} z@ni~N=|iQ6mV+L(P&8jTcr~T=EcnjMqcLr-f*kxH{7jW6@ftDLY5Za!wHA;$77P+$ z^pHR14nYkt*!+p0?QJo`o5q$b6~Mbng*vF@@SUK5ke2hg^zo=%JErVe|D z(U1BdmVPt^<#L%H)zVGeG2fx_qcYJkR5GPI&OH#`oD+RId%XF(eEE9Fo?0y8Z3AOq zH|o+QmJLca#LW*IsK$f^qI3mZ2d*b#M=WFluDU(EE`1a0aKmf^{7_;gu#o*EHh}Bd zA3u6Vx`F>)1+}L}St4I52>Mb1>c6SL#mO09`&S7~3EI|yjA%c$Azu*_++?HHGV)Wz zX`=WlZFKcRf2}~UBBORB*L`-QE$ixWJh&npUR`HP*Lxpp9gaZKCCT_-67ATJs?hE8 zgU7DVMf(@XlAV^TCY0>_V$(2NRv$G};3J6IS*wF8Q?_R;))y>Y^><5tu+dzTDhR1& zX2*L_V2d{BRIoW~Wkn)k4YXMhcd`2n2So)qu=a>8MP#4f*?FB**`;{*%FE4TE0*ju zh27+bDeV7d8`ULvULXTb@1PWiQqD>>Y4Qb?^RpZ3jaN1Q-ZSc!;=&r)?6+h#0wV0g zOruyUEF>W!9QY$i3~N}C712^A*IU3}{~Ws0;!TmV6>5`zWA#hZ*xV7#Ti3gx1mei9 zK4+^1p6(clNBTDXk+OPCHa0ZI1joKM&xOSOHd+Dj-3&lEh^$@m4+wub|IcF&=ojbi zHvfz|{~3VrFMu1s(b~zv)YSQZk5K#?{NpB=KtQ4)KtNdkKkPpuOnX!kiGfoOKZ>4<88*-Fjro5V)eFT z=)18&LJM^??f3D1Z+f+U;l4(&g&(pfU$ATN_~7oo*5l)a_3;ik&rKQVJMQ%HTI>F{ z<%&2U;99bq+w*ql=l#L?&5zG#`+N%YWcU1z@y(aNXM1}y8^7mLucbsj^l=lniI*Uz zW}W5z@Opjo_`P+VUw7;7#gPL$`j1=9`uqCKy}jR?+Y2YJz$Jm({qFVf>BadOH`j$; zvw6hlozJIl!j`Y!OUsKFx1E4RC5k+n(Ycnl-(Fe7rOT%~Zx+Jzp?qxUG7n}3{=tb| za@6g;qKnCh=O(`2`}GIK$x}AOzo9g7^{=EG@|NJ^&|7^(={y`NI@aFw=`36zJdE z4Q?+GfUNP7Iv=#ZYJY#fxkOxEgy}dLaJ*~>TV8*;d3JxoQXrqTkiT5#pB{eP^UaEV zuMoIr(8oEhrSQCOVJMh(>$!htRJ1b6LP;hkr&6@emk1X}olml0W0DSUA|W5}Cm81? z#z z=>@nPia3-a5u<6;ur6jKiOw}a1NUhEp#3%(i&LZ*mVL}`7Uywf=1-1b-;Z@(c`rcX zqD9P7=?#i|q;NgS1-`xzl|zIo9ZH(Rl*^_hSib}TB4PmtmeAw^6@A}s9@^@i6Jw@4 z5-zt^KtIy}W^~Zdm}j2Rnq_VUF%ABwL8R1Apc%xd1`f=#46i=I%U{MOO0QS&G_KM- zROgZQ+>q0lb4(nhj#nDjvzU+fFg;_IrE+nODBN7)c}$S-z&cun=l~bgKM8=BaDRq$ z-6`PgkJt zi&C6pPosn#Xs*q$R4x2>?NFwFs6c=WRKSBNbAiTf{)DJ(HGN7tV zNA8G3rwy6{#qRo;Nzvaf1ygoN9N({_@%??JO3ji86@sjS0s5?`4M*y2%#=1Y@rx-o z*^z@@jUSti$eQ~i=w>Q+#Q}Bu$w21d0;*xWD)0%%Q^r(Qt&PU(_mz2V>3BEd$T62i zDJ_J!rZ!w<^biYCiA#`^2A#EUDinUKK{F5HKG-;;Y~Ng|V@7#urGfh9uYkkaxbZp_ zL85l9eFamd8F^c#T6Uaius&|#?7o=mfNPm8hn8o!6vK>wB1LF&7tOu}gpQkU#XW^Q zdeni2b?O+PGo^Q~d4O?M*SJ6O79PtNE-dZZ~D zaY%(;EyhzW2#$VO2~BK_h=@AUAFi4Xg1MC`jVa9{UD7CoRg-04tfYWx z!uHUgkO_XMdt;oYFLl*9YZgNsSCKyvJqFe)?b2Fm#D{?ClB_n zmC`{hi5oMXn2gHsLR;Y)ijy1i21gz7B7G~Dyz0|P+`(lkq2MSV>c*2xq0#stW4Rth zx!n3Psx}SW33o8qQYNCSMdl=l;mB?_kqcD+W9QBv$LCmK8~|HgE0OtjR_argt9{pm zaQg9~f?5muOyN<5N*`XOvJ20XOPrv@4+*jkGy^6uZk${9IM^z5u5Y%JGUA=E6byR8 z?1Rz;DDuGyYMnGmzkkgh(+{f9!pgZViW06yTYpNuv1@=tLzkT`37yalGGPxRjPRrg zrNtB}a*=y!4lf{Rk7@XMU;HF(8z#(e&!U)n^*8RsFO`K_QZg2VO`A(e=j3Q~#cV#? zPlT4SAI{!y8efq;pDS%ltf+LgQeQLdprk;MY8rT{l7VuKTnjR2v5=AQ-~b7YTiS?! zau)vOJs(_U?6Ma?j5#RThX@9klIbV)g42US(V4rUhX*VWL zohV#0lvF1NJ1u4>;*@8FD72ekOl-LbAzwOt8ddsgRibW$;+L_No0Qy8TW==oJ3Otm zCs`=U$ry^M1cUcIC}zghS9{GZxvX$6<0aP73$oIWBu2-sG}6aYpYF3*XRi@04|5LH z+bblTJ<&>=3fnh)Rd6K?2XWS5>C1F%Xjk$?t zw6-B7I8f>9p+*k2F89T}Ty$uF360dJZNRu_<+HA%VmIZ^3LdD(D6^7sJuCI-g89GX z^2f&qwCn>-i`kKumAO%^K$!@=r;6$jLgh0X;SLhl@njRcf;o73zJ{SwvC=O?qu*29 zDw7)XbW>G9`S`{#220iS`^sSRi<$AlFFwhm!J`R_Q}RgdB@WqGwqCIui*5yZYn^9p zyjhFgm7) zLgaP%YHN$>&n{z$${K#9gD3GmO)T)kZ%RK+C|BwKjMXjZ)hRZWV8wYFjS$G0RW#+R zBz$eKZa}_$3F_7VGM7pbPvY%T)O|Q_b=cbzBohfY`6gm2Tzh7X8lYQz9hW*$W5SY- z&44Yydd7=n4t$33F|%a1i<`WUTePo|nqYh%ha^&FGEz7eWB^+I)pJGn@(5QWP#&_` zdZOv3#ZT%85%+1O9W1m`#7)y9GBDda6>4q7 z%4m5cXk$y_An_hEHyPjRWXCU{Ua0n|&{;Ict5?G5D%Od82pY>s6H;prRms7$g}zjI z`PGRq2em?ex2mEKL@oc*?e`P3AplmX;>jCm8frXEd;C>7y&2q;_Xw~(%tR8sYe733 z>+Y1KEy!er7a7~=q@Xh%gb7jdIJSTP^0$yCIh*GALQKk{h`KT)S<0faI$V*w)Q;}K z+8InjH4|Z{Rv57(kvj66yu3+Ryl;dg9_8*ZE$uR0;p`dmC(A{X2cSjzbkxJq z^q5fAMWrewL-%PmvJ<}KCEW#7{AEb=iy?7Z%qKIfpo!`DYfg1 zPB+@!kot6SHC9CGZ?N(0xgdjl8q|QzJTuCi8fgBOMXVVOA3fu5a=Ao_jt=aqx$=$_ z;qDrmxMoM%N`J_S2MbZ;+2qtZEBx)kS_ma-tgM6>BQo+-cq@yCe!yKX?e3U#{K+9b zfWNIy?erMdVY$@0XWNa69I>X_ZW$P2#_n@fU`~4Khiv*9RwGZoM&xT&{2N@@ug)1d z1~9AEeh_S|6Ew3)YcopMh96gX+LudU(an_|s>Mqp2Q#1hG9u&!xT0Hd5nDKk!xj%t z4Jzvp=0BTP4bPL=IxK!w^;wEcNoH44{wY2z4>>l4rRIuwrS+3XBQqJY=EVY4 zcJRpJW-1LN*`EQnEGjDzOE*JNw#)Kc%>=cU>rFV#mObNZ#Si?}i5qIu%9CkQwgWiT zv@qi(YXRi$uzAobakkfp&eoD2eG%1t4 z0<~mWp^HU!aM+*FDz&yj`m6I_Vl#oGDY=<=j!a> z<^x)kQnB_qy@!-IdGsWX1a;%m*Tf6;Tys%2-)C|^u1;vk9VuUbXKKT*svww}b~sXP zio>*q(f#uUXm#@711VeO6EsUaWCAyQwd5Is!BvA$s^&Z*LhN@N4$~g18{^3~ zZdD;Rj zX4Rp#HZ^d87LvX(nz8+~P!CYo=HW+Eg-IsucnK%S4Dcyzrs9o-7<)}kO;AzPj#OBF zXNkXO=vrBws^VThBrTnOus-nFuD0C^S1Da!x4}vNTHsdOQj?A!RIX~EnYq#^oax)L zgLu5V&t0UAoSMt4-*u>o2n46B+x%Imz8@GZL!(|q#1%DFdfHd{Y91+0WJbSCGswaH zEmW7UP9dIK;_`Ht&g`WY{JRR5>Alk?daMC+=;@iGol>oU3OhJW83uK_ROL*jU~tzE z97wSV9pJ9H4(K>-Wc`n^ZrztM*PU&%nkIvn;n&H*Uq#qBs5Cg66gX_0^!LUu9UcYJ zHpg)16_Razjfa{^ZkpeBt5|5h8?6*4+AguH>m4Jh*s&zzC}~G7V)6^BPEU64(9VKU z?>8^<`M$NJaG2S2_}(=8#1-2vTdfq!d9ABY7c5k>JKonWW|jSF_FR)HHTiQjpQcsX z$gl#)5CmUWD}5;srUKyl#a8cChr=#=*9x=mUKQKA!40shN_Cx&n?@@lO}0%*!3z~9 z3m1hD{u(Pb=qU@1_|DTu5r>mE*J{AlL>`REVV!3Jg7MUVhKK4Pagy@m&e4>nM=gG; z%=3g|=f)w24Oqu(5OlD^-*h`%3-zf|)l_jsl}>><`AIB@T!Cmc8tZD{cT=al%JgEa z19QCkWN3T-S`$v2T#>S?`EEar8ebnp^;jFjbiY;B4&e5y2Y88pDX1MMGhlHM2K~E$ zUhjz(EE#I8PG80s+wwo$4D8seRponsiwmu_oU(=xB?%W{!(ftrnS_CLVn5sL3YyMn zi|_%3AZ0qxJ0BEzJt|?>3e6AgXlO$7HuTz`u57?352*^HU^~j1UqVgZbSkvA0Rjk% zU}FG|-J)7JRWWLXIQYaRrufuJwdxVqFPq0vW_Vre8Uk;kS$#@UrBb2B#qcv#u8m({ z2S2T-qtei?QaJwA_o4+mh{~w9v*0STPw_)mHyvnMYB_QDgffb%jimW!0Cnc4+HuM4 zHm2=v7&w2T>izIZ2}e#V2!UaFa0DBM`}?d0njT6MMxi>`_he1vm=XCfg3P8*C&HnK zpD#2O+l%IRCApICGt0sv;2%a3ro!$Irj&A7AU(-TX-Kp^OT0QGLXU$YAuj|74+Au{ zI7dMd^WwVJ5F>Y&aM&M~rK@Zw+Ituq7W+Ulq{lN*Hx zr6msqAai9vK8{Q&bO%Ki5_kC05_hzsC4VL-XM*xGDFb|sV?$OWSCAQEW4i*=4n+Y_bug|-7o=N$tv zPa$@Wws0hJ7${sf9cka?OM2;RH2}YzlE-PU(_(Fg^7y16WiEJv8Q~*Z>{VB=p=_DL z2ih@5hcE2k!>dAH*d4jC_t{p)Of<5z7DR}Oi>hR9fY<7JnYO^UFEji-k|_I;xYwB> z`pDO#;N^VXa!-C!q&Wp{c9g7A_wB*JROnlxpERu^6w zD;G#HUF4vyaP}NICzrPBv0W4jSM}~J`kkW$#eTdNl%&d~Q(IoJpoWL4oviMtcA!zL zYN?`j{FdD$b>33NO^FVnE!fmZxB_B@s-#v_VxaoHtcshwnYw1ba;#3KVy?7u4qSeT zx@o)l@7X>490><(bj3D(9@*w@d+y8`h){XyHjl*J) ztAVeim;P4dw(5UX1f_pz8OV|LpRcP}nN+na1u5}CDa$X?7wLr)zS*{Y&Hi6PQ0&`7 zB7NmCO4=?mHmZ8ihSn9#tp5mcoHQ0GmRMFOg$G^1yp1^z@)bc>J*XB?c>gKC<^!+b zma<)Bs#EnK3#zJ;68wkDGTxCtdLtV18Z=OkM$9 zg{GA7-{|+3;AVvpXpjj6j^QN6Q(I-9=fZB(Iiza4@tU{8+ux@Z5~`lYr@j_s_o82B z_81-NEp=rUgFTSK+7pIxq1p829_!X#Bhvq~P+{z0E$&5M~}|Mc$Mj^kE^WjC{TKuBE!*xb2gV z^m-AnL|BS^WqY@7XuWLuAb^}nMf&sub>H?~e>e4dYxd)T*K?g_9*=Iim>mv6hPa3Iz1pU}#G z_Tv8yF@CxEoh?jlP5)Pj@x={?{RSKesQJr#|2G2j->`qc|M>3DHDzOQ*|54vt_j4Q z04$QXb-HZYw%zTu9p~ke+V@AKIZ?RNob}n8e?rzsP*Cy-=_NKe35Ce0XJLEH@}S0I zcbfRpSHcI%i-e0#a+q1BU*9`x1RmDzL#g29m@tD(Cu_aAU_i5?SJF%p&D_mrIvPD5nY)7{rqvlf^qBzR8cDG-!meAM{b> zPa-+TuC4+JBpC|E$6e)Ni@z|?p6k-&ZR&)L(bcEu$bTL*?&~MxC4!*m9@8dex?GdHx+8 zvPMYU&job5w2504vqlI)f4x^fd`+?9v!XF{7wb=4Q>+ z{^M5^zWZ*pU0cic=q?RfZQjomX5~#lvzK_rP+ukT|&+{z|x!#sCHG9F)pXZ_Se(wjc0!W@Cjz<+GJpx`YzfY$>o<71M zyQgPoLJ%b)#OzUX!CN$8@{T)Ob9RXQ*usSZ!btp4X3iBilfywf+XNRvtqnOm+_<6; z39g3T{P(N{cAX@7QxFpufbm(xwWGXH?MrPmvGFGw!nZkd*IU=2vR`ak6#pbO^W^r; zkn$&=gYnqqC?rX;_F<>^zYG;)dF6M=hb1l>Gyj&U)qr@EoDu$&nE;HHi0%h(8%LNr`9oy97Bu#Vag-y@M`M z-W;lo<_w-OkvDS-=PzsYcckLbp0i=+_;v~U(S?#*C?+!!9-B2e1@2qJS5j%4v+qVQ zXkvZPiTqDYPCTM~B6teTO&e~|u46vegsq@~^RAX+NcW~wd`+GH=>yvz0YgxyRG=c8 z*vnL-^jVuj{h7II_|w}<9$nMnE!GH2#dqu*pZ4r-GrT-~GYFa1^RKgSzO12_Zx&li z;{ad68Z*Wy^CnovIbU! zz>;I+H-KTE1ccLN>$Vn-8+gFxd5X-|*@+H0$Pgjh8$+oFzEUHZB3-}_U)hs=dgKpP z##mtk#K7C|YcyB~q@Rx_I^3ZkYwuTNhr61G#da#R7H|%<6eDgHM|eA>sLp73l7XS* zipHwJNDC~0L6_4RHrh%N>~tNC;3=%A8ZD11y~Jv;*==+Q7%-G(dwo(_BdW`pGs7w4 zc+HG&+bfr=IuBvixfzH19qTKTn=75vXhX*b??9Th_2`u0DtgY7cS&a;wkRy3Zm|}C zIGB1-dLoFF=EraYJBDzpw2mDq49q>~3~7vGtjG3DiRqTr0J_U5z#y0#ckR`>jqe)c zqCRD=bb!xJIv|1wC3K!tBUjt)wjUeZ*1M{m8y}XYp}GK*chU)mn!tFf72V z7MFm357I{?_!OGK0|CX*0RjEZP5GK4oGc6-O-+=Y9WCw5o&LsmCvmiul_g(%Djoz1 zuLi5i5}n2+`_Y)ep=aa4&=u$bN%a-l5IX%D9j{=HvaQ@de{7(GDFP!S3;&@0?0pNr z;=?9;!t*G=k^##V9Mq2 zYUkBSw|nkAvjxoKcX<}k;xf>q`x%Fd*uJ)YL3+{L;x>Fao{|4_;J)4!!#sUHrO(~Y zko=6^HE}CF+~xN^hi^pVDM(dODX~#ec~niBXuLFJ7rddXNi>gc?y>`)&e_N;UzM!q zJDs67Rm@R&EGu~MI5G#7{zQ4m{xX>i*OR`^Pi8H$+MwFt7P>v2lLai+0hrHO-G3bE z^|bpe;%cy?r!DBJqgX{H4S6tXlA24U93qkjuOj@ScLxu9-9O{-q<~H%02P z@RCt((I}>*>KkZyTT#A@*|A05!dl+GMELw<>y#H-X$!=XkfGk$w-U&XPwcf~Tx~9h zk)So2-PvgV-~q+#AHCE8#Ek~D)`NdrG3C$d{Ifz9SXB(=lf6{393yr-LOpue!)W#H zNWBm|Fl`Ul9_z+|&+92A>;9VcoB!Jz_YNU8Ah;kwU$NYM#Y`hf+dG4}1?MVooBgo) zJjeW}T!P%SSGE7MORvzGh+)s4fsN5OrHlP&wjO!8S06&CH{(aziaYtiil^GO%H;2D ziMEW)(+lXuS=(WoGi;MP>ewW@z~WJ)i9#%B_zCHGg%HlbF+(-MoCP(dx#jSK31$!A)r(mYPqmc{z{3v|G#7 z9$%xcrg<4>FrEZdPtVG-)9dx45)1gOEjHJDDYSj8uOdr!)-Zz8kh0YL2~ZK&>_l9C zu;yA^damfHl~G$I7rML8(ZV?~K%DtAF>6g!AQ{KuW4|wTh1%wbpEui3j)b)Z0^b-d zdw*{5eq($zmwIA=`IC4OUBqA)v865;=8waP zfEWy?l0e?@4W%`mZ?r1*zU$FGq;XaY?C66LTPpC=_ncCWm7JI}U~-ZW0>b!6tq9Mp z=EX~rIQLA;r+zW2i=O?hgps?OsNtOuRctuoQ8L|A@V4;_#atgW9*=1gdE$MZe8NNQ z^`X`?qBBtt_gXW?f?VB%C(H)f6Vr!s4<4Hw3&NO%5J^xyz-=mV#g<*>(ZudpvBF{# zGTtJ%d3k9Nq$cm$h8BJBI-^3&M=tJvk^+v7oYgsIPU*(yFX6to%nwfPrLh z%oE|Lm~4dPSzL8r*KP&Oo!CH!pvR0Ke+-^4;7^;o)}n(JdO*ubMBa#o*WrDIbgSVw zJOKK}`eNX_mj&D%ZQ^K>!L~(^%LgmnEDe#Q2xKUn^-s9*ZkZgd5M6kkL?Qk_(y?S|K9Z8Pi<8P0(BJPscsS#Sr?jUlDhJAu%Ee z+9BAYXs)0`K)|cw5j8eSO&$f&F4TvXo$ZD_JI9!g8aeJBLAD8k+&#_YdO=B!*7nN69V@S(HAfIO@fp*g$bB|Uf zue{R2r;50Ukr$b=i3<^zf?bIH7^_A&P1Is0;TGdPxc$!AG!q~)uCLHO+neH)J|p2d zR540i?fGGBpP<^d_9^noUDnTQqD$`BVJF*8Z_T+p`SI+@#4MH)v`c-`CUWvu01j zP`%r{Xjpi3(YD^&9eV@xV5I@0qsa<**;$m7Afw_DoxH>Ye56fq>USHXat}{HqYWZN z^~2h4Ap$7O0TINy6%pV8b4@8$g<2)D?%b(-Ilt@rg!1r$D@nt8`teD5fvGo~HRV_m zNlad`vH6k0&Ksp;x6%q?VTx|^pF^l00iBH1EW7=TE%5xYFxKj(V#_X1@lQ2}hU@Rr zrU#~uri15Gui3gec37+ZUAjdyy75ynb`V0%-|H!qJ!(5_b;DiFH5YxH=>(2!&Eu|{ z{ajsV#ki*PJLZ^h51t_#T)0@Rw+sr+L%>86b7FBQP2GVq*^ygSeoXcw^_^$j5}4+0V7IoD|7DWd9BT7m3{X-H4HueY@wW zh9c=X_KhEPVteEYN%A6ozy023z0DL8@BKv)1YE`1OVwZncQL`A`qN|BxPV2du9>;! z7isp+gOf>5s-3m5QX5V{Wab~0Q-);eP^!S;Mx;OAD?rdWZ*a0geHlC|2$|Y%8yUn* z6N!$XM}Lz}Ac!Rry?k8LF6WX4dOf@mu4dCY;4hHZrE`h4LtT2|aiGBJ24|AUaEb=^ z=B(D2$Tb`f|Ixw0fuwmZm-t|uAq#cI1tpj~0LKrEr?xRij0L8|nm7lnbSVowC7m6M zU)(|IVI71hP?A%Xj*@hsl2I`DB17OVU)2X4H|R6=2ZMBG{wYY8755%0+1!S>#mmvD z_FhvB4ETs)M?6kyTeGIe`!TtT55WgJJ$Y~P3xQj@fKsjW!m~@I%EIvj@db%g^)|^; zd}XutMVagk-X)%n>8LYVg3nR(&k^lz-vaKNQk=eoS&6f+kja3oXD$7&NV$%aYxp?a zJ2&KVvM109>@xmDd-USi@WFOY&?XAO$Z?d-SIBetcYU{=RamY^60fksT7|fP%_teLAXX(pezi48IAn5+Jc`1AM1=Sq`Ts>JDcz(6Y**BO&)WK0eW@8v$YJJhgk+3cJABC%W6S9roK6vc;A5~c>ktpW`C zS=d8c&IS*chGKp%xlWSfsoKnCES(lPYuPLdLCS z;#iUDiZM;_cLQ$+m!ZBoLzbtjJCGmS`>+e#F{4`4mg1;(;%8wpQPMLS(!AV!6Ksn# z+XJWoDdkkCny`5_4|}@3QRqvjg;+>GWYd$L1cnjX!ZQJB+T zUAjac_!KkV4oKJ?hWC1AVuxs733#WdAP}ro#%N`d1TdfrI`*jFw|Bi<9@0xpjU>Gh zQ~l@%kBgfZBfiR>rqdh_;0QFhQbc*P2qx(Cydky%L0%=v@lVoo|E0`u)p!J&U91z- z0xAogmvZ!`j2gIqtt(Q{C=_aawKWp5QKa_h z5fDoBXVmNlZmUD|6+AwEf`6d41mmnsjMC)KZ&K@JqGcUY&`cYwaMt~H>Jv&VZ+|eq zFr!L$&cg-)SBH^TS{-cnpPeE{dMZT*fX!zkBVc1`#ZiT!Unuu2uwZtw6KDN-YP3_?#>51rFykC| z6_G$XCCcb|r?8$aJAVYyR1$i${j!%3nx&P4DSmycn@mSf!_?U0S#21s@kvAyokEPJ z5b38w?|RJXfjqqI<#k)aouSr0%Sm(d7>LYW(LoQ(TKjD3-pz_PeadOS@%#6ES%yoQ z#=%$eG%^?v5aR#My)^;=tpCYgS5^dMG9vlrHhvmB^D)KEgisd3$j(r+sV18pKd^Gy zgH;%itYeoIzdx=b&8cOQ=fu3eZJKYp4WIo{!8oFj7z9JC<8fvL$q7rk776RI+v@`( zDWa0MB;pKuLPzUP_xoV22=-ouy$*;1QYV^fsxA&HB@Im|&nx|rnJ6=oV3jxqs+bIx zQT|OZ75w_!VMJ1r!v?jCDFJ-EDXo8zL=2hzW`qP~Df_fKSA|MR%0*@*eFocEs7p}@ zG=;$_Z)z5mJO8)_aK{p;XvK+tO7Xn1zoJmGUXhFl&hL0hF?hg_*mz#G*?9CntXN$5 zhMXt8;ZhqOJ7MGys?BACavhyMmcyvPKDfvidwCi0VD?6krOU8fVm5#d@UAh&Rdo zC=dW+%%(e|E2ue=nEIZ7Pt^C1rjAbC=j+Rjcvd`Zq>+beQkYk&|ZEJ{>PhxH|>tTEb?n=1qZl$wc{AO!sN7=4r2?;nZTM>z}fP zzxKE;-#w-`hiOs~JewT{oI_LQ_326v$H52B+_I_{x3%fK4>R;^Fp~1j?>a)x?(L;jxLfz zK$ltDMT8d`q>~-n^iHtVdU`o^j$G;)kFhUe#RH9okKy5_*XnG>c?vsWq-vaYC%d}$ zaCq2DJ$ITxrtGl|HygOCS)5(FZhOo3&n~p^Sn~6<7~1~8N4l4&YG@zFdU{UdQsbE~ zJgULoU#0YSdo*-t%`61;N7?b{Di~`&hd5qj9!@2HDu%Do=b%s>>y#HqR?)=dDIql+VtOV5dI`nWl7grt~Lb-$FE7hg+ z_#3y-do*-?ZLE6!u(ZMgh{w^~*7PaGaiEq6psLipw-Qs~9_I_h<5>c@lTkDBzN>6-Xvwt)!-`v;mS!xXVPhrB+Me<|=7c@L8Ez zLXp`dKCHAz+X-Y%UgEY4F$;t|V-36YEtutkOM`PUAw1W7%~SEWb}$vS`*H+XuwSlP zR7mC-v8cqg+&o!?`Y#~&_d{kL<&rr@d2)Wm$8$kXlhf^~R*5Xd?g54~b!sKJ&0vOA z?2TZ`lL4ZJ_iJZ#w*zddJL6Fq^t2XkhETd9t)HOKJ*+iOV=d6dozN!nd|;~eSmUQL29?jt zSwd4~skVV>p0n3E;McF6W1JID3#o~PZa=Ry>5=r@#xGU_j?b%}N9OKbjeYBz*|i#m z^7JcazGV=Bi7-W&$B)L{Jd0N>T9x0MHLT8+pS&F`3;I^9*(}oh6!%zCh+fkNzmC?b z(p1()m(6xT-x<$MOmFHp8i?9wAf1r-5bl@Z(P)@9OS{stU?+Kog=R_UiDTq2+xYXG z3?aiq&-xGMAFy-3<-;nRH3uyGKbXJZ+pKn=+KHwa#(znEMi>@@YGDaqa@t`oiK6>u z%UAVZC2wkL*G=joLL^i-wa9;XP5pqQ!JBsSw4ZH?;wu5H*lWU227CsgU?>}IIydc{ z544*z9@|9m4(r!Z#S8O4F4U_)mJ3@cDzMBjH_@_~QQ4%|5BuYBQZEWM*pr79@5-R( z4F7yp=Eg<8k#1)!V~kNMTtO$3h!jpDrl}3oVC3x87sm=JHg~O3WSH2pCzLqLsSB&k zUmnrWwzfD3QL9);pKcgKI72!i+}8G{qPB)Y7HdW#4u~QWMVqgUXDBdfLRK_sKt?uc zL{{vqjMg;=!_^b!eTf%^BeRvFmR*=qK?yG^W7V{km6UAzrW>ki)n4v0)R|-!5qEja z4m+4QasLWC^L~`p?2~+l+TDWtAjDe#d1QcT3l&hMWfBOq>Lf~Uc(K)E@(%xCXggS2 z)#W>VHV}h2e_x5P$}s02OTNDEP|MS&R-o-Y_e4EpU_fv}m@8$TD+vB!8TgR*ba*d_ z=zAJ*>TWh%pglciuq9m~hp9v^GwDbgJjz zhH9diHhrjYPM4mb0;<)1)E|~A4NND`F^$gN&?{%7f=emB5w^ZpWbR-v(t%odfu(|T zTMfvpPq;>SIMNuEIs`1)JW6~H{7wWunMWPQ(a%9Dk6cf|DlbR4ic`l?KAzj$p*q4E zQj#t4XEOgZ4ny^UGEw+#K8e+7ZxL_%Xy0bqJ0Uz8lsG@S<2eP*6Kjc7{sVkghBBGr zt*F;QlR&1+?#ESqkUx{xouR?3gArZs@i-lszSjpH3A;Ge(C}(%-J%nt3(G z-`M%EQlD+T;!+C5ru}?0M*-`B_L}~uSuZHxzg4FSj=weYasK`S)TVsh80l}<9}MWe zZaZOzE$2d7YG1EE!_@yN?W^IcT6FmJb(+RXvtRnwCJ(=Awj!FPYL*7F!(6vA6b*`8 zeWo!u4$EF(XPUfXC7*AjSXteMnC_`@cN!8rcXq#uns(-rr}`d)HZ^Y(Z1x>|Om-Pd zhXv6f7HB;fdDR9;9=fX&`1fz!pC_qic->l!BM(gyKahGAi0Kh~Z>oA04mc^8U%h9! zh+2a1eh#o(2%cJPh zPZjd3wWhj@1y$O5lMf|l#1dK$9h@B4oe?7%Mz6vclF!NF^@J2NG&fnjBE-gx6fD9Z zYIS>kp7+|*e|x*@+J-PuI45RyeNe9TT1|Djx%|FIApj30Q8allBLYHx(D}5-g5>!2 zr~rli;DGb;>y>m8>-gdQ1`)&(h*?yUAU~(jFC@%`d4>AME zPC5Kf)3;2wSUvFjz@wY;B2>i02H+y%j(3Nc-w}mTkWp*12#L5pj+U--@nbIE z?Ys{kt|4=S8;R+u=LDHXzFQpQAR#h;lc!32o$eTJ`M?b;fMpI7jVQYwC^7UvMnR_{ z9m@R{d?3cEQfR^1b>DC(j~_}(j6tnL8zu01w@=Ulytg-uC@0|kxt~hlw9+3hfhB`( ziK0HHuN)yojEhXeI7)S0oH8Z;3vohNYGq-5H7u=MiiwPgVnW&;^g&7$rc$FO$mU3g z0TPbK&4KyYsH=ZfhE-i@W6(3W!JkG2pmJazWkgo#-U|-`O2u#d^>bKSl@t^1Df*PS zsGVxWhDMD&JFz1hl_Qx3wDnSXm?o!$X29w{rDnTC$k3Vp0_@gN{(TLy>4oQ9$Y^v; zatAl+U&D3GVFk$~AGE1d=fp*B$UtkT)7!NX-M3QOANr~Q@TWmR;YhMOIN={Ja1BEU zrHQ|#$V}RaM(j&8So z`AKme40%%bk>{6VA3nz@yb_ge&$zR1>A71FwQD>A{oU7;nwD=5P=@xa+T1YqTNK^( zYh~F=XPSLR-!GDSL-(I*G_xfd1Gm(*pNZ&28n7{C{3I!YzV;|FKNHXHhQrLVIn5yv z!uXs-;>bJ%wcI)ND8KnIb9YznU++Bi_YL%UbJIRQ?=ixXmE%WA`h;I<)nF#+qNpXp8&P^iTT}pbiKhn+yvfvh3|%* z*fZrjCpIEzU3Hsvl+C5q(}9)0zP^L3yMVNdSC>f4@sHVD{g()rfosZ&MUWn|A{s+W z+PT~x@&%a_H~zXX5(1Tt9~kdTyCsblGg`asjk^_j`c|+-Q_RVINaWULdM))z!g-NtGB$auj%n60Me=`(z9nX=- zDKM`Q=>VrU=`tp0j<`})lH`hLa{@;gqA-;Bc`i`bH|NCsN7pH6I=htuBUx%w<{~JU97g?1s zE%l2LY3MTG66sI3tQ$J=sxt%enXHM=k2IOj8FJJF&GYUqAw}AScF5TD=RcX--X&hP>|J&Wc4IfTibPs=FM8; zCQlgF)Zz(+k1iuoTLAzx12`?FQb+FNMP088dzpsKsYW@!v7r;?PiM0iDmtZwX{ z@RDfb;DW@S#Ds^bD^(sbU-@>xc=Wgj$t-= zV%yft>J;dirZh2lU&*V6pgc~|&}XJMUNo4eG=E&&QueI;z_xe2i#nqm4aE%ia(SEW z_*5iQ>)_Y6YJX_ojW3s1PIHjr_7)7eux*XQ)J7FWHD3F9|5Lo>9~S-4TfFU8(j%tH z+ov1zOHGS>=JVrJL5>T{*Lg~FJ>K{n7jV?bVVGokb>6pkD`dL&ew}!Y?cZGoFYr)z*CyujiHp9a)W>UBgapU@qOUXX$8 zfrQc)WNjG58oD{?>w*yGtW|=HJ)*A?LN@_@yb@tTxDmtz_~<3^eovMGYlSU#MNJ{- z%UuyRb|Gs+EPh3IGWwu9!T?tTu)WB^hR@NUlQkd!6vJ~NF$~fSJ~RVVm!rBI{iF?$ hUP!E+#Lx>i0=#xNz?&7ESp|V7+^_@H6}W)(0RRU#M?3%k literal 0 HcmV?d00001 diff --git a/gptlog-process/gpdlog.md b/gptlog-process/gpdlog.md new file mode 100644 index 0000000..445e992 --- /dev/null +++ b/gptlog-process/gpdlog.md @@ -0,0 +1,1167 @@ +## 2026-06-27 过程异常管控修改执行日志 + +1. 读取 `work/修改过程异常管控.docx`,解析到需求要点: + - 页面位置:`ProductionManagement/AbnormalControl/index`。 + - 原页面添加多个审批人后表现为多级审批,需要改为多选后多人同时看到任务。 + - 当前任务只要其中一个审批人同意,即完成当前任务。 + - 上传附件功能不正常,需要修改。 + - 加工中心 `ProductionManagement/MachiningCenter/index` 与装配中心 `ProductionManagement/AssemblyCenter/index` 也需要统一嵌套该业务页面。 + - 测试页面功能时不要产生业务数据。 + +2. 检查代码结构: + - 确认独立异常管控页面位于 `src/views/ProductionManagement/AbnormalControl/index.vue`。 + - 确认加工中心内复制了一份异常管控模板和方法。 + - 确认装配中心入口原本被注释,且没有完整异常管控弹窗模板。 + - 对比其他图纸上传页面,确认文件上传接口需要使用 `DataPDF.params = JSON.stringify(...)` 形式传参,当前异常管控直接传对象是上传异常的重要原因。 + +3. 前端修改: + - 新增复用组件 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`,承载统一异常管控页面。 + - 将 `src/views/ProductionManagement/AbnormalControl/index.vue` 改为组件包装页,避免独立页面与中心页面逻辑分叉。 + - 在复用组件中将审批人从“添加审批人列表”改为 `el-select multiple` 多选。 + - 提交流程时将多个审批人的 ID 和姓名使用英文逗号拼接,继续通过 `审批人ID`、`审批人姓名` 参数提交,兼容原前端调用方式。 + - 修复附件上传: + - 上传前校验是否已选择附件。 + - 按项目已有接口约定传 `params` JSON。 + - 传入 `num`、`tableName=流程表`、`worker`、`uploadTime`。 + - 增加上传失败回调提示。 + - 加工中心新增统一异常管控弹窗,按钮改为打开复用组件。 + - 装配中心恢复“异常管控”按钮,并新增统一异常管控弹窗。 + - 修复加工中心旧异常管控复制代码中 `handleRowClick` 与主表行点击方法重名的问题,将旧异常管控内部行点击改名,避免覆盖主页面任务选择逻辑。 + +4. 数据库脚本: + - 新增 `db_backups/update_abnormal_control_parallel_approval_20260627.sql`。 + - 脚本包含 `sp_创建流程_简化版` 和 `sp_处理审批` 的 `CREATE OR ALTER PROCEDURE`。 + - `sp_创建流程_简化版` 支持逗号分隔的多个审批人,并拆分为同一步骤序号的多个 `processing` 节点,使多人同时看到待处理任务。 + - `sp_处理审批` 在任意审批人同意时,将同一步骤其他待处理节点同步关闭,并将流程置为 `completed`。 + - 脚本只定义存储过程,没有插入或修改业务测试数据;本次未执行该 SQL。 + +5. 文档归档: + - 新建目录 `work/ProductionManagement/WorkHoursCheck`。 + - 已将 `work/修改过程异常管控.docx` 移动到 `work/ProductionManagement/WorkHoursCheck/修改过程异常管控.docx`。 + +6. 验证: + - 执行 `npm run build`。 + - 构建成功。 + - 构建仅出现原项目资源体积较大、Browserslist 数据过期等警告。 + - 未调用流程新增、审批、上传等业务接口,因此未产生业务数据。 + +## 2026-06-27 过程异常管控复测问题处理日志 + +1. 根据用户复测反馈重新排查: + - 用户发起测试流程时选择了曹元和闫一龙两个审批人,但登录曹元账号后没有看到待处理任务。 + - 附件上传仍然不可用。 + +2. 待办不可见问题定位: + - 当前前端提交多个审批人时,会把审批人ID和审批人姓名用英文逗号拼接后传给 `sp_创建流程_简化版`。 + - 如果目标数据库仍是旧版存储过程,测试流程可能只生成一条节点记录,节点中的 `审批人ID` 是类似 `曹元ID,闫一龙ID` 的字符串。 + - 旧版 `sp_获取待处理任务` 如果按 `审批人ID = 当前登录人ID` 精确匹配,曹元登录时就匹配不到这条节点,所以待办为空。 + +3. 数据库脚本补充: + - 修改 `db_backups/update_abnormal_control_parallel_approval_20260627.sql`。 + - 在原有 `sp_创建流程_简化版`、`sp_处理审批` 基础上新增 `sp_获取待处理任务` 的 `CREATE OR ALTER PROCEDURE`。 + - 新版 `sp_获取待处理任务` 同时支持: + - 新逻辑生成的同一步骤多条待办节点。 + - 旧逻辑已生成的逗号分隔审批人ID节点。 + - 这样已发起的曹元、闫一龙测试流程,只要目标库执行该脚本,曹元账号也可以按逗号包含关系查询到待办。 + +4. 附件上传问题修改: + - 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`。 + - 上传按钮改为只选择附件并记录待上传数量,不再在流程创建前直接上传。 + - 流程创建成功并拿到 `新流程ID` 后,再自动调用上传接口。 + - 上传参数改为使用真实流程ID:`num = 新流程ID`、`tableName = 流程表`、`worker = 当前用户`、`uploadTime = 当前时间`。 + - 使用 `this.$set(this.DataPDF, 'params', JSON.stringify(...))` 设置上传参数,保持与项目已有上传页面的参数传递方式一致。 + - 多附件上传按成功回调计数,全部上传完成后清空文件列表和待上传数量。 + - 取消附件弹窗时清空已选择附件,避免误带入下次流程。 + - 提交流程成功后刷新“我发起的”和“待我处理”列表。 + +5. 验证: + - 修改后执行 `npm run build`。 + - 构建成功。 + - 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。 + - 本次没有调用流程新增、审批、附件上传等业务接口,没有执行数据库脚本,因此未产生业务数据。 + +6. 仍需执行的外部动作: + - 当前仓库没有可直接、安全执行数据库 DDL 的连接串或发布脚本入口。 + - 前端修改已经完成,但曹元待办不可见的问题依赖目标数据库存储过程更新。 + - 需要在目标 SQL Server 数据库执行 `db_backups/update_abnormal_control_parallel_approval_20260627.sql`,否则服务器仍会按旧存储过程逻辑查询,已发起的测试流程仍可能查不到。 + +## 2026-06-27 过程异常管控附件功能临时移除日志 + +1. 根据用户反馈重新调整: + - 用户确认附件功能仍然不好用,要求暂时去掉附件功能。 + - 本次目标改为移除过程异常管控页面中的附件入口和上传调用,避免影响流程发起。 + +2. 修改复用组件: + - 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`。 + - 删除发起流程表单中的“上传附件”表单项和“点击上传”按钮。 + - 删除上传附件弹窗。 + - 删除 `MESUploadFile` 引入。 + - 删除 `DataPDF`、`uploadPDF`、`pendingUploadCount`、`uploadFileTotal`、`uploadFileSuccess`、`uploadingAttachment` 等附件状态。 + - 删除 `uploadSuccessPDF`、`uploadErrorPDF`、`uploadShowPDF`、`submitPicturePDF`、`cancelAttachmentUpload`、`clearPendingAttachments`、`uploadPendingAttachments` 等附件相关方法。 + - 删除流程创建成功后的附件上传调用,成功提示恢复为只提示流程创建成功。 + - 删除无用的 `.attachment-tip` 样式。 + +3. 清理加工中心旧残留: + - 修改 `src/views/ProductionManagement/MachiningCenter/index.vue`。 + - 删除旧异常管控模板里残留的“上传附件”按钮。 + - 删除旧代码中已经注释的上传弹窗块。 + - 删除旧异常管控方法里的 `uploadShowPDF` 和 `submitPicturePDF`。 + - 删除旧数据中的 `imgDialogFormVisible`。 + +4. 搜索确认: + - 对 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`、`AbnormalControl/index.vue`、`MachiningCenter/index.vue`、`AssemblyCenter/index.vue` 执行搜索。 + - 未再发现 `上传附件`、`MESUploadFile`、`uploadPDF`、`DataPDF`、`submitPicturePDF`、`uploadShowPDF`、`attachment-tip`、`附件开始上传` 等附件入口或上传调用残留。 + +5. 验证: + - 执行 `npm run build`。 + - 构建成功。 + - 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。 + - 本次未调用流程新增、审批、附件上传等业务接口,未产生业务数据。 + +## 2026-06-27 过程异常管控页签刷新处理日志 + +1. 根据用户反馈重新调整: + - 用户要求异常管控里面三个页签点击时需要刷新数据。 + - 涉及页签包括:`待我处理`、`我发起的`、`已完成`。 + +2. 检查当前实现: + - 当前 `el-tabs` 只通过 `v-model="activeTab"` 切换页签,没有绑定页签点击事件。 + - 顶部三个统计卡片点击时也只是修改 `activeTab`,没有重新请求数据。 + - `searchTable` 和 `searchTable1` 在接口返回空数组时不会覆盖原列表,可能导致刷新后仍显示上一次的数据。 + - 绑定任务查询 `searchTable3` 也存在接口返回空数组时保留旧列表的问题。 + +3. 前端修改: + - 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`。 + - 给 `el-tabs` 增加 `@tab-click="handleTabClick"`。 + - 新增 `handleTabClick(tab)` 方法,根据当前页签名称刷新对应数据。 + - 新增 `switchTab(tabName)` 方法,统计卡片点击时先切换页签,再刷新对应数据。 + - 新增 `refreshActiveTab(tabName)` 方法,统一调度三个页签的数据刷新: + - `pending` 调用 `searchTable1()` 刷新待我处理。 + - `initiated` 调用 `searchTable()` 刷新我发起的。 + - `processed` 调用 `getProcessedTasks()` 刷新已完成。 + +4. 数据覆盖修正: + - `getProcessedTasks()` 改为始终用 `response.data || []` 覆盖 `processedTasks`,并同步更新统计数量。 + - `searchTable()` 改为始终用 `response.data || []` 覆盖 `initiatedProcesses`,并同步更新统计数量。 + - `searchTable1()` 改为始终用 `response.data || []` 覆盖 `pendingTasks`,并同步更新统计数量。 + - `searchTable3()` 改为始终用 `response.data || []` 覆盖 `tableData5`,避免绑定任务查询为空时残留旧数据。 + +5. 验证: + - 执行 `npm run build`。 + - 构建成功。 + - 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。 + - 本次未调用流程新增、审批等业务接口,未产生业务数据。 + +## 2026-06-27 加工中心和装配中心异常管控集成问题处理日志 + +1. 根据用户反馈重新排查: + - 加工中心和装配中心打开异常管控后,新建流程时原本应自动带入的生产任务信息没有了。 + - 在异常管控中新建流程或处理任务时,弹出的二级弹框被黑色遮罩挡住,无法操作。 + +2. 自动带入问题定位: + - 加工中心、装配中心当前主表选中行保存在各自页面的 `selectedRow`。 + - 异常管控已经改成复用组件后,父页面没有把主表 `selectedRow` 传给复用组件。 + - 复用组件内部只知道自己弹窗里的绑定任务列表点击结果,因此从中心页进入时不会自动显示当前生产订单、物料、工序等信息。 + +3. 自动带入修复: + - 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`。 + - 新增 `initialSelectedRow` 入参。 + - 在组件创建和 `initialSelectedRow` 变化时调用 `applyInitialSelectedRow()`。 + - `applyInitialSelectedRow()` 会把外部传入的主表选中行交给 `handleRowClick()` 统一映射。 + - `handleRowClick()` 兼容多种字段名: + - 生产订单:`订单号`、`计划号`、`生产订单`。 + - 物料编码:`产品编码`、`零件编码`、`物料编码`。 + - 物料名称:`产品名称`、`零件名称`、`物料名称`。 + - 工序名称:`工序名称`。 + - 同步把外部带入的信息写入异常管控的查询条件,方便打开后看到当前任务上下文。 + - 新建流程校验从 `selectedRow == ""` 调整为 `!selectedRow`,兼容对象/null 两类状态。 + +4. 父页面传值修复: + - 修改 `src/views/ProductionManagement/MachiningCenter/index.vue`。 + - 修改 `src/views/ProductionManagement/AssemblyCenter/index.vue`。 + - 两个中心页的异常管控弹窗中,将组件调用改为 ``。 + +5. 遮罩问题修复: + - 复用组件内部所有二级弹窗增加 `:append-to-body="true"`: + - 发起新流程弹窗。 + - 处理任务弹窗。 + - 流程进度详情弹窗。 + - 转办流程弹窗。 + - 完结流程弹窗。 + - 加工中心和装配中心的外层异常管控弹窗增加 `append-to-body`,降低与页面其他弹窗层级冲突的风险。 + +6. 验证: + - 执行 `npm run build`。 + - 构建成功。 + - 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。 + - 本次未调用流程新增、审批等业务接口,未产生业务数据。 + +## 2026-06-27 修改工时报表执行日志 + +1. 查找并读取需求文档: + - 用户提到 `worke`,实际仓库中没有 `worke` 目录。 + - 在 `work` 目录下找到 `work/修改工时报表.docx`。 + - 读取 docx 内容,确认需求: + - 页面位置:`ProductionManagement/Timesheet`。 + - 页面中四个分页:`项目工时`、`作业者工时`、`任务工时`、`设备工时`。 + - 四个分页里面的明细信息都要按照开始时间排序。 + +2. 定位代码: + - 页面文件为 `src/views/ProductionManagement/Timesheet/index.vue`。 + - 四个分页对应数据: + - `项目工时` 使用 `projectTableData`,由 `loadProjectData()` 调用 `工时统计_项目工时_查询` 后通过 `buildProjectTree()` 组装。 + - `作业者工时` 使用 `operatorTableData`,由 `loadOperatorData()` 调用 `工时统计_作业者工时_查询` 后通过 `buildOperatorTree()` 组装。 + - `任务工时` 使用 `taskTableData`,由 `loadTaskData()` 调用 `工时统计_任务工时_查询` 后通过 `buildTaskTree()` 组装。 + - `设备工时` 使用 `DeviceTableData`,由 `loadDeviceData()` 调用 `工时统计_设备工时_查询` 后复用 `buildOperatorTree()` 组装。 + +3. 代码修改: + - 修改 `src/views/ProductionManagement/Timesheet/index.vue`。 + - 新增 `getStartTimeValue(row)`: + - 兼容 `startTime`、`planStart`、`开始时间`、`dateLabel` 字段。 + - 将时间字符串转换为可比较的时间戳。 + - 空值或无效时间排到最后。 + - 新增 `getEarliestStartTime(row)`: + - 对树形节点递归取子级最早开始时间。 + - 用于父级分组排序,保证父级分组顺序跟其明细开始时间一致。 + - 新增 `sortRowsByStartTime(rows)`: + - 递归排序每一层 `children`。 + - 每个分组下的明细按照开始时间升序排列。 + - 父级分组按照子级最早开始时间升序排列。 + - 在 `buildProjectTree()` 返回前调用 `sortRowsByStartTime()`,覆盖项目工时分页。 + - 在 `buildOperatorTree()` 返回前调用 `sortRowsByStartTime()`,覆盖作业者工时和设备工时分页。 + - 在 `buildTaskTree()` 返回前调用 `sortRowsByStartTime()`,覆盖任务工时分页。 + +4. 文档归档: + - 新建目录 `work/ProductionManagement/Timesheet`。 + - 已将 `work/修改工时报表.docx` 移动到 `work/ProductionManagement/Timesheet/修改工时报表.docx`。 + +5. 验证: + - 执行 `npm run build`。 + - 构建成功。 + - 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。 + - 本次只修改前端排序和移动文档,未调用业务接口,未产生业务数据。 + +## 2026-06-27 13:42:30 作业者工时报工数量按 TaskAID+开始时间取最大值 + +### 用户需求 +- 修改工时报表中“作业者工时”的“报工数量”取值口径。 +- 新口径:同一个 TaskAID 且开始时间相同的记录,报工数量取最大值;不再叠加其他分组条件。 +- 用户提供目标数据库连接信息,本次执行中使用目标库 192.168.2.92 / YL_MESDB,日志中不记录数据库密码。 + +### 执行过程 +1. 检查工作目录 C:\WorkYuanLy\MES_Manage_View_V20,确认工时报表文档已在 work/ProductionManagement/Timesheet/修改工时报表.docx。 +2. 检查前端文件 src/views/ProductionManagement/Timesheet/index.vue,确认“作业者工时”和“设备工时”共用 uildOperatorTree,因此修改时增加开关参数,只让作业者工时启用新口径,避免影响设备工时。 +3. 连接数据库 192.168.2.92 的 YL_MESDB,确认: + - dbo.View_生产工时视图 包含 TaskAID、开始时间、操作数值、操作人、阶段标识 字段。 + - dbo.View_生产工时视图全部 包含 TaskAID、开始时间、操作数值、操作人、阶段标识 字段。 + - dbo.工时统计_作业者工时_查询 存储过程存在。 +4. 在修改数据库过程前,备份目标库当前过程定义: + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_20260627_133625.sql + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_20260627_133625.sql +5. 修改前端 src/views/ProductionManagement/Timesheet/index.vue: + - 增加 parseReportQty、 ormatReportQty、getTaskAID、getReportQtyGroupKey、uildTaskStartReportQtyMap、getTaskStartReportQty、 ecalculateOperatorReportQty。 + - loadOperatorData 调用 uildOperatorTree(res.data || [], true),启用作业者工时的新报工数量口径。 + - uildOperatorTree 增加 useTaskStartMaxReportQty 参数;明细行保留 TaskAID 和内部用的 eportQtyGroupKey。 + - 作业者工时的日期汇总和操作人汇总按唯一 TaskAID + startTime 取最大值后再求和,避免同一任务同一开始时间的重复行重复累加。 + - 设备工时继续调用 uildOperatorTree(res.data || []),不启用新口径。 +6. 新增数据库脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql: + - 更新 dbo.工时统计_作业者工时_查询。 + - 更新 dbo.工时统计_作业者工时_查询_导出。 + - 两个过程均通过 TaskStart报工数量 按 TaskAID + CONVERT(VARCHAR(19), 开始时间, 120) 分组取最大报工数量。 + - 查询过程结果集中增加 TaskAID 字段供前端兜底计算使用。 + - 导出过程同步使用新口径,但不新增导出显示列,避免改变导出表头结构。 +7. 执行数据库脚本到目标库;本次数据库操作只执行 ALTER PROCEDURE,未写入或修改业务表数据。 +8. 使用 sys.sp_describe_first_result_set 验证 dbo.工时统计_作业者工时_查询 的结果集,确认包含 TaskAID 字段,位于结果列第 20 列。 +9. 验证数据库过程定义中查询和导出都包含 GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120),确认已按新口径分组。 +10. 执行 +pm run build,构建成功。构建输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。 + +### 修改结果 +- 作业者工时页面“报工数量”现在按照同一 TaskAID、同一开始时间取最大值。 +- 作业者工时的操作人汇总、日期汇总、明细显示和导出过程均同步使用该口径。 +- 设备工时未被新口径影响。 +- 已保留数据库更新前备份和本次更新脚本。 + +### 验证结果 +- 数据库连接和字段确认:通过。 +- 存储过程更新:通过。 +- 查询结果集 TaskAID 字段确认:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 14:13:28 修正作业者工时报工数量为全量视图取最大值 + +### 用户反馈 +- 上一次实现不符合要求。 +- 正确口径:直接查询 [View_生产工时视图全部],同一个 TaskAID、同一个开始时间取最大报工数量,不经过任何过滤条件。 + +### 执行过程 +1. 明确修正范围:报表显示行仍由原查询条件决定,但“报工数量最大值”的来源必须改为全量 [dbo].[View_生产工时视图全部],不能从筛选后的数据集计算。 +2. 修改脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql: + - dbo.工时统计_作业者工时_查询 中的 TaskStart报工数量 CTE 从 FROM 筛选明细 改为 FROM [dbo].[View_生产工时视图全部]。 + - dbo.工时统计_作业者工时_查询_导出 中的 TaskStart报工数量 CTE 同步改为 FROM [dbo].[View_生产工时视图全部]。 + - 两处最大值计算均只按 TaskAID, CONVERT(VARCHAR(19), 开始时间, 120) 分组,不增加日期、操作人、合同号、产品、工序、订单、阶段标识等过滤条件。 +3. 在重新应用数据库脚本前,再次备份目标库当前过程定义: + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_unfiltered_taskstart_reportqty_20260627_141106.sql + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_unfiltered_taskstart_reportqty_20260627_141106.sql +4. 重新连接目标库 192.168.2.92 / YL_MESDB,执行修正后的 SQL 脚本,只更新两个存储过程定义,未修改业务表数据。 +5. 第一次使用 LIKE 验证时因匹配范围过大产生误判,随后改为提取 TaskStart报工数量 CTE 片段进行验证。 +6. 验证结果: + - dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 来源为 FROM [dbo].[View_生产工时视图全部],不包含 筛选明细。 + - dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 来源为 FROM [dbo].[View_生产工时视图全部],不包含 筛选明细。 + - 两个过程均按 GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120) 分组取最大值。 +7. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。 + +### 修改结果 +- 作业者工时查询和导出过程的报工数量最大值来源已改为全量 [dbo].[View_生产工时视图全部]。 +- 最大值计算不再经过报表查询条件过滤。 +- 本地脚本和目标库过程已同步。 + +### 验证结果 +- 目标库脚本应用:通过。 +- CTE 来源验证:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 14:48:37 修正作业者工时报工数量最大值增加操作类别编号过滤 + +### 用户反馈 +- 报工数量最大值仍需直接查 [View_生产工时视图全部]。 +- 同一个 TaskAID、同一个开始时间取最大值。 +- 需要增加过滤条件:操作类别编号 = 6。 + +### 执行过程 +1. 连接目标库 192.168.2.92 / YL_MESDB,确认 [dbo].[View_生产工时视图全部] 存在以下字段: + - TaskAID + - 开始时间 + - 操作数值 + - 操作类别编号 +2. 修改本地数据库脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql: + - 在 dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 中增加 WHERE 操作类别编号 = 6。 + - 在 dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 中同步增加 WHERE 操作类别编号 = 6。 + - 最大值来源仍为 FROM [dbo].[View_生产工时视图全部],不是筛选后的报表数据。 + - 分组仍只使用 TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)。 +3. 在重新应用数据库脚本前,备份目标库当前过程定义: + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_type6_20260627_144642.sql + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_type6_20260627_144642.sql +4. 重新执行 SQL 脚本到目标库,只执行 ALTER PROCEDURE,未修改业务表数据。 +5. 提取两个过程的 TaskStart报工数量 CTE 进行验证,结果如下: + - dbo.工时统计_作业者工时_查询:来源为 [dbo].[View_生产工时视图全部],包含 WHERE 操作类别编号 = 6,不包含 筛选明细。 + - dbo.工时统计_作业者工时_查询_导出:来源为 [dbo].[View_生产工时视图全部],包含 WHERE 操作类别编号 = 6,不包含 筛选明细。 +6. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次调整未引入编译错误。 + +### 修改结果 +- 作业者工时查询和导出的报工数量最大值口径已更新为: + - 直接从 [dbo].[View_生产工时视图全部] 取数; + - 只取 操作类别编号 = 6 的记录; + - 同一 TaskAID、同一开始时间取最大 操作数值 口径后的报工数量; + - 不使用报表查询条件过滤最大值来源。 + +### 验证结果 +- 字段确认:通过。 +- 目标库过程更新:通过。 +- CTE 来源和条件验证:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 15:02:19 修正作业者工时报工数量撤销操作类别过滤并增加装配置零 + +### 用户反馈 +- 之前增加 操作类别编号 = 6 不符合要求。 +- 正确口径:直接查 [View_生产工时视图全部],同一个 TaskAID、同一个开始时间取最大值,最大值来源没有任何过滤条件。 +- 另增判断:指派对象包含“装配”时,报工数量为 0。 + +### 执行过程 +1. 重新确认需求后,修正本地 SQL 脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql。 +2. 从 dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 中移除 WHERE 操作类别编号 = 6。 +3. 从 dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 中移除 WHERE 操作类别编号 = 6。 +4. 保留最大值来源为全量 [dbo].[View_生产工时视图全部],并只按 TaskAID, CONVERT(VARCHAR(19), 开始时间, 120) 分组。 +5. 在查询过程 报工明细 中增加判断:WHEN ISNULL(b.工位名称, '') LIKE '%装配%' THEN 0,否则使用全量视图按 TaskAID+开始时间取到的最大报工数量。 +6. 在导出过程的明细查询中同步增加同样的装配置零判断,保持页面和导出口径一致。 +7. 检查本地脚本,确认没有残留 操作类别编号 = 6,并确认查询和导出两处均包含装配置零判断。 +8. 在重新应用数据库脚本前,备份目标库当前过程定义: + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_assembly_zero_reportqty_20260627_145839.sql + - db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_assembly_zero_reportqty_20260627_145839.sql +9. 重新执行 SQL 脚本到目标库 192.168.2.92 / YL_MESDB,只执行 ALTER PROCEDURE,未修改业务表数据。 +10. 数据库验证: + - dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 来源为 [dbo].[View_生产工时视图全部],无 WHERE,不包含 操作类别编号,包含装配置零判断。 + - dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 来源为 [dbo].[View_生产工时视图全部],无 WHERE,不包含 操作类别编号,包含装配置零判断。 +11. 同步修改前端兜底逻辑 src/views/ProductionManagement/Timesheet/index.vue: + - 增加 isAssemblyAssignee 方法,识别 指派对象/工位名称/assignee 是否包含“装配”。 + - 在 getTaskStartReportQty 中,如果为装配指派对象,直接返回 ,避免前端按同一 TaskAID+开始时间重算时把非装配最大值覆盖到装配行。 +12. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。 + +### 修改结果 +- 作业者工时查询和导出的最大值来源恢复为全量 [dbo].[View_生产工时视图全部],没有任何过滤条件。 +- 最大值分组键仍为 TaskAID + 开始时间。 +- 指派对象包含“装配”时,页面、汇总和导出报工数量均置为 0。 +- 前端兜底逻辑已同步,避免页面端重算覆盖数据库装配置零规则。 + +### 验证结果 +- SQL 脚本检查:通过。 +- 目标库过程更新:通过。 +- CTE 无过滤和装配置零判断验证:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 15:26:30 根据工时查询界面文档修改工时查询页面 + +### 用户需求 +- 根据 work 下的 工时查询界面.docx 修改工时查询页面。 +- 修改后创建对应路径并把文档移入。 +- 按要求追加中文执行日志,不记录数据库密码。 + +### 文档内容提取 +- 文档名称:work/工时查询界面.docx。 +- 文档要求: + - 修改三级数据,由原三级汇总改成三级明细数据。 + - 页面字段按截图展示:任务描述、日期、班次、生产订单号、报工类型、报工数量、工位、工时、程序时间、单件工时、工艺工时等。 + - 报工类型字段:辅助 改成 调机,报工 改成 正常。 + - 报工数量:相同 TaskAID、相同开始时间取最大值。 + - 指派对象包含“装配”时,报工数量为 0。 + - 程序时间没有,暂时为空。 + - 单件工时按 工时(分钟)/报工数量 计算;报工数量为 0 时取工艺工时。 + - 工艺工时维持原样。 + - 增加字段“操作人”,取相同 TaskAID、相同开始时间的操作人拼接,且去掉加工工时大于 0 的数据。 + - 白班/夜班根据操作描述包含“白班”或“夜班”判断。 + +### 执行过程 +1. 查找并读取文档,确认文档路径为 work/工时查询界面.docx,并提取文档正文和截图。 +2. 定位工时查询页面为 src/views/ProductionManagement/Workhours/index.vue,当前调用存储过程 生产管理_工时查询_工序工时_查询。 +3. 连接目标库 192.168.2.92 / YL_MESDB,读取当前 dbo.生产管理_工时查询_工序工时_查询 定义,确认旧过程的三级数据为按 TaskAID、日期、班次汇总。 +4. 查询数据库字段,确认 [dbo].[View_生产工时视图] 和 [dbo].[View_生产工时视图全部] 存在 TaskAID、开始时间、结束时间、操作内容、操作类别、操作描述、操作人、加工工时、操作数值、订单号、订单行号、订单合同号、产品编码、产品名称、工序名称、工位名称 等字段。 +5. 新增数据库脚本 db_backups/update_workhours_query_detail_20260627.sql: + - 更新 dbo.生产管理_工时查询_工序工时_查询。 + - 基础数据仍按页面查询条件取报工/辅助结束且加工工时大于 0 的记录。 + - TaskStart报工数量 从 [dbo].[View_生产工时视图全部] 按 TaskAID + 开始时间 全量取最大值。 + - 指派对象/工位名称包含“装配”时,报工数量置 0。 + - 三级返回明细数据,不再返回班次汇总。 + - 操作人使用相同 TaskAID + 开始时间 且 加工工时 <= 0 的记录去重拼接。 + - 班次根据相同 TaskAID + 开始时间 的操作描述是否包含“白班”或“夜班”判断。 + - 程序时间返回空。 + - 单件工时按加工工时分钟/报工数量计算;报工数量为 0 时取工艺工时。 +6. 备份目标库旧过程到 db_backups/workhours_query_backups/生产管理_工时查询_工序工时_查询_before_detail_query_20260627_152142.sql。 +7. 第一次应用后用样本执行发现 XML 拼接操作人受 QUOTED_IDENTIFIER 设置影响,因此将脚本改为 SET QUOTED_IDENTIFIER ON,并把操作人拼接改成 SQL Server 2019 支持的 STRING_AGG。 +8. 重新执行脚本到目标库,只更新存储过程定义,未修改业务表数据。 +9. 执行 EXEC dbo.[生产管理_工时查询_工序工时_查询] @数据条数 = 5 验证,返回 15 行,三级明细包含 operatorNames、productionOrderNo、 eportType、 eportQty、station、workHours、pieceWorkHours、processWorkHours 等字段。 +10. 修改前端 src/views/ProductionManagement/Workhours/index.vue: + - 表格列调整为文档要求的工时记录结构。 + - 增加操作人、生产订单号、报工类型、工位、工时、程序时间、单件工时等列。 + - 报工类型前端兜底映射:包含“辅助”显示“调机”,包含“报工”显示“正常”。 + - 第三级树节点改为明细行展示,不再按班次汇总展示。 + - 底部汇总改为总工时。 +11. 创建目录 work/ProductionManagement/Workhours,并将 work/工时查询界面.docx 移动到 work/ProductionManagement/Workhours/工时查询界面.docx。 +12. 清理文档截图临时解压目录 work/.docx_extract_工时查询界面。 +13. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。 + +### 修改结果 +- 工时查询页面已按文档改成工时记录形式。 +- 三级数据已由班次汇总改为明细数据。 +- 数据库过程和前端页面字段已同步。 +- 文档已移动到 work/ProductionManagement/Workhours/工时查询界面.docx。 + +### 验证结果 +- 存储过程脚本应用:通过。 +- 存储过程样本执行:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 16:34:11 根据新增结算工时页面文档新增结算工时页面 + +### 用户需求 +- 根据 work 下的 新增结算工时页面.docx 新增结算工时页面。 +- 修改后创建对应路径并把文档移入。 +- 按要求追加中文执行日志,不记录数据库密码。 + +### 文档内容提取 +- 文档名称:work/新增结算工时页面.docx。 +- 文档要求: + - 新增结算工时页面,任务描述参考工时查询页面。 + - 根据订单编号(生产订单号)和工位(指派对象)分组。 + - 统计设备工时,条件为加工工时 > 0。 + - 报工工时:上述设备工时中操作类别等于报工的工时。 + - 主辅工时:上述设备工时中操作类别等于辅助结束的工时。 + - 完成数分为报工完成数和辅助完成数,对应上述工时记录的操作数值求和。 + - 增加操作人字段:相同 TaskAID、相同开始时间的操作人拼接,且去掉加工工时大于 0 的数据。 + +### 执行过程 +1. 查找并读取文档,确认路径为 work/新增结算工时页面.docx。 +2. 检查现有生产管理页面和路由机制,确认前端使用动态菜单路径加载 src/views 下组件;新增页面放置在 src/views/ProductionManagement/SettlementWorkhours/index.vue。 +3. 新增数据库脚本 db_backups/create_settlement_workhours_query_20260627.sql: + - 创建/更新 dbo.生产管理_结算工时_查询。 + - 基础数据来源为 [dbo].[View_生产工时视图]。 + - 查询条件包含合同号、产品编码、订单号、工位、开始日期、结束日期、数据条数。 + - 只统计 加工工时 > 0 且操作内容/操作类别为 报工 或 辅助结束 的设备工时。 + - 汇总层按 订单号 + 工位名称 分组。 + - 报工工时 为报工记录加工工时小时汇总。 + - 主辅工时 为辅助结束记录加工工时小时汇总。 + - 报工完成数、辅助完成数 分别按对应操作类型的 操作数值 汇总。 + - 明细层返回操作人、日期、工序、操作类别、完成数、工时、开始/结束时间、TaskAID。 + - 操作人使用 [dbo].[View_生产工时视图全部] 中相同 TaskAID + 开始时间 且 加工工时 <= 0 的记录去重后用 STRING_AGG 拼接。 +4. 执行数据库脚本到目标库 192.168.2.92 / YL_MESDB,只创建/更新存储过程,未修改业务表数据。 +5. 执行样本验证 EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 10,返回 18 行,包含汇总层和明细层数据。 +6. 新增前端页面 src/views/ProductionManagement/SettlementWorkhours/index.vue: + - 提供合同号、产品编码、生产订单号、工位、数据条数、开始/结束日期查询条件。 + - 调用 生产管理_结算工时_查询。 + - 使用树形表格展示订单+工位汇总,展开查看明细。 + - 汇总列包含报工工时、主辅工时、报工完成数、辅助完成数、合计工时。 + - 明细列包含操作人、日期、工序名称、操作类别、完成数、工时、开始时间、结束时间。 + - 底部显示报工工时、主辅工时、合计工时汇总。 +7. 创建目录 work/ProductionManagement/SettlementWorkhours,并将 work/新增结算工时页面.docx 移动到 work/ProductionManagement/SettlementWorkhours/新增结算工时页面.docx。 +8. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次新增未引入编译错误。 + +### 修改结果 +- 新增结算工时页面:src/views/ProductionManagement/SettlementWorkhours/index.vue。 +- 新增数据库脚本并已应用:db_backups/create_settlement_workhours_query_20260627.sql。 +- 文档已移动到 work/ProductionManagement/SettlementWorkhours/新增结算工时页面.docx。 + +### 验证结果 +- 存储过程脚本应用:通过。 +- 存储过程样本执行:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 16:42:14 补新增结算工时页面菜单记录 + +### 用户反馈 +- 新增结算工时页面后,页面上看不到菜单。 +- 用户怀疑 [dbo].[登录基础数据_二级菜单] 没有增加记录。 + +### 执行过程 +1. 检查目标库 192.168.2.92 / YL_MESDB 的 [dbo].[登录基础数据_二级菜单] 表结构。 +2. 确认字段包括 IDD、id、pid、path、componet、 edirect、 +ame、 itle、icon、账号代码、模块代码、是否启用、AddData、DeleteData、EditData、SearchData。 +3. 注意到字段名是 componet,不是 component。 +4. 查询现有工时相关菜单,确认: + - 工时查询 菜单存在,id = 166,pid = 3,路径为 Workhours/index,组件为 /ProductionManagement/Workhours/index。 + - 工时查询 当前只配置给账号代码 1 和 2010。 + - 结算工时 菜单此前不存在。 +5. 查询 IDD 属性,确认 IDD 是自增列;当前最大菜单 id 为 230。 +6. 新增菜单脚本 db_backups/add_settlement_workhours_menu_20260627.sql: + - 新菜单 id 使用 231。 + - pid = 3,挂在生产管理下。 + - path = 'SettlementWorkhours/index'。 + - componet = '/ProductionManagement/SettlementWorkhours/index'。 + - +ame = 'SettlementWorkhours'。 + - itle = '结算工时'。 + - icon 复用工时查询图标,兜底为 DimensionsSummaryReport。 + - 权限按现有 工时查询 复制,插入账号代码 1 和 2010。 + - 脚本带 NOT EXISTS 判断,避免重复插入同账号菜单。 +7. 执行菜单脚本到目标库。 +8. 查询验证结果: + - IDD = 2754,账号代码 1,菜单 结算工时 已存在。 + - IDD = 2755,账号代码 2010,菜单 结算工时 已存在。 + - 两条记录均指向 /ProductionManagement/SettlementWorkhours/index。 + +### 修改结果 +- 已向 [dbo].[登录基础数据_二级菜单] 补录 结算工时 菜单。 +- 菜单权限与现有 工时查询 保持一致,仅账号代码 1 和 2010 可见。 +- 本次仅修改数据库菜单记录和新增脚本,不涉及前端代码变更。 + +### 验证结果 +- 菜单表结构确认:通过。 +- 菜单脚本执行:通过。 +- 结算工时 菜单记录查询:通过。 + +## 2026-06-27 17:05:00 修正结算工时页面层级和已结算口径 + +### 用户反馈 +- 结算工时页面缺少任务描述、装夹时间、程序时间。 +- 页面存在多余字段,需要去掉。 +- 数据层级应为 物料汇总 -> 生产订单号+工位汇总,不需要明细层。 +- 只要已经结算的数据,即 [YL_MESDB].[dbo].[MES_接口_生产计划] 中 单据状态 IS NULL 的数据。 + +### 执行过程 +1. 重新确认需求后,调整结算工时页面和存储过程为两级汇总,不再返回明细层。 +2. 查询字段确认: + - [dbo].[MES_接口_生产计划] 包含 AID、订单编号、物料编号、物料描述、单据状态。 + - [dbo].[View_生产工时视图] 和 [dbo].[View_生产工时视图全部] 包含 TaskAID、订单号、产品编码、产品名称、工位名称、加工工时、操作内容、操作类别、操作数值、开始时间、操作人。 + - [dbo].[车间生产管理工艺_零件生产工艺_工艺库] 包含 准备工时、标准工时,本次用 准备工时 作为装夹时间,用 标准工时 作为程序时间。 +3. 重写 db_backups/create_settlement_workhours_query_20260627.sql: + - dbo.生产管理_结算工时_查询 先从 [dbo].[MES_接口_生产计划] 取 单据状态 IS NULL 的结算任务。 + - 工时数据通过 p.AID = v.TaskAID 关联到结算任务。 + - 只统计 加工工时 > 0,且操作内容/操作类别为 报工 或 辅助结束 的设备工时。 + - 汇总层级改为两级:一级按 物料编号 + 物料描述 汇总,二级按 生产订单号 + 工位名称 汇总。 + - 输出字段包含任务描述、生产订单号、工位、报工工时、主辅工时、报工完成数、辅助完成数、合计工时、装夹时间、程序时间、操作人。 + - 去掉明细字段:日期、工序名称、操作类别、完成数、单条工时、开始时间、结束时间等。 +4. 执行脚本到目标库 192.168.2.92 / YL_MESDB,只更新存储过程定义,未修改业务表数据。 +5. 执行样本验证 EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 20,返回 6 行,层级为 Level=1 物料汇总和 Level=2 订单+工位汇总。 +6. 使用 sp_describe_first_result_set 验证结果集字段,确认包含 materialCode、materialDesc、 askDescription、productionOrderNo、station、 eportWorkHours、uxiliaryWorkHours、 eportFinishQty、uxiliaryFinishQty、 otalWorkHours、clampingTime、programTime、operatorNames、 ecordCount。 +7. 重写前端 src/views/ProductionManagement/SettlementWorkhours/index.vue: + - 查询条件精简为生产订单号、物料编码、工位、数据条数、开始日期、结束日期。 + - 表格改为两级树:一级物料汇总,二级生产订单号+工位汇总。 + - 补回任务描述、装夹时间、程序时间列。 + - 删除多余明细列:合同号、产品编码、产品名称、日期、工序、操作类别、完成数、单条工时、开始时间、结束时间。 + - 底部汇总保留报工工时、主辅工时、合计工时。 +8. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。 + +### 修改结果 +- 结算工时页面已改为 物料汇总 -> 生产订单号+工位汇总 两级结构。 +- 页面已补回任务描述、装夹时间、程序时间。 +- 页面多余明细字段已去掉。 +- 数据只取 [dbo].[MES_接口_生产计划] 中 单据状态 IS NULL 的结算任务。 + +### 验证结果 +- 目标库存储过程更新:通过。 +- 存储过程样本执行:通过。 +- 结果集字段验证:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 + +## 2026-06-27 17:28:58 修正结算工时程序时间装夹时间和单件工时口径 + +### 用户反馈 +- 程序时间目前没有,默认 0。 +- 装夹时间 = 【报工工时(汇总) - 程序时间 * 完工数】 / 完工数。 +- 结算报工单件工时 = 报工工时 / 报工完成数。 +- 结算辅助单件工时 = 主辅工时 / 辅助完成数。 +- 任务描述没了,需要加上。 + +### 执行过程 +1. 修改 db_backups/create_settlement_workhours_query_20260627.sql。 +2. 从结算工时存储过程里移除工艺库 准备工时/标准工时 作为装夹时间、程序时间的取值。 +3. 将程序时间固定输出为 。 +4. 将装夹时间改为公式:CASE WHEN 报工完成数 > 0 THEN (报工工时 - 0 * 报工完成数) / 报工完成数 ELSE 0 END。 +5. 新增输出字段: + - settlementReportPieceHours:CASE WHEN 报工完成数 > 0 THEN 报工工时 / 报工完成数 ELSE 0 END。 + - settlementAuxiliaryPieceHours:CASE WHEN 辅助完成数 > 0 THEN 主辅工时 / 辅助完成数 ELSE 0 END。 +6. 保留并输出 askDescription,由 物料描述 + ' ' + 物料编号 组成,一级和二级都返回该字段。 +7. 修改前端 src/views/ProductionManagement/SettlementWorkhours/index.vue: + - 二级行也显示任务描述。 + - 新增“结算报工单件工时”列。 + - 新增“结算辅助单件工时”列。 + - 绑定新字段 settlementReportPieceHours、settlementAuxiliaryPieceHours。 +8. 执行 SQL 脚本到目标库 192.168.2.92 / YL_MESDB,只更新存储过程定义,未修改业务表数据。 +9. 执行样本验证 EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 20: + - 返回任务描述。 + - 程序时间为 0。 + - 装夹时间按公式返回。 + - 返回结算报工单件工时和结算辅助单件工时。 +10. 执行 +pm run build,前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。 + +### 修改结果 +- 程序时间默认 0。 +- 装夹时间改为按汇总公式计算。 +- 新增结算报工单件工时、结算辅助单件工时。 +- 任务描述在物料汇总层和生产订单号+工位汇总层均显示。 + +### 验证结果 +- 目标库存储过程更新:通过。 +- 存储过程样本执行:通过。 +- 前端生产构建 +pm run build:通过,仅有既有警告。 +## 2026-06-27 17:39:00 修正结算工时二级任务描述和查询性能 + +### 用户反馈 +- 结算工时页面红框位置的二级任务描述需要拼接工序名称和工序顺序。 +- 页面打开和查询太慢,需要优化。 + +### 执行过程 +1. 查看当前结算工时页面 `src/views/ProductionManagement/SettlementWorkhours/index.vue`,确认页面只展示接口返回的 `taskDescription`,红框位置对应二级“生产订单号+工位”汇总行。 +2. 查看当前 SQL 备份脚本 `db_backups/create_settlement_workhours_query_20260627.sql`,确认任务描述由 `物料描述 + 物料编号` 组成,未带工序名称和订单行号。 +3. 修改 `db_backups/create_settlement_workhours_query_20260627.sql`: + - 在结算明细中保留 `工序名称` 和 `订单行号`。 + - 在二级汇总中增加 `MAX(工序名称) AS 工序名称`、`MAX(订单行号) AS 工序顺序`。 + - 二级 `taskDescription` 改为:`物料描述 + 物料编号 + 工序名称 + ' 序' + 工序顺序`。 + - 一级物料汇总任务描述保持 `物料描述 + 物料编号`。 +4. 优化 SQL 查询性能: + - 将原来按每个明细键反复查询 `[dbo].[View_生产工时视图全部]` 的操作人相关子查询,改为 `明细键 -> 操作人明细 -> 操作人拼接` 的统一聚合。 + - 将订单工位汇总里的操作人相关子查询,改为先按订单工位聚合操作人,再回连到二级汇总,避免汇总行逐行重复扫描。 + - 连接开始时间时使用秒级时间范围匹配,避免对大视图每行做字符串转换匹配。 +5. 修改前端页面 `src/views/ProductionManagement/SettlementWorkhours/index.vue`: + - 将“任务描述”列最小宽度从 280 调整为 380,避免追加工序名称和序号后显示过窄。 +6. 第一次执行 SQL 脚本时发现 `sqlcmd -i` 未按 UTF-8 解释中文脚本,数据库误建了一个乱码过程,正式中文过程仍是旧定义。 +7. 使用 `sqlcmd -f 65001` 重新执行 UTF-8 脚本到 `192.168.2.92 / YL_MESDB`,正式过程 `dbo.生产管理_结算工时_查询` 更新成功。 +8. 确认正式过程定义中已包含 `工序顺序`。 +9. 删除本次因编码误建的乱码过程,避免后续排查混淆。 +10. 执行抽样验证: + - `软管总成 214-20411-30-12x1SN-12x4000 电火花 序5` + - `软管总成 214-20411-30-12x1SN-12x4000 打压检测 序4` + - 同类二级行已能显示工序名称和工序顺序。 +11. 对同样 `@数据条数 = 30` 的抽查计时: + - 优化前约 17161 ms。 + - 优化后约 1986 ms。 +12. 执行 `npm run build`,前端构建通过。输出仍有项目既有的资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。 + +### 修改结果 +- 结算工时页面二级任务描述已拼接工序名称和工序顺序。 +- SQL 操作人拼接和订单工位操作人汇总已优化,减少重复扫描。 +- 任务描述列宽已加宽。 +- 数据库存储过程已同步更新到目标库。 + +### 验证结果 +- 目标库存储过程更新:通过。 +- 乱码误建过程清理:通过。 +- 样本查询内容验证:通过。 +- 样本查询耗时验证:从约 17.1 秒降到约 2.0 秒。 +- 前端生产构建 `npm run build`:通过,仅有既有警告。 +## 2026-06-27 17:46:00 修正结算工时操作人重复拼接 + +### 用户反馈 +- 结算工时页面的操作人拼接存在重复姓名,需要去重。 + +### 执行过程 +1. 查看 `db_backups/create_settlement_workhours_query_20260627.sql` 中当前操作人拼接逻辑。 +2. 确认原逻辑已经对整段 `操作人` 字符串做了 `DISTINCT`,但在订单工位汇总时,如果明细中已有 `张三,李四` 这类拼接字符串,再和其他明细拼接,会出现单个人名重复。 +3. 修改 `操作人明细`: + - 对源字段 `v2.操作人` 先替换中文逗号、顿号为英文逗号。 + - 使用 `STRING_SPLIT` 拆成单个姓名。 + - 去掉姓名前后空格。 + - 过滤空姓名。 + - 再按 `TaskAID + 开始时间 + 操作人` 去重后重新 `STRING_AGG`。 +4. 修改 `订单工位操作人`: + - 对 `结算明细.操作人` 再次按逗号拆分成单个姓名。 + - 按 `物料编号 + 订单号 + 工位名称 + 操作人` 去重。 + - 再重新拼接为最终 `operatorNames`。 +5. 使用 `sqlcmd -f 65001` 将脚本同步到目标库 `192.168.2.92 / YL_MESDB`,只更新存储过程定义。 +6. 执行抽样验证 `EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 100`: + - 将返回的 `operatorNames` 再拆分统计重复姓名。 + - 未查出重复姓名行。 + - 样例结果如 `李盛发,王宝昌,魏文海,普1,孙广义`,同一行内姓名不重复。 +7. 执行 `npm run build`,前端构建通过。输出仍有项目既有的资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。 + +### 修改结果 +- 操作人拼接已改为按单个姓名去重。 +- 支持处理中文逗号、顿号和英文逗号分隔的姓名。 +- 数据库存储过程已同步更新到目标库。 + +### 验证结果 +- 目标库存储过程更新:通过。 +- 重复姓名抽样检查:通过。 +- 前端生产构建 `npm run build`:通过,仅有既有警告。 + +## 2026-06-29 设备信息维护页面修改 + +### 用户需求 + +- 根据 `doc/修改设备信息维护.docx` 修改设备信息维护页面。 +- 修改后在 `work` 下创建对应路径,并复制原始文档。 +- 在对应路径下新增或修改 `01-项目功能内容`、`02-项目程序开发详细步骤`、`03-推进台账`、`04-任务矩阵`、`05-验收证据`、`06-决策记录`,并增加 README 索引。 +- 将完整执行过程追加到 `gptlog-process/gpdlog.md`,日志使用中文。 + +### 执行过程 + +1. 查看 `doc` 目录,确认存在 `doc/修改设备信息维护.docx`。 +2. 使用 PowerShell 解析 docx 中的 `word/document.xml`,提取需求文本:新增公司编码(财务)、设备信息、使用部门、入账日期、单位、数量、状态、维修记录、维保记录、工位绑定、主要设备、设备标准开机工时、特种设备、证书有效期至;生产用名复用设备名称,规格/型号复用设备型号;公司编码必填且不可修改;工位绑定为工位管理数据多选;证书有效期过期红色置顶,30 天内黄色靠前。 +3. 定位目标页面为 `src/views/DeviceManagement/DeviceInformation/index.vue`。 +4. 确认工位管理页面 `src/views/SystemMaintenance/WorkstationManagement/index.vue` 使用 `MES_登录_工位与名称_查询` 获取工位数据。 +5. 初次用 Windows 集成认证连接 SQL Server 失败,随后根据用户提供的数据库地址、账号和密码,用数据库账号连接 `192.168.2.92 / YL_MESDB` 成功。日志和文档中不记录明文密码。 +6. 查询 `dbo.基础数据_设备工位点检表`,确认原表只有旧字段:设备流水号、设备名称、设备型号、制造厂家、工位号、点检表类型、操作日期、保养人员代码、监督人员代码、设备类型。 +7. 查询旧存储过程定义,确认 `设备管理_设备信息_查询/增加/编辑` 只处理设备名称、设备型号、设备类型。 +8. 重写 `src/views/DeviceManagement/DeviceInformation/index.vue`:表格增加需求字段列;新增/编辑弹窗增加需求字段;公司编码新增必填、编辑禁用;工位绑定使用多选下拉,来源为 `MES_登录_工位与名称_查询`;主要设备、特种设备使用“是/否”下拉;证书有效期至使用日期选择;增加当前页证书有效期排序和行背景色;固定操作列,适配横向多列表格。 +9. 新增 `db_backups/update_device_information_maintenance_20260629.sql`:使用 `COL_LENGTH` 可重复执行地增加 14 个新字段;更新 `设备管理_设备信息_查询`,返回新字段并按证书有效期预警排序;更新 `设备管理_设备信息_增加`,写入新字段并校验公司编码不能为空;更新 `设备管理_设备信息_编辑`,更新新字段但不更新公司编码。 +10. 使用 `sqlcmd -f 65001` 执行增量脚本到目标库,执行成功。 +11. 验证数据库字段:`dbo.基础数据_设备工位点检表` 已存在公司编码、设备信息、使用部门、入账日期、单位、数量、状态、维修记录、维保记录、工位绑定、主要设备、设备标准开机工时、特种设备、证书有效期至。 +12. 验证存储过程参数:`设备管理_设备信息_增加` 已包含新增字段参数;`设备管理_设备信息_编辑` 已包含新增字段参数和设备流水号;`设备管理_设备信息_查询` 保持旧查询参数兼容。 +13. 执行 `EXEC dbo.[设备管理_设备信息_查询]`,过程执行无错误。 +14. 第一次执行 `npm run build` 因 124 秒超时未得到结果;随后使用更长超时时间重跑。 +15. 第二次执行 `npm run build` 成功,webpack 编译通过,仅有项目既有资源体积过大和 Browserslist 数据过期警告。 +16. 创建 `work/DeviceManagement/DeviceInformation`。 +17. 复制 `doc/修改设备信息维护.docx` 到 `work/DeviceManagement/DeviceInformation/修改设备信息维护.docx`。 +18. 在工作目录新增 `README.md`、`01-项目功能内容.md`、`02-项目程序开发详细步骤.md`、`03-推进台账.md`、`04-任务矩阵.md`、`05-验收证据.md`、`06-决策记录.md`。 + +### 修改文件 + +- `src/views/DeviceManagement/DeviceInformation/index.vue` +- `db_backups/update_device_information_maintenance_20260629.sql` +- `work/DeviceManagement/DeviceInformation/修改设备信息维护.docx` +- `work/DeviceManagement/DeviceInformation/README.md` +- `work/DeviceManagement/DeviceInformation/01-项目功能内容.md` +- `work/DeviceManagement/DeviceInformation/02-项目程序开发详细步骤.md` +- `work/DeviceManagement/DeviceInformation/03-推进台账.md` +- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md` +- `work/DeviceManagement/DeviceInformation/05-验收证据.md` +- `work/DeviceManagement/DeviceInformation/06-决策记录.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 数据库连接:通过。 +- 表字段新增:通过。 +- 存储过程参数更新:通过。 +- 查询过程执行:通过。 +- 前端生产构建 `npm run build`:通过,仅有既有警告。 + +### 下一步 + +- 登录真实系统页面做人工验收:新增设备、编辑设备、工位多选、公司编码只读、证书有效期颜色和排序。 +- 如现场要求历史设备补齐公司编码,需要补充历史数据治理脚本和验收规则。 + +## 2026-06-29 设备信息维护取消设备类型必填 + +### 用户需求 + +- 去掉设备类型必填修改。 + +### 执行过程 + +1. 打开 `src/views/DeviceManagement/DeviceInformation/index.vue`。 +2. 在表单校验 `rules` 中移除 `设备类型` 必填规则。 +3. 保留公司编码新增必填和生产用名必填。 +4. 更新 `work/DeviceManagement/DeviceInformation/03-推进台账.md`,追加第 2 轮记录。 +5. 更新 `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`,新增 `DI-008A` 任务记录。 + +### 修改文件 + +- `src/views/DeviceManagement/DeviceInformation/index.vue` +- `work/DeviceManagement/DeviceInformation/03-推进台账.md` +- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 代码层确认设备类型不再配置必填校验。 + +## 2026-06-29 修复设备信息维护日期编辑报错 + +### 用户反馈 + +- 证书有效期和入账日期编辑时报错,无法编辑修改。 + +### 执行过程 + +1. 查询目标库 `dbo.基础数据_设备工位点检表`,确认测试数据中 `入账日期` 和 `证书有效期至` 已有日期值。 +2. 查看当前前端 `src/views/DeviceManagement/DeviceInformation/index.vue`,确认两个日期字段由 `el-date-picker` 以 `yyyy-MM-dd` 字符串提交。 +3. 查看当前 `设备管理_设备信息_编辑` 存储过程,确认 `@入账日期`、`@证书有效期至` 定义为 `date` 类型。 +4. 判断问题原因:通用前端网关提交日期和空值时容易与 SQL Server `date` 参数转换冲突,尤其编辑清空日期时会报错。 +5. 修改前端页面:新增 `dateParam` 方法,两个日期字段提交时传 `yyyy-MM-dd` 字符串或空字符串,不再传 `null`。 +6. 新增数据库修复脚本 `db_backups/fix_device_information_date_edit_20260629.sql`。 +7. 修复脚本调整 `设备管理_设备信息_增加/编辑`: + - `@入账日期` 改为 `nvarchar(50)`。 + - `@证书有效期至` 改为 `nvarchar(50)`。 + - 写入表时使用 `TRY_CONVERT(date, NULLIF(@入账日期, N''))`。 + - 写入表时使用 `TRY_CONVERT(date, NULLIF(@证书有效期至, N''))`。 +8. 使用 `sqlcmd -f 65001` 执行修复脚本到 `192.168.2.92 / YL_MESDB`,执行成功。 +9. 查询 `sys.parameters`,确认 `设备管理_设备信息_增加/编辑` 的两个日期参数已变更为 `nvarchar`。 +10. 直接执行 `设备管理_设备信息_编辑` 测试正常日期:传入 `2026-07-01` 和 `2026-07-31`,返回 `result=1`,数据库日期更新成功。 +11. 直接执行 `设备管理_设备信息_编辑` 测试清空日期:传入空字符串,返回 `result=1`,数据库日期字段保存为 `NULL`。 +12. 更新工作目录文档:推进台账、任务矩阵、验收证据。 + +### 修改文件 + +- `src/views/DeviceManagement/DeviceInformation/index.vue` +- `db_backups/fix_device_information_date_edit_20260629.sql` +- `work/DeviceManagement/DeviceInformation/03-推进台账.md` +- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md` +- `work/DeviceManagement/DeviceInformation/05-验收证据.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 修复 SQL 执行:通过。 +- 日期参数类型验证:通过,已为 `nvarchar`。 +- 正常日期编辑验证:通过。 +- 清空日期编辑验证:通过,日期保存为 `NULL`。 + +### 补充验证 + +- 执行 `npm run build`,前端生产构建通过。 +- webpack compiled with 2 warnings,仍为项目既有资源体积过大和 Browserslist/caniuse-lite 数据过期警告。 + +## 2026-06-29 修复设备信息维护日期控件点击报错 + +### 用户反馈 + +- 点击修改入账日期或证书有效期时报错:`TypeError: date.getHours is not a function`。 +- 报错来自 Element UI 日期组件 `DateTable`,说明日期控件内部拿到的不是 `Date` 对象。 + +### 执行过程 + +1. 查看 `src/views/DeviceManagement/DeviceInformation/index.vue`,确认两个 `el-date-picker` 使用了 `value-format="yyyy-MM-dd"`,并且编辑回填时给表单日期字段赋值为字符串。 +2. 判断原因:Element UI 的日期面板点击逻辑需要 `Date` 对象参与内部时间修改,当前字符串值导致 `date.getHours is not a function`。 +3. 修改两个日期控件:去掉 `value-format="yyyy-MM-dd"`,让 `v-model` 保持 `Date` 对象。 +4. 修改编辑回填:`入账日期` 和 `证书有效期至` 改为调用 `parseDateValue`,将数据库日期转换为本地 `Date` 对象。 +5. 保留提交兼容:`dateParam` 在提交前将 `Date` 对象格式化成 `yyyy-MM-dd` 字符串,继续兼容已修复的数据库过程。 +6. 执行 `npm run build`,前端构建通过。 +7. 更新工作目录中的推进台账、任务矩阵和验收证据。 + +### 修改文件 + +- `src/views/DeviceManagement/DeviceInformation/index.vue` +- `work/DeviceManagement/DeviceInformation/03-推进台账.md` +- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md` +- `work/DeviceManagement/DeviceInformation/05-验收证据.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 两个日期控件已移除 `value-format`。 +- 编辑回填日期已转换为 `Date` 对象。 +- 提交前仍格式化为 `yyyy-MM-dd` 字符串。 +- `npm run build` 通过,仅有项目既有资源体积和 Browserslist 过期警告。 + +## 2026-06-29 修复设备信息维护编辑弹窗日期不回填 + +### 用户反馈 + +- 数据库有值,列表也有值,只是点击编辑时 `入账日期` 和 `证书有效期至` 读不到,显示为空。 + +### 执行过程 + +1. 查询数据库 `dbo.基础数据_设备工位点检表`,发现上一轮为了验证清空日期,测试记录 `设备流水号=1` 的两个日期被置为 `NULL`。 +2. 根据用户说明数据库和列表实际有值,判断问题仍集中在前端 `handleEdit` 日期回填。 +3. 恢复测试记录日期:`入账日期=2026-07-01`,`证书有效期至=2026-07-31`。 +4. 增强 `formatDate`,兼容 `yyyy-MM-dd`、`yyyy-MM-dd HH:mm:ss`、`yyyy/MM/dd`、`/Date(...)` 等后端可能返回格式。 +5. 增强 `parseDateValue`,支持直接传入 `Date` 对象,也支持通过 `formatDate` 解析字符串后生成本地 `Date` 对象。 +6. 将表单默认日期从空字符串调整为 `null`,符合 Element UI 日期控件空值约定。 +7. 修改编辑回填逻辑:不再整体替换 `this.form`,改为逐字段 `$set`,避免 Element Form 字段状态缓存导致日期控件未刷新。 +8. 在 `dialogFormVisible = true` 后通过 `$nextTick` 再次设置 `入账日期` 和 `证书有效期至`,防止被 `resetFields` 或弹窗初始化覆盖。 +9. 使用 Node 脚本验证多种日期格式均能解析为有效 `Date`。 +10. 执行 `npm run build`,前端构建通过,仅有既有资源体积和 Browserslist 过期警告。 +11. 确认本地 dev server 已运行在 `https://127.0.0.1:1997/`。命令行访问被自签名证书拦截,浏览器打开时需要允许证书后测试。 +12. 更新工作目录中的推进台账、任务矩阵和验收证据。 + +### 修改文件 + +- `src/views/DeviceManagement/DeviceInformation/index.vue` +- `work/DeviceManagement/DeviceInformation/03-推进台账.md` +- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md` +- `work/DeviceManagement/DeviceInformation/05-验收证据.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 数据库测试记录日期恢复:通过。 +- 本地日期解析函数测试:通过。 +- 前端生产构建 `npm run build`:通过,仅有既有警告。 +- 本地页面地址:`https://127.0.0.1:1997/`。 + +## 2026-06-29 新增设备名称字段并导入设备信息 Excel + +### 用户反馈 + +- 用户要求新增字段“设备名称”。 +- 用户要求将 `doc` 下的设备信息数据插入数据库。 +- 用户补充说明数据文件为 `设备信息.xlsx`。 +- 用户要求继续执行。 + +### 执行过程 + +1. 检查 `doc/设备信息.xlsx`,确认 Sheet1 表头为:`名称`、`公司编码`、`生产用名`、`型号/规格`、`设备信息`、`使用部门`、`入账日期`、`单位`、`数量`、`状态`。 +2. 读取 Excel 数据,确认有效数据共 89 行。 +3. 查询目标数据库 `192.168.2.92 / YL_MESDB`,确认 `dbo.基础数据_设备工位点检表` 当时为空。 +4. 明确字段映射:Excel `名称` 保存到新增数据库字段 `名称`,页面显示为“设备名称”;Excel `生产用名` 保存到原字段 `设备名称`,页面显示为“生产用名”。 +5. 修改 `src/views/DeviceManagement/DeviceInformation/index.vue`: + - 列表新增“设备名称”列,绑定 `名称`。 + - 新增/编辑弹窗新增“设备名称”输入框,绑定 `form.名称`。 + - `emptyForm` 增加 `名称`。 + - 编辑回填增加 `名称`。 + - 新增/编辑提交参数增加 `名称`。 +6. 生成 `db_backups/add_device_name_and_import_excel_20260629.sql`: + - 表 `dbo.基础数据_设备工位点检表` 不存在 `名称` 字段时新增该字段。 + - 调整 `设备管理_设备信息_增加` 和 `设备管理_设备信息_编辑`,增加 `@名称` 参数。 + - 使用 `MERGE` 按 `公司编码` 导入或更新 Excel 数据,避免重复导入生成重复记录。 +7. 执行导入脚本,数据库导入后设备信息总数为 89。 +8. 抽样检查发现 Excel 日期对象导入后部分 `入账日期` 早一天,例如 `1/1/07` 被保存为 `2006-12-31`。 +9. 根据 Excel 单元格显示值重新生成 `db_backups/fix_device_excel_import_dates_20260629.sql`,并执行日期修正。 +10. 修正后抽样验证: + - `REALLY-11` 入账日期为 `2007-01-01`。 + - `REALLY-6` 入账日期为 `2008-12-24`。 + - `REALLY-1` 入账日期为 `2011-01-01`。 +11. 检查新增过程文本,发现“公司编码不能为空”提示在首次脚本生成时变成问号文本。 +12. 使用 `apply_patch` 修正导入脚本里的提示文本,并新增 `db_backups/fix_device_add_company_code_message_20260629.sql`,只重新发布新增过程,不重新执行整份导入脚本,避免覆盖已修正日期。 +13. 执行提示文本修正脚本,确认新增过程可返回中文提示。 +14. 复制 `doc/设备信息.xlsx` 到 `work/DeviceManagement/DeviceInformation/设备信息.xlsx` 作为工作副本。 +15. 更新 `work/DeviceManagement/DeviceInformation` 下的 README、01-项目功能内容、02-项目程序开发详细步骤、03-推进台账、04-任务矩阵、05-验收证据、06-决策记录。 +16. 执行 `npm run build`,前端构建通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。 + +### 修改文件 + +- `src/views/DeviceManagement/DeviceInformation/index.vue` +- `db_backups/add_device_name_and_import_excel_20260629.sql` +- `db_backups/fix_device_excel_import_dates_20260629.sql` +- `db_backups/fix_device_add_company_code_message_20260629.sql` +- `work/DeviceManagement/DeviceInformation/设备信息.xlsx` +- `work/DeviceManagement/DeviceInformation/README.md` +- `work/DeviceManagement/DeviceInformation/01-项目功能内容.md` +- `work/DeviceManagement/DeviceInformation/02-项目程序开发详细步骤.md` +- `work/DeviceManagement/DeviceInformation/03-推进台账.md` +- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md` +- `work/DeviceManagement/DeviceInformation/05-验收证据.md` +- `work/DeviceManagement/DeviceInformation/06-决策记录.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- Excel 有效数据行数:89。 +- 数据库设备信息总数:89。 +- `名称` 字段已存在并用于页面“设备名称”。 +- Excel `生产用名` 继续保存到原 `设备名称` 字段。 +- 日期修正后样例数据正确。 +- 新增过程提示文本已修正为“公司编码不能为空”。 +- `npm run build` 通过,仅有既有警告。 + +## 2026-06-29 新增及时齐套跟踪结果页面 + +### 用户需求 + +- 根据 `doc/新增及时齐套跟踪结果.docx` 新增页面“及时齐套跟踪结果”。 +- 修改后在 `work` 下创建对应路径并复制原始文档。 +- 在对应路径新增或修改 `01-项目功能内容`、`02-项目程序开发详细步骤`、`03-推进台账`、`04-任务矩阵`、`05-验收证据`、`06-决策记录` 和 README 索引。 +- 将完整执行过程使用中文追加到 `/gptlog-process/gpdlog.md`。 + +### 执行过程 + +1. 在 `doc` 目录查找需求文档,确认真实文件为 `doc/新增及时齐套跟踪结果.docx`。 +2. 将 docx 临时复制为 zip 并解包读取 `word/document.xml`,提取需求正文。 +3. 从需求中确认: + - 一级数据字段按计划用表页面一致。 + - 过滤条件和计划用表页面一致。 + - 二级绿色数据来自 `SAP.SBO_YL.dbo.VIEW_Jijiankukc`。 + - 二级字段包括物料编码、物料名称、缺件数量、属性、生产订单号、进度、工艺路线、预计完成时间。 +4. 查找现有页面,确认“计划用表”为 `src/views/PlanManagement/PlanShell/index.vue`,使用过程 `计划排产_查询计划信息`。 +5. 查找“生产计划跟踪”为 `src/views/ProductionManagement/ProductionPlanTrack/index.vue`,复用其当前序和工艺路线展示思路。 +6. 查询数据库菜单表,确认“计划用表”挂在 `PlanManagement` 下,因此新页面也放在 `PlanManagement` 模块。 +7. 查询 SAP linked server,确认可通过 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]` 访问 SAP 缺件视图。 +8. 查询 SAP 视图字段,确认存在 `ItemCode`、`U_Name`、`属性`、`未发货数量`、`在制采购`、`采购员`、`采购预计交货日期`、`采购未清数量`、`到货草稿`。 +9. 查询 MES 视图字段,确认 `View_生产订单_MES` 可提供计划号、合同号、订单编号、物料编号、物料描述、计划数量、计划完成、计划开始时间、计划完成时间、齐套、发料状态、拣配状态、自制件属性、任务状态、加工状态、进度等字段。 +10. 新增 `db_backups/create_timely_kit_tracking_result_20260629.sql`,创建或更新 `dbo.生产管理_及时齐套跟踪结果_查询`。 +11. 新过程按计划用表参数接收筛选条件,并将 SAP 缺件数据与 MES 生产计划匹配: + - 机加件:`SAP.ItemCode = MES.物料编号`。 + - 装配件:`SAP.ItemCode + SAP.Project = MES.物料编号 + MES.合同号`。 + - 外购件:属性为空,生产订单号取 SAP `在制采购`,工艺路线列拼接采购信息和质检状态。 +12. 首次执行查询过程取样时,SQL Server 报 `QUOTED_IDENTIFIER` SET 选项错误。 +13. 修改 SQL 脚本,增加 `SET ANSI_NULLS ON` 和 `SET QUOTED_IDENTIFIER ON`,重新发布过程。 +14. 再次执行取样查询,确认过程可返回 SAP 缺件和 MES 计划组合数据。 +15. 新增 `db_backups/add_timely_kit_tracking_result_menu_20260629.sql`。 +16. 执行菜单脚本,按“计划用表”的角色授权复制新增菜单,生成 4 条“及时齐套跟踪结果”菜单记录。 +17. 新增前端页面 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`: + - 过滤区参考计划用表。 + - 主表展示一级计划字段。 + - 展开行展示二级缺件跟踪数据。 + - 二级明细行使用浅绿色背景。 + - 状态字段使用绿色/橙色标签样式。 +18. 执行 `npm run build`,构建通过,仅有项目既有资源体积过大和 Browserslist/caniuse-lite 过期警告。 +19. 创建 `work/PlanManagement/TimelyKitTrackingResult`。 +20. 复制 `doc/新增及时齐套跟踪结果.docx` 到工作目录。 +21. 新增 README、01-项目功能内容、02-项目程序开发详细步骤、03-推进台账、04-任务矩阵、05-验收证据、06-决策记录。 + +### 修改文件 + +- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue` +- `db_backups/create_timely_kit_tracking_result_20260629.sql` +- `db_backups/add_timely_kit_tracking_result_menu_20260629.sql` +- `work/PlanManagement/TimelyKitTrackingResult/新增及时齐套跟踪结果.docx` +- `work/PlanManagement/TimelyKitTrackingResult/README.md` +- `work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md` +- `work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md` +- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md` +- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md` +- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md` +- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- SAP linked server 取样查询:通过。 +- `dbo.生产管理_及时齐套跟踪结果_查询` 执行:通过。 +- 菜单脚本执行:通过,新增 4 条菜单记录。 +- 前端构建 `npm run build`:通过,仅有既有警告。 + +## 2026-06-29 修正及时齐套跟踪结果页面反馈问题 + +### 用户反馈 + +1. 工艺路线缺少日期行和合格行,且没有颜色。 +2. 二级数据里面存在重复数据,不应该出现生产订单号一样的数据。 +3. 属性为空时代表外购,一级数据不对,应该取 SAP 视图 `DocEntry` 作为订单编号,再按照计划用表查询。 + +### 执行过程 + +1. 复查 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`,确认二级明细原先只把工艺路线作为文本展示,不能展示日期行、工序行、合格行和状态颜色。 +2. 复查 `db_backups/create_timely_kit_tracking_result_20260629.sql`,确认 SAP 缺件数据与 MES 计划数据匹配时,属性为空的外购数据仍可能使用在制采购号,导致一级计划数据取值不符合反馈要求。 +3. 查询样例订单 `7134`,确认同一个缺件生产订单号在二级明细中会重复出现。 +4. 查询样例订单 `7335`,确认该外购场景需要使用 SAP 视图 `DocEntry=7335` 作为订单编号匹配计划用表数据。 +5. 修改 SQL 查询过程脚本: + - 新增 SAP 缺件源数据去重,按 `DocEntry + Project + ItemCode + 属性` 保留一条。 + - 外购属性为空时,一级订单编号改为优先使用 `SAP.DocEntry`。 + - 外购属性为空时,MES 计划用表匹配条件增加 `MES.订单编号 = SAP.DocEntry`。 + - 新增 `工艺路线明细` JSON 字段,返回工序名称、计划开始时间、计划完成时间、进度、完成数量、收检合格数、收检不合格数、加工状态等页面渲染所需数据。 + - 最终结果增加按 `订单号 + 缺件生产订单号` 的去重层,避免同一生产订单号在二级明细重复出现。 +6. 重新执行 `db_backups/create_timely_kit_tracking_result_20260629.sql`,发布查询过程成功。 +7. 修改前端页面: + - 二级列“工艺路线/采购状态”增加自制件工艺路线 HTML 渲染。 + - 工艺路线渲染为三行结构:日期行、工序行、合格行。 + - 根据工序进度和加工状态增加绿色、蓝色、橙色、红色样式。 + - 外购件仍展示采购状态文本。 + - 前端合并数据时增加二级明细去重,避免接口数据异常时重复展示同一生产订单号。 +8. 更新工作目录文档: + - `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md` + - `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md` + - `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md` + - `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md` + +### 修改文件 + +- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue` +- `db_backups/create_timely_kit_tracking_result_20260629.sql` +- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md` +- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md` +- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md` +- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 重新发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。 +- 查询 `@订单号=7134` 时,同一缺件生产订单号 `7134` 的二级明细只返回 1 条,不再重复。 +- 查询 `@订单号=7335` 时,外购一级数据已按 `SAP.DocEntry=7335` 匹配到计划用表数据。 +- 执行 `npm run build` 通过,仅保留项目已有的资源体积过大和 Browserslist/caniuse-lite 过期警告。 + +### 下一步 + +- 登录页面人工查看展开行效果,重点确认工艺路线日期行、工序行、合格行和颜色是否与业务预期一致。 + +## 2026-06-29 继续修正及时齐套跟踪结果外购和主数据问题 + +### 用户反馈 + +1. 属性为空的外购数据应取 SAP 视图的采购员、采购未清数量、到货草稿,并根据到货草稿匹配采购入库检页面的生产订单读取检验状态。 +2. 第 32 行主数据生产订单号 `2007` 的一级数据是正确参照;前 1-10 行不正确,主数据缺件不应是主数据自身,且主数据产品编码后面的字段不应为空。 + +### 执行过程 + +1. 复查 `db_backups/create_timely_kit_tracking_result_20260629.sql`,确认上一版把一级主数据和二级缺件匹配混在同一个 `v` 里。 +2. 定位到问题来源:SQL 使用 `COALESCE(v.订单编号, sap.DocEntry)`、`COALESCE(v.物料编号, sap.ItemCode)`、`COALESCE(v.物料描述, sap.U_Name)` 作为主数据兜底,导致 SAP 缺件在没有匹配到计划用表时也会生成主表行。 +3. 查询 `@订单号=2007`,确认一级主数据完整,但外购缺件生产订单号显示成主订单号 `2007`,业务含义错误。 +4. 查看采购入库检页面 `src/views/QualityManagement/CheckTask/purchaseIncoming.vue`,确认查询过程为 `质量管理_质量检验_入库质检任务_查询`,页面生产订单字段来自 `质量检验_质检任务_SAP.订单编号`。 +5. 查看 `doc_old/fix_质量管理_入库质检任务_查询.sql`,确认采购入库检状态按 `质量检验_质检任务_SAP.入库数量` 和 `YL_质量检验_质检记录.检验数量` 判断。 +6. 修改查询过程: + - 一级主数据只按 `SAP.DocEntry = View_生产订单_MES.订单编号` 匹配。 + - 删除主数据字段对 SAP 缺件字段的兜底。 + - 新增 `detail_order`,仅用于自制缺件匹配二级生产订单、工艺路线和进度。 + - 外购缺件生产订单号改为 `SAP.到货草稿`;到货草稿为 0 时留空。 + - 外购质检状态改为 `SAP.到货草稿 -> 质量检验_质检任务_SAP.订单编号 -> YL_质量检验_质检记录` 口径。 + - 非外购质检状态保持为空。 +7. 重新发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。 +8. 验证 `@订单号=2007`:一级主数据完整,外购缺件生产订单号不再等于 `2007`。 +9. 验证 `@订单号=7321`:外购缺件到货草稿 `11209` 显示为缺件生产订单号,质检状态为未完成。 +10. 默认查询统计:总行数 198,产品编码/产品名称为空行数 0,缺件生产订单号等于主订单号行数 0,非外购质检状态非空行数 0。 +11. 执行 `npm run build`,构建通过,仅保留项目既有 warning。 +12. 删除临时验证脚本 `db_backups/verify_timely_kit_tracking_result_temp_20260629.sql`。 +13. 更新 `work/PlanManagement/TimelyKitTrackingResult` 下推进台账、任务矩阵、验收证据、决策记录,并追加本日志。 + +### 修改文件 + +- `db_backups/create_timely_kit_tracking_result_20260629.sql` +- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md` +- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md` +- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md` +- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md` +- `gptlog-process/gpdlog.md` + +### 验证结果 + +- 查询过程发布成功。 +- `@订单号=2007`:一级主数据完整,外购缺件生产订单号不再等于 `2007`。 +- `@订单号=7321`:外购缺件按到货草稿 `11209` 显示缺件生产订单号,质检状态来自采购入库检口径。 +- 默认查询统计:总行数 198,产品编码/产品名称为空行数 0,缺件生产订单号等于主订单号行数 0,非外购质检状态非空行数 0。 +- `npm run build` 通过,仅有项目既有资源体积过大和 Browserslist/caniuse-lite 过期警告。 diff --git a/src/views/DeviceManagement/DeviceInformation/index.vue b/src/views/DeviceManagement/DeviceInformation/index.vue index d4d091d..d33a54c 100644 --- a/src/views/DeviceManagement/DeviceInformation/index.vue +++ b/src/views/DeviceManagement/DeviceInformation/index.vue @@ -1,9 +1,9 @@