DLLG#79179 -- Aanpassing koppeling met Brivo.

svn path=/Customer/trunk/; revision=61813
This commit is contained in:
Arthur Egberink
2023-09-15 06:55:43 +00:00
parent 7d386fa07b
commit 87694b477b

View File

@@ -39,6 +39,10 @@ AS
p_facility_code IN VARCHAR2) p_facility_code IN VARCHAR2)
RETURN VARCHAR2; RETURN VARCHAR2;
FUNCTION get_dec_card_data (p_card_number IN VARCHAR2,
p_facility_code IN VARCHAR2)
RETURN VARCHAR2;
PROCEDURE update_bezoeker (p_bezkey IN NUMBER); PROCEDURE update_bezoeker (p_bezkey IN NUMBER);
PROCEDURE set_bezoeker_syncdate (p_bezkey IN NUMBER, PROCEDURE set_bezoeker_syncdate (p_bezkey IN NUMBER,
@@ -321,7 +325,130 @@ AS
RETURN LOWER(LTRIM(v_result, '0')); RETURN LOWER(LTRIM(v_result, '0'));
END; END;
FUNCTION get_dec_card_data (p_card_number VARCHAR2,
p_facility_code VARCHAR2)
RETURN VARCHAR2
AS
v_card_bin VARCHAR2 (100);
v_facility_bin VARCHAR2 (100);
v_card_hex VARCHAR2 (100);
v_facility_hex VARCHAR2 (100);
v_bin VARCHAR2 (100);
v_bin_str VARCHAR2 (100);
v_result VARCHAR2 (100);
v_length NUMBER;
v_count NUMBER;
v_bit VARCHAR2 (1);
v_dec NUMBER;
FUNCTION OneHex2Bin (p_hex VARCHAR2)
RETURN VARCHAR2
AS
v_result VARCHAR2 (10);
BEGIN
IF p_hex = '0'
THEN
v_result := '0000';
ELSIF p_hex = '1'
THEN
v_result := '0001';
ELSIF p_hex = '2'
THEN
v_result := '0010';
ELSIF p_hex = '3'
THEN
v_result := '0011';
ELSIF p_hex = '4'
THEN
v_result := '0100';
ELSIF p_hex = '5'
THEN
v_result := '0101';
ELSIF p_hex = '6'
THEN
v_result := '0110';
ELSIF p_hex = '7'
THEN
v_result := '0111';
ELSIF p_hex = '8'
THEN
v_result := '1000';
ELSIF p_hex = '9'
THEN
v_result := '1001';
ELSIF p_hex = 'A'
THEN
v_result := '1010';
ELSIF p_hex = 'B'
THEN
v_result := '1011';
ELSIF p_hex = 'C'
THEN
v_result := '1100';
ELSIF p_hex = 'D'
THEN
v_result := '1101';
ELSIF p_hex = 'E'
THEN
v_result := '1110';
ELSIF p_hex = 'F'
THEN
v_result := '1111';
END IF;
RETURN v_result;
END;
BEGIN
v_card_hex := p_card_number;
-- transform the hex card data into a binary string
FOR v_index IN 1 .. 4
LOOP
v_card_bin :=
v_card_bin || OneHex2Bin (SUBSTR (v_card_hex, 1, 1));
v_card_hex := SUBSTR (v_card_hex, 2, 4);
END LOOP;
-- add the parity bit
--v_card_bin := set_parity (v_card_bin, 'after', 1);
-- transform the hex facility data into a binary string
v_facility_hex := p_facility_code;
FOR v_index IN 1 .. 2
LOOP
v_facility_bin :=
v_facility_bin || OneHex2Bin (SUBSTR (v_facility_hex, 1, 1));
v_facility_hex := SUBSTR (v_facility_hex, 2, 4);
END LOOP;
-- add the parity bit
-- v_facility_bin := set_parity (v_facility_bin, 'before', 0);
-- combine the facility data and the card data
v_bin := v_facility_bin || v_card_bin;
-- the first 12 bits have an even leading parity bit
-- the last 12 bits have a trailing odd parity bit
-- bij de decimale uitvoering doen we geen parity
--v_bin := set_parity (SUBSTR(v_bin, 1,12), 'before', 0) || set_parity (SUBSTR(v_bin, 13,12), 'after', 1);
-- and convert the binary string into hex
v_dec := 0;
v_count := 0;
WHILE v_bin IS NOT NULL
LOOP
v_bit := SUBSTR(v_bin, LENGTH(v_bin), 1);
IF v_bit = 1
THEN
v_dec := v_dec + POWER(2,v_count);
END IF;
v_bin := SUBSTR(v_bin, 1, LENGTH(v_bin)-1);
v_count := v_count + 1;
END LOOP;
RETURN v_dec;
END;
PROCEDURE update_bezoeker (p_bezkey IN NUMBER) PROCEDURE update_bezoeker (p_bezkey IN NUMBER)
AS AS
@@ -349,6 +476,7 @@ AS
v_dec_code_key NUMBER; v_dec_code_key NUMBER;
v_sync_timestamp_key NUMBER; v_sync_timestamp_key NUMBER;
v_date DATE; v_date DATE;
v_bedrijf BEZ_BEZOEKERS.BEZ_AFSPRAAK_BEDRIJF%TYPE;
BEGIN BEGIN
FOR rec IN c FOR rec IN c
LOOP LOOP
@@ -422,8 +550,8 @@ AS
DBMS_OUTPUT.put_line ('v_date'); DBMS_OUTPUT.put_line ('v_date');
SELECT bez_afspraak_datum SELECT bez_afspraak_datum, bez_afspraak_bedrijf
INTO v_date INTO v_date, v_bedrijf
FROM bez_afspraak a, bez_bezoekers b FROM bez_afspraak a, bez_bezoekers b
WHERE a.bez_afspraak_key = b.bez_afspraak_key WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND b.bez_bezoekers_key = p_bezkey; AND b.bez_bezoekers_key = p_bezkey;
@@ -443,6 +571,7 @@ AS
INTO v_count INTO v_count
FROM bez_kenmerkwaarde kw FROM bez_kenmerkwaarde kw
WHERE kw.bez_kenmerk_key = v_card_number_key WHERE kw.bez_kenmerk_key = v_card_number_key
AND bez_kenmerkwaarde_aanmaak > SYSDATE - 300
AND bez_kenmerkwaarde_waarde = v_code; AND bez_kenmerkwaarde_waarde = v_code;
IF v_code IS NULL OR v_count > 1 IF v_code IS NULL OR v_count > 1
@@ -468,16 +597,29 @@ AS
p_bezkey, p_bezkey,
'123'); '123');
-- Vul het flexveld hex code met de hex waarde die gescant moet worden.
-- We gebruiken hiervoor 'The Standard 26-Bit Format'
FLX.setflex ( -- Vanaf 1 oktober 2023 gaan we de decimale code gebruiken ipv de hex code (DLLG#79179)
'BEZ', IF UPPER(v_bedrijf) LIKE '%FORTEZZA%'
v_hex_code_key, THEN
p_bezkey, FLX.setflex (
DLLG.get_hex_card_data ( 'BEZ',
LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'), v_hex_code_key,
LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0'))); p_bezkey,
DLLG.get_dec_card_data (
LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'),
LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0')));
ELSE
-- Vul het flexveld hex code met de hex waarde die gescant moet worden.
-- We gebruiken hiervoor 'The Standard 26-Bit Format'
FLX.setflex (
'BEZ',
v_hex_code_key,
p_bezkey,
DLLG.get_hex_card_data (
LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'),
LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0')));
END IF;
FLX.setflex ( FLX.setflex (
'BEZ', 'BEZ',