Update Function SFP_GET_SHIFT_INFO
This commit is contained in:
@@ -1 +1,291 @@
|
|||||||
牄禗袬蒨@\蚕謨@^@
|
SET PATH *LIBL ;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION RESTAPI.SFP_GET_SHIFT_INFO (
|
||||||
|
IN_PARM CLOB(2147483647) )
|
||||||
|
RETURNS CLOB(2147483647)
|
||||||
|
LANGUAGE SQL
|
||||||
|
SPECIFIC RESTAPI.SFP_GET_SHIFT_INFO
|
||||||
|
NOT DETERMINISTIC
|
||||||
|
MODIFIES SQL DATA
|
||||||
|
CALLED ON NULL INPUT
|
||||||
|
SET OPTION ALWBLK = *ALLREAD ,
|
||||||
|
ALWCPYDTA = *OPTIMIZE ,
|
||||||
|
COMMIT = *NONE ,
|
||||||
|
DECRESULT = (31, 31, 00) ,
|
||||||
|
DYNDFTCOL = *NO ,
|
||||||
|
DYNUSRPRF = *USER ,
|
||||||
|
SRTSEQ = *HEX
|
||||||
|
BEGIN
|
||||||
|
DECLARE ENV VARCHAR ( 20 ) DEFAULT '' ;
|
||||||
|
DECLARE V_WC VARCHAR ( 5 ) DEFAULT '' ;
|
||||||
|
DECLARE V_SITE VARCHAR ( 3 ) DEFAULT '' ;
|
||||||
|
DECLARE LL VARCHAR ( 1024 ) DEFAULT '' ;
|
||||||
|
DECLARE V_IN_PARM CLOB ( 2 G ) DEFAULT '' ;
|
||||||
|
-- Error handling variables
|
||||||
|
DECLARE V_SQLSTATE CHAR ( 5 ) DEFAULT '00000' ;
|
||||||
|
DECLARE V_SQLCODE INTEGER DEFAULT 0 ;
|
||||||
|
DECLARE V_ERRMSG VARCHAR ( 500 ) DEFAULT '' ;
|
||||||
|
DECLARE V_HTTP_STATUS INTEGER DEFAULT 200 ;
|
||||||
|
DECLARE V_HAS_ERROR INTEGER DEFAULT 0 ;
|
||||||
|
-- Continue handlers for error capture
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '22007' -- Invalid datetime
|
||||||
|
BEGIN
|
||||||
|
SET V_SQLSTATE = '22007' ;
|
||||||
|
GET DIAGNOSTICS CONDITION 1 V_ERRMSG = MESSAGE_TEXT ;
|
||||||
|
SET V_HTTP_STATUS = 400 ;
|
||||||
|
SET V_HAS_ERROR = 1 ;
|
||||||
|
END ;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '22003' -- Numeric out of range
|
||||||
|
BEGIN
|
||||||
|
SET V_SQLSTATE = '22003' ;
|
||||||
|
GET DIAGNOSTICS CONDITION 1 V_ERRMSG = MESSAGE_TEXT ;
|
||||||
|
SET V_HTTP_STATUS = 400 ;
|
||||||
|
SET V_HAS_ERROR = 1 ;
|
||||||
|
END ;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' -- No data found
|
||||||
|
BEGIN
|
||||||
|
SET V_SQLSTATE = '02000' ;
|
||||||
|
SET V_ERRMSG = 'No data found for the specified criteria' ;
|
||||||
|
SET V_HTTP_STATUS = 404 ;
|
||||||
|
SET V_HAS_ERROR = 1 ;
|
||||||
|
END ;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '42501' -- Not authorized
|
||||||
|
BEGIN
|
||||||
|
SET V_SQLSTATE = '42501' ;
|
||||||
|
GET DIAGNOSTICS CONDITION 1 V_ERRMSG = MESSAGE_TEXT ;
|
||||||
|
SET V_HTTP_STATUS = 403 ;
|
||||||
|
SET V_HAS_ERROR = 1 ;
|
||||||
|
END ;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' -- Object not found
|
||||||
|
BEGIN
|
||||||
|
SET V_SQLSTATE = '42704' ;
|
||||||
|
GET DIAGNOSTICS CONDITION 1 V_ERRMSG = MESSAGE_TEXT ;
|
||||||
|
SET V_HTTP_STATUS = 404 ;
|
||||||
|
SET V_HAS_ERROR = 1 ;
|
||||||
|
END ;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
GET DIAGNOSTICS CONDITION 1
|
||||||
|
V_SQLSTATE = RETURNED_SQLSTATE ,
|
||||||
|
V_SQLCODE = DB2_RETURNED_SQLCODE , V_ERRMSG = MESSAGE_TEXT ;
|
||||||
|
SET V_HTTP_STATUS = 500 ;
|
||||||
|
SET V_HAS_ERROR = 1 ;
|
||||||
|
END ;
|
||||||
|
-- Parse input parameters
|
||||||
|
SET V_WC = COALESCE ( JSON_VALUE ( IN_PARM , '$.workcenter' ) , '' ) ;
|
||||||
|
SET V_SITE = COALESCE ( JSON_VALUE ( IN_PARM , '$.site' ) , '' ) ;
|
||||||
|
-- Extract env handling all input formats (object, array, string)
|
||||||
|
SET V_IN_PARM = IN_PARM ;
|
||||||
|
WHILE CISTOOLS . JSON_TYPE ( V_IN_PARM ) IN ( 'object' , 'array' , 'string' )
|
||||||
|
DO
|
||||||
|
SET V_IN_PARM =
|
||||||
|
CASE CISTOOLS . JSON_TYPE ( V_IN_PARM )
|
||||||
|
WHEN 'object' THEN JSON_VALUE ( V_IN_PARM , '$.env' )
|
||||||
|
WHEN 'array' THEN JSON_VALUE ( V_IN_PARM , '$[0]' )
|
||||||
|
WHEN 'string' THEN REPLACE ( V_IN_PARM , '"' , '' )
|
||||||
|
ELSE TRIM ( V_IN_PARM )
|
||||||
|
END ;
|
||||||
|
END WHILE ;
|
||||||
|
SET ENV = V_IN_PARM ;
|
||||||
|
SET LL = CISTOOLS . SET_LIBRARY_LIST ( ENV ) ;
|
||||||
|
-- Validate environment was set
|
||||||
|
IF ENV = ''
|
||||||
|
OR ENV IS NULL THEN
|
||||||
|
RETURN
|
||||||
|
JSON_OBJECT (
|
||||||
|
'error' : JSON_OBJECT (
|
||||||
|
'http_status' : 400 , 'sqlstate' : '22001' ,
|
||||||
|
'message' : 'Environment parameter is required'
|
||||||
|
)
|
||||||
|
) ;
|
||||||
|
END IF ;
|
||||||
|
-- Check for errors from library list setup
|
||||||
|
IF V_HAS_ERROR = 1 THEN
|
||||||
|
RETURN
|
||||||
|
JSON_OBJECT (
|
||||||
|
'error' : JSON_OBJECT (
|
||||||
|
'http_status' : V_HTTP_STATUS , 'sqlstate' : V_SQLSTATE ,
|
||||||
|
'message' : V_ERRMSG
|
||||||
|
)
|
||||||
|
) ;
|
||||||
|
END IF ;
|
||||||
|
RETURN
|
||||||
|
WITH SHIFT_CALC AS (
|
||||||
|
SELECT WSWKCT AS WORKCENTER , WSSTID AS SITE ,
|
||||||
|
TRIM ( WSGRP1 ) AS PLANT , TRIM ( WSGRP2 ) AS DEPT ,
|
||||||
|
WSCCRW AS CURRENT_CREW , TRIM ( WSDWNR ) AS DOWN_REASON ,
|
||||||
|
KDRDESC AS DOWN_DESCRIPTION ,
|
||||||
|
KDSCHED AS SCHEDULED_DOWN ,
|
||||||
|
CURRENT_TIMESTAMP AS CURRENT_TS ,
|
||||||
|
-- Shift 1 boundaries
|
||||||
|
TO_DATE (
|
||||||
|
ZONED ( CURRENT_DATE ) || LPAD ( WSSF1B , 6 , '0' ) ,
|
||||||
|
'YYYYMMDDHH24MISS' ) AS SHIFT1_START ,
|
||||||
|
TO_DATE (
|
||||||
|
ZONED (
|
||||||
|
CASE
|
||||||
|
WHEN WSSF1E >= WSSF1B THEN CURRENT_DATE
|
||||||
|
ELSE CURRENT_DATE + 1 DAY
|
||||||
|
END ) || LPAD ( WSSF1E , 6 , '0' ) ,
|
||||||
|
'YYYYMMDDHH24MISS' ) AS SHIFT1_END ,
|
||||||
|
-- Shift 2 boundaries
|
||||||
|
TO_DATE (
|
||||||
|
ZONED ( CURRENT_DATE ) || LPAD ( WSSF2B , 6 , '0' ) ,
|
||||||
|
'YYYYMMDDHH24MISS' ) AS SHIFT2_START ,
|
||||||
|
TO_DATE (
|
||||||
|
ZONED (
|
||||||
|
CASE
|
||||||
|
WHEN WSSF2E >= WSSF2B THEN CURRENT_DATE
|
||||||
|
ELSE CURRENT_DATE + 1 DAY
|
||||||
|
END ) || LPAD ( WSSF2E , 6 , '0' ) ,
|
||||||
|
'YYYYMMDDHH24MISS' ) AS SHIFT2_END ,
|
||||||
|
-- Shift 3 boundaries
|
||||||
|
TO_DATE (
|
||||||
|
ZONED ( CURRENT_DATE ) || LPAD ( WSSF3B , 6 , '0' ) ,
|
||||||
|
'YYYYMMDDHH24MISS' ) AS SHIFT3_START ,
|
||||||
|
TO_DATE (
|
||||||
|
ZONED (
|
||||||
|
CASE
|
||||||
|
WHEN WSSF3E >= WSSF3B THEN CURRENT_DATE
|
||||||
|
ELSE CURRENT_DATE + 1 DAY
|
||||||
|
END ) || LPAD ( WSSF3E , 6 , '0' ) ,
|
||||||
|
'YYYYMMDDHH24MISS' ) AS SHIFT3_END ,
|
||||||
|
WSSF1B AS SF1_BEGIN , WSSF1E AS SF1_END ,
|
||||||
|
WSSF2B AS SF2_BEGIN , WSSF2E AS SF2_END ,
|
||||||
|
WSSF3B AS SF3_BEGIN , WSSF3E AS SF3_END ,
|
||||||
|
WSDEND AS DAY_END
|
||||||
|
FROM SFCCWKS
|
||||||
|
LEFT JOIN SFCDWR
|
||||||
|
ON TRIM ( WSDWNR ) = COALESCE (
|
||||||
|
TRIM ( KDREASN ) , LEFT (
|
||||||
|
KDRDESC , LENGTH ( TRIM ( WSDWNR ) ) ) )
|
||||||
|
WHERE WSWKCT = COALESCE ( NULLIF ( V_WC , '' ) , WSWKCT )
|
||||||
|
AND WSSTID = COALESCE ( NULLIF ( V_SITE , '' ) , WSSTID )
|
||||||
|
) ,
|
||||||
|
SHIFT_INFO AS (
|
||||||
|
SELECT WORKCENTER , SITE , PLANT , DEPT , CURRENT_CREW ,
|
||||||
|
DOWN_REASON , CURRENT_TS , SHIFT1_START , SHIFT1_END ,
|
||||||
|
SHIFT2_START , SHIFT2_END , SHIFT3_START , SHIFT3_END ,
|
||||||
|
SF1_BEGIN , SF1_END , SF2_BEGIN , SF2_END , SF3_BEGIN ,
|
||||||
|
SF3_END , DAY_END , DOWN_DESCRIPTION , SCHEDULED_DOWN ,
|
||||||
|
CASE
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT1_START AND SHIFT1_END
|
||||||
|
THEN 1
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT2_START AND SHIFT2_END
|
||||||
|
THEN 2
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT3_START AND SHIFT3_END
|
||||||
|
THEN 3
|
||||||
|
ELSE 0
|
||||||
|
END AS SHIFT_NUM ,
|
||||||
|
CASE
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT1_START AND SHIFT1_END
|
||||||
|
THEN SHIFT1_START
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT2_START AND SHIFT2_END
|
||||||
|
THEN SHIFT2_START
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT3_START AND SHIFT3_END
|
||||||
|
THEN SHIFT3_START
|
||||||
|
ELSE NULL
|
||||||
|
END AS CURRENT_SHIFT_START ,
|
||||||
|
CASE
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT1_START AND SHIFT1_END
|
||||||
|
THEN SHIFT1_END
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT2_START AND SHIFT2_END
|
||||||
|
THEN SHIFT2_END
|
||||||
|
WHEN
|
||||||
|
CURRENT_TS BETWEEN SHIFT3_START AND SHIFT3_END
|
||||||
|
THEN SHIFT3_END
|
||||||
|
ELSE NULL
|
||||||
|
END AS CURRENT_SHIFT_END
|
||||||
|
FROM SHIFT_CALC
|
||||||
|
) ,
|
||||||
|
JSON_ROWS AS (
|
||||||
|
SELECT
|
||||||
|
JSON_OBJECT (
|
||||||
|
'workcenterId' : WORKCENTER , 'site' : SITE ,
|
||||||
|
'plant' : PLANT , 'department' : DEPT ,
|
||||||
|
'currentCrew' : CURRENT_CREW , 'downReason' :
|
||||||
|
CASE
|
||||||
|
WHEN DOWN_REASON = '' THEN NULL
|
||||||
|
ELSE
|
||||||
|
JSON_OBJECT (
|
||||||
|
'reasonCode' VALUE TRIM ( DOWN_REASON ) ,
|
||||||
|
'descriptiveReason' VALUE TRIM (
|
||||||
|
DOWN_DESCRIPTION ) , 'secheduled' VALUE
|
||||||
|
CASE SCHEDULED_DOWN
|
||||||
|
WHEN 'Y' THEN 'true'
|
||||||
|
ELSE 'false'
|
||||||
|
END FORMAT JSON
|
||||||
|
)
|
||||||
|
END FORMAT JSON , 'isDown' :
|
||||||
|
CASE
|
||||||
|
WHEN DOWN_REASON <> '' THEN 'true'
|
||||||
|
ELSE 'false'
|
||||||
|
END FORMAT JSON , 'currentShiftNumber' : SHIFT_NUM ,
|
||||||
|
'currentShiftStart' :
|
||||||
|
CASE
|
||||||
|
WHEN
|
||||||
|
CURRENT_SHIFT_START IS NOT NULL
|
||||||
|
THEN
|
||||||
|
TO_CHAR (
|
||||||
|
CURRENT_SHIFT_START ,
|
||||||
|
'YYYY-MM-DD HH24:MI:SS' )
|
||||||
|
ELSE NULL
|
||||||
|
END , 'currentShiftEnd' :
|
||||||
|
CASE
|
||||||
|
WHEN
|
||||||
|
CURRENT_SHIFT_END IS NOT NULL
|
||||||
|
THEN
|
||||||
|
TO_CHAR (
|
||||||
|
CURRENT_SHIFT_END ,
|
||||||
|
'YYYY-MM-DD HH24:MI:SS' )
|
||||||
|
ELSE NULL
|
||||||
|
END , 'shift1Begin' : SUBSTRING (
|
||||||
|
LPAD ( SF1_BEGIN , 6 , '0' ) , 1 , 2 ) || ':' ||
|
||||||
|
SUBSTRING ( LPAD ( SF1_BEGIN , 6 , '0' ) , 3 , 2 ) ,
|
||||||
|
'shift1End' : SUBSTRING (
|
||||||
|
LPAD ( SF1_END , 6 , '0' ) , 1 , 2 ) || ':' ||
|
||||||
|
SUBSTRING ( LPAD ( SF1_END , 6 , '0' ) , 3 , 2 ) ,
|
||||||
|
'shift2Begin' : SUBSTRING (
|
||||||
|
LPAD ( SF2_BEGIN , 6 , '0' ) , 1 , 2 ) || ':' ||
|
||||||
|
SUBSTRING ( LPAD ( SF2_BEGIN , 6 , '0' ) , 3 , 2 ) ,
|
||||||
|
'shift2End' : SUBSTRING (
|
||||||
|
LPAD ( SF2_END , 6 , '0' ) , 1 , 2 ) || ':' ||
|
||||||
|
SUBSTRING ( LPAD ( SF2_END , 6 , '0' ) , 3 , 2 ) ,
|
||||||
|
'shift3Begin' : SUBSTRING (
|
||||||
|
LPAD ( SF3_BEGIN , 6 , '0' ) , 1 , 2 ) || ':' ||
|
||||||
|
SUBSTRING ( LPAD ( SF3_BEGIN , 6 , '0' ) , 3 , 2 ) ,
|
||||||
|
'shift3End' : SUBSTRING (
|
||||||
|
LPAD ( SF3_END , 6 , '0' ) , 1 , 2 ) || ':' ||
|
||||||
|
SUBSTRING ( LPAD ( SF3_END , 6 , '0' ) , 3 , 2 ) ,
|
||||||
|
'dayEnd' : SUBSTRING ( LPAD ( DAY_END , 6 , '0' ) , 1 , 2 )
|
||||||
|
|| ':' ||
|
||||||
|
SUBSTRING ( LPAD ( DAY_END , 6 , '0' ) , 3 , 2 )
|
||||||
|
) AS WC_OBJ
|
||||||
|
FROM SHIFT_INFO
|
||||||
|
ORDER BY WORKCENTER , SITE ) SELECT JSON_OBJECT (
|
||||||
|
'workcenters' : JSON_ARRAYAGG (
|
||||||
|
WC_OBJ FORMAT JSON
|
||||||
|
) , 'currentTimestamp' : TO_CHAR (
|
||||||
|
CURRENT_TIMESTAMP , 'YYYY-MM-DD HH24:MI:SS' ) ,
|
||||||
|
'generatedAt' : TO_CHAR (
|
||||||
|
CURRENT_TIMESTAMP , 'YYYY-MM-DD HH24:MI:SS' )
|
||||||
|
)
|
||||||
|
FROM JSON_ROWS ;
|
||||||
|
END ;
|
||||||
|
|
||||||
|
GRANT ALTER , EXECUTE
|
||||||
|
ON SPECIFIC FUNCTION RESTAPI.SFP_GET_SHIFT_INFO
|
||||||
|
TO AMAPICS WITH GRANT OPTION ;
|
||||||
|
|
||||||
|
GRANT EXECUTE
|
||||||
|
ON SPECIFIC FUNCTION RESTAPI.SFP_GET_SHIFT_INFO
|
||||||
|
TO PUBLIC ;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user