From f27e099eddb9ff36260a07c1e17ebc3fbaa62a15 Mon Sep 17 00:00:00 2001 From: Salijoghli <107577102+Salijoghli@users.noreply.github.com> Date: Mon, 1 Dec 2025 16:33:11 +0400 Subject: [PATCH] modified gatewway script, updated queries --- ...8fe993cdb303c103c635e0ef7a3be1cc4c29d8d1cb | 14 - ...a22791aed569f02eb25dc5aee2cf0eb41ad926d07e | 209 ---- ...038013321395a78e6d889e792e084f6dd0efbc1b53 | Bin 10700 -> 0 bytes ...a690bb4fb9110739a9b1ed64370eff08d8af06e4e1 | 60 -- ...4a0f8b5a8a60891e4fdfab1df7b5d519e9b133569c | 63 -- ...046a81efc5468924a7deb9cbe3642a157d986b932} | 2 - ...32cd0c374bd52a3e9b0b6355bdf7eea870715622f2 | 229 ----- ...71a8194116770c8c71f0c4a3e2c67dab2a124e5758 | Bin 0 -> 1336 bytes ...ef13682780a37e86f32fc5fa8a59ace7f66131e634 | 59 -- ...895ec9f331d0aaa7757caa0225b5594a71417adc9b | Bin 0 -> 9063 bytes ...69b6bd1af4c55891cedc35d91670153cb91ba9179} | 15 +- ...305aaee5e2d1cba96fe5a89414422c35d1c866a7e0 | 35 - ...3b6a593989f875469887fc85046d373546cc76acf3 | 62 -- ...cd99055903be2d24f0e4e0842f50f1ff37e46668af | 14 - ...3fa1eec83d034351913c602163d58763d6e5241e37 | 50 - ...3fb56af43e21b0d406dbddd200f11866170306ddec | Bin 47283 -> 0 bytes ...a76709fd6f38f120dc85910ba9f8d5c64fd454b9da | 79 ++ ...7ef872856ac630b1939cbf5b5ef283a742698dec0a | 53 + ...93c238e7b5c4b3c45807843813cf3338da7da9b838 | 74 ++ ...62bbd80264dc9fc8efd39c643b3c6434c2ca4f09b8 | 29 + ...2f753da7aba9b67378b33e21b1b9740fc7e76eb028 | 52 + ...e41b280ae11df4ea4a862985ee5ad88e63ffc2cef} | 915 +----------------- ...9f63691dfaa14a2763f22a660bacd65421c3bdf1b1 | 28 + ...6d1a518b54dba768f9bf35b9955a0d85d88074441c | 47 + ...c3f00293db837f27ddad07065b85eae79de7d2449f | 56 -- ...f485e66ca9c0e3b906b207c8c0f5404641e4970b53 | 24 + ...536ba15a0c0e3fb2fb82c5f1ca5f30ee6b3309d468 | 59 -- ...936e1d840749c418a82a762528b096c1aa5481778b | 29 - ...78d43e38aca28ebd7a654bd70fb902e1722ccda7d7 | 45 - ...a40309f66f9a57ae3a898b8bda8adc20b11819fe47 | 62 -- .../autStand/Windows/Statistics/resource.json | 4 +- .../autStand/Windows/Statistics/thumbnail.png | Bin 47283 -> 26956 bytes .../autStand/Windows/Statistics/view.json | 915 +----------------- BNA8_autStand/ignition/event-scripts/data.bin | Bin 10700 -> 9063 bytes .../ignition/event-scripts/resource.json | 4 +- .../Hourly Induct Count Graph/query.sql | 29 - .../Hourly Induct Count Graph/resource.json | 51 - .../Hourly Induct Count/query.sql | 33 +- .../Hourly Induct Count/resource.json | 4 +- .../Hourly Induct Percentage Graph/query.sql | 14 - .../resource.json | 51 - .../Hourly Induct Percentage/query.sql | 72 +- .../Hourly Induct Percentage/resource.json | 4 +- .../Hourly Induct Rate Graph/query.sql | 14 - .../Hourly Induct Rate Graph/resource.json | 46 - .../Hourly Lane Rate Graph/query.sql | 62 -- .../Hourly Lane Rate Graph/resource.json | 51 - .../HourlyLane/Hourly Lane Rate/query.sql | 62 -- .../HourlyLane/Hourly Lane Rate/resource.json | 51 - .../Hourly Scanner Count Graph/query.sql | 42 +- .../Hourly Scanner Count Graph/resource.json | 4 +- .../Hourly Scanner Count/query.sql | 73 +- .../Hourly Scanner Count/resource.json | 4 +- .../Hourly Scanner Percentage Graph/query.sql | 210 +--- .../resource.json | 4 +- .../Hourly Scanner Percentage/query.sql | 246 +---- .../Hourly Scanner Percentage/resource.json | 4 +- .../query.sql | 59 -- .../resource.json | 46 - .../Hourly Sorter Details Rate/query.sql | 59 -- .../Hourly Sorter Details Rate/resource.json | 46 - .../Graph Scanner Details Count/query.sql | 69 +- .../Graph Scanner Details Count/resource.json | 4 +- .../Scanner Details Count/query.sql | 2 - .../Scanner Details Count/resource.json | 4 +- .../Scanner Details Percentage/query.sql | 15 +- .../Scanner Details Percentage/resource.json | 4 +- .../Scanner Details Rate/query.sql | 56 +- .../Scanner Details Rate/resource.json | 4 +- conversion-report.txt | 10 + 70 files changed, 680 insertions(+), 4116 deletions(-) delete mode 100644 .resources/01970e894549f6978724818fe993cdb303c103c635e0ef7a3be1cc4c29d8d1cb delete mode 100644 .resources/0437122169fcfedd4d2f49a22791aed569f02eb25dc5aee2cf0eb41ad926d07e delete mode 100644 .resources/1392eac9f961dcd959bc98038013321395a78e6d889e792e084f6dd0efbc1b53 delete mode 100644 .resources/1d7750cbbc3cf985051d27a690bb4fb9110739a9b1ed64370eff08d8af06e4e1 delete mode 100644 .resources/1f68f6c57744ed48c999e24a0f8b5a8a60891e4fdfab1df7b5d519e9b133569c rename .resources/{8675fc47b6922ba3c589314eb1b3fd51417b10b89d2cd267cbee1aebfd2266f3 => 20e941f59abf4746389f7b2046a81efc5468924a7deb9cbe3642a157d986b932} (95%) delete mode 100644 .resources/2501ac305875aaff82fd2332cd0c374bd52a3e9b0b6355bdf7eea870715622f2 create mode 100644 .resources/26c4558f2baf5b132815d871a8194116770c8c71f0c4a3e2c67dab2a124e5758 delete mode 100644 .resources/2be934862371fb8b518432ef13682780a37e86f32fc5fa8a59ace7f66131e634 create mode 100644 .resources/3fec25420695f06292a18c895ec9f331d0aaa7757caa0225b5594a71417adc9b rename .resources/{7a7152d375b05f54c24fc56cd38e2ecdf043b16ca4f9913dd0c3d78246e454e5 => 45babef86efc0e145025e8869b6bd1af4c55891cedc35d91670153cb91ba9179} (65%) delete mode 100644 .resources/49ae9770d2eddd377b8a4e305aaee5e2d1cba96fe5a89414422c35d1c866a7e0 delete mode 100644 .resources/61f1d12b5e364c065949ca3b6a593989f875469887fc85046d373546cc76acf3 delete mode 100644 .resources/750a42452c34a0ba9c8635cd99055903be2d24f0e4e0842f50f1ff37e46668af delete mode 100644 .resources/97878c5888a407ebd30d1f3fa1eec83d034351913c602163d58763d6e5241e37 delete mode 100644 .resources/99a73f815dda61d236296c3fb56af43e21b0d406dbddd200f11866170306ddec create mode 100644 .resources/b06d6fd647e1f20c143a22a76709fd6f38f120dc85910ba9f8d5c64fd454b9da create mode 100644 .resources/b8abbff4e5bf91308d65fa7ef872856ac630b1939cbf5b5ef283a742698dec0a create mode 100644 .resources/b9baa45bd52f487ea43e1e93c238e7b5c4b3c45807843813cf3338da7da9b838 create mode 100644 .resources/c0497e49a82a66fc8635f162bbd80264dc9fc8efd39c643b3c6434c2ca4f09b8 create mode 100644 .resources/c2272d9513a192fe94b29b2f753da7aba9b67378b33e21b1b9740fc7e76eb028 rename .resources/{de7dea6b0bac354930e91556c1a0267062a02c23062fbd900539c777e3ef9fc2 => c945c0bdd9b54cade6fedd2e41b280ae11df4ea4a862985ee5ad88e63ffc2cef} (98%) create mode 100644 .resources/cd21c0899baa73b049e0d39f63691dfaa14a2763f22a660bacd65421c3bdf1b1 create mode 100644 .resources/d7985deb24f1a5b56c37ed6d1a518b54dba768f9bf35b9955a0d85d88074441c delete mode 100644 .resources/dfcf061583eccdd771d7c6c3f00293db837f27ddad07065b85eae79de7d2449f create mode 100644 .resources/e2796f8722d75053343ec8f485e66ca9c0e3b906b207c8c0f5404641e4970b53 delete mode 100644 .resources/f2c69441ab39ee31fbe3c1536ba15a0c0e3fb2fb82c5f1ca5f30ee6b3309d468 delete mode 100644 .resources/f585184fbd0ef5caf4b898936e1d840749c418a82a762528b096c1aa5481778b delete mode 100644 .resources/f7cfea6fcf8b2f48771e1e78d43e38aca28ebd7a654bd70fb902e1722ccda7d7 delete mode 100644 .resources/fe584a19ce580346e2940fa40309f66f9a57ae3a898b8bda8adc20b11819fe47 delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/resource.json delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/resource.json delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/resource.json delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/resource.json delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/resource.json delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/resource.json delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/query.sql delete mode 100644 BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/resource.json diff --git a/.resources/01970e894549f6978724818fe993cdb303c103c635e0ef7a3be1cc4c29d8d1cb b/.resources/01970e894549f6978724818fe993cdb303c103c635e0ef7a3be1cc4c29d8d1cb deleted file mode 100644 index 916c1e33..00000000 --- a/.resources/01970e894549f6978724818fe993cdb303c103c635e0ef7a3be1cc4c29d8d1cb +++ /dev/null @@ -1,14 +0,0 @@ --- Hourly Induct Graph Query (Rate) --- Shows every hour in detail for graphing - -SELECT - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - COUNT(*) AS Total -FROM alltable -WHERE t_stamp BETWEEN :starttime AND :endtime -GROUP BY DATE(t_stamp), HOUR(t_stamp) -ORDER BY DATE(t_stamp) ASC, HOUR(t_stamp) ASC; - diff --git a/.resources/0437122169fcfedd4d2f49a22791aed569f02eb25dc5aee2cf0eb41ad926d07e b/.resources/0437122169fcfedd4d2f49a22791aed569f02eb25dc5aee2cf0eb41ad926d07e deleted file mode 100644 index b23f33dc..00000000 --- a/.resources/0437122169fcfedd4d2f49a22791aed569f02eb25dc5aee2cf0eb41ad926d07e +++ /dev/null @@ -1,209 +0,0 @@ -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - sScanner_Name AS `Scanner Name`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_bad_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Bad Reads`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_comm_fault), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Comm Faults`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_good_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Good Reads`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_items), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Multi Items`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Multi Reads`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_data), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total No Data`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total No Reads` -FROM scanner_reads -WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') -GROUP BY DATE(t_stamp), HOUR(t_stamp), sScanner_Name - -UNION ALL - -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - 'S03aa' AS `Scanner Name`, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS `Total Bad Reads`, - '0%' AS `Total Comm Faults`, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS `Total Good Reads`, - '0%' AS `Total Multi Items`, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS `Total Multi Reads`, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS `Total No Data`, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS `Total No Reads` -FROM item_data -WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') -GROUP BY DATE(t_stamp), HOUR(t_stamp) -ORDER BY `Start Timestamp` ASC; - diff --git a/.resources/1392eac9f961dcd959bc98038013321395a78e6d889e792e084f6dd0efbc1b53 b/.resources/1392eac9f961dcd959bc98038013321395a78e6d889e792e084f6dd0efbc1b53 deleted file mode 100644 index 5f6e15d87e45f1e6316dc1dbb230283010e6b69f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10700 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 diff --git a/.resources/1d7750cbbc3cf985051d27a690bb4fb9110739a9b1ed64370eff08d8af06e4e1 b/.resources/1d7750cbbc3cf985051d27a690bb4fb9110739a9b1ed64370eff08d8af06e4e1 deleted file mode 100644 index 113ea540..00000000 --- a/.resources/1d7750cbbc3cf985051d27a690bb4fb9110739a9b1ed64370eff08d8af06e4e1 +++ /dev/null @@ -1,60 +0,0 @@ -SELECT - 'S03' AS Sorter, - DATE_FORMAT(:starttime, '%Y-%m-%d %H:%i') AS start_time, - DATE_FORMAT(:endtime, '%Y-%m-%d %H:%i') AS end_time, - 'S03aa' AS sScanner_Name, - - CASE - WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_bad_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) - END AS total_bad_reads, - - 0 AS total_comm_faults, - - CASE - WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_good_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) - END AS total_good_reads, - - 0 AS total_multi_items, - - CASE - WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_multi_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) - END AS total_multi_reads, - - CASE - WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_no_data, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) - END AS total_no_data, - - CASE - WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_no_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) - END AS total_no_reads, - - CASE - WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) - END AS total - -FROM (SELECT 1) AS p -LEFT JOIN ( - SELECT - SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) AS total_bad_reads, - SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS total_good_reads, - SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) AS total_multi_reads, - SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS total_no_data, - SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS total_no_reads, - COUNT(*) AS total - FROM item_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' -) AS sorter_total ON 1 = 1; diff --git a/.resources/1f68f6c57744ed48c999e24a0f8b5a8a60891e4fdfab1df7b5d519e9b133569c b/.resources/1f68f6c57744ed48c999e24a0f8b5a8a60891e4fdfab1df7b5d519e9b133569c deleted file mode 100644 index 160426ae..00000000 --- a/.resources/1f68f6c57744ed48c999e24a0f8b5a8a60891e4fdfab1df7b5d519e9b133569c +++ /dev/null @@ -1,63 +0,0 @@ -SELECT - roundtime AS `Round Time`, - sScanner_Name AS `Scanner Name`, - COALESCE(total_bad_reads, 0) AS `Total Bad Reads`, - COALESCE(total_comm_faults, 0) AS `Total Comm Faults`, - COALESCE(total_good_reads, 0) AS `Total Good Reads`, - COALESCE(total_multi_items, 0) AS `Total Multi Items`, - COALESCE(total_multi_reads, 0) AS `Total Multi Reads`, - COALESCE(total_no_data, 0) AS `Total No Data`, - COALESCE(total_no_reads, 0) AS `Total No Reads`, - COALESCE(total_bad_reads, 0) + - COALESCE(total_comm_faults, 0) + - COALESCE(total_good_reads, 0) + - COALESCE(total_multi_items, 0) + - COALESCE(total_multi_reads, 0) + - COALESCE(total_no_data, 0) + - COALESCE(total_no_reads, 0) AS `Total` -FROM ( - SELECT - FROM_UNIXTIME( - FLOOR(UNIX_TIMESTAMP(t_stamp) / - CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) * - CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) AS roundtime, - sScanner_Name, - SUM(diScanner_bad_reads) AS total_bad_reads, - SUM(diScanner_comm_fault) AS total_comm_faults, - SUM(diScanner_good_reads) AS total_good_reads, - SUM(diScanner_multi_items) AS total_multi_items, - SUM(diScanner_multi_reads) AS total_multi_reads, - SUM(diScanner_no_data) AS total_no_data, - SUM(diScanner_no_reads) AS total_no_reads - FROM scanner_reads - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') - GROUP BY roundtime, sScanner_Name - - UNION ALL - - SELECT - FROM_UNIXTIME( - FLOOR(UNIX_TIMESTAMP(t_stamp) / - CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) * - CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) AS roundtime, - 'S03aa' AS sScanner_Name, - SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) AS total_bad_reads, - 0 AS total_comm_faults, - SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS total_good_reads, - 0 AS total_multi_items, - SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) AS total_multi_reads, - SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS total_no_data, - SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS total_no_reads - FROM item_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') - GROUP BY roundtime - ORDER BY roundtime ASC -) basa; diff --git a/.resources/8675fc47b6922ba3c589314eb1b3fd51417b10b89d2cd267cbee1aebfd2266f3 b/.resources/20e941f59abf4746389f7b2046a81efc5468924a7deb9cbe3642a157d986b932 similarity index 95% rename from .resources/8675fc47b6922ba3c589314eb1b3fd51417b10b89d2cd267cbee1aebfd2266f3 rename to .resources/20e941f59abf4746389f7b2046a81efc5468924a7deb9cbe3642a157d986b932 index 7a629f4d..c885b05d 100644 --- a/.resources/8675fc47b6922ba3c589314eb1b3fd51417b10b89d2cd267cbee1aebfd2266f3 +++ b/.resources/20e941f59abf4746389f7b2046a81efc5468924a7deb9cbe3642a157d986b932 @@ -5,9 +5,7 @@ SELECT 'S03aa' AS sScanner_Name, COALESCE(sorter_total.total_bad_reads, 0) AS total_bad_reads, - 0 AS total_comm_faults, COALESCE(sorter_total.total_good_reads, 0) AS total_good_reads, - 0 AS total_multi_items, COALESCE(sorter_total.total_multi_reads, 0) AS total_multi_reads, COALESCE(sorter_total.total_no_data, 0) AS total_no_data, COALESCE(sorter_total.total_no_reads, 0) AS total_no_reads, diff --git a/.resources/2501ac305875aaff82fd2332cd0c374bd52a3e9b0b6355bdf7eea870715622f2 b/.resources/2501ac305875aaff82fd2332cd0c374bd52a3e9b0b6355bdf7eea870715622f2 deleted file mode 100644 index da6eeedc..00000000 --- a/.resources/2501ac305875aaff82fd2332cd0c374bd52a3e9b0b6355bdf7eea870715622f2 +++ /dev/null @@ -1,229 +0,0 @@ -SELECT - COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, - COALESCE(data.sScanner_Name, 'N/A') AS sScanner_Name, - COALESCE(data.BadReads, '0%') AS BadReads, - COALESCE(data.CommFaults, '0%') AS CommFaults, - COALESCE(data.GoodReads, '0%') AS GoodReads, - COALESCE(data.MultiItems, '0%') AS MultiItems, - COALESCE(data.MultiReads, '0%') AS MultiReads, - COALESCE(data.NoData, '0%') AS NoData, - COALESCE(data.NoReads, '0%') AS NoReads, - COALESCE(data.Total, 0) AS Total -FROM (SELECT 1) AS p -LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sScanner_Name, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_bad_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS BadReads, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_comm_fault), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS CommFaults, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_good_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS GoodReads, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_items), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS MultiItems, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS MultiReads, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_data), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS NoData, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS NoReads, - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) AS Total - FROM scanner_reads - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sScanner_Name - - UNION ALL - - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - 'S03aa' AS sScanner_Name, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS BadReads, - '0%' AS CommFaults, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS GoodReads, - '0%' AS MultiItems, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS MultiReads, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS NoData, - CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) - END, '%' - ) AS NoReads, - COUNT(*) AS Total - FROM item_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) AS data ON 1=1 -ORDER BY data.roundtime ASC; diff --git a/.resources/26c4558f2baf5b132815d871a8194116770c8c71f0c4a3e2c67dab2a124e5758 b/.resources/26c4558f2baf5b132815d871a8194116770c8c71f0c4a3e2c67dab2a124e5758 new file mode 100644 index 0000000000000000000000000000000000000000..cf68c59668074c9b24355f98e8499596e9c3e362 GIT binary patch literal 1336 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 Z@^9HJKg_SpkK~6R|3B|h$Kbc1007#mbkhI; literal 0 HcmV?d00001 diff --git a/.resources/7a7152d375b05f54c24fc56cd38e2ecdf043b16ca4f9913dd0c3d78246e454e5 b/.resources/45babef86efc0e145025e8869b6bd1af4c55891cedc35d91670153cb91ba9179 similarity index 65% rename from .resources/7a7152d375b05f54c24fc56cd38e2ecdf043b16ca4f9913dd0c3d78246e454e5 rename to .resources/45babef86efc0e145025e8869b6bd1af4c55891cedc35d91670153cb91ba9179 index 7eb72dc7..a1126ad8 100644 --- a/.resources/7a7152d375b05f54c24fc56cd38e2ecdf043b16ca4f9913dd0c3d78246e454e5 +++ b/.resources/45babef86efc0e145025e8869b6bd1af4c55891cedc35d91670153cb91ba9179 @@ -5,9 +5,7 @@ SELECT 'S03aa' AS sScanner_Name, CONCAT(COALESCE(sorter_total.total_bad_reads, 0), '%') AS total_bad_reads, - '0%' AS total_comm_faults, CONCAT(COALESCE(sorter_total.total_good_reads, 0), '%') AS total_good_reads, - '0%' AS total_multi_items, CONCAT(COALESCE(sorter_total.total_multi_reads, 0), '%') AS total_multi_reads, CONCAT(COALESCE(sorter_total.total_no_data, 0), '%') AS total_no_data, CONCAT(COALESCE(sorter_total.total_no_reads, 0), '%') AS total_no_reads, @@ -17,28 +15,29 @@ FROM (SELECT 1) AS p LEFT JOIN ( SELECT CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15)) * 100.0) / COUNT(*), 2) END AS total_bad_reads, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 0) * 100.0) / COUNT(*), 2) END AS total_good_reads, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 10) * 100.0) / COUNT(*), 2) END AS total_multi_reads, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 9) * 100.0) / COUNT(*), 2) END AS total_no_data, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 8) * 100.0) / COUNT(*), 2) END AS total_no_reads, COUNT(*) AS total + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime AND adiSort_Code_0 NOT IN (11, 15) AND sLocation_ID LIKE 'S03%' -) AS sorter_total ON 1=1; +) AS sorter_total ON 1 = 1; diff --git a/.resources/49ae9770d2eddd377b8a4e305aaee5e2d1cba96fe5a89414422c35d1c866a7e0 b/.resources/49ae9770d2eddd377b8a4e305aaee5e2d1cba96fe5a89414422c35d1c866a7e0 deleted file mode 100644 index a45e3cdf..00000000 --- a/.resources/49ae9770d2eddd377b8a4e305aaee5e2d1cba96fe5a89414422c35d1c866a7e0 +++ /dev/null @@ -1,35 +0,0 @@ -SELECT - COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, - COALESCE(data.sInduction_Name, 'N/A') AS sInduction_Name, - COALESCE(data.SingleCarrier_count, 0) AS SingleCarrier_count, - COALESCE(data.DoubleCarrier_count, 0) AS DoubleCarrier_count, - COALESCE(data.SingleCarrier_count, 0) + COALESCE(data.DoubleCarrier_count, 0) AS Total_count -FROM (SELECT 1) AS p -LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sInduction_Name, - SUM(diTotal_Single_Carrier) AS SingleCarrier_count, - SUM(diTotal_Double_Carrier) AS DoubleCarrier_count - FROM induction_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sInduction_Name = :inductionname OR :inductionname IS NULL OR :inductionname = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sInduction_Name - - UNION ALL - - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - 'S03' AS sInduction_Name, - COUNT(*) AS SingleCarrier_count, - 0 AS DoubleCarrier_count - FROM item_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) AS data ON 1=1 -ORDER BY data.roundtime ASC; - diff --git a/.resources/61f1d12b5e364c065949ca3b6a593989f875469887fc85046d373546cc76acf3 b/.resources/61f1d12b5e364c065949ca3b6a593989f875469887fc85046d373546cc76acf3 deleted file mode 100644 index 5e91ddc3..00000000 --- a/.resources/61f1d12b5e364c065949ca3b6a593989f875469887fc85046d373546cc76acf3 +++ /dev/null @@ -1,62 +0,0 @@ --- Hourly Lane Graph Query (Rate per hour) --- Shows every hour in detail with all lane statistics as rates (items per hour) for graphing --- Rate calculation matches LaneDetails_Rate.sql formula --- Filtered by specific lane parameter - -SELECT - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(Startstamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - ROUND(total_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Total, - ROUND(success_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Sorted, - ROUND(unknown_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Unknown, - ROUND(unexpected_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Unexpected, - ROUND(tracking_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS TrackingError, - ROUND(gap_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS GapError, - ROUND(destination_full_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationFull, - ROUND(destination_non_operational_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationFault, - ROUND(invalid_destination_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationInvalid, - ROUND(destination_disabled_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationDisabled, - ROUND(throughput_limit_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ThroughputLimit, - ROUND(failed_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DivertFail, - ROUND(no_destination_received_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationNone, - ROUND(lost_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Lost, - ROUND(dimension_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DimensionError, - ROUND(weight_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS WeightError, - ROUND(container_utilization_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ContainerUtilization, - ROUND(unable_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS UnableToDivert, - ROUND(destination_not_attempted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationNotAttempted, - ROUND(scan_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ScanError -FROM ( - SELECT - DATE(t_stamp) AS date_part, - HOUR(t_stamp) AS hour_part, - MIN(t_stamp) AS Startstamp, - MAX(t_stamp) AS Endtstamp, - COUNT(*) AS total_count, - SUM(DivertStatus = 0) AS success_count, - SUM(DivertStatus = 1) AS unknown_count, - SUM(DivertStatus = 2) AS unexpected_container_count, - SUM(DivertStatus = 3) AS tracking_error_count, - SUM(DivertStatus = 4) AS gap_error_count, - SUM(DivertStatus = 5) AS destination_full_count, - SUM(DivertStatus = 6) AS destination_non_operational_count, - SUM(DivertStatus = 7) AS invalid_destination_count, - SUM(DivertStatus = 12) AS destination_disabled_count, - SUM(DivertStatus = 13) AS throughput_limit_count, - SUM(DivertStatus = 14) AS failed_to_divert_count, - SUM(DivertStatus = 16) AS no_destination_received_count, - SUM(DivertStatus = 17) AS lost_container_count, - SUM(DivertStatus = 18) AS dimension_error_count, - SUM(DivertStatus = 19) AS weight_error_count, - SUM(DivertStatus = 20) AS container_utilization_count, - SUM(DivertStatus = 21) AS unable_to_divert_count, - SUM(DivertStatus = 22) AS destination_not_attempted_count, - SUM(DivertStatus IN (8, 9, 10)) AS scan_error_count - FROM alltable - WHERE DEST_REQ = :lane AND t_stamp BETWEEN :starttime AND :endtime - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) counts -ORDER BY Startstamp ASC; - diff --git a/.resources/750a42452c34a0ba9c8635cd99055903be2d24f0e4e0842f50f1ff37e46668af b/.resources/750a42452c34a0ba9c8635cd99055903be2d24f0e4e0842f50f1ff37e46668af deleted file mode 100644 index 77e2a0d3..00000000 --- a/.resources/750a42452c34a0ba9c8635cd99055903be2d24f0e4e0842f50f1ff37e46668af +++ /dev/null @@ -1,14 +0,0 @@ -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - 'S03' AS `Induction Name`, - '100%' AS `Total Single Carrier`, - '0%' AS `Total Double Carrier` -FROM item_data -WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') -GROUP BY DATE(t_stamp), HOUR(t_stamp) -ORDER BY `Start Timestamp` ASC; - diff --git a/.resources/97878c5888a407ebd30d1f3fa1eec83d034351913c602163d58763d6e5241e37 b/.resources/97878c5888a407ebd30d1f3fa1eec83d034351913c602163d58763d6e5241e37 deleted file mode 100644 index 63baa46e..00000000 --- a/.resources/97878c5888a407ebd30d1f3fa1eec83d034351913c602163d58763d6e5241e37 +++ /dev/null @@ -1,50 +0,0 @@ -SELECT - COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, - COALESCE(data.sInduction_Name, 'N/A') AS sInduction_Name, - COALESCE(data.SingleCarrier_percent, '0%') AS SingleCarrier_percent, - COALESCE(data.DoubleCarrier_percent, '0%') AS DoubleCarrier_percent, - COALESCE(data.Total_count, 0) AS Total_count -FROM (SELECT 1) AS p -LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sInduction_Name, - CONCAT( - CASE - WHEN (COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0)) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diTotal_Single_Carrier), 0) * 100.0) / ( - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) - ), 2) - END, '%' - ) AS SingleCarrier_percent, - CONCAT( - CASE - WHEN (COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0)) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diTotal_Double_Carrier), 0) * 100.0) / ( - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) - ), 2) - END, '%' - ) AS DoubleCarrier_percent, - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) AS Total_count - FROM induction_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sInduction_Name = :inductionname OR :inductionname IS NULL OR :inductionname = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sInduction_Name - - UNION ALL - - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - 'S03' AS sInduction_Name, - '100%' AS SingleCarrier_percent, - '0%' AS DoubleCarrier_percent, - COUNT(*) AS Total_count - FROM item_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) AS data ON 1=1 -ORDER BY data.roundtime ASC; diff --git a/.resources/99a73f815dda61d236296c3fb56af43e21b0d406dbddd200f11866170306ddec b/.resources/99a73f815dda61d236296c3fb56af43e21b0d406dbddd200f11866170306ddec deleted file mode 100644 index 11cb226d79b9925bae6403c283845b908cb2e842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47283 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%0D1r7P&iQgM2(xbO^#45oJ4(rx-bh z#8=n?0G?Fw3#1uFHP2mEHnxu*_AIykOQhpHmdDrf(9>_W!-*VrS1)@*(zeNw2{tX3 zn;h~i7bC_IjNp0hJA=de$)}^QEfuu|tN)mi1~7|I;2BZp<-BrgDaXh<$V2jNE#d4WSKr1CQ8ou3>~#y2iIvrQYm0MNs&}qj zTQHv6+*jen4J-wT<_qDaRWXD5dlgibmWNY4zH%T}F&wiljhYeYZUq4Jq)l7MbGSiX zbC4z}ub;pFjF1Z|S~qq67FaAq=t8Io#dBG}QYvlZJN-;m&A zJurN+;nE$%WBe*F>7;lK;tDHG|A>lrhp&f{Wl^>x5X@+b@{r6<#-S9Ly8@NM^?mV9 zm2d+>G7y-f_KpW5joJ*JzHk0{W_5cYev9Hu98dx^-uDXJmgt*%^hRJ5;vY%dbra=N zlhcONo7W(E<2g}RG-AF6pYZvhCQ1u%YQV|vD&OB?z&X#uE5a1-^1cSW0ags=g2S%% zo^{m5aF+i4Ze}=DDB~T=f=r#QKvko^tE<_Q(FgcoC=%Ma4~c7Fk5*$1oTL{?z#7E` zUKfhN%)}I`DJw6(gMo>O*^j()d2w}pe|DO72V7a}zoNz84M5$u!RrF;Jofr{v0&lz zQI7u%zw5e+@gE29b+w-ohIp~yL8L&e|F{U};}kd>ZGPc6o)Is}U)8Dq81VD?y?Im5 zP5Dz_%G}rLF#kV9NTJ#lon{Vyvb0k?wNy##7AWlX}r1p+I)qmVNIOs~1-z&0U6n&WU*tZ3$2m z(9cU1fMOe{-5@w2>1x~1BQ_atM}+k2`$^NfNd#tqUBE~0;YHyyxNW>YyM@D=`U%hw z7%rn%kFHHA1BmeOB=Xo&($i-F3)2zr&zP8)gAfacUOx7<+c1p5<59E3mm+?g8B$NT zT-tq?R@-o_hN7xP`rxOByOdaRZoIEuT*e(vb5&zM=rTe!2N5}$tWZ_M4J3fE7N(5W z{h~j^zk9MmxAGvH2LZQKDh?z9^hINCdjtFetF!XS?uRF&U{ay;@I7iRP0dijUO5XD zpA&eG3o|?WGr*odkk%4&Vpk_?@V=yk7K%QY$j0Aw0_*olebx#{SVHCo;1%;q6W9Bl zvY4P6a`^+1K^Xdb(EA=ayv8IeDp@`lP~`zP>hr?Rd&=@2Mo12>j()`(U!d}vZi^xb}vPQ@;#WPT` zi$yt>8!IF@@MH!44EvFE$ghEno$Xraq4kHz)=OTHxnwUs;b(t{$9y*?#;mzwOS~l5%LSWi97`TZEgvevAac2xHFA) z7JXb?92Fg+E7B412cge}mMN&LJ$4YV9|lG$k1bCBw+DKS)m3GHQA(IH{YRfiRE)N=f9u(`x+TwQwEY%VOOw7 z=*F|=f8NV_H`8xP{x4b>I1KBv5dX({jq2f1|3evP8C=fC4er)X5cM4(AriPmdx#P?VKWevMw` zsU}>txb~01+n?W$9dAVN$w7T}iitqbF<>xUg0_gF3EMZB)~^5g`Nq-;$()oveK=68 ztF?7`W5bLcma7~vdD1%VntXgF-acWvItmKs%pEs1GyAr40hAK{9j2_rxwmjrWMP}D zd5+H;kJpziei!s8n}4n!9@>rBU0qy&U_pREyt%oVn4ARSwQFl@`7tb`!`Jo-z##}r zIs-d9J8Nrez&-;oM*zN{7XwUGrL%`OT5!sV6%c9OyrXwOK!Bg$?ad8e!DJB2NR4L} zV|N|&{a|i8Y4SJVFFtYy#$ynTP#9plLE8 literal 47283 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 Z@^9HJKg_SpkK~6R|3B|h$Kbc1007#mbkhI; literal 10700 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 diff --git a/BNA8_autStand/ignition/event-scripts/resource.json b/BNA8_autStand/ignition/event-scripts/resource.json index e6a40956..23197f3c 100644 --- a/BNA8_autStand/ignition/event-scripts/resource.json +++ b/BNA8_autStand/ignition/event-scripts/resource.json @@ -9,8 +9,8 @@ "attributes": { "lastModification": { "actor": "admin", - "timestamp": "2025-11-20T12:26:12Z" + "timestamp": "2025-12-01T09:40:22Z" }, - "lastModificationSignature": "8337f716108011f6dcb21b0f9f2ddfdef0eb96f5887b9ce358fb1c380ca4e2ee" + "lastModificationSignature": "1001966be8615a467cfcc11efeab3990eefdbf6fa56f9bd0f92fcecee0376913" } } \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/query.sql deleted file mode 100644 index 56383985..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/query.sql +++ /dev/null @@ -1,29 +0,0 @@ -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - sInduction_Name AS `Induction Name`, - COALESCE(SUM(diTotal_Single_Carrier), 0) AS `Total Single Carrier`, - COALESCE(SUM(diTotal_Double_Carrier), 0) AS `Total Double Carrier`, - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) AS `Total` -FROM induction_data -WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sInduction_Name = :inductionname OR :inductionname IS NULL OR :inductionname = '') -GROUP BY DATE(t_stamp), HOUR(t_stamp), sInduction_Name - -UNION ALL - -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - 'S03' AS `Induction Name`, - COUNT(*) AS `Total Single Carrier`, - 0 AS `Total Double Carrier`, - COUNT(*) AS `Total` -FROM item_data -WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') -GROUP BY DATE(t_stamp), HOUR(t_stamp) -ORDER BY `Start Timestamp` ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/resource.json deleted file mode 100644 index bb5065be..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count Graph/resource.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "b76767bd2f83d72b541a6bdbaf87459a32eb3e7915f46f807e57fb6f7a88eb28", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T16:53:50Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "inductionname", - "sqlType": 7 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/query.sql index a45e3cdf..c5304a93 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/query.sql @@ -1,35 +1,28 @@ SELECT COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, + COALESCE( + CONCAT( + 'H', + TIMESTAMPDIFF( + HOUR, + DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), + DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") + ) + ), + 'N/A' + ) AS Hour, COALESCE(data.sInduction_Name, 'N/A') AS sInduction_Name, - COALESCE(data.SingleCarrier_count, 0) AS SingleCarrier_count, - COALESCE(data.DoubleCarrier_count, 0) AS DoubleCarrier_count, - COALESCE(data.SingleCarrier_count, 0) + COALESCE(data.DoubleCarrier_count, 0) AS Total_count + COALESCE(data.Count, 0) AS Count FROM (SELECT 1) AS p LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sInduction_Name, - SUM(diTotal_Single_Carrier) AS SingleCarrier_count, - SUM(diTotal_Double_Carrier) AS DoubleCarrier_count - FROM induction_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sInduction_Name = :inductionname OR :inductionname IS NULL OR :inductionname = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sInduction_Name - - UNION ALL - SELECT CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, 'S03' AS sInduction_Name, - COUNT(*) AS SingleCarrier_count, - 0 AS DoubleCarrier_count + COUNT(*) AS Count FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime AND adiSort_Code_0 NOT IN (11, 15) AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') GROUP BY DATE(t_stamp), HOUR(t_stamp) ) AS data ON 1=1 ORDER BY data.roundtime ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/resource.json index 617f6ff6..c94457a3 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Count/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "57b2b7f0fd2d28eb708e99277bdd4818382ad10fed2e4a27067cbcdfbacb94c1", + "lastModificationSignature": "7b80d6e76625a91d90940129402b865d99aa45dc17275a300c264fd4b3889eb2", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T15:15:03Z" + "timestamp": "2025-12-01T07:46:25Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/query.sql deleted file mode 100644 index 77e2a0d3..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/query.sql +++ /dev/null @@ -1,14 +0,0 @@ -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - 'S03' AS `Induction Name`, - '100%' AS `Total Single Carrier`, - '0%' AS `Total Double Carrier` -FROM item_data -WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') -GROUP BY DATE(t_stamp), HOUR(t_stamp) -ORDER BY `Start Timestamp` ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/resource.json deleted file mode 100644 index 5f55be45..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage Graph/resource.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "fc6b89ae44bfeb7a305d2cab15cfef80a2ef36645bbc6259c53ce4633c2e60f4", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T17:10:29Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "inductionname", - "sqlType": 7 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/query.sql index 63baa46e..b4df34c1 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/query.sql @@ -1,50 +1,24 @@ SELECT - COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, - COALESCE(data.sInduction_Name, 'N/A') AS sInduction_Name, - COALESCE(data.SingleCarrier_percent, '0%') AS SingleCarrier_percent, - COALESCE(data.DoubleCarrier_percent, '0%') AS DoubleCarrier_percent, - COALESCE(data.Total_count, 0) AS Total_count -FROM (SELECT 1) AS p -LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sInduction_Name, - CONCAT( - CASE - WHEN (COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0)) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diTotal_Single_Carrier), 0) * 100.0) / ( - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) - ), 2) - END, '%' - ) AS SingleCarrier_percent, - CONCAT( - CASE - WHEN (COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0)) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diTotal_Double_Carrier), 0) * 100.0) / ( - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) - ), 2) - END, '%' - ) AS DoubleCarrier_percent, - COALESCE(SUM(diTotal_Single_Carrier), 0) + COALESCE(SUM(diTotal_Double_Carrier), 0) AS Total_count - FROM induction_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sInduction_Name = :inductionname OR :inductionname IS NULL OR :inductionname = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sInduction_Name - - UNION ALL - - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - 'S03' AS sInduction_Name, - '100%' AS SingleCarrier_percent, - '0%' AS DoubleCarrier_percent, - COUNT(*) AS Total_count - FROM item_data - WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) AS data ON 1=1 -ORDER BY data.roundtime ASC; + CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS StartTimestamp, + + CONCAT( + 'H', + TIMESTAMPDIFF( + HOUR, + DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), + DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") + ) + ) AS Hour, + + 'S03' AS sInduction_Name, + + COUNT(*) AS Total_count + +FROM item_data +WHERE t_stamp BETWEEN :starttime AND :endtime + AND adiSort_Code_0 NOT IN (11, 15) + AND sLocation_ID LIKE 'S03%' + AND (:inductionname IS NULL OR :inductionname = '' OR :inductionname = 'S03') + +GROUP BY DATE(t_stamp), HOUR(t_stamp) +ORDER BY StartTimestamp ASC; diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/resource.json index 08995567..dbefae89 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Percentage/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "177bf58e5e78551894fa4043b1aa81dba629112e72f56b2deaa755ee244c0648", + "lastModificationSignature": "d6ae98b57c685eaca4465716cb0357ef2fdd8cc9b8565b920f218799fbb9e01a", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T15:15:37Z" + "timestamp": "2025-12-01T08:22:54Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/query.sql deleted file mode 100644 index 916c1e33..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/query.sql +++ /dev/null @@ -1,14 +0,0 @@ --- Hourly Induct Graph Query (Rate) --- Shows every hour in detail for graphing - -SELECT - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - COUNT(*) AS Total -FROM alltable -WHERE t_stamp BETWEEN :starttime AND :endtime -GROUP BY DATE(t_stamp), HOUR(t_stamp) -ORDER BY DATE(t_stamp) ASC, HOUR(t_stamp) ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/resource.json deleted file mode 100644 index 16cfab65..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyInduct/Hourly Induct Rate Graph/resource.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "23d42b9257d52e8126c42b32fc0fdcd1105310b5694f67a9540a99be948bf3dc", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T14:31:10Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/query.sql deleted file mode 100644 index 5e91ddc3..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/query.sql +++ /dev/null @@ -1,62 +0,0 @@ --- Hourly Lane Graph Query (Rate per hour) --- Shows every hour in detail with all lane statistics as rates (items per hour) for graphing --- Rate calculation matches LaneDetails_Rate.sql formula --- Filtered by specific lane parameter - -SELECT - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(Startstamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - ROUND(total_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Total, - ROUND(success_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Sorted, - ROUND(unknown_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Unknown, - ROUND(unexpected_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Unexpected, - ROUND(tracking_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS TrackingError, - ROUND(gap_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS GapError, - ROUND(destination_full_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationFull, - ROUND(destination_non_operational_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationFault, - ROUND(invalid_destination_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationInvalid, - ROUND(destination_disabled_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationDisabled, - ROUND(throughput_limit_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ThroughputLimit, - ROUND(failed_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DivertFail, - ROUND(no_destination_received_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationNone, - ROUND(lost_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Lost, - ROUND(dimension_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DimensionError, - ROUND(weight_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS WeightError, - ROUND(container_utilization_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ContainerUtilization, - ROUND(unable_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS UnableToDivert, - ROUND(destination_not_attempted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationNotAttempted, - ROUND(scan_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ScanError -FROM ( - SELECT - DATE(t_stamp) AS date_part, - HOUR(t_stamp) AS hour_part, - MIN(t_stamp) AS Startstamp, - MAX(t_stamp) AS Endtstamp, - COUNT(*) AS total_count, - SUM(DivertStatus = 0) AS success_count, - SUM(DivertStatus = 1) AS unknown_count, - SUM(DivertStatus = 2) AS unexpected_container_count, - SUM(DivertStatus = 3) AS tracking_error_count, - SUM(DivertStatus = 4) AS gap_error_count, - SUM(DivertStatus = 5) AS destination_full_count, - SUM(DivertStatus = 6) AS destination_non_operational_count, - SUM(DivertStatus = 7) AS invalid_destination_count, - SUM(DivertStatus = 12) AS destination_disabled_count, - SUM(DivertStatus = 13) AS throughput_limit_count, - SUM(DivertStatus = 14) AS failed_to_divert_count, - SUM(DivertStatus = 16) AS no_destination_received_count, - SUM(DivertStatus = 17) AS lost_container_count, - SUM(DivertStatus = 18) AS dimension_error_count, - SUM(DivertStatus = 19) AS weight_error_count, - SUM(DivertStatus = 20) AS container_utilization_count, - SUM(DivertStatus = 21) AS unable_to_divert_count, - SUM(DivertStatus = 22) AS destination_not_attempted_count, - SUM(DivertStatus IN (8, 9, 10)) AS scan_error_count - FROM alltable - WHERE DEST_REQ = :lane AND t_stamp BETWEEN :starttime AND :endtime - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) counts -ORDER BY Startstamp ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/resource.json deleted file mode 100644 index 702c014a..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate Graph/resource.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "67881264498210e0897664c662749fecb07c51e0d0e28829807d0cfc72534ef2", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T14:31:10Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "lane", - "sqlType": 7 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/query.sql deleted file mode 100644 index 163c556f..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/query.sql +++ /dev/null @@ -1,62 +0,0 @@ --- Hourly Lane Details Rate Query (Table Display) --- Shows every hour in detail with all lane statistics as rates (items per hour) --- Rate calculation matches LaneDetails_Rate.sql formula --- Filtered by specific lane parameter - -SELECT - CONCAT(DATE(Startstamp), ' ', LPAD(HOUR(Startstamp), 2, '0'), ':00') AS StartTimestamp, - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(Startstamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - CONCAT(ROUND(total_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS total_rate, - CONCAT(ROUND(success_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS success_rate, - CONCAT(ROUND(unknown_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS unknown_rate, - CONCAT(ROUND(unexpected_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS unexpected_container_rate, - CONCAT(ROUND(tracking_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS tracking_error_rate, - CONCAT(ROUND(gap_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS gap_error_rate, - CONCAT(ROUND(destination_full_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_full_rate, - CONCAT(ROUND(destination_non_operational_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_non_operational_rate, - CONCAT(ROUND(invalid_destination_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS invalid_destination_rate, - CONCAT(ROUND(destination_disabled_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_disabled_rate, - CONCAT(ROUND(throughput_limit_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS throughput_limit_rate, - CONCAT(ROUND(failed_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS failed_to_divert_rate, - CONCAT(ROUND(no_destination_received_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS no_destination_received_rate, - CONCAT(ROUND(lost_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS lost_container_rate, - CONCAT(ROUND(dimension_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS dimension_error_rate, - CONCAT(ROUND(weight_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS weight_error_rate, - CONCAT(ROUND(container_utilization_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS container_utilization_rate, - CONCAT(ROUND(unable_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS unable_to_divert_rate, - CONCAT(ROUND(destination_not_attempted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_not_attempted_rate, - CONCAT(ROUND(scan_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS scan_error_rate -FROM ( - SELECT - DATE(t_stamp) AS date_part, - HOUR(t_stamp) AS hour_part, - MIN(t_stamp) AS Startstamp, - MAX(t_stamp) AS Endtstamp, - COUNT(*) AS total_count, - SUM(DivertStatus = 0) AS success_count, - SUM(DivertStatus = 1) AS unknown_count, - SUM(DivertStatus = 2) AS unexpected_container_count, - SUM(DivertStatus = 3) AS tracking_error_count, - SUM(DivertStatus = 4) AS gap_error_count, - SUM(DivertStatus = 5) AS destination_full_count, - SUM(DivertStatus = 6) AS destination_non_operational_count, - SUM(DivertStatus = 7) AS invalid_destination_count, - SUM(DivertStatus = 12) AS destination_disabled_count, - SUM(DivertStatus = 13) AS throughput_limit_count, - SUM(DivertStatus = 14) AS failed_to_divert_count, - SUM(DivertStatus = 16) AS no_destination_received_count, - SUM(DivertStatus = 17) AS lost_container_count, - SUM(DivertStatus = 18) AS dimension_error_count, - SUM(DivertStatus = 19) AS weight_error_count, - SUM(DivertStatus = 20) AS container_utilization_count, - SUM(DivertStatus = 21) AS unable_to_divert_count, - SUM(DivertStatus = 22) AS destination_not_attempted_count, - SUM(DivertStatus IN (8, 9, 10)) AS scan_error_count - FROM alltable - WHERE DEST_REQ = :lane AND t_stamp BETWEEN :starttime AND :endtime - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) counts -ORDER BY Startstamp ASC; diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/resource.json deleted file mode 100644 index edb0b568..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyLane/Hourly Lane Rate/resource.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "4b9729fab1eee53a2a42f43641927819c64a35342ecb09b81df68bcae3851cf9", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T14:31:10Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "lane", - "sqlType": 7 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/query.sql index 6c38a191..0f2a7ff8 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/query.sql @@ -1,45 +1,29 @@ SELECT CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - sScanner_Name AS `Scanner Name`, - COALESCE(SUM(diScanner_bad_reads), 0) AS `Total Bad Reads`, - COALESCE(SUM(diScanner_comm_fault), 0) AS `Total Comm Faults`, - COALESCE(SUM(diScanner_good_reads), 0) AS `Total Good Reads`, - COALESCE(SUM(diScanner_multi_items), 0) AS `Total Multi Items`, - COALESCE(SUM(diScanner_multi_reads), 0) AS `Total Multi Reads`, - COALESCE(SUM(diScanner_no_data), 0) AS `Total No Data`, - COALESCE(SUM(diScanner_no_reads), 0) AS `Total No Reads`, - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) AS `Total` -FROM scanner_reads -WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') -GROUP BY DATE(t_stamp), HOUR(t_stamp), sScanner_Name - -UNION ALL - -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, + CONCAT( + 'H', + TIMESTAMPDIFF( + HOUR, + DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), + DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") + ) + ) AS `Hour`, 'S03aa' AS `Scanner Name`, + + -- REAL SCAN STATS FROM item_data SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) AS `Total Bad Reads`, - 0 AS `Total Comm Faults`, SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS `Total Good Reads`, - 0 AS `Total Multi Items`, SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) AS `Total Multi Reads`, SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS `Total No Data`, SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS `Total No Reads`, + COUNT(*) AS `Total` + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime AND adiSort_Code_0 NOT IN (11, 15) AND sLocation_ID LIKE 'S03%' AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + GROUP BY DATE(t_stamp), HOUR(t_stamp) ORDER BY `Start Timestamp` ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/resource.json index da63cfb3..40077c68 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count Graph/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "02ce867ea693a86861dabfbda428296fd33ef2d9c1e79c2c02588494a49b5bc8", + "lastModificationSignature": "024e03363409eb08f618131f0108313ea7e0662e60cc237d70aa720cb68da66d", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T15:12:15Z" + "timestamp": "2025-12-01T08:17:53Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/query.sql index 70b73354..18e91c64 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/query.sql @@ -1,56 +1,47 @@ SELECT COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, + COALESCE( + CONCAT( + 'H', + TIMESTAMPDIFF( + HOUR, + DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), + DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") + ) + ), + 'N/A' + ) AS Hour, COALESCE(data.sScanner_Name, 'N/A') AS sScanner_Name, - COALESCE(data.BadReads, 0) AS BadReads, - COALESCE(data.CommFaults, 0) AS CommFaults, - COALESCE(data.GoodReads, 0) AS GoodReads, - COALESCE(data.MultiItems, 0) AS MultiItems, - COALESCE(data.MultiReads, 0) AS MultiReads, - COALESCE(data.NoData, 0) AS NoData, - COALESCE(data.NoReads, 0) AS NoReads, - COALESCE(data.BadReads, 0) + - COALESCE(data.CommFaults, 0) + - COALESCE(data.GoodReads, 0) + - COALESCE(data.MultiItems, 0) + - COALESCE(data.MultiReads, 0) + - COALESCE(data.NoData, 0) + - COALESCE(data.NoReads, 0) AS Total + + COALESCE(data.BadReads, 0) AS BadReads, + COALESCE(data.GoodReads, 0) AS GoodReads, + COALESCE(data.MultiReads, 0) AS MultiReads, + COALESCE(data.NoData, 0) AS NoData, + COALESCE(data.NoReads, 0) AS NoReads, + COALESCE(data.Total, 0) AS Total + FROM (SELECT 1) AS p LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sScanner_Name, - SUM(diScanner_bad_reads) AS BadReads, - SUM(diScanner_comm_fault) AS CommFaults, - SUM(diScanner_good_reads) AS GoodReads, - SUM(diScanner_multi_items) AS MultiItems, - SUM(diScanner_multi_reads) AS MultiReads, - SUM(diScanner_no_data) AS NoData, - SUM(diScanner_no_reads) AS NoReads - FROM scanner_reads - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sScanner_Name - - UNION ALL - SELECT CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, 'S03aa' AS sScanner_Name, + + -- Real counts from item_data SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) AS BadReads, - 0 AS CommFaults, - SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS GoodReads, - 0 AS MultiItems, + SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS GoodReads, SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) AS MultiReads, - SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS NoData, - SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS NoReads + SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS NoData, + SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS NoReads, + + -- Total scans in this bucket + COUNT(*) AS Total + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + AND adiSort_Code_0 NOT IN (11, 15) + AND sLocation_ID LIKE 'S03%' + AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + GROUP BY DATE(t_stamp), HOUR(t_stamp) ) AS data ON 1=1 ORDER BY data.roundtime ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/resource.json index 365e4dd7..49169513 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Count/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "4bd84e777396fdde9980a44686304395ccda69fa68a41e6e2bc10317b14cda9a", + "lastModificationSignature": "e377e9bcce6d506b653a2bb6930edafa8afef638264f422080b18a46fb5bc439", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T15:10:38Z" + "timestamp": "2025-12-01T08:14:14Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/query.sql index b23f33dc..824acd2a 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/query.sql @@ -1,209 +1,53 @@ SELECT CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, - sScanner_Name AS `Scanner Name`, + CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_bad_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Bad Reads`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_comm_fault), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Comm Faults`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_good_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Good Reads`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_items), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Multi Items`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total Multi Reads`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_data), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total No Data`, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS `Total No Reads` -FROM scanner_reads -WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') -GROUP BY DATE(t_stamp), HOUR(t_stamp), sScanner_Name - -UNION ALL - -SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS `Start Timestamp`, - CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))) AS `Hour`, + 'H', + TIMESTAMPDIFF( + HOUR, + DATE_FORMAT(t_stamp, "%Y-%m-%d %H:00:00"), + DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") + ) + ) AS `Hour`, + 'S03aa' AS `Scanner Name`, + + /* ---- PERCENTAGES ---- */ CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( (SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 END) * 100.0) / COUNT(*), 2) END, '%' ) AS `Total Bad Reads`, - '0%' AS `Total Comm Faults`, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( (SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 END) * 100.0) / COUNT(*), 2) END, '%' ) AS `Total Good Reads`, - '0%' AS `Total Multi Items`, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( (SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 END) * 100.0) / COUNT(*), 2) END, '%' ) AS `Total Multi Reads`, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( (SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 END) * 100.0) / COUNT(*), 2) END, '%' ) AS `Total No Data`, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( (SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 END) * 100.0) / COUNT(*), 2) END, '%' ) AS `Total No Reads` + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime AND adiSort_Code_0 NOT IN (11, 15) AND sLocation_ID LIKE 'S03%' AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + GROUP BY DATE(t_stamp), HOUR(t_stamp) ORDER BY `Start Timestamp` ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/resource.json index a69e65ec..d60aa9a3 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage Graph/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "fb62440ec31f243656fbc2f39199108bcb8f32187d70e78f5be084a3a5982528", + "lastModificationSignature": "8fd2b396fdf81dbe9925670d509bda6cf0788e4326ab54db9487c1c266e7d713", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T15:12:52Z" + "timestamp": "2025-12-01T08:19:55Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/query.sql index da6eeedc..7e0f4db4 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/query.sql @@ -1,229 +1,79 @@ SELECT COALESCE(data.roundtime, 'N/A') AS StartTimestamp, - COALESCE(CONCAT('H', TIMESTAMPDIFF(HOUR, DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))), 'N/A') AS Hour, + COALESCE( + CONCAT( + 'H', + TIMESTAMPDIFF( + HOUR, + DATE_FORMAT(data.roundtime, "%Y-%m-%d %H:00:00"), + DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") + ) + ), + 'N/A' + ) AS Hour, COALESCE(data.sScanner_Name, 'N/A') AS sScanner_Name, - COALESCE(data.BadReads, '0%') AS BadReads, - COALESCE(data.CommFaults, '0%') AS CommFaults, - COALESCE(data.GoodReads, '0%') AS GoodReads, - COALESCE(data.MultiItems, '0%') AS MultiItems, - COALESCE(data.MultiReads, '0%') AS MultiReads, - COALESCE(data.NoData, '0%') AS NoData, - COALESCE(data.NoReads, '0%') AS NoReads, + + data.BadReads, + data.GoodReads, + data.MultiReads, + data.NoData, + data.NoReads, COALESCE(data.Total, 0) AS Total + FROM (SELECT 1) AS p LEFT JOIN ( - SELECT - CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, - sScanner_Name, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_bad_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS BadReads, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_comm_fault), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS CommFaults, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_good_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS GoodReads, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_items), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS MultiItems, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_multi_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS MultiReads, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_data), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS NoData, - CONCAT( - CASE - WHEN ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ) = 0 THEN 0 - ELSE ROUND((COALESCE(SUM(diScanner_no_reads), 0) * 100.0) / ( - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) - ), 2) - END, '%' - ) AS NoReads, - COALESCE(SUM(diScanner_bad_reads), 0) + - COALESCE(SUM(diScanner_comm_fault), 0) + - COALESCE(SUM(diScanner_good_reads), 0) + - COALESCE(SUM(diScanner_multi_items), 0) + - COALESCE(SUM(diScanner_multi_reads), 0) + - COALESCE(SUM(diScanner_no_data), 0) + - COALESCE(SUM(diScanner_no_reads), 0) AS Total - FROM scanner_reads - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') - GROUP BY DATE(t_stamp), HOUR(t_stamp), sScanner_Name - - UNION ALL - SELECT CONCAT(DATE(t_stamp), ' ', HOUR(t_stamp), ':00') AS roundtime, 'S03aa' AS sScanner_Name, + + COUNT(*) AS Total, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( + (SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) + / COUNT(*), 2) END, '%' ) AS BadReads, - '0%' AS CommFaults, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( + (SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) + / COUNT(*), 2) END, '%' ) AS GoodReads, - '0%' AS MultiItems, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( + (SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) + / COUNT(*), 2) END, '%' ) AS MultiReads, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( + (SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) + / COUNT(*), 2) END, '%' ) AS NoData, + CONCAT( - CASE - WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + CASE WHEN COUNT(*) = 0 THEN 0 + ELSE ROUND( + (SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) + / COUNT(*), 2) END, '%' - ) AS NoReads, - COUNT(*) AS Total + ) AS NoReads + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime AND adiSort_Code_0 NOT IN (11, 15) AND sLocation_ID LIKE 'S03%' AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + GROUP BY DATE(t_stamp), HOUR(t_stamp) ) AS data ON 1=1 ORDER BY data.roundtime ASC; diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/resource.json index c455a3d6..561adda4 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/HourlyScanner/Hourly Scanner Percentage/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "dd58c1019cb33e64af2c179f52104f89e9ce15e0af0e2ab38c13725c6f155254", + "lastModificationSignature": "9ab0a1ad6fb187f58611e61cbfbd668038a770e89179de875985d631d4bb9c47", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T15:11:18Z" + "timestamp": "2025-12-01T08:11:54Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/query.sql deleted file mode 100644 index b09fee09..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/query.sql +++ /dev/null @@ -1,59 +0,0 @@ --- Hourly Sorter Details Graph Query (Rate) --- Shows every hour in detail for graphing with all sorter statistics as rates (items per hour) --- Rate calculation matches SorterDetails_Rate.sql formula - -SELECT - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(Startstamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - ROUND(inducted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Inducted, - ROUND(sorted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Sorted, - ROUND(unknown_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Unknown, - ROUND(unexpected_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Unexpected, - ROUND(tracking_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS TrackingError, - ROUND(gap_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS GapError, - ROUND(destination_full_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationFull, - ROUND(destination_fault_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationFault, - ROUND(destination_invalid_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationInvalid, - ROUND(destination_disabled_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationDisabled, - ROUND(throughput_limit_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ThroughputLimit, - ROUND(divert_fail_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DivertFail, - ROUND(destination_none_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationNone, - ROUND(lost_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS Lost, - ROUND(dimension_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DimensionError, - ROUND(weight_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS WeightError, - ROUND(container_util_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ContainerUtilization, - ROUND(unable_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS UnableToDivert, - ROUND(dest_not_attempted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS DestinationNotAttempted, - ROUND(scan_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2) AS ScanError -FROM ( - SELECT - MIN(t_stamp) AS Startstamp, - MAX(t_stamp) AS Endtstamp, - COUNT(*) AS inducted_count, - SUM(DivertStatus = 0) AS sorted_count, - SUM(DivertStatus = 1) AS unknown_count, - SUM(DivertStatus = 2) AS unexpected_count, - SUM(DivertStatus = 3) AS tracking_error_count, - SUM(DivertStatus = 4) AS gap_error_count, - SUM(DivertStatus = 5) AS destination_full_count, - SUM(DivertStatus = 6) AS destination_fault_count, - SUM(DivertStatus = 7) AS destination_invalid_count, - SUM(DivertStatus = 12) AS destination_disabled_count, - SUM(DivertStatus = 13) AS throughput_limit_count, - SUM(DivertStatus = 14) AS divert_fail_count, - SUM(DivertStatus = 16) AS destination_none_count, - SUM(DivertStatus = 17) AS lost_count, - SUM(DivertStatus = 18) AS dimension_error_count, - SUM(DivertStatus = 19) AS weight_error_count, - SUM(DivertStatus = 20) AS container_util_count, - SUM(DivertStatus = 21) AS unable_to_divert_count, - SUM(DivertStatus = 22) AS dest_not_attempted_count, - SUM(DivertStatus IN (8, 9, 10)) AS scan_error_count - FROM alltable - WHERE t_stamp BETWEEN :starttime AND :endtime - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) counts -ORDER BY Startstamp ASC; - diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/resource.json deleted file mode 100644 index 3e62a0f5..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate Graph/resource.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "8c6bdb7de87c2cc4310fbefb0dc0af4c38766f3113234ebb50f61db2818c94eb", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T14:31:11Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/query.sql b/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/query.sql deleted file mode 100644 index 13fd25a0..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/query.sql +++ /dev/null @@ -1,59 +0,0 @@ --- Hourly Sorter Details Rate Query (Table Display) --- Shows every hour in detail with all sorter statistics as rates (items per hour) --- Rate calculation matches SorterDetails_Rate.sql formula - -SELECT - CONCAT(DATE(Startstamp), ' ', LPAD(HOUR(Startstamp), 2, '0'), ':00') AS Startstamp, - CONCAT('H', TIMESTAMPDIFF(HOUR, - DATE_FORMAT(Startstamp, "%Y-%m-%d %H:00:00"), - DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00") - )) AS Hour, - CONCAT(ROUND(success_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS success_rate, - CONCAT(ROUND(unknown_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS unknown_rate, - CONCAT(ROUND(unexpected_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS unexpected_container_rate, - CONCAT(ROUND(tracking_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS tracking_error_rate, - CONCAT(ROUND(gap_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS gap_error_rate, - CONCAT(ROUND(destination_full_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_full_rate, - CONCAT(ROUND(destination_non_operational_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_non_operational_rate, - CONCAT(ROUND(invalid_destination_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS invalid_destination_rate, - CONCAT(ROUND(destination_disabled_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_disabled_rate, - CONCAT(ROUND(throughput_limit_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS throughput_limit_rate, - CONCAT(ROUND(failed_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS failed_to_divert_rate, - CONCAT(ROUND(no_destination_received_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS no_destination_received_rate, - CONCAT(ROUND(lost_container_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS lost_container_rate, - CONCAT(ROUND(dimension_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS dimension_error_rate, - CONCAT(ROUND(weight_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS weight_error_rate, - CONCAT(ROUND(container_utilization_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS container_utilization_rate, - CONCAT(ROUND(unable_to_divert_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS unable_to_divert_rate, - CONCAT(ROUND(destination_not_attempted_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS destination_not_attempted_rate, - CONCAT(ROUND(scan_error_count * 3600 / TIMESTAMPDIFF(SECOND, Startstamp, Endtstamp), 2), ' pph') AS scan_error_rate -FROM ( - SELECT - DATE(t_stamp) AS date_part, - HOUR(t_stamp) AS hour_part, - MIN(t_stamp) AS Startstamp, - MAX(t_stamp) AS Endtstamp, - SUM(DivertStatus = 0) AS success_count, - SUM(DivertStatus = 1) AS unknown_count, - SUM(DivertStatus = 2) AS unexpected_container_count, - SUM(DivertStatus = 3) AS tracking_error_count, - SUM(DivertStatus = 4) AS gap_error_count, - SUM(DivertStatus = 5) AS destination_full_count, - SUM(DivertStatus = 6) AS destination_non_operational_count, - SUM(DivertStatus = 7) AS invalid_destination_count, - SUM(DivertStatus = 12) AS destination_disabled_count, - SUM(DivertStatus = 13) AS throughput_limit_count, - SUM(DivertStatus = 14) AS failed_to_divert_count, - SUM(DivertStatus = 16) AS no_destination_received_count, - SUM(DivertStatus = 17) AS lost_container_count, - SUM(DivertStatus = 18) AS dimension_error_count, - SUM(DivertStatus = 19) AS weight_error_count, - SUM(DivertStatus = 20) AS container_utilization_count, - SUM(DivertStatus = 21) AS unable_to_divert_count, - SUM(DivertStatus = 22) AS destination_not_attempted_count, - SUM(DivertStatus IN (8, 9, 10)) AS scan_error_count - FROM alltable - WHERE t_stamp BETWEEN :starttime AND :endtime - GROUP BY DATE(t_stamp), HOUR(t_stamp) -) counts -ORDER BY Startstamp ASC; \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/resource.json b/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/resource.json deleted file mode 100644 index a75ee947..00000000 --- a/BNA8_autStand/ignition/named-query/Statistics/HourlySorterDetails/Hourly Sorter Details Rate/resource.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "scope": "DG", - "version": 2, - "restricted": false, - "overridable": true, - "files": [ - "query.sql" - ], - "attributes": { - "useMaxReturnSize": false, - "autoBatchEnabled": false, - "fallbackValue": "", - "maxReturnSize": 100, - "cacheUnit": "SEC", - "type": "Query", - "enabled": true, - "cacheAmount": 1, - "cacheEnabled": false, - "database": "MariaDB", - "fallbackEnabled": false, - "lastModificationSignature": "511103d25c5a516c8dadeb22512bc71d49b10c04a6211592b278cfe84f0ea80b", - "permissions": [ - { - "zone": "", - "role": "" - } - ], - "lastModification": { - "actor": "admin", - "timestamp": "2025-11-19T14:31:10Z" - }, - "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", - "parameters": [ - { - "type": "Parameter", - "identifier": "starttime", - "sqlType": 8 - }, - { - "type": "Parameter", - "identifier": "endtime", - "sqlType": 8 - } - ] - } -} \ No newline at end of file diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/query.sql b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/query.sql index 160426ae..32916142 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/query.sql @@ -2,62 +2,51 @@ SELECT roundtime AS `Round Time`, sScanner_Name AS `Scanner Name`, COALESCE(total_bad_reads, 0) AS `Total Bad Reads`, - COALESCE(total_comm_faults, 0) AS `Total Comm Faults`, COALESCE(total_good_reads, 0) AS `Total Good Reads`, - COALESCE(total_multi_items, 0) AS `Total Multi Items`, COALESCE(total_multi_reads, 0) AS `Total Multi Reads`, COALESCE(total_no_data, 0) AS `Total No Data`, COALESCE(total_no_reads, 0) AS `Total No Reads`, - COALESCE(total_bad_reads, 0) + - COALESCE(total_comm_faults, 0) + - COALESCE(total_good_reads, 0) + - COALESCE(total_multi_items, 0) + - COALESCE(total_multi_reads, 0) + - COALESCE(total_no_data, 0) + - COALESCE(total_no_reads, 0) AS `Total` + ( + COALESCE(total_bad_reads, 0) + + COALESCE(total_good_reads, 0) + + COALESCE(total_multi_reads, 0) + + COALESCE(total_no_data, 0) + + COALESCE(total_no_reads, 0) + ) AS `Total` FROM ( SELECT FROM_UNIXTIME( - FLOOR(UNIX_TIMESTAMP(t_stamp) / + FLOOR( + UNIX_TIMESTAMP(t_stamp) / CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) * - CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) AS roundtime, - sScanner_Name, - SUM(diScanner_bad_reads) AS total_bad_reads, - SUM(diScanner_comm_fault) AS total_comm_faults, - SUM(diScanner_good_reads) AS total_good_reads, - SUM(diScanner_multi_items) AS total_multi_items, - SUM(diScanner_multi_reads) AS total_multi_reads, - SUM(diScanner_no_data) AS total_no_data, - SUM(diScanner_no_reads) AS total_no_reads - FROM scanner_reads - WHERE t_stamp BETWEEN :starttime AND :endtime - AND (sScanner_Name = :scannername OR :scannername IS NULL OR :scannername = '') - GROUP BY roundtime, sScanner_Name - - UNION ALL - - SELECT - FROM_UNIXTIME( - FLOOR(UNIX_TIMESTAMP(t_stamp) / - CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) - ) * + ) * CEIL(TIMESTAMPDIFF(SECOND, :starttime, :endtime) / 24.0) ) AS roundtime, + 'S03aa' AS sScanner_Name, + + -- BAD READS (anything not success/no_read/no_code/multi) SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) AS total_bad_reads, - 0 AS total_comm_faults, + + -- GOOD reads SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS total_good_reads, - 0 AS total_multi_items, + + -- MULTI READS SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) AS total_multi_reads, + + -- NO DATA SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS total_no_data, + + -- NO READS SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS total_no_reads + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime - AND adiSort_Code_0 NOT IN (11, 15) - AND sLocation_ID LIKE 'S03%' - AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + AND adiSort_Code_0 NOT IN (11, 15) + AND sLocation_ID LIKE 'S03%' + AND (:scannername IS NULL OR :scannername = '' OR :scannername = 'S03aa') + GROUP BY roundtime - ORDER BY roundtime ASC -) basa; +) AS basa + +ORDER BY `Round Time` ASC; diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/resource.json b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/resource.json index aaef8602..29585b2a 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Graph Scanner Details Count/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "4690c5c84319c95d04647d24b38290e1abbfdd54f27b84750c93bee96246ef91", + "lastModificationSignature": "4963d6627b70a9b71a4c9f3cd0c1efe8ee8c196011ccf22dae7f6f5b9b7bfae3", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T14:50:01Z" + "timestamp": "2025-12-01T08:32:12Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/query.sql b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/query.sql index 7a629f4d..c885b05d 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/query.sql @@ -5,9 +5,7 @@ SELECT 'S03aa' AS sScanner_Name, COALESCE(sorter_total.total_bad_reads, 0) AS total_bad_reads, - 0 AS total_comm_faults, COALESCE(sorter_total.total_good_reads, 0) AS total_good_reads, - 0 AS total_multi_items, COALESCE(sorter_total.total_multi_reads, 0) AS total_multi_reads, COALESCE(sorter_total.total_no_data, 0) AS total_no_data, COALESCE(sorter_total.total_no_reads, 0) AS total_no_reads, diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/resource.json b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/resource.json index 43132a2f..9829120f 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Count/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "df107f13425dcb2c06353ffebb2fd9e2b52141c2203aff4f724478f85427bce9", + "lastModificationSignature": "f22c7f05f474fb1e9ccd3a40f537ff92fdd36159d86eb5d2f1da4a2e2ede00c6", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T14:52:05Z" + "timestamp": "2025-12-01T08:33:16Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/query.sql b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/query.sql index 7eb72dc7..a1126ad8 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/query.sql @@ -5,9 +5,7 @@ SELECT 'S03aa' AS sScanner_Name, CONCAT(COALESCE(sorter_total.total_bad_reads, 0), '%') AS total_bad_reads, - '0%' AS total_comm_faults, CONCAT(COALESCE(sorter_total.total_good_reads, 0), '%') AS total_good_reads, - '0%' AS total_multi_items, CONCAT(COALESCE(sorter_total.total_multi_reads, 0), '%') AS total_multi_reads, CONCAT(COALESCE(sorter_total.total_no_data, 0), '%') AS total_no_data, CONCAT(COALESCE(sorter_total.total_no_reads, 0), '%') AS total_no_reads, @@ -17,28 +15,29 @@ FROM (SELECT 1) AS p LEFT JOIN ( SELECT CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15)) * 100.0) / COUNT(*), 2) END AS total_bad_reads, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 0) * 100.0) / COUNT(*), 2) END AS total_good_reads, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 10) * 100.0) / COUNT(*), 2) END AS total_multi_reads, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 9) * 100.0) / COUNT(*), 2) END AS total_no_data, CASE WHEN COUNT(*) = 0 THEN 0 - ELSE ROUND((SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2) + ELSE ROUND((SUM(adiSort_Code_0 = 8) * 100.0) / COUNT(*), 2) END AS total_no_reads, COUNT(*) AS total + FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime AND adiSort_Code_0 NOT IN (11, 15) AND sLocation_ID LIKE 'S03%' -) AS sorter_total ON 1=1; +) AS sorter_total ON 1 = 1; diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/resource.json b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/resource.json index 844cc062..08859db2 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Percentage/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "858c45e4b8302cade05272a1d5fc4a7263c2421f948953f20b7869ad6ca187cb", + "lastModificationSignature": "c0a3e032ff2b5c0f02904a3b7bcd5de2cd5a3f187f2bfb0558f83ca46d4a6a1f", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T14:53:10Z" + "timestamp": "2025-12-01T08:34:11Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/query.sql b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/query.sql index 113ea540..d3a80357 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/query.sql +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/query.sql @@ -4,54 +4,68 @@ SELECT DATE_FORMAT(:endtime, '%Y-%m-%d %H:%i') AS end_time, 'S03aa' AS sScanner_Name, + -- Bad Reads (rate) CASE WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_bad_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) + ELSE ROUND( + COALESCE(sorter_total.total_bad_reads, 0) * 3600.0 / + TIMESTAMPDIFF(SECOND, :starttime, :endtime), + 2) END AS total_bad_reads, - 0 AS total_comm_faults, - + -- Good Reads (rate) CASE WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_good_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) + ELSE ROUND( + COALESCE(sorter_total.total_good_reads, 0) * 3600.0 / + TIMESTAMPDIFF(SECOND, :starttime, :endtime), + 2) END AS total_good_reads, - 0 AS total_multi_items, - + -- Multi Reads (rate) CASE WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_multi_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) + ELSE ROUND( + COALESCE(sorter_total.total_multi_reads, 0) * 3600.0 / + TIMESTAMPDIFF(SECOND, :starttime, :endtime), + 2) END AS total_multi_reads, + -- No Data (rate) CASE WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_no_data, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) + ELSE ROUND( + COALESCE(sorter_total.total_no_data, 0) * 3600.0 / + TIMESTAMPDIFF(SECOND, :starttime, :endtime), + 2) END AS total_no_data, + -- No Reads (rate) CASE WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total_no_reads, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) + ELSE ROUND( + COALESCE(sorter_total.total_no_reads, 0) * 3600.0 / + TIMESTAMPDIFF(SECOND, :starttime, :endtime), + 2) END AS total_no_reads, + -- Total Items (rate) CASE WHEN TIMESTAMPDIFF(SECOND, :starttime, :endtime) = 0 THEN 0 - ELSE ROUND(COALESCE(sorter_total.total, 0) * 3600.0 - / TIMESTAMPDIFF(SECOND, :starttime, :endtime), 2) + ELSE ROUND( + COALESCE(sorter_total.total, 0) * 3600.0 / + TIMESTAMPDIFF(SECOND, :starttime, :endtime), + 2) END AS total FROM (SELECT 1) AS p LEFT JOIN ( SELECT - SUM(CASE WHEN adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15) THEN 1 ELSE 0 END) AS total_bad_reads, - SUM(CASE WHEN adiSort_Code_0 = 0 THEN 1 ELSE 0 END) AS total_good_reads, - SUM(CASE WHEN adiSort_Code_0 = 10 THEN 1 ELSE 0 END) AS total_multi_reads, - SUM(CASE WHEN adiSort_Code_0 = 9 THEN 1 ELSE 0 END) AS total_no_data, - SUM(CASE WHEN adiSort_Code_0 = 8 THEN 1 ELSE 0 END) AS total_no_reads, + SUM(adiSort_Code_0 NOT IN (0, 8, 9, 10, 11, 15)) AS total_bad_reads, + SUM(adiSort_Code_0 = 0) AS total_good_reads, + SUM(adiSort_Code_0 = 10) AS total_multi_reads, + SUM(adiSort_Code_0 = 9) AS total_no_data, + SUM(adiSort_Code_0 = 8) AS total_no_reads, COUNT(*) AS total FROM item_data WHERE t_stamp BETWEEN :starttime AND :endtime diff --git a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/resource.json b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/resource.json index a401319d..0bb7e0a5 100644 --- a/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/resource.json +++ b/BNA8_autStand/ignition/named-query/Statistics/ScannerDetails/Scanner Details Rate/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "920f87cc3717dae218a6b6de4811e895f2578c1cb44e0de174546d8613d7f23f", + "lastModificationSignature": "1dbfa9f5946ee0cf21303e08b36d7ea66c0b3743ec05f8ba756cae2b6ab7dabb", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-11-19T14:54:39Z" + "timestamp": "2025-12-01T08:35:24Z" }, "syntaxProvider": "class com.adbs.syntax.MySQLSyntaxProvider", "parameters": [ diff --git a/conversion-report.txt b/conversion-report.txt index b18e91ae..6d166497 100644 --- a/conversion-report.txt +++ b/conversion-report.txt @@ -650,3 +650,13 @@ Starting conversion: 20251125:12.11.55 Conversion finished. Elapsed time: 12 ms Starting conversion: 20251125:12.15.40 Conversion finished. Elapsed time: 10 ms +Starting conversion: 20251126:11.37.16 +Conversion finished. Elapsed time: 10 ms +Starting conversion: 20251127:11.19.49 +Conversion finished. Elapsed time: 13 ms +Starting conversion: 20251128:09.14.24 +Conversion finished. Elapsed time: 14 ms +Starting conversion: 20251129:13.36.22 +Conversion finished. Elapsed time: 17 ms +Starting conversion: 20251201:10.36.05 +Conversion finished. Elapsed time: 10 ms