From 639b32bdf2c401c2ed88bd003b48713d3b48d370 Mon Sep 17 00:00:00 2001 From: shi_jq Date: Thu, 13 Mar 2025 11:01:20 +0800 Subject: [PATCH] =?UTF-8?q?[ref]=E5=90=8C=E6=AD=A5711?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/initdata/en/basedata/p_dict.xlsx | Bin 33792 -> 20703 bytes .../database/initdata/fr/basedata/p_dict.xlsx | Bin 0 -> 20703 bytes .../initdata/fr/basedata/p_dict_sort.xlsx | Bin 0 -> 4908 bytes .../database/initdata/zh/basedata/p_dict.xlsx | Bin 33792 -> 20703 bytes .../initscript/iscs6000_func_Kingbase.sql | 17309 ++++++++-------- .../initscript/iscs6000_func_MySQL.sql | 13986 +++++++------ .../initscript/iscs6000_func_openGauss.sql | 17237 ++++++++------- .../initscript/iscs6000_table_struct.xml | 16710 +++++++-------- .../en/apc_if_srv/translate/apc_if_srv_en.mo | Bin 2043 -> 0 bytes .../en/apc_if_srv/translate/apc_if_srv_en.po | 71 - .../resource/en/debug_tool/image/check.png | Bin 651 -> 0 bytes .../resource/en/debug_tool/image/check1.png | Bin 692 -> 0 bytes .../resource/en/debug_tool/image/down.png | Bin 218 -> 0 bytes .../resource/en/debug_tool/image/search.png | Bin 768 -> 0 bytes .../resource/en/debug_tool/image/uncheck.png | Bin 114 -> 0 bytes .../resource/en/debug_tool/image/uncheck1.png | Bin 432 -> 0 bytes .../resource/en/debug_tool/translate/en.qm | Bin 25348 -> 0 bytes .../resource/en/debug_tool/translate/en.ts | 1775 -- .../resource/en/fes/translate/fes_en.mo | Bin 15508 -> 0 bytes .../resource/en/fes/translate/fes_en.po | 798 - .../resource/en/gui/translate/icon_en.ts | 112 - .../resource/en/gui/translate/plugin_en.qm | Bin 147848 -> 0 bytes .../resource/en/gui/translate/plugin_en.ts | 8544 -------- .../translate/linkage_server_en.mo | Bin 7118 -> 0 bytes .../translate/linkage_server_en.po | 407 - .../model_studio/setting/table/APC_ANALOG.xml | 12 - .../setting/table/APC_DIGITAL.xml | 10 - .../setting/table/ATS_FES_LOCATION_INFO.xml | 7 - .../setting/table/ATS_FES_PLATFORM_INFO.xml | 8 - .../setting/table/BAS_CRAFT_DEF.xml | 8 - .../setting/table/BAS_MODE_DEF.xml | 11 - .../setting/table/BAS_MODE_TYPE.xml | 7 - .../table/BAS_TIMETABLE_CTRL_PARAM.xml | 15 - .../setting/table/BAS_TIMETABLE_DEF.xml | 9 - .../setting/table/BAS_TIMETABLE_INFO.xml | 10 - .../setting/table/BAS_TIMETABLE_SCHEDULE.xml | 18 - .../setting/table/CALC_FUNC_DEF.xml | 10 - .../setting/table/CALC_GROUP_DEF.xml | 8 - .../setting/table/CALC_IN_PARA.xml | 12 - .../setting/table/CALC_OUT_PARA.xml | 11 - .../setting/table/CALC_PARA_DEF.xml | 8 - .../setting/table/DEV_TYPE_DEF.xml | 9 - .../setting/table/DEV_TYPE_DEF_61850.xml | 11 - .../setting/table/DICT_POINT_TYPE.xml | 32 - .../setting/table/DICT_STATE_TEXT_INFO.xml | 11 - .../setting/table/DICT_UNIT_INFO.xml | 8 - .../setting/table/DICT_VOL_LEVEL.xml | 11 - .../setting/table/FAULT_RECALL_COND_DEF.xml | 11 - .../setting/table/LINKAGE_ACTION.xml | 13 - .../setting/table/LINKAGE_ACTION_FOR_BAS.xml | 12 - .../setting/table/LINKAGE_ACTION_FOR_MSG.xml | 12 - .../setting/table/LINKAGE_ACTION_FOR_PA.xml | 18 - .../setting/table/LINKAGE_ACTION_FOR_PIS.xml | 18 - .../table/LINKAGE_ACTION_FOR_PSCADA.xml | 12 - .../table/LINKAGE_ACTION_FOR_PUSH_PIC.xml | 12 - .../setting/table/LINKAGE_DEFINE.xml | 10 - .../setting/table/LINKAGE_FUNCTION.xml | 15 - .../setting/table/LINKAGE_FUNCTION_LIST.xml | 7 - .../setting/table/LINKAGE_SETTING.xml | 14 - .../LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml | 14 - .../setting/table/OPT_CTRL_ACT_DEFINE.xml | 14 - .../setting/table/OPT_HANDOVER_GRP.xml | 17 - .../setting/table/OPT_SHIELD_DEFINE.xml | 14 - .../setting/table/OPT_TOKEN_DEFINE.xml | 18 - .../setting/table/PA_AREA_INFO.xml | 7 - .../setting/table/PA_AUDIO_INFO.xml | 9 - .../setting/table/PA_BROADCAST_GROUP.xml | 9 - .../setting/table/PA_CTRL_PARAM.xml | 7 - .../setting/table/PA_LOCATION_AREA_DEF.xml | 7 - .../setting/table/PA_LOCATION_SEQ_DEF.xml | 7 - .../setting/table/PA_OPERATOR_DEF.xml | 7 - .../setting/table/PA_OPERATOR_MAP.xml | 7 - .../setting/table/PA_TIMED_AUDIO.xml | 20 - .../setting/table/PIS_AREA_INFO.xml | 7 - .../setting/table/PIS_CTRL_PARAM.xml | 7 - .../setting/table/PIS_DISPLAY_INFO.xml | 17 - .../setting/table/PIS_FES_LOCATION_INFO.xml | 7 - .../setting/table/PIS_LOCATION_AREA_DEF.xml | 7 - .../setting/table/PIS_MESSAGE_INFO.xml | 9 - .../setting/table/REGION_INFO.xml | 10 - .../model_studio/setting/table/SAFETY_DAY.xml | 8 - .../setting/table/SEQUENCE_ACTION.xml | 13 - .../setting/table/SEQUENCE_DEFINE.xml | 10 - .../setting/table/SEQUENCE_FUNCTION.xml | 14 - .../setting/table/SEQUENCE_SETTING.xml | 10 - .../setting/table/STAT_INST_DEF.xml | 20 - .../setting/table/STAT_INST_PARA_GRP.xml | 11 - .../setting/table/STAT_INST_PARA_POINT.xml | 14 - .../table/STAT_INST_PARA_POINT_FOR_ADD.xml | 14 - .../setting/table/STAT_INST_PARA_TIME.xml | 22 - .../table/STAT_INST_PARA_TIME_FOR_ADD.xml | 22 - .../setting/table/STAT_INST_RET_GRP.xml | 11 - .../setting/table/STAT_INST_RET_PARA.xml | 17 - .../table/STAT_INST_RET_PARA_FOR_ADD.xml | 16 - .../setting/table/STAT_LINK_DEF.xml | 8 - .../setting/table/STAT_LINK_PARA.xml | 12 - .../setting/table/STAT_LINK_RET.xml | 12 - .../setting/table/STAT_TEMPLATE_DEF.xml | 11 - .../setting/table/STAT_TEMPLATE_PARA.xml | 12 - .../setting/table/STAT_TEMPLATE_RET.xml | 11 - .../setting/table/SWITCH_CFG_INFO.xml | 11 - .../table/TRIGGER_CONDITION_DEFINE.xml | 33 - .../setting/table/TRIGGER_FUNCTION_DEFINE.xml | 9 - .../setting/table/TRIGGER_PERIOD_DEFINE.xml | 11 - .../setting/table/TRIGGER_TIMER_DEFINE.xml | 8 - .../en/model_studio/setting/tree/calcFunc.xml | 14 - .../model_studio/setting/tree/commonTree.xml | 79 - .../setting/tree/ctrlActDefine.xml | 14 - .../setting/tree/expressionTree.xml | 15 - .../model_studio/setting/tree/sampleTree.xml | 39 - .../setting/tree/statInstInput.xml | 14 - .../setting/tree/statInstOutput.xml | 14 - .../setting/tree/stateTextTree.xml | 14 - .../model_studio/setting/tree/staticsTree.xml | 14 - .../resource/en/report/translate/report.qm | Bin 319 -> 0 bytes .../resource/en/report/translate/report.ts | 30 - .../translate/sequence_server_en.mo | Bin 6147 -> 0 bytes .../translate/sequence_server_en.po | 336 - product/common/resource/en/setup/en.qm | Bin 13348 -> 0 bytes .../resource/en/sys_startup/translate/en.qm | Bin 13076 -> 0 bytes .../resource/en/sys_startup/translate/en.ts | 794 - .../zh/apc_if_srv/translate/apc_if_srv_zh.mo | Bin 513 -> 0 bytes .../zh/apc_if_srv/translate/apc_if_srv_zh.po | 59 - .../zh/fbd_editor/temp/evtpushstyletemp.json | 75 - .../resource/zh/fes/translate/fes_zh.mo | Bin 496 -> 0 bytes .../resource/zh/fes/translate/fes_zh.po | 798 - .../resource/zh/gui/icon/alarm/back.png | Bin 85729 -> 0 bytes .../resource/zh/gui/icon/alarm/icon_中.png | Bin 261 -> 0 bytes .../resource/zh/gui/icon/alarm/icon_低.png | Bin 260 -> 0 bytes .../zh/gui/icon/alarm/icon_正常.png | Bin 376 -> 0 bytes .../zh/gui/icon/alarm/icon_紧急.png | Bin 258 -> 0 bytes .../resource/zh/gui/icon/alarm/icon_高.png | Bin 253 -> 0 bytes .../resource/zh/gui/icon/alarm/trend_dark.png | Bin 438 -> 0 bytes .../zh/gui/icon/alarm/trend_light.png | Bin 507 -> 0 bytes .../resource/zh/gui/icon/alarm/video_dark.png | Bin 400 -> 0 bytes .../zh/gui/icon/alarm/video_light.png | Bin 233 -> 0 bytes .../resource/zh/gui/icon/alarm/wave_dark.png | Bin 613 -> 0 bytes .../resource/zh/gui/icon/alarm/wave_light.png | Bin 963 -> 0 bytes .../resource/zh/gui/icon/asset/record.png | Bin 1028 -> 0 bytes .../resource/zh/gui/icon/bi/face_dark.png | Bin 2125 -> 0 bytes .../resource/zh/gui/icon/bi/face_light.png | Bin 2612 -> 0 bytes .../zh/gui/icon/ipc/camera-hovered.svg | 6 - .../resource/zh/gui/icon/ipc/camera.svg | 6 - .../resource/zh/gui/icon/ipc/down-clicked.png | Bin 2635 -> 0 bytes .../resource/zh/gui/icon/ipc/down-hovered.png | Bin 2743 -> 0 bytes .../common/resource/zh/gui/icon/ipc/down.png | Bin 2813 -> 0 bytes .../common/resource/zh/gui/icon/ipc/icon+.png | Bin 227 -> 0 bytes .../common/resource/zh/gui/icon/ipc/icon-.png | Bin 8194 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_Silence.png | Bin 413 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_camer.png | Bin 657 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_down.png | Bin 357 -> 0 bytes .../zh/gui/icon/ipc/icon_down_click.png | Bin 359 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_key.png | Bin 14567 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_left.png | Bin 342 -> 0 bytes .../zh/gui/icon/ipc/icon_left_click.png | Bin 355 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_play.png | Bin 694 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_right.png | Bin 361 -> 0 bytes .../zh/gui/icon/ipc/icon_right_click.png | Bin 379 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_suspend.png | Bin 667 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_up.png | Bin 376 -> 0 bytes .../zh/gui/icon/ipc/icon_up_click.png | Bin 376 -> 0 bytes .../resource/zh/gui/icon/ipc/icon_voice.png | Bin 495 -> 0 bytes .../resource/zh/gui/icon/ipc/left-clicked.png | Bin 2382 -> 0 bytes .../resource/zh/gui/icon/ipc/left-hovered.png | Bin 2377 -> 0 bytes .../common/resource/zh/gui/icon/ipc/left.png | Bin 2409 -> 0 bytes .../common/resource/zh/gui/icon/ipc/pause.png | Bin 2958 -> 0 bytes .../resource/zh/gui/icon/ipc/play-hovered.png | Bin 246 -> 0 bytes .../resource/zh/gui/icon/ipc/play-hovered.svg | 7 - .../common/resource/zh/gui/icon/ipc/play.png | Bin 5454 -> 0 bytes .../zh/gui/icon/ipc/right-clicked.png | Bin 2253 -> 0 bytes .../zh/gui/icon/ipc/right-hovered.png | Bin 2294 -> 0 bytes .../common/resource/zh/gui/icon/ipc/right.png | Bin 2381 -> 0 bytes .../resource/zh/gui/icon/ipc/up-clicked.png | Bin 2699 -> 0 bytes .../resource/zh/gui/icon/ipc/up-hovered.png | Bin 2751 -> 0 bytes .../common/resource/zh/gui/icon/ipc/up.png | Bin 2911 -> 0 bytes .../resource/zh/gui/icon/ipc/vol-hovered.svg | 6 - .../resource/zh/gui/icon/ipc/vol-mute.svg | 1 - .../common/resource/zh/gui/icon/ipc/vol.svg | 6 - .../resource/zh/gui/icon/robot/charge.gif | Bin 23177 -> 0 bytes .../resource/zh/gui/icon/robot/charge.png | Bin 43118 -> 0 bytes .../common/resource/zh/gui/icon/robot/cut.png | Bin 3343 -> 0 bytes .../resource/zh/gui/icon/robot/down_arrow.png | Bin 1040 -> 0 bytes .../resource/zh/gui/icon/robot/free.gif | Bin 26589 -> 0 bytes .../resource/zh/gui/icon/robot/free.png | Bin 42966 -> 0 bytes .../resource/zh/gui/icon/robot/overhaul.gif | Bin 138602 -> 0 bytes .../resource/zh/gui/icon/robot/overhaul.png | Bin 44428 -> 0 bytes .../resource/zh/gui/icon/robot/overlook.gif | Bin 411066 -> 0 bytes .../resource/zh/gui/icon/robot/overlook.png | Bin 44761 -> 0 bytes .../resource/zh/gui/icon/robot/pause.png | Bin 1180 -> 0 bytes .../resource/zh/gui/icon/robot/play.png | Bin 1513 -> 0 bytes .../zh/gui/icon/robot/robotbottom.png | Bin 10223 -> 0 bytes .../resource/zh/gui/icon/robot/search.png | Bin 678 -> 0 bytes .../resource/zh/gui/icon/robot/up_arrow.png | Bin 1081 -> 0 bytes .../resource/zh/gui/icon/robot/voiceClose.png | Bin 2596 -> 0 bytes .../resource/zh/gui/icon/robot/voiceOpen.png | Bin 2683 -> 0 bytes .../resource/zh/gui/translate/plugin_zh.qm | Bin 106546 -> 0 bytes .../resource/zh/gui/translate/plugin_zh.ts | 10265 --------- .../translate/linkage_server_zh.mo | Bin 517 -> 0 bytes .../translate/linkage_server_zh.po | 340 - .../model_studio/setting/table/APC_ANALOG.xml | 12 - .../setting/table/APC_DIGITAL.xml | 10 - .../setting/table/ATS_FES_LOCATION_INFO.xml | 7 - .../setting/table/ATS_FES_PLATFORM_INFO.xml | 8 - .../setting/table/BAS_CRAFT_DEF.xml | 8 - .../setting/table/BAS_MODE_DEF.xml | 11 - .../setting/table/BAS_MODE_TYPE.xml | 7 - .../table/BAS_TIMETABLE_CTRL_PARAM.xml | 15 - .../setting/table/BAS_TIMETABLE_DEF.xml | 9 - .../setting/table/BAS_TIMETABLE_INFO.xml | 10 - .../setting/table/BAS_TIMETABLE_SCHEDULE.xml | 18 - .../setting/table/CALC_FUNC_DEF.xml | 10 - .../setting/table/CALC_GROUP_DEF.xml | 8 - .../setting/table/CALC_IN_PARA.xml | 12 - .../setting/table/CALC_OUT_PARA.xml | 11 - .../setting/table/CALC_PARA_DEF.xml | 8 - .../setting/table/CCTV_CAMERA_INFO.xml | 17 - .../setting/table/CCTV_MONITOR_INFO.xml | 15 - .../setting/table/CCTV_ORIENTATION.xml | 11 - .../setting/table/CCTV_SEPARATOR_INFO.xml | 45 - .../setting/table/DEV_TYPE_DEF.xml | 9 - .../setting/table/DEV_TYPE_DEF_61850.xml | 11 - .../setting/table/DICT_POINT_TYPE.xml | 32 - .../setting/table/DICT_STATE_TEXT_INFO.xml | 11 - .../setting/table/DICT_UNIT_INFO.xml | 8 - .../setting/table/DICT_VOL_LEVEL.xml | 11 - .../setting/table/FAULT_RECALL_COND_DEF.xml | 11 - .../setting/table/LINKAGE_ACTION.xml | 13 - .../setting/table/LINKAGE_ACTION_FOR_BAS.xml | 12 - .../setting/table/LINKAGE_ACTION_FOR_MSG.xml | 12 - .../setting/table/LINKAGE_ACTION_FOR_PA.xml | 19 - .../setting/table/LINKAGE_ACTION_FOR_PIS.xml | 19 - .../table/LINKAGE_ACTION_FOR_PSCADA.xml | 12 - .../table/LINKAGE_ACTION_FOR_PUSH_PIC.xml | 12 - .../setting/table/LINKAGE_DEFINE.xml | 10 - .../setting/table/LINKAGE_FUNCTION.xml | 17 - .../setting/table/LINKAGE_FUNCTION_LIST.xml | 7 - .../setting/table/LINKAGE_SETTING.xml | 14 - .../LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml | 14 - .../setting/table/OPT_CTRL_ACT_DEFINE.xml | 14 - .../setting/table/OPT_HANDOVER_GRP.xml | 17 - .../setting/table/OPT_SHIELD_DEFINE.xml | 14 - .../setting/table/OPT_TOKEN_DEFINE.xml | 18 - .../setting/table/PA_AREA_INFO.xml | 7 - .../setting/table/PA_AUDIO_INFO.xml | 9 - .../setting/table/PA_BROADCAST_GROUP.xml | 9 - .../setting/table/PA_CTRL_PARAM.xml | 7 - .../setting/table/PA_LOCATION_AREA_DEF.xml | 7 - .../setting/table/PA_LOCATION_SEQ_DEF.xml | 7 - .../setting/table/PA_OPERATOR_DEF.xml | 7 - .../setting/table/PA_OPERATOR_MAP.xml | 7 - .../setting/table/PA_TIMED_AUDIO.xml | 20 - .../setting/table/PIS_AREA_INFO.xml | 7 - .../setting/table/PIS_CTRL_PARAM.xml | 7 - .../setting/table/PIS_DISPLAY_INFO.xml | 17 - .../setting/table/PIS_FES_LOCATION_INFO.xml | 7 - .../setting/table/PIS_LOCATION_AREA_DEF.xml | 7 - .../setting/table/PIS_MESSAGE_INFO.xml | 9 - .../setting/table/REGION_INFO.xml | 10 - .../model_studio/setting/table/SAFETY_DAY.xml | 8 - .../setting/table/SEQUENCE_ACTION.xml | 13 - .../setting/table/SEQUENCE_DEFINE.xml | 10 - .../setting/table/SEQUENCE_FUNCTION.xml | 14 - .../setting/table/SEQUENCE_SETTING.xml | 10 - .../setting/table/STAT_INST_DEF.xml | 20 - .../setting/table/STAT_INST_PARA_GRP.xml | 11 - .../setting/table/STAT_INST_PARA_POINT.xml | 14 - .../table/STAT_INST_PARA_POINT_FOR_ADD.xml | 14 - .../setting/table/STAT_INST_PARA_TIME.xml | 22 - .../table/STAT_INST_PARA_TIME_FOR_ADD.xml | 22 - .../setting/table/STAT_INST_RET_GRP.xml | 11 - .../setting/table/STAT_INST_RET_PARA.xml | 17 - .../table/STAT_INST_RET_PARA_FOR_ADD.xml | 16 - .../setting/table/STAT_LINK_DEF.xml | 8 - .../setting/table/STAT_LINK_PARA.xml | 12 - .../setting/table/STAT_LINK_RET.xml | 12 - .../setting/table/STAT_TEMPLATE_DEF.xml | 11 - .../setting/table/STAT_TEMPLATE_PARA.xml | 12 - .../setting/table/STAT_TEMPLATE_RET.xml | 11 - .../setting/table/SWITCH_CFG_INFO.xml | 11 - .../table/TRIGGER_CONDITION_DEFINE.xml | 33 - .../setting/table/TRIGGER_FUNCTION_DEFINE.xml | 9 - .../setting/table/TRIGGER_PERIOD_DEFINE.xml | 11 - .../setting/table/TRIGGER_TIMER_DEFINE.xml | 8 - .../zh/model_studio/setting/tree/calcFunc.xml | 14 - .../model_studio/setting/tree/commonTree.xml | 79 - .../setting/tree/ctrlActDefine.xml | 14 - .../setting/tree/expressionTree.xml | 15 - .../model_studio/setting/tree/sampleTree.xml | 39 - .../setting/tree/statInstInput.xml | 14 - .../setting/tree/statInstOutput.xml | 14 - .../setting/tree/stateTextTree.xml | 14 - .../model_studio/setting/tree/staticsTree.xml | 14 - .../zh/public/dark/icon/arrowBottom.png | Bin 2834 -> 0 bytes .../zh/public/dark/icon/arrowLeft.png | Bin 2832 -> 0 bytes .../zh/public/dark/icon/arrowRight.png | Bin 2830 -> 0 bytes .../resource/zh/public/dark/icon/arrowTop.png | Bin 2823 -> 0 bytes .../zh/public/dark/icon/box-down-normal.png | Bin 2884 -> 0 bytes .../zh/public/dark/icon/box-down-select.png | Bin 2887 -> 0 bytes .../zh/public/dark/icon/box-up-normal.png | Bin 2892 -> 0 bytes .../zh/public/dark/icon/box-up-select.png | Bin 2883 -> 0 bytes .../resource/zh/public/dark/icon/calendar.png | Bin 2112 -> 0 bytes .../resource/zh/public/dark/icon/checked.png | Bin 23082 -> 0 bytes .../zh/public/dark/icon/ckb-disable.png | Bin 2831 -> 0 bytes .../zh/public/dark/icon/ckb-normal.png | Bin 2831 -> 0 bytes .../zh/public/dark/icon/ckb-ptck-disable.png | Bin 2959 -> 0 bytes .../zh/public/dark/icon/ckb-ptck-hover.png | Bin 2954 -> 0 bytes .../resource/zh/public/dark/icon/ckb-ptck.png | Bin 2955 -> 0 bytes .../public/dark/icon/ckb-select-disablel.png | Bin 2949 -> 0 bytes .../zh/public/dark/icon/ckb-select-hover.png | Bin 2934 -> 0 bytes .../zh/public/dark/icon/ckb-select-normal.png | Bin 2938 -> 0 bytes .../zh/public/dark/icon/ckb-uncheck-hover.png | Bin 2831 -> 0 bytes .../resource/zh/public/dark/icon/cut.png | Bin 863 -> 0 bytes .../resource/zh/public/dark/icon/pause.png | Bin 885 -> 0 bytes .../resource/zh/public/dark/icon/play.png | Bin 895 -> 0 bytes .../resource/zh/public/dark/icon/radius.png | Bin 481 -> 0 bytes .../zh/public/dark/icon/rkb-disable.png | Bin 3022 -> 0 bytes .../zh/public/dark/icon/rkb-hover.png | Bin 2979 -> 0 bytes .../zh/public/dark/icon/rkb-normal.png | Bin 3003 -> 0 bytes .../public/dark/icon/rkb-select-disable.png | Bin 3065 -> 0 bytes .../zh/public/dark/icon/rkb-select-normal.png | Bin 3041 -> 0 bytes .../resource/zh/public/dark/icon/search.png | Bin 3261 -> 0 bytes .../zh/public/dark/icon/unchecked.png | Bin 2827 -> 0 bytes .../zh/public/dark/icon/voiceClose.png | Bin 543 -> 0 bytes .../zh/public/dark/icon/voiceOpen.png | Bin 746 -> 0 bytes .../public/light/icon/arrowBottom-normal.png | Bin 2911 -> 0 bytes .../zh/public/light/icon/arrowBottom.png | Bin 2916 -> 0 bytes .../zh/public/light/icon/arrowLeft-normal.png | Bin 2879 -> 0 bytes .../zh/public/light/icon/arrowLeft.png | Bin 2881 -> 0 bytes .../public/light/icon/arrowRight-normal.png | Bin 2870 -> 0 bytes .../zh/public/light/icon/arrowRight.png | Bin 2871 -> 0 bytes .../zh/public/light/icon/arrowTop-normal.png | Bin 2908 -> 0 bytes .../zh/public/light/icon/arrowTop.png | Bin 2913 -> 0 bytes .../zh/public/light/icon/box-down-normal.png | Bin 216 -> 0 bytes .../zh/public/light/icon/box-down-select.png | Bin 2916 -> 0 bytes .../zh/public/light/icon/box-up-normal.png | Bin 2899 -> 0 bytes .../zh/public/light/icon/box-up-select.png | Bin 230 -> 0 bytes .../zh/public/light/icon/calendar.png | Bin 534 -> 0 bytes .../resource/zh/public/light/icon/checked.png | Bin 271 -> 0 bytes .../zh/public/light/icon/ckb-disable.png | Bin 123 -> 0 bytes .../zh/public/light/icon/ckb-normal.png | Bin 1444 -> 0 bytes .../zh/public/light/icon/ckb-ptck-disable.png | Bin 2956 -> 0 bytes .../zh/public/light/icon/ckb-ptck-hover.png | Bin 2958 -> 0 bytes .../zh/public/light/icon/ckb-ptck.png | Bin 372 -> 0 bytes .../public/light/icon/ckb-select-disable.png | Bin 2927 -> 0 bytes .../zh/public/light/icon/ckb-select-hover.png | Bin 271 -> 0 bytes .../public/light/icon/ckb-select-normal.png | Bin 271 -> 0 bytes .../public/light/icon/ckb-uncheck-hover.png | Bin 2827 -> 0 bytes .../resource/zh/public/light/icon/cut.png | Bin 863 -> 0 bytes .../resource/zh/public/light/icon/pause.png | Bin 885 -> 0 bytes .../resource/zh/public/light/icon/play.png | Bin 895 -> 0 bytes .../resource/zh/public/light/icon/radius.png | Bin 481 -> 0 bytes .../zh/public/light/icon/rkb-disable.png | Bin 3026 -> 0 bytes .../zh/public/light/icon/rkb-hover.png | Bin 3037 -> 0 bytes .../zh/public/light/icon/rkb-normal.png | Bin 3026 -> 0 bytes .../public/light/icon/rkb-select-disable.png | Bin 3053 -> 0 bytes .../public/light/icon/rkb-select-normal.png | Bin 3066 -> 0 bytes .../resource/zh/public/light/icon/search.png | Bin 2994 -> 0 bytes .../zh/public/light/icon/unchecked.png | Bin 1444 -> 0 bytes .../zh/public/light/icon/voiceClose.png | Bin 543 -> 0 bytes .../zh/public/light/icon/voiceOpen.png | Bin 746 -> 0 bytes .../resource/zh/report/translate/report.qm | Bin 271 -> 0 bytes .../resource/zh/report/translate/report.ts | 30 - .../translate/sequence_server_zh.mo | Bin 518 -> 0 bytes .../translate/sequence_server_zh.po | 286 - .../resource/zh/setup/icons/db_manager.ico | Bin 4286 -> 0 bytes .../resource/zh/setup/icons/debug_tool.ico | Bin 4286 -> 0 bytes .../resource/zh/setup/icons/fbd_editor.ico | Bin 4286 -> 0 bytes .../resource/zh/setup/icons/fes_sim.ico | Bin 4286 -> 0 bytes .../common/resource/zh/setup/icons/hmi.ico | Bin 4286 -> 0 bytes .../common/resource/zh/setup/icons/studio.ico | Bin 4286 -> 0 bytes .../resource/zh/setup/icons/sys_startup.ico | Bin 4286 -> 0 bytes .../resource/zh/setup/icons/systemConfig.ico | Bin 4286 -> 0 bytes product/common/resource/zh/setup/readme.txt | 2 - product/common/resource/zh/setup/setup.ico | Bin 4286 -> 0 bytes .../resource/zh/setup/安装图标ico.zip | Bin 82218 -> 0 bytes .../resource/zh/sys_startup/CommandWindow.png | Bin 6287 -> 0 bytes .../resource/zh/sys_startup/DatabaseCheck.png | Bin 6729 -> 0 bytes .../resource/zh/sys_startup/DevModeling.png | Bin 6996 -> 0 bytes .../resource/zh/sys_startup/DogCheck.png | Bin 7275 -> 0 bytes .../zh/sys_startup/EngineeringDebug.png | Bin 6641 -> 0 bytes .../zh/sys_startup/EngineeringManagement.png | Bin 6996 -> 0 bytes .../resource/zh/sys_startup/FileSync.png | Bin 6535 -> 0 bytes .../resource/zh/sys_startup/HmiStart.png | Bin 6007 -> 0 bytes .../common/resource/zh/sys_startup/KBD_30.png | Bin 787 -> 0 bytes .../zh/sys_startup/LogicProgramming.png | Bin 6601 -> 0 bytes .../zh/sys_startup/MonitInterface.png | Bin 17931 -> 0 bytes .../resource/zh/sys_startup/NetMonite.png | Bin 20135 -> 0 bytes .../zh/sys_startup/PictureConfiguration.png | Bin 7177 -> 0 bytes .../resource/zh/sys_startup/PreEmulation.png | Bin 7010 -> 0 bytes .../resource/zh/sys_startup/ReportEdit.png | Bin 3953 -> 0 bytes .../resource/zh/sys_startup/SysStart.png | Bin 6438 -> 0 bytes .../zh/sys_startup/SystemModeling.png | Bin 7591 -> 0 bytes .../resource/zh/sys_startup/db_studio.png | Bin 9365 -> 0 bytes .../common/resource/zh/sys_startup/icon.png | Bin 1122 -> 0 bytes .../resource/zh/sys_startup/preset_config.png | Bin 4647 -> 0 bytes .../resource/zh/sys_startup/push_debug.png | Bin 6992 -> 0 bytes .../common/resource/zh/sys_startup/reset.png | Bin 1667 -> 0 bytes .../resource/zh/sys_startup/restart.png | Bin 392 -> 0 bytes .../common/resource/zh/sys_startup/start.png | Bin 23061 -> 0 bytes .../common/resource/zh/sys_startup/stop.png | Bin 23000 -> 0 bytes .../resource/zh/sys_startup/sys_startup.ico | Bin 4286 -> 0 bytes .../resource/zh/sys_startup/upgrade.png | Bin 19796 -> 0 bytes .../common/style/dark/AlarmStatisWidget.qss | 98 - product/common/style/dark/BriefReport.qss | 212 - .../common/style/dark/WebBrowserWidget.qss | 4 - product/common/style/dark/alarm.qss | 115 - product/common/style/dark/alarmShield.qss | 19 - .../common/style/dark/alarm_statistics.qss | 155 - product/common/style/dark/alarmmng.qss | 46 - product/common/style/dark/asset.qss | 14 - product/common/style/dark/breadcrumbNav.qss | 59 - product/common/style/dark/constCurves.qss | 7 - product/common/style/dark/curveColor.cfg | 16 - product/common/style/dark/debug_tool.qss | 130 - product/common/style/dark/devSpePoint.qss | 42 - product/common/style/dark/deviceRealData.qss | 9 - product/common/style/dark/duty_setting.qss | 69 - product/common/style/dark/event.qss | 64 - product/common/style/dark/faultRecord.qss | 8 - product/common/style/dark/hmiRoll.qss | 3 - product/common/style/dark/ipcPlus.qss | 97 - product/common/style/dark/ipcViewer.qss | 125 - product/common/style/dark/linkCtrl.qss | 40 - product/common/style/dark/media.qss | 34 - product/common/style/dark/orderManage.qss | 178 - .../common/style/dark/planCurvesConfigure.qss | 14 - product/common/style/dark/public.qss | 1156 -- product/common/style/dark/relaySetting.qss | 24 - product/common/style/dark/robot.qss | 83 - product/common/style/dark/sequence.qss | 71 - product/common/style/dark/shift.qss | 34 - product/common/style/dark/sys_startup.qss | 66 - product/common/style/dark/trendCurves.qss | 157 - product/common/style/dark/usermng.qss | 57 - product/common/style/dark/workTicket.qss | 22 - .../common/style/light/AlarmStatisWidget.qss | 289 - product/common/style/light/BriefReport.qss | 41 - .../common/style/light/WebBrowserWidget.qss | 4 - product/common/style/light/alarm.qss | 76 - product/common/style/light/alarmShield.qss | 18 - .../common/style/light/alarm_statistics.qss | 27 - product/common/style/light/alarmmng.qss | 85 - product/common/style/light/asset.qss | 6 - product/common/style/light/breadcrumbNav.qss | 59 - .../common/style/light/busbarTemperature.qss | 29 - product/common/style/light/constCurves.qss | 7 - product/common/style/light/curveColor.cfg | 16 - product/common/style/light/debug_tool.qss | 130 - product/common/style/light/devSpePoint.qss | 42 - product/common/style/light/deviceRealData.qss | 12 - product/common/style/light/duty_setting.qss | 47 - product/common/style/light/event.qss | 102 - product/common/style/light/faultRecord.qss | 6 - product/common/style/light/hmiRoll.qss | 3 - product/common/style/light/ipcPlus.qss | 83 - product/common/style/light/ipcViewer.qss | 161 - product/common/style/light/linkCtrl.qss | 25 - product/common/style/light/media.qss | 34 - .../style/light/planCurvesConfigure.qss | 14 - product/common/style/light/public.qss | 1182 -- product/common/style/light/relaySetting.qss | 4 - product/common/style/light/robot.qss | 252 - product/common/style/light/sequence.qss | 12 - product/common/style/light/shift.qss | 36 - product/common/style/light/sys_startup.qss | 66 - product/common/style/light/trendCurves.qss | 168 - product/common/style/light/usermng.qss | 75 - product/common/style/样式模板.qsst | 1178 -- .../common/sysconfig/alarmSpeechTextTrans.xml | 20 - product/common/sysconfig/db_manager_opt.xml | 2 +- .../common/sysconfig/fbd_editor_blockMenu.xml | 12 +- product/common/sysconfig/fbd_server.xml | 28 +- .../sysconfig/file_sync_by_svn_config.xml | 2 +- product/common/sysconfig/file_sync_cfg.xml | 13 - .../sysconfig/intelligentAlarmStatus.xml | 4 - .../common/sysconfig/netbus_channel_cfg.xml | 160 + .../sysconfig/potobuf/AlarmLinkMessage.proto | 25 + .../sysconfig/potobuf/AlarmMessage.proto | 327 + .../sysconfig/potobuf/BioIdentifyMsg.proto | 56 + .../sysconfig/potobuf/DataProcMessage.proto | 149 + .../sysconfig/potobuf/DbSaveMessage.proto | 194 + product/common/sysconfig/potobuf/FBD.proto | 48 + .../sysconfig/potobuf/FesDataMessage.proto | 21 + .../sysconfig/potobuf/FesFwMessage.proto | 160 + .../common/sysconfig/potobuf/FesMessage.proto | 619 + .../sysconfig/potobuf/FileSyncBySvn.proto | 45 + .../common/sysconfig/potobuf/FileSynch.proto | 145 + .../sysconfig/potobuf/HisAmendMessage.proto | 30 + .../sysconfig/potobuf/IntelliAlmMsg.proto | 136 + .../sysconfig/potobuf/LinkageMessage.proto | 252 + .../sysconfig/potobuf/NodeMngMessage.proto | 55 + .../common/sysconfig/potobuf/OpcMessage.proto | 68 + .../sysconfig/potobuf/OptDataMessage.proto | 94 + product/common/sysconfig/potobuf/Public.proto | 61 + .../sysconfig/potobuf/PushMessage.proto | 63 + .../sysconfig/potobuf/RdbServerMessage.proto | 111 + .../sysconfig/potobuf/SequenceMessage.proto | 206 + .../sysconfig/potobuf/TsdbSaveMessage.proto | 70 + .../potobuf/VideoControlMessage.proto | 44 + product/common/sysconfig/proc_param_cfg.xml | 5 + product/common/sysconfig/pub_log_cfg.xml | 9 +- product/common/sysconfig/setup/influxdb.conf | 5 +- .../setup/influxdb_without_auth.conf | 593 + product/common/sysconfig/setup_config.xml | 14 +- product/common/sysconfig/sys_startup.json | 71 +- .../sysconfig/userManagerWidgetTabBar.xml | 10 + product/common/sysconfig/workBench.json | 176 + 507 files changed, 36617 insertions(+), 67447 deletions(-) create mode 100644 product/common/database/initdata/fr/basedata/p_dict.xlsx create mode 100644 product/common/database/initdata/fr/basedata/p_dict_sort.xlsx delete mode 100644 product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.mo delete mode 100644 product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.po delete mode 100644 product/common/resource/en/debug_tool/image/check.png delete mode 100644 product/common/resource/en/debug_tool/image/check1.png delete mode 100644 product/common/resource/en/debug_tool/image/down.png delete mode 100644 product/common/resource/en/debug_tool/image/search.png delete mode 100644 product/common/resource/en/debug_tool/image/uncheck.png delete mode 100644 product/common/resource/en/debug_tool/image/uncheck1.png delete mode 100644 product/common/resource/en/debug_tool/translate/en.qm delete mode 100644 product/common/resource/en/debug_tool/translate/en.ts delete mode 100644 product/common/resource/en/fes/translate/fes_en.mo delete mode 100644 product/common/resource/en/fes/translate/fes_en.po delete mode 100644 product/common/resource/en/gui/translate/icon_en.ts delete mode 100644 product/common/resource/en/gui/translate/plugin_en.qm delete mode 100644 product/common/resource/en/gui/translate/plugin_en.ts delete mode 100644 product/common/resource/en/linkage_server/translate/linkage_server_en.mo delete mode 100644 product/common/resource/en/linkage_server/translate/linkage_server_en.po delete mode 100644 product/common/resource/en/model_studio/setting/table/APC_ANALOG.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/APC_DIGITAL.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/ATS_FES_LOCATION_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/ATS_FES_PLATFORM_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_CRAFT_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_MODE_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_MODE_TYPE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_CTRL_PARAM.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_SCHEDULE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/CALC_FUNC_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/CALC_GROUP_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/CALC_IN_PARA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/CALC_OUT_PARA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/CALC_PARA_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF_61850.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/DICT_POINT_TYPE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/DICT_STATE_TEXT_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/DICT_UNIT_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/DICT_VOL_LEVEL.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/FAULT_RECALL_COND_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_BAS.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_MSG.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PIS.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PSCADA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PUSH_PIC.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION_LIST.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/OPT_CTRL_ACT_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/OPT_HANDOVER_GRP.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/OPT_SHIELD_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/OPT_TOKEN_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_AREA_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_AUDIO_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_BROADCAST_GROUP.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_CTRL_PARAM.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_LOCATION_AREA_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_LOCATION_SEQ_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_OPERATOR_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_OPERATOR_MAP.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PA_TIMED_AUDIO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PIS_AREA_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PIS_CTRL_PARAM.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PIS_DISPLAY_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PIS_FES_LOCATION_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PIS_LOCATION_AREA_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/PIS_MESSAGE_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/REGION_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/SAFETY_DAY.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/SEQUENCE_ACTION.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/SEQUENCE_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/SEQUENCE_FUNCTION.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/SEQUENCE_SETTING.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_GRP.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT_FOR_ADD.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME_FOR_ADD.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_RET_GRP.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA_FOR_ADD.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_LINK_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_LINK_PARA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_LINK_RET.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_DEF.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_PARA.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_RET.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/SWITCH_CFG_INFO.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/TRIGGER_CONDITION_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/TRIGGER_FUNCTION_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/TRIGGER_PERIOD_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/table/TRIGGER_TIMER_DEFINE.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/calcFunc.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/commonTree.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/ctrlActDefine.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/expressionTree.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/sampleTree.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/statInstInput.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/statInstOutput.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/stateTextTree.xml delete mode 100644 product/common/resource/en/model_studio/setting/tree/staticsTree.xml delete mode 100644 product/common/resource/en/report/translate/report.qm delete mode 100644 product/common/resource/en/report/translate/report.ts delete mode 100644 product/common/resource/en/sequence_server/translate/sequence_server_en.mo delete mode 100644 product/common/resource/en/sequence_server/translate/sequence_server_en.po delete mode 100644 product/common/resource/en/setup/en.qm delete mode 100644 product/common/resource/en/sys_startup/translate/en.qm delete mode 100644 product/common/resource/en/sys_startup/translate/en.ts delete mode 100644 product/common/resource/zh/apc_if_srv/translate/apc_if_srv_zh.mo delete mode 100644 product/common/resource/zh/apc_if_srv/translate/apc_if_srv_zh.po delete mode 100644 product/common/resource/zh/fbd_editor/temp/evtpushstyletemp.json delete mode 100644 product/common/resource/zh/fes/translate/fes_zh.mo delete mode 100644 product/common/resource/zh/fes/translate/fes_zh.po delete mode 100644 product/common/resource/zh/gui/icon/alarm/back.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/icon_中.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/icon_低.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/icon_正常.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/icon_紧急.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/icon_高.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/trend_dark.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/trend_light.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/video_dark.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/video_light.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/wave_dark.png delete mode 100644 product/common/resource/zh/gui/icon/alarm/wave_light.png delete mode 100644 product/common/resource/zh/gui/icon/asset/record.png delete mode 100644 product/common/resource/zh/gui/icon/bi/face_dark.png delete mode 100644 product/common/resource/zh/gui/icon/bi/face_light.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/camera-hovered.svg delete mode 100644 product/common/resource/zh/gui/icon/ipc/camera.svg delete mode 100644 product/common/resource/zh/gui/icon/ipc/down-clicked.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/down-hovered.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/down.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon+.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon-.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_Silence.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_camer.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_down.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_down_click.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_key.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_left.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_left_click.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_play.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_right.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_right_click.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_suspend.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_up.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_up_click.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/icon_voice.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/left-clicked.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/left-hovered.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/left.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/pause.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/play-hovered.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/play-hovered.svg delete mode 100644 product/common/resource/zh/gui/icon/ipc/play.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/right-clicked.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/right-hovered.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/right.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/up-clicked.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/up-hovered.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/up.png delete mode 100644 product/common/resource/zh/gui/icon/ipc/vol-hovered.svg delete mode 100644 product/common/resource/zh/gui/icon/ipc/vol-mute.svg delete mode 100644 product/common/resource/zh/gui/icon/ipc/vol.svg delete mode 100644 product/common/resource/zh/gui/icon/robot/charge.gif delete mode 100644 product/common/resource/zh/gui/icon/robot/charge.png delete mode 100644 product/common/resource/zh/gui/icon/robot/cut.png delete mode 100644 product/common/resource/zh/gui/icon/robot/down_arrow.png delete mode 100644 product/common/resource/zh/gui/icon/robot/free.gif delete mode 100644 product/common/resource/zh/gui/icon/robot/free.png delete mode 100644 product/common/resource/zh/gui/icon/robot/overhaul.gif delete mode 100644 product/common/resource/zh/gui/icon/robot/overhaul.png delete mode 100644 product/common/resource/zh/gui/icon/robot/overlook.gif delete mode 100644 product/common/resource/zh/gui/icon/robot/overlook.png delete mode 100644 product/common/resource/zh/gui/icon/robot/pause.png delete mode 100644 product/common/resource/zh/gui/icon/robot/play.png delete mode 100644 product/common/resource/zh/gui/icon/robot/robotbottom.png delete mode 100644 product/common/resource/zh/gui/icon/robot/search.png delete mode 100644 product/common/resource/zh/gui/icon/robot/up_arrow.png delete mode 100644 product/common/resource/zh/gui/icon/robot/voiceClose.png delete mode 100644 product/common/resource/zh/gui/icon/robot/voiceOpen.png delete mode 100644 product/common/resource/zh/gui/translate/plugin_zh.qm delete mode 100644 product/common/resource/zh/gui/translate/plugin_zh.ts delete mode 100644 product/common/resource/zh/linkage_server/translate/linkage_server_zh.mo delete mode 100644 product/common/resource/zh/linkage_server/translate/linkage_server_zh.po delete mode 100644 product/common/resource/zh/model_studio/setting/table/APC_ANALOG.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/APC_DIGITAL.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/ATS_FES_LOCATION_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/ATS_FES_PLATFORM_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_CRAFT_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_MODE_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_MODE_TYPE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_TIMETABLE_CTRL_PARAM.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_TIMETABLE_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_TIMETABLE_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/BAS_TIMETABLE_SCHEDULE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CALC_FUNC_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CALC_GROUP_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CALC_IN_PARA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CALC_OUT_PARA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CALC_PARA_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CCTV_CAMERA_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CCTV_MONITOR_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CCTV_ORIENTATION.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/CCTV_SEPARATOR_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/DEV_TYPE_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/DEV_TYPE_DEF_61850.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/DICT_POINT_TYPE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/DICT_STATE_TEXT_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/DICT_UNIT_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/DICT_VOL_LEVEL.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/FAULT_RECALL_COND_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION_FOR_BAS.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION_FOR_MSG.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION_FOR_PA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION_FOR_PIS.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION_FOR_PSCADA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_ACTION_FOR_PUSH_PIC.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_FUNCTION.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_FUNCTION_LIST.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_SETTING.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/OPT_CTRL_ACT_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/OPT_HANDOVER_GRP.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/OPT_SHIELD_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/OPT_TOKEN_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_AREA_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_AUDIO_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_BROADCAST_GROUP.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_CTRL_PARAM.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_LOCATION_AREA_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_LOCATION_SEQ_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_OPERATOR_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_OPERATOR_MAP.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PA_TIMED_AUDIO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PIS_AREA_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PIS_CTRL_PARAM.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PIS_DISPLAY_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PIS_FES_LOCATION_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PIS_LOCATION_AREA_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/PIS_MESSAGE_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/REGION_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/SAFETY_DAY.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/SEQUENCE_ACTION.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/SEQUENCE_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/SEQUENCE_FUNCTION.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/SEQUENCE_SETTING.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_PARA_GRP.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_PARA_POINT.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_PARA_POINT_FOR_ADD.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_PARA_TIME.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_PARA_TIME_FOR_ADD.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_RET_GRP.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_RET_PARA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_INST_RET_PARA_FOR_ADD.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_LINK_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_LINK_PARA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_LINK_RET.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_TEMPLATE_DEF.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_TEMPLATE_PARA.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/STAT_TEMPLATE_RET.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/SWITCH_CFG_INFO.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/TRIGGER_CONDITION_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/TRIGGER_FUNCTION_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/TRIGGER_PERIOD_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/table/TRIGGER_TIMER_DEFINE.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/calcFunc.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/commonTree.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/ctrlActDefine.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/expressionTree.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/sampleTree.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/statInstInput.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/statInstOutput.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/stateTextTree.xml delete mode 100644 product/common/resource/zh/model_studio/setting/tree/staticsTree.xml delete mode 100644 product/common/resource/zh/public/dark/icon/arrowBottom.png delete mode 100644 product/common/resource/zh/public/dark/icon/arrowLeft.png delete mode 100644 product/common/resource/zh/public/dark/icon/arrowRight.png delete mode 100644 product/common/resource/zh/public/dark/icon/arrowTop.png delete mode 100644 product/common/resource/zh/public/dark/icon/box-down-normal.png delete mode 100644 product/common/resource/zh/public/dark/icon/box-down-select.png delete mode 100644 product/common/resource/zh/public/dark/icon/box-up-normal.png delete mode 100644 product/common/resource/zh/public/dark/icon/box-up-select.png delete mode 100644 product/common/resource/zh/public/dark/icon/calendar.png delete mode 100644 product/common/resource/zh/public/dark/icon/checked.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-disable.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-normal.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-ptck-disable.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-ptck-hover.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-ptck.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-select-disablel.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-select-hover.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-select-normal.png delete mode 100644 product/common/resource/zh/public/dark/icon/ckb-uncheck-hover.png delete mode 100644 product/common/resource/zh/public/dark/icon/cut.png delete mode 100644 product/common/resource/zh/public/dark/icon/pause.png delete mode 100644 product/common/resource/zh/public/dark/icon/play.png delete mode 100644 product/common/resource/zh/public/dark/icon/radius.png delete mode 100644 product/common/resource/zh/public/dark/icon/rkb-disable.png delete mode 100644 product/common/resource/zh/public/dark/icon/rkb-hover.png delete mode 100644 product/common/resource/zh/public/dark/icon/rkb-normal.png delete mode 100644 product/common/resource/zh/public/dark/icon/rkb-select-disable.png delete mode 100644 product/common/resource/zh/public/dark/icon/rkb-select-normal.png delete mode 100644 product/common/resource/zh/public/dark/icon/search.png delete mode 100644 product/common/resource/zh/public/dark/icon/unchecked.png delete mode 100644 product/common/resource/zh/public/dark/icon/voiceClose.png delete mode 100644 product/common/resource/zh/public/dark/icon/voiceOpen.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowBottom-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowBottom.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowLeft-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowLeft.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowRight-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowRight.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowTop-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/arrowTop.png delete mode 100644 product/common/resource/zh/public/light/icon/box-down-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/box-down-select.png delete mode 100644 product/common/resource/zh/public/light/icon/box-up-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/box-up-select.png delete mode 100644 product/common/resource/zh/public/light/icon/calendar.png delete mode 100644 product/common/resource/zh/public/light/icon/checked.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-disable.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-ptck-disable.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-ptck-hover.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-ptck.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-select-disable.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-select-hover.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-select-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/ckb-uncheck-hover.png delete mode 100644 product/common/resource/zh/public/light/icon/cut.png delete mode 100644 product/common/resource/zh/public/light/icon/pause.png delete mode 100644 product/common/resource/zh/public/light/icon/play.png delete mode 100644 product/common/resource/zh/public/light/icon/radius.png delete mode 100644 product/common/resource/zh/public/light/icon/rkb-disable.png delete mode 100644 product/common/resource/zh/public/light/icon/rkb-hover.png delete mode 100644 product/common/resource/zh/public/light/icon/rkb-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/rkb-select-disable.png delete mode 100644 product/common/resource/zh/public/light/icon/rkb-select-normal.png delete mode 100644 product/common/resource/zh/public/light/icon/search.png delete mode 100644 product/common/resource/zh/public/light/icon/unchecked.png delete mode 100644 product/common/resource/zh/public/light/icon/voiceClose.png delete mode 100644 product/common/resource/zh/public/light/icon/voiceOpen.png delete mode 100644 product/common/resource/zh/report/translate/report.qm delete mode 100644 product/common/resource/zh/report/translate/report.ts delete mode 100644 product/common/resource/zh/sequence_server/translate/sequence_server_zh.mo delete mode 100644 product/common/resource/zh/sequence_server/translate/sequence_server_zh.po delete mode 100644 product/common/resource/zh/setup/icons/db_manager.ico delete mode 100644 product/common/resource/zh/setup/icons/debug_tool.ico delete mode 100644 product/common/resource/zh/setup/icons/fbd_editor.ico delete mode 100644 product/common/resource/zh/setup/icons/fes_sim.ico delete mode 100644 product/common/resource/zh/setup/icons/hmi.ico delete mode 100644 product/common/resource/zh/setup/icons/studio.ico delete mode 100644 product/common/resource/zh/setup/icons/sys_startup.ico delete mode 100644 product/common/resource/zh/setup/icons/systemConfig.ico delete mode 100644 product/common/resource/zh/setup/readme.txt delete mode 100644 product/common/resource/zh/setup/setup.ico delete mode 100644 product/common/resource/zh/setup/安装图标ico.zip delete mode 100644 product/common/resource/zh/sys_startup/CommandWindow.png delete mode 100644 product/common/resource/zh/sys_startup/DatabaseCheck.png delete mode 100644 product/common/resource/zh/sys_startup/DevModeling.png delete mode 100644 product/common/resource/zh/sys_startup/DogCheck.png delete mode 100644 product/common/resource/zh/sys_startup/EngineeringDebug.png delete mode 100644 product/common/resource/zh/sys_startup/EngineeringManagement.png delete mode 100644 product/common/resource/zh/sys_startup/FileSync.png delete mode 100644 product/common/resource/zh/sys_startup/HmiStart.png delete mode 100644 product/common/resource/zh/sys_startup/KBD_30.png delete mode 100644 product/common/resource/zh/sys_startup/LogicProgramming.png delete mode 100644 product/common/resource/zh/sys_startup/MonitInterface.png delete mode 100644 product/common/resource/zh/sys_startup/NetMonite.png delete mode 100644 product/common/resource/zh/sys_startup/PictureConfiguration.png delete mode 100644 product/common/resource/zh/sys_startup/PreEmulation.png delete mode 100644 product/common/resource/zh/sys_startup/ReportEdit.png delete mode 100644 product/common/resource/zh/sys_startup/SysStart.png delete mode 100644 product/common/resource/zh/sys_startup/SystemModeling.png delete mode 100644 product/common/resource/zh/sys_startup/db_studio.png delete mode 100644 product/common/resource/zh/sys_startup/icon.png delete mode 100644 product/common/resource/zh/sys_startup/preset_config.png delete mode 100644 product/common/resource/zh/sys_startup/push_debug.png delete mode 100644 product/common/resource/zh/sys_startup/reset.png delete mode 100644 product/common/resource/zh/sys_startup/restart.png delete mode 100644 product/common/resource/zh/sys_startup/start.png delete mode 100644 product/common/resource/zh/sys_startup/stop.png delete mode 100644 product/common/resource/zh/sys_startup/sys_startup.ico delete mode 100644 product/common/resource/zh/sys_startup/upgrade.png delete mode 100644 product/common/style/dark/AlarmStatisWidget.qss delete mode 100644 product/common/style/dark/BriefReport.qss delete mode 100644 product/common/style/dark/WebBrowserWidget.qss delete mode 100644 product/common/style/dark/alarm.qss delete mode 100644 product/common/style/dark/alarmShield.qss delete mode 100644 product/common/style/dark/alarm_statistics.qss delete mode 100644 product/common/style/dark/alarmmng.qss delete mode 100644 product/common/style/dark/asset.qss delete mode 100644 product/common/style/dark/breadcrumbNav.qss delete mode 100644 product/common/style/dark/constCurves.qss delete mode 100644 product/common/style/dark/curveColor.cfg delete mode 100644 product/common/style/dark/debug_tool.qss delete mode 100644 product/common/style/dark/devSpePoint.qss delete mode 100644 product/common/style/dark/deviceRealData.qss delete mode 100644 product/common/style/dark/duty_setting.qss delete mode 100644 product/common/style/dark/event.qss delete mode 100644 product/common/style/dark/faultRecord.qss delete mode 100644 product/common/style/dark/hmiRoll.qss delete mode 100644 product/common/style/dark/ipcPlus.qss delete mode 100644 product/common/style/dark/ipcViewer.qss delete mode 100644 product/common/style/dark/linkCtrl.qss delete mode 100644 product/common/style/dark/media.qss delete mode 100644 product/common/style/dark/orderManage.qss delete mode 100644 product/common/style/dark/planCurvesConfigure.qss delete mode 100644 product/common/style/dark/public.qss delete mode 100644 product/common/style/dark/relaySetting.qss delete mode 100644 product/common/style/dark/robot.qss delete mode 100644 product/common/style/dark/sequence.qss delete mode 100644 product/common/style/dark/shift.qss delete mode 100644 product/common/style/dark/sys_startup.qss delete mode 100644 product/common/style/dark/trendCurves.qss delete mode 100644 product/common/style/dark/usermng.qss delete mode 100644 product/common/style/dark/workTicket.qss delete mode 100644 product/common/style/light/AlarmStatisWidget.qss delete mode 100644 product/common/style/light/BriefReport.qss delete mode 100644 product/common/style/light/WebBrowserWidget.qss delete mode 100644 product/common/style/light/alarm.qss delete mode 100644 product/common/style/light/alarmShield.qss delete mode 100644 product/common/style/light/alarm_statistics.qss delete mode 100644 product/common/style/light/alarmmng.qss delete mode 100644 product/common/style/light/asset.qss delete mode 100644 product/common/style/light/breadcrumbNav.qss delete mode 100644 product/common/style/light/busbarTemperature.qss delete mode 100644 product/common/style/light/constCurves.qss delete mode 100644 product/common/style/light/curveColor.cfg delete mode 100644 product/common/style/light/debug_tool.qss delete mode 100644 product/common/style/light/devSpePoint.qss delete mode 100644 product/common/style/light/deviceRealData.qss delete mode 100644 product/common/style/light/duty_setting.qss delete mode 100644 product/common/style/light/event.qss delete mode 100644 product/common/style/light/faultRecord.qss delete mode 100644 product/common/style/light/hmiRoll.qss delete mode 100644 product/common/style/light/ipcPlus.qss delete mode 100644 product/common/style/light/ipcViewer.qss delete mode 100644 product/common/style/light/linkCtrl.qss delete mode 100644 product/common/style/light/media.qss delete mode 100644 product/common/style/light/planCurvesConfigure.qss delete mode 100644 product/common/style/light/public.qss delete mode 100644 product/common/style/light/relaySetting.qss delete mode 100644 product/common/style/light/robot.qss delete mode 100644 product/common/style/light/sequence.qss delete mode 100644 product/common/style/light/shift.qss delete mode 100644 product/common/style/light/sys_startup.qss delete mode 100644 product/common/style/light/trendCurves.qss delete mode 100644 product/common/style/light/usermng.qss delete mode 100644 product/common/style/样式模板.qsst delete mode 100644 product/common/sysconfig/alarmSpeechTextTrans.xml delete mode 100644 product/common/sysconfig/file_sync_cfg.xml delete mode 100644 product/common/sysconfig/intelligentAlarmStatus.xml create mode 100644 product/common/sysconfig/netbus_channel_cfg.xml create mode 100644 product/common/sysconfig/potobuf/AlarmLinkMessage.proto create mode 100644 product/common/sysconfig/potobuf/AlarmMessage.proto create mode 100644 product/common/sysconfig/potobuf/BioIdentifyMsg.proto create mode 100644 product/common/sysconfig/potobuf/DataProcMessage.proto create mode 100644 product/common/sysconfig/potobuf/DbSaveMessage.proto create mode 100644 product/common/sysconfig/potobuf/FBD.proto create mode 100644 product/common/sysconfig/potobuf/FesDataMessage.proto create mode 100644 product/common/sysconfig/potobuf/FesFwMessage.proto create mode 100644 product/common/sysconfig/potobuf/FesMessage.proto create mode 100644 product/common/sysconfig/potobuf/FileSyncBySvn.proto create mode 100644 product/common/sysconfig/potobuf/FileSynch.proto create mode 100644 product/common/sysconfig/potobuf/HisAmendMessage.proto create mode 100644 product/common/sysconfig/potobuf/IntelliAlmMsg.proto create mode 100644 product/common/sysconfig/potobuf/LinkageMessage.proto create mode 100644 product/common/sysconfig/potobuf/NodeMngMessage.proto create mode 100644 product/common/sysconfig/potobuf/OpcMessage.proto create mode 100644 product/common/sysconfig/potobuf/OptDataMessage.proto create mode 100644 product/common/sysconfig/potobuf/Public.proto create mode 100644 product/common/sysconfig/potobuf/PushMessage.proto create mode 100644 product/common/sysconfig/potobuf/RdbServerMessage.proto create mode 100644 product/common/sysconfig/potobuf/SequenceMessage.proto create mode 100644 product/common/sysconfig/potobuf/TsdbSaveMessage.proto create mode 100644 product/common/sysconfig/potobuf/VideoControlMessage.proto create mode 100644 product/common/sysconfig/setup/influxdb_without_auth.conf create mode 100644 product/common/sysconfig/userManagerWidgetTabBar.xml create mode 100644 product/common/sysconfig/workBench.json diff --git a/product/common/database/initdata/en/basedata/p_dict.xlsx b/product/common/database/initdata/en/basedata/p_dict.xlsx index c50c498f787b2aa90f41ac36750138c91b166f6d..c1d7379c8b1c7245b67c7bae6151dcf240e48197 100644 GIT binary patch literal 20703 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
    Sf;_w+@rDR_Wsh;Wj5V&yDVWhFsg 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 MUoc%CPyg5d1Dp7VM*si- diff --git a/product/common/database/initdata/fr/basedata/p_dict.xlsx b/product/common/database/initdata/fr/basedata/p_dict.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c1d7379c8b1c7245b67c7bae6151dcf240e48197 GIT binary patch literal 20703 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
      Sf;_w+@rDR_Wsh;Wj5V&yDVWhFsg z>BqnZu@?s?3EMAYA+*=SXRo>bteI-|qI=&Jr3A}^VL>F(yn)9~#rL=NudI8@%+%h6 zrbTE9XMn#>V>M^*ZXi(zM_0EG#jEJxalZ9Y;=W64-PdVaSbDi0v)Z%K7>=gZYVCNX zYvvy}>(LQN)nCIYE%{c_IN>5JS^r!mC0GIvamS!esp*mQ@Q;CAsy0G!gTiqYcjh}z zK@vQ?tCt~|iAi5;zjicJr_e4t`c~fFBr+e+PyjpeUC)YE&D9-yfHTIKikVeFJyKmk z|Gwt62|RjE>)h+xIhdW(NMmN1rPVv4b{r`)k1VB1@=B0!yAYN|h(KX}9OD_%v^Oj| z2O)v_Yn1Mw78_9UDRq?8#@uJ#WYl#dItD`=sM;KUDXHR7qxVs0Ng0o21srmR*>G<{;H60%Zaw56=mn~U%`J3f3JKTAg%79{N`~&O ze&z1-oTkbq4V!uTQ>-Nrf~v%8nmGh$MU%5Cra4~AR`ZuW4Xgz!@?>5$OUhRK-}m46 zeBG`UDv(s^@zie}BGQXgr$;wEUZw8}x%RnUD-xHJENnEN)l=*F<-4hd4aK+}GMXWj z^)+K!4Nhk#??NgFGTe_SR#BO=^>f=N?}91-t8w6GHrV-m34E^c2P9N8t~WBJ#?xy?o|t zC4REQo$L&Jt0#-;aBbgRyH{((4a~dl5yLoA&PiLG4I(Od&VGAPQZ9LyS^E;Z5)Mz` zZOIu}eU*-j8e!uXtLIZ%Oe+))kxoP0i;zRagpZn%Sdvl@@YWw}d*xyDOa7*k-f!en z=jgXD37h2}t#`+ZIK4w`#x-wo-}tzg`2l40p40?huW-Y|6bP~ zkAB$`Y0PnRIc5Nb=mYv){jCB!DzpB`411)mw7Ly@U$jfepgvvH#p+!>GI=YZ=7srL17Smn?il8c?}aPB-T)S-YKjuMG7w~=n^wLa~#9l{W>fuRZrCW!#?>zsPC?%|G*LBLK&$g%t_<) z;vDRz`FS%SS#=kl7~48kAF`KAzZ59{q7^+-PxS?{;jZR-Y1lbN?HTi1+iW-A~AWpJgxq{{Q6a;_vfG+Vks<;>rGFu8LpIF!EDQu-EOF%`E6E zB}Ya=$ii>RPARwEA*SaC&oD7-lfWy1iS{409F^qY&l;lxhmpzX74s7VR?#6Nr^jMX z!)JzUP_hl5z>)st?mm4F3@i(em$8JL-*l}GAn%*|f0jfxe=k(%&{LkIBI@87>=iV_ zv9Eb^qq=Bm21Di@!EsjRj&;%xJ$)3iM4^KKEK(U>i zRQUK(BoNu4%j@dx!P_zVG0ZfgjQO$qRo_%$by&`T3BE$)7p9W6zi2!@L$*0To4JLK zC43cNYBjSJMXifK!2T7;wqn-Dy3e=n3uz}JwX;UWuGxkE{Q3NmDIm~FKX@zn4hj%#MWle29Tcp$+h~e+HVCN|QWaeRg zMsE-)Yp2XA#QwZAM;qWIUMVcac!Cg_Wm(Zn$B4M4$+-^9{|={Y3F6Q}FYmXm*#v2^ z2Bedu#%`k>rnQVB*~E{;wQ?@D!*CKu8W#_kZU=SWbLxWPq$q-4qXfz&DAG#2WSFfB z^jDUqppS?5XZc8RBZmS%Lg)80`{&0Ub{+awZ||am;!z15`bL%q>WMCs3x;#9_{-xx-dmrqbw-a|K3J< zpSv|>5MJ7|9GL#SV)61xWadX@H{DMJ4?bYtr z&+~9GE8Y?L2cf~d`G$)D6LwojZ}rT*Y}4w{zlXhpS^RBmug<)EPOw=mrioW78TR7} ziJFWbMQB6&HN?c^jhb4vbId-Z#*|zZTkYueJL9ZhSEyS3OsZYkp%g2@XzZJf=P>#2 zqhr{OmdO`^8NBQ4c9;z@v++7-m9bG&JgK-tT;?ls!M+N$Xkqoo4N|(uvG0;rIA?1q z*xl0xhdhfH8ux7?kQZ3i>pRUL8c{`oN19CxIrHuf%F|=>)JL12e30k|M)%hjZ(EBg zn~g!D<1-b!fwSZhGy$z&Q&RV?){Dvim*IW&MU7p6S$BYCtbZ8(zqg%{G5_Is%*zRX zhete)OaL*c-F?TIw5*h?;7Qzh?(u=2B}edxdUvWsQv7hMhuB#xY_1WLOaqV2ah&l` zp45|UiA>L6qE9g$b$>ga*uU9Z?R9o}i?kS?&!;~dZP-;TRRx_Ggq#z^U(P(+cc z#&|tM|9YF;n^7?C!3&nO!bh|CbfeZ}yNz9vGNaJ6IUP|IdoU7ZVdl2jD^!cwv9O361gRSrFD zw1J*Zj6iP(^hJE0E=yRUx6!Q+tNX1Fcl*oG%XAy>+jV^r=;6Ko(Zy|lgsUlLMf!Y z_4a7qhpZ8LUVcw5>T?MOls!QoE@z;(6QWP|+vHE{tgYT4XOAb1>tmnCr$!r}r(JS= zuUnn7O`FGc8|eD-=6-q0gG(#vW^2p+%~d+|?r7fTiEoxD)z~>)ma|dPG*y_=GWD{z zW>Dlqjp!d<{XIAQ{E;6QS@EB6bcH=u*jqfh59xkr# z^--W}U^&s|u481>7CK~~Wh${7%f_LW3xykSk?$2#_M;xm!*{cE{L!@@U;P1Lv734! z?7(Fin=1WfusU9aFxqUlDBY89&93OVRXDkE2sVJu080EWt(=v;=Zdkf%uw!c3U3(a zwrLJd1KP@O$#Ob+CH-xyTNGqwOR!l+uvyk~JFdN-p0*L8I<+!(WRe9ZXr9!_ttsBA z>b6A;e3^K!b6?!pW%e}rQ+dBEyvw9`2#SVZC76viN0C(PxYX=$N`Ud%y}i$3d{DKX zS(EuDdn)_!H9e#!j#vpF?qa-on>0Ei{b=3-E( z|G?l>mueg&X-Xi~(__|?pz7Lj$MjW!${AK!`{z@KeJ;t<-TJQAuU=lRUY;9kI4Xja zt;|)kA1qoSdwQ3fr@LLMH}EgGX41|NlN`rV%F9Hflo2j7=d`p3`Fcsr(j!UNg%19hq>p zpi&_XhC6!m8MmsL%0K%hfA)9sQ))+mApQ%~&Q#9tm&`u{-OoVtexJQAYu;;l=`r<^S{|)KN;*y6L zv~}nJqeE4%>86&o6P#}x#`$YVyE(CRNw0JX;4wTK2>3%74oy48xkdrstNEr0?LWJR zQ@d6dN=^2BNGsCScV09NpP%}1=?v3d+)D^nI~g8!a$PrVF>TwWi^K2Wd1due*Dg%X zMUJy=68O$4%uP84N91~2(>0`;pqA^uw}K>&tp^0W0M=Yh6lK+7MC=`UP0Y3 zL6k-R{q&s0#w58`Be{0$9sA^WI7OP>%GZL@KLo#@hK>`7+MKELxOs59k?7*GZVtm1 z#?2Oiu;>~lPyo@Ba~>O$^jeMd+OhZS-!n07PX`Q3mQGs~3J5=Obd}(y*SayzH#N^S zMbd^Pi-O@8XlnMpd+VF4Weq31-<3^$hCMwXw>)X|!%tv1ru;5-uXgQ;)HOBf0@n}A zTUITJRxQnQp6A@|U!yP!6DGG#8E8}vK&gfb=I0{I{UXbHUM-OmQ!n9 z!LuqHU76$m6(zC4Z3UK~EU#%jbH@)1=q;{x%e{Us)CFg9FI*oGP*u`i$HL=qjnW0P zYI98!wUxk53bx6OT^qT3?JM)A7%_E6>>e3AKN9|2eYszKS+BGuQa)^ZWf$i7MQyWy z8l})qo@HlqwI&lYY36=kc;y>d3;ux3cmSYxbf)RyQ)M~g!XIQ%9s1~TASS;0mD|M9xs^k8w!@~U$#|| zv1MM(H~qP%)0{lBxSIcxUp;VyQjv64Nk*S}<9j-|ymjbZQac~?=$xCnmS8Uei?5>h z$1Lo=hs<|(LI0qUk>u&h;%0sa%(t1L;M>4kL@x)^urOvcIff>O&rhN7BI$gI5KfRv=Nw z$&c*xwR!NY;wP>f9OMwc3nMU0;AK| za5$Cd?O!dk4ojHab>#+K9(ZbPy@Oik;tN5MRIpu{);*)Im&CQwm@y%`1n>|rhAs2^}N6bl>W3ib-_AMkC+Qc z%eL(GkQn;1)6dlDZ&^W=YaRzm4)w2;FoFkQ>(VCc?Ro}D+4LBmQ7@>ns5?Psb7O=B zn=WSC)W-Ka$8l;|k_F2J)^PAi|FDmn)6)QZal0!&j7EGKFS8L$0TQar0_*v-4@euj zId#Xn{vyj-54~+F??`T+(D&4$zWb5m_%XTin!J3;=LS#Y>Iv3%x`kBjSV8g2F^hq_ zvi%Y?x)MrW{^S$!q~OAa2yp+D1v*?ph)`)`SAdaBg^AL5!6)$|+k+6!0IPvi>oQGt zH(V;ACE4u-Uq8HU6LuRrHp~(jST*J1ASnE<`I;>I!0U4u+XUDZR|H=pc$fwfPM9*M z#i+?nyD3(cxrhw*qp-ssA(+=DFnoHjD}=Bx$Msn~HT1L)+XHq1hM>~*rat+^lta`7B zMJ*P}&*5#EaoR2uVakkx$Zd49;B2|gFUe}vm!zFKhh@q zceSei`Xhv_GeBYMh2Xbuq8cE!;;yM0uf^Y$_KzHeEptHIB_4cPPaz`k=96lC`Gz?@ z{b_FZqX5>6nYlrnNg<>BEOdsM{U2#faJ~&@q0hbqWb z{nP-^faSM0s;(v5Pr;%~Cr3zI#TL;cAwk6w(gsugJ(RQ$h-+Xs!h3PMXy}n5*GO(Fp-DP{zV-*{)-j^=-n;h zuAeS|-uy+KOlbZiJDnAs{dh|V^1mwPOI1ybgAsnX_^(f}qmpbeUJ+bk>FOD>#nPcL zHh7E6Cp{!fk8L_?hcE7sIkKZ;8NS?y#Y?Gyh*p?$?@69qI~&PUN{XvKsKQ`&F3I12 z%CJ@I+mOU+Uid3%viZW34laVHEtdI9N%P*s0s-NUW;x*xrpY_)K$Hx_9aA7(%!piTe)DNwbrM?qQE%wMQvB(nP z*)n%LXK(q^RMmvTQi@he{gLc5VF=pSBIVic;B{weW3fA44L9;i>9zG~B>KaNxZS`+ zVck1vh9WGdAmnO|4tbI6zIiQIEYM%hu!-pTwCk4v4*O8%x=t7oC+2cvWgKQ3IJ7~l zyj0(tLPq9Jv0ZN%%V@Ef4ZoaSH*7;?8Aw$oU7}5xI_|)WwZWyv)D)l`jzp7!)Yaup zvUDm;`uVI$iUawqI+IPf>g=t&LzlQ1JtRQUKTvVuw8w=j^IKwPekL-TNcl}~Mkdm3 zWyLG$QmTX%D%_dJ)4h5scV~$>jToD0(=u1VeZLIT@Ss#h3+^0v-kiF-=;Sd{xqfL6 z(o^{nQhr@zIIv82P`;vtTn@ZKP90**%)~Q1_5vz=)O$PGpP^9tp{6h~2s64S;T`OY}i4Y`RdottO;8B^zHie*2o)p&XVz!$_;IsV}kZPiDtuPXCImh zt%9)~gV$=>`otT_N-D>5U-Bs}#ZGh}*f#vu|AvvzLn5t65|$1}$9UM_O069CBPLU% zfodB?#Lm5220!jy5pxJOSI8QEd!KS6Gg(x^Pl4Z4euDN|EeP^x-_cfcCcEFE^uM#q zUokFSG*(l0PleqUTR9jW$@nqR;Y|;DQuK!^>ag-@e&y9oOjLd$g6AYDk0#ez zJV7gnzCDPZg(Tx=%{+t2rzK>mRTRE_^pyk-e7*NYUEi<=zpZVx_t`g=DoZH8W)R`D zlavR+@wIk*j^(hB`2jEYqb}ICa>=?RA=Wb_OhIxXR;3?C9%S@cHbE7r>j5U7Q+`JoE>8^J?;sFY4sTt)1!A(Q6we{VArGX)c=I2=jT^r4`ww&k1N(U!3iJQC4GY zElwcmReTC|(WEEJcjl0e;pn#|^RE8{M(gpT{b2G3TP@KLj^%^!(g_QiVD6;51d6u= z(Nia@+L+V&Ti1rgyu(W@w$JVhu>89E%(9WnCB!s!#3qF=TU9?`xMoYKB{sfMp&=2p zN3B6K%bgsTK$(^>&t&+ByM;^_n_jKF29q**(Cen9zY#XKOfR-VKjeTw)CrU?gTsd( z(n-!6La;3MA4=^LR_qf1NVs4P*{nPLt5aETO2na!YjV(}l0``_d};32OvW8IJjwXt z;$&{);)@udMVjQeB+MPti=EJ?_n<0=@~7ddEffAZThI7QX2%6RWKYR|Ux{Y~Zv)o> zpmNDJwqpDp(D0Lk&Xp{7bK&=&wVs$xJQLNtPWd@M1lTHA&~9@luOw0KB>(6@-}iF? zCM}5GZ%HfoHLdF66Mrlcj=_E(Q(2D^mMLH#7`slZUB5}Gl;1=5EJ~U;De@6T{NtYo zwaAN;*jy>4d}INmd?c)x3ANr1G!TSP*`G+6$H$UtS%MU>x*ItB$t~G?t0~Lt&9{WP zmmslMpw8C9hdWcr6il1S#6C);&BKE>H$#2u@Ht$N7#^szvoQXeAM5uAlXa>`7##Jb z8;p#Cwjg$83zIx}v%ESI`!kDeKU%fKrQV3d+K+JHKEs@-ggH`>7#T>xgL+x)ui0q8 zEGN5d8WTRYR1tF=Hdox)#m6<~yop!co#_XON|Y0Q;s#qy`_6CT6Xs|^Vss#dEb1j+ z0aCfJVtr_n*)1*<24`Eh7Of<2QcDU&Ps%NfW;f`2)XCijtw(b*r_qu#+Ou2w$`fJqSAzLaX=T9q2pD6ZsRUtI*PrOP_jED<+Jc!DWFLn1!4oXnAV9bYS&esvr8TAl-Zn?WK z$pwJ!h2kC;O=O0A9#v^Y)&8ytgl4$OvAmzSSQYt;u_{f40NTrtU!x{Hs@C7Nj?j!X z`Rd7XX+wGWRbPr;qhH2ZSBEwTQm5=+ugsFky0e%a1+0V1`^x#a@)I21C9lR44Qb|z z1cQo%@E$bpCj*KHghgsMdJLBtpefI33bzc18-pNy%KrV&@;9)7ezYd}wVzIov{$MJ zRilq9*|elfs}okL6T<1xz2QG+_j$(FXsztEk@A=JPOdjHO(p?-nx>a|bL~|?mRQ|S zN(p6EVm+zlf98VKx&$qIP`f>dAezv1)fS-5Nsc`H%Hai=JN22D17(Z(eE7xu*JSLr z>z%vb2Bhbt*U^|)9Ho>2+b4R`%qkKHae9 z;~Pk`8T7Bh2I%GOeNk5RGNb;Ss}WBDzBSD0NSF%(i3Ni~w$T=D0n@5#%S2MMuJ^pQ zX)O3!vPI1)*uPWkU0YT{k`OySImG7<5`+?43wTn1N2^DTqz`)%D0&k*&k>$21F7Po zL;bbR^w*n7;qNhw9^v>E@WXAD(m81gIX6#i{TkurC98^~?&wlF;8=c$#GHTqg-ieu zSMh(Rf{8^?C%59r#aQAQB+=b{f8lrT`3%ac_{*u3k+In3wgEjvecbTO-=n*Z@A|Dg zPPcdo2%@3l|4BtBTS~8Y;+4LjsW9y$A`XvEmpcU*#VBVcVXhn`Rsmuer$$=c{dV+g zX+!I1TXynh6>f#=GZR<3vIh^%H=eGbG~;7I(xGAo{p!SDW9g(Z6M?@@tfZM25)2k_ zc`f5^j{Z8fsopJ7?)ukq6A0p_;_t4a^GoWeaboP}&oh&G-(6j-Ubl`<)Dc?kp!Rmq z(H!;d;_er9^+Du~)xp`Fd;snK^gd#)3nbPJVp*iV|BJd)(Ls?_g0pKyDYijIz}^S~ z!!v^Gyy7ohz*KWdcJY?Cbsv8OC(mJR2pKU^N-%FH7;NL#+QvNrUX|==DFlMVPrSWW z{(@G!lLou0E_QLyBgfw+=2u_GO-lzOd1~Rn`;xk@0+1_5ixbDeh7l9wTT)dC; zSwwxaUt9$3n=W(Fl)%$J#>dP4b$*0A06N0FvZn5#vz1i6s~ryv;{{lGHrNlWp1)-H+DL?#d|TY;4_QMpan=iz<4o!W)~NMvHb(dUI(PA>=adL z5d=mI0vF%6?)H%bxzoQbg^QcT^?9=C-j5_vEhJ*)MAZqFPxyWvuzUL!#jt@5Rvvaq z6em#)96@n9`KDX7k~1?Zkos-$6b?-)@uATN`Q%5m5b!jn0tTjnnolFL@B<*LcKcDP zTcUevkmT@oGN@C2$JM#5#ze|(#X3gd<)&hRDLh+qW%jD zy!^HXkboU)MUXC)fG(8~qH`HtE}J?o2j%2~kq_sHwhe4WfPybVkZD(oQP(}izX~vF z0R@#8^*awQ21&(sPR z;{GP&)XUyF`JsNaIW@jPS)JmR)jpG#WBc4PmfIp8j2I8b6y8d1peJhJcTm>oNAq08 z%CHx*?LS3J22ZmnV6Z5V`pe$0eAzjA*3TOAM8Kb=pL%|58_R2v4n|A|V@d(yu9>1q zPWer5pY%5p-1bj(2_zIsBQuF3G6jTE_4n4?o*I5KZXzu3yGqJio<4hD1fEt_z))7O z%H-uEuQ6Hrs5Knyfppxv`v8m)x?hAL)9x0d?iS}w?Y9-o=MvZsJRBrc;05jI{M^X;TLs)jyk`SsEqAM zd!Q?&SpoaXvtgqf=$6pVQK>~wF`#@~>d z#$NJ`kZj(RZQNWm>@~ew$Z7xb8X1mDl%rQhC>Tflon0Ne~w+kKF3TJ`SeNe7miMX^*j zn^-5i!DFdS)$1R=k9q&Y8DcR6Lp1>7**8~iyMNH5fF`PKH!6orUVOLQD?f{qXWek+ z_`o*Zpsd%%9OSYAFeA?@J`;qkYDrUwNb~I33B&HcYt02D;kL%sgP_hvq!wzi7;14N zuv|fWe-{&lC|2bNLH^eEGs4syYH|BtFz#RQNVSm)e6QcO`!pktRt&*c4Zv4r{a1A# zN#B0`XKx@Co)9w1TJiN1OPjNao3hu_y%e(7J*jZ2?QG3ImP;yffmfjQxwQkodJkwBvG4@33)dQC+c0K z{Mx*A%30X?mBH?5+KNb3p@7pHt#6$q?_cAuSyI#Qo(kJg;XJ;R3TX= z_w4M7`mmH{>46@K%|_2V`TeH#wu?N^Qk1D|l&Q`tz=F;IKgg1?QKN$d#(+!|1EB4&s9*cZ%wQkT!MC!1Xhn8M2y>Is`xl(fH6a~eWr{mHNzndf8U>O)3QQp}t~%#`DP8Pi^dD5;Z} zz|08b0P%FwyJp!7gg;)w)pC+{<6^dGDxyS7F2m4=B)r?l(( zV?6hrUyh!f&;FM==6z6q`IVPv9!}T3l^vmy%EXa&OmP@BZn% zjv6WfR~22;Y368}i|CP<+SDo~J%FzIFEx}JZ(RIP=2{`mX)8jRY1;32*`I|}j5@Zq zH|DRWc=++8 zwg(qgOIvZH;Efp?0UrMgRH7L5!wJabIgY zE`{y+9&kD&JQt)ps5T{g(89B>y~UnXD#&s~VISP*-->-c;BC}|;+q+Tp` zy~}&+g35DF`qxh_3=1&~i#4KvOdBUIM#docxoE%F<>8!kD)QG<>pGWx7W{<>{Dq-l zboaKYSNsahe}s9P-Z)D}&BWMryNI&s9cx=5K@5<%PgBH3YM(Ds3}0Atwovti_X6`5 zIU(y!X-$AuML?SCAn=RH=c^KSKj$}8J!&I=;qw0jga5+(emrlew)t~kFJ~bYRPJTG z+Q_EOo4A*tlY+Z5A-$8{?o-wb>-rc zDB^ZZi#4SHGHWNUBE}C0I?F9o+fsn;$2P}-SqsrZ1ku9!h9)AFtI54DHl=}p{ zI(D@>f6lp<8;ogoDn4;JVbf90-l(0t#=nl8S!#1Go13-9q5z(~lVAfp>&>Q%`Fm?H zpLQy*y%MY9I^N|j!Hf){07!`t!=eyO)1jbi-;OG=1J=aI7&tS08d(A5ViL8#w6I3T zbAR#YRY(N&O~xcb#uoaDYI6A7Q<2uGzrH)Xqjz&u&?XjVCK7R3sBlM$5}gDlhsEd! zx-GgAyc~SooUJg$c2Ywym4yXw6^9vhF?Cw6CtXfS>@#%^&(xubOXUJrcWP?e5rHme zla$~aLhR5RYDi#*cww% z9}r{i6&u>j_J0gUJ&1rQQ4-`+9HT8J}^v|BvS_{`w31J;NYdU=$}$-HsHn zh5zf|$3`Qo%ZyN(=56_rREll4=gR7J>@1lM&>9U$+ZPL}7QC7au-64~#IO+YKaa&n zk_Cc#|F!-f?Xl0=-InNku4iJ4Dg^A|fvP1}?FF>g>r&kcyPVNbZHGR049SB1eyx`l zK<=|3<6$4qs=SmAqG{ij?=arra+qAdKks!k(IgRPCKMmS$PwQnollCT0uqpemg+Az zfc&5mqc}6Y_z+%>_#ObKQh`KV<|v{wwxa&dBjS>W$dDCeZkIsRdY6M;!aw=*<5Mhmk^PCjDt97qA)Xf{v=Khy>#{ z9q24M>@$V>pT+x0A+(eJw39kG40Y2kb2WpcQs?#YJVg8oWScinLL3Oub2t|5I2K1J zcslrkR@#Ws8@CI6=@A)p(e}^NQk*0+Due=+n;-}^H2bSIZ8Y`Wf>g#oFpyphy>umV zIry?UTLp^k`M-c`tcrx!z5m6}llryrEX43E%24r?b$~BJl2o$%@n2bHt+<=ac)W>P1}a>8QYcf3wPy@n=$yR!mUZfOrs>MomJHR-D%nwSt6v zyrggoiIiA#nSd+2W??;(YOjNdjAkLtpY36iJl~0hzsjH9O#i<+u0NjX^^4zVl%cq& zY((>GWv*lxL%5oi*eK=4^{sDHv+i*1qLqYFsr@jdyWFo|)Af&<5MM&MuZ)xj? zE6uegxye;27j>V{^y9vK`)+^iwb!%rKIc5oIp_I2=h-e}1rmQYOQ*8tYb>(X zYG#1F!6l){4eSH_!0F2$1dDnvSOW^BK868%dmY)~i<@U%^MN%_Pkn@Yg$ezuI;PZw zR;s#0vAlZ*7gJh5EB1KSs--^h&IquxcP>$omnf`oC}*twR(TD~+Rr5cK4}Bi_dl>k z9C=jX8B-dyLr1s466FS;wcofq8HZ`}b|LYXvvkM}=q{Zt85t=w&5CR=p}-VxP?3JP zC4OC5rM`w=kbY?i`M09Fqd8UuwZ0k=U=wBS6l6Pv6$9nm>;Nliv?{?vZbsN@27rl9 zF}w&?X@} zlSQG|Dkl@2*V&)f8W5$Dy7NecMsI%LMN!y^2+E0bReo9DM)US&oxhjWv!d|b1zsz+nm5DPAZGn^MXo_bYEW4jP|i@tE!wkfPU+DHPS_{Fo(r~} zL*ZWG)yr#3mg9Gv)FC&*i_!DruJU@!NSiup{Wp6gPi{y>8d6!=(5^C%r&xnWEmJS9 z9hj8PdtaJe5%G!Az`jg%fpYCevU{0rQd|MCWQFb$usO1UoeI8?ja@iOnm7qO1d;ay z&TtrJ=l+Hw^q9eMPgN=EHuJG&j3bQ=yWuQDqNYnBc$RSokzu+Ns&P+VEQBPIP{;IQ zIQwDt7*U}F86AS!&d%D`2FWsmWCN=hKOXz$uH#GMq#(4;F9+J4q?j;TD^nh&F zhKaZkg>yWuyWU~WkNQ=Ta!Cl4#e#M_y1^M7!J=u;=WWlII~Mi)ROi<8JHGPnO~S}hD)%(w_4E<%!>vU^*VYhZB4iJFf6X=zzSsPsQm)8^7> z5z8TYnTf1S#h~sX2&#y-AhFe4?~w6)`ixtA5SsME%k&5bhK~coVFf<i$J_+c z=;~xnonj?(d?nt=2=**P&A8rrOsmkG(EXwZvqwp<-77|P(OF%PpiHWEOnNaYk#kb| zXUL-@+S(sG(YTYF3b%N2(f+Xabf(YT8*gqqaWV?}`5T(9S#=nhx; zN@tBig3LBpd^G*2L87jC{7vB9>)GOd_x{Wzu_Q?*ZBf!gcGey5(-(Dy^V5e%(X3~7 z*8F~t{>&7yBt<5@4l-UlH|vXkwPW20R~$ICZQSg^xMyWk?Z%Fpv$|=$~Q&Zkn&n`zkK04(~^F>AINa%P@3Il^V(x##L`&S z(n^8wof0lXW^TAf%ZlZ*&Z3arNs~*=`&8y37}q=y=dgs{1NDG*cSn3PcAb~Ek#U$U-vYyQc;h^|0k+><&8JFDcr^CPt7ZOe zqC0}R5)88jgLiVCACB{B&>VT>s&IZVbD~U1MUf*Nb6s3>O;??Jr@x&BJS?77!OWjp zF|U#P2gnQ>eV+M1BwNiqcDl>k$eJIqr9ZPkEGdvBjJpH#JKZ)^a`mh*xZq*>?Y{IQ zu=3xD5$j`F>njBZ+rbL%U(3lQ{hkLH%iyeDs^z9PmqVIEC-JFt3f~#Hf>UP;M z<81Jkf`N`dR61@pzaQ1!5ih(Qx;l;a$Hw9aoGsHQs6Q%*QC~Uxn;yiB2=0fCV?&57c zDKd5c{f+HSH*oT;a}x9*iXCwE0*L9}u`KUOK^oBXf)NUWJdORQFPlD?gHq$<*%&Fg zu!GF)4CPJK{Z?%)dF*p;ucACQ?fN0i(#o^jN4OTYOb1*1WDsG^k>_CC?#Om5w|6g7 zN!;D}5Y=%+e|y%?Lwo0~Wc#DY(G6bos$@@)E1I_5Y0E9KX4Y8a4S@}8J0mW$itT>g zTs$E%A1q$IwCcit%5iSw!ZB|y+M6e>J-ojSdr)zB2>eOs_{-OWQqLzzax4b?z=O;+ z@`iK6`59vqAQ!I(ZXZ?))3R#w#0cA1mTjeAs1;l=7&!&((?!S2JqJ0@dY1Vo$ydE2 zUaThO__*v*8l{ZEPfP}ThOFjPXPZ*r%#O{08nCyMP4nerJ#XJWcnkWtEz)pMxA^*W zBRo*`23{7Qi8J8OPqf8b2(Yjf985M3;0qQdYaa=9LD}d3Z^E_^XJPBI zk2uRgbH7hDGFynSu-x<`LXq)2!iVD1g`^AXC_j>Zwn9z%&#KCW#0$#}KN6dO>O&wo ZO#DB^hmY{t<-EOs;aeTwA2== z6?@dCF@DkBb9?K5|H(OdPoDF6KF|AplJENrZFM5z^8f(g9AMKmLre30XBrg&0KiTJ z0MO&DCQ5KOZ#y?{3tc~VJ1;ZneOH&7L;C#I8wuCP@t zc5XF&7H1jGA7tnP*7uJ(v&oPtXc8Wgt4jTii3JOx(`i_?bTqf2kURQ1a*0;PjzE;5^4V-->1b!;zGP^40s8F_|?MG z&c#a@dioikaGmO*$a&?8fy2i0W=u90UE;`1!pNRuVc@&LgZga~6GcpnP=4_(KA2?e zlQAMCiCJQoSUM(|8;u^u?`ve?R3ASNkvL>}azAcYO%sGtFu^ue(FNd7-G+&(=}$r* zrV8}r)u%fpgAdAu_T&P^Ec@NN12lI0QUpNCPsRvp`mKLigU0073X_g#d4oyQmM>1+*$JD>g=ex9u? z=|fDj2u-8~q&Enuf1N?ppZ3FxiJ*`~O{6t4JoD2~?R2N&9qrMuXIvU{IC*=0WRLW7 zak@QGrspwq=Sdln*StyJEn__?suHq%=XNZSluanWa`S=e2UWmj zv;6mDjC`xvmW+&`5*YC>NhMC|Y%v6B%OR$=RL_58eU}%gat(-@SkUAl^`k33d7if$ zPcSZZVS#Z&KI!oaEu??)){YxOz%n_rF~tf_jug%hjNPl4Wxv+d3m5w_Grnx`rv|q_ zYoq<$6%eg@d_H-OsSPadXvvaXT90do7)vK^CN4F(ZiH zxeHJD4mRG6APi>b{Z>w1D4P2g5rs`z`YEvq{e0~LAVpIs|_WYg`xrH);@*Ivieul7|VWsKg)84*Ub z^;T)uATxer@L?{QRpXq2j_?N&XlI+E&bhoOm$ZO*>UN}{r}fpLDm-#FDc<`s5L?VPB&e|Mj>l75M8 zqeW-}V@=Hohq{+o!_lTx2`hCDfIsI89f1I8rA^>9F$=Ry7KnJP^*HfIt6J^; zuL547A91QY<$Nf##vIQBpv780>=dzL9WG69p5rPQ=7F-F+pO%iFB@~Ff-#r>2<=^k zZEgyaViTyoWk*J-U9JS%Zpl6~YvM``ej>^RjjkdV9B}JVMRC0M8gt=g>RzWJ9iWZg ztm1mds^7$=c`i0E1K1!vv0}=Em5HNNRkrdZeXUXCRCY+!auFgiqfEmc;i-uF%WJup zc}unVDUIgG+Y~PRlEVyrnk}RC)jm*wWyUjCrowrj=~3xWEPHhs69@K6F&j0Q@wVC} zB-$`;Pn~GRHW6v?PDz}B=btZEIPO|D@6|id7*wW{xj$>WXf*LWg3j7 ze{?}Nq+bo(Fo!cUe5-6|dBbFy6wELn(QQX6_~zW~!iDs>7U9eME>eCus;I|$=TyKQ zg?-t!VhrTbmY6-9aPQk7k5C;ZEY^G#)H=HNl+2h4vXPN)9w<@DQ0W^;#W>6RctUc{ zgL&G$1UvYKRSU%=2y?oeYlAkHhsANfkn%l7(yfXuGi0Vs!{PT|F^td`Qm?IpXR@|!_prR5D_Z%y1 zI6jG$+hh>0E55v@MVH%~5;Yn^zS!q|HPs&?GDN^)Rw;d?v$dP3SOmG^s^8v{1li4x zjt#75wuJf^yF+)XUYo>>KuP|3X3JLe%t*AXjb4VCbV+-^wld+}YQhQGpZDp5?}QJe z@X4_dpHnFRzE8dVT#6_O{1zj&`nu7DGS!%;yJWoVSIFgN zO;~H}?6~yw@_Z7PYhK%PXwd1cu`1c-R_#(4cMIvZZky3%ic&7f-^wp_i8 z**3tvzg9y??e=YoKpXJ_Icg#G3mrB~5;qFP>=F>0JdPMo<`PijXu6d))SEp9@=yQrQMS-~-{`CV(MIk_ zdRr}K@vS`jTH0Drt?3FCbw|h1Ob=$WLSDX!C5=OBdA(zBdVU_W_Og!sf%NoWxx(qS z)Gvk(X8iWvTy2tnw@NiKyLjIpV_tr8HOT16v}VKVw|)-)Aftowo);sl$Cagmfzn60 zl8?2ta8a0}jhW@;HTRO(Y#-r?o*mo%eq8OA=c@;k7OyxQnxt2A*3xn(qi|Eg2FRWM zPr1S6yEw;_hmjCUCJw)z z%G#3rdtV`ysp1+~BWf6tX&4h2u4Jm(sgyZAsxb#uAb5ynUN>@QsAH=>F zRl&Ghbts1?H!k~@MqQWf?o4ktj;0BaH1;x6_4M9h*KzXBCM`|Vs505gY67E2J^M&v z=%H3kwlO5gk;5T(?w*6W%{GrrxipR9QL!kh?it>6VBag@$3)mFN3k~46?zfXhxMax zUw@U>Wnboltsup@ym&L!`_jv$(R$hu^d* z4W%=!XWj~A^UnkhU7RVKtGA*B^23C(r6RUgl#GThmIyND_IxH2PeLWw7rW<#Z|N13 zMtZeyGiVkYO2aAU)ub&XyYJ@)xEZ!Kcbx~$-=2{ppMRlpb!t9`B~5om8Aajn3$(Ox zZEv!&@aLXk(pt?2s5=QwLvm7}^$4|Ml>6V@<`}2{1i@Q>fkMN9dIba(a_%i+r#q;# zq+q;Rr!5Ko-c2MWWHVzM69FuC{|Vyy=I&`;IMkPYRFKE4XtN{xvfH5OD?+xvweK)_eme$`XLqmju&hUSzK+ zad73<)0)tj;U;H13HTD(t^Ak?EYYPaiROjUd3ek{SF-0e0I_A*qAodr8N2GF13u@A zCy7VWXo%@O5l@N@H_g7j^j*nz_VG-gbeC=_S{It^>A_H-Zw6E5F(d#Hx+>PIFynSz%~SaLj#fJ= zxHuqsQeFH`U6FS3C`?}<|ZUrcxUy(ExG`p(>#Ioko@2~<=vwEMnyI2gzKvc z3Z*|BmeOxFNxUXY;oSv))+BDl^8{xe_L$))ZZW(sSv~itDtK&L7!f>HBV1`qkUgFh zVz}y;d2F{SjN277dO$)brCR|A;VMC-8xoE+6;_1>91_6HgJWSj= z+T`*hy{jpEeBH8(P`XBzplT_%aje_N#0y6WHCih{9d{Y-^q)qmhf6&_jZ_fwx54l3 zFGKM^1{cQCQ$)#6Lk0iIk8-oh0el>L5`3JgZM?;Q#Laz?#NDZh(0auJ{$m6Y+=!>$ z#z(dzs2az?akbXLcV4|Y!hD>=_mBjH(4YO{e@|8L$p`=91XPEfuKzJ(IZJSMu5jx1 zi$ETq=KnQiIO}+}hyU#e!dGDbe@B0o=WHMRn}-HJDf+Lj_$80lU$UnFSZk25>tc`>ffAf2N@x zL*ib<4@cKLz5@-zCs9_>VfOc=8)thavN0yZZr9Clg=A~pXwa1HCj?IS1xUSNx`X)< z2?s+wbk-N4$TK6c^uCSYv$DE~`O{{{&F(^PSx--Va9y`v!hY=b(%GZ(x@LqBc{-!K z!AsaV7j*NS8Kl$s6BVQpv}I2?#s8siY_}Oc51cGnK{5LXM4AY+t z_kH>JLo==}p%MMp2o&uAq{2-V;x9fE>Rt2m`Gf>4be!k3D%|1U|G>TD+JOHWj!h`= zq1jHW4I*fRIXXFoV3ul68PzSB#K?k5sB$JboJ%~`|0zZ?`MaNgB4{AHKG`CU__mDc zTF8^bV95A8I&r+O$(91@MC2C+4)jmgXE!6b7y(MIluorfhM7z2&xw_FvP&C>sQu);&HLDw=}e|v3$;kzp<6Zwug1Fy$sf;8T3k5 z7sF?Ff7M|ZwX&7wMzORlkX5n4hi74ool}E_@jyx5j8+HM-F#9SJc8(Wshu~B+HtOIN z&B%iErFA^WATG5z;j;}&I%|$+_;vXPnMmKD4aeQ;+`j(*azL7V$*6-31H+{V1M^%Z z00$0VKHHlZt2o-5TbnsNQ;?{mtAV3A-Qo@Xz|6ALxcjnVDs#pepVokr*&ngukVGRD zSFv15twC8Vm9gT(%l8!sN;n7))<`dS$Pr(3X7v?OYn&69W-%CyT^^tgYcUZVRb7kR zXH>P0fQBCrk#L-YK}u>ksoh96r>`cB> zdE~|yJR8LNi0@c6nb-V=dANB;neJ{Ku5Q10;Cm=CO>JP*N_c+-+K2b^fu?SC{S+6u7X>Gk<)q`k49D&Jm&X) za^AkP&5U6mPF;UAoGpn?$ElVkkk1|2pD)TYd3cf34v27dvekdb_o+MN%JlKbC$S^4GL23aR3AuxW8l z3e5b){AfB&+l-OX?^d&iq&vew@v@f_PSE?$#XAO>AdA&fa$@#K5z>+FKA*KykKSn= zROa?kRnev*VY4qx%qEzWADj;2Q*L%5n(%GFZ%ry|igY%24b$>Vq(rL)$3MVT|AMZQ z-)bJW7MXkRK(1<>MGq3ND8BdVbDDFPc`d)yqolg!&9IrU(MnqbKjPy){2;d{-hxZu z%$C&EX!jiHV3!coYU^%=4b8aypo$CUEYU=A9w2~Yi)t7MQGPpc*q%{b{X%i{;T!p+ zNoqjDD@oXJm(NI!9>}9)M}fa{y=;@pK;4Hi`-6VP4P5#pZZ8DPv~kJXaN9%OT5^;d zG+3TaAuVEIMi)qe6r-Wi)}4P|+lfSvwI+6$eKH6X*Vrqt{*q)r(FFJK)=S76GFH@o zP*4Q}>wA+wH2?cRL7u6spU6O_VxAzWr{zPxiYi?g@^2W^Um&_<;UlB+-jF zo{%6CT6gnr1n`;3SIzj_FEXXs*^ur#0UZ-Y zBDjG~11#Y;KM z<_PA@6_11IQf~>C)HL*sV3bPv3Ny|f<(j+^LP9djoAhl>YsJz*D2MOJxmtPye-|cE zFCxK`MGCU|m{6|5l%A9SoWLzDLbn_ zmwoQOUk~=WPhD%RMx@Y5>b@tz=2JwO;4SHPpQ;2xF^%4CSxAx$eMc;kwSST*F%5OH@&BBaAcuK zJh#nL)`IO+uULyo~KK0Js1ap;>PF@L@zU-ii!iD06DSx@3u3J%}oy)`#xdcCP*aKvC(f`x?kyR#*X;r zt=gm-nPTE57NC5V1HW_*Q_AB+KXh4m4JHg;J+4a~vA=UqdIP;e=T*AVjxu+ks?DB= z9Ml18YPMRUR%!Qy?K4G%KHi>@shWF9;puK13l6Wbd`V&Y@s>z(#`2so^NrfIer$&? zoI)Cr+%F+*f!>sQwvVx2Od(`c{RI*6x2~Dl%I?ab!SgbTQq266l}))J95Ppb7-@Fz z<Rbnp}Gq!4%Oh!*})X-D1a0_Ugc^$MRdp5SAAEq>{8j4Q}rm+Uokv ze5ffmdt|jhj@CP;q{+a1BH1%MnKL;xAKh6Y4}Mw+NvTcCbCPz4*A`aBZy|Tw`PvG8 z_}rhHw<-%he3OiK(pXtvvZRH}3z^;jir-=##?xPS7*7X7lO%cK_NzhEc^sZVHC=h_ zO@91%xB$-Efxh%MO}&RX6!(bti$vLit5%AKw-HtR*uR$q7Sd$grNLhP{z1HA$sM;w z=@uAg=Z0&!E-$0n+u!$gMijT?3 zMpIVw>RnMwz)M^N#k{J3W&UE@jL`bMCv;Yts~BO1q`=PP(1YKCw4+2~eo>NUN+!6v zZt8u)aG+$7u;Y46M?K3cvn51O1NH9o?pV&;FE7o+fV? z%7n^lQLf+dMrIze*n;-$SCef0w@+?V&IS{6j*Lc(t;T9)Lm(6vva>+F-Xcj&&o&ij ztQ~b>@z?=`UJKJwiUu-?UxqcQ!BuJ6R3(T;!*jNR>q04xv`4o&aMt@HuZ`nd_Ra~0 zH~hiSr(b%Dl~tAOTkfx4!eHI{eew;SE}b8x#8GKg&ujv(VARdP)DrwOB2Yb_=JrMu zS6JZ@A^#+c`jUvaa?FNe^Ra4ILGk|y0xmpj};mfGE!77qfFv0HieoJlhy|>r*`k9 zyP;>7rV|~u5YzOsstTXj^wh;(H#@(FelOCm#r*(AD9^GF-r@SjPada@g+ouIp%
        Sf;_w+@rDR_Wsh;Wj5V&yDVWhFsg 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 MUoc%CPyg5d1Dp7VM*si- diff --git a/product/common/database/initscript/iscs6000_func_Kingbase.sql b/product/common/database/initscript/iscs6000_func_Kingbase.sql index 889ec6ea..32a8e13b 100644 --- a/product/common/database/initscript/iscs6000_func_Kingbase.sql +++ b/product/common/database/initscript/iscs6000_func_Kingbase.sql @@ -1,8679 +1,8630 @@ - - -CREATE OR REPLACE FUNCTION kbdDebugInfo(info1 varchar(100), info2 varchar(100) ) -RETURNS VOID -AS $$ -DECLARE enableDebug int DEFAULT 1; -BEGIN -enableDebug = (SELECT PRINT_DEBUG_INFO_FLAG FROM kbd_debug_flag LIMIT 1); -IF enableDebug=1 THEN -INSERT INTO kbd_debug(col1,col2,col3) VALUES (info1,info2,now()); -END IF; -END; -$$LANGUAGE PLPGSQL; - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ACCUML_LIMIT_INFO ON accuml_limit_info; -CREATE TRIGGER TIA_ACCUML_LIMIT_INFO AFTER INSERT ON accuml_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ACCUML_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ACCUML_LIMIT_INFO ON accuml_limit_info; -CREATE TRIGGER TUA_ACCUML_LIMIT_INFO AFTER UPDATE ON accuml_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ACCUML_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_limit_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ACCUML_LIMIT_INFO ON accuml_limit_info; -CREATE TRIGGER TDA_ACCUML_LIMIT_INFO AFTER DELETE ON accuml_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ACCUML_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - --首先禁止FES触发器动作 - SET SESSION "disable.FesAccumlTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.AccumlMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAccumlTrigger" = 0; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TI_ACCUML_MAP_TO_FES AFTER INSERT ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - - --首先禁止FES触发器动作 - SET SESSION "disable.FesAccumlTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.AccumlMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - --清除旧的 - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - --添加新的 - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET SESSION "disable.FesAccumlTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TU_ACCUML_MAP_TO_FES BEFORE UPDATE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TUA_ACCUML_MAP_TO_FES AFTER UPDATE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - - --首先禁止FES触发器动作 - SET SESSION "disable.FesAccumlTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.AccumlMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAccumlTrigger" = 0; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TD_ACCUML_MAP_TO_FES BEFORE DELETE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('accuml_map_to_fes')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TDA_ACCUML_MAP_TO_FES AFTER DELETE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* -INSERT INTO accuml( -TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)), NEW.DESCRIPTION,TAG_NAME, NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP, NEW.IS_LIMIT, NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS, NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - INSERT INTO temp_plugin_point_map_acc - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TI_ACCUML_TEMP_DEFINE AFTER INSERT ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.UNIT_ID <> OLD.UNIT_ID OR NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR - NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.SEQ_NO <> OLD.SEQ_NO OR - NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT - THEN - UPDATE accuml SET - TAG_NAME = concat(accuml.DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - UNIT_ID = NEW.UNIT_ID, - IS_LIMIT = NEW.IS_LIMIT, - POINT_CLASS = NEW.POINT_CLASS, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND, - POINT_TYPE = NEW.POINT_TYPE, - SEQ_NO = NEW.SEQ_NO, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE accuml.POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR - NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR - NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR - NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE accuml_limit_info SET - LIMIT_TYPE = NEW.LIMIT_TYPE, - LIMIT_NUM = NEW.LIMIT_NUM, - LIMIT_UP1 = NEW.LIMIT_UP1, - LIMIT_LOW1 = NEW.LIMIT_LOW1, - LIMIT_UP2 = NEW.LIMIT_UP2, - LIMIT_LOW2 = NEW.LIMIT_LOW2, - LIMIT_UP3 = NEW.LIMIT_UP3, - LIMIT_LOW3 = NEW.LIMIT_LOW3, - CROSS_PERCENT = NEW.CROSS_PERCENT, - RETURN_PERCENT = NEW.RETURN_PERCENT, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - IF NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR - NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF - THEN - UPDATE accuml_map_to_fes SET - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - IS_FILTER = NEW.IS_FILTER, - PERCENT = NEW.PERCENT, - BASE = NEW.BASE, - COEFF = NEW.COEFF - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_acc - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TU_ACCUML_TEMP_DEFINE AFTER UPDATE ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - - DELETE FROM temp_plugin_point_map_acc WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* -DELETE FROM accuml WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TD_ACCUML_TEMP_DEFINE BEFORE DELETE ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_temp_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TDA_ACCUML_TEMP_DEFINE AFTER DELETE ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_link_enable_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; -CREATE TRIGGER TIA_ALARM_LINK_ENABLE_INFO AFTER INSERT ON alarm_link_enable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_LINK_ENABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; -CREATE TRIGGER TUA_ALARM_LINK_ENABLE_INFO AFTER UPDATE ON alarm_link_enable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_LINK_ENABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('alarm_link_enable_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; -CREATE TRIGGER TDA_ALARM_LINK_ENABLE_INFO AFTER DELETE ON alarm_link_enable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_LINK_ENABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_config', 'NO', '', NEW.NO, getTableSubSystem('alarm_sms_config')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_SMS_CONFIG ON alarm_sms_config; -CREATE TRIGGER TIA_ALARM_SMS_CONFIG AFTER INSERT ON alarm_sms_config FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_CONFIG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_config', 'NO', OLD.NO, NEW.NO, getTableSubSystem('alarm_sms_config')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_SMS_CONFIG ON alarm_sms_config; -CREATE TRIGGER TUA_ALARM_SMS_CONFIG AFTER UPDATE ON alarm_sms_config FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_CONFIG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_config', 'NO', OLD.NO, '', getTableSubSystem('alarm_sms_config')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_SMS_CONFIG ON alarm_sms_config; -CREATE TRIGGER TDA_ALARM_SMS_CONFIG AFTER DELETE ON alarm_sms_config FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_CONFIG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_device', 'DEVICE_ID', '', NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_SMS_DEVICE ON alarm_sms_device; -CREATE TRIGGER TIA_ALARM_SMS_DEVICE AFTER INSERT ON alarm_sms_device FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_DEVICE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_SMS_DEVICE ON alarm_sms_device; -CREATE TRIGGER TUA_ALARM_SMS_DEVICE AFTER UPDATE ON alarm_sms_device FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_DEVICE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, '', getTableSubSystem('alarm_sms_device')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_SMS_DEVICE ON alarm_sms_device; -CREATE TRIGGER TDA_ALARM_SMS_DEVICE AFTER DELETE ON alarm_sms_device FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_DEVICE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_rule', 'RULE_ID', '', NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_SMS_RULE ON alarm_sms_rule; -CREATE TRIGGER TIA_ALARM_SMS_RULE AFTER INSERT ON alarm_sms_rule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_RULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_SMS_RULE ON alarm_sms_rule; -CREATE TRIGGER TUA_ALARM_SMS_RULE AFTER UPDATE ON alarm_sms_rule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_RULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, '', getTableSubSystem('alarm_sms_rule')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_SMS_RULE ON alarm_sms_rule; -CREATE TRIGGER TDA_ALARM_SMS_RULE AFTER DELETE ON alarm_sms_rule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_RULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TIA_ANALOG_CONTROL AFTER INSERT ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN - - --修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - NEW.OFFSET_NO = '-1'; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TU_ANALOG_CONTROL BEFORE UPDATE ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TUA_ANALOG_CONTROL AFTER UPDATE ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_control')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TDA_ANALOG_CONTROL AFTER DELETE ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ANALOG_LIMIT_INFO ON analog_limit_info; -CREATE TRIGGER TIA_ANALOG_LIMIT_INFO AFTER INSERT ON analog_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ANALOG_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ANALOG_LIMIT_INFO ON analog_limit_info; -CREATE TRIGGER TUA_ANALOG_LIMIT_INFO AFTER UPDATE ON analog_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ANALOG_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_limit_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_LIMIT_INFO ON analog_limit_info; -CREATE TRIGGER TDA_ANALOG_LIMIT_INFO AFTER DELETE ON analog_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ - DECLARE flag int; -BEGIN - SET SESSION "disable.FesAnalogTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.AnalogMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAnalogTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TI_ANALOG_MAP_TO_FES AFTER INSERT ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('FES analog update','In TU_ANALOG_MAP_TO_FES'); - - SET SESSION "disable.FesAnalogTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.AnalogMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET SESSION "disable.FesAnalogTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TU_ANALOG_MAP_TO_FES BEFORE UPDATE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TUA_ANALOG_MAP_TO_FES AFTER UPDATE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - CALL kbdDebugInfo('FES analog update','In TD_ANALOG_MAP_TO_FES'); - - SET SESSION "disable.FesAnalogTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.AnalogMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAnalogTrigger" = 0; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TD_ANALOG_MAP_TO_FES BEFORE DELETE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('analog_map_to_fes')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TDA_ANALOG_MAP_TO_FES AFTER DELETE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - -/* -INSERT INTO analog( -TAG_NAME, DESCRIPTION, RTU_TAG, DEV_TYPE, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, IS_CONTROL, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)) , NEW.DESCRIPTION ,'', DEV_TYPE, TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, NEW.IS_CONTROL,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP,NEW.IS_LIMIT,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - - INSERT INTO temp_plugin_point_map_ana - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TI_ANALOG_TEMP_DEFINE AFTER INSERT ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.SEQ_NO <> OLD.SEQ_NO OR NEW.IS_CONTROL <> OLD.IS_CONTROL OR NEW.UNIT_ID <> OLD.UNIT_ID OR - NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT OR - NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND - THEN - UPDATE analog SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - UNIT_ID = NEW.UNIT_ID, - IS_LIMIT = NEW.IS_LIMIT, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND - WHERE POINT_TP_NAME=OLD.TAG_NAME; - END IF; - - IF NEW.IS_TAGT_STATE <> OLD.IS_TAGT_STATE OR NEW.CTRL_TIMEOUT <> OLD.CTRL_TIMEOUT OR NEW.RESV_TIMEOUT <> OLD.RESV_TIMEOUT OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR - NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.CTRL_TOLERANCE <> OLD.CTRL_TOLERANCE OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE analog_control SET - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR - NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR - NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR - NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE analog_limit_info SET - LIMIT_TYPE = NEW.LIMIT_TYPE , - LIMIT_NUM = NEW.LIMIT_NUM , - LIMIT_UP1 = NEW.LIMIT_UP1 , - LIMIT_LOW1 = NEW.LIMIT_LOW1 , - LIMIT_UP2 = NEW.LIMIT_UP2 , - LIMIT_LOW2 = NEW.LIMIT_LOW2 , - LIMIT_UP3 = NEW.LIMIT_UP3 , - LIMIT_LOW3 = NEW.LIMIT_LOW3 , - CROSS_PERCENT = NEW.CROSS_PERCENT , - RETURN_PERCENT = NEW.RETURN_PERCENT , - ALARM_PRIORITY = NEW.ALARM_PRIORITY , - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME , - IS_WATER_ALM = NEW.IS_WATER_ALM , - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN , - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK , - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR NEW.IS_VALID <> OLD.IS_VALID OR NEW.DEADBAND <> OLD.DEADBAND OR - NEW.ZEROBAND <> OLD.ZEROBAND OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW - THEN - UPDATE analog_map_to_fes SET - POINT_TP_NAME = NEW.TAG_NAME, - IS_FILTER = NEW.IS_FILTER, - PERCENT = NEW.PERCENT, - IS_VALID = NEW.IS_VALID, - DEADBAND = NEW.DEADBAND, - ZEROBAND = NEW.ZEROBAND, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_ana - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TU_ANALOG_TEMP_DEFINE AFTER UPDATE ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM temp_plugin_point_map_ana WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* - DELETE FROM analog WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TD_ANALOG_TEMP_DEFINE BEFORE DELETE ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_temp_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TDA_ANALOG_TEMP_DEFINE AFTER DELETE ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_analog', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_ANALOG ON APC_ANALOG; -CREATE TRIGGER TIA_APC_ANALOG AFTER INSERT ON APC_ANALOG FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_APC_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF NEW.NO_RDB_SYNC = 1 THEN - NEW.NO_RDB_SYNC = NULL; -ELSEIF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_APC_ANALOG ON APC_ANALOG; -CREATE TRIGGER TUB_APC_ANALOG BEFORE UPDATE ON APC_ANALOG FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_APC_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_analog')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_ANALOG ON APC_ANALOG; -CREATE TRIGGER TDA_APC_ANALOG AFTER DELETE ON APC_ANALOG FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_apc_curve() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_apc_curve ON apc_curve; -CREATE TRIGGER TIA_apc_curve AFTER INSERT ON apc_curve FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_apc_curve(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_apc_curve() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_apc_curve ON apc_curve; -CREATE TRIGGER TUA_apc_curve AFTER UPDATE ON apc_curve FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_apc_curve(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_apc_curve() RETURNS TRIGGER AS $$ -BEGIN -delete from apc_curve_day_index where curve_key_id_tag = old.key_id_tag; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_curve')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_apc_curve ON apc_curve; -CREATE TRIGGER TDA_apc_curve AFTER DELETE ON apc_curve FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_apc_curve(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', '', concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; -CREATE TRIGGER TIA_APC_CURVE_DAY_INDEX AFTER INSERT ON apc_curve_day_index FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_INDEX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ -BEGIN -IF((select count(*) from apc_curve_day_index where day_rule_id = old.day_rule_id)<1) THEN -delete from apc_curve_day_value where day_rule_id = old.day_rule_id; -END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; -CREATE TRIGGER TUA_APC_CURVE_DAY_INDEX AFTER UPDATE ON apc_curve_day_index FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_INDEX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ -BEGIN -delete from apc_curve_day_value where day_rule_id = old.day_rule_id; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id',concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), '', getTableSubSystem('apc_curve_day_index')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; -CREATE TRIGGER TDA_APC_CURVE_DAY_INDEX AFTER DELETE ON apc_curve_day_index FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_INDEX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', '', concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; -CREATE TRIGGER TIA_APC_CURVE_DAY_VALUE AFTER INSERT ON apc_curve_day_value FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_VALUE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; -CREATE TRIGGER TUA_APC_CURVE_DAY_VALUE AFTER UPDATE ON apc_curve_day_value FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_VALUE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), '', getTableSubSystem('apc_curve_day_value')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; -CREATE TRIGGER TDA_APC_CURVE_DAY_VALUE AFTER DELETE ON apc_curve_day_value FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_VALUE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_week', 'type_id,week_day', '', concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_WEEK ON apc_curve_week; -CREATE TRIGGER TIA_APC_CURVE_WEEK AFTER INSERT ON apc_curve_week FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_WEEK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_WEEK ON apc_curve_week; -CREATE TRIGGER TUA_APC_CURVE_WEEK AFTER UPDATE ON apc_curve_week FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_WEEK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), '', getTableSubSystem('apc_curve_week')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_WEEK ON apc_curve_week; -CREATE TRIGGER TDA_APC_CURVE_WEEK AFTER DELETE ON apc_curve_week FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_WEEK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_YEAR ON apc_curve_year; -CREATE TRIGGER TIA_APC_CURVE_YEAR AFTER INSERT ON apc_curve_year FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_YEAR(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_YEAR ON apc_curve_year; -CREATE TRIGGER TUA_APC_CURVE_YEAR AFTER UPDATE ON apc_curve_year FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_YEAR(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_YEAR ON apc_curve_year; -CREATE TRIGGER TDA_APC_CURVE_YEAR AFTER DELETE ON apc_curve_year FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_YEAR(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_digital', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_DIGITAL ON apc_digital; -CREATE TRIGGER TIA_APC_DIGITAL AFTER INSERT ON apc_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_APC_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF NEW.NO_RDB_SYNC = 1 THEN - NEW.NO_RDB_SYNC = NULL; -ELSEIF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_APC_DIGITAL ON apc_digital; -CREATE TRIGGER TUB_APC_DIGITAL BEFORE UPDATE ON apc_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_APC_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_digital')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_DIGITAL ON apc_digital; -CREATE TRIGGER TDA_APC_DIGITAL AFTER DELETE ON apc_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; -CREATE TRIGGER TIA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER INSERT ON ats_casco_planned_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; -CREATE TRIGGER TUA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER UPDATE ON ats_casco_planned_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_planned_train_data')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; -CREATE TRIGGER TDA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER DELETE ON ats_casco_planned_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; -CREATE TRIGGER TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER INSERT ON ats_casco_practical_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; -CREATE TRIGGER TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER UPDATE ON ats_casco_practical_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_practical_train_data')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; -CREATE TRIGGER TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER DELETE ON ats_casco_practical_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_location_info', 'ats_location_id', '', NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; -CREATE TRIGGER TIA_ATS_FES_LOCATION_INFO AFTER INSERT ON ats_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; -CREATE TRIGGER TUA_ATS_FES_LOCATION_INFO AFTER UPDATE ON ats_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, '', getTableSubSystem('ats_fes_location_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; -CREATE TRIGGER TDA_ATS_FES_LOCATION_INFO AFTER DELETE ON ats_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', '', concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; -CREATE TRIGGER TIA_ATS_FES_PLATFORM_INFO AFTER INSERT ON ats_fes_platform_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_FES_PLATFORM_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; -CREATE TRIGGER TUA_ATS_FES_PLATFORM_INFO AFTER UPDATE ON ats_fes_platform_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_FES_PLATFORM_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), '', getTableSubSystem('ats_fes_platform_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; -CREATE TRIGGER TDA_ATS_FES_PLATFORM_INFO AFTER DELETE ON ats_fes_platform_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_FES_PLATFORM_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; -CREATE TRIGGER TIA_BAS_TIMETABLE_CTRL_PARAM AFTER INSERT ON bas_timetable_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; -CREATE TRIGGER TUA_BAS_TIMETABLE_CTRL_PARAM AFTER UPDATE ON bas_timetable_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; -CREATE TRIGGER TDA_BAS_TIMETABLE_CTRL_PARAM AFTER DELETE ON bas_timetable_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_def', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_DEF ON bas_timetable_def; -CREATE TRIGGER TIA_BAS_TIMETABLE_DEF AFTER INSERT ON bas_timetable_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_DEF ON bas_timetable_def; -CREATE TRIGGER TUA_BAS_TIMETABLE_DEF AFTER UPDATE ON bas_timetable_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_DEF ON bas_timetable_def; -CREATE TRIGGER TDA_BAS_TIMETABLE_DEF AFTER DELETE ON bas_timetable_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_info', 'location_id,timetable_id,begin_time', '', concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_INFO ON bas_timetable_info; -CREATE TRIGGER TIA_BAS_TIMETABLE_INFO AFTER INSERT ON bas_timetable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_INFO ON bas_timetable_info; -CREATE TRIGGER TUA_BAS_TIMETABLE_INFO AFTER UPDATE ON bas_timetable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), '', getTableSubSystem('bas_timetable_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_INFO ON bas_timetable_info; -CREATE TRIGGER TDA_BAS_TIMETABLE_INFO AFTER DELETE ON bas_timetable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_schedule', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; -CREATE TRIGGER TIA_BAS_TIMETABLE_SCHEDULE AFTER INSERT ON bas_timetable_schedule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_SCHEDULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; -CREATE TRIGGER TUA_BAS_TIMETABLE_SCHEDULE AFTER UPDATE ON bas_timetable_schedule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_SCHEDULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_schedule')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; -CREATE TRIGGER TDA_BAS_TIMETABLE_SCHEDULE AFTER DELETE ON bas_timetable_schedule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_SCHEDULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_func_def', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_FUNC_DEF ON calc_func_def; -CREATE TRIGGER TI_CALC_FUNC_DEF AFTER INSERT ON calc_func_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_FUNC_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET - FUNC_NAME = NEW.FUNC_NAME, - CALC_FLAG = '1' - WHERE FUNC_NAME = OLD.FUNC_NAME; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_func_def', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_FUNC_DEF ON calc_func_def; -CREATE TRIGGER TU_CALC_FUNC_DEF AFTER UPDATE ON calc_func_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_FUNC_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM calc_out_para WHERE FUNC_NAME = OLD.FUNC_NAME; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_func_def', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('calc_func_def')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_FUNC_DEF ON calc_func_def; -CREATE TRIGGER TD_CALC_FUNC_DEF AFTER DELETE ON calc_func_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_FUNC_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_group_def', 'group_id', '', NEW.GROUP_ID, getTableSubSystem('calc_group_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_GROUP_DEF ON calc_group_def; -CREATE TRIGGER TI_CALC_GROUP_DEF AFTER INSERT ON calc_group_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_GROUP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.GROUP_ID <> OLD.GROUP_ID THEN - UPDATE calc_func_def SET GROUP_ID = NEW.GROUP_ID WHERE GROUP_ID = OLD.GROUP_ID; - END IF; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_group_def', 'group_id', OLD.GROUP_ID, NEW.GROUP_ID, getTableSubSystem('calc_group_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_GROUP_DEF ON calc_group_def; -CREATE TRIGGER TU_CALC_GROUP_DEF AFTER UPDATE ON calc_group_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_GROUP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_group_def', 'group_id', OLD.GROUP_ID, '', getTableSubSystem('calc_group_def')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_GROUP_DEF ON calc_group_def; -CREATE TRIGGER TD_CALC_GROUP_DEF AFTER DELETE ON calc_group_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_GROUP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_IN_PARA() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_in_para', 'key_id_tag,para_seq_no', '', concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_IN_PARA ON calc_in_para; -CREATE TRIGGER TI_CALC_IN_PARA AFTER INSERT ON calc_in_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_IN_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_IN_PARA() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_IN_PARA ON calc_in_para; -CREATE TRIGGER TU_CALC_IN_PARA AFTER UPDATE ON calc_in_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_IN_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_IN_PARA() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = OLD.KEY_ID_TAG; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_in_para')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_IN_PARA ON calc_in_para; -CREATE TRIGGER TD_CALC_IN_PARA AFTER DELETE ON calc_in_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_IN_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_OUT_PARA() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_out_para', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_OUT_PARA ON calc_out_para; -CREATE TRIGGER TI_CALC_OUT_PARA AFTER INSERT ON calc_out_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_OUT_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_OUT_PARA() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_OUT_PARA ON calc_out_para; -CREATE TRIGGER TU_CALC_OUT_PARA AFTER UPDATE ON calc_out_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_OUT_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_OUT_PARA() RETURNS TRIGGER AS $$ -BEGIN - - --这里不能触发删除本输出的输入,因为输入的删除触发器中调用了本表 - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('calc_out_para')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_OUT_PARA ON calc_out_para; -CREATE TRIGGER TD_CALC_OUT_PARA AFTER DELETE ON calc_out_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_OUT_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_PARA_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_para_def', 'func_name,para_seq_no', '', concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_PARA_DEF ON calc_para_def; -CREATE TRIGGER TI_CALC_PARA_DEF AFTER INSERT ON calc_para_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_PARA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_PARA_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_PARA_DEF ON calc_para_def; -CREATE TRIGGER TU_CALC_PARA_DEF AFTER UPDATE ON calc_para_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_PARA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_PARA_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_para_def')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_PARA_DEF ON calc_para_def; -CREATE TRIGGER TD_CALC_PARA_DEF AFTER DELETE ON calc_para_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_PARA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_device_inst', 'id', '', NEW.id, getTableSubSystem('cfg_device_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_CFG_DEVICE_INST ON cfg_device_inst; -CREATE TRIGGER TIA_CFG_DEVICE_INST AFTER INSERT ON cfg_device_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_CFG_DEVICE_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'cfg_device_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_device_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_CFG_DEVICE_INST ON cfg_device_inst; -CREATE TRIGGER TUA_CFG_DEVICE_INST AFTER UPDATE ON cfg_device_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_CFG_DEVICE_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_device_inst', 'id', OLD.id, '', getTableSubSystem('cfg_device_inst')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_CFG_DEVICE_INST ON cfg_device_inst; -CREATE TRIGGER TDA_CFG_DEVICE_INST AFTER DELETE ON cfg_device_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_CFG_DEVICE_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_signal_inst', 'id', '', NEW.id, getTableSubSystem('cfg_signal_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_CFG_SIGNAL_INST ON cfg_signal_inst; -CREATE TRIGGER TIA_CFG_SIGNAL_INST AFTER INSERT ON cfg_signal_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_CFG_SIGNAL_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'cfg_signal_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_signal_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_CFG_SIGNAL_INST ON cfg_signal_inst; -CREATE TRIGGER TUA_CFG_SIGNAL_INST AFTER UPDATE ON cfg_signal_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_CFG_SIGNAL_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_signal_inst', 'id', OLD.id, '', getTableSubSystem('cfg_signal_inst')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_CFG_SIGNAL_INST ON cfg_signal_inst; -CREATE TRIGGER TDA_CFG_SIGNAL_INST AFTER DELETE ON cfg_signal_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_CFG_SIGNAL_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TIA_DEV_TEMP_DEF AFTER INSERT ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF OLD.TAG_NAME != NEW.TAG_NAME THEN -BEGIN - UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -END; -END IF; - -IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DESCRIPTION != NEW.DESCRIPTION THEN -BEGIN - UPDATE accuml_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - UPDATE analog_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - - UPDATE digital_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - UPDATE mix_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - --更新对应的套件 - IF OLD.TAG_NAME != NEW.TAG_NAME THEN - BEGIN - UPDATE temp_plugin_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_fes_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_acc SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_ana SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_dig SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_mix SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - END; - END IF; -END; -END IF; -/* -IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DEV_TYPE_ID != NEW.DEV_TYPE_ID OR OLD.SUB_SYSTEM != NEW.SUB_SYSTEM -THEN -UPDATE dev_info SET -DEV_TP_NAME=NEW.TAG_NAME, -DEV_TYPE=NEW.DEV_TYPE_ID, -SUB_SYSTEM = NEW.SUB_SYSTEM -WHERE DEV_TP_NAME=OLD.TAG_NAME ; -END IF; -*/ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TU_DEV_TEMP_DEF AFTER UPDATE ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - -/* -DELETE FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; -*/ -DELETE FROM accuml_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM analog_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM digital_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM mix_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; ---套件的处理 -DELETE FROM temp_plugin_dev_map WHERE TEMP_NAME = OLD.TAG_NAME; -UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TD_DEV_TEMP_DEF BEFORE DELETE ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('dev_temp_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TDA_DEV_TEMP_DEF AFTER DELETE ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE dev_temp_def SET DEV_TEMP_GRP = NEW.TAG_NAME WHERE DEV_TEMP_GRP = OLD.TAG_NAME; - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DEV_TEMP_GROUP ON dev_temp_group; -CREATE TRIGGER TU_DEV_TEMP_GROUP AFTER UPDATE ON dev_temp_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ -BEGIN - - DELETE FROM dev_temp_def WHERE DEV_TEMP_GRP = OLD.TAG_NAME; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DEV_TEMP_GROUP ON dev_temp_group; -CREATE TRIGGER TD_DEV_TEMP_GROUP AFTER DELETE ON dev_temp_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TIA_DIGITAL_CONTROL AFTER INSERT ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN - - --修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - NEW.OFFSET_NO1 = '-1'; - NEW.OFFSET_NO2 = '-1'; - NEW.OFFSET_NO3 = '-1'; - NEW.OFFSET_NO4 = '-1'; - NEW.OFFSET_NO5 = '-1'; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TU_DIGITAL_CONTROL BEFORE UPDATE ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TUA_DIGITAL_CONTROL AFTER UPDATE ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_control')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TDA_DIGITAL_CONTROL AFTER DELETE ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('FES digtal update','In TI_DIGTAL_MAP_TO_FES'); - - SET SESSION "disable.FesDigitalTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.DigitalMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value1' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); - END IF; - - IF COALESCE(NEW.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value2' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); - END IF; - - IF COALESCE(NEW.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value3' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); - END IF; - - IF COALESCE(NEW.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value4' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); - END IF; - - IF COALESCE(NEW.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value5' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); - END IF; - - END; - END IF; - END; - END IF; - SET SESSION "disable.FesDigitalTrigger" = 0; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TI_DIGITAL_MAP_TO_FES AFTER INSERT ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO1 = OLD.DOT_NO1 AND - NEW.DOT_NO2 = OLD.DOT_NO2 AND - NEW.DOT_NO3 = OLD.DOT_NO3 AND - NEW.DOT_NO4 = OLD.DOT_NO4 AND - NEW.DOT_NO5 = OLD.DOT_NO5 AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('FES digtal update','In TU_DIGTAL_MAP_TO_FES'); - - SET SESSION "disable.FesDigitalTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.DigitalMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); - END IF; - - IF COALESCE(OLD.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); - END IF; - - IF COALESCE(OLD.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); - END IF; - - IF COALESCE(OLD.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); - END IF; - - IF COALESCE(OLD.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value1' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); - END IF; - - IF COALESCE(NEW.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value2' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); - END IF; - - IF COALESCE(NEW.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value3' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); - END IF; - - IF COALESCE(NEW.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value4' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); - END IF; - - IF COALESCE(NEW.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value5' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); - END IF; - - END; - ELSE - BEGIN - NEW.DOT_NO1 = '-1'; - NEW.DOT_NO2 = '-1'; - NEW.DOT_NO3 = '-1'; - NEW.DOT_NO4 = '-1'; - NEW.DOT_NO5 = '-1'; - END; - END IF; - END; - END IF; - SET SESSION "disable.FesDigitalTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TU_DIGITAL_MAP_TO_FES BEFORE UPDATE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TUA_DIGITAL_MAP_TO_FES AFTER UPDATE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('FES digtal update','In TD_DIGTAL_MAP_TO_FES'); - - SET SESSION "disable.FesDigitalTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.DigitalMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); - END IF; - - IF COALESCE(OLD.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); - END IF; - - IF COALESCE(OLD.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); - END IF; - - IF COALESCE(OLD.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); - END IF; - - IF COALESCE(OLD.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesDigitalTrigger" = 0; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TD_DIGITAL_MAP_TO_FES BEFORE DELETE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('digital_map_to_fes')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TDA_DIGITAL_MAP_TO_FES AFTER DELETE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - -/* -INSERT INTO digital( -TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, VALUE_NUM, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, VALUE1, STATUS1, LAST_CHANGE_TIME1, VALUE2, STATUS2, LAST_CHANGE_TIME2, VALUE3, STATUS3, LAST_CHANGE_TIME3, VALUE4, STATUS4, LAST_CHANGE_TIME4, VALUE5, STATUS5, LAST_CHANGE_TIME5, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, INPUT_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, IS_ALARM_FREQ, ALARM_FREQ, ALARM_FREQ_DESC, IS_ALARM_TIME, ALARM_TIME, ALARM_TIME_DESC, ALARM_FREQ_RANGE, INFER_NAME, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID ) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, "", NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,NEW.VALUE_NUM,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.INPUT_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.IS_ALARM_FREQ,NEW.ALARM_FREQ,NEW.ALARM_FREQ_DESC,NEW.IS_ALARM_TIME,NEW.ALARM_TIME,NEW.ALARM_TIME_DESC,NEW.ALARM_FREQ_RANGE,'', NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - INSERT INTO temp_plugin_point_map_dig - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME1, FES_TEMP_POINT_NAME2, FES_TEMP_POINT_NAME3, FES_TEMP_POINT_NAME4, FES_TEMP_POINT_NAME5, FES_TEMP_OUT_NAME1, FES_TEMP_OUT_NAME2, FES_TEMP_OUT_NAME3, FES_TEMP_OUT_NAME4, FES_TEMP_OUT_NAME5) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'', '', '', '', '', '', '', '', '', '', '' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TI_DIGITAL_TEMP_DEFINE AFTER INSERT ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE digital SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, - VALUE_NUM = NEW.VALUE_NUM, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - INPUT_DELAY_TIME = NEW.INPUT_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - IS_SUMMARY = NEW.IS_SUMMARY, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - IS_ALARM_FREQ = NEW.IS_ALARM_FREQ, - ALARM_FREQ = NEW.ALARM_FREQ, - ALARM_FREQ_DESC = NEW.ALARM_FREQ_DESC, - IS_ALARM_TIME = NEW.IS_ALARM_TIME, - ALARM_TIME = NEW.ALARM_TIME, - ALARM_TIME_DESC = NEW.ALARM_TIME_DESC, - ALARM_FREQ_RANGE = NEW.ALARM_FREQ_RANGE, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE POINT_TP_NAME=OLD.TAG_NAME ; - UPDATE digital_control SET - CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - PULSE_DURATION = NEW.PULSE_DURATION, - OFFSET_NUM = NEW.OFFSET_NUM, - IS_CHECK_PREVENTION = NEW.IS_CHECK_PREVENTION, - CTRL_TYPE = NEW.CTRL_TYPE, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_dig - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TU_DIGITAL_TEMP_DEFINE AFTER UPDATE ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM temp_plugin_point_map_dig WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* -DELETE FROM digital WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TD_DIGITAL_TEMP_DEFINE BEFORE DELETE ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_temp_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TDA_DIGITAL_TEMP_DEFINE AFTER DELETE ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fault_recall_cond_def', 'location_id,trigger_tag_name', '', concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; -CREATE TRIGGER TIA_FAULT_RECALL_COND_DEF AFTER INSERT ON fault_recall_cond_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FAULT_RECALL_COND_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; -CREATE TRIGGER TUA_FAULT_RECALL_COND_DEF AFTER UPDATE ON fault_recall_cond_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FAULT_RECALL_COND_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), '', getTableSubSystem('fault_recall_cond_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; -CREATE TRIGGER TDA_FAULT_RECALL_COND_DEF AFTER DELETE ON fault_recall_cond_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FAULT_RECALL_COND_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_ACCUML() RETURNS TRIGGER AS $$ - DECLARE flag INT; -BEGIN - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TI_FES_ACCUML'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AccumlMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesAccumlTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE accuml_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - - END; - END IF; - - SET SESSION "disable.AccumlMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_accuml', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_accuml')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TI_FES_ACCUML AFTER INSERT ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_ACCUML() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TU_FES_ACCUML'); - - SET SESSION "disable.AccumlMapToFesTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.FesAccumlTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - --删除旧关联 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE accuml_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - --建立新关联 - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE accuml_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - END; - END IF; - - SET SESSION "disable.AccumlMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TU_FES_ACCUML BEFORE UPDATE ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ACCUML() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_accuml', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_accuml')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TUA_FES_ACCUML AFTER UPDATE ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_ACCUML() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TD_FES_ACCUML'); - - SET SESSION "disable.AccumlMapToFesTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.FesAccumlTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE accuml_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.AccumlMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_accuml', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_accuml')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TD_FES_ACCUML AFTER DELETE ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_ANALOG() RETURNS TRIGGER AS $$ - DECLARE flag int; -BEGIN - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TI_FES_ANALOG'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AnalogMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesAnalogTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE analog_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.AnalogMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_ANALOG ON fes_analog; -CREATE TRIGGER TI_FES_ANALOG AFTER INSERT ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TU_FES_ANALOG'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AnalogMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesAnalogTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - --不管是ana还是const都是放在analog_map_to_fes表 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE analog_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE analog_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.AnalogMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_ANALOG ON fes_analog; -CREATE TRIGGER TU_FES_ANALOG BEFORE UPDATE ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_ANALOG ON fes_analog; -CREATE TRIGGER TUA_FES_ANALOG AFTER UPDATE ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TD_FES_ANALOG'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AnalogMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesAnalogTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - --不管是ana还是const都是放在analog_map_to_fes表 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE analog_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.AnalogMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_ANALOG ON fes_analog; -CREATE TRIGGER TD_FES_ANALOG AFTER DELETE ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_ANALOG_CTRL ON fes_analog_ctrl; -CREATE TRIGGER TIA_FES_ANALOG_CTRL AFTER INSERT ON fes_analog_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_ANALOG_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ -BEGIN - --更新关联了此点的遥控点 - - IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO - THEN - BEGIN - UPDATE analog_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_ANALOG_CTRL ON fes_analog_ctrl; -CREATE TRIGGER TU_FES_ANALOG_CTRL AFTER UPDATE ON fes_analog_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_ANALOG_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ -BEGIN - UPDATE analog_control SET - OFFSET_NO = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog_ctrl')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_ANALOG_CTRL ON fes_analog_ctrl; -CREATE TRIGGER TD_FES_ANALOG_CTRL AFTER DELETE ON fes_analog_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_ANALOG_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ - DECLARE locationTag varchar(64) DEFAULT ''; - DECLARE subsystemTag varchar(64) DEFAULT ''; -BEGIN - SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; - SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; - NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_CHANNEL_PARA ON FES_CHANNEL_PARA; -CREATE TRIGGER TI_FES_CHANNEL_PARA BEFORE INSERT ON FES_CHANNEL_PARA FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_channel_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TIA_FES_CHANNEL_PARA AFTER INSERT ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ - DECLARE locationTag varchar(64) DEFAULT ''; - DECLARE subsystemTag varchar(64) DEFAULT ''; -BEGIN - IF NEW.CHAN_NAME <> OLD.CHAN_NAME THEN - BEGIN - SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; - SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; - NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); - END; - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TU_FES_CHANNEL_PARA BEFORE UPDATE ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); -END IF; -IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.CHAN_NO <> OLD.CHAN_NO OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM THEN -BEGIN - UPDATE fes_rtu_para SET - TAG_NAME = concat(NEW.TAG_NAME,'.',RTU_NAME), - CHAN_TAG = NEW.TAG_NAME, - CHAN_NO = NEW.CHAN_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE CHAN_TAG = OLD.TAG_NAME; -END; -END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TUA_FES_CHANNEL_PARA AFTER UPDATE ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_channel_para')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TDA_FES_CHANNEL_PARA AFTER DELETE ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const', 'tag_name', '',NEW.TAG_NAME, getTableSubSystem('fes_const')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_CONST ON fes_const; -CREATE TRIGGER TI_FES_CONST AFTER INSERT ON fes_const FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_CONST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_const', 'tag_name', OLD.TAG_NAME,NEW.TAG_NAME, getTableSubSystem('fes_const')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_CONST ON fes_const; -CREATE TRIGGER TU_FES_CONST AFTER UPDATE ON fes_const FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_CONST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const', 'tag_name', OLD.TAG_NAME,'', getTableSubSystem('fes_const')); - END IF; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_CONST ON fes_const; -CREATE TRIGGER TD_FES_CONST AFTER DELETE ON fes_const FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_CONST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - INSERT INTO fes_const( - TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST'))), NEW.DESCRIPTION,NEW.GROUP_NO,fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST')),NEW.SEQ_NO,fes_rtu_para.SUB_SYSTEM,fes_rtu_para.LOCATION_ID,fes_dev_info.TAG_NAME,NEW.VALUE,NEW.VALUE_TYPE,NEW.UNIT_ID,NEW.VALUE_TEXT, NEW.VALUE_RATIO,NEW.VALUE_ADDED,NEW.VALUE_MAX,NEW.VALUE_MIN,NEW.VALUE_DEFAULT,NEW.VALUE_VERIFY,NEW.EX_INFO,NEW.TAG_NAME, NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_CONST_TEMP ON fes_const_temp; -CREATE TRIGGER TI_FES_CONST_TEMP AFTER INSERT ON fes_const_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_CONST_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE fes_const SET - DESCRIPTION = NEW.DESCRIPTION, - GROUP_NO = NEW.GROUP_NO, - SEQ_NO = NEW.SEQ_NO, - VALUE = NEW.VALUE, - VALUE_TYPE = NEW.VALUE_TYPE, - UNIT_ID = NEW.UNIT_ID, - VALUE_TEXT = NEW.VALUE_TEXT, - VALUE_RATIO = NEW.VALUE_RATIO, - VALUE_ADDED = NEW.VALUE_ADDED, - VALUE_MAX = NEW.VALUE_MAX, - VALUE_MIN = NEW.VALUE_MIN, - VALUE_DEFAULT = NEW.VALUE_DEFAULT, - VALUE_VERIFY = NEW.VALUE_VERIFY, - EX_INFO = NEW.EX_INFO, - FES_POINT_TP_NAME = NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_CONST_TEMP ON fes_const_temp; -CREATE TRIGGER TU_FES_CONST_TEMP AFTER UPDATE ON fes_const_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_CONST_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - DELETE FROM fes_const WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_const_temp')); - END IF; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_CONST_TEMP ON fes_const_temp; -CREATE TRIGGER TD_FES_CONST_TEMP AFTER DELETE ON fes_const_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_CONST_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', '', concat(NEW.TAG_NAME,',', NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DATA_BLOCK ON fes_data_block; -CREATE TRIGGER TIA_FES_DATA_BLOCK AFTER INSERT ON fes_data_block FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DATA_BLOCK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,',', OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), concat(NEW.TAG_NAME,',',NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_DATA_BLOCK ON fes_data_block; -CREATE TRIGGER TUA_FES_DATA_BLOCK AFTER UPDATE ON fes_data_block FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_DATA_BLOCK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), '', getTableSubSystem('fes_data_block')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DATA_BLOCK ON fes_data_block; -CREATE TRIGGER TDA_FES_DATA_BLOCK AFTER DELETE ON fes_data_block FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DATA_BLOCK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - INSERT INTO fes_data_block( - TAG_NAME, BLOCK_ID, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG) SELECT - concat(fes_dev_info.TAG_NAME,'.',getAfterLastDot(NEW.TAG_NAME)), NEW.BLOCK_ID,fes_rtu_para.RTU_NO,NEW.FUNC_CODE,NEW.STAR_ADDR,NEW.DATA_LEN, NEW.DATA_FARME_TYPE, NEW.REF_CYCLE, NEW.IS_CREATE_SOE, NEW.PARA_INT1, NEW.PARA_INT2, NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,NEW.LD, NEW.CALL_MODE, NEW.DATA_SET,NEW.DATA_SET_TYPE,NEW.DATA_SET_CALL_TIME,NEW.REPORT_CTRL,NEW.TAG_NAME, fes_dev_info.TAG_NAME - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; -CREATE TRIGGER TI_FES_DATA_BLOCK_TEMP AFTER INSERT ON fes_data_block_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DATA_BLOCK_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE fes_data_block SET - TAG_NAME = concat(getBeforeLastDot(fes_data_block.TAG_NAME),'.',getAfterLastDot(NEW.TAG_NAME)), - BLOCK_ID = NEW.BLOCK_ID, - FUNC_CODE = NEW.FUNC_CODE, - STAR_ADDR = NEW.STAR_ADDR, - DATA_LEN = NEW.DATA_LEN, - DATA_FARME_TYPE = NEW.DATA_FARME_TYPE, - REF_CYCLE = NEW.REF_CYCLE, - IS_CREATE_SOE = NEW.IS_CREATE_SOE, - PARA_INT1 = NEW.PARA_INT1, - PARA_INT2 = NEW.PARA_INT2, - DESCRIPTION = NEW.DESCRIPTION, - LD = NEW.LD, - CALL_MODE = NEW.CALL_MODE, - DATA_SET = NEW.DATA_SET, - DATA_SET_TYPE = NEW.DATA_SET_TYPE, - DATA_SET_CALL_TIME = NEW.DATA_SET_CALL_TIME, - REPORT_CTRL = NEW.REPORT_CTRL, - FES_POINT_TP_NAME = NEW.TAG_NAME - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; -CREATE TRIGGER TU_FES_DATA_BLOCK_TEMP AFTER UPDATE ON fes_data_block_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DATA_BLOCK_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - DELETE FROM fes_data_block WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_data_block_temp')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; -CREATE TRIGGER TD_FES_DATA_BLOCK_TEMP AFTER DELETE ON fes_data_block_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DATA_BLOCK_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIB_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN - - NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIB_FES_DEV_INFO ON FES_DEV_INFO; -CREATE TRIGGER TIB_FES_DEV_INFO BEFORE INSERT ON FES_DEV_INFO FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIB_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_INFO() RETURNS TRIGGER AS $$ -DECLARE incVarFesDev1 int; -DECLARE incVarFesDev2 int; -BEGIN - - IF COALESCE(NEW.DEV_TP_NAME,'') <> '' THEN - BEGIN - - --获取最大的点号时已经自动加1,这里减掉 - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ACC')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_accuml( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+ incVarFesDev2, NEW.RTU_TAG,NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO,'', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ACC') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_analog( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME , PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, fes_rtu_para.RTU_NO , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, '', '', '', fes_dev_pt_temp_def.IS_FILTER, fes_dev_pt_temp_def.PERCENT, '0', '0', '0', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-32767', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_digital( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,ASS_DIG) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , '', '', '', fes_dev_pt_temp_def.FILTER_ERR, fes_dev_pt_temp_def.FILTER_DISTURB, fes_dev_pt_temp_def.DISTURB_TIME, fes_dev_pt_temp_def.REVERS, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,ASS_DIG - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_mix( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 )SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_dev_pt_temp_def.DESCRIPTION,fes_rtu_para.LOCATION_ID , - fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, '', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-32768', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME - AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA_CTRL')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_analog_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, BASE, COEFF, MAX_RANGE, MIN_RANGE, RTU_NO, DEV_TAG, DOT_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, SEQ_NO, RTU_TAG, DESCRIPTION, POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8)SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-32768', fes_rtu_para.RTU_NO,NEW.TAG_NAME, - row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.SEQ_NO,NEW.RTU_TAG,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA_CTRL') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG_CTRL')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_digital_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, DESCRIPTION, REVERS, POINT_TP_NAME, SEQ_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850,POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,CTRL_TYPE)SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG, - fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, NEW.TAG_NAME,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.REVERS, fes_dev_pt_temp_def.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,CTRL_TYPE - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG_CTRL') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX_CTRL')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_mix_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, BASE, DESCRIPTION, DOT_NO, COEFF, MIN_RANGE, MAX_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, SEQ_NO, POINT_TP_NAME, DEV_TAG, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 )SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - NEW.RTU_TAG,fes_rtu_para.RTU_NO,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.DESCRIPTION, - row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RATIO, '-32768', '99999999', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.TAG_NAME,NEW.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME - AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - - INSERT INTO fes_data_block( - TAG_NAME, BLOCK_ID, RTU_TAG, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG, PARA_INT3,PARA_INT4,IS_ENABLE) SELECT - concat(NEW.TAG_NAME,'.',getAfterLastDot(fes_data_block_temp.TAG_NAME)), fes_data_block_temp.BLOCK_ID,fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO,fes_data_block_temp.FUNC_CODE,fes_data_block_temp.STAR_ADDR,fes_data_block_temp.DATA_LEN, fes_data_block_temp.DATA_FARME_TYPE,fes_data_block_temp.REF_CYCLE,fes_data_block_temp.IS_CREATE_SOE,fes_data_block_temp.PARA_INT1, fes_data_block_temp.PARA_INT2, fes_data_block_temp.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,fes_data_block_temp.LD, fes_data_block_temp.CALL_MODE, fes_data_block_temp.DATA_SET, fes_data_block_temp.DATA_SET_TYPE,fes_data_block_temp.DATA_SET_CALL_TIME, fes_data_block_temp.REPORT_CTRL,fes_data_block_temp.TAG_NAME, NEW.TAG_NAME,PARA_INT3,PARA_INT4,IS_ENABLE - FROM fes_data_block_temp, fes_rtu_para WHERE fes_data_block_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_data_block_temp.BLOCK_ID; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_CONST')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_const( - TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME, PATH61850, POSITION61850,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,DZ_SEQ) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev1), fes_const_temp.DESCRIPTION,fes_const_temp.GROUP_NO,NEW.RTU_TAG, - fes_rtu_para.RTU_NO,row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev2,fes_const_temp.SEQ_NO,NEW.SUB_SYSTEM,NEW.LOCATION_ID,NEW.TAG_NAME,fes_const_temp.VALUE,fes_const_temp.VALUE_TYPE,fes_const_temp.UNIT_ID,fes_const_temp.VALUE_TEXT, fes_const_temp.VALUE_RATIO,fes_const_temp.VALUE_ADDED,fes_const_temp.VALUE_MAX,fes_const_temp.VALUE_MIN,fes_const_temp.VALUE_DEFAULT,fes_const_temp.VALUE_VERIFY,fes_const_temp.EX_INFO,fes_const_temp.TAG_NAME,PATH61850, POSITION61850,fes_const_temp.RES_PARA_INT1,fes_const_temp.RES_PARA_INT2,fes_const_temp.RES_PARA_INT3,fes_const_temp.RES_PARA_INT4,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,DZ_SEQ - FROM fes_const_temp, fes_rtu_para WHERE fes_const_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TI_FES_DEV_INFO AFTER INSERT ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.DEV_NAME <> OLD.DEV_NAME THEN - NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_FES_DEV_INFO ON FES_DEV_INFO; -CREATE TRIGGER TUB_FES_DEV_INFO BEFORE UPDATE ON FES_DEV_INFO FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM - OR NEW.RTU_NO <> OLD.RTU_NO - THEN - BEGIN - - update fes_accuml - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_accuml.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_accuml.DEV_TAG = OLD.TAG_NAME; - - - - update fes_analog - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog.DEV_TAG = OLD.TAG_NAME; - - - - update fes_digital - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital.DOT_NO ), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital.DEV_TAG = OLD.TAG_NAME; - - - - update fes_mix - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix.DEV_TAG = OLD.TAG_NAME; - - - - update fes_analog_ctrl - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog_ctrl.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog_ctrl.DEV_TAG = OLD.TAG_NAME; - - - - update fes_digital_ctrl - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital_ctrl.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital_ctrl.DEV_TAG = OLD.TAG_NAME; - - - - update fes_mix_ctrl - SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix_ctrl.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix_ctrl.DEV_TAG = OLD.TAG_NAME; - - - update fes_data_block - SET LOCATION_ID = NEW.LOCATION_ID, SUB_SYSTEM = NEW.SUB_SYSTEM, DEV_TAG = NEW.TAG_NAME, RTU_TAG = NEW.RTU_TAG, TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(fes_data_block.TAG_NAME)), RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_data_block.DEV_TAG = OLD.TAG_NAME; - - - update fes_const - SET LOCATION_ID = NEW.LOCATION_ID, SUB_SYSTEM = NEW.SUB_SYSTEM, DEV_TAG = NEW.TAG_NAME, RTU_TAG = NEW.RTU_TAG, RTU_NO = fes_rtu_para.RTU_NO, TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_const.DOT_NO) - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_const.DEV_TAG = OLD.TAG_NAME; - - - - END; - END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TU_FES_DEV_INFO AFTER UPDATE ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN -DELETE FROM fes_accuml WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_analog WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_digital WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_mix WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_analog_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_digital_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_mix_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_data_block WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_const WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TD_FES_DEV_INFO BEFORE DELETE ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TDA_FES_DEV_INFO AFTER DELETE ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - /* - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - INSERT INTO fes_accuml( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC')), fes_dev_info.RTU_TAG,fes_dev_info.TAG_NAME,NEW.SEQ_NO,'', '', '', '0', '1', fes_rtu_para.RTU_NO ,NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION ,NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - INSERT INTO fes_analog( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850, POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA')),'', '', '', 0, 0, '0', '0', '0', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - INSERT INTO fes_digital( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG')), '', '', '', 0, 0, 0, 0, fes_rtu_para.RTU_NO , NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - INSERT INTO fes_mix( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX'))), NEW.DESCRIPTION ,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX')), fes_dev_info.TAG_NAME, NEW.SEQ_NO, '', '', '', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - INSERT INTO fes_analog_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MAX_RANGE, MIN_RANGE, POINT_TP_NAME,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, '0', '1', 65536, 0, NEW.TAG_NAME ,NEW.RES_PARA_INT1,NEW.RES_PARA_INT2,NEW.RES_PARA_INT3,NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - INSERT INTO fes_digital_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, REVERS, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850, POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, 0, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850,NEW.YK_SELECT61850, NEW.YK_EXE61850, NEW.YK_CANCLE61850, NEW.YK_DOUBLE_SELECT61850, NEW.YK_DOUBLE_EXE61850, NEW.YK_DOUBLE_CANCLE61850, NEW.PULSE_TIME - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - INSERT INTO fes_mix_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MIN_RANGE, MAX_RANGE, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4,PATH61850,POSITION61850)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO,'0', '1', 0, 65536, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - */ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_pt_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TI_FES_DEV_PT_TEMP_DEF AFTER INSERT ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - /* - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - UPDATE fes_accuml SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - UPDATE fes_analog SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - UPDATE fes_digital SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - UPDATE fes_mix SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - UPDATE fes_analog_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - UPDATE fes_digital_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850, - YK_SELECT61850 = NEW.YK_SELECT61850, - YK_EXE61850 = NEW.YK_EXE61850, - YK_CANCLE61850 = NEW.YK_CANCLE61850, - YK_DOUBLE_SELECT61850 = NEW.YK_DOUBLE_SELECT61850, - YK_DOUBLE_EXE61850 = NEW.YK_DOUBLE_EXE61850, - YK_DOUBLE_CANCLE61850 = NEW.YK_DOUBLE_CANCLE61850, - PULSE_TIME = NEW.PULSE_TIME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - UPDATE fes_mix_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - --更新套件内容 - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - UPDATE temp_plugin_point_map_acc SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - UPDATE temp_plugin_point_map_ana SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - UPDATE temp_plugin_point_map_mix SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - UPDATE temp_plugin_point_map_dig SET - FES_TEMP_POINT_NAME1 = IF(FES_TEMP_POINT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME1), - FES_TEMP_POINT_NAME2 = IF(FES_TEMP_POINT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME2), - FES_TEMP_POINT_NAME3 = IF(FES_TEMP_POINT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME3), - FES_TEMP_POINT_NAME4 = IF(FES_TEMP_POINT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME4), - FES_TEMP_POINT_NAME5 = IF(FES_TEMP_POINT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME5) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - UPDATE temp_plugin_point_map_ana SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - UPDATE temp_plugin_point_map_mix SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - UPDATE temp_plugin_point_map_dig SET - FES_TEMP_OUT_NAME1 = IF(FES_TEMP_OUT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME1), - FES_TEMP_OUT_NAME2 = IF(FES_TEMP_OUT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME2), - FES_TEMP_OUT_NAME3 = IF(FES_TEMP_OUT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME3), - FES_TEMP_OUT_NAME4 = IF(FES_TEMP_OUT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME4), - FES_TEMP_OUT_NAME5 = IF(FES_TEMP_OUT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME5) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; - END IF; - END; - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TU_FES_DEV_PT_TEMP_DEF AFTER UPDATE ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - /* - IF OLD.POINT_TYPE = getFesPointType('FES_ACC') THEN - DELETE FROM fes_accuml WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF OLD.POINT_TYPE = getFesPointType('FES_ANA') THEN - DELETE FROM fes_analog WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF OLD.POINT_TYPE = getFesPointType('FES_DIG') THEN - DELETE FROM fes_digital WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_MIX') THEN - DELETE FROM fes_mix WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - DELETE FROM fes_analog_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - DELETE FROM fes_digital_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - DELETE FROM fes_mix_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TD_FES_DEV_PT_TEMP_DEF BEFORE DELETE ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TDA_FES_DEV_PT_TEMP_DEF AFTER DELETE ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TIA_FES_DEV_TEMP_DEF AFTER INSERT ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE fes_dev_pt_temp_def SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - UPDATE fes_const_temp SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - UPDATE fes_data_block_temp SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - /* - UPDATE fes_dev_info SET - DEV_TP_NAME = NEW.TAG_NAME, - DEV_TYPE_ID = NEW.DEV_TYPE_ID - WHERE DEV_TP_NAME = OLD.TAG_NAME; - */ - - --更新套件 - IF OLD.TAG_NAME != NEW.TAG_NAME THEN - BEGIN - UPDATE temp_plugin_fes_dev_map SET FES_TEMP_NAME = NEW.TAG_NAME WHERE FES_TEMP_NAME = OLD.TAG_NAME; - END; - END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TU_FES_DEV_TEMP_DEF AFTER UPDATE ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - DELETE FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = OLD.TAG_NAME; - DELETE FROM fes_const_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; - DELETE FROM fes_data_block_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; - --套件的处理 - DELETE FROM temp_plugin_fes_dev_map WHERE FES_TEMP_NAME = OLD.TAG_NAME; - /* - DELETE FROM fes_dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; - */ - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TD_FES_DEV_TEMP_DEF BEFORE DELETE ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_temp_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TDA_FES_DEV_TEMP_DEF AFTER DELETE ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_type_def', 'dev_type_id', '', NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TIA_FES_DEV_TYPE_DEF AFTER INSERT ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.DEV_TYPE_ID <> OLD.DEV_TYPE_ID THEN - BEGIN - UPDATE fes_dev_temp_def SET - DEV_TYPE_ID = NEW.DEV_TYPE_ID - WHERE DEV_TYPE_ID = OLD.DEV_TYPE_ID; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TU_FES_DEV_TYPE_DEF BEFORE UPDATE ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TUA_FES_DEV_TYPE_DEF AFTER UPDATE ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, '', getTableSubSystem('fes_dev_type_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TDA_FES_DEV_TYPE_DEF AFTER DELETE ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DIGITAL() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TI_FES_DIGITAL'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.DigitalMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesDigitalTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO1 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO2 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO3 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO4 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO5 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.DigitalMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TI_FES_DIGITAL AFTER INSERT ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TU_FES_DIGITAL'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.DigitalMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesDigitalTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN - UPDATE digital_map_to_fes SET - DOT_NO1 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN - UPDATE digital_map_to_fes SET - DOT_NO2 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN - UPDATE digital_map_to_fes SET - DOT_NO3 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN - UPDATE digital_map_to_fes SET - DOT_NO4 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN - UPDATE digital_map_to_fes SET - DOT_NO5 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO1 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO2 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO3 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO4 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO5 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.DigitalMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TU_FES_DIGITAL BEFORE UPDATE ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TUA_FES_DIGITAL AFTER UPDATE ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TD_FES_DIGITAL'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.DigitalMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesDigitalTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN - UPDATE digital_map_to_fes SET - DOT_NO1 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN - UPDATE digital_map_to_fes SET - DOT_NO2 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN - UPDATE digital_map_to_fes SET - DOT_NO3 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN - UPDATE digital_map_to_fes SET - DOT_NO4 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN - UPDATE digital_map_to_fes SET - DOT_NO5 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.DigitalMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TD_FES_DIGITAL AFTER DELETE ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DIGITAL_CTRL ON fes_digital_ctrl; -CREATE TRIGGER TIA_FES_DIGITAL_CTRL AFTER INSERT ON fes_digital_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DIGITAL_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ -BEGIN - --更新关联了此点的遥控点 - - IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO - THEN - BEGIN - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO1 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO2 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO3 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO4 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO5 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); - - END; - END IF; - - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DIGITAL_CTRL ON fes_digital_ctrl; -CREATE TRIGGER TU_FES_DIGITAL_CTRL AFTER UPDATE ON fes_digital_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ -BEGIN - UPDATE digital_control SET - OFFSET_NO1 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO2 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO3 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO4 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO5 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital_ctrl')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DIGITAL_CTRL ON fes_digital_ctrl; -CREATE TRIGGER TD_FES_DIGITAL_CTRL AFTER DELETE ON fes_digital_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_MIX() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TI_FES_MIX'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.MixMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesMixTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE mix_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.MixMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_MIX ON fes_mix; -CREATE TRIGGER TI_FES_MIX AFTER INSERT ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TU_FES_MIX'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.MixMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesMixTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE mix_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE mix_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.MixMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_MIX ON fes_mix; -CREATE TRIGGER TU_FES_MIX BEFORE UPDATE ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_MIX() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_MIX ON fes_mix; -CREATE TRIGGER TUA_FES_MIX AFTER UPDATE ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TD_FES_MIX'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.MixMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT cast(coalesce(CURRENT_SETTING('disable.FesMixTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE mix_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.MixMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_MIX ON fes_mix; -CREATE TRIGGER TD_FES_MIX AFTER DELETE ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_MIX_CTRL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_MIX_CTRL ON fes_mix_ctrl; -CREATE TRIGGER TIA_FES_MIX_CTRL AFTER INSERT ON fes_mix_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_MIX_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX_CTRL() RETURNS TRIGGER AS $$ -BEGIN - --更新关联了此点的遥控点 - - IF NEW.RTU_TAG = OLD.RTU_TAG AND NEW.DOT_NO= OLD.DOT_NO - THEN - BEGIN - UPDATE mix_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_MIX_CTRL ON fes_mix_ctrl; -CREATE TRIGGER TU_FES_MIX_CTRL AFTER UPDATE ON fes_mix_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_MIX_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX_CTRL() RETURNS TRIGGER AS $$ -BEGIN - UPDATE mix_control SET - OFFSET_NO = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix_ctrl')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_MIX_CTRL ON fes_mix_ctrl; -CREATE TRIGGER TD_FES_MIX_CTRL AFTER DELETE ON fes_mix_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_MIX_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_protocol', 'protocol_id', '', NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TIA_FES_PROTOCOL AFTER INSERT ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.PROTOCOL_ID <> OLD.PROTOCOL_ID THEN - BEGIN - UPDATE fes_channel_para SET - PROTO_TYPE = NEW.PROTOCOL_ID - WHERE PROTO_TYPE = OLD.PROTOCOL_ID; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TU_FES_PROTOCOL BEFORE UPDATE ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TUA_FES_PROTOCOL AFTER UPDATE ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, '', getTableSubSystem('fes_protocol')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TDA_FES_PROTOCOL AFTER DELETE ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIB_FES_RTU_PARA() RETURNS TRIGGER AS $$ - DECLARE chNo decimal(10,0) DEFAULT 0; -BEGIN - NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); - - SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; - - NEW.CHAN_NO = chNo; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIB_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TIB_FES_RTU_PARA BEFORE INSERT ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIB_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN - /* - * 不再产生默认设备 -INSERT INTO fes_dev_info -(TAG_NAME, DEV_NAME, LOCATION_ID, SUB_SYSTEM, DEV_ID, DEV_TYPE_ID, RTU_TAG, DEV_DESC, RTU_NO, DEV_TP_NAME) VALUES -(concat(NEW.TAG_NAME, '.', 'defaultDev' ),'defaultDev',NEW.LOCATION_ID,NEW.SUB_SYSTEM,'-1', '-1' ,NEW.TAG_NAME,'默认设备',NEW.RTU_NO ,'' ); -*/ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_rtu_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TI_FES_RTU_PARA AFTER INSERT ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_FES_RTU_PARA() RETURNS TRIGGER AS $$ - DECLARE chNo decimal(10,0) DEFAULT 0; -BEGIN - IF NEW.RTU_NAME <> OLD.RTU_NAME OR NEW.CHAN_TAG <> OLD.CHAN_TAG THEN - NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); - END IF; - - IF NEW.CHAN_TAG <> OLD.CHAN_TAG THEN - BEGIN - SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; - NEW.CHAN_NO = chNo; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TUB_FES_RTU_PARA BEFORE UPDATE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN - -IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_NO <> OLD.RTU_NO OR NEW.DESCRIPTION <> OLD.DESCRIPTION -THEN -BEGIN - - - UPDATE fes_dev_info SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)) , - DEV_DESC = DEV_DESC, - RTU_TAG = NEW.TAG_NAME, - RTU_NO = NEW.RTU_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE fes_data_block SET - RTU_NO = NEW.RTU_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE RTU_NO = OLD.RTU_NO; - - IF NEW.RTU_NO <> OLD.RTU_NO THEN - BEGIN - UPDATE dev_group SET - RTU_NO = NEW.RTU_NO - WHERE RTU_NO = OLD.RTU_NO; - END; - END IF; - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - --更新关联的后台测点 - UPDATE accuml SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE analog SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE digital SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE mix SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - - END; - END IF; - -END; -END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TU_FES_RTU_PARA AFTER UPDATE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN -DELETE FROM fes_dev_info WHERE RTU_TAG = OLD.TAG_NAME; -DELETE FROM fes_data_block WHERE RTU_NO = OLD.RTU_NO; ---更新关联的后台测点 -UPDATE accuml SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE analog SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE digital SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE mix SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TD_FES_RTU_PARA BEFORE DELETE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_rtu_para')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TDA_FES_RTU_PARA AFTER DELETE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --仅仅修改时标 - - NEW.TIMEFLAG = floor(extract(epoch from now())); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TI_LINKAGE_ACTION BEFORE INSERT ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_action', 'name', '', NEW.NAME, getTableSubSystem('linkage_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TIA_LINKAGE_ACTION AFTER INSERT ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应功能 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_function SET - TIMEFLAG = NEW.TIMEFLAG, - ACTION_NAME = NEW.NAME - WHERE ACTION_NAME = OLD.NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TU_LINKAGE_ACTION BEFORE UPDATE ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TUA_LINKAGE_ACTION AFTER UPDATE ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此动作的功能 - DELETE FROM linkage_function WHERE ACTION_NAME = OLD.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_action', 'name', OLD.NAME, '', getTableSubSystem('linkage_action')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TD_LINKAGE_ACTION AFTER DELETE ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.LinkageSettingTrigger" = 1; - - CALL kbdDebugInfo('linkage_define Insert','linkage_define Insert'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageDefineTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = NEW.LINKAGE_NAME; - END; - END IF; - - SET SESSION "disable.LinkageSettingTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TI_LINKAGE_DEFINE BEFORE INSERT ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_define', 'linkage_name,func_name', '', concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TIA_LINKAGE_DEFINE AFTER INSERT ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.LinkageSettingTrigger" = 1; - - CALL kbdDebugInfo('linkage_define update','linkage_define update'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageDefineTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = OLD.LINKAGE_NAME; - END; - END IF; - - SET SESSION "disable.LinkageSettingTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TU_LINKAGE_DEFINE BEFORE UPDATE ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TUA_LINKAGE_DEFINE AFTER UPDATE ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.LinkageSettingTrigger" = 1; - - CALL kbdDebugInfo('linkage_define delete','linkage_define delete'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageDefineTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - UPDATE linkage_setting SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE NAME = OLD.LINKAGE_NAME; - END; - END IF; - - SET SESSION "disable.LinkageSettingTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('linkage_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TD_LINKAGE_DEFINE AFTER DELETE ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --仅仅修改时标 - NEW.TIMEFLAG = floor(extract(epoch from now())); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TI_LINKAGE_FUNCTION BEFORE INSERT ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TIA_LINKAGE_FUNCTION AFTER INSERT ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应联动功能关系表 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_define SET - TIMEFLAG = NEW.TIMEFLAG, - FUNC_NAME = NEW.NAME - WHERE FUNC_NAME = OLD.NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TU_LINKAGE_FUNCTION BEFORE UPDATE ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TUA_LINKAGE_FUNCTION AFTER UPDATE ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此功能的联动定义 - --检查功能是否被删除 - IF NOT EXISTS (SELECT * FROM linkage_function WHERE NAME = OLD.NAME) THEN - BEGIN - DELETE FROM linkage_define WHERE FUNC_NAME = OLD.NAME; - END; - ELSE - BEGIN - --修改时标 - UPDATE linkage_define SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE FUNC_NAME = OLD.NAME; - END; - END IF; - - - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('linkage_function')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TD_LINKAGE_FUNCTION AFTER DELETE ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.LinkageDefineTrigger" = 1; - - CALL kbdDebugInfo('linkage_setting insert','linkage_setting insert'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageSettingTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - END; - END IF; - - SET SESSION "disable.LinkageDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TI_LINKAGE_SETTING BEFORE INSERT ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_setting', 'name', '', NEW.NAME, getTableSubSystem('linkage_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TIA_LINKAGE_SETTING AFTER INSERT ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.LinkageDefineTrigger" = 1; - - CALL kbdDebugInfo('linkage_setting update','linkage_setting update'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageSettingTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - IF NEW.NAME<>OLD.NAME THEN - UPDATE linkage_define SET - LINKAGE_NAME = NEW.NAME - WHERE LINKAGE_NAME = OLD.NAME; - END IF; - END; - END IF; - - SET SESSION "disable.LinkageDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TU_LINKAGE_SETTING BEFORE UPDATE ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TUA_LINKAGE_SETTING AFTER UPDATE ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --删除关联了此联动的功能关联 - --避免触发器循环 - SET SESSION "disable.LinkageDefineTrigger" = 1; - - CALL kbdDebugInfo('linkage_setting delete','linkage_setting delete'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageSettingTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - DELETE FROM linkage_define WHERE LINKAGE_NAME = OLD.NAME; - END; - END IF; - - SET SESSION "disable.LinkageDefineTrigger" = 0; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_setting', 'name', OLD.NAME, '', getTableSubSystem('linkage_setting')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TD_LINKAGE_SETTING AFTER DELETE ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_MIX_CONTROL ON mix_control; -CREATE TRIGGER TIA_MIX_CONTROL AFTER INSERT ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN - - --修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - NEW.OFFSET_NO = '-1'; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_MIX_CONTROL ON mix_control; -CREATE TRIGGER TU_MIX_CONTROL BEFORE UPDATE ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_MIX_CONTROL ON mix_control; -CREATE TRIGGER TUA_MIX_CONTROL AFTER UPDATE ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_control')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_MIX_CONTROL ON mix_control; -CREATE TRIGGER TDA_MIX_CONTROL AFTER DELETE ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - CALL kbdDebugInfo('FES MIX update','In TI_MIX_MAP_TO_FES'); - - SET SESSION "disable.FesMixTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.MixMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - SET SESSION "disable.FesMixTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TI_MIX_MAP_TO_FES AFTER INSERT ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - - SET SESSION "disable.FesMixTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.MixMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET SESSION "disable.FesMixTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TU_MIX_MAP_TO_FES BEFORE UPDATE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TUA_MIX_MAP_TO_FES AFTER UPDATE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - CALL kbdDebugInfo('FES MIX update','In TD_MIX_MAP_TO_FES'); - - SET SESSION "disable.FesMixTrigger" = 1; - - SELECT cast(coalesce(CURRENT_SETTING('disable.MixMapToFesTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesMixTrigger" = 0; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TD_MIX_MAP_TO_FES BEFORE DELETE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('mix_map_to_fes')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TDA_MIX_MAP_TO_FES AFTER DELETE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - INSERT INTO mix( - TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, METHOD, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID) SELECT - concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, '0', '0', '', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,'', '' - FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - - INSERT INTO temp_plugin_point_map_mix - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TI_MIX_TEMP_DEFINE AFTER INSERT ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE mix SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE POINT_TP_NAME=OLD.TAG_NAME; - - UPDATE mix_control SET - CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, - CTRL_TYPE = NEW.CTRL_TYPE, - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - - UPDATE mix_map_to_fes SET - POINT_TP_NAME = NEW.TAG_NAME, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - IS_FILTER_ERROR = NEW.IS_FILTER_ERROR, - IS_FILTER_DISTURB = NEW.IS_FILTER_DISTURB, - DISTURB_TIME = NEW.DISTURB_TIME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_mix - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TU_MIX_TEMP_DEFINE AFTER UPDATE ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM temp_plugin_point_map_mix WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - /* - DELETE FROM mix WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TD_MIX_TEMP_DEFINE BEFORE DELETE ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_temp_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TDA_MIX_TEMP_DEFINE AFTER DELETE ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('opc_config_define')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_DEFINE ON opc_config_define; -CREATE TRIGGER TIA_OPC_CONFIG_DEFINE AFTER INSERT ON opc_config_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('opc_config_define')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_DEFINE ON opc_config_define; -CREATE TRIGGER TUA_OPC_CONFIG_DEFINE AFTER UPDATE ON opc_config_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('opc_config_define')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_DEFINE ON opc_config_define; -CREATE TRIGGER TDA_OPC_CONFIG_DEFINE AFTER DELETE ON opc_config_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_version', 'domain_id,sub_system', '', concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_VERSION ON opc_config_version; -CREATE TRIGGER TIA_OPC_CONFIG_VERSION AFTER INSERT ON opc_config_version FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_VERSION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_VERSION ON opc_config_version; -CREATE TRIGGER TUA_OPC_CONFIG_VERSION AFTER UPDATE ON opc_config_version FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_VERSION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), '', getTableSubSystem('opc_config_version')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_VERSION ON opc_config_version; -CREATE TRIGGER TDA_OPC_CONFIG_VERSION AFTER DELETE ON opc_config_version FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_VERSION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_area_info', 'id', '', NEW.ID, getTableSubSystem('pa_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_AREA_INFO ON pa_area_info; -CREATE TRIGGER TIA_PA_AREA_INFO AFTER INSERT ON pa_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_AREA_INFO ON pa_area_info; -CREATE TRIGGER TUA_PA_AREA_INFO AFTER UPDATE ON pa_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_area_info', 'id', OLD.ID, '', getTableSubSystem('pa_area_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_AREA_INFO ON pa_area_info; -CREATE TRIGGER TDA_PA_AREA_INFO AFTER DELETE ON pa_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_audio_info', 'id', '', NEW.ID, getTableSubSystem('pa_audio_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_AUDIO_INFO ON pa_audio_info; -CREATE TRIGGER TIA_PA_AUDIO_INFO AFTER INSERT ON pa_audio_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_AUDIO_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_audio_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_audio_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_AUDIO_INFO ON pa_audio_info; -CREATE TRIGGER TUA_PA_AUDIO_INFO AFTER UPDATE ON pa_audio_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_AUDIO_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_audio_info', 'id', OLD.ID, '', getTableSubSystem('pa_audio_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_AUDIO_INFO ON pa_audio_info; -CREATE TRIGGER TDA_PA_AUDIO_INFO AFTER DELETE ON pa_audio_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_AUDIO_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_broadcast_group', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_BROADCAST_GROUP ON pa_broadcast_group; -CREATE TRIGGER TIA_PA_BROADCAST_GROUP AFTER INSERT ON pa_broadcast_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_BROADCAST_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_BROADCAST_GROUP ON pa_broadcast_group; -CREATE TRIGGER TUA_PA_BROADCAST_GROUP AFTER UPDATE ON pa_broadcast_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_BROADCAST_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_broadcast_group')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_BROADCAST_GROUP ON pa_broadcast_group; -CREATE TRIGGER TDA_PA_BROADCAST_GROUP AFTER DELETE ON pa_broadcast_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_BROADCAST_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_CTRL_PARAM ON pa_ctrl_param; -CREATE TRIGGER TIA_PA_CTRL_PARAM AFTER INSERT ON pa_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_CTRL_PARAM ON pa_ctrl_param; -CREATE TRIGGER TUA_PA_CTRL_PARAM AFTER UPDATE ON pa_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_ctrl_param')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_CTRL_PARAM ON pa_ctrl_param; -CREATE TRIGGER TDA_PA_CTRL_PARAM AFTER DELETE ON pa_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_LOCATION_AREA_DEF ON pa_location_area_def; -CREATE TRIGGER TIA_PA_LOCATION_AREA_DEF AFTER INSERT ON pa_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_LOCATION_AREA_DEF ON pa_location_area_def; -CREATE TRIGGER TUA_PA_LOCATION_AREA_DEF AFTER UPDATE ON pa_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pa_location_area_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_LOCATION_AREA_DEF ON pa_location_area_def; -CREATE TRIGGER TDA_PA_LOCATION_AREA_DEF AFTER DELETE ON pa_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_seq_def', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; -CREATE TRIGGER TIA_PA_LOCATION_SEQ_DEF AFTER INSERT ON pa_location_seq_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_SEQ_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; -CREATE TRIGGER TUA_PA_LOCATION_SEQ_DEF AFTER UPDATE ON pa_location_seq_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_SEQ_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_location_seq_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; -CREATE TRIGGER TDA_PA_LOCATION_SEQ_DEF AFTER DELETE ON pa_location_seq_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_SEQ_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_def', 'id', '', NEW.ID, getTableSubSystem('pa_operator_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_DEF ON pa_operator_def; -CREATE TRIGGER TIA_PA_OPERATOR_DEF AFTER INSERT ON pa_operator_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_def', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_operator_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_DEF ON pa_operator_def; -CREATE TRIGGER TUA_PA_OPERATOR_DEF AFTER UPDATE ON pa_operator_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_def', 'id', OLD.ID, '', getTableSubSystem('pa_operator_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_DEF ON pa_operator_def; -CREATE TRIGGER TDA_PA_OPERATOR_DEF AFTER DELETE ON pa_operator_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_map', 'user_grp_id', '', NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_MAP ON pa_operator_map; -CREATE TRIGGER TIA_PA_OPERATOR_MAP AFTER INSERT ON pa_operator_map FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_MAP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_MAP ON pa_operator_map; -CREATE TRIGGER TUA_PA_OPERATOR_MAP AFTER UPDATE ON pa_operator_map FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_MAP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, '', getTableSubSystem('pa_operator_map')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_MAP ON pa_operator_map; -CREATE TRIGGER TDA_PA_OPERATOR_MAP AFTER DELETE ON pa_operator_map FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_MAP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_timed_audio', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_TIMED_AUDIO ON pa_timed_audio; -CREATE TRIGGER TIA_PA_TIMED_AUDIO AFTER INSERT ON pa_timed_audio FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_TIMED_AUDIO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_TIMED_AUDIO ON pa_timed_audio; -CREATE TRIGGER TUA_PA_TIMED_AUDIO AFTER UPDATE ON pa_timed_audio FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_TIMED_AUDIO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_timed_audio')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_TIMED_AUDIO ON pa_timed_audio; -CREATE TRIGGER TDA_PA_TIMED_AUDIO AFTER DELETE ON pa_timed_audio FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_TIMED_AUDIO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_area_info', 'id', '', NEW.ID, getTableSubSystem('pis_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_AREA_INFO ON pis_area_info; -CREATE TRIGGER TIA_PIS_AREA_INFO AFTER INSERT ON pis_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pis_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_AREA_INFO ON pis_area_info; -CREATE TRIGGER TUA_PIS_AREA_INFO AFTER UPDATE ON pis_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_area_info', 'id', OLD.ID, '', getTableSubSystem('pis_area_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_AREA_INFO ON pis_area_info; -CREATE TRIGGER TDA_PIS_AREA_INFO AFTER DELETE ON pis_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'pis_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_CTRL_PARAM ON pis_ctrl_param; -CREATE TRIGGER TIA_PIS_CTRL_PARAM AFTER INSERT ON pis_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_CTRL_PARAM ON pis_ctrl_param; -CREATE TRIGGER TUA_PIS_CTRL_PARAM AFTER UPDATE ON pis_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pis_ctrl_param')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_CTRL_PARAM ON pis_ctrl_param; -CREATE TRIGGER TDA_PIS_CTRL_PARAM AFTER DELETE ON pis_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_display_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_DISPLAY_INFO ON pis_display_info; -CREATE TRIGGER TIA_PIS_DISPLAY_INFO AFTER INSERT ON pis_display_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_DISPLAY_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_DISPLAY_INFO ON pis_display_info; -CREATE TRIGGER TUA_PIS_DISPLAY_INFO AFTER UPDATE ON pis_display_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_DISPLAY_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_display_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_DISPLAY_INFO ON pis_display_info; -CREATE TRIGGER TDA_PIS_DISPLAY_INFO AFTER DELETE ON pis_display_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_DISPLAY_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_fes_location_info', 'pis_station_id', '', NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; -CREATE TRIGGER TIA_PIS_FES_LOCATION_INFO AFTER INSERT ON pis_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; -CREATE TRIGGER TUA_PIS_FES_LOCATION_INFO AFTER UPDATE ON pis_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, '', getTableSubSystem('pis_fes_location_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; -CREATE TRIGGER TDA_PIS_FES_LOCATION_INFO AFTER DELETE ON pis_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; -CREATE TRIGGER TIA_PIS_LOCATION_AREA_DEF AFTER INSERT ON pis_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; -CREATE TRIGGER TUA_PIS_LOCATION_AREA_DEF AFTER UPDATE ON pis_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pis_location_area_def')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; -CREATE TRIGGER TDA_PIS_LOCATION_AREA_DEF AFTER DELETE ON pis_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_message_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_MESSAGE_INFO ON pis_message_info; -CREATE TRIGGER TIA_PIS_MESSAGE_INFO AFTER INSERT ON pis_message_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_MESSAGE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_MESSAGE_INFO ON pis_message_info; -CREATE TRIGGER TUA_PIS_MESSAGE_INFO AFTER UPDATE ON pis_message_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_MESSAGE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_message_info')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_MESSAGE_INFO ON pis_message_info; -CREATE TRIGGER TDA_PIS_MESSAGE_INFO AFTER DELETE ON pis_message_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_MESSAGE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_DATASET() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_dataset', 'id', '', NEW.id, getTableSubSystem('scl_dataset')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_DATASET ON scl_dataset; -CREATE TRIGGER TIA_SCL_DATASET AFTER INSERT ON scl_dataset FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_DATASET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_DATASET() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_dataset', 'id', OLD.id, NEW.id, getTableSubSystem('scl_dataset')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_DATASET ON scl_dataset; -CREATE TRIGGER TUA_SCL_DATASET AFTER UPDATE ON scl_dataset FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_DATASET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_DATASET() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_dataset', 'id', OLD.id, '', getTableSubSystem('scl_dataset')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_DATASET ON scl_dataset; -CREATE TRIGGER TDA_SCL_DATASET AFTER DELETE ON scl_dataset FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_DATASET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_FCDA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_fcda', 'id', '', NEW.id, getTableSubSystem('scl_fcda')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_FCDA ON scl_fcda; -CREATE TRIGGER TIA_SCL_FCDA AFTER INSERT ON scl_fcda FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_FCDA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_FCDA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_fcda', 'id', OLD.id, NEW.id, getTableSubSystem('scl_fcda')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_FCDA ON scl_fcda; -CREATE TRIGGER TUA_SCL_FCDA AFTER UPDATE ON scl_fcda FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_FCDA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_FCDA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_fcda', 'id', OLD.id, '', getTableSubSystem('scl_fcda')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_FCDA ON scl_fcda; -CREATE TRIGGER TDA_SCL_FCDA AFTER DELETE ON scl_fcda FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_FCDA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_LCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_lcb', 'id', '', NEW.id, getTableSubSystem('scl_lcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_LCB ON scl_lcb; -CREATE TRIGGER TIA_SCL_LCB AFTER INSERT ON scl_lcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_LCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_LCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_lcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_lcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_LCB ON scl_lcb; -CREATE TRIGGER TUA_SCL_LCB AFTER UPDATE ON scl_lcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_LCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_LCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_lcb', 'id', OLD.id, '', getTableSubSystem('scl_lcb')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_LCB ON scl_lcb; -CREATE TRIGGER TDA_SCL_LCB AFTER DELETE ON scl_lcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_LCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_rcb', 'id', '', NEW.id, getTableSubSystem('scl_rcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_RCB ON scl_rcb; -CREATE TRIGGER TIA_SCL_RCB AFTER INSERT ON scl_rcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_RCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_rcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_rcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_RCB ON scl_rcb; -CREATE TRIGGER TUA_SCL_RCB AFTER UPDATE ON scl_rcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_RCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_rcb', 'id', OLD.id, '', getTableSubSystem('scl_rcb')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_RCB ON scl_rcb; -CREATE TRIGGER TDA_SCL_RCB AFTER DELETE ON scl_rcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_RCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RUNTIME() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_runtime', 'id', '', NEW.id, getTableSubSystem('scl_runtime')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_RUNTIME ON scl_runtime; -CREATE TRIGGER TIA_SCL_RUNTIME AFTER INSERT ON scl_runtime FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_RUNTIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RUNTIME() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_runtime', 'id', OLD.id, NEW.id, getTableSubSystem('scl_runtime')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_RUNTIME ON scl_runtime; -CREATE TRIGGER TUA_SCL_RUNTIME AFTER UPDATE ON scl_runtime FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_RUNTIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RUNTIME() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_runtime', 'id', OLD.id, '', getTableSubSystem('scl_runtime')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_RUNTIME ON scl_runtime; -CREATE TRIGGER TDA_SCL_RUNTIME AFTER DELETE ON scl_runtime FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_RUNTIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_SGCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_sgcb', 'id', '', NEW.id, getTableSubSystem('scl_sgcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_SGCB ON scl_sgcb; -CREATE TRIGGER TIA_SCL_SGCB AFTER INSERT ON scl_sgcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_SGCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_SGCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_sgcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_sgcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_SGCB ON scl_sgcb; -CREATE TRIGGER TUA_SCL_SGCB AFTER UPDATE ON scl_sgcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_SGCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_SGCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_sgcb', 'id', OLD.id, '', getTableSubSystem('scl_sgcb')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_SGCB ON scl_sgcb; -CREATE TRIGGER TDA_SCL_SGCB AFTER DELETE ON scl_sgcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_SGCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TI_SEQUENCE_ACTION BEFORE INSERT ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_action', 'name', '', NEW.NAME, getTableSubSystem('sequence_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TIA_SEQUENCE_ACTION AFTER INSERT ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应功能 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_function SET - TIMEFLAG = NEW.TIMEFLAG, - ACTION_NAME = NEW.NAME - WHERE ACTION_NAME = OLD.NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TU_SEQUENCE_ACTION BEFORE UPDATE ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TUA_SEQUENCE_ACTION AFTER UPDATE ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此动作的功能 - DELETE FROM sequence_function WHERE ACTION_NAME = OLD.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_action', 'name', OLD.NAME, '', getTableSubSystem('sequence_action')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TD_SEQUENCE_ACTION AFTER DELETE ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.SequenceSettingTrigger" = 1; - - CALL kbdDebugInfo('sequence_define Insert','sequence_define Insert'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceDefineTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = NEW.SEQ_NAME; - END; - END IF; - - SET SESSION "disable.SequenceSettingTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TI_SEQUENCE_DEFINE BEFORE INSERT ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_define', 'seq_name,func_name', '', concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TIA_SEQUENCE_DEFINE AFTER INSERT ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.SequenceSettingTrigger" = 1; - - CALL kbdDebugInfo('sequence_define update','sequence_define update'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceDefineTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = OLD.SEQ_NAME; - END; - END IF; - - SET SESSION "disable.SequenceSettingTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TU_SEQUENCE_DEFINE BEFORE UPDATE ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TUA_SEQUENCE_DEFINE AFTER UPDATE ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.SequenceSettingTrigger" = 1; - - CALL kbdDebugInfo('sequence_define delete','sequence_define delete'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceDefineTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - UPDATE sequence_setting SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE NAME = OLD.SEQ_NAME; - END; - END IF; - - SET SESSION "disable.SequenceSettingTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('sequence_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TD_SEQUENCE_DEFINE AFTER DELETE ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --仅仅修改时标 - NEW.TIMEFLAG = floor(extract(epoch from now())); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TI_SEQUENCE_FUNCTION BEFORE INSERT ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - UPDATE sequence_define SET - TIMEFLAG = NEW.TIMEFLAG - WHERE FUNC_NAME = NEW.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TIA_SEQUENCE_FUNCTION AFTER INSERT ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应联动功能关系表 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_define SET - TIMEFLAG = NEW.TIMEFLAG, - FUNC_NAME = NEW.NAME - WHERE FUNC_NAME = OLD.NAME; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TU_SEQUENCE_FUNCTION BEFORE UPDATE ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TUA_SEQUENCE_FUNCTION AFTER UPDATE ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此功能的联动定义 - --检查功能是否被删除 - IF NOT EXISTS (SELECT * FROM sequence_function WHERE NAME = OLD.NAME) THEN - BEGIN - DELETE FROM sequence_define WHERE FUNC_NAME = OLD.NAME; - END; - ELSE - BEGIN - --修改时标 - UPDATE sequence_define SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE FUNC_NAME = OLD.NAME; - END; - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('sequence_function')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TD_SEQUENCE_FUNCTION AFTER DELETE ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.SequenceDefineTrigger" = 1; - - CALL kbdDebugInfo('sequence_setting insert','sequence_setting insert'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceSettingTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - END; - END IF; - - SET SESSION "disable.SequenceDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TI_SEQUENCE_SETTING BEFORE INSERT ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_setting', 'name', '', NEW.NAME, getTableSubSystem('sequence_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TIA_SEQUENCE_SETTING AFTER INSERT ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.SequenceDefineTrigger" = 1; - - CALL kbdDebugInfo('sequence_setting update','sequence_setting update'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceSettingTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - IF NEW.NAME<>OLD.NAME THEN - UPDATE sequence_define SET - SEQ_NAME = NEW.NAME - WHERE SEQ_NAME = OLD.NAME; - END IF; - END; - END IF; - - SET SESSION "disable.SequenceDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TU_SEQUENCE_SETTING BEFORE UPDATE ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TUA_SEQUENCE_SETTING AFTER UPDATE ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --删除关联了此联动的功能关联 - --避免触发器循环 - SET SESSION "disable.SequenceDefineTrigger" = 1; - - CALL kbdDebugInfo('sequence_setting delete','sequence_setting delete'); - - SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceSettingTrigger','true'),'0')as int) INTO flag; - IF flag = 0 THEN - BEGIN - DELETE FROM sequence_define WHERE SEQ_NAME = OLD.NAME; - END; - END IF; - - SET SESSION "disable.SequenceDefineTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_setting', 'name', OLD.NAME, '', getTableSubSystem('sequence_setting')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TD_SEQUENCE_SETTING AFTER DELETE ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_DEF() RETURNS TRIGGER AS $$ -BEGIN - - --插入测点分组表 - --插入测点表 - --插入时间测点变 - --插入返回分组表 - --插入返回参数表 - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) , DESCRIPTION, NEW.INST_TAG, SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG, LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, '', SORT, '', NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 1; - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, floor(extract(epoch from now())),SORT, '', NEW.INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 2; - - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, NEW.INST_TAG,SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG, LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, 1, '', SORT, '', 0, 0, NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_def', 'inst_tag', '', NEW.INST_TAG, getTableSubSystem('stat_inst_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_DEF ON stat_inst_def; -CREATE TRIGGER TIA_STAT_INST_DEF AFTER INSERT ON stat_inst_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_DEF() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.INST_TAG <> OLD.INST_TAG THEN - BEGIN - UPDATE stat_inst_para_grp - SET INST_TAG = NEW.INST_TAG, - PARA_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_GRP_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_para_point - SET INST_TAG = NEW.INST_TAG, - PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_para_time - SET INST_TAG = NEW.INST_TAG, - PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_ret_grp - SET INST_TAG = NEW.INST_TAG, - RET_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_GRP_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_ret_para - SET INST_TAG = NEW.INST_TAG, - RET_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - END; - END IF; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, NEW.INST_TAG, getTableSubSystem('stat_inst_def')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_DEF ON stat_inst_def; -CREATE TRIGGER TUA_STAT_INST_DEF AFTER UPDATE ON stat_inst_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_DEF() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM stat_inst_para_grp WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_para_point WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_para_time WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_ret_grp WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_ret_para WHERE INST_TAG = OLD.INST_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, '', getTableSubSystem('stat_inst_def')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_DEF ON stat_inst_def; -CREATE TRIGGER TDA_STAT_INST_DEF AFTER DELETE ON stat_inst_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_grp', 'para_grp_tag', '', NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_GRP ON stat_inst_para_grp; -CREATE TRIGGER TIA_STAT_INST_PARA_GRP AFTER INSERT ON stat_inst_para_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.PARA_GRP_TAG = OLD.PARA_GRP_TAG - THEN RETURN NEW; - END IF; - - UPDATE stat_inst_para_point - SET PARA_GRP_TAG = NEW.PARA_GRP_TAG - WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - UPDATE stat_inst_para_time - SET PARA_GRP_TAG = NEW.PARA_GRP_TAG - WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_GRP ON stat_inst_para_grp; -CREATE TRIGGER TUA_STAT_INST_PARA_GRP AFTER UPDATE ON stat_inst_para_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM stat_inst_para_point WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - DELETE FROM stat_inst_para_time WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, '', getTableSubSystem('stat_inst_para_grp')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_GRP ON stat_inst_para_grp; -CREATE TRIGGER TDA_STAT_INST_PARA_GRP AFTER DELETE ON stat_inst_para_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_point', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_POINT ON stat_inst_para_point; -CREATE TRIGGER TIA_STAT_INST_PARA_POINT AFTER INSERT ON stat_inst_para_point FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_POINT(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_POINT ON stat_inst_para_point; -CREATE TRIGGER TUA_STAT_INST_PARA_POINT AFTER UPDATE ON stat_inst_para_point FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_POINT(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_point')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_POINT ON stat_inst_para_point; -CREATE TRIGGER TDA_STAT_INST_PARA_POINT AFTER DELETE ON stat_inst_para_point FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_POINT(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_time', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_TIME ON stat_inst_para_time; -CREATE TRIGGER TIA_STAT_INST_PARA_TIME AFTER INSERT ON stat_inst_para_time FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_TIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_TIME ON stat_inst_para_time; -CREATE TRIGGER TUA_STAT_INST_PARA_TIME AFTER UPDATE ON stat_inst_para_time FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_TIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_time')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_TIME ON stat_inst_para_time; -CREATE TRIGGER TDA_STAT_INST_PARA_TIME AFTER DELETE ON stat_inst_para_time FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_TIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_grp', 'ret_grp_tag', '', NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_GRP ON stat_inst_ret_grp; -CREATE TRIGGER TIA_STAT_INST_RET_GRP AFTER INSERT ON stat_inst_ret_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.RET_GRP_TAG = OLD.RET_GRP_TAG - THEN RETURN NEW; - END IF; - - UPDATE stat_inst_ret_para - SET PARA_GRP_TAG = NEW.RET_GRP_TAG - WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_GRP ON stat_inst_ret_grp; -CREATE TRIGGER TUA_STAT_INST_RET_GRP AFTER UPDATE ON stat_inst_ret_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM stat_inst_ret_para WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, '', getTableSubSystem('stat_inst_ret_grp')); - END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_GRP ON stat_inst_ret_grp; -CREATE TRIGGER TDA_STAT_INST_RET_GRP AFTER DELETE ON stat_inst_ret_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_para', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_PARA ON stat_inst_ret_para; -CREATE TRIGGER TIA_STAT_INST_RET_PARA AFTER INSERT ON stat_inst_ret_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_PARA ON stat_inst_ret_para; -CREATE TRIGGER TUA_STAT_INST_RET_PARA AFTER UPDATE ON stat_inst_ret_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_inst_ret_para')); - END IF; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_PARA ON stat_inst_ret_para; -CREATE TRIGGER TDA_STAT_INST_RET_PARA AFTER DELETE ON stat_inst_ret_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('STAT_LINK_DEF')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_LINK_DEF ON STAT_LINK_DEF; -CREATE TRIGGER TIA_STAT_LINK_DEF AFTER INSERT ON STAT_LINK_DEF FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - UPDATE stat_link_para - SET LINK_TAG = NEW.TAG_NAME, - TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) - WHERE LINK_TAG = OLD.TAG_NAME; - UPDATE stat_link_ret - SET LINK_TAG = NEW.TAG_NAME, - TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) - WHERE LINK_TAG = OLD.TAG_NAME; - - END; - END IF; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_def')); - END IF; - UPDATE stat_link_para - SET STAT_PARA_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_PARA_TAG)) - WHERE LINK_TAG = OLD.TAG_NAME; - UPDATE stat_link_ret - SET STAT_RET_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_RET_TAG)) - WHERE LINK_TAG = OLD.TAG_NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_LINK_DEF ON stat_link_def; -CREATE TRIGGER TUA_STAT_LINK_DEF AFTER UPDATE ON stat_link_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ -BEGIN - --删除对应的模板点 - DELETE FROM stat_link_para WHERE LINK_TAG= OLD.TAG_NAME; - DELETE FROM stat_link_ret WHERE LINK_TAG = OLD.TAG_NAME; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_def')); - END IF; - - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_LINK_DEF ON stat_link_def; -CREATE TRIGGER TDA_STAT_LINK_DEF AFTER DELETE ON stat_link_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_LINK_PARA ON stat_link_para; -CREATE TRIGGER TIA_STAT_LINK_PARA AFTER INSERT ON stat_link_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_LINK_PARA ON stat_link_para; -CREATE TRIGGER TUA_STAT_LINK_PARA AFTER UPDATE ON stat_link_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_para')); - END IF; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_LINK_PARA ON stat_link_para; -CREATE TRIGGER TDA_STAT_LINK_PARA AFTER DELETE ON stat_link_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_RET() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_ret', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_LINK_RET ON stat_link_ret; -CREATE TRIGGER TIA_STAT_LINK_RET AFTER INSERT ON stat_link_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_RET() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_LINK_RET ON stat_link_ret; -CREATE TRIGGER TUA_STAT_LINK_RET AFTER UPDATE ON stat_link_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_RET() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_ret')); - END IF; - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_LINK_RET ON stat_link_ret; -CREATE TRIGGER TDA_STAT_LINK_RET AFTER DELETE ON stat_link_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_def', 'template_tag', '', NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_DEF ON stat_template_def; -CREATE TRIGGER TIA_STAT_TEMPLATE_DEF AFTER INSERT ON stat_template_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ -BEGIN - UPDATE stat_template_para - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, - PARA_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - UPDATE stat_template_ret - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, - RET_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(RET_TAG)) - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - UPDATE stat_inst_def - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - UPDATE stat_link_def - SET STAT_TEMP_TAG = NEW.TEMPLATE_TAG - WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_DEF ON stat_template_def; -CREATE TRIGGER TUA_STAT_TEMPLATE_DEF AFTER UPDATE ON stat_template_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ -BEGIN - --删除对应关联 - DELETE FROM stat_link_def WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; - - --删除对应实例 - DELETE FROM stat_inst_def WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - --删除对应的模板点 - DELETE FROM stat_template_para WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - DELETE FROM stat_template_ret WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, '', getTableSubSystem('stat_template_def')); - END IF; - - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_DEF ON stat_template_def; -CREATE TRIGGER TDA_STAT_TEMPLATE_DEF AFTER DELETE ON stat_template_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ -BEGIN - --插入对应的实例 - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_para', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_template_para')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_PARA ON stat_template_para; -CREATE TRIGGER TIA_STAT_TEMPLATE_PARA AFTER INSERT ON stat_template_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_para', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_template_para')); - END IF; - - UPDATE stat_link_para - SET STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) - WHERE STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.PARA_TAG)); - - IF OLD.PARA_TAG = NEW.PARA_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.TYPE = NEW.TYPE - AND OLD.SORT = NEW.SORT - THEN RETURN NEW; - END IF; - - - --更新对应的实例点 - --考虑从分组到不分组,从测点类型到时间类型,需删除旧的数据 - IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN - BEGIN - DELETE FROM stat_inst_para_grp USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - IF NEW.TYPE = 1 THEN - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; - ELSEIF NEW.TYPE = 2 THEN - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; - END IF; - END; - ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN - BEGIN - IF OLD.TYPE = 1 THEN - DELETE FROM stat_inst_para_point USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - ELSEIF OLD.TYPE = 2 THEN - DELETE FROM stat_inst_para_time USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - END IF; - - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN - BEGIN - IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN - BEGIN - DELETE FROM stat_inst_para_point USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; - END; - ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN - BEGIN - DELETE FROM stat_inst_para_time USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; - END; - ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 1 THEN - update stat_inst_para_point - SET PARA_TAG = concat(stat_inst_para_point.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT - from stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_point.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 2 THEN - update stat_inst_para_time - SET PARA_TAG = concat(stat_inst_para_time.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT - from stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_time.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - END IF; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN - BEGIN - IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN - BEGIN - DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - AND stat_inst_para_point.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; - END; - ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN - BEGIN - DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - AND stat_inst_para_time.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; - END; - END IF; - - - update stat_inst_para_grp - SET PARA_GRP_TAG = concat(stat_inst_para_grp.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT - from stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG AND getAfterLastDot(PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - END; - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_PARA ON stat_template_para; -CREATE TRIGGER TUA_STAT_TEMPLATE_PARA AFTER UPDATE ON stat_template_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ -BEGIN - --删除相应的实例点 - DELETE FROM stat_inst_para_grp USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - DELETE FROM stat_inst_para_point USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - DELETE FROM stat_inst_para_time USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - DELETE FROM stat_link_para - WHERE STAT_PARA_TAG = OLD.PARA_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_para', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_template_para')); - END IF; - - - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_PARA ON stat_template_para; -CREATE TRIGGER TDA_STAT_TEMPLATE_PARA AFTER DELETE ON stat_template_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ -BEGIN - --插入相应实例点 - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_ret', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_template_ret')); - END IF; - - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_RET ON stat_template_ret; -CREATE TRIGGER TIA_STAT_TEMPLATE_RET AFTER INSERT ON stat_template_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_template_ret')); - END IF; - - UPDATE stat_link_ret - SET STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.RET_TAG)) - WHERE STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.RET_TAG)); - - IF OLD.RET_TAG = NEW.RET_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.SORT = NEW.SORT - THEN RETURN NEW; - END IF; - - --更新相应的实例点 - IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN - BEGIN - DELETE FROM stat_inst_ret_grp USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; - END; - ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN - BEGIN - DELETE FROM stat_inst_ret_para USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); - - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN - BEGIN - update stat_inst_ret_para - SET RET_TAG = concat(stat_inst_ret_para.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT - from stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_para.INST_TAG AND `RANK` = 1 AND getAfterLastDot(RET_TAG) = getAfterLastDot(OLD.RET_TAG); - - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN - BEGIN - update stat_inst_ret_grp - SET RET_GRP_TAG = concat(stat_inst_ret_grp.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT - from stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_grp.INST_TAG AND getAfterLastDot(RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - END; - END IF; - - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_RET ON stat_template_ret; -CREATE TRIGGER TUA_STAT_TEMPLATE_RET AFTER UPDATE ON stat_template_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ -BEGIN - --删除相应的实例点 - DELETE FROM stat_inst_ret_grp USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - DELETE FROM stat_inst_ret_para USING stat_inst_def - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); - DELETE FROM stat_link_ret - WHERE STAT_RET_TAG = OLD.RET_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_template_ret')); - END IF; - - -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_RET ON stat_template_ret; -CREATE TRIGGER TDA_STAT_TEMPLATE_RET AFTER DELETE ON stat_template_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_condition_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; -CREATE TRIGGER TIA_TRIGGER_CONDITION_DEFINE AFTER INSERT ON trigger_condition_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_CONDITION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; -CREATE TRIGGER TUA_TRIGGER_CONDITION_DEFINE AFTER UPDATE ON trigger_condition_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_CONDITION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_condition_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; -CREATE TRIGGER TDA_TRIGGER_CONDITION_DEFINE AFTER DELETE ON trigger_condition_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_CONDITION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_function_define', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; -CREATE TRIGGER TIA_TRIGGER_FUNCTION_DEFINE AFTER INSERT ON trigger_function_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_FUNCTION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; -CREATE TRIGGER TUA_TRIGGER_FUNCTION_DEFINE AFTER UPDATE ON trigger_function_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_FUNCTION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('trigger_function_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; -CREATE TRIGGER TDA_TRIGGER_FUNCTION_DEFINE AFTER DELETE ON trigger_function_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_FUNCTION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_period_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; -CREATE TRIGGER TIA_TRIGGER_PERIOD_DEFINE AFTER INSERT ON trigger_period_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_PERIOD_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; -CREATE TRIGGER TUA_TRIGGER_PERIOD_DEFINE AFTER UPDATE ON trigger_period_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_PERIOD_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_period_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; -CREATE TRIGGER TDA_TRIGGER_PERIOD_DEFINE AFTER DELETE ON trigger_period_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_PERIOD_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_timer_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; -CREATE TRIGGER TIA_TRIGGER_TIMER_DEFINE AFTER INSERT ON trigger_timer_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_TIMER_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; -CREATE TRIGGER TUA_TRIGGER_TIMER_DEFINE AFTER UPDATE ON trigger_timer_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_TIMER_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_timer_define')); -END IF; -RETURN OLD; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; -CREATE TRIGGER TDA_TRIGGER_TIMER_DEFINE AFTER DELETE ON trigger_timer_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_TIMER_DEFINE(); - - - ---t_sys_table_file_tree表实现序列的触发器 -CREATE OR REPLACE FUNCTION FUNC_T_SYS_TABLE_FILE_TREE_SEQUENCE() RETURNS TRIGGER AS $$ - DECLARE max_id DECIMAL(10,0) DEFAULT 0; -BEGIN - IF NEW.id IS NULL THEN - SELECT MAX(id) INTO max_id FROM t_sys_table_file_tree; - max_id = COALESCE(max_id,0); - NEW.id = max_id + 1; - END IF; - RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS T_SYS_TABLE_FILE_TREE_SEQUENCE ON t_sys_table_file_tree; -CREATE TRIGGER T_SYS_TABLE_FILE_TREE_SEQUENCE BEFORE INSERT ON t_sys_table_file_tree FOR EACH ROW -EXECUTE PROCEDURE FUNC_T_SYS_TABLE_FILE_TREE_SEQUENCE(); - - - ---t_w_inspection表实现序列的触发器 -CREATE OR REPLACE FUNCTION FUNC_T_W_INSPECTION_SEQUENCE() RETURNS TRIGGER AS $$ - DECLARE max_id DECIMAL(10,0) DEFAULT 0; -BEGIN - IF NEW.id IS NULL THEN - SELECT MAX(id) INTO max_id FROM t_w_inspection; - max_id = COALESCE(max_id,0); - NEW.id = max_id + 1; - END IF; - RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS T_W_INSPECTION_SEQUENCE ON t_w_inspection; -CREATE TRIGGER T_W_INSPECTION_SEQUENCE BEFORE INSERT ON t_w_inspection FOR EACH ROW -EXECUTE PROCEDURE FUNC_T_W_INSPECTION_SEQUENCE(); - - - --------------------------------------------------------------------------------------------------------------------- ---以下是函数-------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- -CREATE OR REPLACE FUNCTION splitList( strList varchar(100), split_char varchar(1) , strCount decimal(10,0)) RETURNS varchar(64) -AS $$ - DECLARE splitCount int; - DECLARE splitIndex int DEFAULT 1; - DECLARE str1 varchar(100) DEFAULT ''; - DECLARE str2 varchar(100) DEFAULT ''; -BEGIN - --分割字符串,返回第strCount个子串 - - splitCount = char_length(strList)-char_length(replace(strList,split_char,'')) + 1; - IF strCount > splitCount OR strCount <=0 THEN RETURN ''; - END IF; - - IF strCount = 1 THEN RETURN substring_index(strList,split_char,strCount); - ELSE - BEGIN - str1 = substring_index(strList,split_char,strCount-1); - str2 = substring_index(strList,split_char,strCount); - RETURN right(str2,LENGTH(str2) - LENGTH(str1) - 1); - END; - END IF; - -END; -$$LANGUAGE PLPGSQL; - - - - -CREATE OR REPLACE FUNCTION clearTempRelation(devTempName varchar(64)) -RETURNS VOID -AS $$ -BEGIN - /* - * 清除指定模板的所有测点与前置模板的关系 - */ - - UPDATE accuml_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE analog_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1, - OUT_SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE digital_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO1 = -1, - SEC_SEQ_NO2 = -1, - SEC_SEQ_NO3 = -1, - SEC_SEQ_NO4 = -1, - SEC_SEQ_NO5 = -1, - OUT_SEC_SEQ_NO1 = -1, - OUT_SEC_SEQ_NO2 = -1, - OUT_SEC_SEQ_NO3 = -1, - OUT_SEC_SEQ_NO4 = -1, - OUT_SEC_SEQ_NO5 = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE mix_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1, - OUT_SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - -END; -$$LANGUAGE PLPGSQL; - - - - -CREATE OR REPLACE FUNCTION updateFesResPara(tableName varchar(64),startNum decimal(10,0)) -RETURNS VOID -AS $$ -BEGIN - /* - * 批量修改设备的规约参数1,要批量修改的设备在export_seq中 - * tableName 表名 - * startNum 修改的起始数字 - */ - - --创建临时表 - CREATE TEMPORARY TABLE IF NOT EXISTS tmpUpdateFesResParaTbl( - TAG_NAME varchar(64) NOT NULL, - RES_PARA decimal(10,0) NOT NULL - ); - DELETE FROM tmpUpdateFesResParaTbl; - - IF lower(tableName) = 'fes_accuml' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_accuml,export_seq WHERE fes_accuml.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_accuml.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_accuml - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_accuml.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_analog' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_analog,export_seq WHERE fes_analog.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_analog.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_analog - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_analog.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_analog_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_analog_ctrl,export_seq WHERE fes_analog_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_analog_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_analog_ctrl - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_analog_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_digital' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_digital,export_seq WHERE fes_digital.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_digital.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_digital - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_digital.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_digital_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_digital_ctrl,export_seq WHERE fes_digital_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_digital_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_digital_ctrl - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_digital_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_mix' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_mix,export_seq WHERE fes_mix.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_mix.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_mix - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_mix.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_mix_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_mix_ctrl,export_seq WHERE fes_mix_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_mix_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_mix_ctrl - SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_mix_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - END IF; - - - -END; -$$LANGUAGE PLPGSQL; - - - - -CREATE OR REPLACE FUNCTION bindStatDev(statTag varchar(64),devTag varchar(64)) -RETURNS VOID -AS $$ -BEGIN - /* - * 绑定统计分析中的实例,使用对应的后台设备 - * statTag 统计分析实例 - * devTag 后台设备 - */ - - --清空 - UPDATE stat_inst_para_point SET POINT_TAG = '' WHERE INST_TAG = statTag; - - UPDATE stat_inst_ret_para SET POINT_TAG = '' WHERE INST_TAG = statTag; - - --填写 - CREATE TEMPORARY TABLE IF NOT EXISTS tmpBinStatDevTbl( - PARA_TAG varchar(64) NOT NULL, - POINT_TAG varchar(64) NOT NULL - ); - DELETE FROM tmpBinStatDevTbl; - - --查找对应的测点 - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('analog.',analog.TAG_NAME) AS A - FROM stat_inst_para_point,analog - WHERE INST_TAG = statTag AND analog.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(analog.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('accuml.',accuml.TAG_NAME) AS A - FROM stat_inst_para_point,accuml - WHERE INST_TAG = statTag AND accuml.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(accuml.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('digital.',digital.TAG_NAME) AS A - FROM stat_inst_para_point,digital - WHERE INST_TAG = statTag AND digital.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(digital.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('mix.',mix.TAG_NAME) AS A - FROM stat_inst_para_point,mix - WHERE INST_TAG = statTag AND mix.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(mix.TAG_NAME); - - update stat_inst_para_point - SET POINT_TAG = tmpBinStatDevTbl.POINT_TAG - from tmpbinstatdevtbl - where stat_inst_para_point.para_tag = tmpbinstatdevtbl.para_tag; - - - DELETE FROM tmpBinStatDevTbl; - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('analog.',analog.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,analog - WHERE INST_TAG = statTag AND analog.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(analog.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('digital.',digital.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,digital - WHERE INST_TAG = statTag AND digital.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(digital.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('accuml.',accuml.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,accuml - WHERE INST_TAG = statTag AND accuml.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(accuml.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('mix.',mix.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,mix - WHERE INST_TAG = statTag AND mix.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(mix.TAG_NAME); - - update stat_inst_ret_para - SET POINT_TAG = tmpBinStatDevTbl.POINT_TAG, IS_BIND = '1' - from tmpbinstatdevtbl - where stat_inst_ret_para.ret_tag = tmpbinstatdevtbl.para_tag; - - -END; -$$LANGUAGE PLPGSQL; - - - -CREATE OR REPLACE FUNCTION relationByTempPointName(devTempName varchar(64),fesDevTempName varchar(64)) -RETURNS VOID -AS $$ -BEGIN - /* - * 按照模板下的测点名称进行,后台模板与前置模板的关联 - */ - --获取设备测点名称 - - CALL clearTempRelation(devTempName); - --创建临时表, - CREATE TEMPORARY TABLE IF NOT EXISTS tmpRelationNameTbl( - TAG_NAME varchar(64) NOT NULL, - FES_SEQ_NO decimal(10,0) NOT NULL - ); - - --accuml - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM accuml_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_ACC')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update accuml_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where accuml_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - - --analog - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM analog_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_ANA')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update analog_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where analog_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - - --digital只判断第一个分量 - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM digital_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_DIG')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update digital_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO1 = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where digital_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - - --mix - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM mix_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_MIX')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update mix_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where mix_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - -END; -$$LANGUAGE PLPGSQL; - - - - + + +CREATE OR REPLACE FUNCTION custom_log(info1 varchar(100), info2 varchar(100) ) +RETURNS VOID +AS $$ +DECLARE enableDebug int DEFAULT 1; +BEGIN +enableDebug = (SELECT PRINT_DEBUG_INFO_FLAG FROM custom_debug_flag LIMIT 1); +IF enableDebug=1 THEN +INSERT INTO custom_debug_info(col1,col2,col3) VALUES (info1,info2,now()); +END IF; +END; +$$LANGUAGE PLPGSQL; + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ACCUML_LIMIT_INFO ON accuml_limit_info; +CREATE TRIGGER TIA_ACCUML_LIMIT_INFO AFTER INSERT ON accuml_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ACCUML_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ACCUML_LIMIT_INFO ON accuml_limit_info; +CREATE TRIGGER TUA_ACCUML_LIMIT_INFO AFTER UPDATE ON accuml_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ACCUML_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_limit_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ACCUML_LIMIT_INFO ON accuml_limit_info; +CREATE TRIGGER TDA_ACCUML_LIMIT_INFO AFTER DELETE ON accuml_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ACCUML_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + --首先禁止FES触发器动作 + SET SESSION "disable.FesAccumlTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.AccumlMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAccumlTrigger" = 0; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TI_ACCUML_MAP_TO_FES AFTER INSERT ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + + --首先禁止FES触发器动作 + SET SESSION "disable.FesAccumlTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.AccumlMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + --清除旧的 + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + --添加新的 + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET SESSION "disable.FesAccumlTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TU_ACCUML_MAP_TO_FES BEFORE UPDATE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TUA_ACCUML_MAP_TO_FES AFTER UPDATE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + + --首先禁止FES触发器动作 + SET SESSION "disable.FesAccumlTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.AccumlMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAccumlTrigger" = 0; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TD_ACCUML_MAP_TO_FES BEFORE DELETE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('accuml_map_to_fes')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TDA_ACCUML_MAP_TO_FES AFTER DELETE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* +INSERT INTO accuml( +TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)), NEW.DESCRIPTION,TAG_NAME, NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP, NEW.IS_LIMIT, NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS, NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + INSERT INTO temp_plugin_point_map_acc + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TI_ACCUML_TEMP_DEFINE AFTER INSERT ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.UNIT_ID <> OLD.UNIT_ID OR NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR + NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.SEQ_NO <> OLD.SEQ_NO OR + NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT + THEN + UPDATE accuml SET + TAG_NAME = concat(accuml.DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + UNIT_ID = NEW.UNIT_ID, + IS_LIMIT = NEW.IS_LIMIT, + POINT_CLASS = NEW.POINT_CLASS, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND, + POINT_TYPE = NEW.POINT_TYPE, + SEQ_NO = NEW.SEQ_NO, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE accuml.POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR + NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR + NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR + NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE accuml_limit_info SET + LIMIT_TYPE = NEW.LIMIT_TYPE, + LIMIT_NUM = NEW.LIMIT_NUM, + LIMIT_UP1 = NEW.LIMIT_UP1, + LIMIT_LOW1 = NEW.LIMIT_LOW1, + LIMIT_UP2 = NEW.LIMIT_UP2, + LIMIT_LOW2 = NEW.LIMIT_LOW2, + LIMIT_UP3 = NEW.LIMIT_UP3, + LIMIT_LOW3 = NEW.LIMIT_LOW3, + CROSS_PERCENT = NEW.CROSS_PERCENT, + RETURN_PERCENT = NEW.RETURN_PERCENT, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + IF NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR + NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF + THEN + UPDATE accuml_map_to_fes SET + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + IS_FILTER = NEW.IS_FILTER, + PERCENT = NEW.PERCENT, + BASE = NEW.BASE, + COEFF = NEW.COEFF + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_acc + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TU_ACCUML_TEMP_DEFINE AFTER UPDATE ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + + DELETE FROM temp_plugin_point_map_acc WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* +DELETE FROM accuml WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TD_ACCUML_TEMP_DEFINE BEFORE DELETE ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_temp_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TDA_ACCUML_TEMP_DEFINE AFTER DELETE ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_link_enable_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; +CREATE TRIGGER TIA_ALARM_LINK_ENABLE_INFO AFTER INSERT ON alarm_link_enable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_LINK_ENABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; +CREATE TRIGGER TUA_ALARM_LINK_ENABLE_INFO AFTER UPDATE ON alarm_link_enable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_LINK_ENABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('alarm_link_enable_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; +CREATE TRIGGER TDA_ALARM_LINK_ENABLE_INFO AFTER DELETE ON alarm_link_enable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_LINK_ENABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_config', 'NO', '', NEW.NO, getTableSubSystem('alarm_sms_config')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_SMS_CONFIG ON alarm_sms_config; +CREATE TRIGGER TIA_ALARM_SMS_CONFIG AFTER INSERT ON alarm_sms_config FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_CONFIG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_config', 'NO', OLD.NO, NEW.NO, getTableSubSystem('alarm_sms_config')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_SMS_CONFIG ON alarm_sms_config; +CREATE TRIGGER TUA_ALARM_SMS_CONFIG AFTER UPDATE ON alarm_sms_config FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_CONFIG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_config', 'NO', OLD.NO, '', getTableSubSystem('alarm_sms_config')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_SMS_CONFIG ON alarm_sms_config; +CREATE TRIGGER TDA_ALARM_SMS_CONFIG AFTER DELETE ON alarm_sms_config FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_CONFIG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_device', 'DEVICE_ID', '', NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_SMS_DEVICE ON alarm_sms_device; +CREATE TRIGGER TIA_ALARM_SMS_DEVICE AFTER INSERT ON alarm_sms_device FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_DEVICE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_SMS_DEVICE ON alarm_sms_device; +CREATE TRIGGER TUA_ALARM_SMS_DEVICE AFTER UPDATE ON alarm_sms_device FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_DEVICE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, '', getTableSubSystem('alarm_sms_device')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_SMS_DEVICE ON alarm_sms_device; +CREATE TRIGGER TDA_ALARM_SMS_DEVICE AFTER DELETE ON alarm_sms_device FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_DEVICE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_rule', 'RULE_ID', '', NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_SMS_RULE ON alarm_sms_rule; +CREATE TRIGGER TIA_ALARM_SMS_RULE AFTER INSERT ON alarm_sms_rule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_RULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_SMS_RULE ON alarm_sms_rule; +CREATE TRIGGER TUA_ALARM_SMS_RULE AFTER UPDATE ON alarm_sms_rule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_RULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, '', getTableSubSystem('alarm_sms_rule')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_SMS_RULE ON alarm_sms_rule; +CREATE TRIGGER TDA_ALARM_SMS_RULE AFTER DELETE ON alarm_sms_rule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_RULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TIA_ANALOG_CONTROL AFTER INSERT ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN + + --修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + NEW.OFFSET_NO = '-1'; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TU_ANALOG_CONTROL BEFORE UPDATE ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TUA_ANALOG_CONTROL AFTER UPDATE ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_control')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TDA_ANALOG_CONTROL AFTER DELETE ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ANALOG_LIMIT_INFO ON analog_limit_info; +CREATE TRIGGER TIA_ANALOG_LIMIT_INFO AFTER INSERT ON analog_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ANALOG_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ANALOG_LIMIT_INFO ON analog_limit_info; +CREATE TRIGGER TUA_ANALOG_LIMIT_INFO AFTER UPDATE ON analog_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ANALOG_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_limit_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_LIMIT_INFO ON analog_limit_info; +CREATE TRIGGER TDA_ANALOG_LIMIT_INFO AFTER DELETE ON analog_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ + DECLARE flag int; +BEGIN + SET SESSION "disable.FesAnalogTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.AnalogMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TI_ANALOG_MAP_TO_FES AFTER INSERT ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.AnalogMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TU_ANALOG_MAP_TO_FES BEFORE UPDATE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TUA_ANALOG_MAP_TO_FES AFTER UPDATE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + SET SESSION "disable.FesAnalogTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.AnalogMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 0; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TD_ANALOG_MAP_TO_FES BEFORE DELETE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('analog_map_to_fes')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TDA_ANALOG_MAP_TO_FES AFTER DELETE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + +/* +INSERT INTO analog( +TAG_NAME, DESCRIPTION, RTU_TAG, DEV_TYPE, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, IS_CONTROL, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)) , NEW.DESCRIPTION ,'', DEV_TYPE, TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, NEW.IS_CONTROL,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP,NEW.IS_LIMIT,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + + INSERT INTO temp_plugin_point_map_ana + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TI_ANALOG_TEMP_DEFINE AFTER INSERT ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.SEQ_NO <> OLD.SEQ_NO OR NEW.IS_CONTROL <> OLD.IS_CONTROL OR NEW.UNIT_ID <> OLD.UNIT_ID OR + NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT OR + NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND + THEN + UPDATE analog SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + UNIT_ID = NEW.UNIT_ID, + IS_LIMIT = NEW.IS_LIMIT, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND + WHERE POINT_TP_NAME=OLD.TAG_NAME; + END IF; + + IF NEW.IS_TAGT_STATE <> OLD.IS_TAGT_STATE OR NEW.CTRL_TIMEOUT <> OLD.CTRL_TIMEOUT OR NEW.RESV_TIMEOUT <> OLD.RESV_TIMEOUT OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR + NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.CTRL_TOLERANCE <> OLD.CTRL_TOLERANCE OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE analog_control SET + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR + NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR + NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR + NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE analog_limit_info SET + LIMIT_TYPE = NEW.LIMIT_TYPE , + LIMIT_NUM = NEW.LIMIT_NUM , + LIMIT_UP1 = NEW.LIMIT_UP1 , + LIMIT_LOW1 = NEW.LIMIT_LOW1 , + LIMIT_UP2 = NEW.LIMIT_UP2 , + LIMIT_LOW2 = NEW.LIMIT_LOW2 , + LIMIT_UP3 = NEW.LIMIT_UP3 , + LIMIT_LOW3 = NEW.LIMIT_LOW3 , + CROSS_PERCENT = NEW.CROSS_PERCENT , + RETURN_PERCENT = NEW.RETURN_PERCENT , + ALARM_PRIORITY = NEW.ALARM_PRIORITY , + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME , + IS_WATER_ALM = NEW.IS_WATER_ALM , + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN , + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK , + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR NEW.IS_VALID <> OLD.IS_VALID OR NEW.DEADBAND <> OLD.DEADBAND OR + NEW.ZEROBAND <> OLD.ZEROBAND OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW + THEN + UPDATE analog_map_to_fes SET + POINT_TP_NAME = NEW.TAG_NAME, + IS_FILTER = NEW.IS_FILTER, + PERCENT = NEW.PERCENT, + IS_VALID = NEW.IS_VALID, + DEADBAND = NEW.DEADBAND, + ZEROBAND = NEW.ZEROBAND, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_ana + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TU_ANALOG_TEMP_DEFINE AFTER UPDATE ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM temp_plugin_point_map_ana WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* + DELETE FROM analog WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TD_ANALOG_TEMP_DEFINE BEFORE DELETE ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_temp_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TDA_ANALOG_TEMP_DEFINE AFTER DELETE ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_analog', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_ANALOG ON APC_ANALOG; +CREATE TRIGGER TIA_APC_ANALOG AFTER INSERT ON APC_ANALOG FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_APC_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF NEW.NO_RDB_SYNC = 1 THEN + NEW.NO_RDB_SYNC = NULL; +ELSEIF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_APC_ANALOG ON APC_ANALOG; +CREATE TRIGGER TUB_APC_ANALOG BEFORE UPDATE ON APC_ANALOG FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_APC_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_analog')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_ANALOG ON APC_ANALOG; +CREATE TRIGGER TDA_APC_ANALOG AFTER DELETE ON APC_ANALOG FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_apc_curve() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_apc_curve ON apc_curve; +CREATE TRIGGER TIA_apc_curve AFTER INSERT ON apc_curve FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_apc_curve(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_apc_curve() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_apc_curve ON apc_curve; +CREATE TRIGGER TUA_apc_curve AFTER UPDATE ON apc_curve FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_apc_curve(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_apc_curve() RETURNS TRIGGER AS $$ +BEGIN +delete from apc_curve_day_index where curve_key_id_tag = old.key_id_tag; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_curve')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_apc_curve ON apc_curve; +CREATE TRIGGER TDA_apc_curve AFTER DELETE ON apc_curve FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_apc_curve(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', '', concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; +CREATE TRIGGER TIA_APC_CURVE_DAY_INDEX AFTER INSERT ON apc_curve_day_index FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_INDEX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ +BEGIN +IF((select count(*) from apc_curve_day_index where day_rule_id = old.day_rule_id)<1) THEN +delete from apc_curve_day_value where day_rule_id = old.day_rule_id; +END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; +CREATE TRIGGER TUA_APC_CURVE_DAY_INDEX AFTER UPDATE ON apc_curve_day_index FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_INDEX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ +BEGIN +delete from apc_curve_day_value where day_rule_id = old.day_rule_id; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id',concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), '', getTableSubSystem('apc_curve_day_index')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; +CREATE TRIGGER TDA_APC_CURVE_DAY_INDEX AFTER DELETE ON apc_curve_day_index FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_INDEX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', '', concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; +CREATE TRIGGER TIA_APC_CURVE_DAY_VALUE AFTER INSERT ON apc_curve_day_value FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_VALUE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; +CREATE TRIGGER TUA_APC_CURVE_DAY_VALUE AFTER UPDATE ON apc_curve_day_value FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_VALUE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), '', getTableSubSystem('apc_curve_day_value')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; +CREATE TRIGGER TDA_APC_CURVE_DAY_VALUE AFTER DELETE ON apc_curve_day_value FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_VALUE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_week', 'type_id,week_day', '', concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_WEEK ON apc_curve_week; +CREATE TRIGGER TIA_APC_CURVE_WEEK AFTER INSERT ON apc_curve_week FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_WEEK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_WEEK ON apc_curve_week; +CREATE TRIGGER TUA_APC_CURVE_WEEK AFTER UPDATE ON apc_curve_week FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_WEEK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), '', getTableSubSystem('apc_curve_week')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_WEEK ON apc_curve_week; +CREATE TRIGGER TDA_APC_CURVE_WEEK AFTER DELETE ON apc_curve_week FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_WEEK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_YEAR ON apc_curve_year; +CREATE TRIGGER TIA_APC_CURVE_YEAR AFTER INSERT ON apc_curve_year FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_YEAR(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_YEAR ON apc_curve_year; +CREATE TRIGGER TUA_APC_CURVE_YEAR AFTER UPDATE ON apc_curve_year FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_YEAR(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_YEAR ON apc_curve_year; +CREATE TRIGGER TDA_APC_CURVE_YEAR AFTER DELETE ON apc_curve_year FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_YEAR(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_digital', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_DIGITAL ON apc_digital; +CREATE TRIGGER TIA_APC_DIGITAL AFTER INSERT ON apc_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_APC_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF NEW.NO_RDB_SYNC = 1 THEN + NEW.NO_RDB_SYNC = NULL; +ELSEIF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_APC_DIGITAL ON apc_digital; +CREATE TRIGGER TUB_APC_DIGITAL BEFORE UPDATE ON apc_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_APC_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_digital')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_DIGITAL ON apc_digital; +CREATE TRIGGER TDA_APC_DIGITAL AFTER DELETE ON apc_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; +CREATE TRIGGER TIA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER INSERT ON ats_casco_planned_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; +CREATE TRIGGER TUA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER UPDATE ON ats_casco_planned_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_planned_train_data')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; +CREATE TRIGGER TDA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER DELETE ON ats_casco_planned_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; +CREATE TRIGGER TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER INSERT ON ats_casco_practical_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; +CREATE TRIGGER TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER UPDATE ON ats_casco_practical_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_practical_train_data')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; +CREATE TRIGGER TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER DELETE ON ats_casco_practical_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_location_info', 'ats_location_id', '', NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; +CREATE TRIGGER TIA_ATS_FES_LOCATION_INFO AFTER INSERT ON ats_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; +CREATE TRIGGER TUA_ATS_FES_LOCATION_INFO AFTER UPDATE ON ats_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, '', getTableSubSystem('ats_fes_location_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; +CREATE TRIGGER TDA_ATS_FES_LOCATION_INFO AFTER DELETE ON ats_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', '', concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; +CREATE TRIGGER TIA_ATS_FES_PLATFORM_INFO AFTER INSERT ON ats_fes_platform_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_FES_PLATFORM_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; +CREATE TRIGGER TUA_ATS_FES_PLATFORM_INFO AFTER UPDATE ON ats_fes_platform_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_FES_PLATFORM_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), '', getTableSubSystem('ats_fes_platform_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; +CREATE TRIGGER TDA_ATS_FES_PLATFORM_INFO AFTER DELETE ON ats_fes_platform_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_FES_PLATFORM_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; +CREATE TRIGGER TIA_BAS_TIMETABLE_CTRL_PARAM AFTER INSERT ON bas_timetable_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; +CREATE TRIGGER TUA_BAS_TIMETABLE_CTRL_PARAM AFTER UPDATE ON bas_timetable_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; +CREATE TRIGGER TDA_BAS_TIMETABLE_CTRL_PARAM AFTER DELETE ON bas_timetable_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_def', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_DEF ON bas_timetable_def; +CREATE TRIGGER TIA_BAS_TIMETABLE_DEF AFTER INSERT ON bas_timetable_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_DEF ON bas_timetable_def; +CREATE TRIGGER TUA_BAS_TIMETABLE_DEF AFTER UPDATE ON bas_timetable_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_DEF ON bas_timetable_def; +CREATE TRIGGER TDA_BAS_TIMETABLE_DEF AFTER DELETE ON bas_timetable_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_info', 'location_id,timetable_id,begin_time', '', concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_INFO ON bas_timetable_info; +CREATE TRIGGER TIA_BAS_TIMETABLE_INFO AFTER INSERT ON bas_timetable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_INFO ON bas_timetable_info; +CREATE TRIGGER TUA_BAS_TIMETABLE_INFO AFTER UPDATE ON bas_timetable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), '', getTableSubSystem('bas_timetable_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_INFO ON bas_timetable_info; +CREATE TRIGGER TDA_BAS_TIMETABLE_INFO AFTER DELETE ON bas_timetable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_schedule', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; +CREATE TRIGGER TIA_BAS_TIMETABLE_SCHEDULE AFTER INSERT ON bas_timetable_schedule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_SCHEDULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; +CREATE TRIGGER TUA_BAS_TIMETABLE_SCHEDULE AFTER UPDATE ON bas_timetable_schedule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_SCHEDULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_schedule')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; +CREATE TRIGGER TDA_BAS_TIMETABLE_SCHEDULE AFTER DELETE ON bas_timetable_schedule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_SCHEDULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_func_def', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_FUNC_DEF ON calc_func_def; +CREATE TRIGGER TI_CALC_FUNC_DEF AFTER INSERT ON calc_func_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_FUNC_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET + FUNC_NAME = NEW.FUNC_NAME, + CALC_FLAG = '1' + WHERE FUNC_NAME = OLD.FUNC_NAME; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_func_def', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_FUNC_DEF ON calc_func_def; +CREATE TRIGGER TU_CALC_FUNC_DEF AFTER UPDATE ON calc_func_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_FUNC_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM calc_out_para WHERE FUNC_NAME = OLD.FUNC_NAME; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_func_def', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('calc_func_def')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_FUNC_DEF ON calc_func_def; +CREATE TRIGGER TD_CALC_FUNC_DEF AFTER DELETE ON calc_func_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_FUNC_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_group_def', 'group_id', '', NEW.GROUP_ID, getTableSubSystem('calc_group_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_GROUP_DEF ON calc_group_def; +CREATE TRIGGER TI_CALC_GROUP_DEF AFTER INSERT ON calc_group_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_GROUP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.GROUP_ID <> OLD.GROUP_ID THEN + UPDATE calc_func_def SET GROUP_ID = NEW.GROUP_ID WHERE GROUP_ID = OLD.GROUP_ID; + END IF; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_group_def', 'group_id', OLD.GROUP_ID, NEW.GROUP_ID, getTableSubSystem('calc_group_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_GROUP_DEF ON calc_group_def; +CREATE TRIGGER TU_CALC_GROUP_DEF AFTER UPDATE ON calc_group_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_GROUP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_group_def', 'group_id', OLD.GROUP_ID, '', getTableSubSystem('calc_group_def')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_GROUP_DEF ON calc_group_def; +CREATE TRIGGER TD_CALC_GROUP_DEF AFTER DELETE ON calc_group_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_GROUP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_IN_PARA() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_in_para', 'key_id_tag,para_seq_no', '', concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_IN_PARA ON calc_in_para; +CREATE TRIGGER TI_CALC_IN_PARA AFTER INSERT ON calc_in_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_IN_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_IN_PARA() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_IN_PARA ON calc_in_para; +CREATE TRIGGER TU_CALC_IN_PARA AFTER UPDATE ON calc_in_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_IN_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_IN_PARA() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = OLD.KEY_ID_TAG; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_in_para')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_IN_PARA ON calc_in_para; +CREATE TRIGGER TD_CALC_IN_PARA AFTER DELETE ON calc_in_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_IN_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_OUT_PARA() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_out_para', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_OUT_PARA ON calc_out_para; +CREATE TRIGGER TI_CALC_OUT_PARA AFTER INSERT ON calc_out_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_OUT_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_OUT_PARA() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_OUT_PARA ON calc_out_para; +CREATE TRIGGER TU_CALC_OUT_PARA AFTER UPDATE ON calc_out_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_OUT_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_OUT_PARA() RETURNS TRIGGER AS $$ +BEGIN + + --这里不能触发删除本输出的输入,因为输入的删除触发器中调用了本表 + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('calc_out_para')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_OUT_PARA ON calc_out_para; +CREATE TRIGGER TD_CALC_OUT_PARA AFTER DELETE ON calc_out_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_OUT_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_PARA_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_para_def', 'func_name,para_seq_no', '', concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_PARA_DEF ON calc_para_def; +CREATE TRIGGER TI_CALC_PARA_DEF AFTER INSERT ON calc_para_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_PARA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_PARA_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_PARA_DEF ON calc_para_def; +CREATE TRIGGER TU_CALC_PARA_DEF AFTER UPDATE ON calc_para_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_PARA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_PARA_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_para_def')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_PARA_DEF ON calc_para_def; +CREATE TRIGGER TD_CALC_PARA_DEF AFTER DELETE ON calc_para_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_PARA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_device_inst', 'id', '', NEW.id, getTableSubSystem('cfg_device_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_CFG_DEVICE_INST ON cfg_device_inst; +CREATE TRIGGER TIA_CFG_DEVICE_INST AFTER INSERT ON cfg_device_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_CFG_DEVICE_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'cfg_device_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_device_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_CFG_DEVICE_INST ON cfg_device_inst; +CREATE TRIGGER TUA_CFG_DEVICE_INST AFTER UPDATE ON cfg_device_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_CFG_DEVICE_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_device_inst', 'id', OLD.id, '', getTableSubSystem('cfg_device_inst')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_CFG_DEVICE_INST ON cfg_device_inst; +CREATE TRIGGER TDA_CFG_DEVICE_INST AFTER DELETE ON cfg_device_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_CFG_DEVICE_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_signal_inst', 'id', '', NEW.id, getTableSubSystem('cfg_signal_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_CFG_SIGNAL_INST ON cfg_signal_inst; +CREATE TRIGGER TIA_CFG_SIGNAL_INST AFTER INSERT ON cfg_signal_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_CFG_SIGNAL_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'cfg_signal_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_signal_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_CFG_SIGNAL_INST ON cfg_signal_inst; +CREATE TRIGGER TUA_CFG_SIGNAL_INST AFTER UPDATE ON cfg_signal_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_CFG_SIGNAL_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_signal_inst', 'id', OLD.id, '', getTableSubSystem('cfg_signal_inst')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_CFG_SIGNAL_INST ON cfg_signal_inst; +CREATE TRIGGER TDA_CFG_SIGNAL_INST AFTER DELETE ON cfg_signal_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_CFG_SIGNAL_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TIA_DEV_TEMP_DEF AFTER INSERT ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF OLD.TAG_NAME != NEW.TAG_NAME THEN +BEGIN + UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +END; +END IF; + +IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DESCRIPTION != NEW.DESCRIPTION THEN +BEGIN + UPDATE accuml_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + UPDATE analog_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + + UPDATE digital_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + UPDATE mix_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + --更新对应的套件 + IF OLD.TAG_NAME != NEW.TAG_NAME THEN + BEGIN + UPDATE temp_plugin_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_fes_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_acc SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_ana SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_dig SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_mix SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + END; + END IF; +END; +END IF; +/* +IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DEV_TYPE_ID != NEW.DEV_TYPE_ID OR OLD.SUB_SYSTEM != NEW.SUB_SYSTEM +THEN +UPDATE dev_info SET +DEV_TP_NAME=NEW.TAG_NAME, +DEV_TYPE=NEW.DEV_TYPE_ID, +SUB_SYSTEM = NEW.SUB_SYSTEM +WHERE DEV_TP_NAME=OLD.TAG_NAME ; +END IF; +*/ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TU_DEV_TEMP_DEF AFTER UPDATE ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + +/* +DELETE FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; +*/ +DELETE FROM accuml_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM analog_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM digital_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM mix_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +--套件的处理 +DELETE FROM temp_plugin_dev_map WHERE TEMP_NAME = OLD.TAG_NAME; +UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TD_DEV_TEMP_DEF BEFORE DELETE ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('dev_temp_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TDA_DEV_TEMP_DEF AFTER DELETE ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE dev_temp_def SET DEV_TEMP_GRP = NEW.TAG_NAME WHERE DEV_TEMP_GRP = OLD.TAG_NAME; + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DEV_TEMP_GROUP ON dev_temp_group; +CREATE TRIGGER TU_DEV_TEMP_GROUP AFTER UPDATE ON dev_temp_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ +BEGIN + + DELETE FROM dev_temp_def WHERE DEV_TEMP_GRP = OLD.TAG_NAME; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DEV_TEMP_GROUP ON dev_temp_group; +CREATE TRIGGER TD_DEV_TEMP_GROUP AFTER DELETE ON dev_temp_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TIA_DIGITAL_CONTROL AFTER INSERT ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN + + --修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + NEW.OFFSET_NO1 = '-1'; + NEW.OFFSET_NO2 = '-1'; + NEW.OFFSET_NO3 = '-1'; + NEW.OFFSET_NO4 = '-1'; + NEW.OFFSET_NO5 = '-1'; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TU_DIGITAL_CONTROL BEFORE UPDATE ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TUA_DIGITAL_CONTROL AFTER UPDATE ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_control')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TDA_DIGITAL_CONTROL AFTER DELETE ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + SET SESSION "disable.FesDigitalTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.DigitalMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value1' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); + END IF; + + IF COALESCE(NEW.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value2' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); + END IF; + + IF COALESCE(NEW.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value3' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); + END IF; + + IF COALESCE(NEW.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value4' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); + END IF; + + IF COALESCE(NEW.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value5' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); + END IF; + + END; + END IF; + END; + END IF; + SET SESSION "disable.FesDigitalTrigger" = 0; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TI_DIGITAL_MAP_TO_FES AFTER INSERT ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO1 = OLD.DOT_NO1 AND + NEW.DOT_NO2 = OLD.DOT_NO2 AND + NEW.DOT_NO3 = OLD.DOT_NO3 AND + NEW.DOT_NO4 = OLD.DOT_NO4 AND + NEW.DOT_NO5 = OLD.DOT_NO5 AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + SET SESSION "disable.FesDigitalTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.DigitalMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); + END IF; + + IF COALESCE(OLD.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); + END IF; + + IF COALESCE(OLD.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); + END IF; + + IF COALESCE(OLD.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); + END IF; + + IF COALESCE(OLD.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value1' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); + END IF; + + IF COALESCE(NEW.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value2' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); + END IF; + + IF COALESCE(NEW.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value3' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); + END IF; + + IF COALESCE(NEW.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value4' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); + END IF; + + IF COALESCE(NEW.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value5' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); + END IF; + + END; + ELSE + BEGIN + NEW.DOT_NO1 = '-1'; + NEW.DOT_NO2 = '-1'; + NEW.DOT_NO3 = '-1'; + NEW.DOT_NO4 = '-1'; + NEW.DOT_NO5 = '-1'; + END; + END IF; + END; + END IF; + SET SESSION "disable.FesDigitalTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TU_DIGITAL_MAP_TO_FES BEFORE UPDATE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TUA_DIGITAL_MAP_TO_FES AFTER UPDATE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + SET SESSION "disable.FesDigitalTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.DigitalMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); + END IF; + + IF COALESCE(OLD.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); + END IF; + + IF COALESCE(OLD.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); + END IF; + + IF COALESCE(OLD.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); + END IF; + + IF COALESCE(OLD.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesDigitalTrigger" = 0; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TD_DIGITAL_MAP_TO_FES BEFORE DELETE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('digital_map_to_fes')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TDA_DIGITAL_MAP_TO_FES AFTER DELETE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + +/* +INSERT INTO digital( +TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, VALUE_NUM, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, VALUE1, STATUS1, LAST_CHANGE_TIME1, VALUE2, STATUS2, LAST_CHANGE_TIME2, VALUE3, STATUS3, LAST_CHANGE_TIME3, VALUE4, STATUS4, LAST_CHANGE_TIME4, VALUE5, STATUS5, LAST_CHANGE_TIME5, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, INPUT_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, IS_ALARM_FREQ, ALARM_FREQ, ALARM_FREQ_DESC, IS_ALARM_TIME, ALARM_TIME, ALARM_TIME_DESC, ALARM_FREQ_RANGE, INFER_NAME, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID ) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, "", NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,NEW.VALUE_NUM,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.INPUT_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.IS_ALARM_FREQ,NEW.ALARM_FREQ,NEW.ALARM_FREQ_DESC,NEW.IS_ALARM_TIME,NEW.ALARM_TIME,NEW.ALARM_TIME_DESC,NEW.ALARM_FREQ_RANGE,'', NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + INSERT INTO temp_plugin_point_map_dig + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME1, FES_TEMP_POINT_NAME2, FES_TEMP_POINT_NAME3, FES_TEMP_POINT_NAME4, FES_TEMP_POINT_NAME5, FES_TEMP_OUT_NAME1, FES_TEMP_OUT_NAME2, FES_TEMP_OUT_NAME3, FES_TEMP_OUT_NAME4, FES_TEMP_OUT_NAME5) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'', '', '', '', '', '', '', '', '', '', '' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TI_DIGITAL_TEMP_DEFINE AFTER INSERT ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE digital SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, + VALUE_NUM = NEW.VALUE_NUM, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + INPUT_DELAY_TIME = NEW.INPUT_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + IS_SUMMARY = NEW.IS_SUMMARY, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + IS_ALARM_FREQ = NEW.IS_ALARM_FREQ, + ALARM_FREQ = NEW.ALARM_FREQ, + ALARM_FREQ_DESC = NEW.ALARM_FREQ_DESC, + IS_ALARM_TIME = NEW.IS_ALARM_TIME, + ALARM_TIME = NEW.ALARM_TIME, + ALARM_TIME_DESC = NEW.ALARM_TIME_DESC, + ALARM_FREQ_RANGE = NEW.ALARM_FREQ_RANGE, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE POINT_TP_NAME=OLD.TAG_NAME ; + UPDATE digital_control SET + CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + PULSE_DURATION = NEW.PULSE_DURATION, + OFFSET_NUM = NEW.OFFSET_NUM, + IS_CHECK_PREVENTION = NEW.IS_CHECK_PREVENTION, + CTRL_TYPE = NEW.CTRL_TYPE, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_dig + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TU_DIGITAL_TEMP_DEFINE AFTER UPDATE ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM temp_plugin_point_map_dig WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* +DELETE FROM digital WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TD_DIGITAL_TEMP_DEFINE BEFORE DELETE ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_temp_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TDA_DIGITAL_TEMP_DEFINE AFTER DELETE ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fault_recall_cond_def', 'location_id,trigger_tag_name', '', concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; +CREATE TRIGGER TIA_FAULT_RECALL_COND_DEF AFTER INSERT ON fault_recall_cond_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FAULT_RECALL_COND_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; +CREATE TRIGGER TUA_FAULT_RECALL_COND_DEF AFTER UPDATE ON fault_recall_cond_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FAULT_RECALL_COND_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), '', getTableSubSystem('fault_recall_cond_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; +CREATE TRIGGER TDA_FAULT_RECALL_COND_DEF AFTER DELETE ON fault_recall_cond_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FAULT_RECALL_COND_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_ACCUML() RETURNS TRIGGER AS $$ + DECLARE flag INT; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AccumlMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesAccumlTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE accuml_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + + END; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_accuml', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_accuml')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TI_FES_ACCUML AFTER INSERT ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_ACCUML() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.FesAccumlTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + --删除旧关联 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE accuml_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + --建立新关联 + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE accuml_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + END; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TU_FES_ACCUML BEFORE UPDATE ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ACCUML() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_accuml', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_accuml')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TUA_FES_ACCUML AFTER UPDATE ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_ACCUML() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + SET SESSION "disable.AccumlMapToFesTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.FesAccumlTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE accuml_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_accuml', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_accuml')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TD_FES_ACCUML AFTER DELETE ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_ANALOG() RETURNS TRIGGER AS $$ + DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AnalogMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesAnalogTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE analog_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.AnalogMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_ANALOG ON fes_analog; +CREATE TRIGGER TI_FES_ANALOG AFTER INSERT ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AnalogMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesAnalogTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + --不管是ana还是const都是放在analog_map_to_fes表 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE analog_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE analog_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.AnalogMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_ANALOG ON fes_analog; +CREATE TRIGGER TU_FES_ANALOG BEFORE UPDATE ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_ANALOG ON fes_analog; +CREATE TRIGGER TUA_FES_ANALOG AFTER UPDATE ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AnalogMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesAnalogTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + --不管是ana还是const都是放在analog_map_to_fes表 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE analog_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.AnalogMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_ANALOG ON fes_analog; +CREATE TRIGGER TD_FES_ANALOG AFTER DELETE ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_ANALOG_CTRL ON fes_analog_ctrl; +CREATE TRIGGER TIA_FES_ANALOG_CTRL AFTER INSERT ON fes_analog_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_ANALOG_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ +BEGIN + --更新关联了此点的遥控点 + + IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO + THEN + BEGIN + UPDATE analog_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_ANALOG_CTRL ON fes_analog_ctrl; +CREATE TRIGGER TU_FES_ANALOG_CTRL AFTER UPDATE ON fes_analog_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_ANALOG_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ +BEGIN + UPDATE analog_control SET + OFFSET_NO = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog_ctrl')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_ANALOG_CTRL ON fes_analog_ctrl; +CREATE TRIGGER TD_FES_ANALOG_CTRL AFTER DELETE ON fes_analog_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_ANALOG_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ + DECLARE locationTag varchar(64) DEFAULT ''; + DECLARE subsystemTag varchar(64) DEFAULT ''; +BEGIN + SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; + SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; + NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_CHANNEL_PARA ON FES_CHANNEL_PARA; +CREATE TRIGGER TI_FES_CHANNEL_PARA BEFORE INSERT ON FES_CHANNEL_PARA FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_channel_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TIA_FES_CHANNEL_PARA AFTER INSERT ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ + DECLARE locationTag varchar(64) DEFAULT ''; + DECLARE subsystemTag varchar(64) DEFAULT ''; +BEGIN + IF NEW.CHAN_NAME <> OLD.CHAN_NAME THEN + BEGIN + SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; + SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; + NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); + END; + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TU_FES_CHANNEL_PARA BEFORE UPDATE ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); +END IF; +IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.CHAN_NO <> OLD.CHAN_NO OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM THEN +BEGIN + UPDATE fes_rtu_para SET + TAG_NAME = concat(NEW.TAG_NAME,'.',RTU_NAME), + CHAN_TAG = NEW.TAG_NAME, + CHAN_NO = NEW.CHAN_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE CHAN_TAG = OLD.TAG_NAME; +END; +END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TUA_FES_CHANNEL_PARA AFTER UPDATE ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_channel_para')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TDA_FES_CHANNEL_PARA AFTER DELETE ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const', 'tag_name', '',NEW.TAG_NAME, getTableSubSystem('fes_const')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_CONST ON fes_const; +CREATE TRIGGER TI_FES_CONST AFTER INSERT ON fes_const FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_CONST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_const', 'tag_name', OLD.TAG_NAME,NEW.TAG_NAME, getTableSubSystem('fes_const')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_CONST ON fes_const; +CREATE TRIGGER TU_FES_CONST AFTER UPDATE ON fes_const FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_CONST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const', 'tag_name', OLD.TAG_NAME,'', getTableSubSystem('fes_const')); + END IF; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_CONST ON fes_const; +CREATE TRIGGER TD_FES_CONST AFTER DELETE ON fes_const FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_CONST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + INSERT INTO fes_const( + TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST'))), NEW.DESCRIPTION,NEW.GROUP_NO,fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST')),NEW.SEQ_NO,fes_rtu_para.SUB_SYSTEM,fes_rtu_para.LOCATION_ID,fes_dev_info.TAG_NAME,NEW.VALUE,NEW.VALUE_TYPE,NEW.UNIT_ID,NEW.VALUE_TEXT, NEW.VALUE_RATIO,NEW.VALUE_ADDED,NEW.VALUE_MAX,NEW.VALUE_MIN,NEW.VALUE_DEFAULT,NEW.VALUE_VERIFY,NEW.EX_INFO,NEW.TAG_NAME, NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_CONST_TEMP ON fes_const_temp; +CREATE TRIGGER TI_FES_CONST_TEMP AFTER INSERT ON fes_const_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_CONST_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE fes_const SET + DESCRIPTION = NEW.DESCRIPTION, + GROUP_NO = NEW.GROUP_NO, + SEQ_NO = NEW.SEQ_NO, + VALUE = NEW.VALUE, + VALUE_TYPE = NEW.VALUE_TYPE, + UNIT_ID = NEW.UNIT_ID, + VALUE_TEXT = NEW.VALUE_TEXT, + VALUE_RATIO = NEW.VALUE_RATIO, + VALUE_ADDED = NEW.VALUE_ADDED, + VALUE_MAX = NEW.VALUE_MAX, + VALUE_MIN = NEW.VALUE_MIN, + VALUE_DEFAULT = NEW.VALUE_DEFAULT, + VALUE_VERIFY = NEW.VALUE_VERIFY, + EX_INFO = NEW.EX_INFO, + FES_POINT_TP_NAME = NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_CONST_TEMP ON fes_const_temp; +CREATE TRIGGER TU_FES_CONST_TEMP AFTER UPDATE ON fes_const_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_CONST_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + DELETE FROM fes_const WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_const_temp')); + END IF; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_CONST_TEMP ON fes_const_temp; +CREATE TRIGGER TD_FES_CONST_TEMP AFTER DELETE ON fes_const_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_CONST_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', '', concat(NEW.TAG_NAME,',', NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DATA_BLOCK ON fes_data_block; +CREATE TRIGGER TIA_FES_DATA_BLOCK AFTER INSERT ON fes_data_block FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DATA_BLOCK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,',', OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), concat(NEW.TAG_NAME,',',NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_DATA_BLOCK ON fes_data_block; +CREATE TRIGGER TUA_FES_DATA_BLOCK AFTER UPDATE ON fes_data_block FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_DATA_BLOCK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), '', getTableSubSystem('fes_data_block')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DATA_BLOCK ON fes_data_block; +CREATE TRIGGER TDA_FES_DATA_BLOCK AFTER DELETE ON fes_data_block FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DATA_BLOCK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + INSERT INTO fes_data_block( + TAG_NAME, BLOCK_ID, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG) SELECT + concat(fes_dev_info.TAG_NAME,'.',getAfterLastDot(NEW.TAG_NAME)), NEW.BLOCK_ID,fes_rtu_para.RTU_NO,NEW.FUNC_CODE,NEW.STAR_ADDR,NEW.DATA_LEN, NEW.DATA_FARME_TYPE, NEW.REF_CYCLE, NEW.IS_CREATE_SOE, NEW.PARA_INT1, NEW.PARA_INT2, NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,NEW.LD, NEW.CALL_MODE, NEW.DATA_SET,NEW.DATA_SET_TYPE,NEW.DATA_SET_CALL_TIME,NEW.REPORT_CTRL,NEW.TAG_NAME, fes_dev_info.TAG_NAME + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; +CREATE TRIGGER TI_FES_DATA_BLOCK_TEMP AFTER INSERT ON fes_data_block_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DATA_BLOCK_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE fes_data_block SET + TAG_NAME = concat(getBeforeLastDot(fes_data_block.TAG_NAME),'.',getAfterLastDot(NEW.TAG_NAME)), + BLOCK_ID = NEW.BLOCK_ID, + FUNC_CODE = NEW.FUNC_CODE, + STAR_ADDR = NEW.STAR_ADDR, + DATA_LEN = NEW.DATA_LEN, + DATA_FARME_TYPE = NEW.DATA_FARME_TYPE, + REF_CYCLE = NEW.REF_CYCLE, + IS_CREATE_SOE = NEW.IS_CREATE_SOE, + PARA_INT1 = NEW.PARA_INT1, + PARA_INT2 = NEW.PARA_INT2, + DESCRIPTION = NEW.DESCRIPTION, + LD = NEW.LD, + CALL_MODE = NEW.CALL_MODE, + DATA_SET = NEW.DATA_SET, + DATA_SET_TYPE = NEW.DATA_SET_TYPE, + DATA_SET_CALL_TIME = NEW.DATA_SET_CALL_TIME, + REPORT_CTRL = NEW.REPORT_CTRL, + FES_POINT_TP_NAME = NEW.TAG_NAME + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; +CREATE TRIGGER TU_FES_DATA_BLOCK_TEMP AFTER UPDATE ON fes_data_block_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DATA_BLOCK_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + DELETE FROM fes_data_block WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_data_block_temp')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; +CREATE TRIGGER TD_FES_DATA_BLOCK_TEMP AFTER DELETE ON fes_data_block_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DATA_BLOCK_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIB_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN + + NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIB_FES_DEV_INFO ON FES_DEV_INFO; +CREATE TRIGGER TIB_FES_DEV_INFO BEFORE INSERT ON FES_DEV_INFO FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIB_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_INFO() RETURNS TRIGGER AS $$ +DECLARE incVarFesDev1 int; +DECLARE incVarFesDev2 int; +BEGIN + + IF COALESCE(NEW.DEV_TP_NAME,'') <> '' THEN + BEGIN + + --获取最大的点号时已经自动加1,这里减掉 + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ACC')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_accuml( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DOT_NO,RTU_TAG,DEV_TAG,SEQ_NO,APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE,COEFF,RTU_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+ incVarFesDev2, NEW.RTU_TAG,NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO,'', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ACC') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_analog( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DEV_TAG,SEQ_NO,RTU_TAG,RTU_NO,DOT_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,IS_FILTER,PERCENT,DEADBAND_TYPE,DEADBAND,ZEROBAND,BASE,COEFF,MAX_RANGE,MIN_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, fes_rtu_para.RTU_NO , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, '', '', '', fes_dev_pt_temp_def.IS_FILTER, fes_dev_pt_temp_def.PERCENT, fes_dev_pt_temp_def.DEADBAND_TYPE, fes_dev_pt_temp_def.DEADBAND, fes_dev_pt_temp_def.ZEROBAND, fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_dev_pt_temp_def.MAX_RANGE, fes_dev_pt_temp_def.MIN_RANGE, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_digital( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DEV_TAG,SEQ_NO,RTU_TAG,DOT_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,FILTER_ERR,FILTER_DISTURB,DISTURB_TIME,REVERS,RTU_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,ATTR,ASS_DIG) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , '', '', '', fes_dev_pt_temp_def.FILTER_ERR, fes_dev_pt_temp_def.FILTER_DISTURB, fes_dev_pt_temp_def.DISTURB_TIME, fes_dev_pt_temp_def.REVERS, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2,ATTR,ASS_DIG + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_mix( + TAG_NAME,DESCRIPTION,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,DOT_NO,DEV_TAG,SEQ_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,BASE,COEFF,MAX_RANGE, MIN_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2 ) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_dev_pt_temp_def.DESCRIPTION,fes_rtu_para.LOCATION_ID , + fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, '', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_dev_pt_temp_def.MAX_RANGE, fes_dev_pt_temp_def.MIN_RANGE, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME + AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA_CTRL')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_analog_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,BASE,COEFF,MAX_RANGE,MIN_RANGE,RTU_NO,DEV_TAG,DOT_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,SEQ_NO,RTU_TAG,DESCRIPTION,POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '32767', '-32768', fes_rtu_para.RTU_NO,NEW.TAG_NAME, + row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.SEQ_NO,NEW.RTU_TAG,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA_CTRL') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG_CTRL')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_digital_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,DOT_NO,DEV_TAG,DESCRIPTION,REVERS,POINT_TP_NAME,SEQ_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,ATTR,CTRL_TYPE) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG, + fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, NEW.TAG_NAME,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.REVERS, fes_dev_pt_temp_def.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2,ATTR,CTRL_TYPE + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG_CTRL') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX_CTRL')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_mix_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,BASE, DESCRIPTION,DOT_NO,COEFF,MIN_RANGE,MAX_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,SEQ_NO,POINT_TP_NAME,DEV_TAG,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + NEW.RTU_TAG,fes_rtu_para.RTU_NO,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.DESCRIPTION, + row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RATIO, '-32768', '32767', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.TAG_NAME,NEW.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME + AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + + INSERT INTO fes_data_block( + TAG_NAME,BLOCK_ID,RTU_TAG,RTU_NO,FUNC_CODE,STAR_ADDR,DATA_LEN,DATA_FARME_TYPE,REF_CYCLE,IS_CREATE_SOE,PARA_INT1,PARA_INT2,DESCRIPTION,LOCATION_ID,SUB_SYSTEM,LD,CALL_MODE,DATA_SET,DATA_SET_TYPE,DATA_SET_CALL_TIME,REPORT_CTRL,FES_POINT_TP_NAME,DEV_TAG,PARA_INT3,PARA_INT4,PARA_STR1,PARA_STR2,IS_ENABLE) SELECT + concat(NEW.TAG_NAME,'.',getAfterLastDot(fes_data_block_temp.TAG_NAME)), fes_data_block_temp.BLOCK_ID,fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO,fes_data_block_temp.FUNC_CODE,fes_data_block_temp.STAR_ADDR,fes_data_block_temp.DATA_LEN, fes_data_block_temp.DATA_FARME_TYPE,fes_data_block_temp.REF_CYCLE,fes_data_block_temp.IS_CREATE_SOE,fes_data_block_temp.PARA_INT1, fes_data_block_temp.PARA_INT2, fes_data_block_temp.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,fes_data_block_temp.LD, fes_data_block_temp.CALL_MODE, fes_data_block_temp.DATA_SET, fes_data_block_temp.DATA_SET_TYPE,fes_data_block_temp.DATA_SET_CALL_TIME, fes_data_block_temp.REPORT_CTRL,fes_data_block_temp.TAG_NAME, NEW.TAG_NAME,fes_data_block_temp.PARA_INT3,fes_data_block_temp.PARA_INT4,fes_data_block_temp.PARA_STR1,fes_data_block_temp.PARA_STR2,IS_ENABLE + FROM fes_data_block_temp, fes_rtu_para WHERE fes_data_block_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_data_block_temp.BLOCK_ID; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_CONST')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_const( + TAG_NAME,DESCRIPTION,GROUP_NO,RTU_TAG,RTU_NO,DOT_NO,SEQ_NO,SUB_SYSTEM,LOCATION_ID,DEV_TAG,VALUE,VALUE_TYPE,UNIT_ID,VALUE_TEXT,VALUE_RATIO,VALUE_ADDED,VALUE_MAX,VALUE_MIN,VALUE_DEFAULT,VALUE_VERIFY,EX_INFO,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,DZ_SEQ) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev1), fes_const_temp.DESCRIPTION,fes_const_temp.GROUP_NO,NEW.RTU_TAG, + fes_rtu_para.RTU_NO,row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev2,fes_const_temp.SEQ_NO,NEW.SUB_SYSTEM,NEW.LOCATION_ID,NEW.TAG_NAME,fes_const_temp.VALUE,fes_const_temp.VALUE_TYPE,fes_const_temp.UNIT_ID,fes_const_temp.VALUE_TEXT, fes_const_temp.VALUE_RATIO,fes_const_temp.VALUE_ADDED,fes_const_temp.VALUE_MAX,fes_const_temp.VALUE_MIN,fes_const_temp.VALUE_DEFAULT,fes_const_temp.VALUE_VERIFY,fes_const_temp.EX_INFO,fes_const_temp.TAG_NAME,PATH61850, POSITION61850,fes_const_temp.RES_PARA_INT1,fes_const_temp.RES_PARA_INT2,fes_const_temp.RES_PARA_INT3,fes_const_temp.RES_PARA_INT4,fes_const_temp.RES_PARA_INT5,fes_const_temp.RES_PARA_INT6,fes_const_temp.RES_PARA_INT7,fes_const_temp.RES_PARA_INT8,fes_const_temp.RES_PARA_STR1,fes_const_temp.RES_PARA_STR2,DZ_SEQ + FROM fes_const_temp, fes_rtu_para WHERE fes_const_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TI_FES_DEV_INFO AFTER INSERT ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.DEV_NAME <> OLD.DEV_NAME THEN + NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_FES_DEV_INFO ON FES_DEV_INFO; +CREATE TRIGGER TUB_FES_DEV_INFO BEFORE UPDATE ON FES_DEV_INFO FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM + OR NEW.RTU_NO <> OLD.RTU_NO + THEN + BEGIN + + update fes_accuml + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_accuml.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_accuml.DEV_TAG = OLD.TAG_NAME; + + + + update fes_analog + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog.DEV_TAG = OLD.TAG_NAME; + + + + update fes_digital + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital.DOT_NO ), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital.DEV_TAG = OLD.TAG_NAME; + + + + update fes_mix + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix.DEV_TAG = OLD.TAG_NAME; + + + + update fes_analog_ctrl + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog_ctrl.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog_ctrl.DEV_TAG = OLD.TAG_NAME; + + + + update fes_digital_ctrl + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital_ctrl.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital_ctrl.DEV_TAG = OLD.TAG_NAME; + + + + update fes_mix_ctrl + SET TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix_ctrl.DOT_NO), LOCATION_ID = fes_rtu_para.LOCATION_ID, SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, RTU_TAG = NEW.RTU_TAG, DEV_TAG = NEW.TAG_NAME, RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix_ctrl.DEV_TAG = OLD.TAG_NAME; + + + update fes_data_block + SET LOCATION_ID = NEW.LOCATION_ID, SUB_SYSTEM = NEW.SUB_SYSTEM, DEV_TAG = NEW.TAG_NAME, RTU_TAG = NEW.RTU_TAG, TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(fes_data_block.TAG_NAME)), RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_data_block.DEV_TAG = OLD.TAG_NAME; + + + update fes_const + SET LOCATION_ID = NEW.LOCATION_ID, SUB_SYSTEM = NEW.SUB_SYSTEM, DEV_TAG = NEW.TAG_NAME, RTU_TAG = NEW.RTU_TAG, RTU_NO = fes_rtu_para.RTU_NO, TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_const.DOT_NO) + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_const.DEV_TAG = OLD.TAG_NAME; + + + + END; + END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TU_FES_DEV_INFO AFTER UPDATE ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN +DELETE FROM fes_accuml WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_analog WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_digital WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_mix WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_analog_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_digital_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_mix_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_data_block WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_const WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TD_FES_DEV_INFO BEFORE DELETE ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TDA_FES_DEV_INFO AFTER DELETE ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + /* + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + INSERT INTO fes_accuml( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC')), fes_dev_info.RTU_TAG,fes_dev_info.TAG_NAME,NEW.SEQ_NO,'', '', '', '0', '1', fes_rtu_para.RTU_NO ,NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION ,NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + INSERT INTO fes_analog( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850, POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA')),'', '', '', 0, 0, '0', '0', '0', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + INSERT INTO fes_digital( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG')), '', '', '', 0, 0, 0, 0, fes_rtu_para.RTU_NO , NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + INSERT INTO fes_mix( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX'))), NEW.DESCRIPTION ,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX')), fes_dev_info.TAG_NAME, NEW.SEQ_NO, '', '', '', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + INSERT INTO fes_analog_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MAX_RANGE, MIN_RANGE, POINT_TP_NAME,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, '0', '1', 65536, 0, NEW.TAG_NAME ,NEW.RES_PARA_INT1,NEW.RES_PARA_INT2,NEW.RES_PARA_INT3,NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + INSERT INTO fes_digital_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, REVERS, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850, POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, 0, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850,NEW.YK_SELECT61850, NEW.YK_EXE61850, NEW.YK_CANCLE61850, NEW.YK_DOUBLE_SELECT61850, NEW.YK_DOUBLE_EXE61850, NEW.YK_DOUBLE_CANCLE61850, NEW.PULSE_TIME + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + INSERT INTO fes_mix_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MIN_RANGE, MAX_RANGE, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4,PATH61850,POSITION61850)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO,'0', '1', 0, 65536, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + */ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_pt_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TI_FES_DEV_PT_TEMP_DEF AFTER INSERT ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + /* + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + UPDATE fes_accuml SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + UPDATE fes_analog SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + UPDATE fes_digital SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + UPDATE fes_mix SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + UPDATE fes_analog_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + UPDATE fes_digital_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850, + YK_SELECT61850 = NEW.YK_SELECT61850, + YK_EXE61850 = NEW.YK_EXE61850, + YK_CANCLE61850 = NEW.YK_CANCLE61850, + YK_DOUBLE_SELECT61850 = NEW.YK_DOUBLE_SELECT61850, + YK_DOUBLE_EXE61850 = NEW.YK_DOUBLE_EXE61850, + YK_DOUBLE_CANCLE61850 = NEW.YK_DOUBLE_CANCLE61850, + PULSE_TIME = NEW.PULSE_TIME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + UPDATE fes_mix_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + --更新套件内容 + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + UPDATE temp_plugin_point_map_acc SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + UPDATE temp_plugin_point_map_ana SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + UPDATE temp_plugin_point_map_mix SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + UPDATE temp_plugin_point_map_dig SET + FES_TEMP_POINT_NAME1 = IF(FES_TEMP_POINT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME1), + FES_TEMP_POINT_NAME2 = IF(FES_TEMP_POINT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME2), + FES_TEMP_POINT_NAME3 = IF(FES_TEMP_POINT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME3), + FES_TEMP_POINT_NAME4 = IF(FES_TEMP_POINT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME4), + FES_TEMP_POINT_NAME5 = IF(FES_TEMP_POINT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME5) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + UPDATE temp_plugin_point_map_ana SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + UPDATE temp_plugin_point_map_mix SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + UPDATE temp_plugin_point_map_dig SET + FES_TEMP_OUT_NAME1 = IF(FES_TEMP_OUT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME1), + FES_TEMP_OUT_NAME2 = IF(FES_TEMP_OUT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME2), + FES_TEMP_OUT_NAME3 = IF(FES_TEMP_OUT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME3), + FES_TEMP_OUT_NAME4 = IF(FES_TEMP_OUT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME4), + FES_TEMP_OUT_NAME5 = IF(FES_TEMP_OUT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME5) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; + END IF; + END; + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TU_FES_DEV_PT_TEMP_DEF AFTER UPDATE ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + /* + IF OLD.POINT_TYPE = getFesPointType('FES_ACC') THEN + DELETE FROM fes_accuml WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF OLD.POINT_TYPE = getFesPointType('FES_ANA') THEN + DELETE FROM fes_analog WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF OLD.POINT_TYPE = getFesPointType('FES_DIG') THEN + DELETE FROM fes_digital WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_MIX') THEN + DELETE FROM fes_mix WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + DELETE FROM fes_analog_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + DELETE FROM fes_digital_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + DELETE FROM fes_mix_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TD_FES_DEV_PT_TEMP_DEF BEFORE DELETE ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TDA_FES_DEV_PT_TEMP_DEF AFTER DELETE ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TIA_FES_DEV_TEMP_DEF AFTER INSERT ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE fes_dev_pt_temp_def SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + UPDATE fes_const_temp SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + UPDATE fes_data_block_temp SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + /* + UPDATE fes_dev_info SET + DEV_TP_NAME = NEW.TAG_NAME, + DEV_TYPE_ID = NEW.DEV_TYPE_ID + WHERE DEV_TP_NAME = OLD.TAG_NAME; + */ + + --更新套件 + IF OLD.TAG_NAME != NEW.TAG_NAME THEN + BEGIN + UPDATE temp_plugin_fes_dev_map SET FES_TEMP_NAME = NEW.TAG_NAME WHERE FES_TEMP_NAME = OLD.TAG_NAME; + END; + END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TU_FES_DEV_TEMP_DEF AFTER UPDATE ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + DELETE FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = OLD.TAG_NAME; + DELETE FROM fes_const_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; + DELETE FROM fes_data_block_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; + --套件的处理 + DELETE FROM temp_plugin_fes_dev_map WHERE FES_TEMP_NAME = OLD.TAG_NAME; + /* + DELETE FROM fes_dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; + */ + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TD_FES_DEV_TEMP_DEF BEFORE DELETE ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_temp_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TDA_FES_DEV_TEMP_DEF AFTER DELETE ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_type_def', 'dev_type_id', '', NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TIA_FES_DEV_TYPE_DEF AFTER INSERT ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.DEV_TYPE_ID <> OLD.DEV_TYPE_ID THEN + BEGIN + UPDATE fes_dev_temp_def SET + DEV_TYPE_ID = NEW.DEV_TYPE_ID + WHERE DEV_TYPE_ID = OLD.DEV_TYPE_ID; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TU_FES_DEV_TYPE_DEF BEFORE UPDATE ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TUA_FES_DEV_TYPE_DEF AFTER UPDATE ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, '', getTableSubSystem('fes_dev_type_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TDA_FES_DEV_TYPE_DEF AFTER DELETE ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DIGITAL() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.DigitalMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesDigitalTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO1 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO2 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO3 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO4 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO5 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.DigitalMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TI_FES_DIGITAL AFTER INSERT ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.DigitalMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesDigitalTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN + UPDATE digital_map_to_fes SET + DOT_NO1 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN + UPDATE digital_map_to_fes SET + DOT_NO2 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN + UPDATE digital_map_to_fes SET + DOT_NO3 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN + UPDATE digital_map_to_fes SET + DOT_NO4 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN + UPDATE digital_map_to_fes SET + DOT_NO5 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO1 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO2 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO3 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO4 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO5 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.DigitalMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TU_FES_DIGITAL BEFORE UPDATE ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TUA_FES_DIGITAL AFTER UPDATE ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.DigitalMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesDigitalTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN + UPDATE digital_map_to_fes SET + DOT_NO1 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN + UPDATE digital_map_to_fes SET + DOT_NO2 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN + UPDATE digital_map_to_fes SET + DOT_NO3 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN + UPDATE digital_map_to_fes SET + DOT_NO4 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN + UPDATE digital_map_to_fes SET + DOT_NO5 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.DigitalMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TD_FES_DIGITAL AFTER DELETE ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DIGITAL_CTRL ON fes_digital_ctrl; +CREATE TRIGGER TIA_FES_DIGITAL_CTRL AFTER INSERT ON fes_digital_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DIGITAL_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ +BEGIN + --更新关联了此点的遥控点 + + IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO + THEN + BEGIN + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO1 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO2 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO3 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO4 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO5 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); + + END; + END IF; + + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DIGITAL_CTRL ON fes_digital_ctrl; +CREATE TRIGGER TU_FES_DIGITAL_CTRL AFTER UPDATE ON fes_digital_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ +BEGIN + UPDATE digital_control SET + OFFSET_NO1 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO2 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO3 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO4 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO5 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital_ctrl')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DIGITAL_CTRL ON fes_digital_ctrl; +CREATE TRIGGER TD_FES_DIGITAL_CTRL AFTER DELETE ON fes_digital_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_MIX() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.MixMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesMixTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE mix_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.MixMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_MIX ON fes_mix; +CREATE TRIGGER TI_FES_MIX AFTER INSERT ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.MixMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesMixTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE mix_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE mix_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.MixMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_MIX ON fes_mix; +CREATE TRIGGER TU_FES_MIX BEFORE UPDATE ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_MIX() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_MIX ON fes_mix; +CREATE TRIGGER TUA_FES_MIX AFTER UPDATE ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.MixMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT cast(coalesce(CURRENT_SETTING('disable.FesMixTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE mix_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.MixMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_MIX ON fes_mix; +CREATE TRIGGER TD_FES_MIX AFTER DELETE ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_MIX_CTRL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_MIX_CTRL ON fes_mix_ctrl; +CREATE TRIGGER TIA_FES_MIX_CTRL AFTER INSERT ON fes_mix_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_MIX_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX_CTRL() RETURNS TRIGGER AS $$ +BEGIN + --更新关联了此点的遥控点 + + IF NEW.RTU_TAG = OLD.RTU_TAG AND NEW.DOT_NO= OLD.DOT_NO + THEN + BEGIN + UPDATE mix_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_MIX_CTRL ON fes_mix_ctrl; +CREATE TRIGGER TU_FES_MIX_CTRL AFTER UPDATE ON fes_mix_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_MIX_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX_CTRL() RETURNS TRIGGER AS $$ +BEGIN + UPDATE mix_control SET + OFFSET_NO = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix_ctrl')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_MIX_CTRL ON fes_mix_ctrl; +CREATE TRIGGER TD_FES_MIX_CTRL AFTER DELETE ON fes_mix_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_MIX_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_protocol', 'protocol_id', '', NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TIA_FES_PROTOCOL AFTER INSERT ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.PROTOCOL_ID <> OLD.PROTOCOL_ID THEN + BEGIN + UPDATE fes_channel_para SET + PROTO_TYPE = NEW.PROTOCOL_ID + WHERE PROTO_TYPE = OLD.PROTOCOL_ID; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TU_FES_PROTOCOL BEFORE UPDATE ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TUA_FES_PROTOCOL AFTER UPDATE ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, '', getTableSubSystem('fes_protocol')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TDA_FES_PROTOCOL AFTER DELETE ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIB_FES_RTU_PARA() RETURNS TRIGGER AS $$ + DECLARE chNo decimal(10,0) DEFAULT 0; +BEGIN + NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); + + SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; + + NEW.CHAN_NO = chNo; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIB_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TIB_FES_RTU_PARA BEFORE INSERT ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIB_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN + /* + * 不再产生默认设备 +INSERT INTO fes_dev_info +(TAG_NAME, DEV_NAME, LOCATION_ID, SUB_SYSTEM, DEV_ID, DEV_TYPE_ID, RTU_TAG, DEV_DESC, RTU_NO, DEV_TP_NAME) VALUES +(concat(NEW.TAG_NAME, '.', 'defaultDev' ),'defaultDev',NEW.LOCATION_ID,NEW.SUB_SYSTEM,'-1', '-1' ,NEW.TAG_NAME,'默认设备',NEW.RTU_NO ,'' ); +*/ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_rtu_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TI_FES_RTU_PARA AFTER INSERT ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_FES_RTU_PARA() RETURNS TRIGGER AS $$ + DECLARE chNo decimal(10,0) DEFAULT 0; +BEGIN + IF NEW.RTU_NAME <> OLD.RTU_NAME OR NEW.CHAN_TAG <> OLD.CHAN_TAG THEN + NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); + END IF; + + IF NEW.CHAN_TAG <> OLD.CHAN_TAG THEN + BEGIN + SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; + NEW.CHAN_NO = chNo; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TUB_FES_RTU_PARA BEFORE UPDATE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN + +IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_NO <> OLD.RTU_NO OR NEW.DESCRIPTION <> OLD.DESCRIPTION +THEN +BEGIN + + + UPDATE fes_dev_info SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)) , + DEV_DESC = DEV_DESC, + RTU_TAG = NEW.TAG_NAME, + RTU_NO = NEW.RTU_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE fes_data_block SET + RTU_NO = NEW.RTU_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE RTU_NO = OLD.RTU_NO; + + IF NEW.RTU_NO <> OLD.RTU_NO THEN + BEGIN + UPDATE dev_group SET + RTU_NO = NEW.RTU_NO + WHERE RTU_NO = OLD.RTU_NO; + END; + END IF; + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + --更新关联的后台测点 + UPDATE accuml SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE analog SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE digital SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE mix SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + + END; + END IF; + +END; +END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TU_FES_RTU_PARA AFTER UPDATE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN +DELETE FROM fes_dev_info WHERE RTU_TAG = OLD.TAG_NAME; +DELETE FROM fes_data_block WHERE RTU_NO = OLD.RTU_NO; +--更新关联的后台测点 +UPDATE accuml SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE analog SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE digital SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE mix SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TD_FES_RTU_PARA BEFORE DELETE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_rtu_para')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TDA_FES_RTU_PARA AFTER DELETE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --仅仅修改时标 + + NEW.TIMEFLAG = floor(extract(epoch from now())); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TI_LINKAGE_ACTION BEFORE INSERT ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_action', 'name', '', NEW.NAME, getTableSubSystem('linkage_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TIA_LINKAGE_ACTION AFTER INSERT ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应功能 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_function SET + TIMEFLAG = NEW.TIMEFLAG, + ACTION_NAME = NEW.NAME + WHERE ACTION_NAME = OLD.NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TU_LINKAGE_ACTION BEFORE UPDATE ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TUA_LINKAGE_ACTION AFTER UPDATE ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此动作的功能 + DELETE FROM linkage_function WHERE ACTION_NAME = OLD.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_action', 'name', OLD.NAME, '', getTableSubSystem('linkage_action')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TD_LINKAGE_ACTION AFTER DELETE ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.LinkageSettingTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageDefineTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = NEW.LINKAGE_NAME; + END; + END IF; + + SET SESSION "disable.LinkageSettingTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TI_LINKAGE_DEFINE BEFORE INSERT ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_define', 'linkage_name,func_name', '', concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TIA_LINKAGE_DEFINE AFTER INSERT ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.LinkageSettingTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageDefineTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = OLD.LINKAGE_NAME; + END; + END IF; + + SET SESSION "disable.LinkageSettingTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TU_LINKAGE_DEFINE BEFORE UPDATE ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TUA_LINKAGE_DEFINE AFTER UPDATE ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.LinkageSettingTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageDefineTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + UPDATE linkage_setting SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE NAME = OLD.LINKAGE_NAME; + END; + END IF; + + SET SESSION "disable.LinkageSettingTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('linkage_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TD_LINKAGE_DEFINE AFTER DELETE ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --仅仅修改时标 + NEW.TIMEFLAG = floor(extract(epoch from now())); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TI_LINKAGE_FUNCTION BEFORE INSERT ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TIA_LINKAGE_FUNCTION AFTER INSERT ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应联动功能关系表 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_define SET + TIMEFLAG = NEW.TIMEFLAG, + FUNC_NAME = NEW.NAME + WHERE FUNC_NAME = OLD.NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TU_LINKAGE_FUNCTION BEFORE UPDATE ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TUA_LINKAGE_FUNCTION AFTER UPDATE ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此功能的联动定义 + --检查功能是否被删除 + IF NOT EXISTS (SELECT * FROM linkage_function WHERE NAME = OLD.NAME) THEN + BEGIN + DELETE FROM linkage_define WHERE FUNC_NAME = OLD.NAME; + END; + ELSE + BEGIN + --修改时标 + UPDATE linkage_define SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE FUNC_NAME = OLD.NAME; + END; + END IF; + + + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('linkage_function')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TD_LINKAGE_FUNCTION AFTER DELETE ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.LinkageDefineTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageSettingTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + END; + END IF; + + SET SESSION "disable.LinkageDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TI_LINKAGE_SETTING BEFORE INSERT ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_setting', 'name', '', NEW.NAME, getTableSubSystem('linkage_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TIA_LINKAGE_SETTING AFTER INSERT ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.LinkageDefineTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageSettingTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + IF NEW.NAME<>OLD.NAME THEN + UPDATE linkage_define SET + LINKAGE_NAME = NEW.NAME + WHERE LINKAGE_NAME = OLD.NAME; + END IF; + END; + END IF; + + SET SESSION "disable.LinkageDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TU_LINKAGE_SETTING BEFORE UPDATE ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TUA_LINKAGE_SETTING AFTER UPDATE ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --删除关联了此联动的功能关联 + --避免触发器循环 + SET SESSION "disable.LinkageDefineTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.LinkageSettingTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + DELETE FROM linkage_define WHERE LINKAGE_NAME = OLD.NAME; + END; + END IF; + + SET SESSION "disable.LinkageDefineTrigger" = 0; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_setting', 'name', OLD.NAME, '', getTableSubSystem('linkage_setting')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TD_LINKAGE_SETTING AFTER DELETE ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_MIX_CONTROL ON mix_control; +CREATE TRIGGER TIA_MIX_CONTROL AFTER INSERT ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN + + --修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + NEW.OFFSET_NO = '-1'; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_MIX_CONTROL ON mix_control; +CREATE TRIGGER TU_MIX_CONTROL BEFORE UPDATE ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_MIX_CONTROL ON mix_control; +CREATE TRIGGER TUA_MIX_CONTROL AFTER UPDATE ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_control')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_MIX_CONTROL ON mix_control; +CREATE TRIGGER TDA_MIX_CONTROL AFTER DELETE ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + SET SESSION "disable.FesMixTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.MixMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + SET SESSION "disable.FesMixTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TI_MIX_MAP_TO_FES AFTER INSERT ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + + SET SESSION "disable.FesMixTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.MixMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET SESSION "disable.FesMixTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TU_MIX_MAP_TO_FES BEFORE UPDATE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TUA_MIX_MAP_TO_FES AFTER UPDATE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + SET SESSION "disable.FesMixTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.MixMapToFesTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesMixTrigger" = 0; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TD_MIX_MAP_TO_FES BEFORE DELETE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('mix_map_to_fes')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TDA_MIX_MAP_TO_FES AFTER DELETE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + INSERT INTO mix( + TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, METHOD, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID) SELECT + concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, '0', '0', '', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,'', '' + FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + + INSERT INTO temp_plugin_point_map_mix + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TI_MIX_TEMP_DEFINE AFTER INSERT ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE mix SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE POINT_TP_NAME=OLD.TAG_NAME; + + UPDATE mix_control SET + CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, + CTRL_TYPE = NEW.CTRL_TYPE, + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + + UPDATE mix_map_to_fes SET + POINT_TP_NAME = NEW.TAG_NAME, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + IS_FILTER_ERROR = NEW.IS_FILTER_ERROR, + IS_FILTER_DISTURB = NEW.IS_FILTER_DISTURB, + DISTURB_TIME = NEW.DISTURB_TIME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_mix + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TU_MIX_TEMP_DEFINE AFTER UPDATE ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM temp_plugin_point_map_mix WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + /* + DELETE FROM mix WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TD_MIX_TEMP_DEFINE BEFORE DELETE ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_temp_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TDA_MIX_TEMP_DEFINE AFTER DELETE ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('opc_config_define')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_DEFINE ON opc_config_define; +CREATE TRIGGER TIA_OPC_CONFIG_DEFINE AFTER INSERT ON opc_config_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('opc_config_define')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_DEFINE ON opc_config_define; +CREATE TRIGGER TUA_OPC_CONFIG_DEFINE AFTER UPDATE ON opc_config_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('opc_config_define')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_DEFINE ON opc_config_define; +CREATE TRIGGER TDA_OPC_CONFIG_DEFINE AFTER DELETE ON opc_config_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_version', 'domain_id,sub_system', '', concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_VERSION ON opc_config_version; +CREATE TRIGGER TIA_OPC_CONFIG_VERSION AFTER INSERT ON opc_config_version FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_VERSION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_VERSION ON opc_config_version; +CREATE TRIGGER TUA_OPC_CONFIG_VERSION AFTER UPDATE ON opc_config_version FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_VERSION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), '', getTableSubSystem('opc_config_version')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_VERSION ON opc_config_version; +CREATE TRIGGER TDA_OPC_CONFIG_VERSION AFTER DELETE ON opc_config_version FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_VERSION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_area_info', 'id', '', NEW.ID, getTableSubSystem('pa_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_AREA_INFO ON pa_area_info; +CREATE TRIGGER TIA_PA_AREA_INFO AFTER INSERT ON pa_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_AREA_INFO ON pa_area_info; +CREATE TRIGGER TUA_PA_AREA_INFO AFTER UPDATE ON pa_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_area_info', 'id', OLD.ID, '', getTableSubSystem('pa_area_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_AREA_INFO ON pa_area_info; +CREATE TRIGGER TDA_PA_AREA_INFO AFTER DELETE ON pa_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_audio_info', 'id', '', NEW.ID, getTableSubSystem('pa_audio_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_AUDIO_INFO ON pa_audio_info; +CREATE TRIGGER TIA_PA_AUDIO_INFO AFTER INSERT ON pa_audio_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_AUDIO_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_audio_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_audio_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_AUDIO_INFO ON pa_audio_info; +CREATE TRIGGER TUA_PA_AUDIO_INFO AFTER UPDATE ON pa_audio_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_AUDIO_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_audio_info', 'id', OLD.ID, '', getTableSubSystem('pa_audio_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_AUDIO_INFO ON pa_audio_info; +CREATE TRIGGER TDA_PA_AUDIO_INFO AFTER DELETE ON pa_audio_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_AUDIO_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_broadcast_group', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_BROADCAST_GROUP ON pa_broadcast_group; +CREATE TRIGGER TIA_PA_BROADCAST_GROUP AFTER INSERT ON pa_broadcast_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_BROADCAST_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_BROADCAST_GROUP ON pa_broadcast_group; +CREATE TRIGGER TUA_PA_BROADCAST_GROUP AFTER UPDATE ON pa_broadcast_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_BROADCAST_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_broadcast_group')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_BROADCAST_GROUP ON pa_broadcast_group; +CREATE TRIGGER TDA_PA_BROADCAST_GROUP AFTER DELETE ON pa_broadcast_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_BROADCAST_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_CTRL_PARAM ON pa_ctrl_param; +CREATE TRIGGER TIA_PA_CTRL_PARAM AFTER INSERT ON pa_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_CTRL_PARAM ON pa_ctrl_param; +CREATE TRIGGER TUA_PA_CTRL_PARAM AFTER UPDATE ON pa_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_ctrl_param')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_CTRL_PARAM ON pa_ctrl_param; +CREATE TRIGGER TDA_PA_CTRL_PARAM AFTER DELETE ON pa_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_LOCATION_AREA_DEF ON pa_location_area_def; +CREATE TRIGGER TIA_PA_LOCATION_AREA_DEF AFTER INSERT ON pa_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_LOCATION_AREA_DEF ON pa_location_area_def; +CREATE TRIGGER TUA_PA_LOCATION_AREA_DEF AFTER UPDATE ON pa_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pa_location_area_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_LOCATION_AREA_DEF ON pa_location_area_def; +CREATE TRIGGER TDA_PA_LOCATION_AREA_DEF AFTER DELETE ON pa_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_seq_def', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; +CREATE TRIGGER TIA_PA_LOCATION_SEQ_DEF AFTER INSERT ON pa_location_seq_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_SEQ_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; +CREATE TRIGGER TUA_PA_LOCATION_SEQ_DEF AFTER UPDATE ON pa_location_seq_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_SEQ_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_location_seq_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; +CREATE TRIGGER TDA_PA_LOCATION_SEQ_DEF AFTER DELETE ON pa_location_seq_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_SEQ_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_def', 'id', '', NEW.ID, getTableSubSystem('pa_operator_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_DEF ON pa_operator_def; +CREATE TRIGGER TIA_PA_OPERATOR_DEF AFTER INSERT ON pa_operator_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_def', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_operator_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_DEF ON pa_operator_def; +CREATE TRIGGER TUA_PA_OPERATOR_DEF AFTER UPDATE ON pa_operator_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_def', 'id', OLD.ID, '', getTableSubSystem('pa_operator_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_DEF ON pa_operator_def; +CREATE TRIGGER TDA_PA_OPERATOR_DEF AFTER DELETE ON pa_operator_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_map', 'user_grp_id', '', NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_MAP ON pa_operator_map; +CREATE TRIGGER TIA_PA_OPERATOR_MAP AFTER INSERT ON pa_operator_map FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_MAP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_MAP ON pa_operator_map; +CREATE TRIGGER TUA_PA_OPERATOR_MAP AFTER UPDATE ON pa_operator_map FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_MAP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, '', getTableSubSystem('pa_operator_map')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_MAP ON pa_operator_map; +CREATE TRIGGER TDA_PA_OPERATOR_MAP AFTER DELETE ON pa_operator_map FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_MAP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_timed_audio', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_TIMED_AUDIO ON pa_timed_audio; +CREATE TRIGGER TIA_PA_TIMED_AUDIO AFTER INSERT ON pa_timed_audio FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_TIMED_AUDIO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_TIMED_AUDIO ON pa_timed_audio; +CREATE TRIGGER TUA_PA_TIMED_AUDIO AFTER UPDATE ON pa_timed_audio FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_TIMED_AUDIO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_timed_audio')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_TIMED_AUDIO ON pa_timed_audio; +CREATE TRIGGER TDA_PA_TIMED_AUDIO AFTER DELETE ON pa_timed_audio FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_TIMED_AUDIO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_area_info', 'id', '', NEW.ID, getTableSubSystem('pis_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_AREA_INFO ON pis_area_info; +CREATE TRIGGER TIA_PIS_AREA_INFO AFTER INSERT ON pis_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pis_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_AREA_INFO ON pis_area_info; +CREATE TRIGGER TUA_PIS_AREA_INFO AFTER UPDATE ON pis_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_area_info', 'id', OLD.ID, '', getTableSubSystem('pis_area_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_AREA_INFO ON pis_area_info; +CREATE TRIGGER TDA_PIS_AREA_INFO AFTER DELETE ON pis_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'pis_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_CTRL_PARAM ON pis_ctrl_param; +CREATE TRIGGER TIA_PIS_CTRL_PARAM AFTER INSERT ON pis_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_CTRL_PARAM ON pis_ctrl_param; +CREATE TRIGGER TUA_PIS_CTRL_PARAM AFTER UPDATE ON pis_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pis_ctrl_param')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_CTRL_PARAM ON pis_ctrl_param; +CREATE TRIGGER TDA_PIS_CTRL_PARAM AFTER DELETE ON pis_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_display_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_DISPLAY_INFO ON pis_display_info; +CREATE TRIGGER TIA_PIS_DISPLAY_INFO AFTER INSERT ON pis_display_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_DISPLAY_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_DISPLAY_INFO ON pis_display_info; +CREATE TRIGGER TUA_PIS_DISPLAY_INFO AFTER UPDATE ON pis_display_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_DISPLAY_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_display_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_DISPLAY_INFO ON pis_display_info; +CREATE TRIGGER TDA_PIS_DISPLAY_INFO AFTER DELETE ON pis_display_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_DISPLAY_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_fes_location_info', 'pis_station_id', '', NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; +CREATE TRIGGER TIA_PIS_FES_LOCATION_INFO AFTER INSERT ON pis_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; +CREATE TRIGGER TUA_PIS_FES_LOCATION_INFO AFTER UPDATE ON pis_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, '', getTableSubSystem('pis_fes_location_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; +CREATE TRIGGER TDA_PIS_FES_LOCATION_INFO AFTER DELETE ON pis_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; +CREATE TRIGGER TIA_PIS_LOCATION_AREA_DEF AFTER INSERT ON pis_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; +CREATE TRIGGER TUA_PIS_LOCATION_AREA_DEF AFTER UPDATE ON pis_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pis_location_area_def')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; +CREATE TRIGGER TDA_PIS_LOCATION_AREA_DEF AFTER DELETE ON pis_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_message_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_MESSAGE_INFO ON pis_message_info; +CREATE TRIGGER TIA_PIS_MESSAGE_INFO AFTER INSERT ON pis_message_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_MESSAGE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_MESSAGE_INFO ON pis_message_info; +CREATE TRIGGER TUA_PIS_MESSAGE_INFO AFTER UPDATE ON pis_message_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_MESSAGE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_message_info')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_MESSAGE_INFO ON pis_message_info; +CREATE TRIGGER TDA_PIS_MESSAGE_INFO AFTER DELETE ON pis_message_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_MESSAGE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_DATASET() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_dataset', 'id', '', NEW.id, getTableSubSystem('scl_dataset')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_DATASET ON scl_dataset; +CREATE TRIGGER TIA_SCL_DATASET AFTER INSERT ON scl_dataset FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_DATASET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_DATASET() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_dataset', 'id', OLD.id, NEW.id, getTableSubSystem('scl_dataset')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_DATASET ON scl_dataset; +CREATE TRIGGER TUA_SCL_DATASET AFTER UPDATE ON scl_dataset FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_DATASET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_DATASET() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_dataset', 'id', OLD.id, '', getTableSubSystem('scl_dataset')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_DATASET ON scl_dataset; +CREATE TRIGGER TDA_SCL_DATASET AFTER DELETE ON scl_dataset FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_DATASET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_FCDA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_fcda', 'id', '', NEW.id, getTableSubSystem('scl_fcda')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_FCDA ON scl_fcda; +CREATE TRIGGER TIA_SCL_FCDA AFTER INSERT ON scl_fcda FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_FCDA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_FCDA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_fcda', 'id', OLD.id, NEW.id, getTableSubSystem('scl_fcda')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_FCDA ON scl_fcda; +CREATE TRIGGER TUA_SCL_FCDA AFTER UPDATE ON scl_fcda FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_FCDA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_FCDA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_fcda', 'id', OLD.id, '', getTableSubSystem('scl_fcda')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_FCDA ON scl_fcda; +CREATE TRIGGER TDA_SCL_FCDA AFTER DELETE ON scl_fcda FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_FCDA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_LCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_lcb', 'id', '', NEW.id, getTableSubSystem('scl_lcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_LCB ON scl_lcb; +CREATE TRIGGER TIA_SCL_LCB AFTER INSERT ON scl_lcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_LCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_LCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_lcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_lcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_LCB ON scl_lcb; +CREATE TRIGGER TUA_SCL_LCB AFTER UPDATE ON scl_lcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_LCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_LCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_lcb', 'id', OLD.id, '', getTableSubSystem('scl_lcb')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_LCB ON scl_lcb; +CREATE TRIGGER TDA_SCL_LCB AFTER DELETE ON scl_lcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_LCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_rcb', 'id', '', NEW.id, getTableSubSystem('scl_rcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_RCB ON scl_rcb; +CREATE TRIGGER TIA_SCL_RCB AFTER INSERT ON scl_rcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_RCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_rcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_rcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_RCB ON scl_rcb; +CREATE TRIGGER TUA_SCL_RCB AFTER UPDATE ON scl_rcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_RCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_rcb', 'id', OLD.id, '', getTableSubSystem('scl_rcb')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_RCB ON scl_rcb; +CREATE TRIGGER TDA_SCL_RCB AFTER DELETE ON scl_rcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_RCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RUNTIME() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_runtime', 'id', '', NEW.id, getTableSubSystem('scl_runtime')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_RUNTIME ON scl_runtime; +CREATE TRIGGER TIA_SCL_RUNTIME AFTER INSERT ON scl_runtime FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_RUNTIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RUNTIME() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_runtime', 'id', OLD.id, NEW.id, getTableSubSystem('scl_runtime')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_RUNTIME ON scl_runtime; +CREATE TRIGGER TUA_SCL_RUNTIME AFTER UPDATE ON scl_runtime FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_RUNTIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RUNTIME() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_runtime', 'id', OLD.id, '', getTableSubSystem('scl_runtime')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_RUNTIME ON scl_runtime; +CREATE TRIGGER TDA_SCL_RUNTIME AFTER DELETE ON scl_runtime FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_RUNTIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_SGCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_sgcb', 'id', '', NEW.id, getTableSubSystem('scl_sgcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_SGCB ON scl_sgcb; +CREATE TRIGGER TIA_SCL_SGCB AFTER INSERT ON scl_sgcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_SGCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_SGCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_sgcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_sgcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_SGCB ON scl_sgcb; +CREATE TRIGGER TUA_SCL_SGCB AFTER UPDATE ON scl_sgcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_SGCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_SGCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_sgcb', 'id', OLD.id, '', getTableSubSystem('scl_sgcb')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_SGCB ON scl_sgcb; +CREATE TRIGGER TDA_SCL_SGCB AFTER DELETE ON scl_sgcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_SGCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TI_SEQUENCE_ACTION BEFORE INSERT ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_action', 'name', '', NEW.NAME, getTableSubSystem('sequence_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TIA_SEQUENCE_ACTION AFTER INSERT ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应功能 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_function SET + TIMEFLAG = NEW.TIMEFLAG, + ACTION_NAME = NEW.NAME + WHERE ACTION_NAME = OLD.NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TU_SEQUENCE_ACTION BEFORE UPDATE ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TUA_SEQUENCE_ACTION AFTER UPDATE ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此动作的功能 + DELETE FROM sequence_function WHERE ACTION_NAME = OLD.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_action', 'name', OLD.NAME, '', getTableSubSystem('sequence_action')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TD_SEQUENCE_ACTION AFTER DELETE ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.SequenceSettingTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceDefineTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = NEW.SEQ_NAME; + END; + END IF; + + SET SESSION "disable.SequenceSettingTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TI_SEQUENCE_DEFINE BEFORE INSERT ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_define', 'seq_name,func_name', '', concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TIA_SEQUENCE_DEFINE AFTER INSERT ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.SequenceSettingTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceDefineTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = OLD.SEQ_NAME; + END; + END IF; + + SET SESSION "disable.SequenceSettingTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TU_SEQUENCE_DEFINE BEFORE UPDATE ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TUA_SEQUENCE_DEFINE AFTER UPDATE ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.SequenceSettingTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceDefineTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + UPDATE sequence_setting SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE NAME = OLD.SEQ_NAME; + END; + END IF; + + SET SESSION "disable.SequenceSettingTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('sequence_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TD_SEQUENCE_DEFINE AFTER DELETE ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --仅仅修改时标 + NEW.TIMEFLAG = floor(extract(epoch from now())); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TI_SEQUENCE_FUNCTION BEFORE INSERT ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + UPDATE sequence_define SET + TIMEFLAG = NEW.TIMEFLAG + WHERE FUNC_NAME = NEW.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TIA_SEQUENCE_FUNCTION AFTER INSERT ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应联动功能关系表 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_define SET + TIMEFLAG = NEW.TIMEFLAG, + FUNC_NAME = NEW.NAME + WHERE FUNC_NAME = OLD.NAME; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TU_SEQUENCE_FUNCTION BEFORE UPDATE ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TUA_SEQUENCE_FUNCTION AFTER UPDATE ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此功能的联动定义 + --检查功能是否被删除 + IF NOT EXISTS (SELECT * FROM sequence_function WHERE NAME = OLD.NAME) THEN + BEGIN + DELETE FROM sequence_define WHERE FUNC_NAME = OLD.NAME; + END; + ELSE + BEGIN + --修改时标 + UPDATE sequence_define SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE FUNC_NAME = OLD.NAME; + END; + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('sequence_function')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TD_SEQUENCE_FUNCTION AFTER DELETE ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.SequenceDefineTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceSettingTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + END; + END IF; + + SET SESSION "disable.SequenceDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TI_SEQUENCE_SETTING BEFORE INSERT ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_setting', 'name', '', NEW.NAME, getTableSubSystem('sequence_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TIA_SEQUENCE_SETTING AFTER INSERT ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.SequenceDefineTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceSettingTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + IF NEW.NAME<>OLD.NAME THEN + UPDATE sequence_define SET + SEQ_NAME = NEW.NAME + WHERE SEQ_NAME = OLD.NAME; + END IF; + END; + END IF; + + SET SESSION "disable.SequenceDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TU_SEQUENCE_SETTING BEFORE UPDATE ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TUA_SEQUENCE_SETTING AFTER UPDATE ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --删除关联了此联动的功能关联 + --避免触发器循环 + SET SESSION "disable.SequenceDefineTrigger" = 1; + + SELECT cast(coalesce(CURRENT_SETTING('disable.SequenceSettingTrigger','true'),'0')as int) INTO flag; + IF flag = 0 THEN + BEGIN + DELETE FROM sequence_define WHERE SEQ_NAME = OLD.NAME; + END; + END IF; + + SET SESSION "disable.SequenceDefineTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_setting', 'name', OLD.NAME, '', getTableSubSystem('sequence_setting')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TD_SEQUENCE_SETTING AFTER DELETE ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_DEF() RETURNS TRIGGER AS $$ +BEGIN + + --插入测点分组表 + --插入测点表 + --插入时间测点变 + --插入返回分组表 + --插入返回参数表 + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) , DESCRIPTION, NEW.INST_TAG, SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG, LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, '', SORT, '', NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 1; + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, floor(extract(epoch from now())),SORT, '', NEW.INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 2; + + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, NEW.INST_TAG,SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG, LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, 1, '', SORT, '', 0, 0, NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_def', 'inst_tag', '', NEW.INST_TAG, getTableSubSystem('stat_inst_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_DEF ON stat_inst_def; +CREATE TRIGGER TIA_STAT_INST_DEF AFTER INSERT ON stat_inst_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_DEF() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.INST_TAG <> OLD.INST_TAG THEN + BEGIN + UPDATE stat_inst_para_grp + SET INST_TAG = NEW.INST_TAG, + PARA_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_GRP_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_para_point + SET INST_TAG = NEW.INST_TAG, + PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_para_time + SET INST_TAG = NEW.INST_TAG, + PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_ret_grp + SET INST_TAG = NEW.INST_TAG, + RET_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_GRP_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_ret_para + SET INST_TAG = NEW.INST_TAG, + RET_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + END; + END IF; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, NEW.INST_TAG, getTableSubSystem('stat_inst_def')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_DEF ON stat_inst_def; +CREATE TRIGGER TUA_STAT_INST_DEF AFTER UPDATE ON stat_inst_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_DEF() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM stat_inst_para_grp WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_para_point WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_para_time WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_ret_grp WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_ret_para WHERE INST_TAG = OLD.INST_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, '', getTableSubSystem('stat_inst_def')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_DEF ON stat_inst_def; +CREATE TRIGGER TDA_STAT_INST_DEF AFTER DELETE ON stat_inst_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_grp', 'para_grp_tag', '', NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_GRP ON stat_inst_para_grp; +CREATE TRIGGER TIA_STAT_INST_PARA_GRP AFTER INSERT ON stat_inst_para_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.PARA_GRP_TAG = OLD.PARA_GRP_TAG + THEN RETURN NEW; + END IF; + + UPDATE stat_inst_para_point + SET PARA_GRP_TAG = NEW.PARA_GRP_TAG + WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + UPDATE stat_inst_para_time + SET PARA_GRP_TAG = NEW.PARA_GRP_TAG + WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_GRP ON stat_inst_para_grp; +CREATE TRIGGER TUA_STAT_INST_PARA_GRP AFTER UPDATE ON stat_inst_para_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM stat_inst_para_point WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + DELETE FROM stat_inst_para_time WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, '', getTableSubSystem('stat_inst_para_grp')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_GRP ON stat_inst_para_grp; +CREATE TRIGGER TDA_STAT_INST_PARA_GRP AFTER DELETE ON stat_inst_para_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_point', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_POINT ON stat_inst_para_point; +CREATE TRIGGER TIA_STAT_INST_PARA_POINT AFTER INSERT ON stat_inst_para_point FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_POINT(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_POINT ON stat_inst_para_point; +CREATE TRIGGER TUA_STAT_INST_PARA_POINT AFTER UPDATE ON stat_inst_para_point FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_POINT(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_point')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_POINT ON stat_inst_para_point; +CREATE TRIGGER TDA_STAT_INST_PARA_POINT AFTER DELETE ON stat_inst_para_point FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_POINT(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_time', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_TIME ON stat_inst_para_time; +CREATE TRIGGER TIA_STAT_INST_PARA_TIME AFTER INSERT ON stat_inst_para_time FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_TIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_TIME ON stat_inst_para_time; +CREATE TRIGGER TUA_STAT_INST_PARA_TIME AFTER UPDATE ON stat_inst_para_time FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_TIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_time')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_TIME ON stat_inst_para_time; +CREATE TRIGGER TDA_STAT_INST_PARA_TIME AFTER DELETE ON stat_inst_para_time FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_TIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_grp', 'ret_grp_tag', '', NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_GRP ON stat_inst_ret_grp; +CREATE TRIGGER TIA_STAT_INST_RET_GRP AFTER INSERT ON stat_inst_ret_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.RET_GRP_TAG = OLD.RET_GRP_TAG + THEN RETURN NEW; + END IF; + + UPDATE stat_inst_ret_para + SET PARA_GRP_TAG = NEW.RET_GRP_TAG + WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_GRP ON stat_inst_ret_grp; +CREATE TRIGGER TUA_STAT_INST_RET_GRP AFTER UPDATE ON stat_inst_ret_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM stat_inst_ret_para WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, '', getTableSubSystem('stat_inst_ret_grp')); + END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_GRP ON stat_inst_ret_grp; +CREATE TRIGGER TDA_STAT_INST_RET_GRP AFTER DELETE ON stat_inst_ret_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_para', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_PARA ON stat_inst_ret_para; +CREATE TRIGGER TIA_STAT_INST_RET_PARA AFTER INSERT ON stat_inst_ret_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_PARA ON stat_inst_ret_para; +CREATE TRIGGER TUA_STAT_INST_RET_PARA AFTER UPDATE ON stat_inst_ret_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_inst_ret_para')); + END IF; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_PARA ON stat_inst_ret_para; +CREATE TRIGGER TDA_STAT_INST_RET_PARA AFTER DELETE ON stat_inst_ret_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('STAT_LINK_DEF')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_LINK_DEF ON STAT_LINK_DEF; +CREATE TRIGGER TIA_STAT_LINK_DEF AFTER INSERT ON STAT_LINK_DEF FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + UPDATE stat_link_para + SET LINK_TAG = NEW.TAG_NAME, + TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) + WHERE LINK_TAG = OLD.TAG_NAME; + UPDATE stat_link_ret + SET LINK_TAG = NEW.TAG_NAME, + TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) + WHERE LINK_TAG = OLD.TAG_NAME; + + END; + END IF; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_def')); + END IF; + UPDATE stat_link_para + SET STAT_PARA_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_PARA_TAG)) + WHERE LINK_TAG = OLD.TAG_NAME; + UPDATE stat_link_ret + SET STAT_RET_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_RET_TAG)) + WHERE LINK_TAG = OLD.TAG_NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_LINK_DEF ON stat_link_def; +CREATE TRIGGER TUA_STAT_LINK_DEF AFTER UPDATE ON stat_link_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ +BEGIN + --删除对应的模板点 + DELETE FROM stat_link_para WHERE LINK_TAG= OLD.TAG_NAME; + DELETE FROM stat_link_ret WHERE LINK_TAG = OLD.TAG_NAME; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_def')); + END IF; + + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_LINK_DEF ON stat_link_def; +CREATE TRIGGER TDA_STAT_LINK_DEF AFTER DELETE ON stat_link_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_LINK_PARA ON stat_link_para; +CREATE TRIGGER TIA_STAT_LINK_PARA AFTER INSERT ON stat_link_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_LINK_PARA ON stat_link_para; +CREATE TRIGGER TUA_STAT_LINK_PARA AFTER UPDATE ON stat_link_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_para')); + END IF; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_LINK_PARA ON stat_link_para; +CREATE TRIGGER TDA_STAT_LINK_PARA AFTER DELETE ON stat_link_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_RET() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_ret', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_LINK_RET ON stat_link_ret; +CREATE TRIGGER TIA_STAT_LINK_RET AFTER INSERT ON stat_link_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_RET() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_LINK_RET ON stat_link_ret; +CREATE TRIGGER TUA_STAT_LINK_RET AFTER UPDATE ON stat_link_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_RET() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_ret')); + END IF; + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_LINK_RET ON stat_link_ret; +CREATE TRIGGER TDA_STAT_LINK_RET AFTER DELETE ON stat_link_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_def', 'template_tag', '', NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_DEF ON stat_template_def; +CREATE TRIGGER TIA_STAT_TEMPLATE_DEF AFTER INSERT ON stat_template_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ +BEGIN + UPDATE stat_template_para + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, + PARA_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + UPDATE stat_template_ret + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, + RET_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(RET_TAG)) + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + UPDATE stat_inst_def + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + UPDATE stat_link_def + SET STAT_TEMP_TAG = NEW.TEMPLATE_TAG + WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_DEF ON stat_template_def; +CREATE TRIGGER TUA_STAT_TEMPLATE_DEF AFTER UPDATE ON stat_template_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ +BEGIN + --删除对应关联 + DELETE FROM stat_link_def WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; + + --删除对应实例 + DELETE FROM stat_inst_def WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + --删除对应的模板点 + DELETE FROM stat_template_para WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + DELETE FROM stat_template_ret WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, '', getTableSubSystem('stat_template_def')); + END IF; + + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_DEF ON stat_template_def; +CREATE TRIGGER TDA_STAT_TEMPLATE_DEF AFTER DELETE ON stat_template_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ +BEGIN + --插入对应的实例 + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_para', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_template_para')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_PARA ON stat_template_para; +CREATE TRIGGER TIA_STAT_TEMPLATE_PARA AFTER INSERT ON stat_template_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_para', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_template_para')); + END IF; + + UPDATE stat_link_para + SET STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) + WHERE STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.PARA_TAG)); + + IF OLD.PARA_TAG = NEW.PARA_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.TYPE = NEW.TYPE + AND OLD.SORT = NEW.SORT + THEN RETURN NEW; + END IF; + + + --更新对应的实例点 + --考虑从分组到不分组,从测点类型到时间类型,需删除旧的数据 + IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN + BEGIN + DELETE FROM stat_inst_para_grp USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + IF NEW.TYPE = 1 THEN + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; + ELSEIF NEW.TYPE = 2 THEN + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; + END IF; + END; + ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN + BEGIN + IF OLD.TYPE = 1 THEN + DELETE FROM stat_inst_para_point USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + ELSEIF OLD.TYPE = 2 THEN + DELETE FROM stat_inst_para_time USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + END IF; + + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN + BEGIN + IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN + BEGIN + DELETE FROM stat_inst_para_point USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; + END; + ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN + BEGIN + DELETE FROM stat_inst_para_time USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; + END; + ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 1 THEN + update stat_inst_para_point + SET PARA_TAG = concat(stat_inst_para_point.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT + from stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_point.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 2 THEN + update stat_inst_para_time + SET PARA_TAG = concat(stat_inst_para_time.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT + from stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_time.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + END IF; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN + BEGIN + IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN + BEGIN + DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + AND stat_inst_para_point.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; + END; + ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN + BEGIN + DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + AND stat_inst_para_time.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; + END; + END IF; + + + update stat_inst_para_grp + SET PARA_GRP_TAG = concat(stat_inst_para_grp.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT + from stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG AND getAfterLastDot(PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + END; + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_PARA ON stat_template_para; +CREATE TRIGGER TUA_STAT_TEMPLATE_PARA AFTER UPDATE ON stat_template_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ +BEGIN + --删除相应的实例点 + DELETE FROM stat_inst_para_grp USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + DELETE FROM stat_inst_para_point USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + DELETE FROM stat_inst_para_time USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + DELETE FROM stat_link_para + WHERE STAT_PARA_TAG = OLD.PARA_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_para', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_template_para')); + END IF; + + + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_PARA ON stat_template_para; +CREATE TRIGGER TDA_STAT_TEMPLATE_PARA AFTER DELETE ON stat_template_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ +BEGIN + --插入相应实例点 + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_ret', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_template_ret')); + END IF; + + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_RET ON stat_template_ret; +CREATE TRIGGER TIA_STAT_TEMPLATE_RET AFTER INSERT ON stat_template_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_template_ret')); + END IF; + + UPDATE stat_link_ret + SET STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.RET_TAG)) + WHERE STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.RET_TAG)); + + IF OLD.RET_TAG = NEW.RET_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.SORT = NEW.SORT + THEN RETURN NEW; + END IF; + + --更新相应的实例点 + IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN + BEGIN + DELETE FROM stat_inst_ret_grp USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; + END; + ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN + BEGIN + DELETE FROM stat_inst_ret_para USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); + + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN + BEGIN + update stat_inst_ret_para + SET RET_TAG = concat(stat_inst_ret_para.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT + from stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_para.INST_TAG AND `RANK` = 1 AND getAfterLastDot(RET_TAG) = getAfterLastDot(OLD.RET_TAG); + + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN + BEGIN + update stat_inst_ret_grp + SET RET_GRP_TAG = concat(stat_inst_ret_grp.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), DESCRIPTION = NEW.DESCRIPTION, SORT = NEW.SORT + from stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_grp.INST_TAG AND getAfterLastDot(RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + END; + END IF; + + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_RET ON stat_template_ret; +CREATE TRIGGER TUA_STAT_TEMPLATE_RET AFTER UPDATE ON stat_template_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ +BEGIN + --删除相应的实例点 + DELETE FROM stat_inst_ret_grp USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + DELETE FROM stat_inst_ret_para USING stat_inst_def + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); + DELETE FROM stat_link_ret + WHERE STAT_RET_TAG = OLD.RET_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_template_ret')); + END IF; + + +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_RET ON stat_template_ret; +CREATE TRIGGER TDA_STAT_TEMPLATE_RET AFTER DELETE ON stat_template_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_condition_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; +CREATE TRIGGER TIA_TRIGGER_CONDITION_DEFINE AFTER INSERT ON trigger_condition_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_CONDITION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; +CREATE TRIGGER TUA_TRIGGER_CONDITION_DEFINE AFTER UPDATE ON trigger_condition_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_CONDITION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_condition_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; +CREATE TRIGGER TDA_TRIGGER_CONDITION_DEFINE AFTER DELETE ON trigger_condition_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_CONDITION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_function_define', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; +CREATE TRIGGER TIA_TRIGGER_FUNCTION_DEFINE AFTER INSERT ON trigger_function_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_FUNCTION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; +CREATE TRIGGER TUA_TRIGGER_FUNCTION_DEFINE AFTER UPDATE ON trigger_function_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_FUNCTION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('trigger_function_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; +CREATE TRIGGER TDA_TRIGGER_FUNCTION_DEFINE AFTER DELETE ON trigger_function_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_FUNCTION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_period_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; +CREATE TRIGGER TIA_TRIGGER_PERIOD_DEFINE AFTER INSERT ON trigger_period_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_PERIOD_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; +CREATE TRIGGER TUA_TRIGGER_PERIOD_DEFINE AFTER UPDATE ON trigger_period_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_PERIOD_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_period_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; +CREATE TRIGGER TDA_TRIGGER_PERIOD_DEFINE AFTER DELETE ON trigger_period_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_PERIOD_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_timer_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; +CREATE TRIGGER TIA_TRIGGER_TIMER_DEFINE AFTER INSERT ON trigger_timer_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_TIMER_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; +CREATE TRIGGER TUA_TRIGGER_TIMER_DEFINE AFTER UPDATE ON trigger_timer_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_TIMER_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_timer_define')); +END IF; +RETURN OLD; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; +CREATE TRIGGER TDA_TRIGGER_TIMER_DEFINE AFTER DELETE ON trigger_timer_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_TIMER_DEFINE(); + + + +--t_sys_table_file_tree表实现序列的触发器 +CREATE OR REPLACE FUNCTION FUNC_T_SYS_TABLE_FILE_TREE_SEQUENCE() RETURNS TRIGGER AS $$ + DECLARE max_id DECIMAL(10,0) DEFAULT 0; +BEGIN + IF NEW.id IS NULL THEN + SELECT MAX(id) INTO max_id FROM t_sys_table_file_tree; + max_id = COALESCE(max_id,0); + NEW.id = max_id + 1; + END IF; + RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS T_SYS_TABLE_FILE_TREE_SEQUENCE ON t_sys_table_file_tree; +CREATE TRIGGER T_SYS_TABLE_FILE_TREE_SEQUENCE BEFORE INSERT ON t_sys_table_file_tree FOR EACH ROW +EXECUTE PROCEDURE FUNC_T_SYS_TABLE_FILE_TREE_SEQUENCE(); + + + +--t_w_inspection表实现序列的触发器 +CREATE OR REPLACE FUNCTION FUNC_T_W_INSPECTION_SEQUENCE() RETURNS TRIGGER AS $$ + DECLARE max_id DECIMAL(10,0) DEFAULT 0; +BEGIN + IF NEW.id IS NULL THEN + SELECT MAX(id) INTO max_id FROM t_w_inspection; + max_id = COALESCE(max_id,0); + NEW.id = max_id + 1; + END IF; + RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS T_W_INSPECTION_SEQUENCE ON t_w_inspection; +CREATE TRIGGER T_W_INSPECTION_SEQUENCE BEFORE INSERT ON t_w_inspection FOR EACH ROW +EXECUTE PROCEDURE FUNC_T_W_INSPECTION_SEQUENCE(); + + + +-------------------------------------------------------------------------------------------------------------------- +--以下是函数-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION splitList( strList varchar(100), split_char varchar(1) , strCount decimal(10,0)) RETURNS varchar(64) +AS $$ + DECLARE splitCount int; + DECLARE splitIndex int DEFAULT 1; + DECLARE str1 varchar(100) DEFAULT ''; + DECLARE str2 varchar(100) DEFAULT ''; +BEGIN + --分割字符串,返回第strCount个子串 + + splitCount = char_length(strList)-char_length(replace(strList,split_char,'')) + 1; + IF strCount > splitCount OR strCount <=0 THEN RETURN ''; + END IF; + + IF strCount = 1 THEN RETURN substring_index(strList,split_char,strCount); + ELSE + BEGIN + str1 = substring_index(strList,split_char,strCount-1); + str2 = substring_index(strList,split_char,strCount); + RETURN right(str2,LENGTH(str2) - LENGTH(str1) - 1); + END; + END IF; + +END; +$$LANGUAGE PLPGSQL; + + + + +CREATE OR REPLACE FUNCTION clearTempRelation(devTempName varchar(64)) +RETURNS VOID +AS $$ +BEGIN + /* + * 清除指定模板的所有测点与前置模板的关系 + */ + + UPDATE accuml_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE analog_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1, + OUT_SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE digital_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO1 = -1, + SEC_SEQ_NO2 = -1, + SEC_SEQ_NO3 = -1, + SEC_SEQ_NO4 = -1, + SEC_SEQ_NO5 = -1, + OUT_SEC_SEQ_NO1 = -1, + OUT_SEC_SEQ_NO2 = -1, + OUT_SEC_SEQ_NO3 = -1, + OUT_SEC_SEQ_NO4 = -1, + OUT_SEC_SEQ_NO5 = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE mix_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1, + OUT_SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + +END; +$$LANGUAGE PLPGSQL; + + + + +CREATE OR REPLACE FUNCTION updateFesResPara(tableName varchar(64),startNum decimal(10,0)) +RETURNS VOID +AS $$ +BEGIN + /* + * 批量修改设备的规约参数1,要批量修改的设备在export_seq中 + * tableName 表名 + * startNum 修改的起始数字 + */ + + --创建临时表 + CREATE TEMPORARY TABLE IF NOT EXISTS tmpUpdateFesResParaTbl( + TAG_NAME varchar(64) NOT NULL, + RES_PARA decimal(10,0) NOT NULL + ); + DELETE FROM tmpUpdateFesResParaTbl; + + IF lower(tableName) = 'fes_accuml' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_accuml,export_seq WHERE fes_accuml.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_accuml.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_accuml + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_accuml.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_analog' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_analog,export_seq WHERE fes_analog.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_analog.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_analog + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_analog.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_analog_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_analog_ctrl,export_seq WHERE fes_analog_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_analog_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_analog_ctrl + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_analog_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_digital' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_digital,export_seq WHERE fes_digital.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_digital.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_digital + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_digital.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_digital_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_digital_ctrl,export_seq WHERE fes_digital_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_digital_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_digital_ctrl + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_digital_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_mix' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_mix,export_seq WHERE fes_mix.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_mix.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_mix + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_mix.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_mix_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_mix_ctrl,export_seq WHERE fes_mix_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_mix_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_mix_ctrl + SET RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_mix_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + END IF; + + + +END; +$$LANGUAGE PLPGSQL; + + + + +CREATE OR REPLACE FUNCTION bindStatDev(statTag varchar(64),devTag varchar(64)) +RETURNS VOID +AS $$ +BEGIN + /* + * 绑定统计分析中的实例,使用对应的后台设备 + * statTag 统计分析实例 + * devTag 后台设备 + */ + + --清空 + UPDATE stat_inst_para_point SET POINT_TAG = '' WHERE INST_TAG = statTag; + + UPDATE stat_inst_ret_para SET POINT_TAG = '' WHERE INST_TAG = statTag; + + --填写 + CREATE TEMPORARY TABLE IF NOT EXISTS tmpBinStatDevTbl( + PARA_TAG varchar(64) NOT NULL, + POINT_TAG varchar(64) NOT NULL + ); + DELETE FROM tmpBinStatDevTbl; + + --查找对应的测点 + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('analog.',analog.TAG_NAME) AS A + FROM stat_inst_para_point,analog + WHERE INST_TAG = statTag AND analog.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(analog.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('accuml.',accuml.TAG_NAME) AS A + FROM stat_inst_para_point,accuml + WHERE INST_TAG = statTag AND accuml.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(accuml.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('digital.',digital.TAG_NAME) AS A + FROM stat_inst_para_point,digital + WHERE INST_TAG = statTag AND digital.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(digital.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('mix.',mix.TAG_NAME) AS A + FROM stat_inst_para_point,mix + WHERE INST_TAG = statTag AND mix.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(mix.TAG_NAME); + + update stat_inst_para_point + SET POINT_TAG = tmpBinStatDevTbl.POINT_TAG + from tmpbinstatdevtbl + where stat_inst_para_point.para_tag = tmpbinstatdevtbl.para_tag; + + + DELETE FROM tmpBinStatDevTbl; + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('analog.',analog.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,analog + WHERE INST_TAG = statTag AND analog.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(analog.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('digital.',digital.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,digital + WHERE INST_TAG = statTag AND digital.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(digital.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('accuml.',accuml.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,accuml + WHERE INST_TAG = statTag AND accuml.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(accuml.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('mix.',mix.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,mix + WHERE INST_TAG = statTag AND mix.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(mix.TAG_NAME); + + update stat_inst_ret_para + SET POINT_TAG = tmpBinStatDevTbl.POINT_TAG, IS_BIND = '1' + from tmpbinstatdevtbl + where stat_inst_ret_para.ret_tag = tmpbinstatdevtbl.para_tag; + + +END; +$$LANGUAGE PLPGSQL; + + + +CREATE OR REPLACE FUNCTION relationByTempPointName(devTempName varchar(64),fesDevTempName varchar(64)) +RETURNS VOID +AS $$ +BEGIN + /* + * 按照模板下的测点名称进行,后台模板与前置模板的关联 + */ + --获取设备测点名称 + + CALL clearTempRelation(devTempName); + --创建临时表, + CREATE TEMPORARY TABLE IF NOT EXISTS tmpRelationNameTbl( + TAG_NAME varchar(64) NOT NULL, + FES_SEQ_NO decimal(10,0) NOT NULL + ); + + --accuml + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM accuml_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_ACC')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update accuml_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where accuml_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + + --analog + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM analog_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_ANA')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update analog_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where analog_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + + --digital只判断第一个分量 + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM digital_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_DIG')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update digital_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO1 = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where digital_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + + --mix + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM mix_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_MIX')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update mix_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where mix_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + +END; +$$LANGUAGE PLPGSQL; + + + + diff --git a/product/common/database/initscript/iscs6000_func_MySQL.sql b/product/common/database/initscript/iscs6000_func_MySQL.sql index c06890e9..0f98b67d 100644 --- a/product/common/database/initscript/iscs6000_func_MySQL.sql +++ b/product/common/database/initscript/iscs6000_func_MySQL.sql @@ -1,7018 +1,6968 @@ - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ACCUML_LIMIT_INFO` AFTER INSERT ON `accuml_limit_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ACCUML_LIMIT_INFO` AFTER UPDATE ON `accuml_limit_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ACCUML_LIMIT_INFO` AFTER DELETE ON `accuml_limit_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_limit_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_ACCUML_MAP_TO_FES -AFTER INSERT -ON accuml_map_to_fes FOR EACH ROW -BEGIN - - #首先禁止FES触发器动作 - SET @disableFesAccumlTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableAccumlMapToFesTrigger,0) = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET @disableFesAccumlTrigger = 0; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_ACCUML_MAP_TO_FES -BEFORE UPDATE -ON accuml_map_to_fes FOR EACH ROW -body_label:BEGIN - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN LEAVE body_label; - END IF; - - - #首先禁止FES触发器动作 - SET @disableFesAccumlTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableAccumlMapToFesTrigger,0) = 0 THEN - BEGIN - #清除旧的 - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - #添加新的 - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE SET NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - SET @disableFesAccumlTrigger = 0; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ACCUML_MAP_TO_FES` AFTER UPDATE ON `accuml_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_ACCUML_MAP_TO_FES -BEFORE DELETE -ON accuml_map_to_fes FOR EACH ROW -BEGIN - - - #首先禁止FES触发器动作 - SET @disableFesAccumlTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableAccumlMapToFesTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET @disableFesAccumlTrigger = 0; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ACCUML_MAP_TO_FES` AFTER DELETE ON `accuml_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('accuml_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_ACCUML_TEMP_DEFINE -AFTER INSERT -ON accuml_temp_define FOR EACH ROW -BEGIN - /* -INSERT INTO accuml( -TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)), NEW.DESCRIPTION,TAG_NAME, NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP, NEW.IS_LIMIT, NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS, NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - INSERT INTO temp_plugin_point_map_acc - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_ACCUML_TEMP_DEFINE -AFTER UPDATE -ON accuml_temp_define FOR EACH ROW -BEGIN - /* - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.UNIT_ID <> OLD.UNIT_ID OR NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR - NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.SEQ_NO <> OLD.SEQ_NO OR - NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT - THEN - UPDATE accuml SET - accuml.TAG_NAME = concat(accuml.DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - accuml.DESCRIPTION = NEW.DESCRIPTION, - accuml.UNIT_ID = NEW.UNIT_ID, - accuml.IS_LIMIT = NEW.IS_LIMIT, - accuml.POINT_CLASS = NEW.POINT_CLASS, - accuml.POINT_TP_NAME = NEW.TAG_NAME, - accuml.IS_SAMPLE = NEW.IS_SAMPLE, - accuml.SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND, - accuml.POINT_TYPE = NEW.POINT_TYPE, - accuml.SEQ_NO = NEW.SEQ_NO, - accuml.IS_STATISTICS = NEW.IS_STATISTICS, - accuml.SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - accuml.POINT_PROPERTY = NEW.POINT_PROPERTY, - accuml.POINT_SORT = NEW.POINT_SORT - WHERE accuml.POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR - NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR - NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR - NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE accuml_limit_info SET - LIMIT_TYPE = NEW.LIMIT_TYPE, - LIMIT_NUM = NEW.LIMIT_NUM, - LIMIT_UP1 = NEW.LIMIT_UP1, - LIMIT_LOW1 = NEW.LIMIT_LOW1, - LIMIT_UP2 = NEW.LIMIT_UP2, - LIMIT_LOW2 = NEW.LIMIT_LOW2, - LIMIT_UP3 = NEW.LIMIT_UP3, - LIMIT_LOW3 = NEW.LIMIT_LOW3, - CROSS_PERCENT = NEW.CROSS_PERCENT, - RETURN_PERCENT = NEW.RETURN_PERCENT, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - IF NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR - NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF - THEN - UPDATE accuml_map_to_fes SET - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - IS_FILTER = NEW.IS_FILTER, - PERCENT = NEW.PERCENT, - BASE = NEW.BASE, - COEFF = NEW.COEFF - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_acc - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_ACCUML_TEMP_DEFINE -BEFORE DELETE -ON accuml_temp_define FOR EACH ROW -BEGIN - - DELETE FROM temp_plugin_point_map_acc WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* -DELETE FROM accuml WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ACCUML_TEMP_DEFINE` AFTER DELETE ON `accuml_temp_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ALARM_LINK_ENABLE_INFO` AFTER INSERT ON `alarm_link_enable_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_link_enable_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ALARM_LINK_ENABLE_INFO` AFTER UPDATE ON `alarm_link_enable_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ALARM_LINK_ENABLE_INFO` AFTER DELETE ON `alarm_link_enable_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('alarm_link_enable_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ALARM_SMS_CONFIG` AFTER INSERT ON `alarm_sms_config` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_config', 'NO', '', NEW.NO, getTableSubSystem('alarm_sms_config')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ALARM_SMS_CONFIG` AFTER UPDATE ON `alarm_sms_config` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_config', 'NO', OLD.NO, NEW.NO, getTableSubSystem('alarm_sms_config')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ALARM_SMS_CONFIG` AFTER DELETE ON `alarm_sms_config` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_config', 'NO', OLD.NO, '', getTableSubSystem('alarm_sms_config')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ALARM_SMS_DEVICE` AFTER INSERT ON `alarm_sms_device` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_device', 'DEVICE_ID', '', NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ALARM_SMS_DEVICE` AFTER UPDATE ON `alarm_sms_device` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ALARM_SMS_DEVICE` AFTER DELETE ON `alarm_sms_device` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, '', getTableSubSystem('alarm_sms_device')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ALARM_SMS_RULE` AFTER INSERT ON `alarm_sms_rule` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_rule', 'RULE_ID', '', NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ALARM_SMS_RULE` AFTER UPDATE ON `alarm_sms_rule` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ALARM_SMS_RULE` AFTER DELETE ON `alarm_sms_rule` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, '', getTableSubSystem('alarm_sms_rule')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ANALOG_CONTROL` AFTER INSERT ON `analog_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_ANALOG_CONTROL -BEFORE UPDATE -ON analog_control FOR EACH ROW -body:BEGIN - - #修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - SET NEW.OFFSET_NO = '-1'; - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ANALOG_CONTROL` AFTER UPDATE ON `analog_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ANALOG_CONTROL` AFTER DELETE ON `analog_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ANALOG_LIMIT_INFO` AFTER INSERT ON `analog_limit_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ANALOG_LIMIT_INFO` AFTER UPDATE ON `analog_limit_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ANALOG_LIMIT_INFO` AFTER DELETE ON `analog_limit_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_limit_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_ANALOG_MAP_TO_FES -AFTER INSERT -ON analog_map_to_fes FOR EACH ROW -BEGIN - - - SET @disableFesAnalogTrigger = 1; - - IF COALESCE(@disableAnalogMapToFesTrigger,0) = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET @disableFesAnalogTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_ANALOG_MAP_TO_FES -BEFORE UPDATE -ON analog_map_to_fes FOR EACH ROW -body_label:BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN LEAVE body_label; - END IF; - - CALL kbdDebugInfo('FES analog update','In TU_ANALOG_MAP_TO_FES'); - - SET @disableFesAnalogTrigger = 1; - - IF COALESCE(@disableAnalogMapToFesTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE SET NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET @disableFesAnalogTrigger = 0; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ANALOG_MAP_TO_FES` AFTER UPDATE ON `analog_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_ANALOG_MAP_TO_FES -BEFORE DELETE -ON analog_map_to_fes FOR EACH ROW -body_label:BEGIN - - CALL kbdDebugInfo('FES analog update','In TD_ANALOG_MAP_TO_FES'); - - SET @disableFesAnalogTrigger = 1; - - IF COALESCE(@disableAnalogMapToFesTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET @disableFesAnalogTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ANALOG_MAP_TO_FES` AFTER DELETE ON `analog_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('analog_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_ANALOG_TEMP_DEFINE -AFTER INSERT -ON analog_temp_define FOR EACH ROW -BEGIN - -/* -INSERT INTO analog( -TAG_NAME, DESCRIPTION, RTU_TAG, DEV_TYPE, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, IS_CONTROL, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)) , NEW.DESCRIPTION ,'', DEV_TYPE, TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, NEW.IS_CONTROL,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP,NEW.IS_LIMIT,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - - INSERT INTO temp_plugin_point_map_ana - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_ANALOG_TEMP_DEFINE -AFTER UPDATE -ON analog_temp_define FOR EACH ROW -BEGIN - /* - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.SEQ_NO <> OLD.SEQ_NO OR NEW.IS_CONTROL <> OLD.IS_CONTROL OR NEW.UNIT_ID <> OLD.UNIT_ID OR - NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT OR - NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND - THEN - UPDATE analog SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - UNIT_ID = NEW.UNIT_ID, - IS_LIMIT = NEW.IS_LIMIT, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND - WHERE POINT_TP_NAME=OLD.TAG_NAME; - END IF; - - IF NEW.IS_TAGT_STATE <> OLD.IS_TAGT_STATE OR NEW.CTRL_TIMEOUT <> OLD.CTRL_TIMEOUT OR NEW.RESV_TIMEOUT <> OLD.RESV_TIMEOUT OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR - NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.CTRL_TOLERANCE <> OLD.CTRL_TOLERANCE OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE analog_control SET - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR - NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR - NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR - NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE analog_limit_info SET - LIMIT_TYPE = NEW.LIMIT_TYPE , - LIMIT_NUM = NEW.LIMIT_NUM , - LIMIT_UP1 = NEW.LIMIT_UP1 , - LIMIT_LOW1 = NEW.LIMIT_LOW1 , - LIMIT_UP2 = NEW.LIMIT_UP2 , - LIMIT_LOW2 = NEW.LIMIT_LOW2 , - LIMIT_UP3 = NEW.LIMIT_UP3 , - LIMIT_LOW3 = NEW.LIMIT_LOW3 , - CROSS_PERCENT = NEW.CROSS_PERCENT , - RETURN_PERCENT = NEW.RETURN_PERCENT , - ALARM_PRIORITY = NEW.ALARM_PRIORITY , - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME , - IS_WATER_ALM = NEW.IS_WATER_ALM , - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN , - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK , - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR NEW.IS_VALID <> OLD.IS_VALID OR NEW.DEADBAND <> OLD.DEADBAND OR - NEW.ZEROBAND <> OLD.ZEROBAND OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW - THEN - UPDATE analog_map_to_fes SET - POINT_TP_NAME = NEW.TAG_NAME, - IS_FILTER = NEW.IS_FILTER, - PERCENT = NEW.PERCENT, - IS_VALID = NEW.IS_VALID, - DEADBAND = NEW.DEADBAND, - ZEROBAND = NEW.ZEROBAND, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_ana - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_ANALOG_TEMP_DEFINE -BEFORE DELETE -ON analog_temp_define FOR EACH ROW -BEGIN - DELETE FROM temp_plugin_point_map_ana WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* - DELETE FROM analog WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ANALOG_TEMP_DEFINE` AFTER DELETE ON `analog_temp_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_APC_ANALOG` AFTER INSERT ON `APC_ANALOG` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_analog', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUB_APC_ANALOG` BEFORE UPDATE ON `APC_ANALOG` FOR EACH ROW BEGIN -IF NEW.NO_RDB_SYNC = 1 THEN -SET NEW.NO_RDB_SYNC = NULL; -ELSEIF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_APC_ANALOG` AFTER DELETE ON `APC_ANALOG` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_analog')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_apc_curve` AFTER INSERT ON `apc_curve` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_apc_curve` AFTER UPDATE ON `apc_curve` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_apc_curve` AFTER DELETE ON `apc_curve` FOR EACH ROW BEGIN -delete from apc_curve_day_index where curve_key_id_tag = old.key_id_tag; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_curve')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_APC_CURVE_DAY_INDEX` AFTER INSERT ON `apc_curve_day_index` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', '', concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_APC_CURVE_DAY_INDEX` AFTER UPDATE ON `apc_curve_day_index` FOR EACH ROW BEGIN -IF((select count(*) from apc_curve_day_index where day_rule_id = old.day_rule_id)<1) THEN -delete from apc_curve_day_value where day_rule_id = old.day_rule_id; -END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_APC_CURVE_DAY_INDEX` AFTER DELETE ON `apc_curve_day_index` FOR EACH ROW BEGIN -delete from apc_curve_day_value where day_rule_id = old.day_rule_id; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id',concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), '', getTableSubSystem('apc_curve_day_index')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_APC_CURVE_DAY_VALUE` AFTER INSERT ON `apc_curve_day_value` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', '', concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_APC_CURVE_DAY_VALUE` AFTER UPDATE ON `apc_curve_day_value` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_APC_CURVE_DAY_VALUE` AFTER DELETE ON `apc_curve_day_value` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), '', getTableSubSystem('apc_curve_day_value')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_APC_CURVE_WEEK` AFTER INSERT ON `apc_curve_week` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_week', 'type_id,week_day', '', concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_APC_CURVE_WEEK` AFTER UPDATE ON `apc_curve_week` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_APC_CURVE_WEEK` AFTER DELETE ON `apc_curve_week` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), '', getTableSubSystem('apc_curve_week')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_APC_CURVE_YEAR` AFTER INSERT ON `apc_curve_year` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_APC_CURVE_YEAR` AFTER UPDATE ON `apc_curve_year` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_APC_CURVE_YEAR` AFTER DELETE ON `apc_curve_year` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_APC_DIGITAL` AFTER INSERT ON `apc_digital` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_digital', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUB_APC_DIGITAL` BEFORE UPDATE ON `apc_digital` FOR EACH ROW BEGIN -IF NEW.NO_RDB_SYNC = 1 THEN -SET NEW.NO_RDB_SYNC = NULL; -ELSEIF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_APC_DIGITAL` AFTER DELETE ON `apc_digital` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_digital')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ATS_CASCO_PLANNED_TRAIN_DATA` AFTER INSERT ON `ats_casco_planned_train_data` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ATS_CASCO_PLANNED_TRAIN_DATA` AFTER UPDATE ON `ats_casco_planned_train_data` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ATS_CASCO_PLANNED_TRAIN_DATA` AFTER DELETE ON `ats_casco_planned_train_data` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_planned_train_data')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA` AFTER INSERT ON `ats_casco_practical_train_data` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA` AFTER UPDATE ON `ats_casco_practical_train_data` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA` AFTER DELETE ON `ats_casco_practical_train_data` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_practical_train_data')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ATS_FES_LOCATION_INFO` AFTER INSERT ON `ats_fes_location_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_location_info', 'ats_location_id', '', NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ATS_FES_LOCATION_INFO` AFTER UPDATE ON `ats_fes_location_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ATS_FES_LOCATION_INFO` AFTER DELETE ON `ats_fes_location_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, '', getTableSubSystem('ats_fes_location_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_ATS_FES_PLATFORM_INFO` AFTER INSERT ON `ats_fes_platform_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', '', concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_ATS_FES_PLATFORM_INFO` AFTER UPDATE ON `ats_fes_platform_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_ATS_FES_PLATFORM_INFO` AFTER DELETE ON `ats_fes_platform_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), '', getTableSubSystem('ats_fes_platform_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_BAS_TIMETABLE_CTRL_PARAM` AFTER INSERT ON `bas_timetable_ctrl_param` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_BAS_TIMETABLE_CTRL_PARAM` AFTER UPDATE ON `bas_timetable_ctrl_param` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_BAS_TIMETABLE_CTRL_PARAM` AFTER DELETE ON `bas_timetable_ctrl_param` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_BAS_TIMETABLE_DEF` AFTER INSERT ON `bas_timetable_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_def', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_BAS_TIMETABLE_DEF` AFTER UPDATE ON `bas_timetable_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_BAS_TIMETABLE_DEF` AFTER DELETE ON `bas_timetable_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_BAS_TIMETABLE_INFO` AFTER INSERT ON `bas_timetable_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_info', 'location_id,timetable_id,begin_time', '', concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_BAS_TIMETABLE_INFO` AFTER UPDATE ON `bas_timetable_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_BAS_TIMETABLE_INFO` AFTER DELETE ON `bas_timetable_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), '', getTableSubSystem('bas_timetable_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_BAS_TIMETABLE_SCHEDULE` AFTER INSERT ON `bas_timetable_schedule` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_schedule', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_BAS_TIMETABLE_SCHEDULE` AFTER UPDATE ON `bas_timetable_schedule` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_BAS_TIMETABLE_SCHEDULE` AFTER DELETE ON `bas_timetable_schedule` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_schedule')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_CALC_FUNC_DEF` AFTER INSERT ON `calc_func_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_func_def', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_CALC_FUNC_DEF` AFTER UPDATE ON `calc_func_def` FOR EACH ROW BEGIN - - UPDATE calc_out_para SET - FUNC_NAME = NEW.FUNC_NAME, - CALC_FLAG = '1' - WHERE FUNC_NAME = OLD.FUNC_NAME; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_func_def', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_CALC_FUNC_DEF` AFTER DELETE ON `calc_func_def` FOR EACH ROW BEGIN - DELETE FROM calc_out_para WHERE FUNC_NAME = OLD.FUNC_NAME; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_func_def', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('calc_func_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_CALC_GROUP_DEF` AFTER INSERT ON `calc_group_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_group_def', 'group_id', '', NEW.GROUP_ID, getTableSubSystem('calc_group_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_CALC_GROUP_DEF` AFTER UPDATE ON `calc_group_def` FOR EACH ROW BEGIN - - IF NEW.GROUP_ID <> OLD.GROUP_ID THEN - UPDATE calc_func_def SET GROUP_ID = NEW.GROUP_ID WHERE GROUP_ID = OLD.GROUP_ID; - END IF; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_group_def', 'group_id', OLD.GROUP_ID, NEW.GROUP_ID, getTableSubSystem('calc_group_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_CALC_GROUP_DEF` AFTER DELETE ON `calc_group_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_group_def', 'group_id', OLD.GROUP_ID, '', getTableSubSystem('calc_group_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_CALC_IN_PARA` AFTER INSERT ON `calc_in_para` FOR EACH ROW BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_in_para', 'key_id_tag,para_seq_no', '', concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_CALC_IN_PARA` AFTER UPDATE ON `calc_in_para` FOR EACH ROW BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_CALC_IN_PARA` AFTER DELETE ON `calc_in_para` FOR EACH ROW BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = OLD.KEY_ID_TAG; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_in_para')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_CALC_OUT_PARA` AFTER INSERT ON `calc_out_para` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_out_para', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_CALC_OUT_PARA` AFTER UPDATE ON `calc_out_para` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_CALC_OUT_PARA -AFTER DELETE -ON calc_out_para FOR EACH ROW -BEGIN - - #这里不能触发删除本输出的输入,因为输入的删除触发器中调用了本表 - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('calc_out_para')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_CALC_PARA_DEF` AFTER INSERT ON `calc_para_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_para_def', 'func_name,para_seq_no', '', concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_CALC_PARA_DEF` AFTER UPDATE ON `calc_para_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_CALC_PARA_DEF` AFTER DELETE ON `calc_para_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_para_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_CFG_DEVICE_INST` AFTER INSERT ON `cfg_device_inst` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_device_inst', 'id', '', NEW.id, getTableSubSystem('cfg_device_inst')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_CFG_DEVICE_INST` AFTER UPDATE ON `cfg_device_inst` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'cfg_device_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_device_inst')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_CFG_DEVICE_INST` AFTER DELETE ON `cfg_device_inst` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_device_inst', 'id', OLD.id, '', getTableSubSystem('cfg_device_inst')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_CFG_SIGNAL_INST` AFTER INSERT ON `cfg_signal_inst` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_signal_inst', 'id', '', NEW.id, getTableSubSystem('cfg_signal_inst')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_CFG_SIGNAL_INST` AFTER UPDATE ON `cfg_signal_inst` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'cfg_signal_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_signal_inst')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_CFG_SIGNAL_INST` AFTER DELETE ON `cfg_signal_inst` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_signal_inst', 'id', OLD.id, '', getTableSubSystem('cfg_signal_inst')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_DEV_TEMP_DEF` AFTER INSERT ON `dev_temp_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_DEV_TEMP_DEF -AFTER UPDATE -ON dev_temp_def FOR EACH ROW -BEGIN -IF OLD.TAG_NAME != NEW.TAG_NAME THEN -BEGIN - UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -END; -END IF; - -IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DESCRIPTION != NEW.DESCRIPTION THEN -BEGIN - UPDATE accuml_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - UPDATE analog_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - - UPDATE digital_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - UPDATE mix_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - #更新对应的套件 - IF OLD.TAG_NAME != NEW.TAG_NAME THEN - BEGIN - UPDATE temp_plugin_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_fes_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_acc SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_ana SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_dig SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_mix SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - END; - END IF; -END; -END IF; -/* -IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DEV_TYPE_ID != NEW.DEV_TYPE_ID OR OLD.SUB_SYSTEM != NEW.SUB_SYSTEM -THEN -UPDATE dev_info SET -DEV_TP_NAME=NEW.TAG_NAME, -DEV_TYPE=NEW.DEV_TYPE_ID, -SUB_SYSTEM = NEW.SUB_SYSTEM -WHERE DEV_TP_NAME=OLD.TAG_NAME ; -END IF; -*/ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_DEV_TEMP_DEF -BEFORE DELETE -ON dev_temp_def FOR EACH ROW -BEGIN - -/* -DELETE FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; -*/ -DELETE FROM accuml_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM analog_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM digital_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM mix_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -#套件的处理 -DELETE FROM temp_plugin_dev_map WHERE TEMP_NAME = OLD.TAG_NAME; -UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_DEV_TEMP_DEF` AFTER DELETE ON `dev_temp_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('dev_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_DEV_TEMP_GROUP -AFTER UPDATE -ON dev_temp_group FOR EACH ROW -BEGIN - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE dev_temp_def SET DEV_TEMP_GRP = NEW.TAG_NAME WHERE DEV_TEMP_GRP = OLD.TAG_NAME; - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_DEV_TEMP_GROUP -AFTER DELETE ON dev_temp_group -FOR EACH ROW -BEGIN - - DELETE FROM dev_temp_def WHERE DEV_TEMP_GRP = OLD.TAG_NAME; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_DIGITAL_CONTROL` AFTER INSERT ON `digital_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_DIGITAL_CONTROL -BEFORE UPDATE -ON digital_control FOR EACH ROW -body:BEGIN - - #修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - SET NEW.OFFSET_NO1 = '-1'; - SET NEW.OFFSET_NO2 = '-1'; - SET NEW.OFFSET_NO3 = '-1'; - SET NEW.OFFSET_NO4 = '-1'; - SET NEW.OFFSET_NO5 = '-1'; - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_DIGITAL_CONTROL` AFTER UPDATE ON `digital_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_DIGITAL_CONTROL` AFTER DELETE ON `digital_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_DIGITAL_MAP_TO_FES -AFTER INSERT -ON digital_map_to_fes FOR EACH ROW -BEGIN - CALL kbdDebugInfo('FES digtal update','In TI_DIGTAL_MAP_TO_FES'); - - SET @disableFesDigitalTrigger = 1; - - IF COALESCE(@disableDigitalMapToFesTrigger,0) = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value1' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); - END IF; - - IF COALESCE(NEW.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value2' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); - END IF; - - IF COALESCE(NEW.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value3' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); - END IF; - - IF COALESCE(NEW.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value4' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); - END IF; - - IF COALESCE(NEW.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value5' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); - END IF; - - END; - END IF; - END; - END IF; - SET @disableFesDigitalTrigger = 0; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_DIGITAL_MAP_TO_FES -BEFORE UPDATE -ON digital_map_to_fes FOR EACH ROW -body_label: BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO1 = OLD.DOT_NO1 AND - NEW.DOT_NO2 = OLD.DOT_NO2 AND - NEW.DOT_NO3 = OLD.DOT_NO3 AND - NEW.DOT_NO4 = OLD.DOT_NO4 AND - NEW.DOT_NO5 = OLD.DOT_NO5 AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN LEAVE body_label; - END IF; - - CALL kbdDebugInfo('FES digtal update','In TU_DIGTAL_MAP_TO_FES'); - - SET @disableFesDigitalTrigger = 1; - - IF COALESCE(@disableDigitalMapToFesTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); - END IF; - - IF COALESCE(OLD.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); - END IF; - - IF COALESCE(OLD.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); - END IF; - - IF COALESCE(OLD.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); - END IF; - - IF COALESCE(OLD.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value1' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); - END IF; - - IF COALESCE(NEW.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value2' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); - END IF; - - IF COALESCE(NEW.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value3' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); - END IF; - - IF COALESCE(NEW.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value4' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); - END IF; - - IF COALESCE(NEW.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value5' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); - END IF; - - END; - ELSE - BEGIN - SET NEW.DOT_NO1 = '-1'; - SET NEW.DOT_NO2 = '-1'; - SET NEW.DOT_NO3 = '-1'; - SET NEW.DOT_NO4 = '-1'; - SET NEW.DOT_NO5 = '-1'; - END; - END IF; - END; - END IF; - SET @disableFesDigitalTrigger = 0; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_DIGITAL_MAP_TO_FES` AFTER UPDATE ON `digital_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_DIGITAL_MAP_TO_FES -BEFORE DELETE -ON digital_map_to_fes FOR EACH ROW -BEGIN - CALL kbdDebugInfo('FES digtal update','In TD_DIGTAL_MAP_TO_FES'); - - SET @disableFesDigitalTrigger = 1; - - IF COALESCE(@disableDigitalMapToFesTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); - END IF; - - IF COALESCE(OLD.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); - END IF; - - IF COALESCE(OLD.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); - END IF; - - IF COALESCE(OLD.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); - END IF; - - IF COALESCE(OLD.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); - END IF; - - END; - END IF; - END; - END IF; - - SET @disableFesDigitalTrigger = 0; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_DIGITAL_MAP_TO_FES` AFTER DELETE ON `digital_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('digital_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_DIGITAL_TEMP_DEFINE -AFTER INSERT -ON digital_temp_define FOR EACH ROW -BEGIN - -/* -INSERT INTO digital( -TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, VALUE_NUM, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, VALUE1, STATUS1, LAST_CHANGE_TIME1, VALUE2, STATUS2, LAST_CHANGE_TIME2, VALUE3, STATUS3, LAST_CHANGE_TIME3, VALUE4, STATUS4, LAST_CHANGE_TIME4, VALUE5, STATUS5, LAST_CHANGE_TIME5, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, INPUT_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, IS_ALARM_FREQ, ALARM_FREQ, ALARM_FREQ_DESC, IS_ALARM_TIME, ALARM_TIME, ALARM_TIME_DESC, ALARM_FREQ_RANGE, INFER_NAME, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID ) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, "", NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,NEW.VALUE_NUM,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.INPUT_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.IS_ALARM_FREQ,NEW.ALARM_FREQ,NEW.ALARM_FREQ_DESC,NEW.IS_ALARM_TIME,NEW.ALARM_TIME,NEW.ALARM_TIME_DESC,NEW.ALARM_FREQ_RANGE,'', NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - INSERT INTO temp_plugin_point_map_dig - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME1, FES_TEMP_POINT_NAME2, FES_TEMP_POINT_NAME3, FES_TEMP_POINT_NAME4, FES_TEMP_POINT_NAME5, FES_TEMP_OUT_NAME1, FES_TEMP_OUT_NAME2, FES_TEMP_OUT_NAME3, FES_TEMP_OUT_NAME4, FES_TEMP_OUT_NAME5) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'', '', '', '', '', '', '', '', '', '', '' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_DIGITAL_TEMP_DEFINE -AFTER UPDATE -ON digital_temp_define FOR EACH ROW -BEGIN - /* - UPDATE digital SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, - VALUE_NUM = NEW.VALUE_NUM, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - INPUT_DELAY_TIME = NEW.INPUT_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - IS_SUMMARY = NEW.IS_SUMMARY, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - IS_ALARM_FREQ = NEW.IS_ALARM_FREQ, - ALARM_FREQ = NEW.ALARM_FREQ, - ALARM_FREQ_DESC = NEW.ALARM_FREQ_DESC, - IS_ALARM_TIME = NEW.IS_ALARM_TIME, - ALARM_TIME = NEW.ALARM_TIME, - ALARM_TIME_DESC = NEW.ALARM_TIME_DESC, - ALARM_FREQ_RANGE = NEW.ALARM_FREQ_RANGE, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE POINT_TP_NAME=OLD.TAG_NAME ; - UPDATE digital_control SET - CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - PULSE_DURATION = NEW.PULSE_DURATION, - OFFSET_NUM = NEW.OFFSET_NUM, - IS_CHECK_PREVENTION = NEW.IS_CHECK_PREVENTION, - CTRL_TYPE = NEW.CTRL_TYPE, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_dig - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_DIGITAL_TEMP_DEFINE -BEFORE DELETE -ON digital_temp_define FOR EACH ROW -BEGIN - DELETE FROM temp_plugin_point_map_dig WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* -DELETE FROM digital WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_DIGITAL_TEMP_DEFINE` AFTER DELETE ON `digital_temp_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FAULT_RECALL_COND_DEF` AFTER INSERT ON `fault_recall_cond_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fault_recall_cond_def', 'location_id,trigger_tag_name', '', concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FAULT_RECALL_COND_DEF` AFTER UPDATE ON `fault_recall_cond_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FAULT_RECALL_COND_DEF` AFTER DELETE ON `fault_recall_cond_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), '', getTableSubSystem('fault_recall_cond_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_FES_ACCUML` AFTER INSERT ON `fes_accuml` FOR EACH ROW BEGIN - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TI_FES_ACCUML'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableAccumlMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesAccumlTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE accuml_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - - END; - END IF; - - SET @disableAccumlMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_accuml', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_accuml')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_ACCUML -BEFORE UPDATE -ON fes_accuml FOR EACH ROW -body:BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN LEAVE body; - END IF; - - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TU_FES_ACCUML'); - - SET @disableAccumlMapToFesTrigger = 1; - - IF COALESCE(@disableFesAccumlTrigger,0) = 0 THEN - BEGIN - #删除旧关联 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE accuml_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - #建立新关联 - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE accuml_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - END; - END IF; - - SET @disableAccumlMapToFesTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_ACCUML` AFTER UPDATE ON `fes_accuml` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_accuml', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_accuml')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_ACCUML -AFTER DELETE -ON fes_accuml FOR EACH ROW -BEGIN - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TD_FES_ACCUML'); - - SET @disableAccumlMapToFesTrigger = 1; - - IF COALESCE(@disableFesAccumlTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE accuml_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET @disableAccumlMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_accuml', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_accuml')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_FES_ANALOG` AFTER INSERT ON `fes_analog` FOR EACH ROW BEGIN - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TI_FES_ANALOG'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableAnalogMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesAnalogTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE analog_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET @disableAnalogMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_ANALOG -BEFORE UPDATE -ON fes_analog FOR EACH ROW -body:BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN LEAVE body; - END IF; - - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TU_FES_ANALOG'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableAnalogMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesAnalogTrigger,0) = 0 THEN - BEGIN - - #不管是ana还是const都是放在analog_map_to_fes表 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE analog_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE analog_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET @disableAnalogMapToFesTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_ANALOG` AFTER UPDATE ON `fes_analog` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_ANALOG -AFTER DELETE -ON fes_analog FOR EACH ROW -BEGIN - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TD_FES_ANALOG'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableAnalogMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesAnalogTrigger,0) = 0 THEN - BEGIN - #不管是ana还是const都是放在analog_map_to_fes表 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE analog_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET @disableAnalogMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_ANALOG_CTRL` AFTER INSERT ON `fes_analog_ctrl` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_FES_ANALOG_CTRL` AFTER UPDATE ON `fes_analog_ctrl` FOR EACH ROW body:BEGIN - #更新关联了此点的遥控点 - - IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO - THEN - BEGIN - UPDATE analog_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_ANALOG_CTRL -AFTER DELETE -ON fes_analog_ctrl FOR EACH ROW -BEGIN - UPDATE analog_control SET - OFFSET_NO = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_CHANNEL_PARA -BEFORE INSERT ON FES_CHANNEL_PARA -FOR EACH ROW -BEGIN - - DECLARE locationTag varchar(64) DEFAULT ''; - DECLARE subsystemTag varchar(64) DEFAULT ''; - - - SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; - SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; - SET NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_CHANNEL_PARA` AFTER INSERT ON `fes_channel_para` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_channel_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_CHANNEL_PARA -BEFORE UPDATE -ON fes_channel_para FOR EACH ROW -body:BEGIN - - DECLARE locationTag varchar(64) DEFAULT ''; - DECLARE subsystemTag varchar(64) DEFAULT ''; - - IF NEW.CHAN_NAME <> OLD.CHAN_NAME THEN - BEGIN - SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; - SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; - SET NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); - END; - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_CHANNEL_PARA` AFTER UPDATE ON `fes_channel_para` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); -END IF; -IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.CHAN_NO <> OLD.CHAN_NO OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM THEN -BEGIN - UPDATE fes_rtu_para SET - TAG_NAME = concat(NEW.TAG_NAME,'.',RTU_NAME), - CHAN_TAG = NEW.TAG_NAME, - CHAN_NO = NEW.CHAN_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE CHAN_TAG = OLD.TAG_NAME; -END; -END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_CHANNEL_PARA` AFTER DELETE ON `fes_channel_para` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_channel_para')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_CONST -AFTER INSERT ON fes_const -FOR EACH ROW -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const', 'tag_name', '',NEW.TAG_NAME, getTableSubSystem('fes_const')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_CONST -AFTER UPDATE ON fes_const -FOR EACH ROW -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_const', 'tag_name', OLD.TAG_NAME,NEW.TAG_NAME, getTableSubSystem('fes_const')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_CONST -AFTER DELETE ON fes_const -FOR EACH ROW -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const', 'tag_name', OLD.TAG_NAME,'', getTableSubSystem('fes_const')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_CONST_TEMP -AFTER INSERT -ON fes_const_temp FOR EACH ROW -BEGIN - /* - INSERT INTO fes_const( - TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST'))), NEW.DESCRIPTION,NEW.GROUP_NO,fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST')),NEW.SEQ_NO,fes_rtu_para.SUB_SYSTEM,fes_rtu_para.LOCATION_ID,fes_dev_info.TAG_NAME,NEW.VALUE,NEW.VALUE_TYPE,NEW.UNIT_ID,NEW.VALUE_TEXT, NEW.VALUE_RATIO,NEW.VALUE_ADDED,NEW.VALUE_MAX,NEW.VALUE_MIN,NEW.VALUE_DEFAULT,NEW.VALUE_VERIFY,NEW.EX_INFO,NEW.TAG_NAME, NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_CONST_TEMP -AFTER UPDATE -ON fes_const_temp FOR EACH ROW -BEGIN - /* - UPDATE fes_const SET - DESCRIPTION = NEW.DESCRIPTION, - GROUP_NO = NEW.GROUP_NO, - SEQ_NO = NEW.SEQ_NO, - VALUE = NEW.VALUE, - VALUE_TYPE = NEW.VALUE_TYPE, - UNIT_ID = NEW.UNIT_ID, - VALUE_TEXT = NEW.VALUE_TEXT, - VALUE_RATIO = NEW.VALUE_RATIO, - VALUE_ADDED = NEW.VALUE_ADDED, - VALUE_MAX = NEW.VALUE_MAX, - VALUE_MIN = NEW.VALUE_MIN, - VALUE_DEFAULT = NEW.VALUE_DEFAULT, - VALUE_VERIFY = NEW.VALUE_VERIFY, - EX_INFO = NEW.EX_INFO, - FES_POINT_TP_NAME = NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_CONST_TEMP -AFTER DELETE -ON fes_const_temp FOR EACH ROW -BEGIN - /* - DELETE FROM fes_const WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_const_temp')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_DATA_BLOCK` AFTER INSERT ON `fes_data_block` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', '', concat(NEW.TAG_NAME,',', NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_DATA_BLOCK` AFTER UPDATE ON `fes_data_block` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,',', OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), concat(NEW.TAG_NAME,',',NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_DATA_BLOCK` AFTER DELETE ON `fes_data_block` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), '', getTableSubSystem('fes_data_block')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_DATA_BLOCK_TEMP -AFTER INSERT -ON fes_data_block_temp FOR EACH ROW -BEGIN - /* - INSERT INTO fes_data_block( - TAG_NAME, BLOCK_ID, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG) SELECT - concat(fes_dev_info.TAG_NAME,'.',getAfterLastDot(NEW.TAG_NAME)), NEW.BLOCK_ID,fes_rtu_para.RTU_NO,NEW.FUNC_CODE,NEW.STAR_ADDR,NEW.DATA_LEN, NEW.DATA_FARME_TYPE, NEW.REF_CYCLE, NEW.IS_CREATE_SOE, NEW.PARA_INT1, NEW.PARA_INT2, NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,NEW.LD, NEW.CALL_MODE, NEW.DATA_SET,NEW.DATA_SET_TYPE,NEW.DATA_SET_CALL_TIME,NEW.REPORT_CTRL,NEW.TAG_NAME, fes_dev_info.TAG_NAME - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_DATA_BLOCK_TEMP -AFTER UPDATE -ON fes_data_block_temp FOR EACH ROW -BEGIN - /* - UPDATE fes_data_block SET - TAG_NAME = concat(getBeforeLastDot(fes_data_block.TAG_NAME),'.',getAfterLastDot(NEW.TAG_NAME)), - BLOCK_ID = NEW.BLOCK_ID, - FUNC_CODE = NEW.FUNC_CODE, - STAR_ADDR = NEW.STAR_ADDR, - DATA_LEN = NEW.DATA_LEN, - DATA_FARME_TYPE = NEW.DATA_FARME_TYPE, - REF_CYCLE = NEW.REF_CYCLE, - IS_CREATE_SOE = NEW.IS_CREATE_SOE, - PARA_INT1 = NEW.PARA_INT1, - PARA_INT2 = NEW.PARA_INT2, - DESCRIPTION = NEW.DESCRIPTION, - LD = NEW.LD, - CALL_MODE = NEW.CALL_MODE, - DATA_SET = NEW.DATA_SET, - DATA_SET_TYPE = NEW.DATA_SET_TYPE, - DATA_SET_CALL_TIME = NEW.DATA_SET_CALL_TIME, - REPORT_CTRL = NEW.REPORT_CTRL, - FES_POINT_TP_NAME = NEW.TAG_NAME - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_DATA_BLOCK_TEMP -AFTER DELETE -ON fes_data_block_temp FOR EACH ROW -BEGIN - /* - DELETE FROM fes_data_block WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_data_block_temp')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIB_FES_DEV_INFO -BEFORE INSERT ON FES_DEV_INFO -FOR EACH ROW -BEGIN - - SET NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_DEV_INFO -AFTER INSERT -ON fes_dev_info FOR EACH ROW -BEGIN - - SET @incVarFesDev1 = 0; - SET @incVarFesDev2 = 0; - - IF COALESCE(NEW.DEV_TP_NAME,'') <> '' THEN - BEGIN - - #获取最大的点号时已经自动加1,这里减掉 - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ACC')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_accuml( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8) SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,@incVarFesDev2 := @incVarFesDev2 + 1, NEW.RTU_TAG,NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO,'', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ACC') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_analog( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME , PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8) SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, fes_rtu_para.RTU_NO , @incVarFesDev2 := @incVarFesDev2 + 1, '', '', '', fes_dev_pt_temp_def.IS_FILTER, fes_dev_pt_temp_def.PERCENT, '0', '0', '0', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-99999999', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_digital( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,ASS_DIG) SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, @incVarFesDev2 := @incVarFesDev2 + 1, '', '', '', fes_dev_pt_temp_def.FILTER_ERR, fes_dev_pt_temp_def.FILTER_DISTURB, fes_dev_pt_temp_def.DISTURB_TIME, fes_dev_pt_temp_def.REVERS, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,ASS_DIG - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_mix( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 )SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_dev_pt_temp_def.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, @incVarFesDev2 := @incVarFesDev2 + 1, NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, '', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-99999999', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA_CTRL')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_analog_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, BASE, COEFF, MAX_RANGE, MIN_RANGE, RTU_NO, DEV_TAG, DOT_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, SEQ_NO, RTU_TAG, DESCRIPTION, POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8)SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-99999999', fes_rtu_para.RTU_NO,NEW.TAG_NAME, @incVarFesDev2 := @incVarFesDev2 + 1,fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.SEQ_NO,NEW.RTU_TAG,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG_CTRL')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_digital_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, DESCRIPTION, REVERS, POINT_TP_NAME, SEQ_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850,POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,CTRL_TYPE)SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, @incVarFesDev2 := @incVarFesDev2 + 1, NEW.TAG_NAME,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.REVERS, fes_dev_pt_temp_def.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,CTRL_TYPE - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX_CTRL')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_mix_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, BASE, DESCRIPTION, DOT_NO, COEFF, MIN_RANGE, MAX_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, SEQ_NO, POINT_TP_NAME, DEV_TAG, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 )SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.DESCRIPTION, @incVarFesDev2 := @incVarFesDev2 + 1,fes_dev_pt_temp_def.RATIO, '-99999999', '99999999', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.TAG_NAME,NEW.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; - - - INSERT INTO fes_data_block( - TAG_NAME, BLOCK_ID, RTU_TAG, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG, PARA_INT3,PARA_INT4,IS_ENABLE) SELECT - concat(NEW.TAG_NAME,'.',getAfterLastDot(fes_data_block_temp.TAG_NAME)), fes_data_block_temp.BLOCK_ID,fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO,fes_data_block_temp.FUNC_CODE,fes_data_block_temp.STAR_ADDR,fes_data_block_temp.DATA_LEN, fes_data_block_temp.DATA_FARME_TYPE,fes_data_block_temp.REF_CYCLE,fes_data_block_temp.IS_CREATE_SOE,fes_data_block_temp.PARA_INT1, fes_data_block_temp.PARA_INT2, fes_data_block_temp.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,fes_data_block_temp.LD, fes_data_block_temp.CALL_MODE, fes_data_block_temp.DATA_SET, fes_data_block_temp.DATA_SET_TYPE,fes_data_block_temp.DATA_SET_CALL_TIME, fes_data_block_temp.REPORT_CTRL,fes_data_block_temp.TAG_NAME, NEW.TAG_NAME,PARA_INT3,PARA_INT4,IS_ENABLE - FROM fes_data_block_temp, fes_rtu_para WHERE fes_data_block_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_data_block_temp.BLOCK_ID; - - SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_CONST')) - 1; - SET @incVarFesDev2 = @incVarFesDev1; - - INSERT INTO fes_const( - TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME, PATH61850, POSITION61850,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,DZ_SEQ) SELECT - concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_const_temp.DESCRIPTION,fes_const_temp.GROUP_NO,NEW.RTU_TAG,fes_rtu_para.RTU_NO,@incVarFesDev2 := @incVarFesDev2 + 1,fes_const_temp.SEQ_NO,NEW.SUB_SYSTEM,NEW.LOCATION_ID,NEW.TAG_NAME,fes_const_temp.VALUE,fes_const_temp.VALUE_TYPE,fes_const_temp.UNIT_ID,fes_const_temp.VALUE_TEXT, fes_const_temp.VALUE_RATIO,fes_const_temp.VALUE_ADDED,fes_const_temp.VALUE_MAX,fes_const_temp.VALUE_MIN,fes_const_temp.VALUE_DEFAULT,fes_const_temp.VALUE_VERIFY,fes_const_temp.EX_INFO,fes_const_temp.TAG_NAME,PATH61850, POSITION61850,fes_const_temp.RES_PARA_INT1,fes_const_temp.RES_PARA_INT2,fes_const_temp.RES_PARA_INT3,fes_const_temp.RES_PARA_INT4,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,DZ_SEQ - FROM fes_const_temp, fes_rtu_para WHERE fes_const_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_const_temp.SEQ_NO; - - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUB_FES_DEV_INFO -BEFORE UPDATE ON FES_DEV_INFO -FOR EACH ROW -BEGIN - - IF NEW.DEV_NAME <> OLD.DEV_NAME THEN - SET NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_DEV_INFO -AFTER UPDATE -ON fes_dev_info FOR EACH ROW -BEGIN - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM - OR NEW.RTU_NO <> OLD.RTU_NO - THEN - BEGIN - - UPDATE fes_accuml INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_accuml.DEV_TAG = OLD.TAG_NAME SET - fes_accuml.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_accuml.DOT_NO), - fes_accuml.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_accuml.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_accuml.RTU_TAG = NEW.RTU_TAG, - fes_accuml.DEV_TAG = NEW.TAG_NAME, - fes_accuml.RTU_NO = fes_rtu_para.RTU_NO; - - - UPDATE fes_analog INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog.DEV_TAG = OLD.TAG_NAME SET - fes_analog.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog.DOT_NO), - fes_analog.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_analog.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_analog.RTU_TAG = NEW.RTU_TAG, - fes_analog.DEV_TAG = NEW.TAG_NAME, - fes_analog.RTU_NO = fes_rtu_para.RTU_NO; - - - UPDATE fes_digital INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital.DEV_TAG = OLD.TAG_NAME SET - fes_digital.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital.DOT_NO ), - fes_digital.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_digital.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_digital.RTU_TAG = NEW.RTU_TAG, - fes_digital.DEV_TAG = NEW.TAG_NAME, - fes_digital.RTU_NO = fes_rtu_para.RTU_NO; - - - UPDATE fes_mix INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix.DEV_TAG = OLD.TAG_NAME SET - fes_mix.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix.DOT_NO), - fes_mix.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_mix.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_mix.RTU_TAG = NEW.RTU_TAG, - fes_mix.DEV_TAG = NEW.TAG_NAME, - fes_mix.RTU_NO = fes_rtu_para.RTU_NO; - - - UPDATE fes_analog_ctrl INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog_ctrl.DEV_TAG = OLD.TAG_NAME SET - fes_analog_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog_ctrl.DOT_NO), - fes_analog_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_analog_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_analog_ctrl.RTU_TAG = NEW.RTU_TAG, - fes_analog_ctrl.DEV_TAG = NEW.TAG_NAME, - fes_analog_ctrl.RTU_NO = fes_rtu_para.RTU_NO; - - - UPDATE fes_digital_ctrl INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital_ctrl.DEV_TAG = OLD.TAG_NAME SET - fes_digital_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital_ctrl.DOT_NO), - fes_digital_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_digital_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_digital_ctrl.RTU_TAG = NEW.RTU_TAG, - fes_digital_ctrl.DEV_TAG = NEW.TAG_NAME, - fes_digital_ctrl.RTU_NO = fes_rtu_para.RTU_NO; - - - UPDATE fes_mix_ctrl INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix_ctrl.DEV_TAG = OLD.TAG_NAME SET - fes_mix_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix_ctrl.DOT_NO), - fes_mix_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, - fes_mix_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, - fes_mix_ctrl.RTU_TAG = NEW.RTU_TAG, - fes_mix_ctrl.DEV_TAG = NEW.TAG_NAME, - fes_mix_ctrl.RTU_NO = fes_rtu_para.RTU_NO; - - UPDATE fes_data_block INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_data_block.DEV_TAG = OLD.TAG_NAME - SET - fes_data_block.LOCATION_ID = NEW.LOCATION_ID, - fes_data_block.SUB_SYSTEM = NEW.SUB_SYSTEM, - fes_data_block.DEV_TAG = NEW.TAG_NAME, - fes_data_block.RTU_TAG = NEW.RTU_TAG, - fes_data_block.TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(fes_data_block.TAG_NAME)), - fes_data_block.RTU_NO = fes_rtu_para.RTU_NO; - - UPDATE fes_const INNER JOIN fes_rtu_para - ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_const.DEV_TAG = OLD.TAG_NAME - SET - fes_const.LOCATION_ID = NEW.LOCATION_ID, - fes_const.SUB_SYSTEM = NEW.SUB_SYSTEM, - fes_const.DEV_TAG = NEW.TAG_NAME, - fes_const.RTU_TAG = NEW.RTU_TAG, - fes_const.RTU_NO = fes_rtu_para.RTU_NO, - fes_const.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_const.DOT_NO); - - - END; - END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_DEV_INFO -BEFORE DELETE -ON fes_dev_info FOR EACH ROW -BEGIN -DELETE FROM fes_accuml WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_analog WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_digital WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_mix WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_analog_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_digital_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_mix_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_data_block WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_const WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_DEV_INFO` AFTER DELETE ON `fes_dev_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_DEV_PT_TEMP_DEF -AFTER INSERT -ON fes_dev_pt_temp_def FOR EACH ROW -body:BEGIN - - /* - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - INSERT INTO fes_accuml( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC')), fes_dev_info.RTU_TAG,fes_dev_info.TAG_NAME,NEW.SEQ_NO,'', '', '', '0', '1', fes_rtu_para.RTU_NO ,NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION ,NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - INSERT INTO fes_analog( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850, POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA')),'', '', '', 0, 0, '0', '0', '0', '0', '1', 99999999, -32727, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - INSERT INTO fes_digital( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG')), '', '', '', 0, 0, 0, 0, fes_rtu_para.RTU_NO , NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - INSERT INTO fes_mix( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX'))), NEW.DESCRIPTION ,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX')), fes_dev_info.TAG_NAME, NEW.SEQ_NO, '', '', '', '0', '1', 99999999, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - INSERT INTO fes_analog_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MAX_RANGE, MIN_RANGE, POINT_TP_NAME,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, '0', '1', 99999999, 0, NEW.TAG_NAME ,NEW.RES_PARA_INT1,NEW.RES_PARA_INT2,NEW.RES_PARA_INT3,NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - INSERT INTO fes_digital_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, REVERS, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850, POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, 0, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850,NEW.YK_SELECT61850, NEW.YK_EXE61850, NEW.YK_CANCLE61850, NEW.YK_DOUBLE_SELECT61850, NEW.YK_DOUBLE_EXE61850, NEW.YK_DOUBLE_CANCLE61850, NEW.PULSE_TIME - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - INSERT INTO fes_mix_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MIN_RANGE, MAX_RANGE, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4,PATH61850,POSITION61850)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO,'0', '1', 0, 99999999, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - */ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_pt_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_DEV_PT_TEMP_DEF -AFTER UPDATE -ON fes_dev_pt_temp_def FOR EACH ROW -BEGIN - - /* - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - UPDATE fes_accuml SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - UPDATE fes_analog SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - UPDATE fes_digital SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - UPDATE fes_mix SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - UPDATE fes_analog_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - UPDATE fes_digital_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850, - YK_SELECT61850 = NEW.YK_SELECT61850, - YK_EXE61850 = NEW.YK_EXE61850, - YK_CANCLE61850 = NEW.YK_CANCLE61850, - YK_DOUBLE_SELECT61850 = NEW.YK_DOUBLE_SELECT61850, - YK_DOUBLE_EXE61850 = NEW.YK_DOUBLE_EXE61850, - YK_DOUBLE_CANCLE61850 = NEW.YK_DOUBLE_CANCLE61850, - PULSE_TIME = NEW.PULSE_TIME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - UPDATE fes_mix_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - #更新套件内容 - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - UPDATE temp_plugin_point_map_acc SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - UPDATE temp_plugin_point_map_ana SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - UPDATE temp_plugin_point_map_mix SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - UPDATE temp_plugin_point_map_dig SET - FES_TEMP_POINT_NAME1 = IF(FES_TEMP_POINT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME1), - FES_TEMP_POINT_NAME2 = IF(FES_TEMP_POINT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME2), - FES_TEMP_POINT_NAME3 = IF(FES_TEMP_POINT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME3), - FES_TEMP_POINT_NAME4 = IF(FES_TEMP_POINT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME4), - FES_TEMP_POINT_NAME5 = IF(FES_TEMP_POINT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME5) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - UPDATE temp_plugin_point_map_ana SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - UPDATE temp_plugin_point_map_mix SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - UPDATE temp_plugin_point_map_dig SET - FES_TEMP_OUT_NAME1 = IF(FES_TEMP_OUT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME1), - FES_TEMP_OUT_NAME2 = IF(FES_TEMP_OUT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME2), - FES_TEMP_OUT_NAME3 = IF(FES_TEMP_OUT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME3), - FES_TEMP_OUT_NAME4 = IF(FES_TEMP_OUT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME4), - FES_TEMP_OUT_NAME5 = IF(FES_TEMP_OUT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME5) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; - END IF; - END; - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_DEV_PT_TEMP_DEF -BEFORE DELETE -ON fes_dev_pt_temp_def FOR EACH ROW -BEGIN - - /* - IF OLD.POINT_TYPE = getFesPointType('FES_ACC') THEN - DELETE FROM fes_accuml WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF OLD.POINT_TYPE = getFesPointType('FES_ANA') THEN - DELETE FROM fes_analog WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF OLD.POINT_TYPE = getFesPointType('FES_DIG') THEN - DELETE FROM fes_digital WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_MIX') THEN - DELETE FROM fes_mix WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - DELETE FROM fes_analog_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - DELETE FROM fes_digital_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - DELETE FROM fes_mix_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_DEV_PT_TEMP_DEF` AFTER DELETE ON `fes_dev_pt_temp_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_DEV_TEMP_DEF` AFTER INSERT ON `fes_dev_temp_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_DEV_TEMP_DEF -AFTER UPDATE -ON fes_dev_temp_def FOR EACH ROW -BEGIN - - UPDATE fes_dev_pt_temp_def SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - UPDATE fes_const_temp SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - UPDATE fes_data_block_temp SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - /* - UPDATE fes_dev_info SET - DEV_TP_NAME = NEW.TAG_NAME, - DEV_TYPE_ID = NEW.DEV_TYPE_ID - WHERE DEV_TP_NAME = OLD.TAG_NAME; - */ - - #更新套件 - IF OLD.TAG_NAME != NEW.TAG_NAME THEN - BEGIN - UPDATE temp_plugin_fes_dev_map SET FES_TEMP_NAME = NEW.TAG_NAME WHERE FES_TEMP_NAME = OLD.TAG_NAME; - END; - END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_DEV_TEMP_DEF -BEFORE DELETE -ON fes_dev_temp_def FOR EACH ROW -BEGIN - - DELETE FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = OLD.TAG_NAME; - DELETE FROM fes_const_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; - DELETE FROM fes_data_block_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; - #套件的处理 - DELETE FROM temp_plugin_fes_dev_map WHERE FES_TEMP_NAME = OLD.TAG_NAME; - /* - DELETE FROM fes_dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; - */ - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_DEV_TEMP_DEF` AFTER DELETE ON `fes_dev_temp_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_temp_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_DEV_TYPE_DEF` AFTER INSERT ON `fes_dev_type_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_type_def', 'dev_type_id', '', NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_FES_DEV_TYPE_DEF` BEFORE UPDATE ON `fes_dev_type_def` FOR EACH ROW body:BEGIN - IF NEW.DEV_TYPE_ID <> OLD.DEV_TYPE_ID THEN - BEGIN - UPDATE fes_dev_temp_def SET - DEV_TYPE_ID = NEW.DEV_TYPE_ID - WHERE DEV_TYPE_ID = OLD.DEV_TYPE_ID; - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_DEV_TYPE_DEF` AFTER UPDATE ON `fes_dev_type_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_DEV_TYPE_DEF` AFTER DELETE ON `fes_dev_type_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, '', getTableSubSystem('fes_dev_type_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_FES_DIGITAL` AFTER INSERT ON `fes_digital` FOR EACH ROW BEGIN - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TI_FES_DIGITAL'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableDigitalMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesDigitalTrigger,0) = 0 THEN - BEGIN - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO1 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO2 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO3 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO4 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO5 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET @disableDigitalMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_DIGITAL -BEFORE UPDATE -ON fes_digital FOR EACH ROW -body:BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN LEAVE body; - END IF; - - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TU_FES_DIGITAL'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableDigitalMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesDigitalTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN - UPDATE digital_map_to_fes SET - DOT_NO1 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN - UPDATE digital_map_to_fes SET - DOT_NO2 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN - UPDATE digital_map_to_fes SET - DOT_NO3 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN - UPDATE digital_map_to_fes SET - DOT_NO4 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN - UPDATE digital_map_to_fes SET - DOT_NO5 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO1 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO2 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO3 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO4 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO5 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET @disableDigitalMapToFesTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_DIGITAL` AFTER UPDATE ON `fes_digital` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_DIGITAL -AFTER DELETE -ON fes_digital FOR EACH ROW -BEGIN - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TD_FES_DIGITAL'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableDigitalMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesDigitalTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN - UPDATE digital_map_to_fes SET - DOT_NO1 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN - UPDATE digital_map_to_fes SET - DOT_NO2 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN - UPDATE digital_map_to_fes SET - DOT_NO3 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN - UPDATE digital_map_to_fes SET - DOT_NO4 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN - UPDATE digital_map_to_fes SET - DOT_NO5 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET @disableDigitalMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_DIGITAL_CTRL` AFTER INSERT ON `fes_digital_ctrl` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_FES_DIGITAL_CTRL` AFTER UPDATE ON `fes_digital_ctrl` FOR EACH ROW body:BEGIN - #更新关联了此点的遥控点 - - IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO - THEN - BEGIN - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO1 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO2 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO3 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO4 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO5 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); - - END; - END IF; - - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_DIGITAL_CTRL -AFTER DELETE -ON fes_digital_ctrl FOR EACH ROW -BEGIN - UPDATE digital_control SET - OFFSET_NO1 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO2 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO3 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO4 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO5 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_FES_MIX` AFTER INSERT ON `fes_mix` FOR EACH ROW BEGIN - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TI_FES_MIX'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableMixMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesMixTrigger,0) = 0 THEN - BEGIN - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE mix_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET @disableMixMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_MIX -BEFORE UPDATE -ON fes_mix FOR EACH ROW -body:BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN LEAVE body; - END IF; - - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TU_FES_MIX'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableMixMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesMixTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE mix_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE mix_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET @disableMixMapToFesTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_MIX` AFTER UPDATE ON `fes_mix` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_MIX -AFTER DELETE -ON fes_mix FOR EACH ROW -BEGIN - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TD_FES_MIX'); - #首先禁止MAP_TO_FES触发器动作 - SET @disableMixMapToFesTrigger = 1; - #然后询问自己是否已经被禁止 - IF COALESCE(@disableFesMixTrigger,0) = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE mix_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET @disableMixMapToFesTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_MIX_CTRL` AFTER INSERT ON `fes_mix_ctrl` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_FES_MIX_CTRL` AFTER UPDATE ON `fes_mix_ctrl` FOR EACH ROW body:BEGIN - #更新关联了此点的遥控点 - - IF NEW.RTU_TAG = OLD.RTU_TAG AND NEW.DOT_NO= OLD.DOT_NO - THEN - BEGIN - UPDATE mix_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_MIX_CTRL -AFTER DELETE -ON fes_mix_ctrl FOR EACH ROW -BEGIN - UPDATE mix_control SET - OFFSET_NO = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix_ctrl')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_FES_PROTOCOL` AFTER INSERT ON `fes_protocol` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_protocol', 'protocol_id', '', NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_FES_PROTOCOL` BEFORE UPDATE ON `fes_protocol` FOR EACH ROW body:BEGIN - IF NEW.PROTOCOL_ID <> OLD.PROTOCOL_ID THEN - BEGIN - UPDATE fes_channel_para SET - PROTO_TYPE = NEW.PROTOCOL_ID - WHERE PROTO_TYPE = OLD.PROTOCOL_ID; - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_FES_PROTOCOL` AFTER UPDATE ON `fes_protocol` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_PROTOCOL` AFTER DELETE ON `fes_protocol` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, '', getTableSubSystem('fes_protocol')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIB_FES_RTU_PARA -BEFORE INSERT -ON fes_rtu_para FOR EACH ROW -BEGIN - - DECLARE chNo decimal(10,0) DEFAULT 0; - - SET NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); - - SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; - - SET NEW.CHAN_NO = chNo; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_FES_RTU_PARA -AFTER INSERT -ON fes_rtu_para FOR EACH ROW -BEGIN - /* - * 不再产生默认设备 -INSERT INTO fes_dev_info -(TAG_NAME, DEV_NAME, LOCATION_ID, SUB_SYSTEM, DEV_ID, DEV_TYPE_ID, RTU_TAG, DEV_DESC, RTU_NO, DEV_TP_NAME) VALUES -(concat(NEW.TAG_NAME, '.', 'defaultDev' ),'defaultDev',NEW.LOCATION_ID,NEW.SUB_SYSTEM,'-1', '-1' ,NEW.TAG_NAME,'默认设备',NEW.RTU_NO ,'' ); -*/ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_rtu_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUB_FES_RTU_PARA -BEFORE UPDATE -ON fes_rtu_para FOR EACH ROW -BEGIN - - DECLARE chNo decimal(10,0) DEFAULT 0; - - IF NEW.RTU_NAME <> OLD.RTU_NAME OR NEW.CHAN_TAG <> OLD.CHAN_TAG THEN - SET NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); - END IF; - - IF NEW.CHAN_TAG <> OLD.CHAN_TAG THEN - BEGIN - SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; - SET NEW.CHAN_NO = chNo; - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_FES_RTU_PARA -AFTER UPDATE -ON fes_rtu_para FOR EACH ROW -BEGIN - -IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_NO <> OLD.RTU_NO OR NEW.DESCRIPTION <> OLD.DESCRIPTION -THEN -BEGIN - - - UPDATE fes_dev_info SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)) , - DEV_DESC = DEV_DESC, - RTU_TAG = NEW.TAG_NAME, - RTU_NO = NEW.RTU_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE fes_data_block SET - RTU_NO = NEW.RTU_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE RTU_NO = OLD.RTU_NO; - - IF NEW.RTU_NO <> OLD.RTU_NO THEN - BEGIN - UPDATE dev_group SET - RTU_NO = NEW.RTU_NO - WHERE RTU_NO = OLD.RTU_NO; - END; - END IF; - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - #更新关联的后台测点 - UPDATE accuml SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE analog SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE digital SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE mix SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - - END; - END IF; - -END; -END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_FES_RTU_PARA -BEFORE DELETE -ON fes_rtu_para FOR EACH ROW -BEGIN -DELETE FROM fes_dev_info WHERE RTU_TAG = OLD.TAG_NAME; -DELETE FROM fes_data_block WHERE RTU_NO = OLD.RTU_NO; -#更新关联的后台测点 -UPDATE accuml SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE analog SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE digital SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE mix SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_FES_RTU_PARA` AFTER DELETE ON `fes_rtu_para` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_rtu_para')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_LINKAGE_ACTION` BEFORE INSERT ON `linkage_action` FOR EACH ROW body:BEGIN - #仅仅修改时标 - - SET NEW.TIMEFLAG = unix_timestamp(now()); - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_LINKAGE_ACTION` AFTER INSERT ON `linkage_action` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_action', 'name', '', NEW.NAME, getTableSubSystem('linkage_action')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_LINKAGE_ACTION` BEFORE UPDATE ON `linkage_action` FOR EACH ROW body:BEGIN - #修改对应功能 - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE linkage_function SET - TIMEFLAG = NEW.TIMEFLAG, - ACTION_NAME = NEW.NAME - WHERE ACTION_NAME = OLD.NAME; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_LINKAGE_ACTION` AFTER UPDATE ON `linkage_action` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_action')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_LINKAGE_ACTION` AFTER DELETE ON `linkage_action` FOR EACH ROW body:BEGIN - #删除关联了此动作的功能 - DELETE FROM linkage_function WHERE ACTION_NAME = OLD.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_action', 'name', OLD.NAME, '', getTableSubSystem('linkage_action')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_LINKAGE_DEFINE` BEFORE INSERT ON `linkage_define` FOR EACH ROW body:BEGIN - #仅仅修改时标 - #避免触发器循环 - SET @disableLinkageSettingTrigger = 1; - - CALL kbdDebugInfo('linkage_define Insert','linkage_define Insert'); - - IF COALESCE(@disableLinkageDefineTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE linkage_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = NEW.LINKAGE_NAME; - END; - END IF; - - SET @disableLinkageSettingTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_LINKAGE_DEFINE` AFTER INSERT ON `linkage_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_define', 'linkage_name,func_name', '', concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_LINKAGE_DEFINE` BEFORE UPDATE ON `linkage_define` FOR EACH ROW body:BEGIN - #修改对应联动功能关系表 - #避免触发器循环 - SET @disableLinkageSettingTrigger = 1; - - CALL kbdDebugInfo('linkage_define update','linkage_define update'); - - IF COALESCE(@disableLinkageDefineTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE linkage_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = OLD.LINKAGE_NAME; - END; - END IF; - - SET @disableLinkageSettingTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_LINKAGE_DEFINE` AFTER UPDATE ON `linkage_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_LINKAGE_DEFINE` AFTER DELETE ON `linkage_define` FOR EACH ROW body:BEGIN - #仅仅修改时标 - #避免触发器循环 - SET @disableLinkageSettingTrigger = 1; - - CALL kbdDebugInfo('linkage_define delete','linkage_define delete'); - - IF COALESCE(@disableLinkageDefineTrigger,0) = 0 THEN - BEGIN - UPDATE linkage_setting SET - TIMEFLAG = unix_timestamp(now()) - WHERE NAME = OLD.LINKAGE_NAME; - END; - END IF; - - SET @disableLinkageSettingTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('linkage_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_LINKAGE_FUNCTION` BEFORE INSERT ON `linkage_function` FOR EACH ROW body:BEGIN - #仅仅修改时标 - SET NEW.TIMEFLAG = unix_timestamp(now()); - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_LINKAGE_FUNCTION` AFTER INSERT ON `linkage_function` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_LINKAGE_FUNCTION` BEFORE UPDATE ON `linkage_function` FOR EACH ROW body:BEGIN - #修改对应联动功能关系表 - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE linkage_define SET - TIMEFLAG = NEW.TIMEFLAG, - FUNC_NAME = NEW.NAME - WHERE FUNC_NAME = OLD.NAME; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_LINKAGE_FUNCTION` AFTER UPDATE ON `linkage_function` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_LINKAGE_FUNCTION` AFTER DELETE ON `linkage_function` FOR EACH ROW body:BEGIN - #删除关联了此功能的联动定义 - #检查功能是否被删除 - IF NOT EXISTS (SELECT * FROM linkage_function WHERE NAME = OLD.NAME) THEN - BEGIN - DELETE FROM linkage_define WHERE FUNC_NAME = OLD.NAME; - END; - ELSE - BEGIN - #修改时标 - UPDATE linkage_define SET - TIMEFLAG = unix_timestamp(now()) - WHERE FUNC_NAME = OLD.NAME; - END; - END IF; - - - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('linkage_function')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_LINKAGE_SETTING` BEFORE INSERT ON `linkage_setting` FOR EACH ROW body:BEGIN - #仅仅修改时标 - #避免触发器循环 - SET @disableLinkageDefineTrigger = 1; - - CALL kbdDebugInfo('linkage_setting insert','linkage_setting insert'); - - IF COALESCE(@disableLinkageSettingTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - END; - END IF; - - SET @disableLinkageDefineTrigger = 0; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_LINKAGE_SETTING` AFTER INSERT ON `linkage_setting` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_setting', 'name', '', NEW.NAME, getTableSubSystem('linkage_setting')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_LINKAGE_SETTING` BEFORE UPDATE ON `linkage_setting` FOR EACH ROW body:BEGIN - #修改对应联动功能关系表 - #避免触发器循环 - SET @disableLinkageDefineTrigger = 1; - - CALL kbdDebugInfo('linkage_setting update','linkage_setting update'); - - IF COALESCE(@disableLinkageSettingTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - IF NEW.NAME<>OLD.NAME THEN - UPDATE linkage_define SET - LINKAGE_NAME = NEW.NAME - WHERE LINKAGE_NAME = OLD.NAME; - END IF; - END; - END IF; - - SET @disableLinkageDefineTrigger = 0; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_LINKAGE_SETTING` AFTER UPDATE ON `linkage_setting` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_setting')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_LINKAGE_SETTING` AFTER DELETE ON `linkage_setting` FOR EACH ROW body:BEGIN - #删除关联了此联动的功能关联 - #避免触发器循环 - SET @disableLinkageDefineTrigger = 1; - - CALL kbdDebugInfo('linkage_setting delete','linkage_setting delete'); - - IF COALESCE(@disableLinkageSettingTrigger,0) = 0 THEN - BEGIN - DELETE FROM linkage_define WHERE LINKAGE_NAME = OLD.NAME; - END; - END IF; - - SET @disableLinkageDefineTrigger = 0; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_setting', 'name', OLD.NAME, '', getTableSubSystem('linkage_setting')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_MIX_CONTROL` AFTER INSERT ON `mix_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_MIX_CONTROL -BEFORE UPDATE -ON mix_control FOR EACH ROW -body:BEGIN - - #修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - SET NEW.OFFSET_NO = '-1'; - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_MIX_CONTROL` AFTER UPDATE ON `mix_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_MIX_CONTROL` AFTER DELETE ON `mix_control` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_control')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_MIX_MAP_TO_FES -AFTER INSERT -ON mix_map_to_fes FOR EACH ROW -BEGIN - - CALL kbdDebugInfo('FES MIX update','In TI_MIX_MAP_TO_FES'); - - SET @disableFesMixTrigger = 1; - - IF COALESCE(@disableMixMapToFesTrigger,0) = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - SET @disableFesMixTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_MIX_MAP_TO_FES -BEFORE UPDATE -ON mix_map_to_fes FOR EACH ROW -body_label:BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN LEAVE body_label; - END IF; - - - SET @disableFesMixTrigger = 1; - - IF COALESCE(@disableMixMapToFesTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE SET NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET @disableFesMixTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_MIX_MAP_TO_FES` AFTER UPDATE ON `mix_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_MIX_MAP_TO_FES -BEFORE DELETE -ON mix_map_to_fes FOR EACH ROW -BEGIN - - CALL kbdDebugInfo('FES MIX update','In TD_MIX_MAP_TO_FES'); - - SET @disableFesMixTrigger = 1; - - IF COALESCE(@disableMixMapToFesTrigger,0) = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET @disableFesMixTrigger = 0; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_MIX_MAP_TO_FES` AFTER DELETE ON `mix_map_to_fes` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('mix_map_to_fes')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TI_MIX_TEMP_DEFINE -AFTER INSERT -ON mix_temp_define FOR EACH ROW -BEGIN - /* - INSERT INTO mix( - TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, METHOD, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID) SELECT - concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, '0', '0', '', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,'', '' - FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - - INSERT INTO temp_plugin_point_map_mix - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TU_MIX_TEMP_DEFINE -AFTER UPDATE -ON mix_temp_define FOR EACH ROW -BEGIN - /* - UPDATE mix SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE POINT_TP_NAME=OLD.TAG_NAME; - - UPDATE mix_control SET - CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, - CTRL_TYPE = NEW.CTRL_TYPE, - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - - UPDATE mix_map_to_fes SET - POINT_TP_NAME = NEW.TAG_NAME, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - IS_FILTER_ERROR = NEW.IS_FILTER_ERROR, - IS_FILTER_DISTURB = NEW.IS_FILTER_DISTURB, - DISTURB_TIME = NEW.DISTURB_TIME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_mix - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TD_MIX_TEMP_DEFINE -BEFORE DELETE -ON mix_temp_define FOR EACH ROW -BEGIN - DELETE FROM temp_plugin_point_map_mix WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - /* - DELETE FROM mix WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_MIX_TEMP_DEFINE` AFTER DELETE ON `mix_temp_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_temp_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_OPC_CONFIG_DEFINE` AFTER INSERT ON `opc_config_define` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('opc_config_define')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_OPC_CONFIG_DEFINE` AFTER UPDATE ON `opc_config_define` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('opc_config_define')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_OPC_CONFIG_DEFINE` AFTER DELETE ON `opc_config_define` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('opc_config_define')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_OPC_CONFIG_VERSION` AFTER INSERT ON `opc_config_version` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_version', 'domain_id,sub_system', '', concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_OPC_CONFIG_VERSION` AFTER UPDATE ON `opc_config_version` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_OPC_CONFIG_VERSION` AFTER DELETE ON `opc_config_version` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), '', getTableSubSystem('opc_config_version')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_AREA_INFO` AFTER INSERT ON `pa_area_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_area_info', 'id', '', NEW.ID, getTableSubSystem('pa_area_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_AREA_INFO` AFTER UPDATE ON `pa_area_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_area_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_AREA_INFO` AFTER DELETE ON `pa_area_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_area_info', 'id', OLD.ID, '', getTableSubSystem('pa_area_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_AUDIO_INFO` AFTER INSERT ON `pa_audio_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_audio_info', 'id', '', NEW.ID, getTableSubSystem('pa_audio_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_AUDIO_INFO` AFTER UPDATE ON `pa_audio_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_audio_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_audio_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_AUDIO_INFO` AFTER DELETE ON `pa_audio_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_audio_info', 'id', OLD.ID, '', getTableSubSystem('pa_audio_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_BROADCAST_GROUP` AFTER INSERT ON `pa_broadcast_group` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_broadcast_group', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_BROADCAST_GROUP` AFTER UPDATE ON `pa_broadcast_group` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_BROADCAST_GROUP` AFTER DELETE ON `pa_broadcast_group` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_broadcast_group')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_CTRL_PARAM` AFTER INSERT ON `pa_ctrl_param` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_CTRL_PARAM` AFTER UPDATE ON `pa_ctrl_param` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_CTRL_PARAM` AFTER DELETE ON `pa_ctrl_param` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_ctrl_param')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_LOCATION_AREA_DEF` AFTER INSERT ON `pa_location_area_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_LOCATION_AREA_DEF` AFTER UPDATE ON `pa_location_area_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_LOCATION_AREA_DEF` AFTER DELETE ON `pa_location_area_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pa_location_area_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_LOCATION_SEQ_DEF` AFTER INSERT ON `pa_location_seq_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_seq_def', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_LOCATION_SEQ_DEF` AFTER UPDATE ON `pa_location_seq_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_LOCATION_SEQ_DEF` AFTER DELETE ON `pa_location_seq_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_location_seq_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_OPERATOR_DEF` AFTER INSERT ON `pa_operator_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_def', 'id', '', NEW.ID, getTableSubSystem('pa_operator_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_OPERATOR_DEF` AFTER UPDATE ON `pa_operator_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_def', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_operator_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_OPERATOR_DEF` AFTER DELETE ON `pa_operator_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_def', 'id', OLD.ID, '', getTableSubSystem('pa_operator_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_OPERATOR_MAP` AFTER INSERT ON `pa_operator_map` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_map', 'user_grp_id', '', NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_OPERATOR_MAP` AFTER UPDATE ON `pa_operator_map` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_OPERATOR_MAP` AFTER DELETE ON `pa_operator_map` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, '', getTableSubSystem('pa_operator_map')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PA_TIMED_AUDIO` AFTER INSERT ON `pa_timed_audio` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_timed_audio', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PA_TIMED_AUDIO` AFTER UPDATE ON `pa_timed_audio` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PA_TIMED_AUDIO` AFTER DELETE ON `pa_timed_audio` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_timed_audio')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PIS_AREA_INFO` AFTER INSERT ON `pis_area_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_area_info', 'id', '', NEW.ID, getTableSubSystem('pis_area_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PIS_AREA_INFO` AFTER UPDATE ON `pis_area_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pis_area_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PIS_AREA_INFO` AFTER DELETE ON `pis_area_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_area_info', 'id', OLD.ID, '', getTableSubSystem('pis_area_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PIS_CTRL_PARAM` AFTER INSERT ON `pis_ctrl_param` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'pis_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PIS_CTRL_PARAM` AFTER UPDATE ON `pis_ctrl_param` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PIS_CTRL_PARAM` AFTER DELETE ON `pis_ctrl_param` FOR EACH ROW BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pis_ctrl_param')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PIS_DISPLAY_INFO` AFTER INSERT ON `pis_display_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_display_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PIS_DISPLAY_INFO` AFTER UPDATE ON `pis_display_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PIS_DISPLAY_INFO` AFTER DELETE ON `pis_display_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_display_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PIS_FES_LOCATION_INFO` AFTER INSERT ON `pis_fes_location_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_fes_location_info', 'pis_station_id', '', NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PIS_FES_LOCATION_INFO` AFTER UPDATE ON `pis_fes_location_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PIS_FES_LOCATION_INFO` AFTER DELETE ON `pis_fes_location_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, '', getTableSubSystem('pis_fes_location_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PIS_LOCATION_AREA_DEF` AFTER INSERT ON `pis_location_area_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PIS_LOCATION_AREA_DEF` AFTER UPDATE ON `pis_location_area_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PIS_LOCATION_AREA_DEF` AFTER DELETE ON `pis_location_area_def` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pis_location_area_def')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_PIS_MESSAGE_INFO` AFTER INSERT ON `pis_message_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_message_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_PIS_MESSAGE_INFO` AFTER UPDATE ON `pis_message_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_PIS_MESSAGE_INFO` AFTER DELETE ON `pis_message_info` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_message_info')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SCL_DATASET` AFTER INSERT ON `scl_dataset` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_dataset', 'id', '', NEW.id, getTableSubSystem('scl_dataset')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SCL_DATASET` AFTER UPDATE ON `scl_dataset` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_dataset', 'id', OLD.id, NEW.id, getTableSubSystem('scl_dataset')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_SCL_DATASET` AFTER DELETE ON `scl_dataset` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_dataset', 'id', OLD.id, '', getTableSubSystem('scl_dataset')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SCL_FCDA` AFTER INSERT ON `scl_fcda` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_fcda', 'id', '', NEW.id, getTableSubSystem('scl_fcda')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SCL_FCDA` AFTER UPDATE ON `scl_fcda` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_fcda', 'id', OLD.id, NEW.id, getTableSubSystem('scl_fcda')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_SCL_FCDA` AFTER DELETE ON `scl_fcda` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_fcda', 'id', OLD.id, '', getTableSubSystem('scl_fcda')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SCL_LCB` AFTER INSERT ON `scl_lcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_lcb', 'id', '', NEW.id, getTableSubSystem('scl_lcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SCL_LCB` AFTER UPDATE ON `scl_lcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_lcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_lcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_SCL_LCB` AFTER DELETE ON `scl_lcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_lcb', 'id', OLD.id, '', getTableSubSystem('scl_lcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SCL_RCB` AFTER INSERT ON `scl_rcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_rcb', 'id', '', NEW.id, getTableSubSystem('scl_rcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SCL_RCB` AFTER UPDATE ON `scl_rcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_rcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_rcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_SCL_RCB` AFTER DELETE ON `scl_rcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_rcb', 'id', OLD.id, '', getTableSubSystem('scl_rcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SCL_RUNTIME` AFTER INSERT ON `scl_runtime` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_runtime', 'id', '', NEW.id, getTableSubSystem('scl_runtime')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SCL_RUNTIME` AFTER UPDATE ON `scl_runtime` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_runtime', 'id', OLD.id, NEW.id, getTableSubSystem('scl_runtime')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_SCL_RUNTIME` AFTER DELETE ON `scl_runtime` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_runtime', 'id', OLD.id, '', getTableSubSystem('scl_runtime')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SCL_SGCB` AFTER INSERT ON `scl_sgcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_sgcb', 'id', '', NEW.id, getTableSubSystem('scl_sgcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SCL_SGCB` AFTER UPDATE ON `scl_sgcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_sgcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_sgcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_SCL_SGCB` AFTER DELETE ON `scl_sgcb` -FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_sgcb', 'id', OLD.id, '', getTableSubSystem('scl_sgcb')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_SEQUENCE_ACTION` BEFORE INSERT ON `sequence_action` FOR EACH ROW body:BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SEQUENCE_ACTION` AFTER INSERT ON `sequence_action` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_action', 'name', '', NEW.NAME, getTableSubSystem('sequence_action')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_SEQUENCE_ACTION` BEFORE UPDATE ON `sequence_action` FOR EACH ROW body:BEGIN - #修改对应功能 - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE sequence_function SET - TIMEFLAG = NEW.TIMEFLAG, - ACTION_NAME = NEW.NAME - WHERE ACTION_NAME = OLD.NAME; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SEQUENCE_ACTION` AFTER UPDATE ON `sequence_action` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_action')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_SEQUENCE_ACTION` AFTER DELETE ON `sequence_action` FOR EACH ROW body:BEGIN - #删除关联了此动作的功能 - DELETE FROM sequence_function WHERE ACTION_NAME = OLD.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_action', 'name', OLD.NAME, '', getTableSubSystem('sequence_action')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_SEQUENCE_DEFINE` BEFORE INSERT ON `sequence_define` FOR EACH ROW body:BEGIN - #仅仅修改时标 - #避免触发器循环 - SET @disableSequenceSettingTrigger = 1; - - CALL kbdDebugInfo('sequence_define Insert','sequence_define Insert'); - - IF COALESCE(@disableSequenceDefineTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE sequence_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = NEW.SEQ_NAME; - END; - END IF; - - SET @disableSequenceSettingTrigger = 0; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SEQUENCE_DEFINE` AFTER INSERT ON `sequence_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_define', 'seq_name,func_name', '', concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_SEQUENCE_DEFINE` BEFORE UPDATE ON `sequence_define` FOR EACH ROW body:BEGIN - - #修改对应联动功能关系表 - #避免触发器循环 - SET @disableSequenceSettingTrigger = 1; - - CALL kbdDebugInfo('sequence_define update','sequence_define update'); - - IF COALESCE(@disableSequenceDefineTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE sequence_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = OLD.SEQ_NAME; - END; - END IF; - - SET @disableSequenceSettingTrigger = 0; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SEQUENCE_DEFINE` AFTER UPDATE ON `sequence_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_SEQUENCE_DEFINE` AFTER DELETE ON `sequence_define` FOR EACH ROW body:BEGIN - #仅仅修改时标 - #避免触发器循环 - SET @disableSequenceSettingTrigger = 1; - - CALL kbdDebugInfo('sequence_define delete','sequence_define delete'); - - IF COALESCE(@disableSequenceDefineTrigger,0) = 0 THEN - BEGIN - UPDATE sequence_setting SET - TIMEFLAG = unix_timestamp(now()) - WHERE NAME = OLD.SEQ_NAME; - END; - END IF; - - SET @disableSequenceSettingTrigger = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('sequence_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_SEQUENCE_FUNCTION` BEFORE INSERT ON `sequence_function` FOR EACH ROW body:BEGIN - #仅仅修改时标 - SET NEW.TIMEFLAG = unix_timestamp(now()); - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIA_SEQUENCE_FUNCTION -AFTER INSERT -ON sequence_function FOR EACH ROW -BEGIN - UPDATE sequence_define SET - TIMEFLAG = NEW.TIMEFLAG - WHERE FUNC_NAME = NEW.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_SEQUENCE_FUNCTION` BEFORE UPDATE ON `sequence_function` FOR EACH ROW body:BEGIN - #修改对应联动功能关系表 - SET NEW.TIMEFLAG = unix_timestamp(now()); - UPDATE sequence_define SET - TIMEFLAG = NEW.TIMEFLAG, - FUNC_NAME = NEW.NAME - WHERE FUNC_NAME = OLD.NAME; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SEQUENCE_FUNCTION` AFTER UPDATE ON `sequence_function` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_SEQUENCE_FUNCTION` AFTER DELETE ON `sequence_function` FOR EACH ROW body:BEGIN - #删除关联了此功能的联动定义 - #检查功能是否被删除 - IF NOT EXISTS (SELECT * FROM sequence_function WHERE NAME = OLD.NAME) THEN - BEGIN - DELETE FROM sequence_define WHERE FUNC_NAME = OLD.NAME; - END; - ELSE - BEGIN - #修改时标 - UPDATE sequence_define SET - TIMEFLAG = unix_timestamp(now()) - WHERE FUNC_NAME = OLD.NAME; - END; - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('sequence_function')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TI_SEQUENCE_SETTING` BEFORE INSERT ON `sequence_setting` FOR EACH ROW body:BEGIN - #仅仅修改时标 - #避免触发器循环 - SET @disableSequenceDefineTrigger = 1; - - CALL kbdDebugInfo('sequence_setting insert','sequence_setting insert'); - - IF COALESCE(@disableSequenceSettingTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - END; - END IF; - - SET @disableSequenceDefineTrigger = 0; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_SEQUENCE_SETTING` AFTER INSERT ON `sequence_setting` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_setting', 'name', '', NEW.NAME, getTableSubSystem('sequence_setting')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TU_SEQUENCE_SETTING` BEFORE UPDATE ON `sequence_setting` FOR EACH ROW body:BEGIN - #修改对应联动功能关系表 - #避免触发器循环 - SET @disableSequenceDefineTrigger = 1; - - CALL kbdDebugInfo('sequence_setting update','sequence_setting update'); - - IF COALESCE(@disableSequenceSettingTrigger,0) = 0 THEN - BEGIN - SET NEW.TIMEFLAG = unix_timestamp(now()); - IF NEW.NAME<>OLD.NAME THEN - UPDATE sequence_define SET - SEQ_NAME = NEW.NAME - WHERE SEQ_NAME = OLD.NAME; - END IF; - END; - END IF; - - SET @disableSequenceDefineTrigger = 0; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_SEQUENCE_SETTING` AFTER UPDATE ON `sequence_setting` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_setting')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TD_SEQUENCE_SETTING` AFTER DELETE ON `sequence_setting` FOR EACH ROW body:BEGIN - #删除关联了此联动的功能关联 - #避免触发器循环 - SET @disableSequenceDefineTrigger = 1; - - CALL kbdDebugInfo('sequence_setting delete','sequence_setting delete'); - - IF COALESCE(@disableSequenceSettingTrigger,0) = 0 THEN - BEGIN - DELETE FROM sequence_define WHERE SEQ_NAME = OLD.NAME; - END; - END IF; - - SET @disableSequenceDefineTrigger = 0; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_setting', 'name', OLD.NAME, '', getTableSubSystem('sequence_setting')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_INST_DEF` AFTER INSERT ON `stat_inst_def` FOR EACH ROW BEGIN - - #插入测点分组表 - #插入测点表 - #插入时间测点变 - #插入返回分组表 - #插入返回参数表 - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) , DESCRIPTION, NEW.INST_TAG, SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG, LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, '', SORT, '', NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(`TYPE`,0) = 1; - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, unix_timestamp(now()),SORT, '', NEW.INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(`TYPE`,0) = 2; - - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, NEW.INST_TAG,SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG, LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, 1, '', SORT, '', 0, 0, NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_def', 'inst_tag', '', NEW.INST_TAG, getTableSubSystem('stat_inst_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_INST_DEF -AFTER UPDATE -ON stat_inst_def FOR EACH ROW -BEGIN - IF NEW.INST_TAG <> OLD.INST_TAG THEN - BEGIN - UPDATE stat_inst_para_grp - SET INST_TAG = NEW.INST_TAG, - PARA_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_GRP_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_para_point - SET INST_TAG = NEW.INST_TAG, - PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_para_time - SET INST_TAG = NEW.INST_TAG, - PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_ret_grp - SET INST_TAG = NEW.INST_TAG, - RET_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_GRP_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_ret_para - SET INST_TAG = NEW.INST_TAG, - RET_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - END; - END IF; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, NEW.INST_TAG, getTableSubSystem('stat_inst_def')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_INST_DEF` AFTER DELETE ON `stat_inst_def` FOR EACH ROW BEGIN - DELETE FROM stat_inst_para_grp WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_para_point WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_para_time WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_ret_grp WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_ret_para WHERE INST_TAG = OLD.INST_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, '', getTableSubSystem('stat_inst_def')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_INST_PARA_GRP` AFTER INSERT ON `stat_inst_para_grp` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_grp', 'para_grp_tag', '', NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_STAT_INST_PARA_GRP` AFTER UPDATE ON `stat_inst_para_grp` FOR EACH ROW body:BEGIN - IF NEW.PARA_GRP_TAG = OLD.PARA_GRP_TAG - THEN LEAVE body; - END IF; - - UPDATE stat_inst_para_point - SET PARA_GRP_TAG = NEW.PARA_GRP_TAG - WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - UPDATE stat_inst_para_time - SET PARA_GRP_TAG = NEW.PARA_GRP_TAG - WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_INST_PARA_GRP` AFTER DELETE ON `stat_inst_para_grp` FOR EACH ROW BEGIN - DELETE FROM stat_inst_para_point WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - DELETE FROM stat_inst_para_time WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, '', getTableSubSystem('stat_inst_para_grp')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIA_STAT_INST_PARA_POINT -AFTER INSERT -ON stat_inst_para_point FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_point', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_INST_PARA_POINT -AFTER UPDATE -ON stat_inst_para_point FOR EACH ROW -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TDA_STAT_INST_PARA_POINT -AFTER DELETE -ON stat_inst_para_point FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_point')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIA_STAT_INST_PARA_TIME -AFTER INSERT -ON stat_inst_para_time FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_time', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_INST_PARA_TIME -AFTER UPDATE -ON stat_inst_para_time FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TDA_STAT_INST_PARA_TIME -AFTER DELETE -ON stat_inst_para_time FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_time')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_INST_RET_GRP` AFTER INSERT ON `stat_inst_ret_grp` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_grp', 'ret_grp_tag', '', NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_STAT_INST_RET_GRP` AFTER UPDATE ON `stat_inst_ret_grp` FOR EACH ROW body:BEGIN - - IF NEW.RET_GRP_TAG = OLD.RET_GRP_TAG - THEN LEAVE body; - END IF; - - UPDATE stat_inst_ret_para - SET PARA_GRP_TAG = NEW.RET_GRP_TAG - WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_INST_RET_GRP` AFTER DELETE ON `stat_inst_ret_grp` FOR EACH ROW BEGIN - DELETE FROM stat_inst_ret_para WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, '', getTableSubSystem('stat_inst_ret_grp')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIA_STAT_INST_RET_PARA -AFTER INSERT -ON stat_inst_ret_para FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_para', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_INST_RET_PARA -AFTER UPDATE -ON stat_inst_ret_para FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TDA_STAT_INST_RET_PARA -AFTER DELETE -ON stat_inst_ret_para FOR EACH ROW -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_inst_ret_para')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_LINK_DEF` AFTER INSERT ON `STAT_LINK_DEF` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('STAT_LINK_DEF')); - END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_STAT_LINK_DEF` AFTER UPDATE ON `stat_link_def` -FOR EACH ROW BEGIN - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - UPDATE stat_link_para - SET LINK_TAG = NEW.TAG_NAME, - TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) - WHERE LINK_TAG = OLD.TAG_NAME; - UPDATE stat_link_ret - SET LINK_TAG = NEW.TAG_NAME, - TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) - WHERE LINK_TAG = OLD.TAG_NAME; - - END; - END IF; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_def')); - END IF; - UPDATE stat_link_para - SET STAT_PARA_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_PARA_TAG)) - WHERE LINK_TAG = OLD.TAG_NAME; - UPDATE stat_link_ret - SET STAT_RET_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_RET_TAG)) - WHERE LINK_TAG = OLD.TAG_NAME; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_LINK_DEF` AFTER DELETE ON `stat_link_def` -FOR EACH ROW BEGIN - #删除对应的模板点 - DELETE FROM stat_link_para WHERE LINK_TAG= OLD.TAG_NAME; - DELETE FROM stat_link_ret WHERE LINK_TAG = OLD.TAG_NAME; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_def')); - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_LINK_PARA` AFTER INSERT ON `stat_link_para` -FOR EACH ROW BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_para')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_STAT_LINK_PARA` AFTER UPDATE ON `stat_link_para` -FOR EACH ROW BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_para')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_LINK_PARA` AFTER DELETE ON `stat_link_para` -FOR EACH ROW BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_para')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_LINK_RET` AFTER INSERT ON `stat_link_ret` -FOR EACH ROW BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_ret', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_STAT_LINK_RET` AFTER UPDATE ON `stat_link_ret` -FOR EACH ROW BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_LINK_RET` AFTER DELETE ON `stat_link_ret` -FOR EACH ROW BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_ret')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_STAT_TEMPLATE_DEF` AFTER INSERT ON `stat_template_def` FOR EACH ROW BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_def', 'template_tag', '', NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_TEMPLATE_DEF -AFTER UPDATE -ON stat_template_def FOR EACH ROW -BEGIN - UPDATE stat_template_para - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, - PARA_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - UPDATE stat_template_ret - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, - RET_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(RET_TAG)) - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - UPDATE stat_inst_def - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - UPDATE stat_link_def - SET STAT_TEMP_TAG = NEW.TEMPLATE_TAG - WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_STAT_TEMPLATE_DEF` AFTER DELETE ON `stat_template_def` FOR EACH ROW BEGIN - #删除对应关联 - DELETE FROM stat_link_def WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; - - #删除对应实例 - DELETE FROM stat_inst_def WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - #删除对应的模板点 - DELETE FROM stat_template_para WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - DELETE FROM stat_template_ret WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, '', getTableSubSystem('stat_template_def')); - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIA_STAT_TEMPLATE_PARA -AFTER INSERT -ON stat_template_para FOR EACH ROW -BEGIN - #插入对应的实例 - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 1; - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, unix_timestamp(now()),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 2; - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_para', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_template_para')); - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_TEMPLATE_PARA -AFTER UPDATE -ON stat_template_para FOR EACH ROW -body:BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_para', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_template_para')); - END IF; - - UPDATE stat_link_para - SET STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) - WHERE STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.PARA_TAG)); - - IF OLD.PARA_TAG = NEW.PARA_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.`TYPE` = NEW.`TYPE` - AND OLD.SORT = NEW.SORT - THEN LEAVE body; - END IF; - - - #更新对应的实例点 - #考虑从分组到不分组,从测点类型到时间类型,需删除旧的数据 - IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN - BEGIN - DELETE stat_inst_para_grp FROM stat_inst_def,stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - IF NEW.`TYPE` = 1 THEN - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 1; - ELSEIF NEW.`TYPE` = 2 THEN - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, unix_timestamp(now()),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 2; - END IF; - END; - ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN - BEGIN - IF OLD.`TYPE` = 1 THEN - DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - ELSEIF OLD.`TYPE` = 2 THEN - DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - END IF; - - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN - BEGIN - IF OLD.`TYPE` = 1 AND NEW.`TYPE` = 2 THEN - BEGIN - DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, unix_timestamp(now()),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 2; - END; - ELSEIF OLD.`TYPE` = 2 AND NEW.`TYPE` = 1 THEN - BEGIN - DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 1; - END; - ELSEIF OLD.`TYPE` = NEW.`TYPE` AND OLD.`TYPE` = 1 THEN - UPDATE stat_inst_para_point INNER JOIN stat_inst_def - ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_point.INST_TAG - AND `RANK` = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG) - SET stat_inst_para_point.PARA_TAG = concat(stat_inst_para_point.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), - stat_inst_para_point.DESCRIPTION = NEW.DESCRIPTION, - stat_inst_para_point.SORT = NEW.SORT; - ELSEIF OLD.`TYPE` = NEW.`TYPE` AND OLD.`TYPE` = 2 THEN - UPDATE stat_inst_para_time INNER JOIN stat_inst_def - ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_time.INST_TAG - AND `RANK` = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG) - SET stat_inst_para_time.PARA_TAG = concat(stat_inst_para_time.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), - stat_inst_para_time.DESCRIPTION = NEW.DESCRIPTION, - stat_inst_para_time.SORT = NEW.SORT; - END IF; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN - BEGIN - IF OLD.`TYPE` = 1 AND NEW.`TYPE` = 2 THEN - BEGIN - DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_grp,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - AND stat_inst_para_point.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; - END; - ELSEIF OLD.`TYPE` = 2 AND NEW.`TYPE` = 1 THEN - BEGIN - DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_grp,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - AND stat_inst_para_time.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; - END; - END IF; - - - UPDATE stat_inst_para_grp INNER JOIN stat_inst_def - ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - SET stat_inst_para_grp.PARA_GRP_TAG = concat(stat_inst_para_grp.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), - stat_inst_para_grp.DESCRIPTION = NEW.DESCRIPTION, - stat_inst_para_grp.SORT = NEW.SORT; - END; - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TDA_STAT_TEMPLATE_PARA -AFTER DELETE -ON stat_template_para FOR EACH ROW -BEGIN - #删除相应的实例点 - DELETE stat_inst_para_grp FROM stat_inst_def,stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - DELETE FROM stat_link_para - WHERE STAT_PARA_TAG = OLD.PARA_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_para', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_template_para')); - END IF; - - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TIA_STAT_TEMPLATE_RET -AFTER INSERT -ON stat_template_ret FOR EACH ROW -BEGIN - #插入相应实例点 - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_ret', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_template_ret')); - END IF; - - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TUA_STAT_TEMPLATE_RET -AFTER UPDATE -ON stat_template_ret FOR EACH ROW -body:BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_template_ret')); - END IF; - - UPDATE stat_link_ret - SET STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.RET_TAG)) - WHERE STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.RET_TAG)); - - IF OLD.RET_TAG = NEW.RET_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.SORT = NEW.SORT - THEN LEAVE body; - END IF; - - #更新相应的实例点 - IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN - BEGIN - DELETE stat_inst_ret_grp FROM stat_inst_def,stat_inst_ret_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; - END; - ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN - BEGIN - DELETE stat_inst_ret_para FROM stat_inst_def,stat_inst_ret_para - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); - - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN - BEGIN - UPDATE stat_inst_ret_para INNER JOIN stat_inst_def - ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_para.INST_TAG - AND `RANK` = 1 AND getAfterLastDot(RET_TAG) = getAfterLastDot(OLD.RET_TAG) - SET stat_inst_ret_para.RET_TAG = concat(stat_inst_ret_para.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), - stat_inst_ret_para.DESCRIPTION = NEW.DESCRIPTION, - stat_inst_ret_para.SORT = NEW.SORT; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN - BEGIN - UPDATE stat_inst_ret_grp INNER JOIN stat_inst_def - ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_grp.INST_TAG - AND getAfterLastDot(RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG) - SET stat_inst_ret_grp.RET_GRP_TAG = concat(stat_inst_ret_grp.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), - stat_inst_ret_grp.DESCRIPTION = NEW.DESCRIPTION, - stat_inst_ret_grp.SORT = NEW.SORT; - END; - END IF; - - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER TDA_STAT_TEMPLATE_RET -AFTER DELETE -ON stat_template_ret FOR EACH ROW -BEGIN - #删除相应的实例点 - DELETE stat_inst_ret_grp FROM stat_inst_def,stat_inst_ret_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - DELETE stat_inst_ret_para FROM stat_inst_def,stat_inst_ret_para - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); - DELETE FROM stat_link_ret - WHERE STAT_RET_TAG = OLD.RET_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_template_ret')); - END IF; - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_TRIGGER_CONDITION_DEFINE` AFTER INSERT ON `trigger_condition_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_condition_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_TRIGGER_CONDITION_DEFINE` AFTER UPDATE ON `trigger_condition_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_TRIGGER_CONDITION_DEFINE` AFTER DELETE ON `trigger_condition_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_condition_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_TRIGGER_FUNCTION_DEFINE` AFTER INSERT ON `trigger_function_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_function_define', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_TRIGGER_FUNCTION_DEFINE` AFTER UPDATE ON `trigger_function_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_TRIGGER_FUNCTION_DEFINE` AFTER DELETE ON `trigger_function_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('trigger_function_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_TRIGGER_PERIOD_DEFINE` AFTER INSERT ON `trigger_period_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_period_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_TRIGGER_PERIOD_DEFINE` AFTER UPDATE ON `trigger_period_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_TRIGGER_PERIOD_DEFINE` AFTER DELETE ON `trigger_period_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_period_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TIA_TRIGGER_TIMER_DEFINE` AFTER INSERT ON `trigger_timer_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_timer_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TUA_TRIGGER_TIMER_DEFINE` AFTER UPDATE ON `trigger_timer_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DELIMITER $$ -CREATE TRIGGER `TDA_TRIGGER_TIMER_DEFINE` AFTER DELETE ON `trigger_timer_define` FOR EACH ROW BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_timer_define')); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DROP FUNCTION IF EXISTS `splitList`; -DELIMITER $$ -CREATE DEFINER=`root`@`%` FUNCTION `splitList`( strList varchar(100), split_char varchar(1) , strCount int) RETURNS varchar(64) CHARSET utf8 -BEGIN - #分割字符串,返回第strCount个子串 - DECLARE splitCount int; - DECLARE splitIndex int DEFAULT 1; - DECLARE str1 varchar(100) DEFAULT ''; - DECLARE str2 varchar(100) DEFAULT ''; - - SET splitCount = char_length(strList)-char_length(replace(strList,split_char,'')) + 1; - IF strCount > splitCount OR strCount <=0 THEN RETURN ''; - END IF; - - IF strCount = 1 THEN RETURN substring_index(strList,split_char,strCount); - ELSE - BEGIN - SET str1 = substring_index(strList,split_char,strCount-1); - SET str2 = substring_index(strList,split_char,strCount); - RETURN right(str2,LENGTH(str2) - LENGTH(str1) - 1); - END; - END IF; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DROP PROCEDURE IF EXISTS `clearTempRelation`; -DELIMITER $$ -CREATE DEFINER=`root`@`%` PROCEDURE `clearTempRelation`(devTempName varchar(64)) -body:BEGIN - /* - * 清除指定模板的所有测点与前置模板的关系 - */ - - UPDATE accuml_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE analog_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1, - OUT_SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE digital_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO1 = -1, - SEC_SEQ_NO2 = -1, - SEC_SEQ_NO3 = -1, - SEC_SEQ_NO4 = -1, - SEC_SEQ_NO5 = -1, - OUT_SEC_SEQ_NO1 = -1, - OUT_SEC_SEQ_NO2 = -1, - OUT_SEC_SEQ_NO3 = -1, - OUT_SEC_SEQ_NO4 = -1, - OUT_SEC_SEQ_NO5 = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE mix_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1, - OUT_SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DROP PROCEDURE IF EXISTS `updateFesResPara`; -DELIMITER $$ -CREATE DEFINER=`root`@`%` PROCEDURE `updateFesResPara`(tableName varchar(64),startNum decimal(10,0)) -body:BEGIN - /* - * 批量修改设备的规约参数1,要批量修改的设备在export_seq中 - * tableName 表名 - * startNum 修改的起始数字 - */ - - SET @fesResPara := startNum - 1; - - #创建临时表 - CREATE TEMPORARY TABLE IF NOT EXISTS tmpUpdateFesResParaTbl( - TAG_NAME varchar(64) NOT NULL, - RES_PARA decimal(10,0) NOT NULL - ); - DELETE FROM tmpUpdateFesResParaTbl; - - IF lower(tableName) = 'fes_accuml' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_accuml,export_seq WHERE fes_accuml.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_accuml.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_accuml INNER JOIN tmpUpdateFesResParaTbl ON fes_accuml.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_accuml.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - ELSEIF lower(tableName) = 'fes_analog' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_analog,export_seq WHERE fes_analog.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_analog.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_analog INNER JOIN tmpUpdateFesResParaTbl ON fes_analog.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_analog.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - ELSEIF lower(tableName) = 'fes_analog_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_analog_ctrl,export_seq WHERE fes_analog_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_analog_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_analog_ctrl INNER JOIN tmpUpdateFesResParaTbl ON fes_analog_ctrl.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_analog_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - ELSEIF lower(tableName) = 'fes_digital' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_digital,export_seq WHERE fes_digital.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_digital.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_digital INNER JOIN tmpUpdateFesResParaTbl ON fes_digital.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_digital.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - ELSEIF lower(tableName) = 'fes_digital_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_digital_ctrl,export_seq WHERE fes_digital_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_digital_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_digital_ctrl INNER JOIN tmpUpdateFesResParaTbl ON fes_digital_ctrl.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_digital_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - ELSEIF lower(tableName) = 'fes_mix' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_mix,export_seq WHERE fes_mix.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_mix.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_mix INNER JOIN tmpUpdateFesResParaTbl ON fes_mix.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_mix.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - ELSEIF lower(tableName) = 'fes_mix_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_mix_ctrl,export_seq WHERE fes_mix_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.`NO`,fes_mix_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); - - UPDATE fes_mix_ctrl INNER JOIN tmpUpdateFesResParaTbl ON fes_mix_ctrl.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME - SET fes_mix_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; - END; - END IF; - - - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DROP PROCEDURE IF EXISTS `bindStatDev`; -DELIMITER $$ -CREATE DEFINER=`root`@`%` PROCEDURE `bindStatDev`(statTag varchar(64),devTag varchar(64)) -body:BEGIN - /* - * 绑定统计分析中的实例,使用对应的后台设备 - * statTag 统计分析实例 - * devTag 后台设备 - */ - - #清空 - UPDATE stat_inst_para_point SET POINT_TAG = '' WHERE INST_TAG = statTag; - - UPDATE stat_inst_ret_para SET POINT_TAG = '' WHERE INST_TAG = statTag; - - #填写 - CREATE TEMPORARY TABLE IF NOT EXISTS tmpBinStatDevTbl( - PARA_TAG varchar(64) NOT NULL, - POINT_TAG varchar(64) NOT NULL - ); - DELETE FROM tmpBinStatDevTbl; - - #查找对应的测点 - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('analog.',analog.TAG_NAME) AS A - FROM stat_inst_para_point,analog - WHERE INST_TAG = statTag AND analog.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(analog.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('accuml.',accuml.TAG_NAME) AS A - FROM stat_inst_para_point,accuml - WHERE INST_TAG = statTag AND accuml.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(accuml.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('digital.',digital.TAG_NAME) AS A - FROM stat_inst_para_point,digital - WHERE INST_TAG = statTag AND digital.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(digital.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('mix.',mix.TAG_NAME) AS A - FROM stat_inst_para_point,mix - WHERE INST_TAG = statTag AND mix.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(mix.TAG_NAME); - - UPDATE stat_inst_para_point INNER JOIN tmpBinStatDevTbl ON stat_inst_para_point.PARA_TAG = tmpBinStatDevTbl.PARA_TAG - SET stat_inst_para_point.POINT_TAG = tmpBinStatDevTbl.POINT_TAG; - - DELETE FROM tmpBinStatDevTbl; - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('analog.',analog.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,analog - WHERE INST_TAG = statTag AND analog.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(analog.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('digital.',digital.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,digital - WHERE INST_TAG = statTag AND digital.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(digital.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('accuml.',accuml.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,accuml - WHERE INST_TAG = statTag AND accuml.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(accuml.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('mix.',mix.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,mix - WHERE INST_TAG = statTag AND mix.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(mix.TAG_NAME); - - UPDATE stat_inst_ret_para INNER JOIN tmpBinStatDevTbl ON stat_inst_ret_para.RET_TAG = tmpBinStatDevTbl.PARA_TAG - SET stat_inst_ret_para.POINT_TAG = tmpBinStatDevTbl.POINT_TAG, - stat_inst_ret_para.IS_BIND = '1' - ; - -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DROP PROCEDURE IF EXISTS `kbdDebugInfo`; -DELIMITER $$ -CREATE DEFINER=`root`@`%` PROCEDURE `kbdDebugInfo`(info1 varchar(100), info2 varchar(100) ) -BEGIN -DECLARE enableDebug int DEFAULT 1; -SET enableDebug = (SELECT PRINT_DEBUG_INFO_FLAG FROM kbd_debug_flag LIMIT 1); -IF enableDebug=1 THEN -INSERT INTO kbd_debug(col1,col2,col3) VALUES (info1,info2,now()); -END IF; -END $$ -DELIMITER ; - --- ------------------------------------------------------ -DROP PROCEDURE IF EXISTS `relationByTempPointName`; -DELIMITER $$ -CREATE DEFINER=`root`@`%` PROCEDURE `relationByTempPointName`(devTempName varchar(64),fesDevTempName varchar(64)) -body:BEGIN - /* - * 按照模板下的测点名称进行,后台模板与前置模板的关联 - */ - #获取设备测点名称 - - CALL clearTempRelation(devTempName); - #创建临时表, - CREATE TEMPORARY TABLE IF NOT EXISTS tmpRelationNameTbl( - TAG_NAME varchar(64) NOT NULL, - FES_SEQ_NO decimal(10,0) NOT NULL - ); - - #accuml - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM accuml_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_ACC')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - #进行关联 - UPDATE accuml_temp_define INNER JOIN tmpRelationNameTbl ON - accuml_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME - SET - SEC_DEVTP_NAME = fesDevTempName, - SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO; - - #analog - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM analog_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_ANA')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - #进行关联 - UPDATE analog_temp_define INNER JOIN tmpRelationNameTbl ON - analog_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME - SET - SEC_DEVTP_NAME = fesDevTempName, - SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO; - - #digital只判断第一个分量 - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM digital_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_DIG')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - #进行关联 - UPDATE digital_temp_define INNER JOIN tmpRelationNameTbl ON - digital_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME - SET - SEC_DEVTP_NAME = fesDevTempName, - SEC_SEQ_NO1 = tmpRelationNameTbl.FES_SEQ_NO; - - #mix - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM mix_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_MIX')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - #进行关联 - UPDATE mix_temp_define INNER JOIN tmpRelationNameTbl ON - mix_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME - SET - SEC_DEVTP_NAME = fesDevTempName, - SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO; - -END $$ -DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ACCUML_LIMIT_INFO` AFTER INSERT ON `accuml_limit_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ACCUML_LIMIT_INFO` AFTER UPDATE ON `accuml_limit_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ACCUML_LIMIT_INFO` AFTER DELETE ON `accuml_limit_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_limit_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_ACCUML_MAP_TO_FES +AFTER INSERT +ON accuml_map_to_fes FOR EACH ROW +BEGIN + + #首先禁止FES触发器动作 + SET @disableFesAccumlTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableAccumlMapToFesTrigger,0) = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET @disableFesAccumlTrigger = 0; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_ACCUML_MAP_TO_FES +BEFORE UPDATE +ON accuml_map_to_fes FOR EACH ROW +body_label:BEGIN + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN LEAVE body_label; + END IF; + + + #首先禁止FES触发器动作 + SET @disableFesAccumlTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableAccumlMapToFesTrigger,0) = 0 THEN + BEGIN + #清除旧的 + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + #添加新的 + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE SET NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + SET @disableFesAccumlTrigger = 0; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ACCUML_MAP_TO_FES` AFTER UPDATE ON `accuml_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_ACCUML_MAP_TO_FES +BEFORE DELETE +ON accuml_map_to_fes FOR EACH ROW +BEGIN + + + #首先禁止FES触发器动作 + SET @disableFesAccumlTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableAccumlMapToFesTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET @disableFesAccumlTrigger = 0; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ACCUML_MAP_TO_FES` AFTER DELETE ON `accuml_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('accuml_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_ACCUML_TEMP_DEFINE +AFTER INSERT +ON accuml_temp_define FOR EACH ROW +BEGIN + /* +INSERT INTO accuml( +TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)), NEW.DESCRIPTION,TAG_NAME, NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP, NEW.IS_LIMIT, NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS, NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + INSERT INTO temp_plugin_point_map_acc + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_ACCUML_TEMP_DEFINE +AFTER UPDATE +ON accuml_temp_define FOR EACH ROW +BEGIN + /* + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.UNIT_ID <> OLD.UNIT_ID OR NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR + NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.SEQ_NO <> OLD.SEQ_NO OR + NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT + THEN + UPDATE accuml SET + accuml.TAG_NAME = concat(accuml.DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + accuml.DESCRIPTION = NEW.DESCRIPTION, + accuml.UNIT_ID = NEW.UNIT_ID, + accuml.IS_LIMIT = NEW.IS_LIMIT, + accuml.POINT_CLASS = NEW.POINT_CLASS, + accuml.POINT_TP_NAME = NEW.TAG_NAME, + accuml.IS_SAMPLE = NEW.IS_SAMPLE, + accuml.SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND, + accuml.POINT_TYPE = NEW.POINT_TYPE, + accuml.SEQ_NO = NEW.SEQ_NO, + accuml.IS_STATISTICS = NEW.IS_STATISTICS, + accuml.SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + accuml.POINT_PROPERTY = NEW.POINT_PROPERTY, + accuml.POINT_SORT = NEW.POINT_SORT + WHERE accuml.POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR + NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR + NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR + NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE accuml_limit_info SET + LIMIT_TYPE = NEW.LIMIT_TYPE, + LIMIT_NUM = NEW.LIMIT_NUM, + LIMIT_UP1 = NEW.LIMIT_UP1, + LIMIT_LOW1 = NEW.LIMIT_LOW1, + LIMIT_UP2 = NEW.LIMIT_UP2, + LIMIT_LOW2 = NEW.LIMIT_LOW2, + LIMIT_UP3 = NEW.LIMIT_UP3, + LIMIT_LOW3 = NEW.LIMIT_LOW3, + CROSS_PERCENT = NEW.CROSS_PERCENT, + RETURN_PERCENT = NEW.RETURN_PERCENT, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + IF NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR + NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF + THEN + UPDATE accuml_map_to_fes SET + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + IS_FILTER = NEW.IS_FILTER, + PERCENT = NEW.PERCENT, + BASE = NEW.BASE, + COEFF = NEW.COEFF + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_acc + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_ACCUML_TEMP_DEFINE +BEFORE DELETE +ON accuml_temp_define FOR EACH ROW +BEGIN + + DELETE FROM temp_plugin_point_map_acc WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* +DELETE FROM accuml WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ACCUML_TEMP_DEFINE` AFTER DELETE ON `accuml_temp_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ALARM_LINK_ENABLE_INFO` AFTER INSERT ON `alarm_link_enable_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_link_enable_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ALARM_LINK_ENABLE_INFO` AFTER UPDATE ON `alarm_link_enable_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ALARM_LINK_ENABLE_INFO` AFTER DELETE ON `alarm_link_enable_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('alarm_link_enable_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ALARM_SMS_CONFIG` AFTER INSERT ON `alarm_sms_config` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_config', 'NO', '', NEW.NO, getTableSubSystem('alarm_sms_config')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ALARM_SMS_CONFIG` AFTER UPDATE ON `alarm_sms_config` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_config', 'NO', OLD.NO, NEW.NO, getTableSubSystem('alarm_sms_config')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ALARM_SMS_CONFIG` AFTER DELETE ON `alarm_sms_config` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_config', 'NO', OLD.NO, '', getTableSubSystem('alarm_sms_config')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ALARM_SMS_DEVICE` AFTER INSERT ON `alarm_sms_device` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_device', 'DEVICE_ID', '', NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ALARM_SMS_DEVICE` AFTER UPDATE ON `alarm_sms_device` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ALARM_SMS_DEVICE` AFTER DELETE ON `alarm_sms_device` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, '', getTableSubSystem('alarm_sms_device')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ALARM_SMS_RULE` AFTER INSERT ON `alarm_sms_rule` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_rule', 'RULE_ID', '', NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ALARM_SMS_RULE` AFTER UPDATE ON `alarm_sms_rule` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ALARM_SMS_RULE` AFTER DELETE ON `alarm_sms_rule` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, '', getTableSubSystem('alarm_sms_rule')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ANALOG_CONTROL` AFTER INSERT ON `analog_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_ANALOG_CONTROL +BEFORE UPDATE +ON analog_control FOR EACH ROW +body:BEGIN + + #修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + SET NEW.OFFSET_NO = '-1'; + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ANALOG_CONTROL` AFTER UPDATE ON `analog_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ANALOG_CONTROL` AFTER DELETE ON `analog_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ANALOG_LIMIT_INFO` AFTER INSERT ON `analog_limit_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ANALOG_LIMIT_INFO` AFTER UPDATE ON `analog_limit_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ANALOG_LIMIT_INFO` AFTER DELETE ON `analog_limit_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_limit_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_ANALOG_MAP_TO_FES +AFTER INSERT +ON analog_map_to_fes FOR EACH ROW +BEGIN + + + SET @disableFesAnalogTrigger = 1; + + IF COALESCE(@disableAnalogMapToFesTrigger,0) = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET @disableFesAnalogTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_ANALOG_MAP_TO_FES +BEFORE UPDATE +ON analog_map_to_fes FOR EACH ROW +body_label:BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN LEAVE body_label; + END IF; + + SET @disableFesAnalogTrigger = 1; + + IF COALESCE(@disableAnalogMapToFesTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE SET NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET @disableFesAnalogTrigger = 0; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ANALOG_MAP_TO_FES` AFTER UPDATE ON `analog_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_ANALOG_MAP_TO_FES +BEFORE DELETE +ON analog_map_to_fes FOR EACH ROW +body_label:BEGIN + + SET @disableFesAnalogTrigger = 1; + + IF COALESCE(@disableAnalogMapToFesTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET @disableFesAnalogTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ANALOG_MAP_TO_FES` AFTER DELETE ON `analog_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('analog_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_ANALOG_TEMP_DEFINE +AFTER INSERT +ON analog_temp_define FOR EACH ROW +BEGIN + +/* +INSERT INTO analog( +TAG_NAME, DESCRIPTION, RTU_TAG, DEV_TYPE, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, IS_CONTROL, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)) , NEW.DESCRIPTION ,'', DEV_TYPE, TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, NEW.IS_CONTROL,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP,NEW.IS_LIMIT,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + + INSERT INTO temp_plugin_point_map_ana + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_ANALOG_TEMP_DEFINE +AFTER UPDATE +ON analog_temp_define FOR EACH ROW +BEGIN + /* + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.SEQ_NO <> OLD.SEQ_NO OR NEW.IS_CONTROL <> OLD.IS_CONTROL OR NEW.UNIT_ID <> OLD.UNIT_ID OR + NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT OR + NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND + THEN + UPDATE analog SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + UNIT_ID = NEW.UNIT_ID, + IS_LIMIT = NEW.IS_LIMIT, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND + WHERE POINT_TP_NAME=OLD.TAG_NAME; + END IF; + + IF NEW.IS_TAGT_STATE <> OLD.IS_TAGT_STATE OR NEW.CTRL_TIMEOUT <> OLD.CTRL_TIMEOUT OR NEW.RESV_TIMEOUT <> OLD.RESV_TIMEOUT OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR + NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.CTRL_TOLERANCE <> OLD.CTRL_TOLERANCE OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE analog_control SET + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR + NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR + NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR + NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE analog_limit_info SET + LIMIT_TYPE = NEW.LIMIT_TYPE , + LIMIT_NUM = NEW.LIMIT_NUM , + LIMIT_UP1 = NEW.LIMIT_UP1 , + LIMIT_LOW1 = NEW.LIMIT_LOW1 , + LIMIT_UP2 = NEW.LIMIT_UP2 , + LIMIT_LOW2 = NEW.LIMIT_LOW2 , + LIMIT_UP3 = NEW.LIMIT_UP3 , + LIMIT_LOW3 = NEW.LIMIT_LOW3 , + CROSS_PERCENT = NEW.CROSS_PERCENT , + RETURN_PERCENT = NEW.RETURN_PERCENT , + ALARM_PRIORITY = NEW.ALARM_PRIORITY , + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME , + IS_WATER_ALM = NEW.IS_WATER_ALM , + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN , + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK , + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR NEW.IS_VALID <> OLD.IS_VALID OR NEW.DEADBAND <> OLD.DEADBAND OR + NEW.ZEROBAND <> OLD.ZEROBAND OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW + THEN + UPDATE analog_map_to_fes SET + POINT_TP_NAME = NEW.TAG_NAME, + IS_FILTER = NEW.IS_FILTER, + PERCENT = NEW.PERCENT, + IS_VALID = NEW.IS_VALID, + DEADBAND = NEW.DEADBAND, + ZEROBAND = NEW.ZEROBAND, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_ana + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_ANALOG_TEMP_DEFINE +BEFORE DELETE +ON analog_temp_define FOR EACH ROW +BEGIN + DELETE FROM temp_plugin_point_map_ana WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* + DELETE FROM analog WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ANALOG_TEMP_DEFINE` AFTER DELETE ON `analog_temp_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_APC_ANALOG` AFTER INSERT ON `APC_ANALOG` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_analog', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUB_APC_ANALOG` BEFORE UPDATE ON `APC_ANALOG` FOR EACH ROW BEGIN +IF NEW.NO_RDB_SYNC = 1 THEN +SET NEW.NO_RDB_SYNC = NULL; +ELSEIF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_APC_ANALOG` AFTER DELETE ON `APC_ANALOG` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_analog')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_apc_curve` AFTER INSERT ON `apc_curve` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_apc_curve` AFTER UPDATE ON `apc_curve` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_apc_curve` AFTER DELETE ON `apc_curve` FOR EACH ROW BEGIN +delete from apc_curve_day_index where curve_key_id_tag = old.key_id_tag; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_curve')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_APC_CURVE_DAY_INDEX` AFTER INSERT ON `apc_curve_day_index` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', '', concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_APC_CURVE_DAY_INDEX` AFTER UPDATE ON `apc_curve_day_index` FOR EACH ROW BEGIN +IF((select count(*) from apc_curve_day_index where day_rule_id = old.day_rule_id)<1) THEN +delete from apc_curve_day_value where day_rule_id = old.day_rule_id; +END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_APC_CURVE_DAY_INDEX` AFTER DELETE ON `apc_curve_day_index` FOR EACH ROW BEGIN +delete from apc_curve_day_value where day_rule_id = old.day_rule_id; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id',concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), '', getTableSubSystem('apc_curve_day_index')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_APC_CURVE_DAY_VALUE` AFTER INSERT ON `apc_curve_day_value` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', '', concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_APC_CURVE_DAY_VALUE` AFTER UPDATE ON `apc_curve_day_value` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_APC_CURVE_DAY_VALUE` AFTER DELETE ON `apc_curve_day_value` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), '', getTableSubSystem('apc_curve_day_value')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_APC_CURVE_WEEK` AFTER INSERT ON `apc_curve_week` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_week', 'type_id,week_day', '', concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_APC_CURVE_WEEK` AFTER UPDATE ON `apc_curve_week` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_APC_CURVE_WEEK` AFTER DELETE ON `apc_curve_week` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), '', getTableSubSystem('apc_curve_week')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_APC_CURVE_YEAR` AFTER INSERT ON `apc_curve_year` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_APC_CURVE_YEAR` AFTER UPDATE ON `apc_curve_year` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_APC_CURVE_YEAR` AFTER DELETE ON `apc_curve_year` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_APC_DIGITAL` AFTER INSERT ON `apc_digital` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_digital', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUB_APC_DIGITAL` BEFORE UPDATE ON `apc_digital` FOR EACH ROW BEGIN +IF NEW.NO_RDB_SYNC = 1 THEN +SET NEW.NO_RDB_SYNC = NULL; +ELSEIF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_APC_DIGITAL` AFTER DELETE ON `apc_digital` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_digital')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ATS_CASCO_PLANNED_TRAIN_DATA` AFTER INSERT ON `ats_casco_planned_train_data` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ATS_CASCO_PLANNED_TRAIN_DATA` AFTER UPDATE ON `ats_casco_planned_train_data` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ATS_CASCO_PLANNED_TRAIN_DATA` AFTER DELETE ON `ats_casco_planned_train_data` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_planned_train_data')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA` AFTER INSERT ON `ats_casco_practical_train_data` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA` AFTER UPDATE ON `ats_casco_practical_train_data` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA` AFTER DELETE ON `ats_casco_practical_train_data` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_practical_train_data')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ATS_FES_LOCATION_INFO` AFTER INSERT ON `ats_fes_location_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_location_info', 'ats_location_id', '', NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ATS_FES_LOCATION_INFO` AFTER UPDATE ON `ats_fes_location_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ATS_FES_LOCATION_INFO` AFTER DELETE ON `ats_fes_location_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, '', getTableSubSystem('ats_fes_location_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_ATS_FES_PLATFORM_INFO` AFTER INSERT ON `ats_fes_platform_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', '', concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_ATS_FES_PLATFORM_INFO` AFTER UPDATE ON `ats_fes_platform_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_ATS_FES_PLATFORM_INFO` AFTER DELETE ON `ats_fes_platform_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), '', getTableSubSystem('ats_fes_platform_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_BAS_TIMETABLE_CTRL_PARAM` AFTER INSERT ON `bas_timetable_ctrl_param` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_BAS_TIMETABLE_CTRL_PARAM` AFTER UPDATE ON `bas_timetable_ctrl_param` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_BAS_TIMETABLE_CTRL_PARAM` AFTER DELETE ON `bas_timetable_ctrl_param` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_BAS_TIMETABLE_DEF` AFTER INSERT ON `bas_timetable_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_def', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_BAS_TIMETABLE_DEF` AFTER UPDATE ON `bas_timetable_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_BAS_TIMETABLE_DEF` AFTER DELETE ON `bas_timetable_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_BAS_TIMETABLE_INFO` AFTER INSERT ON `bas_timetable_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_info', 'location_id,timetable_id,begin_time', '', concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_BAS_TIMETABLE_INFO` AFTER UPDATE ON `bas_timetable_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_BAS_TIMETABLE_INFO` AFTER DELETE ON `bas_timetable_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), '', getTableSubSystem('bas_timetable_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_BAS_TIMETABLE_SCHEDULE` AFTER INSERT ON `bas_timetable_schedule` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_schedule', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_BAS_TIMETABLE_SCHEDULE` AFTER UPDATE ON `bas_timetable_schedule` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_BAS_TIMETABLE_SCHEDULE` AFTER DELETE ON `bas_timetable_schedule` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_schedule')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_CALC_FUNC_DEF` AFTER INSERT ON `calc_func_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_func_def', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_CALC_FUNC_DEF` AFTER UPDATE ON `calc_func_def` FOR EACH ROW BEGIN + + UPDATE calc_out_para SET + FUNC_NAME = NEW.FUNC_NAME, + CALC_FLAG = '1' + WHERE FUNC_NAME = OLD.FUNC_NAME; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_func_def', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_CALC_FUNC_DEF` AFTER DELETE ON `calc_func_def` FOR EACH ROW BEGIN + DELETE FROM calc_out_para WHERE FUNC_NAME = OLD.FUNC_NAME; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_func_def', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('calc_func_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_CALC_GROUP_DEF` AFTER INSERT ON `calc_group_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_group_def', 'group_id', '', NEW.GROUP_ID, getTableSubSystem('calc_group_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_CALC_GROUP_DEF` AFTER UPDATE ON `calc_group_def` FOR EACH ROW BEGIN + + IF NEW.GROUP_ID <> OLD.GROUP_ID THEN + UPDATE calc_func_def SET GROUP_ID = NEW.GROUP_ID WHERE GROUP_ID = OLD.GROUP_ID; + END IF; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_group_def', 'group_id', OLD.GROUP_ID, NEW.GROUP_ID, getTableSubSystem('calc_group_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_CALC_GROUP_DEF` AFTER DELETE ON `calc_group_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_group_def', 'group_id', OLD.GROUP_ID, '', getTableSubSystem('calc_group_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_CALC_IN_PARA` AFTER INSERT ON `calc_in_para` FOR EACH ROW BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_in_para', 'key_id_tag,para_seq_no', '', concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_CALC_IN_PARA` AFTER UPDATE ON `calc_in_para` FOR EACH ROW BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_CALC_IN_PARA` AFTER DELETE ON `calc_in_para` FOR EACH ROW BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = OLD.KEY_ID_TAG; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_in_para')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_CALC_OUT_PARA` AFTER INSERT ON `calc_out_para` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_out_para', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_CALC_OUT_PARA` AFTER UPDATE ON `calc_out_para` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_CALC_OUT_PARA +AFTER DELETE +ON calc_out_para FOR EACH ROW +BEGIN + + #这里不能触发删除本输出的输入,因为输入的删除触发器中调用了本表 + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('calc_out_para')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_CALC_PARA_DEF` AFTER INSERT ON `calc_para_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_para_def', 'func_name,para_seq_no', '', concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_CALC_PARA_DEF` AFTER UPDATE ON `calc_para_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_CALC_PARA_DEF` AFTER DELETE ON `calc_para_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_para_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_CFG_DEVICE_INST` AFTER INSERT ON `cfg_device_inst` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_device_inst', 'id', '', NEW.id, getTableSubSystem('cfg_device_inst')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_CFG_DEVICE_INST` AFTER UPDATE ON `cfg_device_inst` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'cfg_device_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_device_inst')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_CFG_DEVICE_INST` AFTER DELETE ON `cfg_device_inst` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_device_inst', 'id', OLD.id, '', getTableSubSystem('cfg_device_inst')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_CFG_SIGNAL_INST` AFTER INSERT ON `cfg_signal_inst` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_signal_inst', 'id', '', NEW.id, getTableSubSystem('cfg_signal_inst')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_CFG_SIGNAL_INST` AFTER UPDATE ON `cfg_signal_inst` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'cfg_signal_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_signal_inst')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_CFG_SIGNAL_INST` AFTER DELETE ON `cfg_signal_inst` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_signal_inst', 'id', OLD.id, '', getTableSubSystem('cfg_signal_inst')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_DEV_TEMP_DEF` AFTER INSERT ON `dev_temp_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_DEV_TEMP_DEF +AFTER UPDATE +ON dev_temp_def FOR EACH ROW +BEGIN +IF OLD.TAG_NAME != NEW.TAG_NAME THEN +BEGIN + UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +END; +END IF; + +IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DESCRIPTION != NEW.DESCRIPTION THEN +BEGIN + UPDATE accuml_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + UPDATE analog_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + + UPDATE digital_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + UPDATE mix_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + #更新对应的套件 + IF OLD.TAG_NAME != NEW.TAG_NAME THEN + BEGIN + UPDATE temp_plugin_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_fes_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_acc SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_ana SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_dig SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_mix SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + END; + END IF; +END; +END IF; +/* +IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DEV_TYPE_ID != NEW.DEV_TYPE_ID OR OLD.SUB_SYSTEM != NEW.SUB_SYSTEM +THEN +UPDATE dev_info SET +DEV_TP_NAME=NEW.TAG_NAME, +DEV_TYPE=NEW.DEV_TYPE_ID, +SUB_SYSTEM = NEW.SUB_SYSTEM +WHERE DEV_TP_NAME=OLD.TAG_NAME ; +END IF; +*/ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_DEV_TEMP_DEF +BEFORE DELETE +ON dev_temp_def FOR EACH ROW +BEGIN + +/* +DELETE FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; +*/ +DELETE FROM accuml_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM analog_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM digital_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM mix_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +#套件的处理 +DELETE FROM temp_plugin_dev_map WHERE TEMP_NAME = OLD.TAG_NAME; +UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_DEV_TEMP_DEF` AFTER DELETE ON `dev_temp_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('dev_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_DEV_TEMP_GROUP +AFTER UPDATE +ON dev_temp_group FOR EACH ROW +BEGIN + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE dev_temp_def SET DEV_TEMP_GRP = NEW.TAG_NAME WHERE DEV_TEMP_GRP = OLD.TAG_NAME; + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_DEV_TEMP_GROUP +AFTER DELETE ON dev_temp_group +FOR EACH ROW +BEGIN + + DELETE FROM dev_temp_def WHERE DEV_TEMP_GRP = OLD.TAG_NAME; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_DIGITAL_CONTROL` AFTER INSERT ON `digital_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_DIGITAL_CONTROL +BEFORE UPDATE +ON digital_control FOR EACH ROW +body:BEGIN + + #修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + SET NEW.OFFSET_NO1 = '-1'; + SET NEW.OFFSET_NO2 = '-1'; + SET NEW.OFFSET_NO3 = '-1'; + SET NEW.OFFSET_NO4 = '-1'; + SET NEW.OFFSET_NO5 = '-1'; + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_DIGITAL_CONTROL` AFTER UPDATE ON `digital_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_DIGITAL_CONTROL` AFTER DELETE ON `digital_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_DIGITAL_MAP_TO_FES +AFTER INSERT +ON digital_map_to_fes FOR EACH ROW +BEGIN + SET @disableFesDigitalTrigger = 1; + + IF COALESCE(@disableDigitalMapToFesTrigger,0) = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value1' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); + END IF; + + IF COALESCE(NEW.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value2' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); + END IF; + + IF COALESCE(NEW.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value3' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); + END IF; + + IF COALESCE(NEW.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value4' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); + END IF; + + IF COALESCE(NEW.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value5' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); + END IF; + + END; + END IF; + END; + END IF; + SET @disableFesDigitalTrigger = 0; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_DIGITAL_MAP_TO_FES +BEFORE UPDATE +ON digital_map_to_fes FOR EACH ROW +body_label: BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO1 = OLD.DOT_NO1 AND + NEW.DOT_NO2 = OLD.DOT_NO2 AND + NEW.DOT_NO3 = OLD.DOT_NO3 AND + NEW.DOT_NO4 = OLD.DOT_NO4 AND + NEW.DOT_NO5 = OLD.DOT_NO5 AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN LEAVE body_label; + END IF; + + SET @disableFesDigitalTrigger = 1; + + IF COALESCE(@disableDigitalMapToFesTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); + END IF; + + IF COALESCE(OLD.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); + END IF; + + IF COALESCE(OLD.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); + END IF; + + IF COALESCE(OLD.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); + END IF; + + IF COALESCE(OLD.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value1' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); + END IF; + + IF COALESCE(NEW.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value2' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); + END IF; + + IF COALESCE(NEW.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value3' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); + END IF; + + IF COALESCE(NEW.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value4' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); + END IF; + + IF COALESCE(NEW.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value5' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); + END IF; + + END; + ELSE + BEGIN + SET NEW.DOT_NO1 = '-1'; + SET NEW.DOT_NO2 = '-1'; + SET NEW.DOT_NO3 = '-1'; + SET NEW.DOT_NO4 = '-1'; + SET NEW.DOT_NO5 = '-1'; + END; + END IF; + END; + END IF; + SET @disableFesDigitalTrigger = 0; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_DIGITAL_MAP_TO_FES` AFTER UPDATE ON `digital_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_DIGITAL_MAP_TO_FES +BEFORE DELETE +ON digital_map_to_fes FOR EACH ROW +BEGIN + SET @disableFesDigitalTrigger = 1; + + IF COALESCE(@disableDigitalMapToFesTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); + END IF; + + IF COALESCE(OLD.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); + END IF; + + IF COALESCE(OLD.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); + END IF; + + IF COALESCE(OLD.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); + END IF; + + IF COALESCE(OLD.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); + END IF; + + END; + END IF; + END; + END IF; + + SET @disableFesDigitalTrigger = 0; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_DIGITAL_MAP_TO_FES` AFTER DELETE ON `digital_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('digital_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_DIGITAL_TEMP_DEFINE +AFTER INSERT +ON digital_temp_define FOR EACH ROW +BEGIN + +/* +INSERT INTO digital( +TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, VALUE_NUM, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, VALUE1, STATUS1, LAST_CHANGE_TIME1, VALUE2, STATUS2, LAST_CHANGE_TIME2, VALUE3, STATUS3, LAST_CHANGE_TIME3, VALUE4, STATUS4, LAST_CHANGE_TIME4, VALUE5, STATUS5, LAST_CHANGE_TIME5, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, INPUT_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, IS_ALARM_FREQ, ALARM_FREQ, ALARM_FREQ_DESC, IS_ALARM_TIME, ALARM_TIME, ALARM_TIME_DESC, ALARM_FREQ_RANGE, INFER_NAME, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID ) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, "", NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,NEW.VALUE_NUM,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.INPUT_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.IS_ALARM_FREQ,NEW.ALARM_FREQ,NEW.ALARM_FREQ_DESC,NEW.IS_ALARM_TIME,NEW.ALARM_TIME,NEW.ALARM_TIME_DESC,NEW.ALARM_FREQ_RANGE,'', NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + INSERT INTO temp_plugin_point_map_dig + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME1, FES_TEMP_POINT_NAME2, FES_TEMP_POINT_NAME3, FES_TEMP_POINT_NAME4, FES_TEMP_POINT_NAME5, FES_TEMP_OUT_NAME1, FES_TEMP_OUT_NAME2, FES_TEMP_OUT_NAME3, FES_TEMP_OUT_NAME4, FES_TEMP_OUT_NAME5) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'', '', '', '', '', '', '', '', '', '', '' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_DIGITAL_TEMP_DEFINE +AFTER UPDATE +ON digital_temp_define FOR EACH ROW +BEGIN + /* + UPDATE digital SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, + VALUE_NUM = NEW.VALUE_NUM, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + INPUT_DELAY_TIME = NEW.INPUT_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + IS_SUMMARY = NEW.IS_SUMMARY, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + IS_ALARM_FREQ = NEW.IS_ALARM_FREQ, + ALARM_FREQ = NEW.ALARM_FREQ, + ALARM_FREQ_DESC = NEW.ALARM_FREQ_DESC, + IS_ALARM_TIME = NEW.IS_ALARM_TIME, + ALARM_TIME = NEW.ALARM_TIME, + ALARM_TIME_DESC = NEW.ALARM_TIME_DESC, + ALARM_FREQ_RANGE = NEW.ALARM_FREQ_RANGE, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE POINT_TP_NAME=OLD.TAG_NAME ; + UPDATE digital_control SET + CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + PULSE_DURATION = NEW.PULSE_DURATION, + OFFSET_NUM = NEW.OFFSET_NUM, + IS_CHECK_PREVENTION = NEW.IS_CHECK_PREVENTION, + CTRL_TYPE = NEW.CTRL_TYPE, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_dig + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_DIGITAL_TEMP_DEFINE +BEFORE DELETE +ON digital_temp_define FOR EACH ROW +BEGIN + DELETE FROM temp_plugin_point_map_dig WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* +DELETE FROM digital WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_DIGITAL_TEMP_DEFINE` AFTER DELETE ON `digital_temp_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FAULT_RECALL_COND_DEF` AFTER INSERT ON `fault_recall_cond_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fault_recall_cond_def', 'location_id,trigger_tag_name', '', concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FAULT_RECALL_COND_DEF` AFTER UPDATE ON `fault_recall_cond_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FAULT_RECALL_COND_DEF` AFTER DELETE ON `fault_recall_cond_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), '', getTableSubSystem('fault_recall_cond_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_FES_ACCUML` AFTER INSERT ON `fes_accuml` FOR EACH ROW BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableAccumlMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesAccumlTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE accuml_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + + END; + END IF; + + SET @disableAccumlMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_accuml', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_accuml')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_ACCUML +BEFORE UPDATE +ON fes_accuml FOR EACH ROW +body:BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN LEAVE body; + END IF; + + SET @disableAccumlMapToFesTrigger = 1; + + IF COALESCE(@disableFesAccumlTrigger,0) = 0 THEN + BEGIN + #删除旧关联 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE accuml_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + #建立新关联 + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE accuml_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + END; + END IF; + + SET @disableAccumlMapToFesTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_ACCUML` AFTER UPDATE ON `fes_accuml` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_accuml', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_accuml')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_ACCUML +AFTER DELETE +ON fes_accuml FOR EACH ROW +BEGIN + SET @disableAccumlMapToFesTrigger = 1; + + IF COALESCE(@disableFesAccumlTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE accuml_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET @disableAccumlMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_accuml', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_accuml')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_FES_ANALOG` AFTER INSERT ON `fes_analog` FOR EACH ROW BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableAnalogMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesAnalogTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE analog_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET @disableAnalogMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_ANALOG +BEFORE UPDATE +ON fes_analog FOR EACH ROW +body:BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN LEAVE body; + END IF; + + #首先禁止MAP_TO_FES触发器动作 + SET @disableAnalogMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesAnalogTrigger,0) = 0 THEN + BEGIN + + #不管是ana还是const都是放在analog_map_to_fes表 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE analog_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE analog_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET @disableAnalogMapToFesTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_ANALOG` AFTER UPDATE ON `fes_analog` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_ANALOG +AFTER DELETE +ON fes_analog FOR EACH ROW +BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableAnalogMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesAnalogTrigger,0) = 0 THEN + BEGIN + #不管是ana还是const都是放在analog_map_to_fes表 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE analog_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET @disableAnalogMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_ANALOG_CTRL` AFTER INSERT ON `fes_analog_ctrl` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_FES_ANALOG_CTRL` AFTER UPDATE ON `fes_analog_ctrl` FOR EACH ROW body:BEGIN + #更新关联了此点的遥控点 + + IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO + THEN + BEGIN + UPDATE analog_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_ANALOG_CTRL +AFTER DELETE +ON fes_analog_ctrl FOR EACH ROW +BEGIN + UPDATE analog_control SET + OFFSET_NO = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_CHANNEL_PARA +BEFORE INSERT ON FES_CHANNEL_PARA +FOR EACH ROW +BEGIN + + DECLARE locationTag varchar(64) DEFAULT ''; + DECLARE subsystemTag varchar(64) DEFAULT ''; + + + SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; + SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; + SET NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_CHANNEL_PARA` AFTER INSERT ON `fes_channel_para` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_channel_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_CHANNEL_PARA +BEFORE UPDATE +ON fes_channel_para FOR EACH ROW +body:BEGIN + + DECLARE locationTag varchar(64) DEFAULT ''; + DECLARE subsystemTag varchar(64) DEFAULT ''; + + IF NEW.CHAN_NAME <> OLD.CHAN_NAME THEN + BEGIN + SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; + SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; + SET NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); + END; + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_CHANNEL_PARA` AFTER UPDATE ON `fes_channel_para` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); +END IF; +IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.CHAN_NO <> OLD.CHAN_NO OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM THEN +BEGIN + UPDATE fes_rtu_para SET + TAG_NAME = concat(NEW.TAG_NAME,'.',RTU_NAME), + CHAN_TAG = NEW.TAG_NAME, + CHAN_NO = NEW.CHAN_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE CHAN_TAG = OLD.TAG_NAME; +END; +END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_CHANNEL_PARA` AFTER DELETE ON `fes_channel_para` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_channel_para')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_CONST +AFTER INSERT ON fes_const +FOR EACH ROW +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const', 'tag_name', '',NEW.TAG_NAME, getTableSubSystem('fes_const')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_CONST +AFTER UPDATE ON fes_const +FOR EACH ROW +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_const', 'tag_name', OLD.TAG_NAME,NEW.TAG_NAME, getTableSubSystem('fes_const')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_CONST +AFTER DELETE ON fes_const +FOR EACH ROW +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const', 'tag_name', OLD.TAG_NAME,'', getTableSubSystem('fes_const')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_CONST_TEMP +AFTER INSERT +ON fes_const_temp FOR EACH ROW +BEGIN + /* + INSERT INTO fes_const( + TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST'))), NEW.DESCRIPTION,NEW.GROUP_NO,fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST')),NEW.SEQ_NO,fes_rtu_para.SUB_SYSTEM,fes_rtu_para.LOCATION_ID,fes_dev_info.TAG_NAME,NEW.VALUE,NEW.VALUE_TYPE,NEW.UNIT_ID,NEW.VALUE_TEXT, NEW.VALUE_RATIO,NEW.VALUE_ADDED,NEW.VALUE_MAX,NEW.VALUE_MIN,NEW.VALUE_DEFAULT,NEW.VALUE_VERIFY,NEW.EX_INFO,NEW.TAG_NAME, NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_CONST_TEMP +AFTER UPDATE +ON fes_const_temp FOR EACH ROW +BEGIN + /* + UPDATE fes_const SET + DESCRIPTION = NEW.DESCRIPTION, + GROUP_NO = NEW.GROUP_NO, + SEQ_NO = NEW.SEQ_NO, + VALUE = NEW.VALUE, + VALUE_TYPE = NEW.VALUE_TYPE, + UNIT_ID = NEW.UNIT_ID, + VALUE_TEXT = NEW.VALUE_TEXT, + VALUE_RATIO = NEW.VALUE_RATIO, + VALUE_ADDED = NEW.VALUE_ADDED, + VALUE_MAX = NEW.VALUE_MAX, + VALUE_MIN = NEW.VALUE_MIN, + VALUE_DEFAULT = NEW.VALUE_DEFAULT, + VALUE_VERIFY = NEW.VALUE_VERIFY, + EX_INFO = NEW.EX_INFO, + FES_POINT_TP_NAME = NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_CONST_TEMP +AFTER DELETE +ON fes_const_temp FOR EACH ROW +BEGIN + /* + DELETE FROM fes_const WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_const_temp')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_DATA_BLOCK` AFTER INSERT ON `fes_data_block` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', '', concat(NEW.TAG_NAME,',', NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_DATA_BLOCK` AFTER UPDATE ON `fes_data_block` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,',', OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), concat(NEW.TAG_NAME,',',NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_DATA_BLOCK` AFTER DELETE ON `fes_data_block` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), '', getTableSubSystem('fes_data_block')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_DATA_BLOCK_TEMP +AFTER INSERT +ON fes_data_block_temp FOR EACH ROW +BEGIN + /* + INSERT INTO fes_data_block( + TAG_NAME, BLOCK_ID, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG) SELECT + concat(fes_dev_info.TAG_NAME,'.',getAfterLastDot(NEW.TAG_NAME)), NEW.BLOCK_ID,fes_rtu_para.RTU_NO,NEW.FUNC_CODE,NEW.STAR_ADDR,NEW.DATA_LEN, NEW.DATA_FARME_TYPE, NEW.REF_CYCLE, NEW.IS_CREATE_SOE, NEW.PARA_INT1, NEW.PARA_INT2, NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,NEW.LD, NEW.CALL_MODE, NEW.DATA_SET,NEW.DATA_SET_TYPE,NEW.DATA_SET_CALL_TIME,NEW.REPORT_CTRL,NEW.TAG_NAME, fes_dev_info.TAG_NAME + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_DATA_BLOCK_TEMP +AFTER UPDATE +ON fes_data_block_temp FOR EACH ROW +BEGIN + /* + UPDATE fes_data_block SET + TAG_NAME = concat(getBeforeLastDot(fes_data_block.TAG_NAME),'.',getAfterLastDot(NEW.TAG_NAME)), + BLOCK_ID = NEW.BLOCK_ID, + FUNC_CODE = NEW.FUNC_CODE, + STAR_ADDR = NEW.STAR_ADDR, + DATA_LEN = NEW.DATA_LEN, + DATA_FARME_TYPE = NEW.DATA_FARME_TYPE, + REF_CYCLE = NEW.REF_CYCLE, + IS_CREATE_SOE = NEW.IS_CREATE_SOE, + PARA_INT1 = NEW.PARA_INT1, + PARA_INT2 = NEW.PARA_INT2, + DESCRIPTION = NEW.DESCRIPTION, + LD = NEW.LD, + CALL_MODE = NEW.CALL_MODE, + DATA_SET = NEW.DATA_SET, + DATA_SET_TYPE = NEW.DATA_SET_TYPE, + DATA_SET_CALL_TIME = NEW.DATA_SET_CALL_TIME, + REPORT_CTRL = NEW.REPORT_CTRL, + FES_POINT_TP_NAME = NEW.TAG_NAME + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_DATA_BLOCK_TEMP +AFTER DELETE +ON fes_data_block_temp FOR EACH ROW +BEGIN + /* + DELETE FROM fes_data_block WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_data_block_temp')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIB_FES_DEV_INFO +BEFORE INSERT ON FES_DEV_INFO +FOR EACH ROW +BEGIN + + SET NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_DEV_INFO +AFTER INSERT +ON fes_dev_info FOR EACH ROW +BEGIN + + SET @incVarFesDev1 = 0; + SET @incVarFesDev2 = 0; + + IF COALESCE(NEW.DEV_TP_NAME,'') <> '' THEN + BEGIN + + #获取最大的点号时已经自动加1,这里减掉 + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ACC')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_accuml( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DOT_NO,RTU_TAG,DEV_TAG,SEQ_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,BASE,COEFF,RTU_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,@incVarFesDev2 := @incVarFesDev2 + 1, NEW.RTU_TAG,NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO,'', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ACC') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_analog( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DEV_TAG,SEQ_NO,RTU_TAG,RTU_NO,DOT_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,IS_FILTER,PERCENT,DEADBAND_TYPE,DEADBAND,ZEROBAND,BASE,COEFF,MAX_RANGE,MIN_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, fes_rtu_para.RTU_NO , @incVarFesDev2 := @incVarFesDev2 + 1, '', '', '', fes_dev_pt_temp_def.IS_FILTER, fes_dev_pt_temp_def.PERCENT, fes_dev_pt_temp_def.DEADBAND_TYPE, fes_dev_pt_temp_def.DEADBAND, fes_dev_pt_temp_def.ZEROBAND, fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_dev_pt_temp_def.MAX_RANGE, fes_dev_pt_temp_def.MIN_RANGE, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_digital( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DEV_TAG,SEQ_NO,RTU_TAG,DOT_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,FILTER_ERR,FILTER_DISTURB,DISTURB_TIME,REVERS,RTU_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,ATTR,ASS_DIG) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, @incVarFesDev2 := @incVarFesDev2 + 1, '', '', '', fes_dev_pt_temp_def.FILTER_ERR, fes_dev_pt_temp_def.FILTER_DISTURB, fes_dev_pt_temp_def.DISTURB_TIME, fes_dev_pt_temp_def.REVERS, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2,ATTR,ASS_DIG + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_mix( + TAG_NAME,DESCRIPTION,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,DOT_NO,DEV_TAG,SEQ_NO,APP_TABLE_NAME, APP_TAG_NAME,APP_COLUMN_NAME,BASE,COEFF,MAX_RANGE, MIN_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2 ) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_dev_pt_temp_def.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, @incVarFesDev2 := @incVarFesDev2 + 1, NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, '', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_dev_pt_temp_def.MAX_RANGE, fes_dev_pt_temp_def.MIN_RANGE, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA_CTRL')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_analog_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,BASE,COEFF,MAX_RANGE,MIN_RANGE,RTU_NO,DEV_TAG,DOT_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,SEQ_NO,RTU_TAG,DESCRIPTION,POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '32767', '-32768', fes_rtu_para.RTU_NO,NEW.TAG_NAME, @incVarFesDev2 := @incVarFesDev2 + 1,fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.SEQ_NO,NEW.RTU_TAG,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG_CTRL')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_digital_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,DOT_NO,DEV_TAG,DESCRIPTION,REVERS,POINT_TP_NAME,SEQ_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850,YK_EXE61850,YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,ATTR,CTRL_TYPE)SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, @incVarFesDev2 := @incVarFesDev2 + 1, NEW.TAG_NAME,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.REVERS, fes_dev_pt_temp_def.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2,ATTR,CTRL_TYPE + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX_CTRL')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_mix_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,BASE,DESCRIPTION,DOT_NO,COEFF,MIN_RANGE,MAX_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,SEQ_NO,POINT_TP_NAME,DEV_TAG,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.DESCRIPTION, @incVarFesDev2 := @incVarFesDev2 + 1,fes_dev_pt_temp_def.RATIO, '-32768', '32767', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.TAG_NAME,NEW.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_dev_pt_temp_def.SEQ_NO; + + + INSERT INTO fes_data_block( + TAG_NAME,BLOCK_ID,RTU_TAG,RTU_NO,FUNC_CODE,STAR_ADDR,DATA_LEN,DATA_FARME_TYPE,REF_CYCLE,IS_CREATE_SOE,PARA_INT1,PARA_INT2,DESCRIPTION,LOCATION_ID,SUB_SYSTEM,LD,CALL_MODE,DATA_SET,DATA_SET_TYPE,DATA_SET_CALL_TIME,REPORT_CTRL,FES_POINT_TP_NAME,DEV_TAG,PARA_INT3,PARA_INT4,PARA_STR1,PARA_STR2,IS_ENABLE) SELECT + concat(NEW.TAG_NAME,'.',getAfterLastDot(fes_data_block_temp.TAG_NAME)), fes_data_block_temp.BLOCK_ID,fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO,fes_data_block_temp.FUNC_CODE,fes_data_block_temp.STAR_ADDR,fes_data_block_temp.DATA_LEN, fes_data_block_temp.DATA_FARME_TYPE,fes_data_block_temp.REF_CYCLE,fes_data_block_temp.IS_CREATE_SOE,fes_data_block_temp.PARA_INT1, fes_data_block_temp.PARA_INT2, fes_data_block_temp.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,fes_data_block_temp.LD, fes_data_block_temp.CALL_MODE, fes_data_block_temp.DATA_SET, fes_data_block_temp.DATA_SET_TYPE,fes_data_block_temp.DATA_SET_CALL_TIME, fes_data_block_temp.REPORT_CTRL,fes_data_block_temp.TAG_NAME, NEW.TAG_NAME,fes_data_block_temp.PARA_INT3,fes_data_block_temp.PARA_INT4,fes_data_block_temp.PARA_STR1,fes_data_block_temp.PARA_STR2,IS_ENABLE + FROM fes_data_block_temp, fes_rtu_para WHERE fes_data_block_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_data_block_temp.BLOCK_ID; + + SET @incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_CONST')) - 1; + SET @incVarFesDev2 = @incVarFesDev1; + + INSERT INTO fes_const( + TAG_NAME,DESCRIPTION,GROUP_NO,RTU_TAG,RTU_NO,DOT_NO,SEQ_NO,SUB_SYSTEM,LOCATION_ID,DEV_TAG,VALUE,VALUE_TYPE,UNIT_ID,VALUE_TEXT,VALUE_RATIO,VALUE_ADDED,VALUE_MAX,VALUE_MIN,VALUE_DEFAULT,VALUE_VERIFY,EX_INFO,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,DZ_SEQ) SELECT + concat(NEW.RTU_TAG, '.' , @incVarFesDev1 := @incVarFesDev1 + 1), fes_const_temp.DESCRIPTION,fes_const_temp.GROUP_NO,NEW.RTU_TAG,fes_rtu_para.RTU_NO,@incVarFesDev2 := @incVarFesDev2 + 1,fes_const_temp.SEQ_NO,NEW.SUB_SYSTEM,NEW.LOCATION_ID,NEW.TAG_NAME,fes_const_temp.VALUE,fes_const_temp.VALUE_TYPE,fes_const_temp.UNIT_ID,fes_const_temp.VALUE_TEXT, fes_const_temp.VALUE_RATIO,fes_const_temp.VALUE_ADDED,fes_const_temp.VALUE_MAX,fes_const_temp.VALUE_MIN,fes_const_temp.VALUE_DEFAULT,fes_const_temp.VALUE_VERIFY,fes_const_temp.EX_INFO,fes_const_temp.TAG_NAME,PATH61850, POSITION61850,fes_const_temp.RES_PARA_INT1,fes_const_temp.RES_PARA_INT2,fes_const_temp.RES_PARA_INT3,fes_const_temp.RES_PARA_INT4,fes_const_temp.RES_PARA_INT5,fes_const_temp.RES_PARA_INT6,fes_const_temp.RES_PARA_INT7,fes_const_temp.RES_PARA_INT8,fes_const_temp.RES_PARA_STR1,fes_const_temp.RES_PARA_STR2,DZ_SEQ + FROM fes_const_temp, fes_rtu_para WHERE fes_const_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_const_temp.SEQ_NO; + + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUB_FES_DEV_INFO +BEFORE UPDATE ON FES_DEV_INFO +FOR EACH ROW +BEGIN + + IF NEW.DEV_NAME <> OLD.DEV_NAME THEN + SET NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_DEV_INFO +AFTER UPDATE +ON fes_dev_info FOR EACH ROW +BEGIN + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM + OR NEW.RTU_NO <> OLD.RTU_NO + THEN + BEGIN + + UPDATE fes_accuml INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_accuml.DEV_TAG = OLD.TAG_NAME SET + fes_accuml.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_accuml.DOT_NO), + fes_accuml.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_accuml.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_accuml.RTU_TAG = NEW.RTU_TAG, + fes_accuml.DEV_TAG = NEW.TAG_NAME, + fes_accuml.RTU_NO = fes_rtu_para.RTU_NO; + + + UPDATE fes_analog INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog.DEV_TAG = OLD.TAG_NAME SET + fes_analog.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog.DOT_NO), + fes_analog.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_analog.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_analog.RTU_TAG = NEW.RTU_TAG, + fes_analog.DEV_TAG = NEW.TAG_NAME, + fes_analog.RTU_NO = fes_rtu_para.RTU_NO; + + + UPDATE fes_digital INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital.DEV_TAG = OLD.TAG_NAME SET + fes_digital.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital.DOT_NO ), + fes_digital.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_digital.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_digital.RTU_TAG = NEW.RTU_TAG, + fes_digital.DEV_TAG = NEW.TAG_NAME, + fes_digital.RTU_NO = fes_rtu_para.RTU_NO; + + + UPDATE fes_mix INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix.DEV_TAG = OLD.TAG_NAME SET + fes_mix.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix.DOT_NO), + fes_mix.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_mix.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_mix.RTU_TAG = NEW.RTU_TAG, + fes_mix.DEV_TAG = NEW.TAG_NAME, + fes_mix.RTU_NO = fes_rtu_para.RTU_NO; + + + UPDATE fes_analog_ctrl INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog_ctrl.DEV_TAG = OLD.TAG_NAME SET + fes_analog_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog_ctrl.DOT_NO), + fes_analog_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_analog_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_analog_ctrl.RTU_TAG = NEW.RTU_TAG, + fes_analog_ctrl.DEV_TAG = NEW.TAG_NAME, + fes_analog_ctrl.RTU_NO = fes_rtu_para.RTU_NO; + + + UPDATE fes_digital_ctrl INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital_ctrl.DEV_TAG = OLD.TAG_NAME SET + fes_digital_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital_ctrl.DOT_NO), + fes_digital_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_digital_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_digital_ctrl.RTU_TAG = NEW.RTU_TAG, + fes_digital_ctrl.DEV_TAG = NEW.TAG_NAME, + fes_digital_ctrl.RTU_NO = fes_rtu_para.RTU_NO; + + + UPDATE fes_mix_ctrl INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix_ctrl.DEV_TAG = OLD.TAG_NAME SET + fes_mix_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix_ctrl.DOT_NO), + fes_mix_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, + fes_mix_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, + fes_mix_ctrl.RTU_TAG = NEW.RTU_TAG, + fes_mix_ctrl.DEV_TAG = NEW.TAG_NAME, + fes_mix_ctrl.RTU_NO = fes_rtu_para.RTU_NO; + + UPDATE fes_data_block INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_data_block.DEV_TAG = OLD.TAG_NAME + SET + fes_data_block.LOCATION_ID = NEW.LOCATION_ID, + fes_data_block.SUB_SYSTEM = NEW.SUB_SYSTEM, + fes_data_block.DEV_TAG = NEW.TAG_NAME, + fes_data_block.RTU_TAG = NEW.RTU_TAG, + fes_data_block.TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(fes_data_block.TAG_NAME)), + fes_data_block.RTU_NO = fes_rtu_para.RTU_NO; + + UPDATE fes_const INNER JOIN fes_rtu_para + ON fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_const.DEV_TAG = OLD.TAG_NAME + SET + fes_const.LOCATION_ID = NEW.LOCATION_ID, + fes_const.SUB_SYSTEM = NEW.SUB_SYSTEM, + fes_const.DEV_TAG = NEW.TAG_NAME, + fes_const.RTU_TAG = NEW.RTU_TAG, + fes_const.RTU_NO = fes_rtu_para.RTU_NO, + fes_const.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_const.DOT_NO); + + + END; + END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_DEV_INFO +BEFORE DELETE +ON fes_dev_info FOR EACH ROW +BEGIN +DELETE FROM fes_accuml WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_analog WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_digital WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_mix WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_analog_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_digital_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_mix_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_data_block WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_const WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_DEV_INFO` AFTER DELETE ON `fes_dev_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_DEV_PT_TEMP_DEF +AFTER INSERT +ON fes_dev_pt_temp_def FOR EACH ROW +body:BEGIN + + /* + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + INSERT INTO fes_accuml( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC')), fes_dev_info.RTU_TAG,fes_dev_info.TAG_NAME,NEW.SEQ_NO,'', '', '', '0', '1', fes_rtu_para.RTU_NO ,NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION ,NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + INSERT INTO fes_analog( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850, POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA')),'', '', '', 0, 0, '0', '0', '0', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + INSERT INTO fes_digital( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG')), '', '', '', 0, 0, 0, 0, fes_rtu_para.RTU_NO , NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + INSERT INTO fes_mix( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX'))), NEW.DESCRIPTION ,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX')), fes_dev_info.TAG_NAME, NEW.SEQ_NO, '', '', '', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + INSERT INTO fes_analog_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MAX_RANGE, MIN_RANGE, POINT_TP_NAME,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, '0', '1', 65536, 0, NEW.TAG_NAME ,NEW.RES_PARA_INT1,NEW.RES_PARA_INT2,NEW.RES_PARA_INT3,NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + INSERT INTO fes_digital_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, REVERS, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850, POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, 0, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850,NEW.YK_SELECT61850, NEW.YK_EXE61850, NEW.YK_CANCLE61850, NEW.YK_DOUBLE_SELECT61850, NEW.YK_DOUBLE_EXE61850, NEW.YK_DOUBLE_CANCLE61850, NEW.PULSE_TIME + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + INSERT INTO fes_mix_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MIN_RANGE, MAX_RANGE, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4,PATH61850,POSITION61850)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO,'0', '1', 0, 65536, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + */ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_pt_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_DEV_PT_TEMP_DEF +AFTER UPDATE +ON fes_dev_pt_temp_def FOR EACH ROW +BEGIN + + /* + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + UPDATE fes_accuml SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + UPDATE fes_analog SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + UPDATE fes_digital SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + UPDATE fes_mix SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + UPDATE fes_analog_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + UPDATE fes_digital_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850, + YK_SELECT61850 = NEW.YK_SELECT61850, + YK_EXE61850 = NEW.YK_EXE61850, + YK_CANCLE61850 = NEW.YK_CANCLE61850, + YK_DOUBLE_SELECT61850 = NEW.YK_DOUBLE_SELECT61850, + YK_DOUBLE_EXE61850 = NEW.YK_DOUBLE_EXE61850, + YK_DOUBLE_CANCLE61850 = NEW.YK_DOUBLE_CANCLE61850, + PULSE_TIME = NEW.PULSE_TIME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + UPDATE fes_mix_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + #更新套件内容 + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + UPDATE temp_plugin_point_map_acc SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + UPDATE temp_plugin_point_map_ana SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + UPDATE temp_plugin_point_map_mix SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + UPDATE temp_plugin_point_map_dig SET + FES_TEMP_POINT_NAME1 = IF(FES_TEMP_POINT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME1), + FES_TEMP_POINT_NAME2 = IF(FES_TEMP_POINT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME2), + FES_TEMP_POINT_NAME3 = IF(FES_TEMP_POINT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME3), + FES_TEMP_POINT_NAME4 = IF(FES_TEMP_POINT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME4), + FES_TEMP_POINT_NAME5 = IF(FES_TEMP_POINT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME5) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + UPDATE temp_plugin_point_map_ana SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + UPDATE temp_plugin_point_map_mix SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + UPDATE temp_plugin_point_map_dig SET + FES_TEMP_OUT_NAME1 = IF(FES_TEMP_OUT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME1), + FES_TEMP_OUT_NAME2 = IF(FES_TEMP_OUT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME2), + FES_TEMP_OUT_NAME3 = IF(FES_TEMP_OUT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME3), + FES_TEMP_OUT_NAME4 = IF(FES_TEMP_OUT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME4), + FES_TEMP_OUT_NAME5 = IF(FES_TEMP_OUT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME5) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; + END IF; + END; + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_DEV_PT_TEMP_DEF +BEFORE DELETE +ON fes_dev_pt_temp_def FOR EACH ROW +BEGIN + + /* + IF OLD.POINT_TYPE = getFesPointType('FES_ACC') THEN + DELETE FROM fes_accuml WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF OLD.POINT_TYPE = getFesPointType('FES_ANA') THEN + DELETE FROM fes_analog WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF OLD.POINT_TYPE = getFesPointType('FES_DIG') THEN + DELETE FROM fes_digital WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_MIX') THEN + DELETE FROM fes_mix WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + DELETE FROM fes_analog_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + DELETE FROM fes_digital_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + DELETE FROM fes_mix_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_DEV_PT_TEMP_DEF` AFTER DELETE ON `fes_dev_pt_temp_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_DEV_TEMP_DEF` AFTER INSERT ON `fes_dev_temp_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_DEV_TEMP_DEF +AFTER UPDATE +ON fes_dev_temp_def FOR EACH ROW +BEGIN + + UPDATE fes_dev_pt_temp_def SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + UPDATE fes_const_temp SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + UPDATE fes_data_block_temp SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + /* + UPDATE fes_dev_info SET + DEV_TP_NAME = NEW.TAG_NAME, + DEV_TYPE_ID = NEW.DEV_TYPE_ID + WHERE DEV_TP_NAME = OLD.TAG_NAME; + */ + + #更新套件 + IF OLD.TAG_NAME != NEW.TAG_NAME THEN + BEGIN + UPDATE temp_plugin_fes_dev_map SET FES_TEMP_NAME = NEW.TAG_NAME WHERE FES_TEMP_NAME = OLD.TAG_NAME; + END; + END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_DEV_TEMP_DEF +BEFORE DELETE +ON fes_dev_temp_def FOR EACH ROW +BEGIN + + DELETE FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = OLD.TAG_NAME; + DELETE FROM fes_const_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; + DELETE FROM fes_data_block_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; + #套件的处理 + DELETE FROM temp_plugin_fes_dev_map WHERE FES_TEMP_NAME = OLD.TAG_NAME; + /* + DELETE FROM fes_dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; + */ + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_DEV_TEMP_DEF` AFTER DELETE ON `fes_dev_temp_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_temp_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_DEV_TYPE_DEF` AFTER INSERT ON `fes_dev_type_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_type_def', 'dev_type_id', '', NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_FES_DEV_TYPE_DEF` BEFORE UPDATE ON `fes_dev_type_def` FOR EACH ROW body:BEGIN + IF NEW.DEV_TYPE_ID <> OLD.DEV_TYPE_ID THEN + BEGIN + UPDATE fes_dev_temp_def SET + DEV_TYPE_ID = NEW.DEV_TYPE_ID + WHERE DEV_TYPE_ID = OLD.DEV_TYPE_ID; + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_DEV_TYPE_DEF` AFTER UPDATE ON `fes_dev_type_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_DEV_TYPE_DEF` AFTER DELETE ON `fes_dev_type_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, '', getTableSubSystem('fes_dev_type_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_FES_DIGITAL` AFTER INSERT ON `fes_digital` FOR EACH ROW BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableDigitalMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesDigitalTrigger,0) = 0 THEN + BEGIN + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO1 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO2 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO3 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO4 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO5 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET @disableDigitalMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_DIGITAL +BEFORE UPDATE +ON fes_digital FOR EACH ROW +body:BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN LEAVE body; + END IF; + + #首先禁止MAP_TO_FES触发器动作 + SET @disableDigitalMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesDigitalTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN + UPDATE digital_map_to_fes SET + DOT_NO1 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN + UPDATE digital_map_to_fes SET + DOT_NO2 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN + UPDATE digital_map_to_fes SET + DOT_NO3 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN + UPDATE digital_map_to_fes SET + DOT_NO4 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN + UPDATE digital_map_to_fes SET + DOT_NO5 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO1 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO2 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO3 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO4 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO5 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET @disableDigitalMapToFesTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_DIGITAL` AFTER UPDATE ON `fes_digital` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_DIGITAL +AFTER DELETE +ON fes_digital FOR EACH ROW +BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableDigitalMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesDigitalTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN + UPDATE digital_map_to_fes SET + DOT_NO1 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN + UPDATE digital_map_to_fes SET + DOT_NO2 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN + UPDATE digital_map_to_fes SET + DOT_NO3 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN + UPDATE digital_map_to_fes SET + DOT_NO4 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN + UPDATE digital_map_to_fes SET + DOT_NO5 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET @disableDigitalMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_DIGITAL_CTRL` AFTER INSERT ON `fes_digital_ctrl` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_FES_DIGITAL_CTRL` AFTER UPDATE ON `fes_digital_ctrl` FOR EACH ROW body:BEGIN + #更新关联了此点的遥控点 + + IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO + THEN + BEGIN + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO1 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO2 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO3 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO4 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO5 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); + + END; + END IF; + + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_DIGITAL_CTRL +AFTER DELETE +ON fes_digital_ctrl FOR EACH ROW +BEGIN + UPDATE digital_control SET + OFFSET_NO1 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO2 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO3 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO4 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO5 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_FES_MIX` AFTER INSERT ON `fes_mix` FOR EACH ROW BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableMixMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesMixTrigger,0) = 0 THEN + BEGIN + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE mix_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET @disableMixMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_MIX +BEFORE UPDATE +ON fes_mix FOR EACH ROW +body:BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN LEAVE body; + END IF; + + #首先禁止MAP_TO_FES触发器动作 + SET @disableMixMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesMixTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE mix_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE mix_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET @disableMixMapToFesTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_MIX` AFTER UPDATE ON `fes_mix` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_MIX +AFTER DELETE +ON fes_mix FOR EACH ROW +BEGIN + #首先禁止MAP_TO_FES触发器动作 + SET @disableMixMapToFesTrigger = 1; + #然后询问自己是否已经被禁止 + IF COALESCE(@disableFesMixTrigger,0) = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE mix_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET @disableMixMapToFesTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_MIX_CTRL` AFTER INSERT ON `fes_mix_ctrl` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_FES_MIX_CTRL` AFTER UPDATE ON `fes_mix_ctrl` FOR EACH ROW body:BEGIN + #更新关联了此点的遥控点 + + IF NEW.RTU_TAG = OLD.RTU_TAG AND NEW.DOT_NO= OLD.DOT_NO + THEN + BEGIN + UPDATE mix_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_MIX_CTRL +AFTER DELETE +ON fes_mix_ctrl FOR EACH ROW +BEGIN + UPDATE mix_control SET + OFFSET_NO = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix_ctrl')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_FES_PROTOCOL` AFTER INSERT ON `fes_protocol` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_protocol', 'protocol_id', '', NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_FES_PROTOCOL` BEFORE UPDATE ON `fes_protocol` FOR EACH ROW body:BEGIN + IF NEW.PROTOCOL_ID <> OLD.PROTOCOL_ID THEN + BEGIN + UPDATE fes_channel_para SET + PROTO_TYPE = NEW.PROTOCOL_ID + WHERE PROTO_TYPE = OLD.PROTOCOL_ID; + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_FES_PROTOCOL` AFTER UPDATE ON `fes_protocol` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_PROTOCOL` AFTER DELETE ON `fes_protocol` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, '', getTableSubSystem('fes_protocol')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIB_FES_RTU_PARA +BEFORE INSERT +ON fes_rtu_para FOR EACH ROW +BEGIN + + DECLARE chNo decimal(10,0) DEFAULT 0; + + SET NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); + + SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; + + SET NEW.CHAN_NO = chNo; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_FES_RTU_PARA +AFTER INSERT +ON fes_rtu_para FOR EACH ROW +BEGIN + /* + * 不再产生默认设备 +INSERT INTO fes_dev_info +(TAG_NAME, DEV_NAME, LOCATION_ID, SUB_SYSTEM, DEV_ID, DEV_TYPE_ID, RTU_TAG, DEV_DESC, RTU_NO, DEV_TP_NAME) VALUES +(concat(NEW.TAG_NAME, '.', 'defaultDev' ),'defaultDev',NEW.LOCATION_ID,NEW.SUB_SYSTEM,'-1', '-1' ,NEW.TAG_NAME,'默认设备',NEW.RTU_NO ,'' ); +*/ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_rtu_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUB_FES_RTU_PARA +BEFORE UPDATE +ON fes_rtu_para FOR EACH ROW +BEGIN + + DECLARE chNo decimal(10,0) DEFAULT 0; + + IF NEW.RTU_NAME <> OLD.RTU_NAME OR NEW.CHAN_TAG <> OLD.CHAN_TAG THEN + SET NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); + END IF; + + IF NEW.CHAN_TAG <> OLD.CHAN_TAG THEN + BEGIN + SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; + SET NEW.CHAN_NO = chNo; + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_FES_RTU_PARA +AFTER UPDATE +ON fes_rtu_para FOR EACH ROW +BEGIN + +IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_NO <> OLD.RTU_NO OR NEW.DESCRIPTION <> OLD.DESCRIPTION +THEN +BEGIN + + + UPDATE fes_dev_info SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)) , + DEV_DESC = DEV_DESC, + RTU_TAG = NEW.TAG_NAME, + RTU_NO = NEW.RTU_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE fes_data_block SET + RTU_NO = NEW.RTU_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE RTU_NO = OLD.RTU_NO; + + IF NEW.RTU_NO <> OLD.RTU_NO THEN + BEGIN + UPDATE dev_group SET + RTU_NO = NEW.RTU_NO + WHERE RTU_NO = OLD.RTU_NO; + END; + END IF; + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + #更新关联的后台测点 + UPDATE accuml SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE analog SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE digital SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE mix SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + + END; + END IF; + +END; +END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_FES_RTU_PARA +BEFORE DELETE +ON fes_rtu_para FOR EACH ROW +BEGIN +DELETE FROM fes_dev_info WHERE RTU_TAG = OLD.TAG_NAME; +DELETE FROM fes_data_block WHERE RTU_NO = OLD.RTU_NO; +#更新关联的后台测点 +UPDATE accuml SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE analog SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE digital SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE mix SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_FES_RTU_PARA` AFTER DELETE ON `fes_rtu_para` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_rtu_para')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_LINKAGE_ACTION` BEFORE INSERT ON `linkage_action` FOR EACH ROW body:BEGIN + #仅仅修改时标 + + SET NEW.TIMEFLAG = unix_timestamp(now()); + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_LINKAGE_ACTION` AFTER INSERT ON `linkage_action` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_action', 'name', '', NEW.NAME, getTableSubSystem('linkage_action')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_LINKAGE_ACTION` BEFORE UPDATE ON `linkage_action` FOR EACH ROW body:BEGIN + #修改对应功能 + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE linkage_function SET + TIMEFLAG = NEW.TIMEFLAG, + ACTION_NAME = NEW.NAME + WHERE ACTION_NAME = OLD.NAME; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_LINKAGE_ACTION` AFTER UPDATE ON `linkage_action` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_action')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_LINKAGE_ACTION` AFTER DELETE ON `linkage_action` FOR EACH ROW body:BEGIN + #删除关联了此动作的功能 + DELETE FROM linkage_function WHERE ACTION_NAME = OLD.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_action', 'name', OLD.NAME, '', getTableSubSystem('linkage_action')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_LINKAGE_DEFINE` BEFORE INSERT ON `linkage_define` FOR EACH ROW body:BEGIN + #仅仅修改时标 + #避免触发器循环 + SET @disableLinkageSettingTrigger = 1; + + IF COALESCE(@disableLinkageDefineTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE linkage_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = NEW.LINKAGE_NAME; + END; + END IF; + + SET @disableLinkageSettingTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_LINKAGE_DEFINE` AFTER INSERT ON `linkage_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_define', 'linkage_name,func_name', '', concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_LINKAGE_DEFINE` BEFORE UPDATE ON `linkage_define` FOR EACH ROW body:BEGIN + #修改对应联动功能关系表 + #避免触发器循环 + SET @disableLinkageSettingTrigger = 1; + + IF COALESCE(@disableLinkageDefineTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE linkage_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = OLD.LINKAGE_NAME; + END; + END IF; + + SET @disableLinkageSettingTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_LINKAGE_DEFINE` AFTER UPDATE ON `linkage_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_LINKAGE_DEFINE` AFTER DELETE ON `linkage_define` FOR EACH ROW body:BEGIN + #仅仅修改时标 + #避免触发器循环 + SET @disableLinkageSettingTrigger = 1; + + IF COALESCE(@disableLinkageDefineTrigger,0) = 0 THEN + BEGIN + UPDATE linkage_setting SET + TIMEFLAG = unix_timestamp(now()) + WHERE NAME = OLD.LINKAGE_NAME; + END; + END IF; + + SET @disableLinkageSettingTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('linkage_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_LINKAGE_FUNCTION` BEFORE INSERT ON `linkage_function` FOR EACH ROW body:BEGIN + #仅仅修改时标 + SET NEW.TIMEFLAG = unix_timestamp(now()); + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_LINKAGE_FUNCTION` AFTER INSERT ON `linkage_function` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_LINKAGE_FUNCTION` BEFORE UPDATE ON `linkage_function` FOR EACH ROW body:BEGIN + #修改对应联动功能关系表 + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE linkage_define SET + TIMEFLAG = NEW.TIMEFLAG, + FUNC_NAME = NEW.NAME + WHERE FUNC_NAME = OLD.NAME; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_LINKAGE_FUNCTION` AFTER UPDATE ON `linkage_function` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_LINKAGE_FUNCTION` AFTER DELETE ON `linkage_function` FOR EACH ROW body:BEGIN + #删除关联了此功能的联动定义 + #检查功能是否被删除 + IF NOT EXISTS (SELECT * FROM linkage_function WHERE NAME = OLD.NAME) THEN + BEGIN + DELETE FROM linkage_define WHERE FUNC_NAME = OLD.NAME; + END; + ELSE + BEGIN + #修改时标 + UPDATE linkage_define SET + TIMEFLAG = unix_timestamp(now()) + WHERE FUNC_NAME = OLD.NAME; + END; + END IF; + + + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('linkage_function')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_LINKAGE_SETTING` BEFORE INSERT ON `linkage_setting` FOR EACH ROW body:BEGIN + #仅仅修改时标 + #避免触发器循环 + SET @disableLinkageDefineTrigger = 1; + + IF COALESCE(@disableLinkageSettingTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + END; + END IF; + + SET @disableLinkageDefineTrigger = 0; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_LINKAGE_SETTING` AFTER INSERT ON `linkage_setting` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_setting', 'name', '', NEW.NAME, getTableSubSystem('linkage_setting')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_LINKAGE_SETTING` BEFORE UPDATE ON `linkage_setting` FOR EACH ROW body:BEGIN + #修改对应联动功能关系表 + #避免触发器循环 + SET @disableLinkageDefineTrigger = 1; + + IF COALESCE(@disableLinkageSettingTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + IF NEW.NAME<>OLD.NAME THEN + UPDATE linkage_define SET + LINKAGE_NAME = NEW.NAME + WHERE LINKAGE_NAME = OLD.NAME; + END IF; + END; + END IF; + + SET @disableLinkageDefineTrigger = 0; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_LINKAGE_SETTING` AFTER UPDATE ON `linkage_setting` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_setting')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_LINKAGE_SETTING` AFTER DELETE ON `linkage_setting` FOR EACH ROW body:BEGIN + #删除关联了此联动的功能关联 + #避免触发器循环 + SET @disableLinkageDefineTrigger = 1; + + IF COALESCE(@disableLinkageSettingTrigger,0) = 0 THEN + BEGIN + DELETE FROM linkage_define WHERE LINKAGE_NAME = OLD.NAME; + END; + END IF; + + SET @disableLinkageDefineTrigger = 0; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_setting', 'name', OLD.NAME, '', getTableSubSystem('linkage_setting')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_MIX_CONTROL` AFTER INSERT ON `mix_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_MIX_CONTROL +BEFORE UPDATE +ON mix_control FOR EACH ROW +body:BEGIN + + #修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + SET NEW.OFFSET_NO = '-1'; + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_MIX_CONTROL` AFTER UPDATE ON `mix_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_MIX_CONTROL` AFTER DELETE ON `mix_control` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_control')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_MIX_MAP_TO_FES +AFTER INSERT +ON mix_map_to_fes FOR EACH ROW +BEGIN + + SET @disableFesMixTrigger = 1; + + IF COALESCE(@disableMixMapToFesTrigger,0) = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + SET @disableFesMixTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_MIX_MAP_TO_FES +BEFORE UPDATE +ON mix_map_to_fes FOR EACH ROW +body_label:BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN LEAVE body_label; + END IF; + + + SET @disableFesMixTrigger = 1; + + IF COALESCE(@disableMixMapToFesTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE SET NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET @disableFesMixTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_MIX_MAP_TO_FES` AFTER UPDATE ON `mix_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_MIX_MAP_TO_FES +BEFORE DELETE +ON mix_map_to_fes FOR EACH ROW +BEGIN + + SET @disableFesMixTrigger = 1; + + IF COALESCE(@disableMixMapToFesTrigger,0) = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET @disableFesMixTrigger = 0; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_MIX_MAP_TO_FES` AFTER DELETE ON `mix_map_to_fes` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('mix_map_to_fes')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TI_MIX_TEMP_DEFINE +AFTER INSERT +ON mix_temp_define FOR EACH ROW +BEGIN + /* + INSERT INTO mix( + TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, METHOD, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID) SELECT + concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, '0', '0', '', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,'', '' + FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + + INSERT INTO temp_plugin_point_map_mix + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TU_MIX_TEMP_DEFINE +AFTER UPDATE +ON mix_temp_define FOR EACH ROW +BEGIN + /* + UPDATE mix SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE POINT_TP_NAME=OLD.TAG_NAME; + + UPDATE mix_control SET + CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, + CTRL_TYPE = NEW.CTRL_TYPE, + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + + UPDATE mix_map_to_fes SET + POINT_TP_NAME = NEW.TAG_NAME, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + IS_FILTER_ERROR = NEW.IS_FILTER_ERROR, + IS_FILTER_DISTURB = NEW.IS_FILTER_DISTURB, + DISTURB_TIME = NEW.DISTURB_TIME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_mix + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TD_MIX_TEMP_DEFINE +BEFORE DELETE +ON mix_temp_define FOR EACH ROW +BEGIN + DELETE FROM temp_plugin_point_map_mix WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + /* + DELETE FROM mix WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_MIX_TEMP_DEFINE` AFTER DELETE ON `mix_temp_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_temp_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_OPC_CONFIG_DEFINE` AFTER INSERT ON `opc_config_define` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('opc_config_define')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_OPC_CONFIG_DEFINE` AFTER UPDATE ON `opc_config_define` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('opc_config_define')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_OPC_CONFIG_DEFINE` AFTER DELETE ON `opc_config_define` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('opc_config_define')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_OPC_CONFIG_VERSION` AFTER INSERT ON `opc_config_version` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_version', 'domain_id,sub_system', '', concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_OPC_CONFIG_VERSION` AFTER UPDATE ON `opc_config_version` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_OPC_CONFIG_VERSION` AFTER DELETE ON `opc_config_version` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), '', getTableSubSystem('opc_config_version')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_AREA_INFO` AFTER INSERT ON `pa_area_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_area_info', 'id', '', NEW.ID, getTableSubSystem('pa_area_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_AREA_INFO` AFTER UPDATE ON `pa_area_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_area_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_AREA_INFO` AFTER DELETE ON `pa_area_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_area_info', 'id', OLD.ID, '', getTableSubSystem('pa_area_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_AUDIO_INFO` AFTER INSERT ON `pa_audio_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_audio_info', 'id', '', NEW.ID, getTableSubSystem('pa_audio_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_AUDIO_INFO` AFTER UPDATE ON `pa_audio_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_audio_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_audio_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_AUDIO_INFO` AFTER DELETE ON `pa_audio_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_audio_info', 'id', OLD.ID, '', getTableSubSystem('pa_audio_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_BROADCAST_GROUP` AFTER INSERT ON `pa_broadcast_group` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_broadcast_group', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_BROADCAST_GROUP` AFTER UPDATE ON `pa_broadcast_group` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_BROADCAST_GROUP` AFTER DELETE ON `pa_broadcast_group` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_broadcast_group')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_CTRL_PARAM` AFTER INSERT ON `pa_ctrl_param` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_CTRL_PARAM` AFTER UPDATE ON `pa_ctrl_param` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_CTRL_PARAM` AFTER DELETE ON `pa_ctrl_param` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_ctrl_param')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_LOCATION_AREA_DEF` AFTER INSERT ON `pa_location_area_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_LOCATION_AREA_DEF` AFTER UPDATE ON `pa_location_area_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_LOCATION_AREA_DEF` AFTER DELETE ON `pa_location_area_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pa_location_area_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_LOCATION_SEQ_DEF` AFTER INSERT ON `pa_location_seq_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_seq_def', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_LOCATION_SEQ_DEF` AFTER UPDATE ON `pa_location_seq_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_LOCATION_SEQ_DEF` AFTER DELETE ON `pa_location_seq_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_location_seq_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_OPERATOR_DEF` AFTER INSERT ON `pa_operator_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_def', 'id', '', NEW.ID, getTableSubSystem('pa_operator_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_OPERATOR_DEF` AFTER UPDATE ON `pa_operator_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_def', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_operator_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_OPERATOR_DEF` AFTER DELETE ON `pa_operator_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_def', 'id', OLD.ID, '', getTableSubSystem('pa_operator_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_OPERATOR_MAP` AFTER INSERT ON `pa_operator_map` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_map', 'user_grp_id', '', NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_OPERATOR_MAP` AFTER UPDATE ON `pa_operator_map` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_OPERATOR_MAP` AFTER DELETE ON `pa_operator_map` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, '', getTableSubSystem('pa_operator_map')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PA_TIMED_AUDIO` AFTER INSERT ON `pa_timed_audio` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_timed_audio', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PA_TIMED_AUDIO` AFTER UPDATE ON `pa_timed_audio` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PA_TIMED_AUDIO` AFTER DELETE ON `pa_timed_audio` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_timed_audio')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PIS_AREA_INFO` AFTER INSERT ON `pis_area_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_area_info', 'id', '', NEW.ID, getTableSubSystem('pis_area_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PIS_AREA_INFO` AFTER UPDATE ON `pis_area_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pis_area_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PIS_AREA_INFO` AFTER DELETE ON `pis_area_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_area_info', 'id', OLD.ID, '', getTableSubSystem('pis_area_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PIS_CTRL_PARAM` AFTER INSERT ON `pis_ctrl_param` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'pis_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PIS_CTRL_PARAM` AFTER UPDATE ON `pis_ctrl_param` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PIS_CTRL_PARAM` AFTER DELETE ON `pis_ctrl_param` FOR EACH ROW BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pis_ctrl_param')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PIS_DISPLAY_INFO` AFTER INSERT ON `pis_display_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_display_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PIS_DISPLAY_INFO` AFTER UPDATE ON `pis_display_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PIS_DISPLAY_INFO` AFTER DELETE ON `pis_display_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_display_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PIS_FES_LOCATION_INFO` AFTER INSERT ON `pis_fes_location_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_fes_location_info', 'pis_station_id', '', NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PIS_FES_LOCATION_INFO` AFTER UPDATE ON `pis_fes_location_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PIS_FES_LOCATION_INFO` AFTER DELETE ON `pis_fes_location_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, '', getTableSubSystem('pis_fes_location_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PIS_LOCATION_AREA_DEF` AFTER INSERT ON `pis_location_area_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PIS_LOCATION_AREA_DEF` AFTER UPDATE ON `pis_location_area_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PIS_LOCATION_AREA_DEF` AFTER DELETE ON `pis_location_area_def` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pis_location_area_def')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_PIS_MESSAGE_INFO` AFTER INSERT ON `pis_message_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_message_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_PIS_MESSAGE_INFO` AFTER UPDATE ON `pis_message_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_PIS_MESSAGE_INFO` AFTER DELETE ON `pis_message_info` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_message_info')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SCL_DATASET` AFTER INSERT ON `scl_dataset` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_dataset', 'id', '', NEW.id, getTableSubSystem('scl_dataset')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SCL_DATASET` AFTER UPDATE ON `scl_dataset` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_dataset', 'id', OLD.id, NEW.id, getTableSubSystem('scl_dataset')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_SCL_DATASET` AFTER DELETE ON `scl_dataset` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_dataset', 'id', OLD.id, '', getTableSubSystem('scl_dataset')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SCL_FCDA` AFTER INSERT ON `scl_fcda` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_fcda', 'id', '', NEW.id, getTableSubSystem('scl_fcda')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SCL_FCDA` AFTER UPDATE ON `scl_fcda` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_fcda', 'id', OLD.id, NEW.id, getTableSubSystem('scl_fcda')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_SCL_FCDA` AFTER DELETE ON `scl_fcda` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_fcda', 'id', OLD.id, '', getTableSubSystem('scl_fcda')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SCL_LCB` AFTER INSERT ON `scl_lcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_lcb', 'id', '', NEW.id, getTableSubSystem('scl_lcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SCL_LCB` AFTER UPDATE ON `scl_lcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_lcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_lcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_SCL_LCB` AFTER DELETE ON `scl_lcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_lcb', 'id', OLD.id, '', getTableSubSystem('scl_lcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SCL_RCB` AFTER INSERT ON `scl_rcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_rcb', 'id', '', NEW.id, getTableSubSystem('scl_rcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SCL_RCB` AFTER UPDATE ON `scl_rcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_rcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_rcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_SCL_RCB` AFTER DELETE ON `scl_rcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_rcb', 'id', OLD.id, '', getTableSubSystem('scl_rcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SCL_RUNTIME` AFTER INSERT ON `scl_runtime` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_runtime', 'id', '', NEW.id, getTableSubSystem('scl_runtime')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SCL_RUNTIME` AFTER UPDATE ON `scl_runtime` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_runtime', 'id', OLD.id, NEW.id, getTableSubSystem('scl_runtime')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_SCL_RUNTIME` AFTER DELETE ON `scl_runtime` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_runtime', 'id', OLD.id, '', getTableSubSystem('scl_runtime')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SCL_SGCB` AFTER INSERT ON `scl_sgcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_sgcb', 'id', '', NEW.id, getTableSubSystem('scl_sgcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SCL_SGCB` AFTER UPDATE ON `scl_sgcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_sgcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_sgcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_SCL_SGCB` AFTER DELETE ON `scl_sgcb` +FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_sgcb', 'id', OLD.id, '', getTableSubSystem('scl_sgcb')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_SEQUENCE_ACTION` BEFORE INSERT ON `sequence_action` FOR EACH ROW body:BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SEQUENCE_ACTION` AFTER INSERT ON `sequence_action` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_action', 'name', '', NEW.NAME, getTableSubSystem('sequence_action')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_SEQUENCE_ACTION` BEFORE UPDATE ON `sequence_action` FOR EACH ROW body:BEGIN + #修改对应功能 + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE sequence_function SET + TIMEFLAG = NEW.TIMEFLAG, + ACTION_NAME = NEW.NAME + WHERE ACTION_NAME = OLD.NAME; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SEQUENCE_ACTION` AFTER UPDATE ON `sequence_action` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_action')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_SEQUENCE_ACTION` AFTER DELETE ON `sequence_action` FOR EACH ROW body:BEGIN + #删除关联了此动作的功能 + DELETE FROM sequence_function WHERE ACTION_NAME = OLD.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_action', 'name', OLD.NAME, '', getTableSubSystem('sequence_action')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_SEQUENCE_DEFINE` BEFORE INSERT ON `sequence_define` FOR EACH ROW body:BEGIN + #仅仅修改时标 + #避免触发器循环 + SET @disableSequenceSettingTrigger = 1; + + IF COALESCE(@disableSequenceDefineTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE sequence_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = NEW.SEQ_NAME; + END; + END IF; + + SET @disableSequenceSettingTrigger = 0; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SEQUENCE_DEFINE` AFTER INSERT ON `sequence_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_define', 'seq_name,func_name', '', concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_SEQUENCE_DEFINE` BEFORE UPDATE ON `sequence_define` FOR EACH ROW body:BEGIN + + #修改对应联动功能关系表 + #避免触发器循环 + SET @disableSequenceSettingTrigger = 1; + + IF COALESCE(@disableSequenceDefineTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE sequence_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = OLD.SEQ_NAME; + END; + END IF; + + SET @disableSequenceSettingTrigger = 0; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SEQUENCE_DEFINE` AFTER UPDATE ON `sequence_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_SEQUENCE_DEFINE` AFTER DELETE ON `sequence_define` FOR EACH ROW body:BEGIN + #仅仅修改时标 + #避免触发器循环 + SET @disableSequenceSettingTrigger = 1; + + IF COALESCE(@disableSequenceDefineTrigger,0) = 0 THEN + BEGIN + UPDATE sequence_setting SET + TIMEFLAG = unix_timestamp(now()) + WHERE NAME = OLD.SEQ_NAME; + END; + END IF; + + SET @disableSequenceSettingTrigger = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('sequence_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_SEQUENCE_FUNCTION` BEFORE INSERT ON `sequence_function` FOR EACH ROW body:BEGIN + #仅仅修改时标 + SET NEW.TIMEFLAG = unix_timestamp(now()); + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIA_SEQUENCE_FUNCTION +AFTER INSERT +ON sequence_function FOR EACH ROW +BEGIN + UPDATE sequence_define SET + TIMEFLAG = NEW.TIMEFLAG + WHERE FUNC_NAME = NEW.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_SEQUENCE_FUNCTION` BEFORE UPDATE ON `sequence_function` FOR EACH ROW body:BEGIN + #修改对应联动功能关系表 + SET NEW.TIMEFLAG = unix_timestamp(now()); + UPDATE sequence_define SET + TIMEFLAG = NEW.TIMEFLAG, + FUNC_NAME = NEW.NAME + WHERE FUNC_NAME = OLD.NAME; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SEQUENCE_FUNCTION` AFTER UPDATE ON `sequence_function` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_SEQUENCE_FUNCTION` AFTER DELETE ON `sequence_function` FOR EACH ROW body:BEGIN + #删除关联了此功能的联动定义 + #检查功能是否被删除 + IF NOT EXISTS (SELECT * FROM sequence_function WHERE NAME = OLD.NAME) THEN + BEGIN + DELETE FROM sequence_define WHERE FUNC_NAME = OLD.NAME; + END; + ELSE + BEGIN + #修改时标 + UPDATE sequence_define SET + TIMEFLAG = unix_timestamp(now()) + WHERE FUNC_NAME = OLD.NAME; + END; + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('sequence_function')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TI_SEQUENCE_SETTING` BEFORE INSERT ON `sequence_setting` FOR EACH ROW body:BEGIN + #仅仅修改时标 + #避免触发器循环 + SET @disableSequenceDefineTrigger = 1; + + IF COALESCE(@disableSequenceSettingTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + END; + END IF; + + SET @disableSequenceDefineTrigger = 0; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_SEQUENCE_SETTING` AFTER INSERT ON `sequence_setting` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_setting', 'name', '', NEW.NAME, getTableSubSystem('sequence_setting')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TU_SEQUENCE_SETTING` BEFORE UPDATE ON `sequence_setting` FOR EACH ROW body:BEGIN + #修改对应联动功能关系表 + #避免触发器循环 + SET @disableSequenceDefineTrigger = 1; + + IF COALESCE(@disableSequenceSettingTrigger,0) = 0 THEN + BEGIN + SET NEW.TIMEFLAG = unix_timestamp(now()); + IF NEW.NAME<>OLD.NAME THEN + UPDATE sequence_define SET + SEQ_NAME = NEW.NAME + WHERE SEQ_NAME = OLD.NAME; + END IF; + END; + END IF; + + SET @disableSequenceDefineTrigger = 0; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_SEQUENCE_SETTING` AFTER UPDATE ON `sequence_setting` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_setting')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TD_SEQUENCE_SETTING` AFTER DELETE ON `sequence_setting` FOR EACH ROW body:BEGIN + #删除关联了此联动的功能关联 + #避免触发器循环 + SET @disableSequenceDefineTrigger = 1; + + IF COALESCE(@disableSequenceSettingTrigger,0) = 0 THEN + BEGIN + DELETE FROM sequence_define WHERE SEQ_NAME = OLD.NAME; + END; + END IF; + + SET @disableSequenceDefineTrigger = 0; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_setting', 'name', OLD.NAME, '', getTableSubSystem('sequence_setting')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_INST_DEF` AFTER INSERT ON `stat_inst_def` FOR EACH ROW BEGIN + + #插入测点分组表 + #插入测点表 + #插入时间测点变 + #插入返回分组表 + #插入返回参数表 + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) , DESCRIPTION, NEW.INST_TAG, SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG, LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, '', SORT, '', NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(`TYPE`,0) = 1; + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, unix_timestamp(now()),SORT, '', NEW.INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(`TYPE`,0) = 2; + + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, NEW.INST_TAG,SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG, LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, 1, '', SORT, '', 0, 0, NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_def', 'inst_tag', '', NEW.INST_TAG, getTableSubSystem('stat_inst_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_INST_DEF +AFTER UPDATE +ON stat_inst_def FOR EACH ROW +BEGIN + IF NEW.INST_TAG <> OLD.INST_TAG THEN + BEGIN + UPDATE stat_inst_para_grp + SET INST_TAG = NEW.INST_TAG, + PARA_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_GRP_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_para_point + SET INST_TAG = NEW.INST_TAG, + PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_para_time + SET INST_TAG = NEW.INST_TAG, + PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_ret_grp + SET INST_TAG = NEW.INST_TAG, + RET_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_GRP_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_ret_para + SET INST_TAG = NEW.INST_TAG, + RET_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + END; + END IF; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, NEW.INST_TAG, getTableSubSystem('stat_inst_def')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_INST_DEF` AFTER DELETE ON `stat_inst_def` FOR EACH ROW BEGIN + DELETE FROM stat_inst_para_grp WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_para_point WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_para_time WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_ret_grp WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_ret_para WHERE INST_TAG = OLD.INST_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, '', getTableSubSystem('stat_inst_def')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_INST_PARA_GRP` AFTER INSERT ON `stat_inst_para_grp` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_grp', 'para_grp_tag', '', NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_STAT_INST_PARA_GRP` AFTER UPDATE ON `stat_inst_para_grp` FOR EACH ROW body:BEGIN + IF NEW.PARA_GRP_TAG = OLD.PARA_GRP_TAG + THEN LEAVE body; + END IF; + + UPDATE stat_inst_para_point + SET PARA_GRP_TAG = NEW.PARA_GRP_TAG + WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + UPDATE stat_inst_para_time + SET PARA_GRP_TAG = NEW.PARA_GRP_TAG + WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_INST_PARA_GRP` AFTER DELETE ON `stat_inst_para_grp` FOR EACH ROW BEGIN + DELETE FROM stat_inst_para_point WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + DELETE FROM stat_inst_para_time WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, '', getTableSubSystem('stat_inst_para_grp')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIA_STAT_INST_PARA_POINT +AFTER INSERT +ON stat_inst_para_point FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_point', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_INST_PARA_POINT +AFTER UPDATE +ON stat_inst_para_point FOR EACH ROW +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TDA_STAT_INST_PARA_POINT +AFTER DELETE +ON stat_inst_para_point FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_point')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIA_STAT_INST_PARA_TIME +AFTER INSERT +ON stat_inst_para_time FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_time', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_INST_PARA_TIME +AFTER UPDATE +ON stat_inst_para_time FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TDA_STAT_INST_PARA_TIME +AFTER DELETE +ON stat_inst_para_time FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_time')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_INST_RET_GRP` AFTER INSERT ON `stat_inst_ret_grp` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_grp', 'ret_grp_tag', '', NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_STAT_INST_RET_GRP` AFTER UPDATE ON `stat_inst_ret_grp` FOR EACH ROW body:BEGIN + + IF NEW.RET_GRP_TAG = OLD.RET_GRP_TAG + THEN LEAVE body; + END IF; + + UPDATE stat_inst_ret_para + SET PARA_GRP_TAG = NEW.RET_GRP_TAG + WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_INST_RET_GRP` AFTER DELETE ON `stat_inst_ret_grp` FOR EACH ROW BEGIN + DELETE FROM stat_inst_ret_para WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, '', getTableSubSystem('stat_inst_ret_grp')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIA_STAT_INST_RET_PARA +AFTER INSERT +ON stat_inst_ret_para FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_para', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_INST_RET_PARA +AFTER UPDATE +ON stat_inst_ret_para FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TDA_STAT_INST_RET_PARA +AFTER DELETE +ON stat_inst_ret_para FOR EACH ROW +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_inst_ret_para')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_LINK_DEF` AFTER INSERT ON `STAT_LINK_DEF` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('STAT_LINK_DEF')); + END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_STAT_LINK_DEF` AFTER UPDATE ON `stat_link_def` +FOR EACH ROW BEGIN + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + UPDATE stat_link_para + SET LINK_TAG = NEW.TAG_NAME, + TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) + WHERE LINK_TAG = OLD.TAG_NAME; + UPDATE stat_link_ret + SET LINK_TAG = NEW.TAG_NAME, + TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) + WHERE LINK_TAG = OLD.TAG_NAME; + + END; + END IF; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_def')); + END IF; + UPDATE stat_link_para + SET STAT_PARA_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_PARA_TAG)) + WHERE LINK_TAG = OLD.TAG_NAME; + UPDATE stat_link_ret + SET STAT_RET_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_RET_TAG)) + WHERE LINK_TAG = OLD.TAG_NAME; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_LINK_DEF` AFTER DELETE ON `stat_link_def` +FOR EACH ROW BEGIN + #删除对应的模板点 + DELETE FROM stat_link_para WHERE LINK_TAG= OLD.TAG_NAME; + DELETE FROM stat_link_ret WHERE LINK_TAG = OLD.TAG_NAME; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_def')); + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_LINK_PARA` AFTER INSERT ON `stat_link_para` +FOR EACH ROW BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_para')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_STAT_LINK_PARA` AFTER UPDATE ON `stat_link_para` +FOR EACH ROW BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_para')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_LINK_PARA` AFTER DELETE ON `stat_link_para` +FOR EACH ROW BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_para')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_LINK_RET` AFTER INSERT ON `stat_link_ret` +FOR EACH ROW BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_ret', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_STAT_LINK_RET` AFTER UPDATE ON `stat_link_ret` +FOR EACH ROW BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_LINK_RET` AFTER DELETE ON `stat_link_ret` +FOR EACH ROW BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_ret')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_STAT_TEMPLATE_DEF` AFTER INSERT ON `stat_template_def` FOR EACH ROW BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_def', 'template_tag', '', NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_TEMPLATE_DEF +AFTER UPDATE +ON stat_template_def FOR EACH ROW +BEGIN + UPDATE stat_template_para + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, + PARA_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + UPDATE stat_template_ret + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, + RET_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(RET_TAG)) + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + UPDATE stat_inst_def + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + UPDATE stat_link_def + SET STAT_TEMP_TAG = NEW.TEMPLATE_TAG + WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_STAT_TEMPLATE_DEF` AFTER DELETE ON `stat_template_def` FOR EACH ROW BEGIN + #删除对应关联 + DELETE FROM stat_link_def WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; + + #删除对应实例 + DELETE FROM stat_inst_def WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + #删除对应的模板点 + DELETE FROM stat_template_para WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + DELETE FROM stat_template_ret WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, '', getTableSubSystem('stat_template_def')); + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIA_STAT_TEMPLATE_PARA +AFTER INSERT +ON stat_template_para FOR EACH ROW +BEGIN + #插入对应的实例 + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 1; + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, unix_timestamp(now()),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 2; + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_para', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_template_para')); + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_TEMPLATE_PARA +AFTER UPDATE +ON stat_template_para FOR EACH ROW +body:BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_para', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_template_para')); + END IF; + + UPDATE stat_link_para + SET STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) + WHERE STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.PARA_TAG)); + + IF OLD.PARA_TAG = NEW.PARA_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.`TYPE` = NEW.`TYPE` + AND OLD.SORT = NEW.SORT + THEN LEAVE body; + END IF; + + + #更新对应的实例点 + #考虑从分组到不分组,从测点类型到时间类型,需删除旧的数据 + IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN + BEGIN + DELETE stat_inst_para_grp FROM stat_inst_def,stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + IF NEW.`TYPE` = 1 THEN + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 1; + ELSEIF NEW.`TYPE` = 2 THEN + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, unix_timestamp(now()),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 2; + END IF; + END; + ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN + BEGIN + IF OLD.`TYPE` = 1 THEN + DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + ELSEIF OLD.`TYPE` = 2 THEN + DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + END IF; + + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN + BEGIN + IF OLD.`TYPE` = 1 AND NEW.`TYPE` = 2 THEN + BEGIN + DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, `RANK`, `TIMESTAMP`, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, unix_timestamp(now()),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 2; + END; + ELSEIF OLD.`TYPE` = 2 AND NEW.`TYPE` = 1 THEN + BEGIN + DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.`TYPE`,0) = 1; + END; + ELSEIF OLD.`TYPE` = NEW.`TYPE` AND OLD.`TYPE` = 1 THEN + UPDATE stat_inst_para_point INNER JOIN stat_inst_def + ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_point.INST_TAG + AND `RANK` = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG) + SET stat_inst_para_point.PARA_TAG = concat(stat_inst_para_point.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), + stat_inst_para_point.DESCRIPTION = NEW.DESCRIPTION, + stat_inst_para_point.SORT = NEW.SORT; + ELSEIF OLD.`TYPE` = NEW.`TYPE` AND OLD.`TYPE` = 2 THEN + UPDATE stat_inst_para_time INNER JOIN stat_inst_def + ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_time.INST_TAG + AND `RANK` = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG) + SET stat_inst_para_time.PARA_TAG = concat(stat_inst_para_time.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), + stat_inst_para_time.DESCRIPTION = NEW.DESCRIPTION, + stat_inst_para_time.SORT = NEW.SORT; + END IF; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN + BEGIN + IF OLD.`TYPE` = 1 AND NEW.`TYPE` = 2 THEN + BEGIN + DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_grp,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + AND stat_inst_para_point.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; + END; + ELSEIF OLD.`TYPE` = 2 AND NEW.`TYPE` = 1 THEN + BEGIN + DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_grp,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + AND stat_inst_para_time.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; + END; + END IF; + + + UPDATE stat_inst_para_grp INNER JOIN stat_inst_def + ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + SET stat_inst_para_grp.PARA_GRP_TAG = concat(stat_inst_para_grp.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), + stat_inst_para_grp.DESCRIPTION = NEW.DESCRIPTION, + stat_inst_para_grp.SORT = NEW.SORT; + END; + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TDA_STAT_TEMPLATE_PARA +AFTER DELETE +ON stat_template_para FOR EACH ROW +BEGIN + #删除相应的实例点 + DELETE stat_inst_para_grp FROM stat_inst_def,stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + DELETE stat_inst_para_point FROM stat_inst_def,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + DELETE stat_inst_para_time FROM stat_inst_def,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + DELETE FROM stat_link_para + WHERE STAT_PARA_TAG = OLD.PARA_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_para', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_template_para')); + END IF; + + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TIA_STAT_TEMPLATE_RET +AFTER INSERT +ON stat_template_ret FOR EACH ROW +BEGIN + #插入相应实例点 + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_ret', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_template_ret')); + END IF; + + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TUA_STAT_TEMPLATE_RET +AFTER UPDATE +ON stat_template_ret FOR EACH ROW +body:BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_template_ret')); + END IF; + + UPDATE stat_link_ret + SET STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.RET_TAG)) + WHERE STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.RET_TAG)); + + IF OLD.RET_TAG = NEW.RET_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.SORT = NEW.SORT + THEN LEAVE body; + END IF; + + #更新相应的实例点 + IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN + BEGIN + DELETE stat_inst_ret_grp FROM stat_inst_def,stat_inst_ret_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, `RANK`, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; + END; + ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN + BEGIN + DELETE stat_inst_ret_para FROM stat_inst_def,stat_inst_ret_para + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); + + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN + BEGIN + UPDATE stat_inst_ret_para INNER JOIN stat_inst_def + ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_para.INST_TAG + AND `RANK` = 1 AND getAfterLastDot(RET_TAG) = getAfterLastDot(OLD.RET_TAG) + SET stat_inst_ret_para.RET_TAG = concat(stat_inst_ret_para.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), + stat_inst_ret_para.DESCRIPTION = NEW.DESCRIPTION, + stat_inst_ret_para.SORT = NEW.SORT; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN + BEGIN + UPDATE stat_inst_ret_grp INNER JOIN stat_inst_def + ON stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_grp.INST_TAG + AND getAfterLastDot(RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG) + SET stat_inst_ret_grp.RET_GRP_TAG = concat(stat_inst_ret_grp.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), + stat_inst_ret_grp.DESCRIPTION = NEW.DESCRIPTION, + stat_inst_ret_grp.SORT = NEW.SORT; + END; + END IF; + + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER TDA_STAT_TEMPLATE_RET +AFTER DELETE +ON stat_template_ret FOR EACH ROW +BEGIN + #删除相应的实例点 + DELETE stat_inst_ret_grp FROM stat_inst_def,stat_inst_ret_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + DELETE stat_inst_ret_para FROM stat_inst_def,stat_inst_ret_para + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); + DELETE FROM stat_link_ret + WHERE STAT_RET_TAG = OLD.RET_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_template_ret')); + END IF; + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_TRIGGER_CONDITION_DEFINE` AFTER INSERT ON `trigger_condition_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_condition_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_TRIGGER_CONDITION_DEFINE` AFTER UPDATE ON `trigger_condition_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_TRIGGER_CONDITION_DEFINE` AFTER DELETE ON `trigger_condition_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_condition_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_TRIGGER_FUNCTION_DEFINE` AFTER INSERT ON `trigger_function_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_function_define', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_TRIGGER_FUNCTION_DEFINE` AFTER UPDATE ON `trigger_function_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_TRIGGER_FUNCTION_DEFINE` AFTER DELETE ON `trigger_function_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('trigger_function_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_TRIGGER_PERIOD_DEFINE` AFTER INSERT ON `trigger_period_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_period_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_TRIGGER_PERIOD_DEFINE` AFTER UPDATE ON `trigger_period_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_TRIGGER_PERIOD_DEFINE` AFTER DELETE ON `trigger_period_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_period_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TIA_TRIGGER_TIMER_DEFINE` AFTER INSERT ON `trigger_timer_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_timer_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TUA_TRIGGER_TIMER_DEFINE` AFTER UPDATE ON `trigger_timer_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DELIMITER $$ +CREATE TRIGGER `TDA_TRIGGER_TIMER_DEFINE` AFTER DELETE ON `trigger_timer_define` FOR EACH ROW BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_timer_define')); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DROP FUNCTION IF EXISTS `splitList`; +DELIMITER $$ +CREATE DEFINER=`root`@`%` FUNCTION `splitList`( strList varchar(100), split_char varchar(1) , strCount int) RETURNS varchar(64) CHARSET utf8 +BEGIN + #分割字符串,返回第strCount个子串 + DECLARE splitCount int; + DECLARE splitIndex int DEFAULT 1; + DECLARE str1 varchar(100) DEFAULT ''; + DECLARE str2 varchar(100) DEFAULT ''; + + SET splitCount = char_length(strList)-char_length(replace(strList,split_char,'')) + 1; + IF strCount > splitCount OR strCount <=0 THEN RETURN ''; + END IF; + + IF strCount = 1 THEN RETURN substring_index(strList,split_char,strCount); + ELSE + BEGIN + SET str1 = substring_index(strList,split_char,strCount-1); + SET str2 = substring_index(strList,split_char,strCount); + RETURN right(str2,LENGTH(str2) - LENGTH(str1) - 1); + END; + END IF; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DROP PROCEDURE IF EXISTS `clearTempRelation`; +DELIMITER $$ +CREATE DEFINER=`root`@`%` PROCEDURE `clearTempRelation`(devTempName varchar(64)) +body:BEGIN + /* + * 清除指定模板的所有测点与前置模板的关系 + */ + + UPDATE accuml_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE analog_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1, + OUT_SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE digital_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO1 = -1, + SEC_SEQ_NO2 = -1, + SEC_SEQ_NO3 = -1, + SEC_SEQ_NO4 = -1, + SEC_SEQ_NO5 = -1, + OUT_SEC_SEQ_NO1 = -1, + OUT_SEC_SEQ_NO2 = -1, + OUT_SEC_SEQ_NO3 = -1, + OUT_SEC_SEQ_NO4 = -1, + OUT_SEC_SEQ_NO5 = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE mix_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1, + OUT_SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DROP PROCEDURE IF EXISTS `updateFesResPara`; +DELIMITER $$ +CREATE DEFINER=`root`@`%` PROCEDURE `updateFesResPara`(tableName varchar(64),startNum decimal(10,0)) +body:BEGIN + /* + * 批量修改设备的规约参数1,要批量修改的设备在export_seq中 + * tableName 表名 + * startNum 修改的起始数字 + */ + + SET @fesResPara := startNum - 1; + + #创建临时表 + CREATE TEMPORARY TABLE IF NOT EXISTS tmpUpdateFesResParaTbl( + TAG_NAME varchar(64) NOT NULL, + RES_PARA decimal(10,0) NOT NULL + ); + DELETE FROM tmpUpdateFesResParaTbl; + + IF lower(tableName) = 'fes_accuml' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_accuml,export_seq WHERE fes_accuml.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_accuml.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_accuml INNER JOIN tmpUpdateFesResParaTbl ON fes_accuml.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_accuml.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + ELSEIF lower(tableName) = 'fes_analog' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_analog,export_seq WHERE fes_analog.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_analog.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_analog INNER JOIN tmpUpdateFesResParaTbl ON fes_analog.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_analog.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + ELSEIF lower(tableName) = 'fes_analog_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_analog_ctrl,export_seq WHERE fes_analog_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_analog_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_analog_ctrl INNER JOIN tmpUpdateFesResParaTbl ON fes_analog_ctrl.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_analog_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + ELSEIF lower(tableName) = 'fes_digital' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_digital,export_seq WHERE fes_digital.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_digital.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_digital INNER JOIN tmpUpdateFesResParaTbl ON fes_digital.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_digital.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + ELSEIF lower(tableName) = 'fes_digital_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_digital_ctrl,export_seq WHERE fes_digital_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_digital_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_digital_ctrl INNER JOIN tmpUpdateFesResParaTbl ON fes_digital_ctrl.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_digital_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + ELSEIF lower(tableName) = 'fes_mix' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_mix,export_seq WHERE fes_mix.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_mix.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_mix INNER JOIN tmpUpdateFesResParaTbl ON fes_mix.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_mix.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + ELSEIF lower(tableName) = 'fes_mix_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_mix_ctrl,export_seq WHERE fes_mix_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.`NO`,fes_mix_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (@fesResPara := @fesResPara + 1); + + UPDATE fes_mix_ctrl INNER JOIN tmpUpdateFesResParaTbl ON fes_mix_ctrl.TAG_NAME = tmpUpdateFesResParaTbl.TAG_NAME + SET fes_mix_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA; + END; + END IF; + + + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DROP PROCEDURE IF EXISTS `bindStatDev`; +DELIMITER $$ +CREATE DEFINER=`root`@`%` PROCEDURE `bindStatDev`(statTag varchar(64),devTag varchar(64)) +body:BEGIN + /* + * 绑定统计分析中的实例,使用对应的后台设备 + * statTag 统计分析实例 + * devTag 后台设备 + */ + + #清空 + UPDATE stat_inst_para_point SET POINT_TAG = '' WHERE INST_TAG = statTag; + + UPDATE stat_inst_ret_para SET POINT_TAG = '' WHERE INST_TAG = statTag; + + #填写 + CREATE TEMPORARY TABLE IF NOT EXISTS tmpBinStatDevTbl( + PARA_TAG varchar(64) NOT NULL, + POINT_TAG varchar(64) NOT NULL + ); + DELETE FROM tmpBinStatDevTbl; + + #查找对应的测点 + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('analog.',analog.TAG_NAME) AS A + FROM stat_inst_para_point,analog + WHERE INST_TAG = statTag AND analog.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(analog.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('accuml.',accuml.TAG_NAME) AS A + FROM stat_inst_para_point,accuml + WHERE INST_TAG = statTag AND accuml.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(accuml.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('digital.',digital.TAG_NAME) AS A + FROM stat_inst_para_point,digital + WHERE INST_TAG = statTag AND digital.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(digital.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('mix.',mix.TAG_NAME) AS A + FROM stat_inst_para_point,mix + WHERE INST_TAG = statTag AND mix.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(mix.TAG_NAME); + + UPDATE stat_inst_para_point INNER JOIN tmpBinStatDevTbl ON stat_inst_para_point.PARA_TAG = tmpBinStatDevTbl.PARA_TAG + SET stat_inst_para_point.POINT_TAG = tmpBinStatDevTbl.POINT_TAG; + + DELETE FROM tmpBinStatDevTbl; + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('analog.',analog.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,analog + WHERE INST_TAG = statTag AND analog.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(analog.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('digital.',digital.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,digital + WHERE INST_TAG = statTag AND digital.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(digital.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('accuml.',accuml.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,accuml + WHERE INST_TAG = statTag AND accuml.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(accuml.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('mix.',mix.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,mix + WHERE INST_TAG = statTag AND mix.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(mix.TAG_NAME); + + UPDATE stat_inst_ret_para INNER JOIN tmpBinStatDevTbl ON stat_inst_ret_para.RET_TAG = tmpBinStatDevTbl.PARA_TAG + SET stat_inst_ret_para.POINT_TAG = tmpBinStatDevTbl.POINT_TAG, + stat_inst_ret_para.IS_BIND = '1' + ; + +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DROP PROCEDURE IF EXISTS `custom_log`; +DELIMITER $$ +CREATE DEFINER=`root`@`%` PROCEDURE `custom_log`(info1 varchar(100), info2 varchar(100) ) +BEGIN +DECLARE enableDebug int DEFAULT 1; +SET enableDebug = (SELECT PRINT_DEBUG_INFO_FLAG FROM custom_debug_flag LIMIT 1); +IF enableDebug=1 THEN +INSERT INTO custom_debug_info(col1,col2,col3) VALUES (info1,info2,now()); +END IF; +END $$ +DELIMITER ; + +-- ------------------------------------------------------ +DROP PROCEDURE IF EXISTS `relationByTempPointName`; +DELIMITER $$ +CREATE DEFINER=`root`@`%` PROCEDURE `relationByTempPointName`(devTempName varchar(64),fesDevTempName varchar(64)) +body:BEGIN + /* + * 按照模板下的测点名称进行,后台模板与前置模板的关联 + */ + #获取设备测点名称 + + CALL clearTempRelation(devTempName); + #创建临时表, + CREATE TEMPORARY TABLE IF NOT EXISTS tmpRelationNameTbl( + TAG_NAME varchar(64) NOT NULL, + FES_SEQ_NO decimal(10,0) NOT NULL + ); + + #accuml + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM accuml_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_ACC')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + #进行关联 + UPDATE accuml_temp_define INNER JOIN tmpRelationNameTbl ON + accuml_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME + SET + SEC_DEVTP_NAME = fesDevTempName, + SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO; + + #analog + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM analog_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_ANA')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + #进行关联 + UPDATE analog_temp_define INNER JOIN tmpRelationNameTbl ON + analog_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME + SET + SEC_DEVTP_NAME = fesDevTempName, + SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO; + + #digital只判断第一个分量 + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM digital_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_DIG')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + #进行关联 + UPDATE digital_temp_define INNER JOIN tmpRelationNameTbl ON + digital_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME + SET + SEC_DEVTP_NAME = fesDevTempName, + SEC_SEQ_NO1 = tmpRelationNameTbl.FES_SEQ_NO; + + #mix + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM mix_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_MIX')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + #进行关联 + UPDATE mix_temp_define INNER JOIN tmpRelationNameTbl ON + mix_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME + SET + SEC_DEVTP_NAME = fesDevTempName, + SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO; + +END $$ +DELIMITER ; diff --git a/product/common/database/initscript/iscs6000_func_openGauss.sql b/product/common/database/initscript/iscs6000_func_openGauss.sql index 97df4b61..d91b0b00 100644 --- a/product/common/database/initscript/iscs6000_func_openGauss.sql +++ b/product/common/database/initscript/iscs6000_func_openGauss.sql @@ -1,8644 +1,8593 @@ - - -CREATE OR REPLACE FUNCTION kbdDebugInfo(info1 varchar(100), info2 varchar(100) ) -RETURNS VOID -AS $$ -DECLARE enableDebug int DEFAULT 1; -BEGIN -enableDebug = (SELECT PRINT_DEBUG_INFO_FLAG FROM kbd_debug_flag LIMIT 1); -IF enableDebug=1 THEN -INSERT INTO kbd_debug(col1,col2,col3) VALUES (info1,info2,now()); -END IF; -END; -$$LANGUAGE PLPGSQL; - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ACCUML_LIMIT_INFO ON accuml_limit_info; -CREATE TRIGGER TIA_ACCUML_LIMIT_INFO AFTER INSERT ON accuml_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ACCUML_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ACCUML_LIMIT_INFO ON accuml_limit_info; -CREATE TRIGGER TUA_ACCUML_LIMIT_INFO AFTER UPDATE ON accuml_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ACCUML_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ACCUML_LIMIT_INFO ON accuml_limit_info; -CREATE TRIGGER TDA_ACCUML_LIMIT_INFO AFTER DELETE ON accuml_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ACCUML_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - --首先禁止FES触发器动作 - SET SESSION "disable.FesAccumlTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.AccumlMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAccumlTrigger" = 0; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TI_ACCUML_MAP_TO_FES AFTER INSERT ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - - --首先禁止FES触发器动作 - SET SESSION "disable.FesAccumlTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.AccumlMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - --清除旧的 - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - --添加新的 - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET SESSION "disable.FesAccumlTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TU_ACCUML_MAP_TO_FES BEFORE UPDATE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TUA_ACCUML_MAP_TO_FES AFTER UPDATE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - - --首先禁止FES触发器动作 - SET SESSION "disable.FesAccumlTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.AccumlMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_accuml SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAccumlTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TD_ACCUML_MAP_TO_FES BEFORE DELETE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('accuml_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; -CREATE TRIGGER TDA_ACCUML_MAP_TO_FES AFTER DELETE ON accuml_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ACCUML_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* -INSERT INTO accuml( -TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)), NEW.DESCRIPTION,TAG_NAME, NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP, NEW.IS_LIMIT, NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS, NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - INSERT INTO temp_plugin_point_map_acc - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TI_ACCUML_TEMP_DEFINE AFTER INSERT ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.UNIT_ID <> OLD.UNIT_ID OR NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR - NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.SEQ_NO <> OLD.SEQ_NO OR - NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT - THEN - UPDATE accuml SET - accuml.TAG_NAME = concat(accuml.DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - accuml.DESCRIPTION = NEW.DESCRIPTION, - accuml.UNIT_ID = NEW.UNIT_ID, - accuml.IS_LIMIT = NEW.IS_LIMIT, - accuml.POINT_CLASS = NEW.POINT_CLASS, - accuml.POINT_TP_NAME = NEW.TAG_NAME, - accuml.IS_SAMPLE = NEW.IS_SAMPLE, - accuml.SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND, - accuml.POINT_TYPE = NEW.POINT_TYPE, - accuml.SEQ_NO = NEW.SEQ_NO, - accuml.IS_STATISTICS = NEW.IS_STATISTICS, - accuml.SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - accuml.POINT_PROPERTY = NEW.POINT_PROPERTY, - accuml.POINT_SORT = NEW.POINT_SORT - WHERE accuml.POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR - NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR - NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR - NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE accuml_limit_info SET - LIMIT_TYPE = NEW.LIMIT_TYPE, - LIMIT_NUM = NEW.LIMIT_NUM, - LIMIT_UP1 = NEW.LIMIT_UP1, - LIMIT_LOW1 = NEW.LIMIT_LOW1, - LIMIT_UP2 = NEW.LIMIT_UP2, - LIMIT_LOW2 = NEW.LIMIT_LOW2, - LIMIT_UP3 = NEW.LIMIT_UP3, - LIMIT_LOW3 = NEW.LIMIT_LOW3, - CROSS_PERCENT = NEW.CROSS_PERCENT, - RETURN_PERCENT = NEW.RETURN_PERCENT, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - IF NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR - NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF - THEN - UPDATE accuml_map_to_fes SET - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - IS_FILTER = NEW.IS_FILTER, - PERCENT = NEW.PERCENT, - BASE = NEW.BASE, - COEFF = NEW.COEFF - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_acc - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TU_ACCUML_TEMP_DEFINE AFTER UPDATE ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - - DELETE FROM temp_plugin_point_map_acc WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* -DELETE FROM accuml WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TD_ACCUML_TEMP_DEFINE BEFORE DELETE ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ACCUML_TEMP_DEFINE ON accuml_temp_define; -CREATE TRIGGER TDA_ACCUML_TEMP_DEFINE AFTER DELETE ON accuml_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ACCUML_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_link_enable_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; -CREATE TRIGGER TIA_ALARM_LINK_ENABLE_INFO AFTER INSERT ON alarm_link_enable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_LINK_ENABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; -CREATE TRIGGER TUA_ALARM_LINK_ENABLE_INFO AFTER UPDATE ON alarm_link_enable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_LINK_ENABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('alarm_link_enable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; -CREATE TRIGGER TDA_ALARM_LINK_ENABLE_INFO AFTER DELETE ON alarm_link_enable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_LINK_ENABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_config', 'NO', '', NEW.NO, getTableSubSystem('alarm_sms_config')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_SMS_CONFIG ON alarm_sms_config; -CREATE TRIGGER TIA_ALARM_SMS_CONFIG AFTER INSERT ON alarm_sms_config FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_CONFIG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_config', 'NO', OLD.NO, NEW.NO, getTableSubSystem('alarm_sms_config')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_SMS_CONFIG ON alarm_sms_config; -CREATE TRIGGER TUA_ALARM_SMS_CONFIG AFTER UPDATE ON alarm_sms_config FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_CONFIG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_config', 'NO', OLD.NO, '', getTableSubSystem('alarm_sms_config')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_SMS_CONFIG ON alarm_sms_config; -CREATE TRIGGER TDA_ALARM_SMS_CONFIG AFTER DELETE ON alarm_sms_config FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_CONFIG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_device', 'DEVICE_ID', '', NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_SMS_DEVICE ON alarm_sms_device; -CREATE TRIGGER TIA_ALARM_SMS_DEVICE AFTER INSERT ON alarm_sms_device FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_DEVICE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_SMS_DEVICE ON alarm_sms_device; -CREATE TRIGGER TUA_ALARM_SMS_DEVICE AFTER UPDATE ON alarm_sms_device FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_DEVICE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, '', getTableSubSystem('alarm_sms_device')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_SMS_DEVICE ON alarm_sms_device; -CREATE TRIGGER TDA_ALARM_SMS_DEVICE AFTER DELETE ON alarm_sms_device FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_DEVICE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_rule', 'RULE_ID', '', NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ALARM_SMS_RULE ON alarm_sms_rule; -CREATE TRIGGER TIA_ALARM_SMS_RULE AFTER INSERT ON alarm_sms_rule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_RULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ALARM_SMS_RULE ON alarm_sms_rule; -CREATE TRIGGER TUA_ALARM_SMS_RULE AFTER UPDATE ON alarm_sms_rule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_RULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, '', getTableSubSystem('alarm_sms_rule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ALARM_SMS_RULE ON alarm_sms_rule; -CREATE TRIGGER TDA_ALARM_SMS_RULE AFTER DELETE ON alarm_sms_rule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_RULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TIA_ANALOG_CONTROL AFTER INSERT ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN - - --修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - NEW.OFFSET_NO = '-1'; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TU_ANALOG_CONTROL BEFORE UPDATE ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TUA_ANALOG_CONTROL AFTER UPDATE ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_CONTROL ON analog_control; -CREATE TRIGGER TDA_ANALOG_CONTROL AFTER DELETE ON analog_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ANALOG_LIMIT_INFO ON analog_limit_info; -CREATE TRIGGER TIA_ANALOG_LIMIT_INFO AFTER INSERT ON analog_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ANALOG_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ANALOG_LIMIT_INFO ON analog_limit_info; -CREATE TRIGGER TUA_ANALOG_LIMIT_INFO AFTER UPDATE ON analog_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ANALOG_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_limit_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_LIMIT_INFO ON analog_limit_info; -CREATE TRIGGER TDA_ANALOG_LIMIT_INFO AFTER DELETE ON analog_limit_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_LIMIT_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ - DECLARE flag int; -BEGIN - SET SESSION "disable.FesAnalogTrigger" = 1; - - SELECT CURRENT_SETTING('disable.AnalogMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAnalogTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TI_ANALOG_MAP_TO_FES AFTER INSERT ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('FES analog update','In TU_ANALOG_MAP_TO_FES'); - - SET SESSION "disable.FesAnalogTrigger" = 1; - - SELECT CURRENT_SETTING('disable.AnalogMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET SESSION "disable.FesAnalogTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TU_ANALOG_MAP_TO_FES BEFORE UPDATE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TUA_ANALOG_MAP_TO_FES AFTER UPDATE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - CALL kbdDebugInfo('FES analog update','In TD_ANALOG_MAP_TO_FES'); - - SET SESSION "disable.FesAnalogTrigger" = 1; - - SELECT CURRENT_SETTING('disable.AnalogMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_analog SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesAnalogTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TD_ANALOG_MAP_TO_FES BEFORE DELETE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('analog_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_MAP_TO_FES ON analog_map_to_fes; -CREATE TRIGGER TDA_ANALOG_MAP_TO_FES AFTER DELETE ON analog_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - -/* -INSERT INTO analog( -TAG_NAME, DESCRIPTION, RTU_TAG, DEV_TYPE, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, IS_CONTROL, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)) , NEW.DESCRIPTION ,'', DEV_TYPE, TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, NEW.IS_CONTROL,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP,NEW.IS_LIMIT,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - - INSERT INTO temp_plugin_point_map_ana - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'analog_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TI_ANALOG_TEMP_DEFINE AFTER INSERT ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.SEQ_NO <> OLD.SEQ_NO OR NEW.IS_CONTROL <> OLD.IS_CONTROL OR NEW.UNIT_ID <> OLD.UNIT_ID OR - NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT OR - NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND - THEN - UPDATE analog SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - UNIT_ID = NEW.UNIT_ID, - IS_LIMIT = NEW.IS_LIMIT, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND - WHERE POINT_TP_NAME=OLD.TAG_NAME; - END IF; - - IF NEW.IS_TAGT_STATE <> OLD.IS_TAGT_STATE OR NEW.CTRL_TIMEOUT <> OLD.CTRL_TIMEOUT OR NEW.RESV_TIMEOUT <> OLD.RESV_TIMEOUT OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR - NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.CTRL_TOLERANCE <> OLD.CTRL_TOLERANCE OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE analog_control SET - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR - NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR - NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR - NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME - THEN - UPDATE analog_limit_info SET - LIMIT_TYPE = NEW.LIMIT_TYPE , - LIMIT_NUM = NEW.LIMIT_NUM , - LIMIT_UP1 = NEW.LIMIT_UP1 , - LIMIT_LOW1 = NEW.LIMIT_LOW1 , - LIMIT_UP2 = NEW.LIMIT_UP2 , - LIMIT_LOW2 = NEW.LIMIT_LOW2 , - LIMIT_UP3 = NEW.LIMIT_UP3 , - LIMIT_LOW3 = NEW.LIMIT_LOW3 , - CROSS_PERCENT = NEW.CROSS_PERCENT , - RETURN_PERCENT = NEW.RETURN_PERCENT , - ALARM_PRIORITY = NEW.ALARM_PRIORITY , - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME , - IS_WATER_ALM = NEW.IS_WATER_ALM , - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN , - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK , - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR NEW.IS_VALID <> OLD.IS_VALID OR NEW.DEADBAND <> OLD.DEADBAND OR - NEW.ZEROBAND <> OLD.ZEROBAND OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW - THEN - UPDATE analog_map_to_fes SET - POINT_TP_NAME = NEW.TAG_NAME, - IS_FILTER = NEW.IS_FILTER, - PERCENT = NEW.PERCENT, - IS_VALID = NEW.IS_VALID, - DEADBAND = NEW.DEADBAND, - ZEROBAND = NEW.ZEROBAND, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_ana - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TU_ANALOG_TEMP_DEFINE AFTER UPDATE ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM temp_plugin_point_map_ana WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* - DELETE FROM analog WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TD_ANALOG_TEMP_DEFINE BEFORE DELETE ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ANALOG_TEMP_DEFINE ON analog_temp_define; -CREATE TRIGGER TDA_ANALOG_TEMP_DEFINE AFTER DELETE ON analog_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ANALOG_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_analog', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_ANALOG ON APC_ANALOG; -CREATE TRIGGER TIA_APC_ANALOG AFTER INSERT ON APC_ANALOG FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_APC_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF NEW.VALUE_FROM_SELF IS NOT NULL THEN - NEW.VALUE = NEW.VALUE_FROM_SELF; - NEW.VALUE_FROM_SELF = NULL; -ELSEIF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_APC_ANALOG ON APC_ANALOG; -CREATE TRIGGER TUB_APC_ANALOG BEFORE UPDATE ON APC_ANALOG FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_APC_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_ANALOG ON APC_ANALOG; -CREATE TRIGGER TDA_APC_ANALOG AFTER DELETE ON APC_ANALOG FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_apc_curve() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_apc_curve ON apc_curve; -CREATE TRIGGER TIA_apc_curve AFTER INSERT ON apc_curve FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_apc_curve(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_apc_curve() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_apc_curve ON apc_curve; -CREATE TRIGGER TUA_apc_curve AFTER UPDATE ON apc_curve FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_apc_curve(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_apc_curve() RETURNS TRIGGER AS $$ -BEGIN -delete from apc_curve_day_index where curve_key_id_tag = old.key_id_tag; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_curve')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_apc_curve ON apc_curve; -CREATE TRIGGER TDA_apc_curve AFTER DELETE ON apc_curve FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_apc_curve(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', '', concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; -CREATE TRIGGER TIA_APC_CURVE_DAY_INDEX AFTER INSERT ON apc_curve_day_index FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_INDEX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ -BEGIN -IF((select count(*) from apc_curve_day_index where day_rule_id = old.day_rule_id)<1) THEN -delete from apc_curve_day_value where day_rule_id = old.day_rule_id; -END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; -CREATE TRIGGER TUA_APC_CURVE_DAY_INDEX AFTER UPDATE ON apc_curve_day_index FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_INDEX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ -BEGIN -delete from apc_curve_day_value where day_rule_id = old.day_rule_id; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id',concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), '', getTableSubSystem('apc_curve_day_index')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; -CREATE TRIGGER TDA_APC_CURVE_DAY_INDEX AFTER DELETE ON apc_curve_day_index FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_INDEX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', '', concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; -CREATE TRIGGER TIA_APC_CURVE_DAY_VALUE AFTER INSERT ON apc_curve_day_value FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_VALUE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; -CREATE TRIGGER TUA_APC_CURVE_DAY_VALUE AFTER UPDATE ON apc_curve_day_value FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_VALUE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), '', getTableSubSystem('apc_curve_day_value')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; -CREATE TRIGGER TDA_APC_CURVE_DAY_VALUE AFTER DELETE ON apc_curve_day_value FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_VALUE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_week', 'type_id,week_day', '', concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_WEEK ON apc_curve_week; -CREATE TRIGGER TIA_APC_CURVE_WEEK AFTER INSERT ON apc_curve_week FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_WEEK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_WEEK ON apc_curve_week; -CREATE TRIGGER TUA_APC_CURVE_WEEK AFTER UPDATE ON apc_curve_week FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_WEEK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), '', getTableSubSystem('apc_curve_week')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_WEEK ON apc_curve_week; -CREATE TRIGGER TDA_APC_CURVE_WEEK AFTER DELETE ON apc_curve_week FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_WEEK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_CURVE_YEAR ON apc_curve_year; -CREATE TRIGGER TIA_APC_CURVE_YEAR AFTER INSERT ON apc_curve_year FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_YEAR(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_APC_CURVE_YEAR ON apc_curve_year; -CREATE TRIGGER TUA_APC_CURVE_YEAR AFTER UPDATE ON apc_curve_year FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_YEAR(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_CURVE_YEAR ON apc_curve_year; -CREATE TRIGGER TDA_APC_CURVE_YEAR AFTER DELETE ON apc_curve_year FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_YEAR(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_APC_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'apc_digital', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_APC_DIGITAL ON apc_digital; -CREATE TRIGGER TIA_APC_DIGITAL AFTER INSERT ON apc_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_APC_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_APC_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF NEW.VALUE_FROM_SELF IS NOT NULL THEN - NEW.VALUE = NEW.VALUE_FROM_SELF; - NEW.VALUE_FROM_SELF = NULL; -ELSEIF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_APC_DIGITAL ON apc_digital; -CREATE TRIGGER TUB_APC_DIGITAL BEFORE UPDATE ON apc_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_APC_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_APC_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_APC_DIGITAL ON apc_digital; -CREATE TRIGGER TDA_APC_DIGITAL AFTER DELETE ON apc_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_APC_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; -CREATE TRIGGER TIA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER INSERT ON ats_casco_planned_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; -CREATE TRIGGER TUA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER UPDATE ON ats_casco_planned_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_planned_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; -CREATE TRIGGER TDA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER DELETE ON ats_casco_planned_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; -CREATE TRIGGER TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER INSERT ON ats_casco_practical_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; -CREATE TRIGGER TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER UPDATE ON ats_casco_practical_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_practical_train_data')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; -CREATE TRIGGER TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER DELETE ON ats_casco_practical_train_data FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_location_info', 'ats_location_id', '', NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; -CREATE TRIGGER TIA_ATS_FES_LOCATION_INFO AFTER INSERT ON ats_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; -CREATE TRIGGER TUA_ATS_FES_LOCATION_INFO AFTER UPDATE ON ats_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, '', getTableSubSystem('ats_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; -CREATE TRIGGER TDA_ATS_FES_LOCATION_INFO AFTER DELETE ON ats_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', '', concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; -CREATE TRIGGER TIA_ATS_FES_PLATFORM_INFO AFTER INSERT ON ats_fes_platform_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_ATS_FES_PLATFORM_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; -CREATE TRIGGER TUA_ATS_FES_PLATFORM_INFO AFTER UPDATE ON ats_fes_platform_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_ATS_FES_PLATFORM_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), '', getTableSubSystem('ats_fes_platform_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; -CREATE TRIGGER TDA_ATS_FES_PLATFORM_INFO AFTER DELETE ON ats_fes_platform_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_ATS_FES_PLATFORM_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; -CREATE TRIGGER TIA_BAS_TIMETABLE_CTRL_PARAM AFTER INSERT ON bas_timetable_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; -CREATE TRIGGER TUA_BAS_TIMETABLE_CTRL_PARAM AFTER UPDATE ON bas_timetable_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('bas_timetable_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; -CREATE TRIGGER TDA_BAS_TIMETABLE_CTRL_PARAM AFTER DELETE ON bas_timetable_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_def', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_DEF ON bas_timetable_def; -CREATE TRIGGER TIA_BAS_TIMETABLE_DEF AFTER INSERT ON bas_timetable_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_DEF ON bas_timetable_def; -CREATE TRIGGER TUA_BAS_TIMETABLE_DEF AFTER UPDATE ON bas_timetable_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_DEF ON bas_timetable_def; -CREATE TRIGGER TDA_BAS_TIMETABLE_DEF AFTER DELETE ON bas_timetable_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_info', 'location_id,timetable_id,begin_time', '', concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_INFO ON bas_timetable_info; -CREATE TRIGGER TIA_BAS_TIMETABLE_INFO AFTER INSERT ON bas_timetable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_INFO ON bas_timetable_info; -CREATE TRIGGER TUA_BAS_TIMETABLE_INFO AFTER UPDATE ON bas_timetable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), '', getTableSubSystem('bas_timetable_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_INFO ON bas_timetable_info; -CREATE TRIGGER TDA_BAS_TIMETABLE_INFO AFTER DELETE ON bas_timetable_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_schedule', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; -CREATE TRIGGER TIA_BAS_TIMETABLE_SCHEDULE AFTER INSERT ON bas_timetable_schedule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_SCHEDULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; -CREATE TRIGGER TUA_BAS_TIMETABLE_SCHEDULE AFTER UPDATE ON bas_timetable_schedule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_SCHEDULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_schedule')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; -CREATE TRIGGER TDA_BAS_TIMETABLE_SCHEDULE AFTER DELETE ON bas_timetable_schedule FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_SCHEDULE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_func_def', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_FUNC_DEF ON calc_func_def; -CREATE TRIGGER TI_CALC_FUNC_DEF AFTER INSERT ON calc_func_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_FUNC_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET - FUNC_NAME = NEW.FUNC_NAME, - CALC_FLAG = '1' - WHERE FUNC_NAME = OLD.FUNC_NAME; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_func_def', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_FUNC_DEF ON calc_func_def; -CREATE TRIGGER TU_CALC_FUNC_DEF AFTER UPDATE ON calc_func_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_FUNC_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM calc_out_para WHERE FUNC_NAME = OLD.FUNC_NAME; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_func_def', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('calc_func_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_FUNC_DEF ON calc_func_def; -CREATE TRIGGER TD_CALC_FUNC_DEF AFTER DELETE ON calc_func_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_FUNC_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_group_def', 'group_id', '', NEW.GROUP_ID, getTableSubSystem('calc_group_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_GROUP_DEF ON calc_group_def; -CREATE TRIGGER TI_CALC_GROUP_DEF AFTER INSERT ON calc_group_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_GROUP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.GROUP_ID <> OLD.GROUP_ID THEN - UPDATE calc_func_def SET GROUP_ID = NEW.GROUP_ID WHERE GROUP_ID = OLD.GROUP_ID; - END IF; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_group_def', 'group_id', OLD.GROUP_ID, NEW.GROUP_ID, getTableSubSystem('calc_group_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_GROUP_DEF ON calc_group_def; -CREATE TRIGGER TU_CALC_GROUP_DEF AFTER UPDATE ON calc_group_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_GROUP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_group_def', 'group_id', OLD.GROUP_ID, '', getTableSubSystem('calc_group_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_GROUP_DEF ON calc_group_def; -CREATE TRIGGER TD_CALC_GROUP_DEF AFTER DELETE ON calc_group_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_GROUP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_IN_PARA() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_in_para', 'key_id_tag,para_seq_no', '', concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_IN_PARA ON calc_in_para; -CREATE TRIGGER TI_CALC_IN_PARA AFTER INSERT ON calc_in_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_IN_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_IN_PARA() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_IN_PARA ON calc_in_para; -CREATE TRIGGER TU_CALC_IN_PARA AFTER UPDATE ON calc_in_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_IN_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_IN_PARA() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = OLD.KEY_ID_TAG; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_in_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_IN_PARA ON calc_in_para; -CREATE TRIGGER TD_CALC_IN_PARA AFTER DELETE ON calc_in_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_IN_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_OUT_PARA() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_out_para', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_OUT_PARA ON calc_out_para; -CREATE TRIGGER TI_CALC_OUT_PARA AFTER INSERT ON calc_out_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_OUT_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_OUT_PARA() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_OUT_PARA ON calc_out_para; -CREATE TRIGGER TU_CALC_OUT_PARA AFTER UPDATE ON calc_out_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_OUT_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_OUT_PARA() RETURNS TRIGGER AS $$ -BEGIN - - --这里不能触发删除本输出的输入,因为输入的删除触发器中调用了本表 - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('calc_out_para')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_OUT_PARA ON calc_out_para; -CREATE TRIGGER TD_CALC_OUT_PARA AFTER DELETE ON calc_out_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_OUT_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_CALC_PARA_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'calc_para_def', 'func_name,para_seq_no', '', concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_CALC_PARA_DEF ON calc_para_def; -CREATE TRIGGER TI_CALC_PARA_DEF AFTER INSERT ON calc_para_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_CALC_PARA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_CALC_PARA_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_CALC_PARA_DEF ON calc_para_def; -CREATE TRIGGER TU_CALC_PARA_DEF AFTER UPDATE ON calc_para_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_CALC_PARA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_CALC_PARA_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_para_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_CALC_PARA_DEF ON calc_para_def; -CREATE TRIGGER TD_CALC_PARA_DEF AFTER DELETE ON calc_para_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_CALC_PARA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_device_inst', 'id', '', NEW.id, getTableSubSystem('cfg_device_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_CFG_DEVICE_INST ON cfg_device_inst; -CREATE TRIGGER TIA_CFG_DEVICE_INST AFTER INSERT ON cfg_device_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_CFG_DEVICE_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'cfg_device_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_device_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_CFG_DEVICE_INST ON cfg_device_inst; -CREATE TRIGGER TUA_CFG_DEVICE_INST AFTER UPDATE ON cfg_device_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_CFG_DEVICE_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_device_inst', 'id', OLD.id, '', getTableSubSystem('cfg_device_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_CFG_DEVICE_INST ON cfg_device_inst; -CREATE TRIGGER TDA_CFG_DEVICE_INST AFTER DELETE ON cfg_device_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_CFG_DEVICE_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_signal_inst', 'id', '', NEW.id, getTableSubSystem('cfg_signal_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_CFG_SIGNAL_INST ON cfg_signal_inst; -CREATE TRIGGER TIA_CFG_SIGNAL_INST AFTER INSERT ON cfg_signal_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_CFG_SIGNAL_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'cfg_signal_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_signal_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_CFG_SIGNAL_INST ON cfg_signal_inst; -CREATE TRIGGER TUA_CFG_SIGNAL_INST AFTER UPDATE ON cfg_signal_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_CFG_SIGNAL_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_signal_inst', 'id', OLD.id, '', getTableSubSystem('cfg_signal_inst')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_CFG_SIGNAL_INST ON cfg_signal_inst; -CREATE TRIGGER TDA_CFG_SIGNAL_INST AFTER DELETE ON cfg_signal_inst FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_CFG_SIGNAL_INST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TIA_DEV_TEMP_DEF AFTER INSERT ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF OLD.TAG_NAME != NEW.TAG_NAME THEN -BEGIN - UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); - UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -END; -END IF; - -IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DESCRIPTION != NEW.DESCRIPTION THEN -BEGIN - UPDATE accuml_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - UPDATE analog_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - - UPDATE digital_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - - UPDATE mix_temp_define SET - DEV_TP_NAME=NEW.TAG_NAME , - TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) - WHERE DEV_TP_NAME=OLD.TAG_NAME ; - --更新对应的套件 - IF OLD.TAG_NAME != NEW.TAG_NAME THEN - BEGIN - UPDATE temp_plugin_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_fes_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_acc SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_ana SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_dig SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - UPDATE temp_plugin_point_map_mix SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; - END; - END IF; -END; -END IF; -/* -IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DEV_TYPE_ID != NEW.DEV_TYPE_ID OR OLD.SUB_SYSTEM != NEW.SUB_SYSTEM -THEN -UPDATE dev_info SET -DEV_TP_NAME=NEW.TAG_NAME, -DEV_TYPE=NEW.DEV_TYPE_ID, -SUB_SYSTEM = NEW.SUB_SYSTEM -WHERE DEV_TP_NAME=OLD.TAG_NAME ; -END IF; -*/ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TU_DEV_TEMP_DEF AFTER UPDATE ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - -/* -DELETE FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; -*/ -DELETE FROM accuml_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM analog_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM digital_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; -DELETE FROM mix_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; ---套件的处理 -DELETE FROM temp_plugin_dev_map WHERE TEMP_NAME = OLD.TAG_NAME; -UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TD_DEV_TEMP_DEF BEFORE DELETE ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DEV_TEMP_DEF ON dev_temp_def; -CREATE TRIGGER TDA_DEV_TEMP_DEF AFTER DELETE ON dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE dev_temp_def SET DEV_TEMP_GRP = NEW.TAG_NAME WHERE DEV_TEMP_GRP = OLD.TAG_NAME; - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DEV_TEMP_GROUP ON dev_temp_group; -CREATE TRIGGER TU_DEV_TEMP_GROUP AFTER UPDATE ON dev_temp_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ -BEGIN - - DELETE FROM dev_temp_def WHERE DEV_TEMP_GRP = OLD.TAG_NAME; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DEV_TEMP_GROUP ON dev_temp_group; -CREATE TRIGGER TD_DEV_TEMP_GROUP AFTER DELETE ON dev_temp_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TIA_DIGITAL_CONTROL AFTER INSERT ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN - - --修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - NEW.OFFSET_NO1 = '-1'; - NEW.OFFSET_NO2 = '-1'; - NEW.OFFSET_NO3 = '-1'; - NEW.OFFSET_NO4 = '-1'; - NEW.OFFSET_NO5 = '-1'; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TU_DIGITAL_CONTROL BEFORE UPDATE ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TUA_DIGITAL_CONTROL AFTER UPDATE ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DIGITAL_CONTROL ON digital_control; -CREATE TRIGGER TDA_DIGITAL_CONTROL AFTER DELETE ON digital_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DIGITAL_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('FES digtal update','In TI_DIGTAL_MAP_TO_FES'); - - SET SESSION "disable.FesDigitalTrigger" = 1; - - SELECT CURRENT_SETTING('disable.DigitalMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value1' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); - END IF; - - IF COALESCE(NEW.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value2' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); - END IF; - - IF COALESCE(NEW.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value3' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); - END IF; - - IF COALESCE(NEW.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value4' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); - END IF; - - IF COALESCE(NEW.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value5' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); - END IF; - - END; - END IF; - END; - END IF; - SET SESSION "disable.FesDigitalTrigger" = 0; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TI_DIGITAL_MAP_TO_FES AFTER INSERT ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO1 = OLD.DOT_NO1 AND - NEW.DOT_NO2 = OLD.DOT_NO2 AND - NEW.DOT_NO3 = OLD.DOT_NO3 AND - NEW.DOT_NO4 = OLD.DOT_NO4 AND - NEW.DOT_NO5 = OLD.DOT_NO5 AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('FES digtal update','In TU_DIGTAL_MAP_TO_FES'); - - SET SESSION "disable.FesDigitalTrigger" = 1; - - SELECT CURRENT_SETTING('disable.DigitalMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); - END IF; - - IF COALESCE(OLD.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); - END IF; - - IF COALESCE(OLD.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); - END IF; - - IF COALESCE(OLD.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); - END IF; - - IF COALESCE(OLD.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value1' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); - END IF; - - IF COALESCE(NEW.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value2' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); - END IF; - - IF COALESCE(NEW.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value3' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); - END IF; - - IF COALESCE(NEW.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value4' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); - END IF; - - IF COALESCE(NEW.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value5' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); - END IF; - - END; - ELSE - BEGIN - NEW.DOT_NO1 = '-1'; - NEW.DOT_NO2 = '-1'; - NEW.DOT_NO3 = '-1'; - NEW.DOT_NO4 = '-1'; - NEW.DOT_NO5 = '-1'; - END; - END IF; - END; - END IF; - SET SESSION "disable.FesDigitalTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TU_DIGITAL_MAP_TO_FES BEFORE UPDATE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TUA_DIGITAL_MAP_TO_FES AFTER UPDATE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('FES digtal update','In TD_DIGTAL_MAP_TO_FES'); - - SET SESSION "disable.FesDigitalTrigger" = 1; - - SELECT CURRENT_SETTING('disable.DigitalMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO1,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); - END IF; - - IF COALESCE(OLD.DOT_NO2,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); - END IF; - - IF COALESCE(OLD.DOT_NO3,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); - END IF; - - IF COALESCE(OLD.DOT_NO4,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); - END IF; - - IF COALESCE(OLD.DOT_NO5,'') <> '' THEN - UPDATE fes_digital SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesDigitalTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TD_DIGITAL_MAP_TO_FES BEFORE DELETE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('digital_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; -CREATE TRIGGER TDA_DIGITAL_MAP_TO_FES AFTER DELETE ON digital_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DIGITAL_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - -/* -INSERT INTO digital( -TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, VALUE_NUM, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, VALUE1, STATUS1, LAST_CHANGE_TIME1, VALUE2, STATUS2, LAST_CHANGE_TIME2, VALUE3, STATUS3, LAST_CHANGE_TIME3, VALUE4, STATUS4, LAST_CHANGE_TIME4, VALUE5, STATUS5, LAST_CHANGE_TIME5, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, INPUT_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, IS_ALARM_FREQ, ALARM_FREQ, ALARM_FREQ_DESC, IS_ALARM_TIME, ALARM_TIME, ALARM_TIME_DESC, ALARM_FREQ_RANGE, INFER_NAME, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID ) -SELECT -concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, "", NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,NEW.VALUE_NUM,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.INPUT_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.IS_ALARM_FREQ,NEW.ALARM_FREQ,NEW.ALARM_FREQ_DESC,NEW.IS_ALARM_TIME,NEW.ALARM_TIME,NEW.ALARM_TIME_DESC,NEW.ALARM_FREQ_RANGE,'', NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT, '', '' -FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - INSERT INTO temp_plugin_point_map_dig - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME1, FES_TEMP_POINT_NAME2, FES_TEMP_POINT_NAME3, FES_TEMP_POINT_NAME4, FES_TEMP_POINT_NAME5, FES_TEMP_OUT_NAME1, FES_TEMP_OUT_NAME2, FES_TEMP_OUT_NAME3, FES_TEMP_OUT_NAME4, FES_TEMP_OUT_NAME5) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'', '', '', '', '', '', '', '', '', '', '' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'digital_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TI_DIGITAL_TEMP_DEFINE AFTER INSERT ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE digital SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, - VALUE_NUM = NEW.VALUE_NUM, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - INPUT_DELAY_TIME = NEW.INPUT_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - IS_SUMMARY = NEW.IS_SUMMARY, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - IS_ALARM_FREQ = NEW.IS_ALARM_FREQ, - ALARM_FREQ = NEW.ALARM_FREQ, - ALARM_FREQ_DESC = NEW.ALARM_FREQ_DESC, - IS_ALARM_TIME = NEW.IS_ALARM_TIME, - ALARM_TIME = NEW.ALARM_TIME, - ALARM_TIME_DESC = NEW.ALARM_TIME_DESC, - ALARM_FREQ_RANGE = NEW.ALARM_FREQ_RANGE, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE POINT_TP_NAME=OLD.TAG_NAME ; - UPDATE digital_control SET - CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - PULSE_DURATION = NEW.PULSE_DURATION, - OFFSET_NUM = NEW.OFFSET_NUM, - IS_CHECK_PREVENTION = NEW.IS_CHECK_PREVENTION, - CTRL_TYPE = NEW.CTRL_TYPE, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_dig - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TU_DIGITAL_TEMP_DEFINE AFTER UPDATE ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM temp_plugin_point_map_dig WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); -/* -DELETE FROM digital WHERE POINT_TP_NAME = OLD.TAG_NAME; -*/ -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TD_DIGITAL_TEMP_DEFINE BEFORE DELETE ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_DIGITAL_TEMP_DEFINE ON digital_temp_define; -CREATE TRIGGER TDA_DIGITAL_TEMP_DEFINE AFTER DELETE ON digital_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_DIGITAL_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fault_recall_cond_def', 'location_id,trigger_tag_name', '', concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; -CREATE TRIGGER TIA_FAULT_RECALL_COND_DEF AFTER INSERT ON fault_recall_cond_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FAULT_RECALL_COND_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; -CREATE TRIGGER TUA_FAULT_RECALL_COND_DEF AFTER UPDATE ON fault_recall_cond_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FAULT_RECALL_COND_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), '', getTableSubSystem('fault_recall_cond_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; -CREATE TRIGGER TDA_FAULT_RECALL_COND_DEF AFTER DELETE ON fault_recall_cond_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FAULT_RECALL_COND_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_ACCUML() RETURNS TRIGGER AS $$ - DECLARE flag INT; -BEGIN - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TI_FES_ACCUML'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AccumlMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesAccumlTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE accuml_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - - END; - END IF; - - SET SESSION "disable.AccumlMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_accuml', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_accuml')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TI_FES_ACCUML AFTER INSERT ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_ACCUML() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TU_FES_ACCUML'); - - SET SESSION "disable.AccumlMapToFesTrigger" = 1; - - SELECT CURRENT_SETTING('disable.FesAccumlTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - --删除旧关联 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE accuml_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - --建立新关联 - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE accuml_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - END; - END IF; - - SET SESSION "disable.AccumlMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TU_FES_ACCUML BEFORE UPDATE ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ACCUML() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_accuml', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_accuml')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TUA_FES_ACCUML AFTER UPDATE ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_ACCUML() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('ACCUML_MAP_TO_FES update','In TD_FES_ACCUML'); - - SET SESSION "disable.AccumlMapToFesTrigger" = 1; - - SELECT CURRENT_SETTING('disable.FesAccumlTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE accuml_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.AccumlMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_accuml', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_accuml')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_ACCUML ON fes_accuml; -CREATE TRIGGER TD_FES_ACCUML AFTER DELETE ON fes_accuml FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_ACCUML(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_ANALOG() RETURNS TRIGGER AS $$ - DECLARE flag int; -BEGIN - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TI_FES_ANALOG'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AnalogMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesAnalogTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE analog_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.AnalogMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_ANALOG ON fes_analog; -CREATE TRIGGER TI_FES_ANALOG AFTER INSERT ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TU_FES_ANALOG'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AnalogMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesAnalogTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - --不管是ana还是const都是放在analog_map_to_fes表 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE analog_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE analog_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.AnalogMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_ANALOG ON fes_analog; -CREATE TRIGGER TU_FES_ANALOG BEFORE UPDATE ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ANALOG() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_ANALOG ON fes_analog; -CREATE TRIGGER TUA_FES_ANALOG AFTER UPDATE ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('ANALOG_MAP_TO_FES update','In TD_FES_ANALOG'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.AnalogMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesAnalogTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - --不管是ana还是const都是放在analog_map_to_fes表 - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE analog_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.AnalogMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_ANALOG ON fes_analog; -CREATE TRIGGER TD_FES_ANALOG AFTER DELETE ON fes_analog FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_ANALOG(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_ANALOG_CTRL ON fes_analog_ctrl; -CREATE TRIGGER TIA_FES_ANALOG_CTRL AFTER INSERT ON fes_analog_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_ANALOG_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ -BEGIN - --更新关联了此点的遥控点 - - IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO - THEN - BEGIN - UPDATE analog_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_ANALOG_CTRL ON fes_analog_ctrl; -CREATE TRIGGER TU_FES_ANALOG_CTRL AFTER UPDATE ON fes_analog_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_ANALOG_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ -BEGIN - UPDATE analog_control SET - OFFSET_NO = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_ANALOG_CTRL ON fes_analog_ctrl; -CREATE TRIGGER TD_FES_ANALOG_CTRL AFTER DELETE ON fes_analog_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_ANALOG_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ - DECLARE locationTag varchar(64) DEFAULT ''; - DECLARE subsystemTag varchar(64) DEFAULT ''; -BEGIN - SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; - SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; - NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_CHANNEL_PARA ON FES_CHANNEL_PARA; -CREATE TRIGGER TI_FES_CHANNEL_PARA BEFORE INSERT ON FES_CHANNEL_PARA FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_channel_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TIA_FES_CHANNEL_PARA AFTER INSERT ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ - DECLARE locationTag varchar(64) DEFAULT ''; - DECLARE subsystemTag varchar(64) DEFAULT ''; -BEGIN - IF NEW.CHAN_NAME <> OLD.CHAN_NAME THEN - BEGIN - SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; - SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; - NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); - END; - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TU_FES_CHANNEL_PARA BEFORE UPDATE ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); -END IF; -IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.CHAN_NO <> OLD.CHAN_NO OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM THEN -BEGIN - UPDATE fes_rtu_para SET - TAG_NAME = concat(NEW.TAG_NAME,'.',RTU_NAME), - CHAN_TAG = NEW.TAG_NAME, - CHAN_NO = NEW.CHAN_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE CHAN_TAG = OLD.TAG_NAME; -END; -END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TUA_FES_CHANNEL_PARA AFTER UPDATE ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_channel_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_CHANNEL_PARA ON fes_channel_para; -CREATE TRIGGER TDA_FES_CHANNEL_PARA AFTER DELETE ON fes_channel_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_CHANNEL_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const', 'tag_name', '',NEW.TAG_NAME, getTableSubSystem('fes_const')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_CONST ON fes_const; -CREATE TRIGGER TI_FES_CONST AFTER INSERT ON fes_const FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_CONST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_const', 'tag_name', OLD.TAG_NAME,NEW.TAG_NAME, getTableSubSystem('fes_const')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_CONST ON fes_const; -CREATE TRIGGER TU_FES_CONST AFTER UPDATE ON fes_const FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_CONST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const', 'tag_name', OLD.TAG_NAME,'', getTableSubSystem('fes_const')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_CONST ON fes_const; -CREATE TRIGGER TD_FES_CONST AFTER DELETE ON fes_const FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_CONST(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - INSERT INTO fes_const( - TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST'))), NEW.DESCRIPTION,NEW.GROUP_NO,fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST')),NEW.SEQ_NO,fes_rtu_para.SUB_SYSTEM,fes_rtu_para.LOCATION_ID,fes_dev_info.TAG_NAME,NEW.VALUE,NEW.VALUE_TYPE,NEW.UNIT_ID,NEW.VALUE_TEXT, NEW.VALUE_RATIO,NEW.VALUE_ADDED,NEW.VALUE_MAX,NEW.VALUE_MIN,NEW.VALUE_DEFAULT,NEW.VALUE_VERIFY,NEW.EX_INFO,NEW.TAG_NAME, NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_CONST_TEMP ON fes_const_temp; -CREATE TRIGGER TI_FES_CONST_TEMP AFTER INSERT ON fes_const_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_CONST_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE fes_const SET - DESCRIPTION = NEW.DESCRIPTION, - GROUP_NO = NEW.GROUP_NO, - SEQ_NO = NEW.SEQ_NO, - VALUE = NEW.VALUE, - VALUE_TYPE = NEW.VALUE_TYPE, - UNIT_ID = NEW.UNIT_ID, - VALUE_TEXT = NEW.VALUE_TEXT, - VALUE_RATIO = NEW.VALUE_RATIO, - VALUE_ADDED = NEW.VALUE_ADDED, - VALUE_MAX = NEW.VALUE_MAX, - VALUE_MIN = NEW.VALUE_MIN, - VALUE_DEFAULT = NEW.VALUE_DEFAULT, - VALUE_VERIFY = NEW.VALUE_VERIFY, - EX_INFO = NEW.EX_INFO, - FES_POINT_TP_NAME = NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_CONST_TEMP ON fes_const_temp; -CREATE TRIGGER TU_FES_CONST_TEMP AFTER UPDATE ON fes_const_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_CONST_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - DELETE FROM fes_const WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_const_temp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_CONST_TEMP ON fes_const_temp; -CREATE TRIGGER TD_FES_CONST_TEMP AFTER DELETE ON fes_const_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_CONST_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', '', concat(NEW.TAG_NAME,',', NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DATA_BLOCK ON fes_data_block; -CREATE TRIGGER TIA_FES_DATA_BLOCK AFTER INSERT ON fes_data_block FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DATA_BLOCK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,',', OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), concat(NEW.TAG_NAME,',',NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_DATA_BLOCK ON fes_data_block; -CREATE TRIGGER TUA_FES_DATA_BLOCK AFTER UPDATE ON fes_data_block FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_DATA_BLOCK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), '', getTableSubSystem('fes_data_block')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DATA_BLOCK ON fes_data_block; -CREATE TRIGGER TDA_FES_DATA_BLOCK AFTER DELETE ON fes_data_block FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DATA_BLOCK(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - INSERT INTO fes_data_block( - TAG_NAME, BLOCK_ID, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG) SELECT - concat(fes_dev_info.TAG_NAME,'.',getAfterLastDot(NEW.TAG_NAME)), NEW.BLOCK_ID,fes_rtu_para.RTU_NO,NEW.FUNC_CODE,NEW.STAR_ADDR,NEW.DATA_LEN, NEW.DATA_FARME_TYPE, NEW.REF_CYCLE, NEW.IS_CREATE_SOE, NEW.PARA_INT1, NEW.PARA_INT2, NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,NEW.LD, NEW.CALL_MODE, NEW.DATA_SET,NEW.DATA_SET_TYPE,NEW.DATA_SET_CALL_TIME,NEW.REPORT_CTRL,NEW.TAG_NAME, fes_dev_info.TAG_NAME - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; -CREATE TRIGGER TI_FES_DATA_BLOCK_TEMP AFTER INSERT ON fes_data_block_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DATA_BLOCK_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE fes_data_block SET - TAG_NAME = concat(getBeforeLastDot(fes_data_block.TAG_NAME),'.',getAfterLastDot(NEW.TAG_NAME)), - BLOCK_ID = NEW.BLOCK_ID, - FUNC_CODE = NEW.FUNC_CODE, - STAR_ADDR = NEW.STAR_ADDR, - DATA_LEN = NEW.DATA_LEN, - DATA_FARME_TYPE = NEW.DATA_FARME_TYPE, - REF_CYCLE = NEW.REF_CYCLE, - IS_CREATE_SOE = NEW.IS_CREATE_SOE, - PARA_INT1 = NEW.PARA_INT1, - PARA_INT2 = NEW.PARA_INT2, - DESCRIPTION = NEW.DESCRIPTION, - LD = NEW.LD, - CALL_MODE = NEW.CALL_MODE, - DATA_SET = NEW.DATA_SET, - DATA_SET_TYPE = NEW.DATA_SET_TYPE, - DATA_SET_CALL_TIME = NEW.DATA_SET_CALL_TIME, - REPORT_CTRL = NEW.REPORT_CTRL, - FES_POINT_TP_NAME = NEW.TAG_NAME - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; -CREATE TRIGGER TU_FES_DATA_BLOCK_TEMP AFTER UPDATE ON fes_data_block_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DATA_BLOCK_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ -BEGIN - /* - DELETE FROM fes_data_block WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - */ - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_data_block_temp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; -CREATE TRIGGER TD_FES_DATA_BLOCK_TEMP AFTER DELETE ON fes_data_block_temp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DATA_BLOCK_TEMP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIB_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN - - NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIB_FES_DEV_INFO ON FES_DEV_INFO; -CREATE TRIGGER TIB_FES_DEV_INFO BEFORE INSERT ON FES_DEV_INFO FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIB_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_INFO() RETURNS TRIGGER AS $$ -DECLARE incVarFesDev1 int; -DECLARE incVarFesDev2 int; -BEGIN - - IF COALESCE(NEW.DEV_TP_NAME,'') <> '' THEN - BEGIN - - --获取最大的点号时已经自动加1,这里减掉 - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ACC')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_accuml( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+ incVarFesDev2, NEW.RTU_TAG,NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO,'', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ACC') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_analog( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME , PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, fes_rtu_para.RTU_NO , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, '', '', '', fes_dev_pt_temp_def.IS_FILTER, fes_dev_pt_temp_def.PERCENT, '0', '0', '0', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-32767', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_digital( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,ASS_DIG) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , '', '', '', fes_dev_pt_temp_def.FILTER_ERR, fes_dev_pt_temp_def.FILTER_DISTURB, fes_dev_pt_temp_def.DISTURB_TIME, fes_dev_pt_temp_def.REVERS, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,ASS_DIG - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_mix( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 )SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_dev_pt_temp_def.DESCRIPTION,fes_rtu_para.LOCATION_ID , - fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, '', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-32768', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME - AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA_CTRL')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_analog_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, BASE, COEFF, MAX_RANGE, MIN_RANGE, RTU_NO, DEV_TAG, DOT_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, SEQ_NO, RTU_TAG, DESCRIPTION, POINT_TP_NAME, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8)SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '99999999', '-32768', fes_rtu_para.RTU_NO,NEW.TAG_NAME, - row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.SEQ_NO,NEW.RTU_TAG,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA_CTRL') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG_CTRL')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_digital_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, DESCRIPTION, REVERS, POINT_TP_NAME, SEQ_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850,POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,CTRL_TYPE)SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG, - fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, NEW.TAG_NAME,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.REVERS, fes_dev_pt_temp_def.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,ATTR,CTRL_TYPE - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG_CTRL') - AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX_CTRL')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_mix_ctrl( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, BASE, DESCRIPTION, DOT_NO, COEFF, MIN_RANGE, MAX_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, SEQ_NO, POINT_TP_NAME, DEV_TAG, PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 )SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , - NEW.RTU_TAG,fes_rtu_para.RTU_NO,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.DESCRIPTION, - row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RATIO, '-32768', '99999999', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.TAG_NAME,NEW.TAG_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8 - FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME - AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - - INSERT INTO fes_data_block( - TAG_NAME, BLOCK_ID, RTU_TAG, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG, PARA_INT3,PARA_INT4,IS_ENABLE) SELECT - concat(NEW.TAG_NAME,'.',getAfterLastDot(fes_data_block_temp.TAG_NAME)), fes_data_block_temp.BLOCK_ID,fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO,fes_data_block_temp.FUNC_CODE,fes_data_block_temp.STAR_ADDR,fes_data_block_temp.DATA_LEN, fes_data_block_temp.DATA_FARME_TYPE,fes_data_block_temp.REF_CYCLE,fes_data_block_temp.IS_CREATE_SOE,fes_data_block_temp.PARA_INT1, fes_data_block_temp.PARA_INT2, fes_data_block_temp.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,fes_data_block_temp.LD, fes_data_block_temp.CALL_MODE, fes_data_block_temp.DATA_SET, fes_data_block_temp.DATA_SET_TYPE,fes_data_block_temp.DATA_SET_CALL_TIME, fes_data_block_temp.REPORT_CTRL,fes_data_block_temp.TAG_NAME, NEW.TAG_NAME,PARA_INT3,PARA_INT4,IS_ENABLE - FROM fes_data_block_temp, fes_rtu_para WHERE fes_data_block_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_data_block_temp.BLOCK_ID; - - incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_CONST')) - 1; - incVarFesDev2 = incVarFesDev1; - - INSERT INTO fes_const( - TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME, PATH61850, POSITION61850,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,DZ_SEQ) SELECT - concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev1), fes_const_temp.DESCRIPTION,fes_const_temp.GROUP_NO,NEW.RTU_TAG, - fes_rtu_para.RTU_NO,row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev2,fes_const_temp.SEQ_NO,NEW.SUB_SYSTEM,NEW.LOCATION_ID,NEW.TAG_NAME,fes_const_temp.VALUE,fes_const_temp.VALUE_TYPE,fes_const_temp.UNIT_ID,fes_const_temp.VALUE_TEXT, fes_const_temp.VALUE_RATIO,fes_const_temp.VALUE_ADDED,fes_const_temp.VALUE_MAX,fes_const_temp.VALUE_MIN,fes_const_temp.VALUE_DEFAULT,fes_const_temp.VALUE_VERIFY,fes_const_temp.EX_INFO,fes_const_temp.TAG_NAME,PATH61850, POSITION61850,fes_const_temp.RES_PARA_INT1,fes_const_temp.RES_PARA_INT2,fes_const_temp.RES_PARA_INT3,fes_const_temp.RES_PARA_INT4,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,DZ_SEQ - FROM fes_const_temp, fes_rtu_para WHERE fes_const_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; - - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TI_FES_DEV_INFO AFTER INSERT ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.DEV_NAME <> OLD.DEV_NAME THEN - NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_FES_DEV_INFO ON FES_DEV_INFO; -CREATE TRIGGER TUB_FES_DEV_INFO BEFORE UPDATE ON FES_DEV_INFO FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM - OR NEW.RTU_NO <> OLD.RTU_NO - THEN - BEGIN - - update fes_accuml - SET fes_accuml.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_accuml.DOT_NO), fes_accuml.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_accuml.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_accuml.RTU_TAG = NEW.RTU_TAG, fes_accuml.DEV_TAG = NEW.TAG_NAME, fes_accuml.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_accuml.DEV_TAG = OLD.TAG_NAME; - - - - update fes_analog - SET fes_analog.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog.DOT_NO), fes_analog.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_analog.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_analog.RTU_TAG = NEW.RTU_TAG, fes_analog.DEV_TAG = NEW.TAG_NAME, fes_analog.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog.DEV_TAG = OLD.TAG_NAME; - - - - update fes_digital - SET fes_digital.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital.DOT_NO ), fes_digital.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_digital.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_digital.RTU_TAG = NEW.RTU_TAG, fes_digital.DEV_TAG = NEW.TAG_NAME, fes_digital.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital.DEV_TAG = OLD.TAG_NAME; - - - - update fes_mix - SET fes_mix.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix.DOT_NO), fes_mix.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_mix.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_mix.RTU_TAG = NEW.RTU_TAG, fes_mix.DEV_TAG = NEW.TAG_NAME, fes_mix.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix.DEV_TAG = OLD.TAG_NAME; - - - - update fes_analog_ctrl - SET fes_analog_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog_ctrl.DOT_NO), fes_analog_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_analog_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_analog_ctrl.RTU_TAG = NEW.RTU_TAG, fes_analog_ctrl.DEV_TAG = NEW.TAG_NAME, fes_analog_ctrl.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog_ctrl.DEV_TAG = OLD.TAG_NAME; - - - - update fes_digital_ctrl - SET fes_digital_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital_ctrl.DOT_NO), fes_digital_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_digital_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_digital_ctrl.RTU_TAG = NEW.RTU_TAG, fes_digital_ctrl.DEV_TAG = NEW.TAG_NAME, fes_digital_ctrl.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital_ctrl.DEV_TAG = OLD.TAG_NAME; - - - - update fes_mix_ctrl - SET fes_mix_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix_ctrl.DOT_NO), fes_mix_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_mix_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_mix_ctrl.RTU_TAG = NEW.RTU_TAG, fes_mix_ctrl.DEV_TAG = NEW.TAG_NAME, fes_mix_ctrl.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix_ctrl.DEV_TAG = OLD.TAG_NAME; - - - update fes_data_block - SET fes_data_block.LOCATION_ID = NEW.LOCATION_ID, fes_data_block.SUB_SYSTEM = NEW.SUB_SYSTEM, fes_data_block.DEV_TAG = NEW.TAG_NAME, fes_data_block.RTU_TAG = NEW.RTU_TAG, fes_data_block.TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(fes_data_block.TAG_NAME)), fes_data_block.RTU_NO = fes_rtu_para.RTU_NO - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_data_block.DEV_TAG = OLD.TAG_NAME; - - - update fes_const - SET fes_const.LOCATION_ID = NEW.LOCATION_ID, fes_const.SUB_SYSTEM = NEW.SUB_SYSTEM, fes_const.DEV_TAG = NEW.TAG_NAME, fes_const.RTU_TAG = NEW.RTU_TAG, fes_const.RTU_NO = fes_rtu_para.RTU_NO, fes_const.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_const.DOT_NO) - from fes_rtu_para - WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_const.DEV_TAG = OLD.TAG_NAME; - - - - END; - END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TU_FES_DEV_INFO AFTER UPDATE ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN -DELETE FROM fes_accuml WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_analog WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_digital WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_mix WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_analog_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_digital_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_mix_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_data_block WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -DELETE FROM fes_const WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TD_FES_DEV_INFO BEFORE DELETE ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_INFO ON fes_dev_info; -CREATE TRIGGER TDA_FES_DEV_INFO AFTER DELETE ON fes_dev_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - /* - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - INSERT INTO fes_accuml( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC')), fes_dev_info.RTU_TAG,fes_dev_info.TAG_NAME,NEW.SEQ_NO,'', '', '', '0', '1', fes_rtu_para.RTU_NO ,NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION ,NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - INSERT INTO fes_analog( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850, POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA')),'', '', '', 0, 0, '0', '0', '0', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - INSERT INTO fes_digital( - TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG')), '', '', '', 0, 0, 0, 0, fes_rtu_para.RTU_NO , NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - INSERT INTO fes_mix( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX'))), NEW.DESCRIPTION ,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX')), fes_dev_info.TAG_NAME, NEW.SEQ_NO, '', '', '', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - INSERT INTO fes_analog_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MAX_RANGE, MIN_RANGE, POINT_TP_NAME,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, '0', '1', 65536, 0, NEW.TAG_NAME ,NEW.RES_PARA_INT1,NEW.RES_PARA_INT2,NEW.RES_PARA_INT3,NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - INSERT INTO fes_digital_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, REVERS, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850, POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, 0, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850,NEW.YK_SELECT61850, NEW.YK_EXE61850, NEW.YK_CANCLE61850, NEW.YK_DOUBLE_SELECT61850, NEW.YK_DOUBLE_EXE61850, NEW.YK_DOUBLE_CANCLE61850, NEW.PULSE_TIME - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - INSERT INTO fes_mix_ctrl( - TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MIN_RANGE, MAX_RANGE, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4,PATH61850,POSITION61850)SELECT - concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO,'0', '1', 0, 65536, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 - FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; - END IF; - */ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_pt_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TI_FES_DEV_PT_TEMP_DEF AFTER INSERT ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - /* - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - UPDATE fes_accuml SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - UPDATE fes_analog SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - UPDATE fes_digital SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - UPDATE fes_mix SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - FES_POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - UPDATE fes_analog_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - UPDATE fes_digital_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850, - YK_SELECT61850 = NEW.YK_SELECT61850, - YK_EXE61850 = NEW.YK_EXE61850, - YK_CANCLE61850 = NEW.YK_CANCLE61850, - YK_DOUBLE_SELECT61850 = NEW.YK_DOUBLE_SELECT61850, - YK_DOUBLE_EXE61850 = NEW.YK_DOUBLE_EXE61850, - YK_DOUBLE_CANCLE61850 = NEW.YK_DOUBLE_CANCLE61850, - PULSE_TIME = NEW.PULSE_TIME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - UPDATE fes_mix_ctrl SET - SEQ_NO = NEW.SEQ_NO, - DESCRIPTION = NEW.DESCRIPTION, - POINT_TP_NAME= NEW.TAG_NAME, - PATH61850 = NEW.PATH61850, - POSITION61850 = NEW.POSITION61850 - WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ - --更新套件内容 - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN - UPDATE temp_plugin_point_map_acc SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN - UPDATE temp_plugin_point_map_ana SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN - UPDATE temp_plugin_point_map_mix SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN - UPDATE temp_plugin_point_map_dig SET - FES_TEMP_POINT_NAME1 = IF(FES_TEMP_POINT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME1), - FES_TEMP_POINT_NAME2 = IF(FES_TEMP_POINT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME2), - FES_TEMP_POINT_NAME3 = IF(FES_TEMP_POINT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME3), - FES_TEMP_POINT_NAME4 = IF(FES_TEMP_POINT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME4), - FES_TEMP_POINT_NAME5 = IF(FES_TEMP_POINT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME5) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - UPDATE temp_plugin_point_map_ana SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - UPDATE temp_plugin_point_map_mix SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); - ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - UPDATE temp_plugin_point_map_dig SET - FES_TEMP_OUT_NAME1 = IF(FES_TEMP_OUT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME1), - FES_TEMP_OUT_NAME2 = IF(FES_TEMP_OUT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME2), - FES_TEMP_OUT_NAME3 = IF(FES_TEMP_OUT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME3), - FES_TEMP_OUT_NAME4 = IF(FES_TEMP_OUT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME4), - FES_TEMP_OUT_NAME5 = IF(FES_TEMP_OUT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME5) - WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; - END IF; - END; - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TU_FES_DEV_PT_TEMP_DEF AFTER UPDATE ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - /* - IF OLD.POINT_TYPE = getFesPointType('FES_ACC') THEN - DELETE FROM fes_accuml WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF OLD.POINT_TYPE = getFesPointType('FES_ANA') THEN - DELETE FROM fes_analog WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - IF OLD.POINT_TYPE = getFesPointType('FES_DIG') THEN - DELETE FROM fes_digital WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_MIX') THEN - DELETE FROM fes_mix WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN - DELETE FROM fes_analog_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN - DELETE FROM fes_digital_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - - - IF OLD.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN - DELETE FROM fes_mix_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; - END IF; - */ -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TD_FES_DEV_PT_TEMP_DEF BEFORE DELETE ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_pt_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; -CREATE TRIGGER TDA_FES_DEV_PT_TEMP_DEF AFTER DELETE ON fes_dev_pt_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_PT_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TIA_FES_DEV_TEMP_DEF AFTER INSERT ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - UPDATE fes_dev_pt_temp_def SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - UPDATE fes_const_temp SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - UPDATE fes_data_block_temp SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), - DEV_TP_NAME = NEW.TAG_NAME - WHERE DEV_TP_NAME = OLD.TAG_NAME; - - /* - UPDATE fes_dev_info SET - DEV_TP_NAME = NEW.TAG_NAME, - DEV_TYPE_ID = NEW.DEV_TYPE_ID - WHERE DEV_TP_NAME = OLD.TAG_NAME; - */ - - --更新套件 - IF OLD.TAG_NAME != NEW.TAG_NAME THEN - BEGIN - UPDATE temp_plugin_fes_dev_map SET FES_TEMP_NAME = NEW.TAG_NAME WHERE FES_TEMP_NAME = OLD.TAG_NAME; - END; - END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TU_FES_DEV_TEMP_DEF AFTER UPDATE ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN - - DELETE FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = OLD.TAG_NAME; - DELETE FROM fes_const_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; - DELETE FROM fes_data_block_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; - --套件的处理 - DELETE FROM temp_plugin_fes_dev_map WHERE FES_TEMP_NAME = OLD.TAG_NAME; - /* - DELETE FROM fes_dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; - */ - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TD_FES_DEV_TEMP_DEF BEFORE DELETE ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_temp_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; -CREATE TRIGGER TDA_FES_DEV_TEMP_DEF AFTER DELETE ON fes_dev_temp_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TEMP_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_type_def', 'dev_type_id', '', NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TIA_FES_DEV_TYPE_DEF AFTER INSERT ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.DEV_TYPE_ID <> OLD.DEV_TYPE_ID THEN - BEGIN - UPDATE fes_dev_temp_def SET - DEV_TYPE_ID = NEW.DEV_TYPE_ID - WHERE DEV_TYPE_ID = OLD.DEV_TYPE_ID; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TU_FES_DEV_TYPE_DEF BEFORE UPDATE ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TUA_FES_DEV_TYPE_DEF AFTER UPDATE ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, '', getTableSubSystem('fes_dev_type_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_DEV_TYPE_DEF ON fes_dev_type_def; -CREATE TRIGGER TDA_FES_DEV_TYPE_DEF AFTER DELETE ON fes_dev_type_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TYPE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_DIGITAL() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TI_FES_DIGITAL'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.DigitalMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesDigitalTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO1 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO2 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO3 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO4 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO5 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.DigitalMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TI_FES_DIGITAL AFTER INSERT ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TU_FES_DIGITAL'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.DigitalMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesDigitalTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN - UPDATE digital_map_to_fes SET - DOT_NO1 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN - UPDATE digital_map_to_fes SET - DOT_NO2 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN - UPDATE digital_map_to_fes SET - DOT_NO3 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN - UPDATE digital_map_to_fes SET - DOT_NO4 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN - UPDATE digital_map_to_fes SET - DOT_NO5 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO1 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO2 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO3 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO4 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN - BEGIN - UPDATE digital_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO5 = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.DigitalMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TU_FES_DIGITAL BEFORE UPDATE ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DIGITAL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TUA_FES_DIGITAL AFTER UPDATE ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('DIGITAL_MAP_TO_FES update','In TD_FES_DIGITAL'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.DigitalMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesDigitalTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN - UPDATE digital_map_to_fes SET - DOT_NO1 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN - UPDATE digital_map_to_fes SET - DOT_NO2 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN - UPDATE digital_map_to_fes SET - DOT_NO3 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN - UPDATE digital_map_to_fes SET - DOT_NO4 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN - UPDATE digital_map_to_fes SET - DOT_NO5 = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.DigitalMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DIGITAL ON fes_digital; -CREATE TRIGGER TD_FES_DIGITAL AFTER DELETE ON fes_digital FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_DIGITAL_CTRL ON fes_digital_ctrl; -CREATE TRIGGER TIA_FES_DIGITAL_CTRL AFTER INSERT ON fes_digital_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_DIGITAL_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ -BEGIN - --更新关联了此点的遥控点 - - IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO - THEN - BEGIN - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO1 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO2 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO3 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO4 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO5 = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); - - END; - END IF; - - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_DIGITAL_CTRL ON fes_digital_ctrl; -CREATE TRIGGER TU_FES_DIGITAL_CTRL AFTER UPDATE ON fes_digital_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ -BEGIN - UPDATE digital_control SET - OFFSET_NO1 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO2 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO3 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO4 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); - - UPDATE digital_control SET - OFFSET_NO5 = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_DIGITAL_CTRL ON fes_digital_ctrl; -CREATE TRIGGER TD_FES_DIGITAL_CTRL AFTER DELETE ON fes_digital_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_MIX() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TI_FES_MIX'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.MixMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesMixTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE mix_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.MixMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_MIX ON fes_mix; -CREATE TRIGGER TI_FES_MIX AFTER INSERT ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME - AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO - THEN RETURN NEW; - END IF; - - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TU_FES_MIX'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.MixMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesMixTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE mix_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN - BEGIN - UPDATE mix_map_to_fes SET - RTU_TAG = NEW.RTU_TAG, - DOT_NO = NEW.DOT_NO - WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); - END; - END IF; - - END; - END IF; - - SET SESSION "disable.MixMapToFesTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_MIX ON fes_mix; -CREATE TRIGGER TU_FES_MIX BEFORE UPDATE ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_MIX() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_MIX ON fes_mix; -CREATE TRIGGER TUA_FES_MIX AFTER UPDATE ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - CALL kbdDebugInfo('MIX_MAP_TO_FES update','In TD_FES_MIX'); - --首先禁止MAP_TO_FES触发器动作 - SET SESSION "disable.MixMapToFesTrigger" = 1; - --然后询问自己是否已经被禁止 - SELECT CURRENT_SETTING('disable.FesMixTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN - UPDATE mix_map_to_fes SET - DOT_NO = '-1' - WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); - END IF; - - END; - END IF; - - SET SESSION "disable.MixMapToFesTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_MIX ON fes_mix; -CREATE TRIGGER TD_FES_MIX AFTER DELETE ON fes_mix FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_MIX(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_MIX_CTRL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_MIX_CTRL ON fes_mix_ctrl; -CREATE TRIGGER TIA_FES_MIX_CTRL AFTER INSERT ON fes_mix_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_MIX_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX_CTRL() RETURNS TRIGGER AS $$ -BEGIN - --更新关联了此点的遥控点 - - IF NEW.RTU_TAG = OLD.RTU_TAG AND NEW.DOT_NO= OLD.DOT_NO - THEN - BEGIN - UPDATE mix_control SET - RTU_TAG = NEW.RTU_TAG, - OFFSET_NO = NEW.DOT_NO - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - END; - END IF; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_MIX_CTRL ON fes_mix_ctrl; -CREATE TRIGGER TU_FES_MIX_CTRL AFTER UPDATE ON fes_mix_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_MIX_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX_CTRL() RETURNS TRIGGER AS $$ -BEGIN - UPDATE mix_control SET - OFFSET_NO = '-1' - WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix_ctrl')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_MIX_CTRL ON fes_mix_ctrl; -CREATE TRIGGER TD_FES_MIX_CTRL AFTER DELETE ON fes_mix_ctrl FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_MIX_CTRL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_protocol', 'protocol_id', '', NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TIA_FES_PROTOCOL AFTER INSERT ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.PROTOCOL_ID <> OLD.PROTOCOL_ID THEN - BEGIN - UPDATE fes_channel_para SET - PROTO_TYPE = NEW.PROTOCOL_ID - WHERE PROTO_TYPE = OLD.PROTOCOL_ID; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TU_FES_PROTOCOL BEFORE UPDATE ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TUA_FES_PROTOCOL AFTER UPDATE ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_PROTOCOL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, '', getTableSubSystem('fes_protocol')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_PROTOCOL ON fes_protocol; -CREATE TRIGGER TDA_FES_PROTOCOL AFTER DELETE ON fes_protocol FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_PROTOCOL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIB_FES_RTU_PARA() RETURNS TRIGGER AS $$ - DECLARE chNo decimal(10,0) DEFAULT 0; -BEGIN - NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); - - SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; - - NEW.CHAN_NO = chNo; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIB_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TIB_FES_RTU_PARA BEFORE INSERT ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIB_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN - /* - * 不再产生默认设备 -INSERT INTO fes_dev_info -(TAG_NAME, DEV_NAME, LOCATION_ID, SUB_SYSTEM, DEV_ID, DEV_TYPE_ID, RTU_TAG, DEV_DESC, RTU_NO, DEV_TP_NAME) VALUES -(concat(NEW.TAG_NAME, '.', 'defaultDev' ),'defaultDev',NEW.LOCATION_ID,NEW.SUB_SYSTEM,'-1', '-1' ,NEW.TAG_NAME,'默认设备',NEW.RTU_NO ,'' ); -*/ -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'fes_rtu_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TI_FES_RTU_PARA AFTER INSERT ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUB_FES_RTU_PARA() RETURNS TRIGGER AS $$ - DECLARE chNo decimal(10,0) DEFAULT 0; -BEGIN - IF NEW.RTU_NAME <> OLD.RTU_NAME OR NEW.CHAN_TAG <> OLD.CHAN_TAG THEN - NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); - END IF; - - IF NEW.CHAN_TAG <> OLD.CHAN_TAG THEN - BEGIN - SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; - NEW.CHAN_NO = chNo; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUB_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TUB_FES_RTU_PARA BEFORE UPDATE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUB_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN - -IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_NO <> OLD.RTU_NO OR NEW.DESCRIPTION <> OLD.DESCRIPTION -THEN -BEGIN - - - UPDATE fes_dev_info SET - TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)) , - DEV_DESC = DEV_DESC, - RTU_TAG = NEW.TAG_NAME, - RTU_NO = NEW.RTU_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE fes_data_block SET - RTU_NO = NEW.RTU_NO, - LOCATION_ID = NEW.LOCATION_ID, - SUB_SYSTEM = NEW.SUB_SYSTEM - WHERE RTU_NO = OLD.RTU_NO; - - IF NEW.RTU_NO <> OLD.RTU_NO THEN - BEGIN - UPDATE dev_group SET - RTU_NO = NEW.RTU_NO - WHERE RTU_NO = OLD.RTU_NO; - END; - END IF; - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - --更新关联的后台测点 - UPDATE accuml SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE analog SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE digital SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - UPDATE mix SET - RTU_TAG = NEW.TAG_NAME - WHERE RTU_TAG = OLD.TAG_NAME; - - - END; - END IF; - -END; -END IF; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TU_FES_RTU_PARA AFTER UPDATE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN -DELETE FROM fes_dev_info WHERE RTU_TAG = OLD.TAG_NAME; -DELETE FROM fes_data_block WHERE RTU_NO = OLD.RTU_NO; ---更新关联的后台测点 -UPDATE accuml SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE analog SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE digital SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -UPDATE mix SET -RTU_TAG = '' -WHERE RTU_TAG = OLD.TAG_NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TD_FES_RTU_PARA BEFORE DELETE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_FES_RTU_PARA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_rtu_para')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_FES_RTU_PARA ON fes_rtu_para; -CREATE TRIGGER TDA_FES_RTU_PARA AFTER DELETE ON fes_rtu_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_FES_RTU_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --仅仅修改时标 - - NEW.TIMEFLAG = floor(extract(epoch from now())); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TI_LINKAGE_ACTION BEFORE INSERT ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_action', 'name', '', NEW.NAME, getTableSubSystem('linkage_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TIA_LINKAGE_ACTION AFTER INSERT ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应功能 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_function SET - TIMEFLAG = NEW.TIMEFLAG, - ACTION_NAME = NEW.NAME - WHERE ACTION_NAME = OLD.NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TU_LINKAGE_ACTION BEFORE UPDATE ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TUA_LINKAGE_ACTION AFTER UPDATE ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此动作的功能 - DELETE FROM linkage_function WHERE ACTION_NAME = OLD.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_action', 'name', OLD.NAME, '', getTableSubSystem('linkage_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_ACTION ON linkage_action; -CREATE TRIGGER TD_LINKAGE_ACTION AFTER DELETE ON linkage_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.LinkageSettingTrigger" = 1; - - CALL kbdDebugInfo('linkage_define Insert','linkage_define Insert'); - - SELECT CURRENT_SETTING('disable.LinkageDefineTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = NEW.LINKAGE_NAME; - END; - END IF; - - SET SESSION "disable.LinkageSettingTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TI_LINKAGE_DEFINE BEFORE INSERT ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_define', 'linkage_name,func_name', '', concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TIA_LINKAGE_DEFINE AFTER INSERT ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.LinkageSettingTrigger" = 1; - - CALL kbdDebugInfo('linkage_define update','linkage_define update'); - - SELECT CURRENT_SETTING('disable.LinkageDefineTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = OLD.LINKAGE_NAME; - END; - END IF; - - SET SESSION "disable.LinkageSettingTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TU_LINKAGE_DEFINE BEFORE UPDATE ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TUA_LINKAGE_DEFINE AFTER UPDATE ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.LinkageSettingTrigger" = 1; - - CALL kbdDebugInfo('linkage_define delete','linkage_define delete'); - - SELECT CURRENT_SETTING('disable.LinkageDefineTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - UPDATE linkage_setting SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE NAME = OLD.LINKAGE_NAME; - END; - END IF; - - SET SESSION "disable.LinkageSettingTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('linkage_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_DEFINE ON linkage_define; -CREATE TRIGGER TD_LINKAGE_DEFINE AFTER DELETE ON linkage_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --仅仅修改时标 - NEW.TIMEFLAG = floor(extract(epoch from now())); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TI_LINKAGE_FUNCTION BEFORE INSERT ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TIA_LINKAGE_FUNCTION AFTER INSERT ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应联动功能关系表 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE linkage_define SET - TIMEFLAG = NEW.TIMEFLAG, - FUNC_NAME = NEW.NAME - WHERE FUNC_NAME = OLD.NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TU_LINKAGE_FUNCTION BEFORE UPDATE ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TUA_LINKAGE_FUNCTION AFTER UPDATE ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此功能的联动定义 - --检查功能是否被删除 - IF NOT EXISTS (SELECT * FROM linkage_function WHERE NAME = OLD.NAME) THEN - BEGIN - DELETE FROM linkage_define WHERE FUNC_NAME = OLD.NAME; - END; - ELSE - BEGIN - --修改时标 - UPDATE linkage_define SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE FUNC_NAME = OLD.NAME; - END; - END IF; - - - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('linkage_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_FUNCTION ON linkage_function; -CREATE TRIGGER TD_LINKAGE_FUNCTION AFTER DELETE ON linkage_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.LinkageDefineTrigger" = 1; - - CALL kbdDebugInfo('linkage_setting insert','linkage_setting insert'); - - SELECT CURRENT_SETTING('disable.LinkageSettingTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - END; - END IF; - - SET SESSION "disable.LinkageDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TI_LINKAGE_SETTING BEFORE INSERT ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_setting', 'name', '', NEW.NAME, getTableSubSystem('linkage_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TIA_LINKAGE_SETTING AFTER INSERT ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.LinkageDefineTrigger" = 1; - - CALL kbdDebugInfo('linkage_setting update','linkage_setting update'); - - SELECT CURRENT_SETTING('disable.LinkageSettingTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - IF NEW.NAME<>OLD.NAME THEN - UPDATE linkage_define SET - LINKAGE_NAME = NEW.NAME - WHERE LINKAGE_NAME = OLD.NAME; - END IF; - END; - END IF; - - SET SESSION "disable.LinkageDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TU_LINKAGE_SETTING BEFORE UPDATE ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'linkage_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TUA_LINKAGE_SETTING AFTER UPDATE ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --删除关联了此联动的功能关联 - --避免触发器循环 - SET SESSION "disable.LinkageDefineTrigger" = 1; - - CALL kbdDebugInfo('linkage_setting delete','linkage_setting delete'); - - SELECT CURRENT_SETTING('disable.LinkageSettingTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - DELETE FROM linkage_define WHERE LINKAGE_NAME = OLD.NAME; - END; - END IF; - - SET SESSION "disable.LinkageDefineTrigger" = 0; - - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_setting', 'name', OLD.NAME, '', getTableSubSystem('linkage_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_LINKAGE_SETTING ON linkage_setting; -CREATE TRIGGER TD_LINKAGE_SETTING AFTER DELETE ON linkage_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_LINKAGE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_MIX_CONTROL ON mix_control; -CREATE TRIGGER TIA_MIX_CONTROL AFTER INSERT ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN - - --修改功能名称 - IF COALESCE(NEW.RTU_TAG,'') = '' THEN - BEGIN - NEW.OFFSET_NO = '-1'; - END; - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_MIX_CONTROL ON mix_control; -CREATE TRIGGER TU_MIX_CONTROL BEFORE UPDATE ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_MIX_CONTROL ON mix_control; -CREATE TRIGGER TUA_MIX_CONTROL AFTER UPDATE ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_CONTROL() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_control')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_MIX_CONTROL ON mix_control; -CREATE TRIGGER TDA_MIX_CONTROL AFTER DELETE ON mix_control FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_MIX_CONTROL(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - CALL kbdDebugInfo('FES MIX update','In TI_MIX_MAP_TO_FES'); - - SET SESSION "disable.FesMixTrigger" = 1; - - SELECT CURRENT_SETTING('disable.MixMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - SET SESSION "disable.FesMixTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TI_MIX_MAP_TO_FES AFTER INSERT ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - IF NEW.RTU_TAG = OLD.RTU_TAG AND - NEW.DOT_NO = OLD.DOT_NO AND - NEW.KEY_ID_TAG = OLD.KEY_ID_TAG - THEN RETURN NEW; - END IF; - - - SET SESSION "disable.FesMixTrigger" = 1; - - SELECT CURRENT_SETTING('disable.MixMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - - - IF COALESCE(NEW.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(NEW.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), - APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), - APP_COLUMN_NAME='value' - WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); - END IF; - - END; - ELSE NEW.DOT_NO = '-1'; - END IF; - END; - END IF; - - SET SESSION "disable.FesMixTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TU_MIX_MAP_TO_FES BEFORE UPDATE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TUA_MIX_MAP_TO_FES AFTER UPDATE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - CALL kbdDebugInfo('FES MIX update','In TD_MIX_MAP_TO_FES'); - - SET SESSION "disable.FesMixTrigger" = 1; - - SELECT CURRENT_SETTING('disable.MixMapToFesTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - - IF COALESCE(OLD.RTU_TAG,'') <> '' THEN - BEGIN - IF COALESCE(OLD.DOT_NO,'') <> '' THEN - UPDATE fes_mix SET - APP_TABLE_NAME='', - APP_TAG_NAME='', - APP_COLUMN_NAME='' - WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); - END IF; - - END; - END IF; - END; - END IF; - - SET SESSION "disable.FesMixTrigger" = 0; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TD_MIX_MAP_TO_FES BEFORE DELETE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('mix_map_to_fes')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_MIX_MAP_TO_FES ON mix_map_to_fes; -CREATE TRIGGER TDA_MIX_MAP_TO_FES AFTER DELETE ON mix_map_to_fes FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_MIX_MAP_TO_FES(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - INSERT INTO mix( - TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, METHOD, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID) SELECT - concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, '0', '0', '', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,'', '' - FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; -*/ - - INSERT INTO temp_plugin_point_map_mix - (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) - SELECT - PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' - FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'mix_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TI_MIX_TEMP_DEFINE AFTER INSERT ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - /* - UPDATE mix SET - TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), - DESCRIPTION = NEW.DESCRIPTION, - SEQ_NO = NEW.SEQ_NO, - IS_CONTROL = NEW.IS_CONTROL, - STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, - ALARM_PRIORITY = NEW.ALARM_PRIORITY, - ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, - IS_WATER_ALM = NEW.IS_WATER_ALM, - IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, - DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, - IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, - POINT_TP_NAME = NEW.TAG_NAME, - IS_SAMPLE = NEW.IS_SAMPLE, - IS_STATISTICS = NEW.IS_STATISTICS, - SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, - POINT_TYPE = NEW.POINT_TYPE, - POINT_CLASS = NEW.POINT_CLASS, - POINT_PROPERTY = NEW.POINT_PROPERTY, - POINT_SORT = NEW.POINT_SORT - WHERE POINT_TP_NAME=OLD.TAG_NAME; - - UPDATE mix_control SET - CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, - CTRL_TYPE = NEW.CTRL_TYPE, - IS_TAGT_STATE = NEW.IS_TAGT_STATE, - CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, - RESV_TIMEOUT = NEW.RESV_TIMEOUT, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - POINT_TP_NAME = NEW.TAG_NAME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - - UPDATE mix_map_to_fes SET - POINT_TP_NAME = NEW.TAG_NAME, - BASE = NEW.BASE, - COEFF = NEW.COEFF, - RANGE_UP = NEW.RANGE_UP, - RANGE_LOW = NEW.RANGE_LOW, - IS_FILTER_ERROR = NEW.IS_FILTER_ERROR, - IS_FILTER_DISTURB = NEW.IS_FILTER_DISTURB, - DISTURB_TIME = NEW.DISTURB_TIME - WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ - - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - UPDATE temp_plugin_point_map_mix - SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) - WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TU_MIX_TEMP_DEFINE AFTER UPDATE ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM temp_plugin_point_map_mix WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); - /* - DELETE FROM mix WHERE POINT_TP_NAME = OLD.TAG_NAME; - */ -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TD_MIX_TEMP_DEFINE BEFORE DELETE ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_temp_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_MIX_TEMP_DEFINE ON mix_temp_define; -CREATE TRIGGER TDA_MIX_TEMP_DEFINE AFTER DELETE ON mix_temp_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_MIX_TEMP_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('opc_config_define')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_DEFINE ON opc_config_define; -CREATE TRIGGER TIA_OPC_CONFIG_DEFINE AFTER INSERT ON opc_config_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('opc_config_define')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_DEFINE ON opc_config_define; -CREATE TRIGGER TUA_OPC_CONFIG_DEFINE AFTER UPDATE ON opc_config_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('opc_config_define')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_DEFINE ON opc_config_define; -CREATE TRIGGER TDA_OPC_CONFIG_DEFINE AFTER DELETE ON opc_config_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_version', 'domain_id,sub_system', '', concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_VERSION ON opc_config_version; -CREATE TRIGGER TIA_OPC_CONFIG_VERSION AFTER INSERT ON opc_config_version FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_VERSION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_VERSION ON opc_config_version; -CREATE TRIGGER TUA_OPC_CONFIG_VERSION AFTER UPDATE ON opc_config_version FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_VERSION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), '', getTableSubSystem('opc_config_version')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_VERSION ON opc_config_version; -CREATE TRIGGER TDA_OPC_CONFIG_VERSION AFTER DELETE ON opc_config_version FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_VERSION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_area_info', 'id', '', NEW.ID, getTableSubSystem('pa_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_AREA_INFO ON pa_area_info; -CREATE TRIGGER TIA_PA_AREA_INFO AFTER INSERT ON pa_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_AREA_INFO ON pa_area_info; -CREATE TRIGGER TUA_PA_AREA_INFO AFTER UPDATE ON pa_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_area_info', 'id', OLD.ID, '', getTableSubSystem('pa_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_AREA_INFO ON pa_area_info; -CREATE TRIGGER TDA_PA_AREA_INFO AFTER DELETE ON pa_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_audio_info', 'id', '', NEW.ID, getTableSubSystem('pa_audio_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_AUDIO_INFO ON pa_audio_info; -CREATE TRIGGER TIA_PA_AUDIO_INFO AFTER INSERT ON pa_audio_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_AUDIO_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_audio_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_audio_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_AUDIO_INFO ON pa_audio_info; -CREATE TRIGGER TUA_PA_AUDIO_INFO AFTER UPDATE ON pa_audio_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_AUDIO_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_audio_info', 'id', OLD.ID, '', getTableSubSystem('pa_audio_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_AUDIO_INFO ON pa_audio_info; -CREATE TRIGGER TDA_PA_AUDIO_INFO AFTER DELETE ON pa_audio_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_AUDIO_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_broadcast_group', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_BROADCAST_GROUP ON pa_broadcast_group; -CREATE TRIGGER TIA_PA_BROADCAST_GROUP AFTER INSERT ON pa_broadcast_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_BROADCAST_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_BROADCAST_GROUP ON pa_broadcast_group; -CREATE TRIGGER TUA_PA_BROADCAST_GROUP AFTER UPDATE ON pa_broadcast_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_BROADCAST_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_broadcast_group')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_BROADCAST_GROUP ON pa_broadcast_group; -CREATE TRIGGER TDA_PA_BROADCAST_GROUP AFTER DELETE ON pa_broadcast_group FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_BROADCAST_GROUP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_CTRL_PARAM ON pa_ctrl_param; -CREATE TRIGGER TIA_PA_CTRL_PARAM AFTER INSERT ON pa_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_CTRL_PARAM ON pa_ctrl_param; -CREATE TRIGGER TUA_PA_CTRL_PARAM AFTER UPDATE ON pa_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_ctrl_param')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_CTRL_PARAM ON pa_ctrl_param; -CREATE TRIGGER TDA_PA_CTRL_PARAM AFTER DELETE ON pa_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_LOCATION_AREA_DEF ON pa_location_area_def; -CREATE TRIGGER TIA_PA_LOCATION_AREA_DEF AFTER INSERT ON pa_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_LOCATION_AREA_DEF ON pa_location_area_def; -CREATE TRIGGER TUA_PA_LOCATION_AREA_DEF AFTER UPDATE ON pa_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pa_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_LOCATION_AREA_DEF ON pa_location_area_def; -CREATE TRIGGER TDA_PA_LOCATION_AREA_DEF AFTER DELETE ON pa_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_seq_def', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; -CREATE TRIGGER TIA_PA_LOCATION_SEQ_DEF AFTER INSERT ON pa_location_seq_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_SEQ_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; -CREATE TRIGGER TUA_PA_LOCATION_SEQ_DEF AFTER UPDATE ON pa_location_seq_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_SEQ_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_location_seq_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; -CREATE TRIGGER TDA_PA_LOCATION_SEQ_DEF AFTER DELETE ON pa_location_seq_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_SEQ_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_def', 'id', '', NEW.ID, getTableSubSystem('pa_operator_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_DEF ON pa_operator_def; -CREATE TRIGGER TIA_PA_OPERATOR_DEF AFTER INSERT ON pa_operator_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_def', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_operator_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_DEF ON pa_operator_def; -CREATE TRIGGER TUA_PA_OPERATOR_DEF AFTER UPDATE ON pa_operator_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_def', 'id', OLD.ID, '', getTableSubSystem('pa_operator_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_DEF ON pa_operator_def; -CREATE TRIGGER TDA_PA_OPERATOR_DEF AFTER DELETE ON pa_operator_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_map', 'user_grp_id', '', NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_MAP ON pa_operator_map; -CREATE TRIGGER TIA_PA_OPERATOR_MAP AFTER INSERT ON pa_operator_map FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_MAP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_MAP ON pa_operator_map; -CREATE TRIGGER TUA_PA_OPERATOR_MAP AFTER UPDATE ON pa_operator_map FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_MAP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, '', getTableSubSystem('pa_operator_map')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_MAP ON pa_operator_map; -CREATE TRIGGER TDA_PA_OPERATOR_MAP AFTER DELETE ON pa_operator_map FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_MAP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pa_timed_audio', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PA_TIMED_AUDIO ON pa_timed_audio; -CREATE TRIGGER TIA_PA_TIMED_AUDIO AFTER INSERT ON pa_timed_audio FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PA_TIMED_AUDIO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PA_TIMED_AUDIO ON pa_timed_audio; -CREATE TRIGGER TUA_PA_TIMED_AUDIO AFTER UPDATE ON pa_timed_audio FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PA_TIMED_AUDIO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_timed_audio')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PA_TIMED_AUDIO ON pa_timed_audio; -CREATE TRIGGER TDA_PA_TIMED_AUDIO AFTER DELETE ON pa_timed_audio FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PA_TIMED_AUDIO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_area_info', 'id', '', NEW.ID, getTableSubSystem('pis_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_AREA_INFO ON pis_area_info; -CREATE TRIGGER TIA_PIS_AREA_INFO AFTER INSERT ON pis_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pis_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_AREA_INFO ON pis_area_info; -CREATE TRIGGER TUA_PIS_AREA_INFO AFTER UPDATE ON pis_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_area_info', 'id', OLD.ID, '', getTableSubSystem('pis_area_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_AREA_INFO ON pis_area_info; -CREATE TRIGGER TDA_PIS_AREA_INFO AFTER DELETE ON pis_area_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_AREA_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'pis_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_CTRL_PARAM ON pis_ctrl_param; -CREATE TRIGGER TIA_PIS_CTRL_PARAM AFTER INSERT ON pis_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_CTRL_PARAM ON pis_ctrl_param; -CREATE TRIGGER TUA_PIS_CTRL_PARAM AFTER UPDATE ON pis_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pis_ctrl_param')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_CTRL_PARAM ON pis_ctrl_param; -CREATE TRIGGER TDA_PIS_CTRL_PARAM AFTER DELETE ON pis_ctrl_param FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_CTRL_PARAM(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_display_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_DISPLAY_INFO ON pis_display_info; -CREATE TRIGGER TIA_PIS_DISPLAY_INFO AFTER INSERT ON pis_display_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_DISPLAY_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_DISPLAY_INFO ON pis_display_info; -CREATE TRIGGER TUA_PIS_DISPLAY_INFO AFTER UPDATE ON pis_display_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_DISPLAY_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_display_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_DISPLAY_INFO ON pis_display_info; -CREATE TRIGGER TDA_PIS_DISPLAY_INFO AFTER DELETE ON pis_display_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_DISPLAY_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_fes_location_info', 'pis_station_id', '', NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; -CREATE TRIGGER TIA_PIS_FES_LOCATION_INFO AFTER INSERT ON pis_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; -CREATE TRIGGER TUA_PIS_FES_LOCATION_INFO AFTER UPDATE ON pis_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, '', getTableSubSystem('pis_fes_location_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; -CREATE TRIGGER TDA_PIS_FES_LOCATION_INFO AFTER DELETE ON pis_fes_location_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_FES_LOCATION_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; -CREATE TRIGGER TIA_PIS_LOCATION_AREA_DEF AFTER INSERT ON pis_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; -CREATE TRIGGER TUA_PIS_LOCATION_AREA_DEF AFTER UPDATE ON pis_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pis_location_area_def')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; -CREATE TRIGGER TDA_PIS_LOCATION_AREA_DEF AFTER DELETE ON pis_location_area_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_LOCATION_AREA_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'pis_message_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_PIS_MESSAGE_INFO ON pis_message_info; -CREATE TRIGGER TIA_PIS_MESSAGE_INFO AFTER INSERT ON pis_message_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_PIS_MESSAGE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_PIS_MESSAGE_INFO ON pis_message_info; -CREATE TRIGGER TUA_PIS_MESSAGE_INFO AFTER UPDATE ON pis_message_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_PIS_MESSAGE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_message_info')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_PIS_MESSAGE_INFO ON pis_message_info; -CREATE TRIGGER TDA_PIS_MESSAGE_INFO AFTER DELETE ON pis_message_info FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_PIS_MESSAGE_INFO(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_DATASET() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_dataset', 'id', '', NEW.id, getTableSubSystem('scl_dataset')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_DATASET ON scl_dataset; -CREATE TRIGGER TIA_SCL_DATASET AFTER INSERT ON scl_dataset FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_DATASET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_DATASET() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_dataset', 'id', OLD.id, NEW.id, getTableSubSystem('scl_dataset')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_DATASET ON scl_dataset; -CREATE TRIGGER TUA_SCL_DATASET AFTER UPDATE ON scl_dataset FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_DATASET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_DATASET() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_dataset', 'id', OLD.id, '', getTableSubSystem('scl_dataset')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_DATASET ON scl_dataset; -CREATE TRIGGER TDA_SCL_DATASET AFTER DELETE ON scl_dataset FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_DATASET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_FCDA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_fcda', 'id', '', NEW.id, getTableSubSystem('scl_fcda')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_FCDA ON scl_fcda; -CREATE TRIGGER TIA_SCL_FCDA AFTER INSERT ON scl_fcda FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_FCDA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_FCDA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_fcda', 'id', OLD.id, NEW.id, getTableSubSystem('scl_fcda')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_FCDA ON scl_fcda; -CREATE TRIGGER TUA_SCL_FCDA AFTER UPDATE ON scl_fcda FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_FCDA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_FCDA() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_fcda', 'id', OLD.id, '', getTableSubSystem('scl_fcda')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_FCDA ON scl_fcda; -CREATE TRIGGER TDA_SCL_FCDA AFTER DELETE ON scl_fcda FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_FCDA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_LCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_lcb', 'id', '', NEW.id, getTableSubSystem('scl_lcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_LCB ON scl_lcb; -CREATE TRIGGER TIA_SCL_LCB AFTER INSERT ON scl_lcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_LCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_LCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_lcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_lcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_LCB ON scl_lcb; -CREATE TRIGGER TUA_SCL_LCB AFTER UPDATE ON scl_lcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_LCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_LCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_lcb', 'id', OLD.id, '', getTableSubSystem('scl_lcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_LCB ON scl_lcb; -CREATE TRIGGER TDA_SCL_LCB AFTER DELETE ON scl_lcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_LCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_rcb', 'id', '', NEW.id, getTableSubSystem('scl_rcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_RCB ON scl_rcb; -CREATE TRIGGER TIA_SCL_RCB AFTER INSERT ON scl_rcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_RCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_rcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_rcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_RCB ON scl_rcb; -CREATE TRIGGER TUA_SCL_RCB AFTER UPDATE ON scl_rcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_RCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_rcb', 'id', OLD.id, '', getTableSubSystem('scl_rcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_RCB ON scl_rcb; -CREATE TRIGGER TDA_SCL_RCB AFTER DELETE ON scl_rcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_RCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RUNTIME() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_runtime', 'id', '', NEW.id, getTableSubSystem('scl_runtime')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_RUNTIME ON scl_runtime; -CREATE TRIGGER TIA_SCL_RUNTIME AFTER INSERT ON scl_runtime FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_RUNTIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RUNTIME() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_runtime', 'id', OLD.id, NEW.id, getTableSubSystem('scl_runtime')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_RUNTIME ON scl_runtime; -CREATE TRIGGER TUA_SCL_RUNTIME AFTER UPDATE ON scl_runtime FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_RUNTIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RUNTIME() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_runtime', 'id', OLD.id, '', getTableSubSystem('scl_runtime')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_RUNTIME ON scl_runtime; -CREATE TRIGGER TDA_SCL_RUNTIME AFTER DELETE ON scl_runtime FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_RUNTIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_SGCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'scl_sgcb', 'id', '', NEW.id, getTableSubSystem('scl_sgcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SCL_SGCB ON scl_sgcb; -CREATE TRIGGER TIA_SCL_SGCB AFTER INSERT ON scl_sgcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SCL_SGCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_SGCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'scl_sgcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_sgcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SCL_SGCB ON scl_sgcb; -CREATE TRIGGER TUA_SCL_SGCB AFTER UPDATE ON scl_sgcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SCL_SGCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_SGCB() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'scl_sgcb', 'id', OLD.id, '', getTableSubSystem('scl_sgcb')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_SCL_SGCB ON scl_sgcb; -CREATE TRIGGER TDA_SCL_SGCB AFTER DELETE ON scl_sgcb FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_SCL_SGCB(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TI_SEQUENCE_ACTION BEFORE INSERT ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_action', 'name', '', NEW.NAME, getTableSubSystem('sequence_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TIA_SEQUENCE_ACTION AFTER INSERT ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应功能 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_function SET - TIMEFLAG = NEW.TIMEFLAG, - ACTION_NAME = NEW.NAME - WHERE ACTION_NAME = OLD.NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TU_SEQUENCE_ACTION BEFORE UPDATE ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TUA_SEQUENCE_ACTION AFTER UPDATE ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此动作的功能 - DELETE FROM sequence_function WHERE ACTION_NAME = OLD.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_action', 'name', OLD.NAME, '', getTableSubSystem('sequence_action')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_ACTION ON sequence_action; -CREATE TRIGGER TD_SEQUENCE_ACTION AFTER DELETE ON sequence_action FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_ACTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.SequenceSettingTrigger" = 1; - - CALL kbdDebugInfo('sequence_define Insert','sequence_define Insert'); - - SELECT CURRENT_SETTING('disable.SequenceDefineTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = NEW.SEQ_NAME; - END; - END IF; - - SET SESSION "disable.SequenceSettingTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TI_SEQUENCE_DEFINE BEFORE INSERT ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_define', 'seq_name,func_name', '', concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TIA_SEQUENCE_DEFINE AFTER INSERT ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.SequenceSettingTrigger" = 1; - - CALL kbdDebugInfo('sequence_define update','sequence_define update'); - - SELECT CURRENT_SETTING('disable.SequenceDefineTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_setting SET - TIMEFLAG = NEW.TIMEFLAG - WHERE NAME = OLD.SEQ_NAME; - END; - END IF; - - SET SESSION "disable.SequenceSettingTrigger" = 0; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TU_SEQUENCE_DEFINE BEFORE UPDATE ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TUA_SEQUENCE_DEFINE AFTER UPDATE ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.SequenceSettingTrigger" = 1; - - CALL kbdDebugInfo('sequence_define delete','sequence_define delete'); - - SELECT CURRENT_SETTING('disable.SequenceDefineTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - UPDATE sequence_setting SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE NAME = OLD.SEQ_NAME; - END; - END IF; - - SET SESSION "disable.SequenceSettingTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('sequence_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_DEFINE ON sequence_define; -CREATE TRIGGER TD_SEQUENCE_DEFINE AFTER DELETE ON sequence_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --仅仅修改时标 - NEW.TIMEFLAG = floor(extract(epoch from now())); - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TI_SEQUENCE_FUNCTION BEFORE INSERT ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - UPDATE sequence_define SET - TIMEFLAG = NEW.TIMEFLAG - WHERE FUNC_NAME = NEW.NAME; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TIA_SEQUENCE_FUNCTION AFTER INSERT ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --修改对应联动功能关系表 - NEW.TIMEFLAG = floor(extract(epoch from now())); - UPDATE sequence_define SET - TIMEFLAG = NEW.TIMEFLAG, - FUNC_NAME = NEW.NAME - WHERE FUNC_NAME = OLD.NAME; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TU_SEQUENCE_FUNCTION BEFORE UPDATE ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TUA_SEQUENCE_FUNCTION AFTER UPDATE ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ -BEGIN - --删除关联了此功能的联动定义 - --检查功能是否被删除 - IF NOT EXISTS (SELECT * FROM sequence_function WHERE NAME = OLD.NAME) THEN - BEGIN - DELETE FROM sequence_define WHERE FUNC_NAME = OLD.NAME; - END; - ELSE - BEGIN - --修改时标 - UPDATE sequence_define SET - TIMEFLAG = floor(extract(epoch from now())) - WHERE FUNC_NAME = OLD.NAME; - END; - END IF; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('sequence_function')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_FUNCTION ON sequence_function; -CREATE TRIGGER TD_SEQUENCE_FUNCTION AFTER DELETE ON sequence_function FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_FUNCTION(); - - - -CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --仅仅修改时标 - --避免触发器循环 - SET SESSION "disable.SequenceDefineTrigger" = 1; - - CALL kbdDebugInfo('sequence_setting insert','sequence_setting insert'); - - SELECT CURRENT_SETTING('disable.SequenceSettingTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - END; - END IF; - - SET SESSION "disable.SequenceDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TI_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TI_SEQUENCE_SETTING BEFORE INSERT ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TI_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_setting', 'name', '', NEW.NAME, getTableSubSystem('sequence_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TIA_SEQUENCE_SETTING AFTER INSERT ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --修改对应联动功能关系表 - --避免触发器循环 - SET SESSION "disable.SequenceDefineTrigger" = 1; - - CALL kbdDebugInfo('sequence_setting update','sequence_setting update'); - - SELECT CURRENT_SETTING('disable.SequenceSettingTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - NEW.TIMEFLAG = floor(extract(epoch from now())); - IF NEW.NAME<>OLD.NAME THEN - UPDATE sequence_define SET - SEQ_NAME = NEW.NAME - WHERE SEQ_NAME = OLD.NAME; - END IF; - END; - END IF; - - SET SESSION "disable.SequenceDefineTrigger" = 0; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TU_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TU_SEQUENCE_SETTING BEFORE UPDATE ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TU_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'sequence_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TUA_SEQUENCE_SETTING AFTER UPDATE ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ -DECLARE flag int; -BEGIN - --删除关联了此联动的功能关联 - --避免触发器循环 - SET SESSION "disable.SequenceDefineTrigger" = 1; - - CALL kbdDebugInfo('sequence_setting delete','sequence_setting delete'); - - SELECT CURRENT_SETTING('disable.SequenceSettingTrigger') INTO flag; - IF flag = 0 THEN - BEGIN - DELETE FROM sequence_define WHERE SEQ_NAME = OLD.NAME; - END; - END IF; - - SET SESSION "disable.SequenceDefineTrigger" = 0; - -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_setting', 'name', OLD.NAME, '', getTableSubSystem('sequence_setting')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TD_SEQUENCE_SETTING ON sequence_setting; -CREATE TRIGGER TD_SEQUENCE_SETTING AFTER DELETE ON sequence_setting FOR EACH ROW -EXECUTE PROCEDURE FUNC_TD_SEQUENCE_SETTING(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_DEF() RETURNS TRIGGER AS $$ -BEGIN - - --插入测点分组表 - --插入测点表 - --插入时间测点变 - --插入返回分组表 - --插入返回参数表 - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) , DESCRIPTION, NEW.INST_TAG, SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG, LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, '', SORT, '', NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 1; - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, floor(extract(epoch from now())),SORT, '', NEW.INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 2; - - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, NEW.INST_TAG,SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG, LOCATION_ID, SUB_SYSTEM) - SELECT - concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, 1, '', SORT, '', 0, 0, NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM - FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_def', 'inst_tag', '', NEW.INST_TAG, getTableSubSystem('stat_inst_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_DEF ON stat_inst_def; -CREATE TRIGGER TIA_STAT_INST_DEF AFTER INSERT ON stat_inst_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_DEF() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.INST_TAG <> OLD.INST_TAG THEN - BEGIN - UPDATE stat_inst_para_grp - SET INST_TAG = NEW.INST_TAG, - PARA_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_GRP_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_para_point - SET INST_TAG = NEW.INST_TAG, - PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_para_time - SET INST_TAG = NEW.INST_TAG, - PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_ret_grp - SET INST_TAG = NEW.INST_TAG, - RET_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_GRP_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - UPDATE stat_inst_ret_para - SET INST_TAG = NEW.INST_TAG, - RET_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)) - WHERE INST_TAG = OLD.INST_TAG; - - END; - END IF; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, NEW.INST_TAG, getTableSubSystem('stat_inst_def')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_DEF ON stat_inst_def; -CREATE TRIGGER TUA_STAT_INST_DEF AFTER UPDATE ON stat_inst_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_DEF() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM stat_inst_para_grp WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_para_point WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_para_time WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_ret_grp WHERE INST_TAG = OLD.INST_TAG; - DELETE FROM stat_inst_ret_para WHERE INST_TAG = OLD.INST_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, '', getTableSubSystem('stat_inst_def')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_DEF ON stat_inst_def; -CREATE TRIGGER TDA_STAT_INST_DEF AFTER DELETE ON stat_inst_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_grp', 'para_grp_tag', '', NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_GRP ON stat_inst_para_grp; -CREATE TRIGGER TIA_STAT_INST_PARA_GRP AFTER INSERT ON stat_inst_para_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.PARA_GRP_TAG = OLD.PARA_GRP_TAG - THEN RETURN NEW; - END IF; - - UPDATE stat_inst_para_point - SET PARA_GRP_TAG = NEW.PARA_GRP_TAG - WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - UPDATE stat_inst_para_time - SET PARA_GRP_TAG = NEW.PARA_GRP_TAG - WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_GRP ON stat_inst_para_grp; -CREATE TRIGGER TUA_STAT_INST_PARA_GRP AFTER UPDATE ON stat_inst_para_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM stat_inst_para_point WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - DELETE FROM stat_inst_para_time WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, '', getTableSubSystem('stat_inst_para_grp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_GRP ON stat_inst_para_grp; -CREATE TRIGGER TDA_STAT_INST_PARA_GRP AFTER DELETE ON stat_inst_para_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_point', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_POINT ON stat_inst_para_point; -CREATE TRIGGER TIA_STAT_INST_PARA_POINT AFTER INSERT ON stat_inst_para_point FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_POINT(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_POINT ON stat_inst_para_point; -CREATE TRIGGER TUA_STAT_INST_PARA_POINT AFTER UPDATE ON stat_inst_para_point FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_POINT(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_point')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_POINT ON stat_inst_para_point; -CREATE TRIGGER TDA_STAT_INST_PARA_POINT AFTER DELETE ON stat_inst_para_point FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_POINT(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_time', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_TIME ON stat_inst_para_time; -CREATE TRIGGER TIA_STAT_INST_PARA_TIME AFTER INSERT ON stat_inst_para_time FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_TIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_TIME ON stat_inst_para_time; -CREATE TRIGGER TUA_STAT_INST_PARA_TIME AFTER UPDATE ON stat_inst_para_time FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_TIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_time')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_TIME ON stat_inst_para_time; -CREATE TRIGGER TDA_STAT_INST_PARA_TIME AFTER DELETE ON stat_inst_para_time FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_TIME(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_grp', 'ret_grp_tag', '', NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_GRP ON stat_inst_ret_grp; -CREATE TRIGGER TIA_STAT_INST_RET_GRP AFTER INSERT ON stat_inst_ret_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ -BEGIN - - IF NEW.RET_GRP_TAG = OLD.RET_GRP_TAG - THEN RETURN NEW; - END IF; - - UPDATE stat_inst_ret_para - SET PARA_GRP_TAG = NEW.RET_GRP_TAG - WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_GRP ON stat_inst_ret_grp; -CREATE TRIGGER TUA_STAT_INST_RET_GRP AFTER UPDATE ON stat_inst_ret_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ -BEGIN - DELETE FROM stat_inst_ret_para WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, '', getTableSubSystem('stat_inst_ret_grp')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_GRP ON stat_inst_ret_grp; -CREATE TRIGGER TDA_STAT_INST_RET_GRP AFTER DELETE ON stat_inst_ret_grp FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_GRP(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_para', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_PARA ON stat_inst_ret_para; -CREATE TRIGGER TIA_STAT_INST_RET_PARA AFTER INSERT ON stat_inst_ret_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_PARA ON stat_inst_ret_para; -CREATE TRIGGER TUA_STAT_INST_RET_PARA AFTER UPDATE ON stat_inst_ret_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_inst_ret_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_PARA ON stat_inst_ret_para; -CREATE TRIGGER TDA_STAT_INST_RET_PARA AFTER DELETE ON stat_inst_ret_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('STAT_LINK_DEF')); - END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_LINK_DEF ON STAT_LINK_DEF; -CREATE TRIGGER TIA_STAT_LINK_DEF AFTER INSERT ON STAT_LINK_DEF FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ -BEGIN - IF NEW.TAG_NAME <> OLD.TAG_NAME THEN - BEGIN - UPDATE stat_link_para - SET LINK_TAG = NEW.TAG_NAME, - TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) - WHERE LINK_TAG = OLD.TAG_NAME; - UPDATE stat_link_ret - SET LINK_TAG = NEW.TAG_NAME, - TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) - WHERE LINK_TAG = OLD.TAG_NAME; - - END; - END IF; - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_def')); - END IF; - UPDATE stat_link_para - SET STAT_PARA_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_PARA_TAG)) - WHERE LINK_TAG = OLD.TAG_NAME; - UPDATE stat_link_ret - SET STAT_RET_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_RET_TAG)) - WHERE LINK_TAG = OLD.TAG_NAME; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_LINK_DEF ON stat_link_def; -CREATE TRIGGER TUA_STAT_LINK_DEF AFTER UPDATE ON stat_link_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ -BEGIN - --删除对应的模板点 - DELETE FROM stat_link_para WHERE LINK_TAG= OLD.TAG_NAME; - DELETE FROM stat_link_ret WHERE LINK_TAG = OLD.TAG_NAME; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_def')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_LINK_DEF ON stat_link_def; -CREATE TRIGGER TDA_STAT_LINK_DEF AFTER DELETE ON stat_link_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_LINK_PARA ON stat_link_para; -CREATE TRIGGER TIA_STAT_LINK_PARA AFTER INSERT ON stat_link_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_LINK_PARA ON stat_link_para; -CREATE TRIGGER TUA_STAT_LINK_PARA AFTER UPDATE ON stat_link_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_para')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_LINK_PARA ON stat_link_para; -CREATE TRIGGER TDA_STAT_LINK_PARA AFTER DELETE ON stat_link_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_RET() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_ret', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_LINK_RET ON stat_link_ret; -CREATE TRIGGER TIA_STAT_LINK_RET AFTER INSERT ON stat_link_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_RET() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_LINK_RET ON stat_link_ret; -CREATE TRIGGER TUA_STAT_LINK_RET AFTER UPDATE ON stat_link_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_RET() RETURNS TRIGGER AS $$ -BEGIN - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_ret')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_LINK_RET ON stat_link_ret; -CREATE TRIGGER TDA_STAT_LINK_RET AFTER DELETE ON stat_link_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_def', 'template_tag', '', NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); - END IF; - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_DEF ON stat_template_def; -CREATE TRIGGER TIA_STAT_TEMPLATE_DEF AFTER INSERT ON stat_template_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ -BEGIN - UPDATE stat_template_para - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, - PARA_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(PARA_TAG)) - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - UPDATE stat_template_ret - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, - RET_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(RET_TAG)) - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - UPDATE stat_inst_def - SET TEMPLATE_TAG = NEW.TEMPLATE_TAG - WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - UPDATE stat_link_def - SET STAT_TEMP_TAG = NEW.TEMPLATE_TAG - WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_DEF ON stat_template_def; -CREATE TRIGGER TUA_STAT_TEMPLATE_DEF AFTER UPDATE ON stat_template_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ -BEGIN - --删除对应关联 - DELETE FROM stat_link_def WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; - - --删除对应实例 - DELETE FROM stat_inst_def WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - --删除对应的模板点 - DELETE FROM stat_template_para WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - DELETE FROM stat_template_ret WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, '', getTableSubSystem('stat_template_def')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_DEF ON stat_template_def; -CREATE TRIGGER TDA_STAT_TEMPLATE_DEF AFTER DELETE ON stat_template_def FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_DEF(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ -BEGIN - --插入对应的实例 - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; - - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_para', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_template_para')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_PARA ON stat_template_para; -CREATE TRIGGER TIA_STAT_TEMPLATE_PARA AFTER INSERT ON stat_template_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ -BEGIN - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_para', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_template_para')); - END IF; - - UPDATE stat_link_para - SET STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) - WHERE STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.PARA_TAG)); - - IF OLD.PARA_TAG = NEW.PARA_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.TYPE = NEW.TYPE - AND OLD.SORT = NEW.SORT - THEN RETURN NEW; - END IF; - - - --更新对应的实例点 - --考虑从分组到不分组,从测点类型到时间类型,需删除旧的数据 - IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN - BEGIN - DELETE FROM stat_inst_para_grp USING stat_inst_def,stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - IF NEW.TYPE = 1 THEN - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; - ELSEIF NEW.TYPE = 2 THEN - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; - END IF; - END; - ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN - BEGIN - IF OLD.TYPE = 1 THEN - DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - ELSEIF OLD.TYPE = 2 THEN - DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - END IF; - - INSERT INTO stat_inst_para_grp - (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN - BEGIN - IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN - BEGIN - DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - INSERT INTO stat_inst_para_time - (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; - END; - ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN - BEGIN - DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - INSERT INTO stat_inst_para_point - (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; - END; - ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 1 THEN - update stat_inst_def - SET stat_inst_para_point.PARA_TAG = concat(stat_inst_para_point.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), stat_inst_para_point.DESCRIPTION = NEW.DESCRIPTION, stat_inst_para_point.SORT = NEW.SORT - from stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_point.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 2 THEN - update stat_inst_def - SET stat_inst_para_time.PARA_TAG = concat(stat_inst_para_time.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), stat_inst_para_time.DESCRIPTION = NEW.DESCRIPTION, stat_inst_para_time.SORT = NEW.SORT - from stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_time.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - END IF; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN - BEGIN - IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN - BEGIN - DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_grp,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - AND stat_inst_para_point.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; - END; - ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN - BEGIN - DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_grp,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) - AND stat_inst_para_time.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; - END; - END IF; - - - update stat_inst_def - SET stat_inst_para_grp.PARA_GRP_TAG = concat(stat_inst_para_grp.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), stat_inst_para_grp.DESCRIPTION = NEW.DESCRIPTION, stat_inst_para_grp.SORT = NEW.SORT - from stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG AND getAfterLastDot(PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - END; - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_PARA ON stat_template_para; -CREATE TRIGGER TUA_STAT_TEMPLATE_PARA AFTER UPDATE ON stat_template_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ -BEGIN - --删除相应的实例点 - DELETE FROM stat_inst_para_grp USING stat_inst_def,stat_inst_para_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); - - DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_point - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - - DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_time - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); - DELETE FROM stat_link_para - WHERE STAT_PARA_TAG = OLD.PARA_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_para', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_template_para')); - END IF; - - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_PARA ON stat_template_para; -CREATE TRIGGER TDA_STAT_TEMPLATE_PARA AFTER DELETE ON stat_template_para FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_PARA(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ -BEGIN - --插入相应实例点 - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_ret', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_template_ret')); - END IF; - - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_RET ON stat_template_ret; -CREATE TRIGGER TIA_STAT_TEMPLATE_RET AFTER INSERT ON stat_template_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ -BEGIN - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_template_ret')); - END IF; - - UPDATE stat_link_ret - SET STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.RET_TAG)) - WHERE STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.RET_TAG)); - - IF OLD.RET_TAG = NEW.RET_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.SORT = NEW.SORT - THEN RETURN NEW; - END IF; - - --更新相应的实例点 - IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN - BEGIN - DELETE FROM stat_inst_ret_grp USING stat_inst_def,stat_inst_ret_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - INSERT INTO stat_inst_ret_para - (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; - END; - ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN - BEGIN - DELETE FROM stat_inst_ret_para USING stat_inst_def,stat_inst_ret_para - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); - - INSERT INTO stat_inst_ret_grp - (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) - SELECT - concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM - FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN - BEGIN - update stat_inst_def - SET stat_inst_ret_para.RET_TAG = concat(stat_inst_ret_para.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), stat_inst_ret_para.DESCRIPTION = NEW.DESCRIPTION, stat_inst_ret_para.SORT = NEW.SORT - from stat_inst_ret_para - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_para.INST_TAG AND `RANK` = 1 AND getAfterLastDot(RET_TAG) = getAfterLastDot(OLD.RET_TAG); - - END; - ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN - BEGIN - update stat_inst_def - SET stat_inst_ret_grp.RET_GRP_TAG = concat(stat_inst_ret_grp.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), stat_inst_ret_grp.DESCRIPTION = NEW.DESCRIPTION, stat_inst_ret_grp.SORT = NEW.SORT - from stat_inst_ret_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_grp.INST_TAG AND getAfterLastDot(RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - END; - END IF; - - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_RET ON stat_template_ret; -CREATE TRIGGER TUA_STAT_TEMPLATE_RET AFTER UPDATE ON stat_template_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ -BEGIN - --删除相应的实例点 - DELETE FROM stat_inst_ret_grp USING stat_inst_def,stat_inst_ret_grp - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); - - DELETE FROM stat_inst_ret_para USING stat_inst_def,stat_inst_ret_para - WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG - AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG - AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); - DELETE FROM stat_link_ret - WHERE STAT_RET_TAG = OLD.RET_TAG; - - IF getTriggerFlag() = TRUE THEN - INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) - VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_template_ret')); - END IF; - - -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_RET ON stat_template_ret; -CREATE TRIGGER TDA_STAT_TEMPLATE_RET AFTER DELETE ON stat_template_ret FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_RET(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_condition_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; -CREATE TRIGGER TIA_TRIGGER_CONDITION_DEFINE AFTER INSERT ON trigger_condition_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_CONDITION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; -CREATE TRIGGER TUA_TRIGGER_CONDITION_DEFINE AFTER UPDATE ON trigger_condition_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_CONDITION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_condition_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; -CREATE TRIGGER TDA_TRIGGER_CONDITION_DEFINE AFTER DELETE ON trigger_condition_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_CONDITION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_function_define', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; -CREATE TRIGGER TIA_TRIGGER_FUNCTION_DEFINE AFTER INSERT ON trigger_function_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_FUNCTION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; -CREATE TRIGGER TUA_TRIGGER_FUNCTION_DEFINE AFTER UPDATE ON trigger_function_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_FUNCTION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('trigger_function_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; -CREATE TRIGGER TDA_TRIGGER_FUNCTION_DEFINE AFTER DELETE ON trigger_function_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_FUNCTION_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_period_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; -CREATE TRIGGER TIA_TRIGGER_PERIOD_DEFINE AFTER INSERT ON trigger_period_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_PERIOD_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; -CREATE TRIGGER TUA_TRIGGER_PERIOD_DEFINE AFTER UPDATE ON trigger_period_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_PERIOD_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_period_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; -CREATE TRIGGER TDA_TRIGGER_PERIOD_DEFINE AFTER DELETE ON trigger_period_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_PERIOD_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_timer_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TIA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; -CREATE TRIGGER TIA_TRIGGER_TIMER_DEFINE AFTER INSERT ON trigger_timer_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TIA_TRIGGER_TIMER_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('update'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TUA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; -CREATE TRIGGER TUA_TRIGGER_TIMER_DEFINE AFTER UPDATE ON trigger_timer_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TUA_TRIGGER_TIMER_DEFINE(); - - - -CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ -BEGIN -IF getTriggerFlag() = TRUE THEN -INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) -VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_timer_define')); -END IF; -RETURN NEW; -END; -$$LANGUAGE PLPGSQL; -DROP TRIGGER IF EXISTS TDA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; -CREATE TRIGGER TDA_TRIGGER_TIMER_DEFINE AFTER DELETE ON trigger_timer_define FOR EACH ROW -EXECUTE PROCEDURE FUNC_TDA_TRIGGER_TIMER_DEFINE(); - - - - -CREATE OR REPLACE FUNCTION splitList( strList varchar(100), split_char varchar(1) , strCount int) RETURNS varchar(64) -AS $$ - DECLARE splitCount int; - DECLARE splitIndex int DEFAULT 1; - DECLARE str1 varchar(100) DEFAULT ''; - DECLARE str2 varchar(100) DEFAULT ''; -BEGIN - --分割字符串,返回第strCount个子串 - - splitCount = char_length(strList)-char_length(replace(strList,split_char,'')) + 1; - IF strCount > splitCount OR strCount <=0 THEN RETURN ''; - END IF; - - IF strCount = 1 THEN RETURN substring_index(strList,split_char,strCount); - ELSE - BEGIN - str1 = substring_index(strList,split_char,strCount-1); - str2 = substring_index(strList,split_char,strCount); - RETURN right(str2,LENGTH(str2) - LENGTH(str1) - 1); - END; - END IF; - -END; -$$LANGUAGE PLPGSQL; - - - - -CREATE OR REPLACE FUNCTION clearTempRelation(devTempName varchar(64)) -RETURNS VOID -AS $$ -BEGIN - /* - * 清除指定模板的所有测点与前置模板的关系 - */ - - UPDATE accuml_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE analog_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1, - OUT_SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE digital_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO1 = -1, - SEC_SEQ_NO2 = -1, - SEC_SEQ_NO3 = -1, - SEC_SEQ_NO4 = -1, - SEC_SEQ_NO5 = -1, - OUT_SEC_SEQ_NO1 = -1, - OUT_SEC_SEQ_NO2 = -1, - OUT_SEC_SEQ_NO3 = -1, - OUT_SEC_SEQ_NO4 = -1, - OUT_SEC_SEQ_NO5 = -1 - WHERE DEV_TP_NAME = devTempName; - - UPDATE mix_temp_define - SET SEC_DEVTP_NAME = '', - SEC_SEQ_NO = -1, - OUT_SEC_SEQ_NO = -1 - WHERE DEV_TP_NAME = devTempName; - -END; -$$LANGUAGE PLPGSQL; - - - - -CREATE OR REPLACE FUNCTION updateFesResPara(tableName varchar(64),startNum decimal(10,0)) -RETURNS VOID -AS $$ -BEGIN - /* - * 批量修改设备的规约参数1,要批量修改的设备在export_seq中 - * tableName 表名 - * startNum 修改的起始数字 - */ - - --创建临时表 - CREATE TEMPORARY TABLE IF NOT EXISTS tmpUpdateFesResParaTbl( - TAG_NAME varchar(64) NOT NULL, - RES_PARA decimal(10,0) NOT NULL - ); - DELETE FROM tmpUpdateFesResParaTbl; - - IF lower(tableName) = 'fes_accuml' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_accuml,export_seq WHERE fes_accuml.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_accuml.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_accuml - SET fes_accuml.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_accuml.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_analog' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_analog,export_seq WHERE fes_analog.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_analog.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_analog - SET fes_analog.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_analog.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_analog_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_analog_ctrl,export_seq WHERE fes_analog_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_analog_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_analog_ctrl - SET fes_analog_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_analog_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_digital' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_digital,export_seq WHERE fes_digital.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_digital.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_digital - SET fes_digital.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_digital.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_digital_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_digital_ctrl,export_seq WHERE fes_digital_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_digital_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_digital_ctrl - SET fes_digital_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_digital_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_mix' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_mix,export_seq WHERE fes_mix.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_mix.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_mix - SET fes_mix.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_mix.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - ELSEIF lower(tableName) = 'fes_mix_ctrl' THEN - BEGIN - INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) - SELECT TAG_NAME,1 - FROM fes_mix_ctrl,export_seq WHERE fes_mix_ctrl.DEV_TAG = export_seq.DEV_TAG - ORDER BY export_seq.NO,fes_mix_ctrl.SEQ_NO; - - UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; - - update fes_mix_ctrl - SET fes_mix_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA - from tmpupdatefesresparatbl - where fes_mix_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; - - END; - END IF; - - - -END; -$$LANGUAGE PLPGSQL; - - - - -CREATE OR REPLACE FUNCTION bindStatDev(statTag varchar(64),devTag varchar(64)) -RETURNS VOID -AS $$ -BEGIN - /* - * 绑定统计分析中的实例,使用对应的后台设备 - * statTag 统计分析实例 - * devTag 后台设备 - */ - - --清空 - UPDATE stat_inst_para_point SET POINT_TAG = '' WHERE INST_TAG = statTag; - - UPDATE stat_inst_ret_para SET POINT_TAG = '' WHERE INST_TAG = statTag; - - --填写 - CREATE TEMPORARY TABLE IF NOT EXISTS tmpBinStatDevTbl( - PARA_TAG varchar(64) NOT NULL, - POINT_TAG varchar(64) NOT NULL - ); - DELETE FROM tmpBinStatDevTbl; - - --查找对应的测点 - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('analog.',analog.TAG_NAME) AS A - FROM stat_inst_para_point,analog - WHERE INST_TAG = statTag AND analog.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(analog.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('accuml.',accuml.TAG_NAME) AS A - FROM stat_inst_para_point,accuml - WHERE INST_TAG = statTag AND accuml.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(accuml.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('digital.',digital.TAG_NAME) AS A - FROM stat_inst_para_point,digital - WHERE INST_TAG = statTag AND digital.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(digital.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT PARA_TAG,concat('mix.',mix.TAG_NAME) AS A - FROM stat_inst_para_point,mix - WHERE INST_TAG = statTag AND mix.DEVICE = devTag - AND getAfterLastDot(PARA_TAG) = getAfterLastDot(mix.TAG_NAME); - - update stat_inst_para_point - SET stat_inst_para_point.POINT_TAG = tmpBinStatDevTbl.POINT_TAG - from tmpbinstatdevtbl - where stat_inst_para_point.para_tag = tmpbinstatdevtbl.para_tag; - - - DELETE FROM tmpBinStatDevTbl; - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('analog.',analog.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,analog - WHERE INST_TAG = statTag AND analog.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(analog.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('digital.',digital.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,digital - WHERE INST_TAG = statTag AND digital.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(digital.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('accuml.',accuml.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,accuml - WHERE INST_TAG = statTag AND accuml.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(accuml.TAG_NAME); - - INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) - SELECT RET_TAG,concat('mix.',mix.TAG_NAME,'.value') AS A - FROM stat_inst_ret_para,mix - WHERE INST_TAG = statTag AND mix.DEVICE = devTag - AND getAfterLastDot(RET_TAG) = getAfterLastDot(mix.TAG_NAME); - - update stat_inst_ret_para - SET stat_inst_ret_para.POINT_TAG = tmpBinStatDevTbl.POINT_TAG, stat_inst_ret_para.IS_BIND = '1' - from tmpbinstatdevtbl - where stat_inst_ret_para.ret_tag = tmpbinstatdevtbl.para_tag; - - -END; -$$LANGUAGE PLPGSQL; - - - -CREATE OR REPLACE FUNCTION relationByTempPointName(devTempName varchar(64),fesDevTempName varchar(64)) -RETURNS VOID -AS $$ -BEGIN - /* - * 按照模板下的测点名称进行,后台模板与前置模板的关联 - */ - --获取设备测点名称 - - CALL clearTempRelation(devTempName); - --创建临时表, - CREATE TEMPORARY TABLE IF NOT EXISTS tmpRelationNameTbl( - TAG_NAME varchar(64) NOT NULL, - FES_SEQ_NO decimal(10,0) NOT NULL - ); - - --accuml - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM accuml_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_ACC')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update accuml_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where accuml_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - - --analog - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM analog_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_ANA')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update analog_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where analog_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - - --digital只判断第一个分量 - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM digital_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_DIG')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update digital_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO1 = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where digital_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - - --mix - DELETE FROM tmpRelationNameTbl; - - INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) - SELECT A.TAG_NAME,B.SEQ_NO - FROM (SELECT TAG_NAME FROM mix_temp_define WHERE DEV_TP_NAME = devTempName) A - INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName - AND POINT_TYPE = getFesPointType('FES_MIX')) B - ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); - - --进行关联 - update mix_temp_define - SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO - from tmprelationnametbl - where mix_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; - - -END; -$$LANGUAGE PLPGSQL; - - - - - + + +CREATE OR REPLACE FUNCTION custom_log(info1 varchar(100), info2 varchar(100) ) +RETURNS VOID +AS $$ +DECLARE enableDebug int DEFAULT 1; +BEGIN +enableDebug = (SELECT PRINT_DEBUG_INFO_FLAG FROM custom_debug_flag LIMIT 1); +IF enableDebug=1 THEN +INSERT INTO custom_debug_info(col1,col2,col3) VALUES (info1,info2,now()); +END IF; +END; +$$LANGUAGE PLPGSQL; + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ACCUML_LIMIT_INFO ON accuml_limit_info; +CREATE TRIGGER TIA_ACCUML_LIMIT_INFO AFTER INSERT ON accuml_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ACCUML_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ACCUML_LIMIT_INFO ON accuml_limit_info; +CREATE TRIGGER TUA_ACCUML_LIMIT_INFO AFTER UPDATE ON accuml_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ACCUML_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ACCUML_LIMIT_INFO ON accuml_limit_info; +CREATE TRIGGER TDA_ACCUML_LIMIT_INFO AFTER DELETE ON accuml_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ACCUML_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + --首先禁止FES触发器动作 + SET SESSION "disable.FesAccumlTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.AccumlMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAccumlTrigger" = 0; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TI_ACCUML_MAP_TO_FES AFTER INSERT ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + + --首先禁止FES触发器动作 + SET SESSION "disable.FesAccumlTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.AccumlMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + --清除旧的 + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + --添加新的 + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET SESSION "disable.FesAccumlTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TU_ACCUML_MAP_TO_FES BEFORE UPDATE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('accuml_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TUA_ACCUML_MAP_TO_FES AFTER UPDATE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + + --首先禁止FES触发器动作 + SET SESSION "disable.FesAccumlTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.AccumlMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_accuml SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAccumlTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TD_ACCUML_MAP_TO_FES BEFORE DELETE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('accuml_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ACCUML_MAP_TO_FES ON accuml_map_to_fes; +CREATE TRIGGER TDA_ACCUML_MAP_TO_FES AFTER DELETE ON accuml_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ACCUML_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* +INSERT INTO accuml( +TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)), NEW.DESCRIPTION,TAG_NAME, NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP, NEW.IS_LIMIT, NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS, NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + INSERT INTO temp_plugin_point_map_acc + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'accuml_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TI_ACCUML_TEMP_DEFINE AFTER INSERT ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.UNIT_ID <> OLD.UNIT_ID OR NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR + NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.SEQ_NO <> OLD.SEQ_NO OR + NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT + THEN + UPDATE accuml SET + accuml.TAG_NAME = concat(accuml.DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + accuml.DESCRIPTION = NEW.DESCRIPTION, + accuml.UNIT_ID = NEW.UNIT_ID, + accuml.IS_LIMIT = NEW.IS_LIMIT, + accuml.POINT_CLASS = NEW.POINT_CLASS, + accuml.POINT_TP_NAME = NEW.TAG_NAME, + accuml.IS_SAMPLE = NEW.IS_SAMPLE, + accuml.SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND, + accuml.POINT_TYPE = NEW.POINT_TYPE, + accuml.SEQ_NO = NEW.SEQ_NO, + accuml.IS_STATISTICS = NEW.IS_STATISTICS, + accuml.SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + accuml.POINT_PROPERTY = NEW.POINT_PROPERTY, + accuml.POINT_SORT = NEW.POINT_SORT + WHERE accuml.POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR + NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR + NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR + NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE accuml_limit_info SET + LIMIT_TYPE = NEW.LIMIT_TYPE, + LIMIT_NUM = NEW.LIMIT_NUM, + LIMIT_UP1 = NEW.LIMIT_UP1, + LIMIT_LOW1 = NEW.LIMIT_LOW1, + LIMIT_UP2 = NEW.LIMIT_UP2, + LIMIT_LOW2 = NEW.LIMIT_LOW2, + LIMIT_UP3 = NEW.LIMIT_UP3, + LIMIT_LOW3 = NEW.LIMIT_LOW3, + CROSS_PERCENT = NEW.CROSS_PERCENT, + RETURN_PERCENT = NEW.RETURN_PERCENT, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + IF NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR + NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF + THEN + UPDATE accuml_map_to_fes SET + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + IS_FILTER = NEW.IS_FILTER, + PERCENT = NEW.PERCENT, + BASE = NEW.BASE, + COEFF = NEW.COEFF + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_acc + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('accuml_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TU_ACCUML_TEMP_DEFINE AFTER UPDATE ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + + DELETE FROM temp_plugin_point_map_acc WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* +DELETE FROM accuml WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TD_ACCUML_TEMP_DEFINE BEFORE DELETE ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ACCUML_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'accuml_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('accuml_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ACCUML_TEMP_DEFINE ON accuml_temp_define; +CREATE TRIGGER TDA_ACCUML_TEMP_DEFINE AFTER DELETE ON accuml_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ACCUML_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_link_enable_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; +CREATE TRIGGER TIA_ALARM_LINK_ENABLE_INFO AFTER INSERT ON alarm_link_enable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_LINK_ENABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('alarm_link_enable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; +CREATE TRIGGER TUA_ALARM_LINK_ENABLE_INFO AFTER UPDATE ON alarm_link_enable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_LINK_ENABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_LINK_ENABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_link_enable_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('alarm_link_enable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_LINK_ENABLE_INFO ON alarm_link_enable_info; +CREATE TRIGGER TDA_ALARM_LINK_ENABLE_INFO AFTER DELETE ON alarm_link_enable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_LINK_ENABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_config', 'NO', '', NEW.NO, getTableSubSystem('alarm_sms_config')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_SMS_CONFIG ON alarm_sms_config; +CREATE TRIGGER TIA_ALARM_SMS_CONFIG AFTER INSERT ON alarm_sms_config FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_CONFIG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_config', 'NO', OLD.NO, NEW.NO, getTableSubSystem('alarm_sms_config')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_SMS_CONFIG ON alarm_sms_config; +CREATE TRIGGER TUA_ALARM_SMS_CONFIG AFTER UPDATE ON alarm_sms_config FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_CONFIG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_CONFIG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_config', 'NO', OLD.NO, '', getTableSubSystem('alarm_sms_config')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_SMS_CONFIG ON alarm_sms_config; +CREATE TRIGGER TDA_ALARM_SMS_CONFIG AFTER DELETE ON alarm_sms_config FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_CONFIG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_device', 'DEVICE_ID', '', NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_SMS_DEVICE ON alarm_sms_device; +CREATE TRIGGER TIA_ALARM_SMS_DEVICE AFTER INSERT ON alarm_sms_device FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_DEVICE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, NEW.DEVICE_ID, getTableSubSystem('alarm_sms_device')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_SMS_DEVICE ON alarm_sms_device; +CREATE TRIGGER TUA_ALARM_SMS_DEVICE AFTER UPDATE ON alarm_sms_device FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_DEVICE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_DEVICE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_device', 'DEVICE_ID', OLD.DEVICE_ID, '', getTableSubSystem('alarm_sms_device')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_SMS_DEVICE ON alarm_sms_device; +CREATE TRIGGER TDA_ALARM_SMS_DEVICE AFTER DELETE ON alarm_sms_device FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_DEVICE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'alarm_sms_rule', 'RULE_ID', '', NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ALARM_SMS_RULE ON alarm_sms_rule; +CREATE TRIGGER TIA_ALARM_SMS_RULE AFTER INSERT ON alarm_sms_rule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ALARM_SMS_RULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, NEW.RULE_ID, getTableSubSystem('alarm_sms_rule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ALARM_SMS_RULE ON alarm_sms_rule; +CREATE TRIGGER TUA_ALARM_SMS_RULE AFTER UPDATE ON alarm_sms_rule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ALARM_SMS_RULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ALARM_SMS_RULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'alarm_sms_rule', 'RULE_ID', OLD.RULE_ID, '', getTableSubSystem('alarm_sms_rule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ALARM_SMS_RULE ON alarm_sms_rule; +CREATE TRIGGER TDA_ALARM_SMS_RULE AFTER DELETE ON alarm_sms_rule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ALARM_SMS_RULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TIA_ANALOG_CONTROL AFTER INSERT ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN + + --修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + NEW.OFFSET_NO = '-1'; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TU_ANALOG_CONTROL BEFORE UPDATE ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TUA_ANALOG_CONTROL AFTER UPDATE ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_CONTROL ON analog_control; +CREATE TRIGGER TDA_ANALOG_CONTROL AFTER DELETE ON analog_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_limit_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ANALOG_LIMIT_INFO ON analog_limit_info; +CREATE TRIGGER TIA_ANALOG_LIMIT_INFO AFTER INSERT ON analog_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ANALOG_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ANALOG_LIMIT_INFO ON analog_limit_info; +CREATE TRIGGER TUA_ANALOG_LIMIT_INFO AFTER UPDATE ON analog_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ANALOG_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_LIMIT_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_limit_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_limit_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_LIMIT_INFO ON analog_limit_info; +CREATE TRIGGER TDA_ANALOG_LIMIT_INFO AFTER DELETE ON analog_limit_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_LIMIT_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ + DECLARE flag int; +BEGIN + SET SESSION "disable.FesAnalogTrigger" = 1; + + SELECT CURRENT_SETTING('disable.AnalogMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TI_ANALOG_MAP_TO_FES AFTER INSERT ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 1; + + SELECT CURRENT_SETTING('disable.AnalogMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TU_ANALOG_MAP_TO_FES BEFORE UPDATE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('analog_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TUA_ANALOG_MAP_TO_FES AFTER UPDATE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + SET SESSION "disable.FesAnalogTrigger" = 1; + + SELECT CURRENT_SETTING('disable.AnalogMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_analog SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesAnalogTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TD_ANALOG_MAP_TO_FES BEFORE DELETE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('analog_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_MAP_TO_FES ON analog_map_to_fes; +CREATE TRIGGER TDA_ANALOG_MAP_TO_FES AFTER DELETE ON analog_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + +/* +INSERT INTO analog( +TAG_NAME, DESCRIPTION, RTU_TAG, DEV_TYPE, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, IS_CONTROL, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, UNIT_ID, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, REGION_ID, OPT_HANDOVER_GROUP, IS_LIMIT, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, SAMPLE_DEADBAND, CAMERA_TAG, PRESET_ID) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)) , NEW.DESCRIPTION ,'', DEV_TYPE, TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, NEW.IS_CONTROL,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, 0, 0, NEW.UNIT_ID, '', '', '', REGION_ID, OPT_HANDOVER_GROUP,NEW.IS_LIMIT,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.SAMPLE_DEADBAND, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + + INSERT INTO temp_plugin_point_map_ana + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'analog_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TI_ANALOG_TEMP_DEFINE AFTER INSERT ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.DESCRIPTION <> OLD.DESCRIPTION OR NEW.SEQ_NO <> OLD.SEQ_NO OR NEW.IS_CONTROL <> OLD.IS_CONTROL OR NEW.UNIT_ID <> OLD.UNIT_ID OR + NEW.IS_LIMIT <> OLD.IS_LIMIT OR NEW.POINT_TYPE <> OLD.POINT_TYPE OR NEW.POINT_CLASS <> OLD.POINT_CLASS OR NEW.POINT_PROPERTY <> OLD.POINT_PROPERTY OR NEW.POINT_SORT <> OLD.POINT_SORT OR + NEW.IS_SAMPLE <> OLD.IS_SAMPLE OR NEW.IS_STATISTICS <> OLD.IS_STATISTICS OR NEW.SAMPLE_PERIOD <> OLD.SAMPLE_PERIOD OR NEW.SAMPLE_DEADBAND <> OLD.SAMPLE_DEADBAND + THEN + UPDATE analog SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + UNIT_ID = NEW.UNIT_ID, + IS_LIMIT = NEW.IS_LIMIT, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + SAMPLE_DEADBAND = NEW.SAMPLE_DEADBAND + WHERE POINT_TP_NAME=OLD.TAG_NAME; + END IF; + + IF NEW.IS_TAGT_STATE <> OLD.IS_TAGT_STATE OR NEW.CTRL_TIMEOUT <> OLD.CTRL_TIMEOUT OR NEW.RESV_TIMEOUT <> OLD.RESV_TIMEOUT OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR + NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW OR NEW.CTRL_TOLERANCE <> OLD.CTRL_TOLERANCE OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE analog_control SET + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.LIMIT_TYPE <> OLD.LIMIT_TYPE OR NEW.LIMIT_NUM <> OLD.LIMIT_NUM OR NEW.LIMIT_UP1 <> OLD.LIMIT_UP1 OR NEW.LIMIT_LOW1 <> OLD.LIMIT_LOW1 OR NEW.LIMIT_UP2 <> OLD.LIMIT_UP2 OR + NEW.LIMIT_LOW2 <> OLD.LIMIT_LOW2 OR NEW.LIMIT_UP3 <> OLD.LIMIT_UP3 OR NEW.LIMIT_LOW3 <> OLD.LIMIT_LOW3 OR NEW.CROSS_PERCENT <> OLD.CROSS_PERCENT OR NEW.RETURN_PERCENT <> OLD.RETURN_PERCENT OR + NEW.ALARM_PRIORITY <> OLD.ALARM_PRIORITY OR NEW.ALARM_DELAY_TIME <> OLD.ALARM_DELAY_TIME OR NEW.IS_WATER_ALM <> OLD.IS_WATER_ALM OR NEW.IS_ACK_ON_RTN <> OLD.IS_ACK_ON_RTN OR + NEW.DEL_ACT_ON_ACK <> OLD.DEL_ACT_ON_ACK OR NEW.IS_NEVER_ALM_ON_RTN <> OLD.IS_NEVER_ALM_ON_RTN OR NEW.TAG_NAME <> OLD.TAG_NAME + THEN + UPDATE analog_limit_info SET + LIMIT_TYPE = NEW.LIMIT_TYPE , + LIMIT_NUM = NEW.LIMIT_NUM , + LIMIT_UP1 = NEW.LIMIT_UP1 , + LIMIT_LOW1 = NEW.LIMIT_LOW1 , + LIMIT_UP2 = NEW.LIMIT_UP2 , + LIMIT_LOW2 = NEW.LIMIT_LOW2 , + LIMIT_UP3 = NEW.LIMIT_UP3 , + LIMIT_LOW3 = NEW.LIMIT_LOW3 , + CROSS_PERCENT = NEW.CROSS_PERCENT , + RETURN_PERCENT = NEW.RETURN_PERCENT , + ALARM_PRIORITY = NEW.ALARM_PRIORITY , + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME , + IS_WATER_ALM = NEW.IS_WATER_ALM , + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN , + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK , + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.IS_FILTER <> OLD.IS_FILTER OR NEW.PERCENT <> OLD.PERCENT OR NEW.IS_VALID <> OLD.IS_VALID OR NEW.DEADBAND <> OLD.DEADBAND OR + NEW.ZEROBAND <> OLD.ZEROBAND OR NEW.BASE <> OLD.BASE OR NEW.COEFF <> OLD.COEFF OR NEW.RANGE_UP <> OLD.RANGE_UP OR NEW.RANGE_LOW <> OLD.RANGE_LOW + THEN + UPDATE analog_map_to_fes SET + POINT_TP_NAME = NEW.TAG_NAME, + IS_FILTER = NEW.IS_FILTER, + PERCENT = NEW.PERCENT, + IS_VALID = NEW.IS_VALID, + DEADBAND = NEW.DEADBAND, + ZEROBAND = NEW.ZEROBAND, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_ana + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('analog_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TU_ANALOG_TEMP_DEFINE AFTER UPDATE ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM temp_plugin_point_map_ana WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* + DELETE FROM analog WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TD_ANALOG_TEMP_DEFINE BEFORE DELETE ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ANALOG_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'analog_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('analog_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ANALOG_TEMP_DEFINE ON analog_temp_define; +CREATE TRIGGER TDA_ANALOG_TEMP_DEFINE AFTER DELETE ON analog_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ANALOG_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_analog', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_ANALOG ON APC_ANALOG; +CREATE TRIGGER TIA_APC_ANALOG AFTER INSERT ON APC_ANALOG FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_APC_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF NEW.VALUE_FROM_SELF IS NOT NULL THEN + NEW.VALUE = NEW.VALUE_FROM_SELF; + NEW.VALUE_FROM_SELF = NULL; +ELSEIF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_APC_ANALOG ON APC_ANALOG; +CREATE TRIGGER TUB_APC_ANALOG BEFORE UPDATE ON APC_ANALOG FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_APC_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_analog', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_ANALOG ON APC_ANALOG; +CREATE TRIGGER TDA_APC_ANALOG AFTER DELETE ON APC_ANALOG FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_apc_curve() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_apc_curve ON apc_curve; +CREATE TRIGGER TIA_apc_curve AFTER INSERT ON apc_curve FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_apc_curve(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_apc_curve() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_curve')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_apc_curve ON apc_curve; +CREATE TRIGGER TUA_apc_curve AFTER UPDATE ON apc_curve FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_apc_curve(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_apc_curve() RETURNS TRIGGER AS $$ +BEGIN +delete from apc_curve_day_index where curve_key_id_tag = old.key_id_tag; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_curve')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_apc_curve ON apc_curve; +CREATE TRIGGER TDA_apc_curve AFTER DELETE ON apc_curve FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_apc_curve(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', '', concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; +CREATE TRIGGER TIA_APC_CURVE_DAY_INDEX AFTER INSERT ON apc_curve_day_index FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_INDEX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ +BEGIN +IF((select count(*) from apc_curve_day_index where day_rule_id = old.day_rule_id)<1) THEN +delete from apc_curve_day_value where day_rule_id = old.day_rule_id; +END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id', concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), concat(NEW.CURVE_KEY_ID_TAG,',',NEW.YEAR_RULE_ID,',',NEW.WEEK_RULE_ID), getTableSubSystem('apc_curve_day_index')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; +CREATE TRIGGER TUA_APC_CURVE_DAY_INDEX AFTER UPDATE ON apc_curve_day_index FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_INDEX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_INDEX() RETURNS TRIGGER AS $$ +BEGIN +delete from apc_curve_day_value where day_rule_id = old.day_rule_id; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_index', 'curve_key_id_tag,year_rule_id,week_rule_id',concat(OLD.CURVE_KEY_ID_TAG,',',OLD.YEAR_RULE_ID,',',OLD.WEEK_RULE_ID), '', getTableSubSystem('apc_curve_day_index')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_INDEX ON apc_curve_day_index; +CREATE TRIGGER TDA_APC_CURVE_DAY_INDEX AFTER DELETE ON apc_curve_day_index FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_INDEX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', '', concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; +CREATE TRIGGER TIA_APC_CURVE_DAY_VALUE AFTER INSERT ON apc_curve_day_value FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_DAY_VALUE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), concat(NEW.DAY_RULE_ID,',',NEW.START_SEC,',',NEW.END_SEC), getTableSubSystem('apc_curve_day_value')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; +CREATE TRIGGER TUA_APC_CURVE_DAY_VALUE AFTER UPDATE ON apc_curve_day_value FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_DAY_VALUE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_DAY_VALUE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_day_value', 'day_rule_id,start_sec,end_sec', concat(OLD.DAY_RULE_ID,',',OLD.START_SEC,',',OLD.END_SEC), '', getTableSubSystem('apc_curve_day_value')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_DAY_VALUE ON apc_curve_day_value; +CREATE TRIGGER TDA_APC_CURVE_DAY_VALUE AFTER DELETE ON apc_curve_day_value FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_DAY_VALUE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_week', 'type_id,week_day', '', concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_WEEK ON apc_curve_week; +CREATE TRIGGER TIA_APC_CURVE_WEEK AFTER INSERT ON apc_curve_week FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_WEEK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), concat(NEW.TYPE_ID,',',NEW.WEEK_DAY), getTableSubSystem('apc_curve_week')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_WEEK ON apc_curve_week; +CREATE TRIGGER TUA_APC_CURVE_WEEK AFTER UPDATE ON apc_curve_week FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_WEEK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_WEEK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_week', 'type_id,week_day', concat(OLD.TYPE_ID,',',OLD.WEEK_DAY), '', getTableSubSystem('apc_curve_week')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_WEEK ON apc_curve_week; +CREATE TRIGGER TDA_APC_CURVE_WEEK AFTER DELETE ON apc_curve_week FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_WEEK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_CURVE_YEAR ON apc_curve_year; +CREATE TRIGGER TIA_APC_CURVE_YEAR AFTER INSERT ON apc_curve_year FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_CURVE_YEAR(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', '', concat(NEW.TYPE_ID,',',NEW.MONTH_BEGIN,',',NEW.DAY_BEGIN,',',NEW.MONTH_END,',',NEW.DAY_END), getTableSubSystem('apc_curve_year')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_APC_CURVE_YEAR ON apc_curve_year; +CREATE TRIGGER TUA_APC_CURVE_YEAR AFTER UPDATE ON apc_curve_year FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_APC_CURVE_YEAR(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_CURVE_YEAR() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_curve_year', 'type_id,month_begin,day_begin,month_end,day_end', concat(OLD.TYPE_ID,',',OLD.MONTH_BEGIN,',',OLD.DAY_BEGIN,',',OLD.MONTH_END,',',OLD.DAY_END), '', getTableSubSystem('apc_curve_year')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_CURVE_YEAR ON apc_curve_year; +CREATE TRIGGER TDA_APC_CURVE_YEAR AFTER DELETE ON apc_curve_year FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_CURVE_YEAR(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_APC_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'apc_digital', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_APC_DIGITAL ON apc_digital; +CREATE TRIGGER TIA_APC_DIGITAL AFTER INSERT ON apc_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_APC_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_APC_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF NEW.VALUE_FROM_SELF IS NOT NULL THEN + NEW.VALUE = NEW.VALUE_FROM_SELF; + NEW.VALUE_FROM_SELF = NULL; +ELSEIF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('apc_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_APC_DIGITAL ON apc_digital; +CREATE TRIGGER TUB_APC_DIGITAL BEFORE UPDATE ON apc_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_APC_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_APC_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'apc_digital', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('apc_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_APC_DIGITAL ON apc_digital; +CREATE TRIGGER TDA_APC_DIGITAL AFTER DELETE ON apc_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_APC_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; +CREATE TRIGGER TIA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER INSERT ON ats_casco_planned_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PLANNED_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_planned_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; +CREATE TRIGGER TUA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER UPDATE ON ats_casco_planned_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PLANNED_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_planned_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_planned_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PLANNED_TRAIN_DATA ON ats_casco_planned_train_data; +CREATE TRIGGER TDA_ATS_CASCO_PLANNED_TRAIN_DATA AFTER DELETE ON ats_casco_planned_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PLANNED_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', '', concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; +CREATE TRIGGER TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER INSERT ON ats_casco_practical_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), concat(NEW.ZDATE,',',NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.TABLE_ID,',',NEW.TRAIN_ID), getTableSubSystem('ats_casco_practical_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; +CREATE TRIGGER TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER UPDATE ON ats_casco_practical_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_casco_practical_train_data', 'zdate,location_id,platform_id,table_id,train_id', concat(OLD.ZDATE,',',OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.TABLE_ID,',',OLD.TRAIN_ID), '', getTableSubSystem('ats_casco_practical_train_data')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA ON ats_casco_practical_train_data; +CREATE TRIGGER TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA AFTER DELETE ON ats_casco_practical_train_data FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_CASCO_PRACTICAL_TRAIN_DATA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_location_info', 'ats_location_id', '', NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; +CREATE TRIGGER TIA_ATS_FES_LOCATION_INFO AFTER INSERT ON ats_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, NEW.ATS_LOCATION_ID, getTableSubSystem('ats_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; +CREATE TRIGGER TUA_ATS_FES_LOCATION_INFO AFTER UPDATE ON ats_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_location_info', 'ats_location_id', OLD.ATS_LOCATION_ID, '', getTableSubSystem('ats_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_FES_LOCATION_INFO ON ats_fes_location_info; +CREATE TRIGGER TDA_ATS_FES_LOCATION_INFO AFTER DELETE ON ats_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', '', concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; +CREATE TRIGGER TIA_ATS_FES_PLATFORM_INFO AFTER INSERT ON ats_fes_platform_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_ATS_FES_PLATFORM_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), concat(NEW.LOCATION_ID,',',NEW.PLATFORM_ID,',',NEW.PLATFORM_DES), getTableSubSystem('ats_fes_platform_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; +CREATE TRIGGER TUA_ATS_FES_PLATFORM_INFO AFTER UPDATE ON ats_fes_platform_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_ATS_FES_PLATFORM_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_ATS_FES_PLATFORM_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'ats_fes_platform_info', 'location_id,platform_id,platform_des', concat(OLD.LOCATION_ID,',',OLD.PLATFORM_ID,',',OLD.PLATFORM_DES), '', getTableSubSystem('ats_fes_platform_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_ATS_FES_PLATFORM_INFO ON ats_fes_platform_info; +CREATE TRIGGER TDA_ATS_FES_PLATFORM_INFO AFTER DELETE ON ats_fes_platform_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_ATS_FES_PLATFORM_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; +CREATE TRIGGER TIA_BAS_TIMETABLE_CTRL_PARAM AFTER INSERT ON bas_timetable_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; +CREATE TRIGGER TUA_BAS_TIMETABLE_CTRL_PARAM AFTER UPDATE ON bas_timetable_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('bas_timetable_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_CTRL_PARAM ON bas_timetable_ctrl_param; +CREATE TRIGGER TDA_BAS_TIMETABLE_CTRL_PARAM AFTER DELETE ON bas_timetable_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_def', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_DEF ON bas_timetable_def; +CREATE TRIGGER TIA_BAS_TIMETABLE_DEF AFTER INSERT ON bas_timetable_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_DEF ON bas_timetable_def; +CREATE TRIGGER TUA_BAS_TIMETABLE_DEF AFTER UPDATE ON bas_timetable_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_def', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_DEF ON bas_timetable_def; +CREATE TRIGGER TDA_BAS_TIMETABLE_DEF AFTER DELETE ON bas_timetable_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_info', 'location_id,timetable_id,begin_time', '', concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_INFO ON bas_timetable_info; +CREATE TRIGGER TIA_BAS_TIMETABLE_INFO AFTER INSERT ON bas_timetable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), concat(NEW.LOCATION_ID,',',NEW.TIMETABLE_ID,',',NEW.BEGIN_TIME), getTableSubSystem('bas_timetable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_INFO ON bas_timetable_info; +CREATE TRIGGER TUA_BAS_TIMETABLE_INFO AFTER UPDATE ON bas_timetable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_info', 'location_id,timetable_id,begin_time', concat(OLD.LOCATION_ID,',',OLD.TIMETABLE_ID,',',OLD.BEGIN_TIME), '', getTableSubSystem('bas_timetable_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_INFO ON bas_timetable_info; +CREATE TRIGGER TDA_BAS_TIMETABLE_INFO AFTER DELETE ON bas_timetable_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'bas_timetable_schedule', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; +CREATE TRIGGER TIA_BAS_TIMETABLE_SCHEDULE AFTER INSERT ON bas_timetable_schedule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_BAS_TIMETABLE_SCHEDULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('bas_timetable_schedule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; +CREATE TRIGGER TUA_BAS_TIMETABLE_SCHEDULE AFTER UPDATE ON bas_timetable_schedule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_BAS_TIMETABLE_SCHEDULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_BAS_TIMETABLE_SCHEDULE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'bas_timetable_schedule', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('bas_timetable_schedule')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_BAS_TIMETABLE_SCHEDULE ON bas_timetable_schedule; +CREATE TRIGGER TDA_BAS_TIMETABLE_SCHEDULE AFTER DELETE ON bas_timetable_schedule FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_BAS_TIMETABLE_SCHEDULE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_func_def', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_FUNC_DEF ON calc_func_def; +CREATE TRIGGER TI_CALC_FUNC_DEF AFTER INSERT ON calc_func_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_FUNC_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET + FUNC_NAME = NEW.FUNC_NAME, + CALC_FLAG = '1' + WHERE FUNC_NAME = OLD.FUNC_NAME; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_func_def', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('calc_func_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_FUNC_DEF ON calc_func_def; +CREATE TRIGGER TU_CALC_FUNC_DEF AFTER UPDATE ON calc_func_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_FUNC_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_FUNC_DEF() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM calc_out_para WHERE FUNC_NAME = OLD.FUNC_NAME; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_func_def', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('calc_func_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_FUNC_DEF ON calc_func_def; +CREATE TRIGGER TD_CALC_FUNC_DEF AFTER DELETE ON calc_func_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_FUNC_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_group_def', 'group_id', '', NEW.GROUP_ID, getTableSubSystem('calc_group_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_GROUP_DEF ON calc_group_def; +CREATE TRIGGER TI_CALC_GROUP_DEF AFTER INSERT ON calc_group_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_GROUP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.GROUP_ID <> OLD.GROUP_ID THEN + UPDATE calc_func_def SET GROUP_ID = NEW.GROUP_ID WHERE GROUP_ID = OLD.GROUP_ID; + END IF; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_group_def', 'group_id', OLD.GROUP_ID, NEW.GROUP_ID, getTableSubSystem('calc_group_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_GROUP_DEF ON calc_group_def; +CREATE TRIGGER TU_CALC_GROUP_DEF AFTER UPDATE ON calc_group_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_GROUP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_GROUP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_group_def', 'group_id', OLD.GROUP_ID, '', getTableSubSystem('calc_group_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_GROUP_DEF ON calc_group_def; +CREATE TRIGGER TD_CALC_GROUP_DEF AFTER DELETE ON calc_group_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_GROUP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_IN_PARA() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_in_para', 'key_id_tag,para_seq_no', '', concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_IN_PARA ON calc_in_para; +CREATE TRIGGER TI_CALC_IN_PARA AFTER INSERT ON calc_in_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_IN_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_IN_PARA() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = NEW.KEY_ID_TAG; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), concat(NEW.KEY_ID_TAG,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_in_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_IN_PARA ON calc_in_para; +CREATE TRIGGER TU_CALC_IN_PARA AFTER UPDATE ON calc_in_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_IN_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_IN_PARA() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE calc_out_para SET CALC_FLAG = '1' WHERE KEY_ID_TAG = OLD.KEY_ID_TAG; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_in_para', 'key_id_tag,para_seq_no', concat(OLD.KEY_ID_TAG,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_in_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_IN_PARA ON calc_in_para; +CREATE TRIGGER TD_CALC_IN_PARA AFTER DELETE ON calc_in_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_IN_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_OUT_PARA() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_out_para', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_OUT_PARA ON calc_out_para; +CREATE TRIGGER TI_CALC_OUT_PARA AFTER INSERT ON calc_out_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_OUT_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_OUT_PARA() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('calc_out_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_OUT_PARA ON calc_out_para; +CREATE TRIGGER TU_CALC_OUT_PARA AFTER UPDATE ON calc_out_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_OUT_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_OUT_PARA() RETURNS TRIGGER AS $$ +BEGIN + + --这里不能触发删除本输出的输入,因为输入的删除触发器中调用了本表 + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_out_para', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('calc_out_para')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_OUT_PARA ON calc_out_para; +CREATE TRIGGER TD_CALC_OUT_PARA AFTER DELETE ON calc_out_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_OUT_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_CALC_PARA_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'calc_para_def', 'func_name,para_seq_no', '', concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_CALC_PARA_DEF ON calc_para_def; +CREATE TRIGGER TI_CALC_PARA_DEF AFTER INSERT ON calc_para_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_CALC_PARA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_CALC_PARA_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), concat(NEW.FUNC_NAME,',',NEW.PARA_SEQ_NO), getTableSubSystem('calc_para_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_CALC_PARA_DEF ON calc_para_def; +CREATE TRIGGER TU_CALC_PARA_DEF AFTER UPDATE ON calc_para_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_CALC_PARA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_CALC_PARA_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'calc_para_def', 'func_name,para_seq_no', concat(OLD.FUNC_NAME,',',OLD.PARA_SEQ_NO), '', getTableSubSystem('calc_para_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_CALC_PARA_DEF ON calc_para_def; +CREATE TRIGGER TD_CALC_PARA_DEF AFTER DELETE ON calc_para_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_CALC_PARA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_device_inst', 'id', '', NEW.id, getTableSubSystem('cfg_device_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_CFG_DEVICE_INST ON cfg_device_inst; +CREATE TRIGGER TIA_CFG_DEVICE_INST AFTER INSERT ON cfg_device_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_CFG_DEVICE_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'cfg_device_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_device_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_CFG_DEVICE_INST ON cfg_device_inst; +CREATE TRIGGER TUA_CFG_DEVICE_INST AFTER UPDATE ON cfg_device_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_CFG_DEVICE_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_DEVICE_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_device_inst', 'id', OLD.id, '', getTableSubSystem('cfg_device_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_CFG_DEVICE_INST ON cfg_device_inst; +CREATE TRIGGER TDA_CFG_DEVICE_INST AFTER DELETE ON cfg_device_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_CFG_DEVICE_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'cfg_signal_inst', 'id', '', NEW.id, getTableSubSystem('cfg_signal_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_CFG_SIGNAL_INST ON cfg_signal_inst; +CREATE TRIGGER TIA_CFG_SIGNAL_INST AFTER INSERT ON cfg_signal_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_CFG_SIGNAL_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'cfg_signal_inst', 'id', OLD.id, NEW.id, getTableSubSystem('cfg_signal_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_CFG_SIGNAL_INST ON cfg_signal_inst; +CREATE TRIGGER TUA_CFG_SIGNAL_INST AFTER UPDATE ON cfg_signal_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_CFG_SIGNAL_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_CFG_SIGNAL_INST() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'cfg_signal_inst', 'id', OLD.id, '', getTableSubSystem('cfg_signal_inst')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_CFG_SIGNAL_INST ON cfg_signal_inst; +CREATE TRIGGER TDA_CFG_SIGNAL_INST AFTER DELETE ON cfg_signal_inst FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_CFG_SIGNAL_INST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TIA_DEV_TEMP_DEF AFTER INSERT ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF OLD.TAG_NAME != NEW.TAG_NAME THEN +BEGIN + UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); + UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +END; +END IF; + +IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DESCRIPTION != NEW.DESCRIPTION THEN +BEGIN + UPDATE accuml_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + UPDATE analog_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + + UPDATE digital_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + + UPDATE mix_temp_define SET + DEV_TP_NAME=NEW.TAG_NAME , + TAG_NAME=concat(NEW.TAG_NAME, '.' , getAfterLastDot(TAG_NAME)) + WHERE DEV_TP_NAME=OLD.TAG_NAME ; + --更新对应的套件 + IF OLD.TAG_NAME != NEW.TAG_NAME THEN + BEGIN + UPDATE temp_plugin_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_fes_dev_map SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_acc SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_ana SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_dig SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + UPDATE temp_plugin_point_map_mix SET TEMP_NAME = NEW.TAG_NAME WHERE TEMP_NAME = OLD.TAG_NAME; + END; + END IF; +END; +END IF; +/* +IF OLD.TAG_NAME != NEW.TAG_NAME OR OLD.DEV_TYPE_ID != NEW.DEV_TYPE_ID OR OLD.SUB_SYSTEM != NEW.SUB_SYSTEM +THEN +UPDATE dev_info SET +DEV_TP_NAME=NEW.TAG_NAME, +DEV_TYPE=NEW.DEV_TYPE_ID, +SUB_SYSTEM = NEW.SUB_SYSTEM +WHERE DEV_TP_NAME=OLD.TAG_NAME ; +END IF; +*/ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TU_DEV_TEMP_DEF AFTER UPDATE ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + +/* +DELETE FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; +*/ +DELETE FROM accuml_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM analog_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM digital_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +DELETE FROM mix_temp_define WHERE DEV_TP_NAME = OLD.TAG_NAME; +--套件的处理 +DELETE FROM temp_plugin_dev_map WHERE TEMP_NAME = OLD.TAG_NAME; +UPDATE accuml set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE analog set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE digital set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +UPDATE mix set POINT_TP_NAME = '' WHERE DEVICE IN (SELECT dev_info.TAG_NAME FROM dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME); +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TD_DEV_TEMP_DEF BEFORE DELETE ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DEV_TEMP_DEF ON dev_temp_def; +CREATE TRIGGER TDA_DEV_TEMP_DEF AFTER DELETE ON dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE dev_temp_def SET DEV_TEMP_GRP = NEW.TAG_NAME WHERE DEV_TEMP_GRP = OLD.TAG_NAME; + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DEV_TEMP_GROUP ON dev_temp_group; +CREATE TRIGGER TU_DEV_TEMP_GROUP AFTER UPDATE ON dev_temp_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DEV_TEMP_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DEV_TEMP_GROUP() RETURNS TRIGGER AS $$ +BEGIN + + DELETE FROM dev_temp_def WHERE DEV_TEMP_GRP = OLD.TAG_NAME; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DEV_TEMP_GROUP ON dev_temp_group; +CREATE TRIGGER TD_DEV_TEMP_GROUP AFTER DELETE ON dev_temp_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DEV_TEMP_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TIA_DIGITAL_CONTROL AFTER INSERT ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN + + --修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + NEW.OFFSET_NO1 = '-1'; + NEW.OFFSET_NO2 = '-1'; + NEW.OFFSET_NO3 = '-1'; + NEW.OFFSET_NO4 = '-1'; + NEW.OFFSET_NO5 = '-1'; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TU_DIGITAL_CONTROL BEFORE UPDATE ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TUA_DIGITAL_CONTROL AFTER UPDATE ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DIGITAL_CONTROL ON digital_control; +CREATE TRIGGER TDA_DIGITAL_CONTROL AFTER DELETE ON digital_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DIGITAL_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + SET SESSION "disable.FesDigitalTrigger" = 1; + + SELECT CURRENT_SETTING('disable.DigitalMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value1' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); + END IF; + + IF COALESCE(NEW.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value2' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); + END IF; + + IF COALESCE(NEW.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value3' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); + END IF; + + IF COALESCE(NEW.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value4' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); + END IF; + + IF COALESCE(NEW.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value5' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); + END IF; + + END; + END IF; + END; + END IF; + SET SESSION "disable.FesDigitalTrigger" = 0; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TI_DIGITAL_MAP_TO_FES AFTER INSERT ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO1 = OLD.DOT_NO1 AND + NEW.DOT_NO2 = OLD.DOT_NO2 AND + NEW.DOT_NO3 = OLD.DOT_NO3 AND + NEW.DOT_NO4 = OLD.DOT_NO4 AND + NEW.DOT_NO5 = OLD.DOT_NO5 AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + SET SESSION "disable.FesDigitalTrigger" = 1; + + SELECT CURRENT_SETTING('disable.DigitalMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); + END IF; + + IF COALESCE(OLD.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); + END IF; + + IF COALESCE(OLD.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); + END IF; + + IF COALESCE(OLD.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); + END IF; + + IF COALESCE(OLD.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value1' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO1); + END IF; + + IF COALESCE(NEW.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value2' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO2); + END IF; + + IF COALESCE(NEW.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value3' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO3); + END IF; + + IF COALESCE(NEW.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value4' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO4); + END IF; + + IF COALESCE(NEW.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value5' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO5); + END IF; + + END; + ELSE + BEGIN + NEW.DOT_NO1 = '-1'; + NEW.DOT_NO2 = '-1'; + NEW.DOT_NO3 = '-1'; + NEW.DOT_NO4 = '-1'; + NEW.DOT_NO5 = '-1'; + END; + END IF; + END; + END IF; + SET SESSION "disable.FesDigitalTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TU_DIGITAL_MAP_TO_FES BEFORE UPDATE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('digital_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TUA_DIGITAL_MAP_TO_FES AFTER UPDATE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + SET SESSION "disable.FesDigitalTrigger" = 1; + + SELECT CURRENT_SETTING('disable.DigitalMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO1,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO1); + END IF; + + IF COALESCE(OLD.DOT_NO2,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO2); + END IF; + + IF COALESCE(OLD.DOT_NO3,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO3); + END IF; + + IF COALESCE(OLD.DOT_NO4,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO4); + END IF; + + IF COALESCE(OLD.DOT_NO5,'') <> '' THEN + UPDATE fes_digital SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO5); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesDigitalTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TD_DIGITAL_MAP_TO_FES BEFORE DELETE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('digital_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DIGITAL_MAP_TO_FES ON digital_map_to_fes; +CREATE TRIGGER TDA_DIGITAL_MAP_TO_FES AFTER DELETE ON digital_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DIGITAL_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + +/* +INSERT INTO digital( +TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, VALUE_NUM, GRAY, CONTRAST, QCOLOR, VALUE, STATUS, LAST_UPDATE_TIME, VALUE1, STATUS1, LAST_CHANGE_TIME1, VALUE2, STATUS2, LAST_CHANGE_TIME2, VALUE3, STATUS3, LAST_CHANGE_TIME3, VALUE4, STATUS4, LAST_CHANGE_TIME4, VALUE5, STATUS5, LAST_CHANGE_TIME5, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, INPUT_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, IS_ALARM_FREQ, ALARM_FREQ, ALARM_FREQ_DESC, IS_ALARM_TIME, ALARM_TIME, ALARM_TIME_DESC, ALARM_FREQ_RANGE, INFER_NAME, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID ) +SELECT +concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, "", NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,NEW.VALUE_NUM,GRAY, CONTRAST, QCOLOR, VALUE, STATUS, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.INPUT_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.IS_ALARM_FREQ,NEW.ALARM_FREQ,NEW.ALARM_FREQ_DESC,NEW.IS_ALARM_TIME,NEW.ALARM_TIME,NEW.ALARM_TIME_DESC,NEW.ALARM_FREQ_RANGE,'', NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT, '', '' +FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + INSERT INTO temp_plugin_point_map_dig + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME1, FES_TEMP_POINT_NAME2, FES_TEMP_POINT_NAME3, FES_TEMP_POINT_NAME4, FES_TEMP_POINT_NAME5, FES_TEMP_OUT_NAME1, FES_TEMP_OUT_NAME2, FES_TEMP_OUT_NAME3, FES_TEMP_OUT_NAME4, FES_TEMP_OUT_NAME5) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'', '', '', '', '', '', '', '', '', '', '' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'digital_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TI_DIGITAL_TEMP_DEFINE AFTER INSERT ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE digital SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, + VALUE_NUM = NEW.VALUE_NUM, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + INPUT_DELAY_TIME = NEW.INPUT_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + IS_SUMMARY = NEW.IS_SUMMARY, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + IS_ALARM_FREQ = NEW.IS_ALARM_FREQ, + ALARM_FREQ = NEW.ALARM_FREQ, + ALARM_FREQ_DESC = NEW.ALARM_FREQ_DESC, + IS_ALARM_TIME = NEW.IS_ALARM_TIME, + ALARM_TIME = NEW.ALARM_TIME, + ALARM_TIME_DESC = NEW.ALARM_TIME_DESC, + ALARM_FREQ_RANGE = NEW.ALARM_FREQ_RANGE, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE POINT_TP_NAME=OLD.TAG_NAME ; + UPDATE digital_control SET + CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + PULSE_DURATION = NEW.PULSE_DURATION, + OFFSET_NUM = NEW.OFFSET_NUM, + IS_CHECK_PREVENTION = NEW.IS_CHECK_PREVENTION, + CTRL_TYPE = NEW.CTRL_TYPE, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_dig + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('digital_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TU_DIGITAL_TEMP_DEFINE AFTER UPDATE ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM temp_plugin_point_map_dig WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); +/* +DELETE FROM digital WHERE POINT_TP_NAME = OLD.TAG_NAME; +*/ +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TD_DIGITAL_TEMP_DEFINE BEFORE DELETE ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_DIGITAL_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'digital_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('digital_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_DIGITAL_TEMP_DEFINE ON digital_temp_define; +CREATE TRIGGER TDA_DIGITAL_TEMP_DEFINE AFTER DELETE ON digital_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_DIGITAL_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fault_recall_cond_def', 'location_id,trigger_tag_name', '', concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; +CREATE TRIGGER TIA_FAULT_RECALL_COND_DEF AFTER INSERT ON fault_recall_cond_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FAULT_RECALL_COND_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), concat(NEW.LOCATION_ID,',',NEW.TRIGGER_TAG_NAME), getTableSubSystem('fault_recall_cond_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; +CREATE TRIGGER TUA_FAULT_RECALL_COND_DEF AFTER UPDATE ON fault_recall_cond_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FAULT_RECALL_COND_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FAULT_RECALL_COND_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fault_recall_cond_def', 'location_id,trigger_tag_name', concat(OLD.LOCATION_ID,',',OLD.TRIGGER_TAG_NAME), '', getTableSubSystem('fault_recall_cond_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FAULT_RECALL_COND_DEF ON fault_recall_cond_def; +CREATE TRIGGER TDA_FAULT_RECALL_COND_DEF AFTER DELETE ON fault_recall_cond_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FAULT_RECALL_COND_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_ACCUML() RETURNS TRIGGER AS $$ + DECLARE flag INT; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AccumlMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesAccumlTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE accuml_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + + END; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_accuml', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_accuml')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TI_FES_ACCUML AFTER INSERT ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_ACCUML() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 1; + + SELECT CURRENT_SETTING('disable.FesAccumlTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + --删除旧关联 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE accuml_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + --建立新关联 + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE accuml_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + END; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TU_FES_ACCUML BEFORE UPDATE ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ACCUML() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_accuml', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_accuml')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TUA_FES_ACCUML AFTER UPDATE ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_ACCUML() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + SET SESSION "disable.AccumlMapToFesTrigger" = 1; + + SELECT CURRENT_SETTING('disable.FesAccumlTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE accuml_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.AccumlMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_accuml', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_accuml')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_ACCUML ON fes_accuml; +CREATE TRIGGER TD_FES_ACCUML AFTER DELETE ON fes_accuml FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_ACCUML(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_ANALOG() RETURNS TRIGGER AS $$ + DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AnalogMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesAnalogTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE analog_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.AnalogMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_ANALOG ON fes_analog; +CREATE TRIGGER TI_FES_ANALOG AFTER INSERT ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AnalogMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesAnalogTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + --不管是ana还是const都是放在analog_map_to_fes表 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE analog_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE analog_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.AnalogMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_ANALOG ON fes_analog; +CREATE TRIGGER TU_FES_ANALOG BEFORE UPDATE ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_ANALOG() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_ANALOG ON fes_analog; +CREATE TRIGGER TUA_FES_ANALOG AFTER UPDATE ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.AnalogMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesAnalogTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + --不管是ana还是const都是放在analog_map_to_fes表 + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE analog_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.AnalogMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_ANALOG ON fes_analog; +CREATE TRIGGER TD_FES_ANALOG AFTER DELETE ON fes_analog FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_ANALOG(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_analog_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_ANALOG_CTRL ON fes_analog_ctrl; +CREATE TRIGGER TIA_FES_ANALOG_CTRL AFTER INSERT ON fes_analog_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_ANALOG_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ +BEGIN + --更新关联了此点的遥控点 + + IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO + THEN + BEGIN + UPDATE analog_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_analog_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_ANALOG_CTRL ON fes_analog_ctrl; +CREATE TRIGGER TU_FES_ANALOG_CTRL AFTER UPDATE ON fes_analog_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_ANALOG_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_ANALOG_CTRL() RETURNS TRIGGER AS $$ +BEGIN + UPDATE analog_control SET + OFFSET_NO = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_analog_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_analog_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_ANALOG_CTRL ON fes_analog_ctrl; +CREATE TRIGGER TD_FES_ANALOG_CTRL AFTER DELETE ON fes_analog_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_ANALOG_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ + DECLARE locationTag varchar(64) DEFAULT ''; + DECLARE subsystemTag varchar(64) DEFAULT ''; +BEGIN + SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; + SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; + NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_CHANNEL_PARA ON FES_CHANNEL_PARA; +CREATE TRIGGER TI_FES_CHANNEL_PARA BEFORE INSERT ON FES_CHANNEL_PARA FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_channel_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TIA_FES_CHANNEL_PARA AFTER INSERT ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ + DECLARE locationTag varchar(64) DEFAULT ''; + DECLARE subsystemTag varchar(64) DEFAULT ''; +BEGIN + IF NEW.CHAN_NAME <> OLD.CHAN_NAME THEN + BEGIN + SELECT TAG_NAME INTO locationTag FROM sys_model_location_info WHERE LOCATION_ID = NEW.LOCATION_ID; + SELECT TAG_NAME INTO subsystemTag FROM sys_model_sub_system_info WHERE SUB_SYSTEM_ID = NEW.SUB_SYSTEM; + NEW.TAG_NAME = concat(locationTag,'.',subsystemTag,'.',NEW.CHAN_NAME); + END; + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TU_FES_CHANNEL_PARA BEFORE UPDATE ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_channel_para')); +END IF; +IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.CHAN_NO <> OLD.CHAN_NO OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM THEN +BEGIN + UPDATE fes_rtu_para SET + TAG_NAME = concat(NEW.TAG_NAME,'.',RTU_NAME), + CHAN_TAG = NEW.TAG_NAME, + CHAN_NO = NEW.CHAN_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE CHAN_TAG = OLD.TAG_NAME; +END; +END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TUA_FES_CHANNEL_PARA AFTER UPDATE ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_CHANNEL_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_channel_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_channel_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_CHANNEL_PARA ON fes_channel_para; +CREATE TRIGGER TDA_FES_CHANNEL_PARA AFTER DELETE ON fes_channel_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_CHANNEL_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const', 'tag_name', '',NEW.TAG_NAME, getTableSubSystem('fes_const')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_CONST ON fes_const; +CREATE TRIGGER TI_FES_CONST AFTER INSERT ON fes_const FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_CONST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_const', 'tag_name', OLD.TAG_NAME,NEW.TAG_NAME, getTableSubSystem('fes_const')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_CONST ON fes_const; +CREATE TRIGGER TU_FES_CONST AFTER UPDATE ON fes_const FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_CONST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const', 'tag_name', OLD.TAG_NAME,'', getTableSubSystem('fes_const')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_CONST ON fes_const; +CREATE TRIGGER TD_FES_CONST AFTER DELETE ON fes_const FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_CONST(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_CONST_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + INSERT INTO fes_const( + TAG_NAME, DESCRIPTION, GROUP_NO, RTU_TAG, RTU_NO, DOT_NO, SEQ_NO, SUB_SYSTEM, LOCATION_ID, DEV_TAG, VALUE, VALUE_TYPE, UNIT_ID, VALUE_TEXT, VALUE_RATIO, VALUE_ADDED, VALUE_MAX, VALUE_MIN, VALUE_DEFAULT, VALUE_VERIFY, EX_INFO, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST'))), NEW.DESCRIPTION,NEW.GROUP_NO,fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_CONST')),NEW.SEQ_NO,fes_rtu_para.SUB_SYSTEM,fes_rtu_para.LOCATION_ID,fes_dev_info.TAG_NAME,NEW.VALUE,NEW.VALUE_TYPE,NEW.UNIT_ID,NEW.VALUE_TEXT, NEW.VALUE_RATIO,NEW.VALUE_ADDED,NEW.VALUE_MAX,NEW.VALUE_MIN,NEW.VALUE_DEFAULT,NEW.VALUE_VERIFY,NEW.EX_INFO,NEW.TAG_NAME, NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_const_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_CONST_TEMP ON fes_const_temp; +CREATE TRIGGER TI_FES_CONST_TEMP AFTER INSERT ON fes_const_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_CONST_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_CONST_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE fes_const SET + DESCRIPTION = NEW.DESCRIPTION, + GROUP_NO = NEW.GROUP_NO, + SEQ_NO = NEW.SEQ_NO, + VALUE = NEW.VALUE, + VALUE_TYPE = NEW.VALUE_TYPE, + UNIT_ID = NEW.UNIT_ID, + VALUE_TEXT = NEW.VALUE_TEXT, + VALUE_RATIO = NEW.VALUE_RATIO, + VALUE_ADDED = NEW.VALUE_ADDED, + VALUE_MAX = NEW.VALUE_MAX, + VALUE_MIN = NEW.VALUE_MIN, + VALUE_DEFAULT = NEW.VALUE_DEFAULT, + VALUE_VERIFY = NEW.VALUE_VERIFY, + EX_INFO = NEW.EX_INFO, + FES_POINT_TP_NAME = NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_const_temp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_CONST_TEMP ON fes_const_temp; +CREATE TRIGGER TU_FES_CONST_TEMP AFTER UPDATE ON fes_const_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_CONST_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_CONST_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + DELETE FROM fes_const WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_const_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_const_temp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_CONST_TEMP ON fes_const_temp; +CREATE TRIGGER TD_FES_CONST_TEMP AFTER DELETE ON fes_const_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_CONST_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', '', concat(NEW.TAG_NAME,',', NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DATA_BLOCK ON fes_data_block; +CREATE TRIGGER TIA_FES_DATA_BLOCK AFTER INSERT ON fes_data_block FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DATA_BLOCK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE, SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,',', OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), concat(NEW.TAG_NAME,',',NEW.BLOCK_ID,',',NEW.RTU_NO,',',NEW.FUNC_CODE), getTableSubSystem('fes_data_block')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_DATA_BLOCK ON fes_data_block; +CREATE TRIGGER TUA_FES_DATA_BLOCK AFTER UPDATE ON fes_data_block FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_DATA_BLOCK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DATA_BLOCK() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME, KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block', 'tag_name,block_id,rtu_no,func_code', concat(OLD.TAG_NAME,OLD.BLOCK_ID,',',OLD.RTU_NO,',',OLD.FUNC_CODE), '', getTableSubSystem('fes_data_block')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DATA_BLOCK ON fes_data_block; +CREATE TRIGGER TDA_FES_DATA_BLOCK AFTER DELETE ON fes_data_block FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DATA_BLOCK(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + INSERT INTO fes_data_block( + TAG_NAME, BLOCK_ID, RTU_NO, FUNC_CODE, STAR_ADDR, DATA_LEN, DATA_FARME_TYPE, REF_CYCLE, IS_CREATE_SOE, PARA_INT1, PARA_INT2, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, LD, CALL_MODE, DATA_SET, DATA_SET_TYPE, DATA_SET_CALL_TIME, REPORT_CTRL, FES_POINT_TP_NAME, DEV_TAG) SELECT + concat(fes_dev_info.TAG_NAME,'.',getAfterLastDot(NEW.TAG_NAME)), NEW.BLOCK_ID,fes_rtu_para.RTU_NO,NEW.FUNC_CODE,NEW.STAR_ADDR,NEW.DATA_LEN, NEW.DATA_FARME_TYPE, NEW.REF_CYCLE, NEW.IS_CREATE_SOE, NEW.PARA_INT1, NEW.PARA_INT2, NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,NEW.LD, NEW.CALL_MODE, NEW.DATA_SET,NEW.DATA_SET_TYPE,NEW.DATA_SET_CALL_TIME,NEW.REPORT_CTRL,NEW.TAG_NAME, fes_dev_info.TAG_NAME + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'fes_data_block_temp', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; +CREATE TRIGGER TI_FES_DATA_BLOCK_TEMP AFTER INSERT ON fes_data_block_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DATA_BLOCK_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE fes_data_block SET + TAG_NAME = concat(getBeforeLastDot(fes_data_block.TAG_NAME),'.',getAfterLastDot(NEW.TAG_NAME)), + BLOCK_ID = NEW.BLOCK_ID, + FUNC_CODE = NEW.FUNC_CODE, + STAR_ADDR = NEW.STAR_ADDR, + DATA_LEN = NEW.DATA_LEN, + DATA_FARME_TYPE = NEW.DATA_FARME_TYPE, + REF_CYCLE = NEW.REF_CYCLE, + IS_CREATE_SOE = NEW.IS_CREATE_SOE, + PARA_INT1 = NEW.PARA_INT1, + PARA_INT2 = NEW.PARA_INT2, + DESCRIPTION = NEW.DESCRIPTION, + LD = NEW.LD, + CALL_MODE = NEW.CALL_MODE, + DATA_SET = NEW.DATA_SET, + DATA_SET_TYPE = NEW.DATA_SET_TYPE, + DATA_SET_CALL_TIME = NEW.DATA_SET_CALL_TIME, + REPORT_CTRL = NEW.REPORT_CTRL, + FES_POINT_TP_NAME = NEW.TAG_NAME + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_data_block_temp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; +CREATE TRIGGER TU_FES_DATA_BLOCK_TEMP AFTER UPDATE ON fes_data_block_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DATA_BLOCK_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DATA_BLOCK_TEMP() RETURNS TRIGGER AS $$ +BEGIN + /* + DELETE FROM fes_data_block WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + */ + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'fes_data_block_temp', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_data_block_temp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DATA_BLOCK_TEMP ON fes_data_block_temp; +CREATE TRIGGER TD_FES_DATA_BLOCK_TEMP AFTER DELETE ON fes_data_block_temp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DATA_BLOCK_TEMP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIB_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN + + NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIB_FES_DEV_INFO ON FES_DEV_INFO; +CREATE TRIGGER TIB_FES_DEV_INFO BEFORE INSERT ON FES_DEV_INFO FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIB_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_INFO() RETURNS TRIGGER AS $$ +DECLARE incVarFesDev1 int; +DECLARE incVarFesDev2 int; +BEGIN + + IF COALESCE(NEW.DEV_TP_NAME,'') <> '' THEN + BEGIN + + --获取最大的点号时已经自动加1,这里减掉 + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ACC')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_accuml( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DOT_NO,RTU_TAG,DEV_TAG,SEQ_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,BASE,COEFF,RTU_NO, RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+ incVarFesDev2, NEW.RTU_TAG,NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO,'', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ACC') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_analog( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DEV_TAG,SEQ_NO,RTU_TAG,RTU_NO,DOT_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,IS_FILTER,PERCENT,DEADBAND_TYPE,DEADBAND,ZEROBAND,BASE,COEFF,MAX_RANGE, MIN_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, fes_rtu_para.RTU_NO , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, '', '', '', fes_dev_pt_temp_def.IS_FILTER, fes_dev_pt_temp_def.PERCENT, fes_dev_pt_temp_def.DEADBAND_TYPE, fes_dev_pt_temp_def.DEADBAND, fes_dev_pt_temp_def.ZEROBAND, fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_dev_pt_temp_def.MAX_RANGE, fes_dev_pt_temp_def.MIN_RANGE, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_digital( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,DEV_TAG,SEQ_NO,RTU_TAG,DOT_NO,APP_TABLE_NAME,APP_TAG_NAME,APP_COLUMN_NAME,FILTER_ERR,FILTER_DISTURB,DISTURB_TIME,REVERS,RTU_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,DESCRIPTION,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,ATTR,ASS_DIG) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, NEW.RTU_TAG, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , '', '', '', fes_dev_pt_temp_def.FILTER_ERR, fes_dev_pt_temp_def.FILTER_DISTURB, fes_dev_pt_temp_def.DISTURB_TIME, fes_dev_pt_temp_def.REVERS, fes_rtu_para.RTU_NO , fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.DESCRIPTION , fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2,ATTR,ASS_DIG + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_mix( + TAG_NAME,DESCRIPTION,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,DOT_NO,DEV_TAG,SEQ_NO,APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE,COEFF,MAX_RANGE, MIN_RANGE, RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2 )SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_dev_pt_temp_def.DESCRIPTION,fes_rtu_para.LOCATION_ID , + fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG,fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2 , NEW.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, '', '', '', fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, fes_dev_pt_temp_def.MAX_RANGE, fes_dev_pt_temp_def.MIN_RANGE, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME + AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_ANA_CTRL')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_analog_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,BASE,COEFF,MAX_RANGE, MIN_RANGE, RTU_NO,DEV_TAG,DOT_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,SEQ_NO,RTU_TAG,DESCRIPTION,POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.RATIO, '32767', '-32768', fes_rtu_para.RTU_NO,NEW.TAG_NAME, + row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4, fes_dev_pt_temp_def.SEQ_NO,NEW.RTU_TAG,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_ANA_CTRL') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_DIG_CTRL')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_digital_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,DOT_NO,DEV_TAG,DESCRIPTION,REVERS,POINT_TP_NAME,SEQ_NO,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,ATTR,CTRL_TYPE) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , NEW.RTU_TAG, + fes_rtu_para.RTU_NO, row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2, NEW.TAG_NAME,fes_dev_pt_temp_def.DESCRIPTION, fes_dev_pt_temp_def.REVERS, fes_dev_pt_temp_def.TAG_NAME,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,PATH61850,POSITION61850,YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2,ATTR,CTRL_TYPE + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_DIG_CTRL') + AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_MIX_CTRL')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_mix_ctrl( + TAG_NAME,LOCATION_ID,SUB_SYSTEM,RTU_TAG,RTU_NO,BASE,DESCRIPTION,DOT_NO,COEFF,MIN_RANGE,MAX_RANGE,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,SEQ_NO,POINT_TP_NAME,DEV_TAG,PATH61850,POSITION61850,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2 )SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev1),fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , + NEW.RTU_TAG,fes_rtu_para.RTU_NO,fes_dev_pt_temp_def.REVISE, fes_dev_pt_temp_def.DESCRIPTION, + row_number() over (ORDER BY fes_dev_pt_temp_def.SEQ_NO)+incVarFesDev2,fes_dev_pt_temp_def.RATIO, '-32768', '32767', fes_dev_pt_temp_def.RES_PARA_INT1, fes_dev_pt_temp_def.RES_PARA_INT2,fes_dev_pt_temp_def.RES_PARA_INT3,fes_dev_pt_temp_def.RES_PARA_INT4,fes_dev_pt_temp_def.SEQ_NO, fes_dev_pt_temp_def.TAG_NAME,NEW.TAG_NAME,PATH61850,POSITION61850,fes_dev_pt_temp_def.RES_PARA_INT5,fes_dev_pt_temp_def.RES_PARA_INT6,fes_dev_pt_temp_def.RES_PARA_INT7,fes_dev_pt_temp_def.RES_PARA_INT8,fes_dev_pt_temp_def.RES_PARA_STR1,fes_dev_pt_temp_def.RES_PARA_STR2 + FROM fes_dev_pt_temp_def, fes_rtu_para WHERE fes_dev_pt_temp_def.DEV_TP_NAME=NEW.DEV_TP_NAME + AND fes_dev_pt_temp_def.POINT_TYPE=getFesPointType('FES_MIX_CTRL') AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + + INSERT INTO fes_data_block( + TAG_NAME,BLOCK_ID,RTU_TAG,RTU_NO,FUNC_CODE,STAR_ADDR,DATA_LEN,DATA_FARME_TYPE,REF_CYCLE,IS_CREATE_SOE,PARA_INT1,PARA_INT2,DESCRIPTION,LOCATION_ID,SUB_SYSTEM,LD,CALL_MODE,DATA_SET,DATA_SET_TYPE,DATA_SET_CALL_TIME,REPORT_CTRL,FES_POINT_TP_NAME,DEV_TAG,PARA_INT3,PARA_INT4,PARA_STR1,PARA_STR2,IS_ENABLE) SELECT + concat(NEW.TAG_NAME,'.',getAfterLastDot(fes_data_block_temp.TAG_NAME)), fes_data_block_temp.BLOCK_ID,fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO,fes_data_block_temp.FUNC_CODE,fes_data_block_temp.STAR_ADDR,fes_data_block_temp.DATA_LEN, fes_data_block_temp.DATA_FARME_TYPE,fes_data_block_temp.REF_CYCLE,fes_data_block_temp.IS_CREATE_SOE,fes_data_block_temp.PARA_INT1, fes_data_block_temp.PARA_INT2, fes_data_block_temp.DESCRIPTION,fes_rtu_para.LOCATION_ID,fes_rtu_para.SUB_SYSTEM,fes_data_block_temp.LD, fes_data_block_temp.CALL_MODE, fes_data_block_temp.DATA_SET, fes_data_block_temp.DATA_SET_TYPE,fes_data_block_temp.DATA_SET_CALL_TIME, fes_data_block_temp.REPORT_CTRL,fes_data_block_temp.TAG_NAME, NEW.TAG_NAME,fes_data_block_temp.PARA_INT3,fes_data_block_temp.PARA_INT4,fes_data_block_temp.PARA_STR1,fes_data_block_temp.PARA_STR2,IS_ENABLE + FROM fes_data_block_temp, fes_rtu_para WHERE fes_data_block_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ORDER BY fes_data_block_temp.BLOCK_ID; + + incVarFesDev1 = getMaxRtuDotNo(NEW.RTU_TAG,getFesPointType('FES_CONST')) - 1; + incVarFesDev2 = incVarFesDev1; + + INSERT INTO fes_const( + TAG_NAME,DESCRIPTION,GROUP_NO,RTU_TAG,RTU_NO,DOT_NO,SEQ_NO,SUB_SYSTEM,LOCATION_ID,DEV_TAG,VALUE,VALUE_TYPE,UNIT_ID,VALUE_TEXT,VALUE_RATIO,VALUE_ADDED,VALUE_MAX,VALUE_MIN,VALUE_DEFAULT,VALUE_VERIFY,EX_INFO,FES_POINT_TP_NAME,PATH61850,POSITION61850,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,RES_PARA_INT5,RES_PARA_INT6,RES_PARA_INT7,RES_PARA_INT8,RES_PARA_STR1,RES_PARA_STR2,DZ_SEQ) SELECT + concat(NEW.RTU_TAG, '.' , row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev1), fes_const_temp.DESCRIPTION,fes_const_temp.GROUP_NO,NEW.RTU_TAG, + fes_rtu_para.RTU_NO,row_number() over (ORDER BY fes_const_temp.SEQ_NO)+incVarFesDev2,fes_const_temp.SEQ_NO,NEW.SUB_SYSTEM,NEW.LOCATION_ID,NEW.TAG_NAME,fes_const_temp.VALUE,fes_const_temp.VALUE_TYPE,fes_const_temp.UNIT_ID,fes_const_temp.VALUE_TEXT, fes_const_temp.VALUE_RATIO,fes_const_temp.VALUE_ADDED,fes_const_temp.VALUE_MAX,fes_const_temp.VALUE_MIN,fes_const_temp.VALUE_DEFAULT,fes_const_temp.VALUE_VERIFY,fes_const_temp.EX_INFO,fes_const_temp.TAG_NAME,PATH61850, POSITION61850,fes_const_temp.RES_PARA_INT1,fes_const_temp.RES_PARA_INT2,fes_const_temp.RES_PARA_INT3,fes_const_temp.RES_PARA_INT4,fes_const_temp.RES_PARA_INT5,fes_const_temp.RES_PARA_INT6,fes_const_temp.RES_PARA_INT7,fes_const_temp.RES_PARA_INT8,fes_const_temp.RES_PARA_STR1,fes_const_temp.RES_PARA_STR2,DZ_SEQ + FROM fes_const_temp, fes_rtu_para WHERE fes_const_temp.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=NEW.RTU_TAG ; + + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_info', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TI_FES_DEV_INFO AFTER INSERT ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.DEV_NAME <> OLD.DEV_NAME THEN + NEW.TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DEV_NAME); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_FES_DEV_INFO ON FES_DEV_INFO; +CREATE TRIGGER TUB_FES_DEV_INFO BEFORE UPDATE ON FES_DEV_INFO FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.LOCATION_ID <> OLD.LOCATION_ID OR NEW.SUB_SYSTEM <> OLD.SUB_SYSTEM + OR NEW.RTU_NO <> OLD.RTU_NO + THEN + BEGIN + + update fes_accuml + SET fes_accuml.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_accuml.DOT_NO), fes_accuml.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_accuml.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_accuml.RTU_TAG = NEW.RTU_TAG, fes_accuml.DEV_TAG = NEW.TAG_NAME, fes_accuml.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_accuml.DEV_TAG = OLD.TAG_NAME; + + + + update fes_analog + SET fes_analog.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog.DOT_NO), fes_analog.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_analog.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_analog.RTU_TAG = NEW.RTU_TAG, fes_analog.DEV_TAG = NEW.TAG_NAME, fes_analog.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog.DEV_TAG = OLD.TAG_NAME; + + + + update fes_digital + SET fes_digital.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital.DOT_NO ), fes_digital.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_digital.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_digital.RTU_TAG = NEW.RTU_TAG, fes_digital.DEV_TAG = NEW.TAG_NAME, fes_digital.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital.DEV_TAG = OLD.TAG_NAME; + + + + update fes_mix + SET fes_mix.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix.DOT_NO), fes_mix.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_mix.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_mix.RTU_TAG = NEW.RTU_TAG, fes_mix.DEV_TAG = NEW.TAG_NAME, fes_mix.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix.DEV_TAG = OLD.TAG_NAME; + + + + update fes_analog_ctrl + SET fes_analog_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_analog_ctrl.DOT_NO), fes_analog_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_analog_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_analog_ctrl.RTU_TAG = NEW.RTU_TAG, fes_analog_ctrl.DEV_TAG = NEW.TAG_NAME, fes_analog_ctrl.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_analog_ctrl.DEV_TAG = OLD.TAG_NAME; + + + + update fes_digital_ctrl + SET fes_digital_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_digital_ctrl.DOT_NO), fes_digital_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_digital_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_digital_ctrl.RTU_TAG = NEW.RTU_TAG, fes_digital_ctrl.DEV_TAG = NEW.TAG_NAME, fes_digital_ctrl.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_digital_ctrl.DEV_TAG = OLD.TAG_NAME; + + + + update fes_mix_ctrl + SET fes_mix_ctrl.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_mix_ctrl.DOT_NO), fes_mix_ctrl.LOCATION_ID = fes_rtu_para.LOCATION_ID, fes_mix_ctrl.SUB_SYSTEM = fes_rtu_para.SUB_SYSTEM, fes_mix_ctrl.RTU_TAG = NEW.RTU_TAG, fes_mix_ctrl.DEV_TAG = NEW.TAG_NAME, fes_mix_ctrl.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_mix_ctrl.DEV_TAG = OLD.TAG_NAME; + + + update fes_data_block + SET fes_data_block.LOCATION_ID = NEW.LOCATION_ID, fes_data_block.SUB_SYSTEM = NEW.SUB_SYSTEM, fes_data_block.DEV_TAG = NEW.TAG_NAME, fes_data_block.RTU_TAG = NEW.RTU_TAG, fes_data_block.TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(fes_data_block.TAG_NAME)), fes_data_block.RTU_NO = fes_rtu_para.RTU_NO + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_data_block.DEV_TAG = OLD.TAG_NAME; + + + update fes_const + SET fes_const.LOCATION_ID = NEW.LOCATION_ID, fes_const.SUB_SYSTEM = NEW.SUB_SYSTEM, fes_const.DEV_TAG = NEW.TAG_NAME, fes_const.RTU_TAG = NEW.RTU_TAG, fes_const.RTU_NO = fes_rtu_para.RTU_NO, fes_const.TAG_NAME = concat(NEW.RTU_TAG, '.' , fes_const.DOT_NO) + from fes_rtu_para + WHERE fes_rtu_para.TAG_NAME= NEW.RTU_TAG AND fes_const.DEV_TAG = OLD.TAG_NAME; + + + + END; + END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TU_FES_DEV_INFO AFTER UPDATE ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN +DELETE FROM fes_accuml WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_analog WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_digital WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_mix WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_analog_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_digital_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_mix_ctrl WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_data_block WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +DELETE FROM fes_const WHERE TAG_NAME LIKE concat(OLD.RTU_TAG,'%') AND DEV_TAG = OLD.TAG_NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TD_FES_DEV_INFO BEFORE DELETE ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_info', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_INFO ON fes_dev_info; +CREATE TRIGGER TDA_FES_DEV_INFO AFTER DELETE ON fes_dev_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + /* + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + INSERT INTO fes_accuml( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DOT_NO, RTU_TAG, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM ,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ACC')), fes_dev_info.RTU_TAG,fes_dev_info.TAG_NAME,NEW.SEQ_NO,'', '', '', '0', '1', fes_rtu_para.RTU_NO ,NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION ,NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + INSERT INTO fes_analog( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, RTU_NO, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, IS_FILTER, PERCENT, DEADBAND_TYPE, DEADBAND, ZEROBAND, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME, PATH61850, POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,fes_rtu_para.RTU_NO , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA')),'', '', '', 0, 0, '0', '0', '0', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + INSERT INTO fes_digital( + TAG_NAME, LOCATION_ID, SUB_SYSTEM, DEV_TAG, SEQ_NO, RTU_TAG, DOT_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, FILTER_ERR, FILTER_DISTURB, DISTURB_TIME, REVERS, RTU_NO, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, DESCRIPTION, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG'))), fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_dev_info.TAG_NAME,NEW.SEQ_NO, fes_dev_info.RTU_TAG,getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG')), '', '', '', 0, 0, 0, 0, fes_rtu_para.RTU_NO , NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.DESCRIPTION , NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + INSERT INTO fes_mix( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, APP_TABLE_NAME, APP_TAG_NAME, APP_COLUMN_NAME, BASE, COEFF, MAX_RANGE, MIN_RANGE, RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, FES_POINT_TP_NAME,PATH61850,POSITION61850) SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX'))), NEW.DESCRIPTION ,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX')), fes_dev_info.TAG_NAME, NEW.SEQ_NO, '', '', '', '0', '1', 65536, 0, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4, NEW.TAG_NAME ,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + INSERT INTO fes_analog_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MAX_RANGE, MIN_RANGE, POINT_TP_NAME,RES_PARA_INT1,RES_PARA_INT2,RES_PARA_INT3,RES_PARA_INT4,PATH61850,POSITION61850)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_ANA_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, '0', '1', 65536, 0, NEW.TAG_NAME ,NEW.RES_PARA_INT1,NEW.RES_PARA_INT2,NEW.RES_PARA_INT3,NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + INSERT INTO fes_digital_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, REVERS, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4, PATH61850, POSITION61850, YK_SELECT61850, YK_EXE61850, YK_CANCLE61850, YK_DOUBLE_SELECT61850, YK_DOUBLE_EXE61850, YK_DOUBLE_CANCLE61850, PULSE_TIME)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_DIG_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO, 0, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850,NEW.YK_SELECT61850, NEW.YK_EXE61850, NEW.YK_CANCLE61850, NEW.YK_DOUBLE_SELECT61850, NEW.YK_DOUBLE_EXE61850, NEW.YK_DOUBLE_CANCLE61850, NEW.PULSE_TIME + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + INSERT INTO fes_mix_ctrl( + TAG_NAME, DESCRIPTION, LOCATION_ID, SUB_SYSTEM, RTU_TAG, RTU_NO, DOT_NO, DEV_TAG, SEQ_NO, BASE, COEFF, MIN_RANGE, MAX_RANGE, POINT_TP_NAME,RES_PARA_INT1, RES_PARA_INT2, RES_PARA_INT3, RES_PARA_INT4,PATH61850,POSITION61850)SELECT + concat(fes_dev_info.RTU_TAG, '.' , getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL'))),NEW.DESCRIPTION,fes_rtu_para.LOCATION_ID ,fes_rtu_para.SUB_SYSTEM , fes_rtu_para.TAG_NAME,fes_rtu_para.RTU_NO, getMaxRtuDotNo(fes_dev_info.RTU_TAG,getFesPointType('FES_MIX_CTRL')), fes_dev_info.TAG_NAME,NEW.SEQ_NO,'0', '1', 0, 65536, NEW.TAG_NAME, NEW.RES_PARA_INT1, NEW.RES_PARA_INT2, NEW.RES_PARA_INT3, NEW.RES_PARA_INT4,NEW.PATH61850,NEW.POSITION61850 + FROM fes_dev_info, fes_rtu_para WHERE fes_dev_info.DEV_TP_NAME=NEW.DEV_TP_NAME AND fes_rtu_para.TAG_NAME=fes_dev_info.RTU_TAG; + END IF; + */ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_pt_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TI_FES_DEV_PT_TEMP_DEF AFTER INSERT ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + /* + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + UPDATE fes_accuml SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + UPDATE fes_analog SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + UPDATE fes_digital SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + UPDATE fes_mix SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + FES_POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + UPDATE fes_analog_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + UPDATE fes_digital_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850, + YK_SELECT61850 = NEW.YK_SELECT61850, + YK_EXE61850 = NEW.YK_EXE61850, + YK_CANCLE61850 = NEW.YK_CANCLE61850, + YK_DOUBLE_SELECT61850 = NEW.YK_DOUBLE_SELECT61850, + YK_DOUBLE_EXE61850 = NEW.YK_DOUBLE_EXE61850, + YK_DOUBLE_CANCLE61850 = NEW.YK_DOUBLE_CANCLE61850, + PULSE_TIME = NEW.PULSE_TIME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + UPDATE fes_mix_ctrl SET + SEQ_NO = NEW.SEQ_NO, + DESCRIPTION = NEW.DESCRIPTION, + POINT_TP_NAME= NEW.TAG_NAME, + PATH61850 = NEW.PATH61850, + POSITION61850 = NEW.POSITION61850 + WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ + --更新套件内容 + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + IF NEW.POINT_TYPE = getFesPointType('FES_ACC') THEN + UPDATE temp_plugin_point_map_acc SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA') THEN + UPDATE temp_plugin_point_map_ana SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX') THEN + UPDATE temp_plugin_point_map_mix SET FES_TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG') THEN + UPDATE temp_plugin_point_map_dig SET + FES_TEMP_POINT_NAME1 = IF(FES_TEMP_POINT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME1), + FES_TEMP_POINT_NAME2 = IF(FES_TEMP_POINT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME2), + FES_TEMP_POINT_NAME3 = IF(FES_TEMP_POINT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME3), + FES_TEMP_POINT_NAME4 = IF(FES_TEMP_POINT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME4), + FES_TEMP_POINT_NAME5 = IF(FES_TEMP_POINT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_POINT_NAME5) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + UPDATE temp_plugin_point_map_ana SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + UPDATE temp_plugin_point_map_mix SET FES_TEMP_OUT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME AND FES_TEMP_OUT_NAME = getAfterLastDot(OLD.TAG_NAME); + ELSEIF NEW.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + UPDATE temp_plugin_point_map_dig SET + FES_TEMP_OUT_NAME1 = IF(FES_TEMP_OUT_NAME1 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME1), + FES_TEMP_OUT_NAME2 = IF(FES_TEMP_OUT_NAME2 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME2), + FES_TEMP_OUT_NAME3 = IF(FES_TEMP_OUT_NAME3 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME3), + FES_TEMP_OUT_NAME4 = IF(FES_TEMP_OUT_NAME4 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME4), + FES_TEMP_OUT_NAME5 = IF(FES_TEMP_OUT_NAME5 = getAfterLastDot(OLD.TAG_NAME),getAfterLastDot(NEW.TAG_NAME),FES_TEMP_OUT_NAME5) + WHERE FES_TEMP_NAME = OLD.DEV_TP_NAME; + END IF; + END; + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TU_FES_DEV_PT_TEMP_DEF AFTER UPDATE ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + /* + IF OLD.POINT_TYPE = getFesPointType('FES_ACC') THEN + DELETE FROM fes_accuml WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF OLD.POINT_TYPE = getFesPointType('FES_ANA') THEN + DELETE FROM fes_analog WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + IF OLD.POINT_TYPE = getFesPointType('FES_DIG') THEN + DELETE FROM fes_digital WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_MIX') THEN + DELETE FROM fes_mix WHERE FES_POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_ANA_CTRL') THEN + DELETE FROM fes_analog_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_DIG_CTRL') THEN + DELETE FROM fes_digital_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + + + IF OLD.POINT_TYPE = getFesPointType('FES_MIX_CTRL') THEN + DELETE FROM fes_mix_ctrl WHERE POINT_TP_NAME = OLD.TAG_NAME; + END IF; + */ +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TD_FES_DEV_PT_TEMP_DEF BEFORE DELETE ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_PT_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_pt_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_pt_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_PT_TEMP_DEF ON fes_dev_pt_temp_def; +CREATE TRIGGER TDA_FES_DEV_PT_TEMP_DEF AFTER DELETE ON fes_dev_pt_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_PT_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_temp_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TIA_FES_DEV_TEMP_DEF AFTER INSERT ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + UPDATE fes_dev_pt_temp_def SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + UPDATE fes_const_temp SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + UPDATE fes_data_block_temp SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)), + DEV_TP_NAME = NEW.TAG_NAME + WHERE DEV_TP_NAME = OLD.TAG_NAME; + + /* + UPDATE fes_dev_info SET + DEV_TP_NAME = NEW.TAG_NAME, + DEV_TYPE_ID = NEW.DEV_TYPE_ID + WHERE DEV_TP_NAME = OLD.TAG_NAME; + */ + + --更新套件 + IF OLD.TAG_NAME != NEW.TAG_NAME THEN + BEGIN + UPDATE temp_plugin_fes_dev_map SET FES_TEMP_NAME = NEW.TAG_NAME WHERE FES_TEMP_NAME = OLD.TAG_NAME; + END; + END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TU_FES_DEV_TEMP_DEF AFTER UPDATE ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN + + DELETE FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = OLD.TAG_NAME; + DELETE FROM fes_const_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; + DELETE FROM fes_data_block_temp WHERE DEV_TP_NAME = OLD.TAG_NAME; + --套件的处理 + DELETE FROM temp_plugin_fes_dev_map WHERE FES_TEMP_NAME = OLD.TAG_NAME; + /* + DELETE FROM fes_dev_info WHERE DEV_TP_NAME = OLD.TAG_NAME; + */ + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TD_FES_DEV_TEMP_DEF BEFORE DELETE ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TEMP_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_temp_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_dev_temp_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_TEMP_DEF ON fes_dev_temp_def; +CREATE TRIGGER TDA_FES_DEV_TEMP_DEF AFTER DELETE ON fes_dev_temp_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TEMP_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_dev_type_def', 'dev_type_id', '', NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TIA_FES_DEV_TYPE_DEF AFTER INSERT ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.DEV_TYPE_ID <> OLD.DEV_TYPE_ID THEN + BEGIN + UPDATE fes_dev_temp_def SET + DEV_TYPE_ID = NEW.DEV_TYPE_ID + WHERE DEV_TYPE_ID = OLD.DEV_TYPE_ID; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TU_FES_DEV_TYPE_DEF BEFORE UPDATE ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, NEW.DEV_TYPE_ID, getTableSubSystem('fes_dev_type_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TUA_FES_DEV_TYPE_DEF AFTER UPDATE ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_DEV_TYPE_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_dev_type_def', 'dev_type_id', OLD.DEV_TYPE_ID, '', getTableSubSystem('fes_dev_type_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_DEV_TYPE_DEF ON fes_dev_type_def; +CREATE TRIGGER TDA_FES_DEV_TYPE_DEF AFTER DELETE ON fes_dev_type_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_DEV_TYPE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_DIGITAL() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.DigitalMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesDigitalTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO1 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO2 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO3 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO4 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO5 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.DigitalMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TI_FES_DIGITAL AFTER INSERT ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.DigitalMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesDigitalTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN + UPDATE digital_map_to_fes SET + DOT_NO1 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN + UPDATE digital_map_to_fes SET + DOT_NO2 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN + UPDATE digital_map_to_fes SET + DOT_NO3 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN + UPDATE digital_map_to_fes SET + DOT_NO4 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN + UPDATE digital_map_to_fes SET + DOT_NO5 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value1' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO1 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value2' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO2 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value3' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO3 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value4' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO4 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')='value5' THEN + BEGIN + UPDATE digital_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO5 = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.DigitalMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TU_FES_DIGITAL BEFORE UPDATE ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_DIGITAL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TUA_FES_DIGITAL AFTER UPDATE ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.DigitalMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesDigitalTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value1' THEN + UPDATE digital_map_to_fes SET + DOT_NO1 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value2' THEN + UPDATE digital_map_to_fes SET + DOT_NO2 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value3' THEN + UPDATE digital_map_to_fes SET + DOT_NO3 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value4' THEN + UPDATE digital_map_to_fes SET + DOT_NO4 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')='value5' THEN + UPDATE digital_map_to_fes SET + DOT_NO5 = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.DigitalMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DIGITAL ON fes_digital; +CREATE TRIGGER TD_FES_DIGITAL AFTER DELETE ON fes_digital FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_digital_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_DIGITAL_CTRL ON fes_digital_ctrl; +CREATE TRIGGER TIA_FES_DIGITAL_CTRL AFTER INSERT ON fes_digital_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_DIGITAL_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ +BEGIN + --更新关联了此点的遥控点 + + IF NEW.RTU_TAG <> OLD.RTU_TAG OR NEW.DOT_NO<> OLD.DOT_NO + THEN + BEGIN + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO1 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO2 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO3 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO4 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO5 = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); + + END; + END IF; + + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_digital_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_DIGITAL_CTRL ON fes_digital_ctrl; +CREATE TRIGGER TU_FES_DIGITAL_CTRL AFTER UPDATE ON fes_digital_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_DIGITAL_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_DIGITAL_CTRL() RETURNS TRIGGER AS $$ +BEGIN + UPDATE digital_control SET + OFFSET_NO1 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO1 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO2 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO2 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO3 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO3 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO4 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO4 = cast(OLD.DOT_NO AS char); + + UPDATE digital_control SET + OFFSET_NO5 = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO5 = cast(OLD.DOT_NO AS char); + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_digital_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_digital_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_DIGITAL_CTRL ON fes_digital_ctrl; +CREATE TRIGGER TD_FES_DIGITAL_CTRL AFTER DELETE ON fes_digital_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_DIGITAL_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_MIX() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.MixMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesMixTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE mix_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.MixMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_MIX ON fes_mix; +CREATE TRIGGER TI_FES_MIX AFTER INSERT ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + IF OLD.APP_TABLE_NAME=NEW.APP_TABLE_NAME AND OLD.APP_TAG_NAME = NEW.APP_TAG_NAME AND OLD.APP_COLUMN_NAME = NEW.APP_COLUMN_NAME + AND OLD.RTU_TAG = NEW.RTU_TAG AND OLD.DOT_NO = NEW.DOT_NO + THEN RETURN NEW; + END IF; + + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.MixMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesMixTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE mix_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + IF COALESCE(NEW.APP_TABLE_NAME,'')<>'' AND COALESCE(NEW.APP_TAG_NAME,'')<>'' AND COALESCE(NEW.APP_COLUMN_NAME,'')<>'' THEN + BEGIN + UPDATE mix_map_to_fes SET + RTU_TAG = NEW.RTU_TAG, + DOT_NO = NEW.DOT_NO + WHERE KEY_ID_TAG = concat(NEW.APP_TABLE_NAME,'.', NEW.APP_TAG_NAME); + END; + END IF; + + END; + END IF; + + SET SESSION "disable.MixMapToFesTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_MIX ON fes_mix; +CREATE TRIGGER TU_FES_MIX BEFORE UPDATE ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_MIX() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_MIX ON fes_mix; +CREATE TRIGGER TUA_FES_MIX AFTER UPDATE ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --首先禁止MAP_TO_FES触发器动作 + SET SESSION "disable.MixMapToFesTrigger" = 1; + --然后询问自己是否已经被禁止 + SELECT CURRENT_SETTING('disable.FesMixTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(OLD.APP_TABLE_NAME,'')<>'' AND COALESCE(OLD.APP_TAG_NAME,'')<>'' AND COALESCE(OLD.APP_COLUMN_NAME,'')<>'' THEN + UPDATE mix_map_to_fes SET + DOT_NO = '-1' + WHERE KEY_ID_TAG = concat(OLD.APP_TABLE_NAME,'.', OLD.APP_TAG_NAME); + END IF; + + END; + END IF; + + SET SESSION "disable.MixMapToFesTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_MIX ON fes_mix; +CREATE TRIGGER TD_FES_MIX AFTER DELETE ON fes_mix FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_MIX(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_MIX_CTRL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_mix_ctrl', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_MIX_CTRL ON fes_mix_ctrl; +CREATE TRIGGER TIA_FES_MIX_CTRL AFTER INSERT ON fes_mix_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_MIX_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_MIX_CTRL() RETURNS TRIGGER AS $$ +BEGIN + --更新关联了此点的遥控点 + + IF NEW.RTU_TAG = OLD.RTU_TAG AND NEW.DOT_NO= OLD.DOT_NO + THEN + BEGIN + UPDATE mix_control SET + RTU_TAG = NEW.RTU_TAG, + OFFSET_NO = NEW.DOT_NO + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + END; + END IF; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_mix_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_MIX_CTRL ON fes_mix_ctrl; +CREATE TRIGGER TU_FES_MIX_CTRL AFTER UPDATE ON fes_mix_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_MIX_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_MIX_CTRL() RETURNS TRIGGER AS $$ +BEGIN + UPDATE mix_control SET + OFFSET_NO = '-1' + WHERE RTU_TAG = OLD.RTU_TAG AND OFFSET_NO = cast(OLD.DOT_NO AS char); + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_mix_ctrl', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_mix_ctrl')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_MIX_CTRL ON fes_mix_ctrl; +CREATE TRIGGER TD_FES_MIX_CTRL AFTER DELETE ON fes_mix_ctrl FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_MIX_CTRL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_protocol', 'protocol_id', '', NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TIA_FES_PROTOCOL AFTER INSERT ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.PROTOCOL_ID <> OLD.PROTOCOL_ID THEN + BEGIN + UPDATE fes_channel_para SET + PROTO_TYPE = NEW.PROTOCOL_ID + WHERE PROTO_TYPE = OLD.PROTOCOL_ID; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TU_FES_PROTOCOL BEFORE UPDATE ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, NEW.PROTOCOL_ID, getTableSubSystem('fes_protocol')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TUA_FES_PROTOCOL AFTER UPDATE ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_PROTOCOL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_protocol', 'protocol_id', OLD.PROTOCOL_ID, '', getTableSubSystem('fes_protocol')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_PROTOCOL ON fes_protocol; +CREATE TRIGGER TDA_FES_PROTOCOL AFTER DELETE ON fes_protocol FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_PROTOCOL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIB_FES_RTU_PARA() RETURNS TRIGGER AS $$ + DECLARE chNo decimal(10,0) DEFAULT 0; +BEGIN + NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); + + SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; + + NEW.CHAN_NO = chNo; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIB_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TIB_FES_RTU_PARA BEFORE INSERT ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIB_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN + /* + * 不再产生默认设备 +INSERT INTO fes_dev_info +(TAG_NAME, DEV_NAME, LOCATION_ID, SUB_SYSTEM, DEV_ID, DEV_TYPE_ID, RTU_TAG, DEV_DESC, RTU_NO, DEV_TP_NAME) VALUES +(concat(NEW.TAG_NAME, '.', 'defaultDev' ),'defaultDev',NEW.LOCATION_ID,NEW.SUB_SYSTEM,'-1', '-1' ,NEW.TAG_NAME,'默认设备',NEW.RTU_NO ,'' ); +*/ +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'fes_rtu_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TI_FES_RTU_PARA AFTER INSERT ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUB_FES_RTU_PARA() RETURNS TRIGGER AS $$ + DECLARE chNo decimal(10,0) DEFAULT 0; +BEGIN + IF NEW.RTU_NAME <> OLD.RTU_NAME OR NEW.CHAN_TAG <> OLD.CHAN_TAG THEN + NEW.TAG_NAME = concat(NEW.CHAN_TAG,'.',NEW.RTU_NAME); + END IF; + + IF NEW.CHAN_TAG <> OLD.CHAN_TAG THEN + BEGIN + SELECT CHAN_NO INTO chNo FROM fes_channel_para WHERE TAG_NAME = NEW.CHAN_TAG; + NEW.CHAN_NO = chNo; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUB_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TUB_FES_RTU_PARA BEFORE UPDATE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUB_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN + +IF NEW.TAG_NAME <> OLD.TAG_NAME OR NEW.RTU_NO <> OLD.RTU_NO OR NEW.DESCRIPTION <> OLD.DESCRIPTION +THEN +BEGIN + + + UPDATE fes_dev_info SET + TAG_NAME = concat(NEW.TAG_NAME, '.', getAfterLastDot(TAG_NAME)) , + DEV_DESC = DEV_DESC, + RTU_TAG = NEW.TAG_NAME, + RTU_NO = NEW.RTU_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE fes_data_block SET + RTU_NO = NEW.RTU_NO, + LOCATION_ID = NEW.LOCATION_ID, + SUB_SYSTEM = NEW.SUB_SYSTEM + WHERE RTU_NO = OLD.RTU_NO; + + IF NEW.RTU_NO <> OLD.RTU_NO THEN + BEGIN + UPDATE dev_group SET + RTU_NO = NEW.RTU_NO + WHERE RTU_NO = OLD.RTU_NO; + END; + END IF; + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + --更新关联的后台测点 + UPDATE accuml SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE analog SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE digital SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + UPDATE mix SET + RTU_TAG = NEW.TAG_NAME + WHERE RTU_TAG = OLD.TAG_NAME; + + + END; + END IF; + +END; +END IF; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('fes_rtu_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TU_FES_RTU_PARA AFTER UPDATE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN +DELETE FROM fes_dev_info WHERE RTU_TAG = OLD.TAG_NAME; +DELETE FROM fes_data_block WHERE RTU_NO = OLD.RTU_NO; +--更新关联的后台测点 +UPDATE accuml SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE analog SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE digital SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +UPDATE mix SET +RTU_TAG = '' +WHERE RTU_TAG = OLD.TAG_NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TD_FES_RTU_PARA BEFORE DELETE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_FES_RTU_PARA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'fes_rtu_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('fes_rtu_para')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_FES_RTU_PARA ON fes_rtu_para; +CREATE TRIGGER TDA_FES_RTU_PARA AFTER DELETE ON fes_rtu_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_FES_RTU_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --仅仅修改时标 + + NEW.TIMEFLAG = floor(extract(epoch from now())); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TI_LINKAGE_ACTION BEFORE INSERT ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_action', 'name', '', NEW.NAME, getTableSubSystem('linkage_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TIA_LINKAGE_ACTION AFTER INSERT ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应功能 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_function SET + TIMEFLAG = NEW.TIMEFLAG, + ACTION_NAME = NEW.NAME + WHERE ACTION_NAME = OLD.NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TU_LINKAGE_ACTION BEFORE UPDATE ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TUA_LINKAGE_ACTION AFTER UPDATE ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此动作的功能 + DELETE FROM linkage_function WHERE ACTION_NAME = OLD.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_action', 'name', OLD.NAME, '', getTableSubSystem('linkage_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_ACTION ON linkage_action; +CREATE TRIGGER TD_LINKAGE_ACTION AFTER DELETE ON linkage_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.LinkageSettingTrigger" = 1; + + SELECT CURRENT_SETTING('disable.LinkageDefineTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = NEW.LINKAGE_NAME; + END; + END IF; + + SET SESSION "disable.LinkageSettingTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TI_LINKAGE_DEFINE BEFORE INSERT ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_define', 'linkage_name,func_name', '', concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TIA_LINKAGE_DEFINE AFTER INSERT ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.LinkageSettingTrigger" = 1; + + SELECT CURRENT_SETTING('disable.LinkageDefineTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = OLD.LINKAGE_NAME; + END; + END IF; + + SET SESSION "disable.LinkageSettingTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TU_LINKAGE_DEFINE BEFORE UPDATE ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), concat(NEW.LINKAGE_NAME,',',NEW.FUNC_NAME), getTableSubSystem('linkage_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TUA_LINKAGE_DEFINE AFTER UPDATE ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.LinkageSettingTrigger" = 1; + + SELECT CURRENT_SETTING('disable.LinkageDefineTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + UPDATE linkage_setting SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE NAME = OLD.LINKAGE_NAME; + END; + END IF; + + SET SESSION "disable.LinkageSettingTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_define', 'linkage_name,func_name', concat(OLD.LINKAGE_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('linkage_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_DEFINE ON linkage_define; +CREATE TRIGGER TD_LINKAGE_DEFINE AFTER DELETE ON linkage_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --仅仅修改时标 + NEW.TIMEFLAG = floor(extract(epoch from now())); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TI_LINKAGE_FUNCTION BEFORE INSERT ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TIA_LINKAGE_FUNCTION AFTER INSERT ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应联动功能关系表 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE linkage_define SET + TIMEFLAG = NEW.TIMEFLAG, + FUNC_NAME = NEW.NAME + WHERE FUNC_NAME = OLD.NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TU_LINKAGE_FUNCTION BEFORE UPDATE ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('linkage_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TUA_LINKAGE_FUNCTION AFTER UPDATE ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此功能的联动定义 + --检查功能是否被删除 + IF NOT EXISTS (SELECT * FROM linkage_function WHERE NAME = OLD.NAME) THEN + BEGIN + DELETE FROM linkage_define WHERE FUNC_NAME = OLD.NAME; + END; + ELSE + BEGIN + --修改时标 + UPDATE linkage_define SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE FUNC_NAME = OLD.NAME; + END; + END IF; + + + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('linkage_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_FUNCTION ON linkage_function; +CREATE TRIGGER TD_LINKAGE_FUNCTION AFTER DELETE ON linkage_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.LinkageDefineTrigger" = 1; + + SELECT CURRENT_SETTING('disable.LinkageSettingTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + END; + END IF; + + SET SESSION "disable.LinkageDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TI_LINKAGE_SETTING BEFORE INSERT ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'linkage_setting', 'name', '', NEW.NAME, getTableSubSystem('linkage_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TIA_LINKAGE_SETTING AFTER INSERT ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.LinkageDefineTrigger" = 1; + + SELECT CURRENT_SETTING('disable.LinkageSettingTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + IF NEW.NAME<>OLD.NAME THEN + UPDATE linkage_define SET + LINKAGE_NAME = NEW.NAME + WHERE LINKAGE_NAME = OLD.NAME; + END IF; + END; + END IF; + + SET SESSION "disable.LinkageDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TU_LINKAGE_SETTING BEFORE UPDATE ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'linkage_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('linkage_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TUA_LINKAGE_SETTING AFTER UPDATE ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_LINKAGE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --删除关联了此联动的功能关联 + --避免触发器循环 + SET SESSION "disable.LinkageDefineTrigger" = 1; + + SELECT CURRENT_SETTING('disable.LinkageSettingTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + DELETE FROM linkage_define WHERE LINKAGE_NAME = OLD.NAME; + END; + END IF; + + SET SESSION "disable.LinkageDefineTrigger" = 0; + + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'linkage_setting', 'name', OLD.NAME, '', getTableSubSystem('linkage_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_LINKAGE_SETTING ON linkage_setting; +CREATE TRIGGER TD_LINKAGE_SETTING AFTER DELETE ON linkage_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_LINKAGE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_control', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_MIX_CONTROL ON mix_control; +CREATE TRIGGER TIA_MIX_CONTROL AFTER INSERT ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN + + --修改功能名称 + IF COALESCE(NEW.RTU_TAG,'') = '' THEN + BEGIN + NEW.OFFSET_NO = '-1'; + END; + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_MIX_CONTROL ON mix_control; +CREATE TRIGGER TU_MIX_CONTROL BEFORE UPDATE ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_control', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_MIX_CONTROL ON mix_control; +CREATE TRIGGER TUA_MIX_CONTROL AFTER UPDATE ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_CONTROL() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_control', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_control')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_MIX_CONTROL ON mix_control; +CREATE TRIGGER TDA_MIX_CONTROL AFTER DELETE ON mix_control FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_MIX_CONTROL(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + SET SESSION "disable.FesMixTrigger" = 1; + + SELECT CURRENT_SETTING('disable.MixMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME = concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + SET SESSION "disable.FesMixTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_map_to_fes', 'key_id_tag', '', NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TI_MIX_MAP_TO_FES AFTER INSERT ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + IF NEW.RTU_TAG = OLD.RTU_TAG AND + NEW.DOT_NO = OLD.DOT_NO AND + NEW.KEY_ID_TAG = OLD.KEY_ID_TAG + THEN RETURN NEW; + END IF; + + + SET SESSION "disable.FesMixTrigger" = 1; + + SELECT CURRENT_SETTING('disable.MixMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME=concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + + + IF COALESCE(NEW.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(NEW.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME=getBeforeFirstDot(NEW.KEY_ID_TAG), + APP_TAG_NAME=getAfterFirstDot(NEW.KEY_ID_TAG), + APP_COLUMN_NAME='value' + WHERE TAG_NAME=concat(NEW.RTU_TAG,'.',NEW.DOT_NO); + END IF; + + END; + ELSE NEW.DOT_NO = '-1'; + END IF; + END; + END IF; + + SET SESSION "disable.FesMixTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TU_MIX_MAP_TO_FES BEFORE UPDATE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, NEW.KEY_ID_TAG, getTableSubSystem('mix_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TUA_MIX_MAP_TO_FES AFTER UPDATE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + SET SESSION "disable.FesMixTrigger" = 1; + + SELECT CURRENT_SETTING('disable.MixMapToFesTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + + IF COALESCE(OLD.RTU_TAG,'') <> '' THEN + BEGIN + IF COALESCE(OLD.DOT_NO,'') <> '' THEN + UPDATE fes_mix SET + APP_TABLE_NAME='', + APP_TAG_NAME='', + APP_COLUMN_NAME='' + WHERE TAG_NAME = concat(OLD.RTU_TAG,'.',OLD.DOT_NO); + END IF; + + END; + END IF; + END; + END IF; + + SET SESSION "disable.FesMixTrigger" = 0; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TD_MIX_MAP_TO_FES BEFORE DELETE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_MAP_TO_FES() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_map_to_fes', 'key_id_tag', OLD.KEY_ID_TAG, '', getTableSubSystem('mix_map_to_fes')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_MIX_MAP_TO_FES ON mix_map_to_fes; +CREATE TRIGGER TDA_MIX_MAP_TO_FES AFTER DELETE ON mix_map_to_fes FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_MIX_MAP_TO_FES(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + INSERT INTO mix( + TAG_NAME, DESCRIPTION, DEVICE, SEQ_NO, LOCATION_ID, SUB_SYSTEM, RTU_TAG, IS_CONTROL, STATE_TEXT_NAME, GRAY, CONTRAST, QCOLOR, RAW_VALUE, VALUE, STATUS, LAST_UPDATE_TIME, LAST_CHANGE_TIME, METHOD, ALARM_PRIORITY, PIC_NAME, SOUND_NAME1, SOUND_NAME2, SOUND_NAME3, ALARM_DELAY_TIME, IS_WATER_ALM, IS_ACK_ON_RTN, DEL_ACT_ON_ACK, IS_NEVER_ALM_ON_RTN, REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, POINT_TP_NAME, IS_SAMPLE, IS_STATISTICS, SAMPLE_PERIOD, POINT_TYPE, POINT_CLASS, POINT_PROPERTY, POINT_SORT, CAMERA_TAG, PRESET_ID) SELECT + concat(TAG_NAME, '.' , getAfterLastDot(NEW.TAG_NAME)),NEW.DESCRIPTION,TAG_NAME,NEW.SEQ_NO,LOCATION_ID, SUB_SYSTEM, '', NEW.IS_CONTROL, NEW.STATE_TEXT_NAME,GRAY, CONTRAST, QCOLOR, '0', VALUE, STATUS, '0', '0', '', NEW.ALARM_PRIORITY, '', '', '', '', NEW.ALARM_DELAY_TIME,NEW.IS_WATER_ALM,NEW.IS_ACK_ON_RTN,NEW.DEL_ACT_ON_ACK,NEW.IS_NEVER_ALM_ON_RTN,REGION_ID, OPT_HANDOVER_GROUP, IS_SUMMARY, SUMMARY_VALUE, SUMMARY_STATUS, DEV_TYPE, NEW.TAG_NAME, NEW.IS_SAMPLE,NEW.IS_STATISTICS,NEW.SAMPLE_PERIOD,NEW.POINT_TYPE,NEW.POINT_CLASS,NEW.POINT_PROPERTY,NEW.POINT_SORT,'', '' + FROM dev_info WHERE DEV_TP_NAME = NEW.DEV_TP_NAME; +*/ + + INSERT INTO temp_plugin_point_map_mix + (PLUGIN_NAME, TEMP_NAME, TEMP_POINT_NAME, FES_TEMP_NAME, FES_TEMP_POINT_NAME, FES_TEMP_OUT_NAME) + SELECT + PLUGIN_NAME, TEMP_NAME, getAfterLastDot(NEW.TAG_NAME),'','','' + FROM temp_plugin_dev_map WHERE TEMP_NAME = NEW.DEV_TP_NAME; +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'mix_temp_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TI_MIX_TEMP_DEFINE AFTER INSERT ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + /* + UPDATE mix SET + TAG_NAME = concat(DEVICE, '.', getAfterLastDot(NEW.TAG_NAME)), + DESCRIPTION = NEW.DESCRIPTION, + SEQ_NO = NEW.SEQ_NO, + IS_CONTROL = NEW.IS_CONTROL, + STATE_TEXT_NAME = NEW.STATE_TEXT_NAME, + ALARM_PRIORITY = NEW.ALARM_PRIORITY, + ALARM_DELAY_TIME = NEW.ALARM_DELAY_TIME, + IS_WATER_ALM = NEW.IS_WATER_ALM, + IS_ACK_ON_RTN = NEW.IS_ACK_ON_RTN, + DEL_ACT_ON_ACK = NEW.DEL_ACT_ON_ACK, + IS_NEVER_ALM_ON_RTN = NEW.IS_NEVER_ALM_ON_RTN, + POINT_TP_NAME = NEW.TAG_NAME, + IS_SAMPLE = NEW.IS_SAMPLE, + IS_STATISTICS = NEW.IS_STATISTICS, + SAMPLE_PERIOD = NEW.SAMPLE_PERIOD, + POINT_TYPE = NEW.POINT_TYPE, + POINT_CLASS = NEW.POINT_CLASS, + POINT_PROPERTY = NEW.POINT_PROPERTY, + POINT_SORT = NEW.POINT_SORT + WHERE POINT_TP_NAME=OLD.TAG_NAME; + + UPDATE mix_control SET + CTRL_ACT_NAME = NEW.CTRL_ACT_NAME, + CTRL_TYPE = NEW.CTRL_TYPE, + IS_TAGT_STATE = NEW.IS_TAGT_STATE, + CTRL_TIMEOUT = NEW.CTRL_TIMEOUT, + RESV_TIMEOUT = NEW.RESV_TIMEOUT, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + CTRL_TOLERANCE = NEW.CTRL_TOLERANCE, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + POINT_TP_NAME = NEW.TAG_NAME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + + UPDATE mix_map_to_fes SET + POINT_TP_NAME = NEW.TAG_NAME, + BASE = NEW.BASE, + COEFF = NEW.COEFF, + RANGE_UP = NEW.RANGE_UP, + RANGE_LOW = NEW.RANGE_LOW, + IS_FILTER_ERROR = NEW.IS_FILTER_ERROR, + IS_FILTER_DISTURB = NEW.IS_FILTER_DISTURB, + DISTURB_TIME = NEW.DISTURB_TIME + WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ + + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + UPDATE temp_plugin_point_map_mix + SET TEMP_POINT_NAME = getAfterLastDot(NEW.TAG_NAME) + WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('mix_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TU_MIX_TEMP_DEFINE AFTER UPDATE ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM temp_plugin_point_map_mix WHERE TEMP_NAME = OLD.DEV_TP_NAME AND TEMP_POINT_NAME = getAfterLastDot(OLD.TAG_NAME); + /* + DELETE FROM mix WHERE POINT_TP_NAME = OLD.TAG_NAME; + */ +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TD_MIX_TEMP_DEFINE BEFORE DELETE ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_MIX_TEMP_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'mix_temp_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('mix_temp_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_MIX_TEMP_DEFINE ON mix_temp_define; +CREATE TRIGGER TDA_MIX_TEMP_DEFINE AFTER DELETE ON mix_temp_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_MIX_TEMP_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('opc_config_define')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_DEFINE ON opc_config_define; +CREATE TRIGGER TIA_OPC_CONFIG_DEFINE AFTER INSERT ON opc_config_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('opc_config_define')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_DEFINE ON opc_config_define; +CREATE TRIGGER TUA_OPC_CONFIG_DEFINE AFTER UPDATE ON opc_config_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_DEFINE() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('opc_config_define')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_DEFINE ON opc_config_define; +CREATE TRIGGER TDA_OPC_CONFIG_DEFINE AFTER DELETE ON opc_config_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'opc_config_version', 'domain_id,sub_system', '', concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_OPC_CONFIG_VERSION ON opc_config_version; +CREATE TRIGGER TIA_OPC_CONFIG_VERSION AFTER INSERT ON opc_config_version FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_OPC_CONFIG_VERSION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), concat(NEW.DOMAIN_ID,',',NEW.SUB_SYSTEM), getTableSubSystem('opc_config_version')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_OPC_CONFIG_VERSION ON opc_config_version; +CREATE TRIGGER TUA_OPC_CONFIG_VERSION AFTER UPDATE ON opc_config_version FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_OPC_CONFIG_VERSION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_OPC_CONFIG_VERSION() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'opc_config_version', 'domain_id,sub_system', concat(OLD.DOMAIN_ID,',',OLD.SUB_SYSTEM), '', getTableSubSystem('opc_config_version')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_OPC_CONFIG_VERSION ON opc_config_version; +CREATE TRIGGER TDA_OPC_CONFIG_VERSION AFTER DELETE ON opc_config_version FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_OPC_CONFIG_VERSION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_area_info', 'id', '', NEW.ID, getTableSubSystem('pa_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_AREA_INFO ON pa_area_info; +CREATE TRIGGER TIA_PA_AREA_INFO AFTER INSERT ON pa_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_AREA_INFO ON pa_area_info; +CREATE TRIGGER TUA_PA_AREA_INFO AFTER UPDATE ON pa_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_area_info', 'id', OLD.ID, '', getTableSubSystem('pa_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_AREA_INFO ON pa_area_info; +CREATE TRIGGER TDA_PA_AREA_INFO AFTER DELETE ON pa_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_audio_info', 'id', '', NEW.ID, getTableSubSystem('pa_audio_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_AUDIO_INFO ON pa_audio_info; +CREATE TRIGGER TIA_PA_AUDIO_INFO AFTER INSERT ON pa_audio_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_AUDIO_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_audio_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_audio_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_AUDIO_INFO ON pa_audio_info; +CREATE TRIGGER TUA_PA_AUDIO_INFO AFTER UPDATE ON pa_audio_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_AUDIO_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_AUDIO_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_audio_info', 'id', OLD.ID, '', getTableSubSystem('pa_audio_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_AUDIO_INFO ON pa_audio_info; +CREATE TRIGGER TDA_PA_AUDIO_INFO AFTER DELETE ON pa_audio_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_AUDIO_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_broadcast_group', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_BROADCAST_GROUP ON pa_broadcast_group; +CREATE TRIGGER TIA_PA_BROADCAST_GROUP AFTER INSERT ON pa_broadcast_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_BROADCAST_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_broadcast_group')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_BROADCAST_GROUP ON pa_broadcast_group; +CREATE TRIGGER TUA_PA_BROADCAST_GROUP AFTER UPDATE ON pa_broadcast_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_BROADCAST_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_BROADCAST_GROUP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_broadcast_group', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_broadcast_group')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_BROADCAST_GROUP ON pa_broadcast_group; +CREATE TRIGGER TDA_PA_BROADCAST_GROUP AFTER DELETE ON pa_broadcast_group FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_BROADCAST_GROUP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_CTRL_PARAM ON pa_ctrl_param; +CREATE TRIGGER TIA_PA_CTRL_PARAM AFTER INSERT ON pa_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_CTRL_PARAM ON pa_ctrl_param; +CREATE TRIGGER TUA_PA_CTRL_PARAM AFTER UPDATE ON pa_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_ctrl_param')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_CTRL_PARAM ON pa_ctrl_param; +CREATE TRIGGER TDA_PA_CTRL_PARAM AFTER DELETE ON pa_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_LOCATION_AREA_DEF ON pa_location_area_def; +CREATE TRIGGER TIA_PA_LOCATION_AREA_DEF AFTER INSERT ON pa_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pa_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_LOCATION_AREA_DEF ON pa_location_area_def; +CREATE TRIGGER TUA_PA_LOCATION_AREA_DEF AFTER UPDATE ON pa_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pa_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_LOCATION_AREA_DEF ON pa_location_area_def; +CREATE TRIGGER TDA_PA_LOCATION_AREA_DEF AFTER DELETE ON pa_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_location_seq_def', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; +CREATE TRIGGER TIA_PA_LOCATION_SEQ_DEF AFTER INSERT ON pa_location_seq_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_LOCATION_SEQ_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pa_location_seq_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; +CREATE TRIGGER TUA_PA_LOCATION_SEQ_DEF AFTER UPDATE ON pa_location_seq_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_LOCATION_SEQ_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_LOCATION_SEQ_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_location_seq_def', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pa_location_seq_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_LOCATION_SEQ_DEF ON pa_location_seq_def; +CREATE TRIGGER TDA_PA_LOCATION_SEQ_DEF AFTER DELETE ON pa_location_seq_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_LOCATION_SEQ_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_def', 'id', '', NEW.ID, getTableSubSystem('pa_operator_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_DEF ON pa_operator_def; +CREATE TRIGGER TIA_PA_OPERATOR_DEF AFTER INSERT ON pa_operator_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_def', 'id', OLD.ID, NEW.ID, getTableSubSystem('pa_operator_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_DEF ON pa_operator_def; +CREATE TRIGGER TUA_PA_OPERATOR_DEF AFTER UPDATE ON pa_operator_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_def', 'id', OLD.ID, '', getTableSubSystem('pa_operator_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_DEF ON pa_operator_def; +CREATE TRIGGER TDA_PA_OPERATOR_DEF AFTER DELETE ON pa_operator_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_operator_map', 'user_grp_id', '', NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_OPERATOR_MAP ON pa_operator_map; +CREATE TRIGGER TIA_PA_OPERATOR_MAP AFTER INSERT ON pa_operator_map FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_OPERATOR_MAP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, NEW.USER_GRP_ID, getTableSubSystem('pa_operator_map')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_OPERATOR_MAP ON pa_operator_map; +CREATE TRIGGER TUA_PA_OPERATOR_MAP AFTER UPDATE ON pa_operator_map FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_OPERATOR_MAP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_OPERATOR_MAP() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_operator_map', 'user_grp_id', OLD.USER_GRP_ID, '', getTableSubSystem('pa_operator_map')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_OPERATOR_MAP ON pa_operator_map; +CREATE TRIGGER TDA_PA_OPERATOR_MAP AFTER DELETE ON pa_operator_map FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_OPERATOR_MAP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pa_timed_audio', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PA_TIMED_AUDIO ON pa_timed_audio; +CREATE TRIGGER TIA_PA_TIMED_AUDIO AFTER INSERT ON pa_timed_audio FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PA_TIMED_AUDIO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pa_timed_audio')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PA_TIMED_AUDIO ON pa_timed_audio; +CREATE TRIGGER TUA_PA_TIMED_AUDIO AFTER UPDATE ON pa_timed_audio FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PA_TIMED_AUDIO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PA_TIMED_AUDIO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pa_timed_audio', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pa_timed_audio')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PA_TIMED_AUDIO ON pa_timed_audio; +CREATE TRIGGER TDA_PA_TIMED_AUDIO AFTER DELETE ON pa_timed_audio FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PA_TIMED_AUDIO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_area_info', 'id', '', NEW.ID, getTableSubSystem('pis_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_AREA_INFO ON pis_area_info; +CREATE TRIGGER TIA_PIS_AREA_INFO AFTER INSERT ON pis_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_area_info', 'id', OLD.ID, NEW.ID, getTableSubSystem('pis_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_AREA_INFO ON pis_area_info; +CREATE TRIGGER TUA_PIS_AREA_INFO AFTER UPDATE ON pis_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_AREA_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_area_info', 'id', OLD.ID, '', getTableSubSystem('pis_area_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_AREA_INFO ON pis_area_info; +CREATE TRIGGER TDA_PIS_AREA_INFO AFTER DELETE ON pis_area_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_AREA_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'pis_ctrl_param', 'location_id', '', NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_CTRL_PARAM ON pis_ctrl_param; +CREATE TRIGGER TIA_PIS_CTRL_PARAM AFTER INSERT ON pis_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, NEW.LOCATION_ID, getTableSubSystem('pis_ctrl_param')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_CTRL_PARAM ON pis_ctrl_param; +CREATE TRIGGER TUA_PIS_CTRL_PARAM AFTER UPDATE ON pis_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_CTRL_PARAM() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'pis_ctrl_param', 'location_id', OLD.LOCATION_ID, '', getTableSubSystem('pis_ctrl_param')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_CTRL_PARAM ON pis_ctrl_param; +CREATE TRIGGER TDA_PIS_CTRL_PARAM AFTER DELETE ON pis_ctrl_param FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_CTRL_PARAM(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_display_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_DISPLAY_INFO ON pis_display_info; +CREATE TRIGGER TIA_PIS_DISPLAY_INFO AFTER INSERT ON pis_display_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_DISPLAY_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_display_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_DISPLAY_INFO ON pis_display_info; +CREATE TRIGGER TUA_PIS_DISPLAY_INFO AFTER UPDATE ON pis_display_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_DISPLAY_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_DISPLAY_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_display_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_display_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_DISPLAY_INFO ON pis_display_info; +CREATE TRIGGER TDA_PIS_DISPLAY_INFO AFTER DELETE ON pis_display_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_DISPLAY_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_fes_location_info', 'pis_station_id', '', NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; +CREATE TRIGGER TIA_PIS_FES_LOCATION_INFO AFTER INSERT ON pis_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, NEW.PIS_STATION_ID, getTableSubSystem('pis_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; +CREATE TRIGGER TUA_PIS_FES_LOCATION_INFO AFTER UPDATE ON pis_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_FES_LOCATION_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_fes_location_info', 'pis_station_id', OLD.PIS_STATION_ID, '', getTableSubSystem('pis_fes_location_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_FES_LOCATION_INFO ON pis_fes_location_info; +CREATE TRIGGER TDA_PIS_FES_LOCATION_INFO AFTER DELETE ON pis_fes_location_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_FES_LOCATION_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_location_area_def', 'location_id,area_id', '', concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; +CREATE TRIGGER TIA_PIS_LOCATION_AREA_DEF AFTER INSERT ON pis_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), concat(NEW.LOCATION_ID,',',NEW.AREA_ID), getTableSubSystem('pis_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; +CREATE TRIGGER TUA_PIS_LOCATION_AREA_DEF AFTER UPDATE ON pis_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_LOCATION_AREA_DEF() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_location_area_def', 'location_id,area_id', concat(OLD.LOCATION_ID,',',OLD.AREA_ID), '', getTableSubSystem('pis_location_area_def')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_LOCATION_AREA_DEF ON pis_location_area_def; +CREATE TRIGGER TDA_PIS_LOCATION_AREA_DEF AFTER DELETE ON pis_location_area_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_LOCATION_AREA_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'pis_message_info', 'id,location_id', '', concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_PIS_MESSAGE_INFO ON pis_message_info; +CREATE TRIGGER TIA_PIS_MESSAGE_INFO AFTER INSERT ON pis_message_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_PIS_MESSAGE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), concat(NEW.ID,',',NEW.LOCATION_ID), getTableSubSystem('pis_message_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_PIS_MESSAGE_INFO ON pis_message_info; +CREATE TRIGGER TUA_PIS_MESSAGE_INFO AFTER UPDATE ON pis_message_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_PIS_MESSAGE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_PIS_MESSAGE_INFO() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'pis_message_info', 'id,location_id', concat(OLD.ID,',',OLD.LOCATION_ID), '', getTableSubSystem('pis_message_info')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_PIS_MESSAGE_INFO ON pis_message_info; +CREATE TRIGGER TDA_PIS_MESSAGE_INFO AFTER DELETE ON pis_message_info FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_PIS_MESSAGE_INFO(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_DATASET() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_dataset', 'id', '', NEW.id, getTableSubSystem('scl_dataset')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_DATASET ON scl_dataset; +CREATE TRIGGER TIA_SCL_DATASET AFTER INSERT ON scl_dataset FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_DATASET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_DATASET() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_dataset', 'id', OLD.id, NEW.id, getTableSubSystem('scl_dataset')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_DATASET ON scl_dataset; +CREATE TRIGGER TUA_SCL_DATASET AFTER UPDATE ON scl_dataset FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_DATASET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_DATASET() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_dataset', 'id', OLD.id, '', getTableSubSystem('scl_dataset')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_DATASET ON scl_dataset; +CREATE TRIGGER TDA_SCL_DATASET AFTER DELETE ON scl_dataset FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_DATASET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_FCDA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_fcda', 'id', '', NEW.id, getTableSubSystem('scl_fcda')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_FCDA ON scl_fcda; +CREATE TRIGGER TIA_SCL_FCDA AFTER INSERT ON scl_fcda FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_FCDA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_FCDA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_fcda', 'id', OLD.id, NEW.id, getTableSubSystem('scl_fcda')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_FCDA ON scl_fcda; +CREATE TRIGGER TUA_SCL_FCDA AFTER UPDATE ON scl_fcda FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_FCDA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_FCDA() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_fcda', 'id', OLD.id, '', getTableSubSystem('scl_fcda')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_FCDA ON scl_fcda; +CREATE TRIGGER TDA_SCL_FCDA AFTER DELETE ON scl_fcda FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_FCDA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_LCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_lcb', 'id', '', NEW.id, getTableSubSystem('scl_lcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_LCB ON scl_lcb; +CREATE TRIGGER TIA_SCL_LCB AFTER INSERT ON scl_lcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_LCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_LCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_lcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_lcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_LCB ON scl_lcb; +CREATE TRIGGER TUA_SCL_LCB AFTER UPDATE ON scl_lcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_LCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_LCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_lcb', 'id', OLD.id, '', getTableSubSystem('scl_lcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_LCB ON scl_lcb; +CREATE TRIGGER TDA_SCL_LCB AFTER DELETE ON scl_lcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_LCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_rcb', 'id', '', NEW.id, getTableSubSystem('scl_rcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_RCB ON scl_rcb; +CREATE TRIGGER TIA_SCL_RCB AFTER INSERT ON scl_rcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_RCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_rcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_rcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_RCB ON scl_rcb; +CREATE TRIGGER TUA_SCL_RCB AFTER UPDATE ON scl_rcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_RCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_rcb', 'id', OLD.id, '', getTableSubSystem('scl_rcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_RCB ON scl_rcb; +CREATE TRIGGER TDA_SCL_RCB AFTER DELETE ON scl_rcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_RCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_RUNTIME() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_runtime', 'id', '', NEW.id, getTableSubSystem('scl_runtime')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_RUNTIME ON scl_runtime; +CREATE TRIGGER TIA_SCL_RUNTIME AFTER INSERT ON scl_runtime FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_RUNTIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_RUNTIME() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_runtime', 'id', OLD.id, NEW.id, getTableSubSystem('scl_runtime')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_RUNTIME ON scl_runtime; +CREATE TRIGGER TUA_SCL_RUNTIME AFTER UPDATE ON scl_runtime FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_RUNTIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_RUNTIME() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_runtime', 'id', OLD.id, '', getTableSubSystem('scl_runtime')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_RUNTIME ON scl_runtime; +CREATE TRIGGER TDA_SCL_RUNTIME AFTER DELETE ON scl_runtime FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_RUNTIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SCL_SGCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'scl_sgcb', 'id', '', NEW.id, getTableSubSystem('scl_sgcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SCL_SGCB ON scl_sgcb; +CREATE TRIGGER TIA_SCL_SGCB AFTER INSERT ON scl_sgcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SCL_SGCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SCL_SGCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'scl_sgcb', 'id', OLD.id, NEW.id, getTableSubSystem('scl_sgcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SCL_SGCB ON scl_sgcb; +CREATE TRIGGER TUA_SCL_SGCB AFTER UPDATE ON scl_sgcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SCL_SGCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_SCL_SGCB() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'scl_sgcb', 'id', OLD.id, '', getTableSubSystem('scl_sgcb')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_SCL_SGCB ON scl_sgcb; +CREATE TRIGGER TDA_SCL_SGCB AFTER DELETE ON scl_sgcb FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_SCL_SGCB(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TI_SEQUENCE_ACTION BEFORE INSERT ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_action', 'name', '', NEW.NAME, getTableSubSystem('sequence_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TIA_SEQUENCE_ACTION AFTER INSERT ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应功能 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_function SET + TIMEFLAG = NEW.TIMEFLAG, + ACTION_NAME = NEW.NAME + WHERE ACTION_NAME = OLD.NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TU_SEQUENCE_ACTION BEFORE UPDATE ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_action', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TUA_SEQUENCE_ACTION AFTER UPDATE ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_ACTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此动作的功能 + DELETE FROM sequence_function WHERE ACTION_NAME = OLD.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_action', 'name', OLD.NAME, '', getTableSubSystem('sequence_action')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_ACTION ON sequence_action; +CREATE TRIGGER TD_SEQUENCE_ACTION AFTER DELETE ON sequence_action FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_ACTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.SequenceSettingTrigger" = 1; + + SELECT CURRENT_SETTING('disable.SequenceDefineTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = NEW.SEQ_NAME; + END; + END IF; + + SET SESSION "disable.SequenceSettingTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TI_SEQUENCE_DEFINE BEFORE INSERT ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_define', 'seq_name,func_name', '', concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TIA_SEQUENCE_DEFINE AFTER INSERT ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.SequenceSettingTrigger" = 1; + + SELECT CURRENT_SETTING('disable.SequenceDefineTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_setting SET + TIMEFLAG = NEW.TIMEFLAG + WHERE NAME = OLD.SEQ_NAME; + END; + END IF; + + SET SESSION "disable.SequenceSettingTrigger" = 0; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TU_SEQUENCE_DEFINE BEFORE UPDATE ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), concat(NEW.SEQ_NAME,',',NEW.FUNC_NAME), getTableSubSystem('sequence_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TUA_SEQUENCE_DEFINE AFTER UPDATE ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_DEFINE() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.SequenceSettingTrigger" = 1; + + SELECT CURRENT_SETTING('disable.SequenceDefineTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + UPDATE sequence_setting SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE NAME = OLD.SEQ_NAME; + END; + END IF; + + SET SESSION "disable.SequenceSettingTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_define', 'seq_name,func_name', concat(OLD.SEQ_NAME,',',OLD.FUNC_NAME), '', getTableSubSystem('sequence_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_DEFINE ON sequence_define; +CREATE TRIGGER TD_SEQUENCE_DEFINE AFTER DELETE ON sequence_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --仅仅修改时标 + NEW.TIMEFLAG = floor(extract(epoch from now())); + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TI_SEQUENCE_FUNCTION BEFORE INSERT ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + UPDATE sequence_define SET + TIMEFLAG = NEW.TIMEFLAG + WHERE FUNC_NAME = NEW.NAME; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_function', 'name,action_name', '', concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TIA_SEQUENCE_FUNCTION AFTER INSERT ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --修改对应联动功能关系表 + NEW.TIMEFLAG = floor(extract(epoch from now())); + UPDATE sequence_define SET + TIMEFLAG = NEW.TIMEFLAG, + FUNC_NAME = NEW.NAME + WHERE FUNC_NAME = OLD.NAME; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TU_SEQUENCE_FUNCTION BEFORE UPDATE ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), concat(NEW.NAME,',',NEW.ACTION_NAME), getTableSubSystem('sequence_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TUA_SEQUENCE_FUNCTION AFTER UPDATE ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_FUNCTION() RETURNS TRIGGER AS $$ +BEGIN + --删除关联了此功能的联动定义 + --检查功能是否被删除 + IF NOT EXISTS (SELECT * FROM sequence_function WHERE NAME = OLD.NAME) THEN + BEGIN + DELETE FROM sequence_define WHERE FUNC_NAME = OLD.NAME; + END; + ELSE + BEGIN + --修改时标 + UPDATE sequence_define SET + TIMEFLAG = floor(extract(epoch from now())) + WHERE FUNC_NAME = OLD.NAME; + END; + END IF; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_function', 'name,action_name', concat(OLD.NAME,',',OLD.ACTION_NAME), '', getTableSubSystem('sequence_function')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_FUNCTION ON sequence_function; +CREATE TRIGGER TD_SEQUENCE_FUNCTION AFTER DELETE ON sequence_function FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_FUNCTION(); + + + +CREATE OR REPLACE FUNCTION FUNC_TI_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --仅仅修改时标 + --避免触发器循环 + SET SESSION "disable.SequenceDefineTrigger" = 1; + + SELECT CURRENT_SETTING('disable.SequenceSettingTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + END; + END IF; + + SET SESSION "disable.SequenceDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TI_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TI_SEQUENCE_SETTING BEFORE INSERT ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TI_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'sequence_setting', 'name', '', NEW.NAME, getTableSubSystem('sequence_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TIA_SEQUENCE_SETTING AFTER INSERT ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TU_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --修改对应联动功能关系表 + --避免触发器循环 + SET SESSION "disable.SequenceDefineTrigger" = 1; + + SELECT CURRENT_SETTING('disable.SequenceSettingTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + NEW.TIMEFLAG = floor(extract(epoch from now())); + IF NEW.NAME<>OLD.NAME THEN + UPDATE sequence_define SET + SEQ_NAME = NEW.NAME + WHERE SEQ_NAME = OLD.NAME; + END IF; + END; + END IF; + + SET SESSION "disable.SequenceDefineTrigger" = 0; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TU_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TU_SEQUENCE_SETTING BEFORE UPDATE ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TU_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'sequence_setting', 'name', OLD.NAME, NEW.NAME, getTableSubSystem('sequence_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TUA_SEQUENCE_SETTING AFTER UPDATE ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TD_SEQUENCE_SETTING() RETURNS TRIGGER AS $$ +DECLARE flag int; +BEGIN + --删除关联了此联动的功能关联 + --避免触发器循环 + SET SESSION "disable.SequenceDefineTrigger" = 1; + + SELECT CURRENT_SETTING('disable.SequenceSettingTrigger') INTO flag; + IF flag = 0 THEN + BEGIN + DELETE FROM sequence_define WHERE SEQ_NAME = OLD.NAME; + END; + END IF; + + SET SESSION "disable.SequenceDefineTrigger" = 0; + +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'sequence_setting', 'name', OLD.NAME, '', getTableSubSystem('sequence_setting')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TD_SEQUENCE_SETTING ON sequence_setting; +CREATE TRIGGER TD_SEQUENCE_SETTING AFTER DELETE ON sequence_setting FOR EACH ROW +EXECUTE PROCEDURE FUNC_TD_SEQUENCE_SETTING(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_DEF() RETURNS TRIGGER AS $$ +BEGIN + + --插入测点分组表 + --插入测点表 + --插入时间测点变 + --插入返回分组表 + --插入返回参数表 + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) , DESCRIPTION, NEW.INST_TAG, SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG, LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, '', SORT, '', NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 1; + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)),DESCRIPTION, 1, floor(extract(epoch from now())),SORT, '', NEW.INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_para WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0 AND COALESCE(TYPE,0) = 2; + + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT,LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, NEW.INST_TAG,SORT,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 1; + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG, LOCATION_ID, SUB_SYSTEM) + SELECT + concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)),DESCRIPTION, 1, '', SORT, '', 0, 0, NEW.INST_TAG,NEW.LOCATION_ID,NEW.SUB_SYSTEM + FROM stat_template_ret WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(ISGRP,0) = 0; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_def', 'inst_tag', '', NEW.INST_TAG, getTableSubSystem('stat_inst_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_DEF ON stat_inst_def; +CREATE TRIGGER TIA_STAT_INST_DEF AFTER INSERT ON stat_inst_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_DEF() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.INST_TAG <> OLD.INST_TAG THEN + BEGIN + UPDATE stat_inst_para_grp + SET INST_TAG = NEW.INST_TAG, + PARA_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_GRP_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_para_point + SET INST_TAG = NEW.INST_TAG, + PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_para_time + SET INST_TAG = NEW.INST_TAG, + PARA_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_ret_grp + SET INST_TAG = NEW.INST_TAG, + RET_GRP_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_GRP_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + UPDATE stat_inst_ret_para + SET INST_TAG = NEW.INST_TAG, + RET_TAG = concat(NEW.INST_TAG,'.',getAfterLastDot(RET_TAG)) + WHERE INST_TAG = OLD.INST_TAG; + + END; + END IF; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, NEW.INST_TAG, getTableSubSystem('stat_inst_def')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_DEF ON stat_inst_def; +CREATE TRIGGER TUA_STAT_INST_DEF AFTER UPDATE ON stat_inst_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_DEF() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM stat_inst_para_grp WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_para_point WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_para_time WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_ret_grp WHERE INST_TAG = OLD.INST_TAG; + DELETE FROM stat_inst_ret_para WHERE INST_TAG = OLD.INST_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_def', 'inst_tag', OLD.INST_TAG, '', getTableSubSystem('stat_inst_def')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_DEF ON stat_inst_def; +CREATE TRIGGER TDA_STAT_INST_DEF AFTER DELETE ON stat_inst_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_grp', 'para_grp_tag', '', NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_GRP ON stat_inst_para_grp; +CREATE TRIGGER TIA_STAT_INST_PARA_GRP AFTER INSERT ON stat_inst_para_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.PARA_GRP_TAG = OLD.PARA_GRP_TAG + THEN RETURN NEW; + END IF; + + UPDATE stat_inst_para_point + SET PARA_GRP_TAG = NEW.PARA_GRP_TAG + WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + UPDATE stat_inst_para_time + SET PARA_GRP_TAG = NEW.PARA_GRP_TAG + WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, NEW.PARA_GRP_TAG, getTableSubSystem('stat_inst_para_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_GRP ON stat_inst_para_grp; +CREATE TRIGGER TUA_STAT_INST_PARA_GRP AFTER UPDATE ON stat_inst_para_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_GRP() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM stat_inst_para_point WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + DELETE FROM stat_inst_para_time WHERE PARA_GRP_TAG = OLD.PARA_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_grp', 'para_grp_tag', OLD.PARA_GRP_TAG, '', getTableSubSystem('stat_inst_para_grp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_GRP ON stat_inst_para_grp; +CREATE TRIGGER TDA_STAT_INST_PARA_GRP AFTER DELETE ON stat_inst_para_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_point', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_POINT ON stat_inst_para_point; +CREATE TRIGGER TIA_STAT_INST_PARA_POINT AFTER INSERT ON stat_inst_para_point FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_POINT(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_point')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_POINT ON stat_inst_para_point; +CREATE TRIGGER TUA_STAT_INST_PARA_POINT AFTER UPDATE ON stat_inst_para_point FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_POINT(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_POINT() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_point', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_point')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_POINT ON stat_inst_para_point; +CREATE TRIGGER TDA_STAT_INST_PARA_POINT AFTER DELETE ON stat_inst_para_point FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_POINT(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_para_time', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_PARA_TIME ON stat_inst_para_time; +CREATE TRIGGER TIA_STAT_INST_PARA_TIME AFTER INSERT ON stat_inst_para_time FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_PARA_TIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_inst_para_time')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_PARA_TIME ON stat_inst_para_time; +CREATE TRIGGER TUA_STAT_INST_PARA_TIME AFTER UPDATE ON stat_inst_para_time FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_PARA_TIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_PARA_TIME() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_para_time', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_inst_para_time')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_PARA_TIME ON stat_inst_para_time; +CREATE TRIGGER TDA_STAT_INST_PARA_TIME AFTER DELETE ON stat_inst_para_time FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_PARA_TIME(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_grp', 'ret_grp_tag', '', NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_GRP ON stat_inst_ret_grp; +CREATE TRIGGER TIA_STAT_INST_RET_GRP AFTER INSERT ON stat_inst_ret_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ +BEGIN + + IF NEW.RET_GRP_TAG = OLD.RET_GRP_TAG + THEN RETURN NEW; + END IF; + + UPDATE stat_inst_ret_para + SET PARA_GRP_TAG = NEW.RET_GRP_TAG + WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, NEW.RET_GRP_TAG, getTableSubSystem('stat_inst_ret_grp')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_GRP ON stat_inst_ret_grp; +CREATE TRIGGER TUA_STAT_INST_RET_GRP AFTER UPDATE ON stat_inst_ret_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_GRP() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM stat_inst_ret_para WHERE PARA_GRP_TAG = OLD.RET_GRP_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_grp', 'ret_grp_tag', OLD.RET_GRP_TAG, '', getTableSubSystem('stat_inst_ret_grp')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_GRP ON stat_inst_ret_grp; +CREATE TRIGGER TDA_STAT_INST_RET_GRP AFTER DELETE ON stat_inst_ret_grp FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_GRP(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_inst_ret_para', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_INST_RET_PARA ON stat_inst_ret_para; +CREATE TRIGGER TIA_STAT_INST_RET_PARA AFTER INSERT ON stat_inst_ret_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_INST_RET_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_inst_ret_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_INST_RET_PARA ON stat_inst_ret_para; +CREATE TRIGGER TUA_STAT_INST_RET_PARA AFTER UPDATE ON stat_inst_ret_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_INST_RET_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_INST_RET_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_inst_ret_para', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_inst_ret_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_INST_RET_PARA ON stat_inst_ret_para; +CREATE TRIGGER TDA_STAT_INST_RET_PARA AFTER DELETE ON stat_inst_ret_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_INST_RET_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_def', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('STAT_LINK_DEF')); + END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_LINK_DEF ON STAT_LINK_DEF; +CREATE TRIGGER TIA_STAT_LINK_DEF AFTER INSERT ON STAT_LINK_DEF FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.TAG_NAME <> OLD.TAG_NAME THEN + BEGIN + UPDATE stat_link_para + SET LINK_TAG = NEW.TAG_NAME, + TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) + WHERE LINK_TAG = OLD.TAG_NAME; + UPDATE stat_link_ret + SET LINK_TAG = NEW.TAG_NAME, + TAG_NAME = concat(NEW.TAG_NAME,'.',getAfterLastDot(TAG_NAME)) + WHERE LINK_TAG = OLD.TAG_NAME; + + END; + END IF; + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_def', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_def')); + END IF; + UPDATE stat_link_para + SET STAT_PARA_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_PARA_TAG)) + WHERE LINK_TAG = OLD.TAG_NAME; + UPDATE stat_link_ret + SET STAT_RET_TAG = concat(NEW.STAT_TEMP_TAG,'.',getAfterLastDot(STAT_RET_TAG)) + WHERE LINK_TAG = OLD.TAG_NAME; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_LINK_DEF ON stat_link_def; +CREATE TRIGGER TUA_STAT_LINK_DEF AFTER UPDATE ON stat_link_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_DEF() RETURNS TRIGGER AS $$ +BEGIN + --删除对应的模板点 + DELETE FROM stat_link_para WHERE LINK_TAG= OLD.TAG_NAME; + DELETE FROM stat_link_ret WHERE LINK_TAG = OLD.TAG_NAME; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_def', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_def')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_LINK_DEF ON stat_link_def; +CREATE TRIGGER TDA_STAT_LINK_DEF AFTER DELETE ON stat_link_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_para', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_LINK_PARA ON stat_link_para; +CREATE TRIGGER TIA_STAT_LINK_PARA AFTER INSERT ON stat_link_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_para', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_LINK_PARA ON stat_link_para; +CREATE TRIGGER TUA_STAT_LINK_PARA AFTER UPDATE ON stat_link_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_PARA() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_para', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_para')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_LINK_PARA ON stat_link_para; +CREATE TRIGGER TDA_STAT_LINK_PARA AFTER DELETE ON stat_link_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_LINK_RET() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_link_ret', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_LINK_RET ON stat_link_ret; +CREATE TRIGGER TIA_STAT_LINK_RET AFTER INSERT ON stat_link_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_LINK_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_LINK_RET() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('stat_link_ret')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_LINK_RET ON stat_link_ret; +CREATE TRIGGER TUA_STAT_LINK_RET AFTER UPDATE ON stat_link_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_LINK_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_LINK_RET() RETURNS TRIGGER AS $$ +BEGIN + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_link_ret', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('stat_link_ret')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_LINK_RET ON stat_link_ret; +CREATE TRIGGER TDA_STAT_LINK_RET AFTER DELETE ON stat_link_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_LINK_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_def', 'template_tag', '', NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); + END IF; + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_DEF ON stat_template_def; +CREATE TRIGGER TIA_STAT_TEMPLATE_DEF AFTER INSERT ON stat_template_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ +BEGIN + UPDATE stat_template_para + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, + PARA_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(PARA_TAG)) + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + UPDATE stat_template_ret + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG, + RET_TAG = concat(NEW.TEMPLATE_TAG,'.',getAfterLastDot(RET_TAG)) + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + UPDATE stat_inst_def + SET TEMPLATE_TAG = NEW.TEMPLATE_TAG + WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + UPDATE stat_link_def + SET STAT_TEMP_TAG = NEW.TEMPLATE_TAG + WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, NEW.TEMPLATE_TAG, getTableSubSystem('stat_template_def')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_DEF ON stat_template_def; +CREATE TRIGGER TUA_STAT_TEMPLATE_DEF AFTER UPDATE ON stat_template_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_DEF() RETURNS TRIGGER AS $$ +BEGIN + --删除对应关联 + DELETE FROM stat_link_def WHERE STAT_TEMP_TAG = OLD.TEMPLATE_TAG; + + --删除对应实例 + DELETE FROM stat_inst_def WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + --删除对应的模板点 + DELETE FROM stat_template_para WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + DELETE FROM stat_template_ret WHERE TEMPLATE_TAG = OLD.TEMPLATE_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_def', 'template_tag', OLD.TEMPLATE_TAG, '', getTableSubSystem('stat_template_def')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_DEF ON stat_template_def; +CREATE TRIGGER TDA_STAT_TEMPLATE_DEF AFTER DELETE ON stat_template_def FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_DEF(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ +BEGIN + --插入对应的实例 + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; + + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_para', 'para_tag', '', NEW.PARA_TAG, getTableSubSystem('stat_template_para')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_PARA ON stat_template_para; +CREATE TRIGGER TIA_STAT_TEMPLATE_PARA AFTER INSERT ON stat_template_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ +BEGIN + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_para', 'para_tag', OLD.PARA_TAG, NEW.PARA_TAG, getTableSubSystem('stat_template_para')); + END IF; + + UPDATE stat_link_para + SET STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) + WHERE STAT_PARA_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.PARA_TAG)); + + IF OLD.PARA_TAG = NEW.PARA_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.TYPE = NEW.TYPE + AND OLD.SORT = NEW.SORT + THEN RETURN NEW; + END IF; + + + --更新对应的实例点 + --考虑从分组到不分组,从测点类型到时间类型,需删除旧的数据 + IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN + BEGIN + DELETE FROM stat_inst_para_grp USING stat_inst_def,stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + IF NEW.TYPE = 1 THEN + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; + ELSEIF NEW.TYPE = 2 THEN + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; + END IF; + END; + ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN + BEGIN + IF OLD.TYPE = 1 THEN + DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + ELSEIF OLD.TYPE = 2 THEN + DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + END IF; + + INSERT INTO stat_inst_para_grp + (PARA_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN + BEGIN + IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN + BEGIN + DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + INSERT INTO stat_inst_para_time + (PARA_TAG, DESCRIPTION, RANK, TIMESTAMP, SORT, PARA_GRP_TAG, INST_TAG, TIME_MODE, YEAR_R, MONTH_R, DAY_R, WEEKDAY_R, HOUR_R, MINUTE_R, SECOND_R,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, floor(extract(epoch from now())),NEW.SORT, '', INST_TAG, 0, 0, 0, 0, 0, 0, 0, 0, LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 2; + END; + ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN + BEGIN + DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + INSERT INTO stat_inst_para_point + (PARA_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)),NEW.DESCRIPTION, 1, '', NEW.SORT, '', INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0 AND COALESCE(NEW.TYPE,0) = 1; + END; + ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 1 THEN + update stat_inst_def + SET stat_inst_para_point.PARA_TAG = concat(stat_inst_para_point.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), stat_inst_para_point.DESCRIPTION = NEW.DESCRIPTION, stat_inst_para_point.SORT = NEW.SORT + from stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_point.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + ELSEIF OLD.TYPE = NEW.TYPE AND OLD.TYPE = 2 THEN + update stat_inst_def + SET stat_inst_para_time.PARA_TAG = concat(stat_inst_para_time.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), stat_inst_para_time.DESCRIPTION = NEW.DESCRIPTION, stat_inst_para_time.SORT = NEW.SORT + from stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_time.INST_TAG AND RANK = 1 AND getAfterLastDot(PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + END IF; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN + BEGIN + IF OLD.TYPE = 1 AND NEW.TYPE = 2 THEN + BEGIN + DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_grp,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + AND stat_inst_para_point.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; + END; + ELSEIF OLD.TYPE = 2 AND NEW.TYPE = 1 THEN + BEGIN + DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_grp,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG) + AND stat_inst_para_time.PARA_GRP_TAG = stat_inst_para_grp.PARA_GRP_TAG; + END; + END IF; + + + update stat_inst_def + SET stat_inst_para_grp.PARA_GRP_TAG = concat(stat_inst_para_grp.INST_TAG,'.',getAfterLastDot(NEW.PARA_TAG)), stat_inst_para_grp.DESCRIPTION = NEW.DESCRIPTION, stat_inst_para_grp.SORT = NEW.SORT + from stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_para_grp.INST_TAG AND getAfterLastDot(PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + END; + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_PARA ON stat_template_para; +CREATE TRIGGER TUA_STAT_TEMPLATE_PARA AFTER UPDATE ON stat_template_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_PARA() RETURNS TRIGGER AS $$ +BEGIN + --删除相应的实例点 + DELETE FROM stat_inst_para_grp USING stat_inst_def,stat_inst_para_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_grp.PARA_GRP_TAG) = getAfterLastDot(OLD.PARA_TAG); + + DELETE FROM stat_inst_para_point USING stat_inst_def,stat_inst_para_point + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_point.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_point.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + + DELETE FROM stat_inst_para_time USING stat_inst_def,stat_inst_para_time + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_para_time.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_para_time.PARA_TAG) = getAfterLastDot(OLD.PARA_TAG); + DELETE FROM stat_link_para + WHERE STAT_PARA_TAG = OLD.PARA_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_para', 'para_tag', OLD.PARA_TAG, '', getTableSubSystem('stat_template_para')); + END IF; + + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_PARA ON stat_template_para; +CREATE TRIGGER TDA_STAT_TEMPLATE_PARA AFTER DELETE ON stat_template_para FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_PARA(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ +BEGIN + --插入相应实例点 + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE, SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('insert'),'stat_template_ret', 'ret_tag', '', NEW.RET_TAG, getTableSubSystem('stat_template_ret')); + END IF; + + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_STAT_TEMPLATE_RET ON stat_template_ret; +CREATE TRIGGER TIA_STAT_TEMPLATE_RET AFTER INSERT ON stat_template_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_STAT_TEMPLATE_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ +BEGIN + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE, KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('update'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, NEW.RET_TAG, getTableSubSystem('stat_template_ret')); + END IF; + + UPDATE stat_link_ret + SET STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(NEW.RET_TAG)) + WHERE STAT_RET_TAG = concat(OLD.TEMPLATE_TAG,'.',getAfterLastDot(OLD.RET_TAG)); + + IF OLD.RET_TAG = NEW.RET_TAG AND OLD.DESCRIPTION = NEW.DESCRIPTION AND OLD.ISGRP = NEW.ISGRP AND OLD.SORT = NEW.SORT + THEN RETURN NEW; + END IF; + + --更新相应的实例点 + IF OLD.ISGRP = 1 AND NEW.ISGRP = 0 THEN + BEGIN + DELETE FROM stat_inst_ret_grp USING stat_inst_def,stat_inst_ret_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + INSERT INTO stat_inst_ret_para + (RET_TAG, DESCRIPTION, RANK, POINT_TAG, SORT, PARA_GRP_TAG, VALUE, IS_BIND, INST_TAG,LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) ,NEW.DESCRIPTION, 1, '', NEW.SORT,'', 0, 0, INST_TAG,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 0; + END; + ELSEIF OLD.ISGRP = 0 AND NEW.ISGRP = 1 THEN + BEGIN + DELETE FROM stat_inst_ret_para USING stat_inst_def,stat_inst_ret_para + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); + + INSERT INTO stat_inst_ret_grp + (RET_GRP_TAG, DESCRIPTION, INST_TAG, SORT, LOCATION_ID,SUB_SYSTEM) + SELECT + concat(INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)) , NEW.DESCRIPTION, INST_TAG, NEW.SORT,LOCATION_ID,SUB_SYSTEM + FROM stat_inst_def WHERE TEMPLATE_TAG = NEW.TEMPLATE_TAG AND COALESCE(NEW.ISGRP,0) = 1; + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 0 THEN + BEGIN + update stat_inst_def + SET stat_inst_ret_para.RET_TAG = concat(stat_inst_ret_para.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), stat_inst_ret_para.DESCRIPTION = NEW.DESCRIPTION, stat_inst_ret_para.SORT = NEW.SORT + from stat_inst_ret_para + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_para.INST_TAG AND `RANK` = 1 AND getAfterLastDot(RET_TAG) = getAfterLastDot(OLD.RET_TAG); + + END; + ELSEIF OLD.ISGRP = NEW.ISGRP AND OLD.ISGRP = 1 THEN + BEGIN + update stat_inst_def + SET stat_inst_ret_grp.RET_GRP_TAG = concat(stat_inst_ret_grp.INST_TAG,'.',getAfterLastDot(NEW.RET_TAG)), stat_inst_ret_grp.DESCRIPTION = NEW.DESCRIPTION, stat_inst_ret_grp.SORT = NEW.SORT + from stat_inst_ret_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG AND stat_inst_def.INST_TAG = stat_inst_ret_grp.INST_TAG AND getAfterLastDot(RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + END; + END IF; + + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_STAT_TEMPLATE_RET ON stat_template_ret; +CREATE TRIGGER TUA_STAT_TEMPLATE_RET AFTER UPDATE ON stat_template_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_STAT_TEMPLATE_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_STAT_TEMPLATE_RET() RETURNS TRIGGER AS $$ +BEGIN + --删除相应的实例点 + DELETE FROM stat_inst_ret_grp USING stat_inst_def,stat_inst_ret_grp + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_grp.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_grp.RET_GRP_TAG) = getAfterLastDot(OLD.RET_TAG); + + DELETE FROM stat_inst_ret_para USING stat_inst_def,stat_inst_ret_para + WHERE stat_inst_def.TEMPLATE_TAG = OLD.TEMPLATE_TAG + AND stat_inst_ret_para.INST_TAG = stat_inst_def.INST_TAG + AND getAfterLastDot(stat_inst_ret_para.RET_TAG) = getAfterLastDot(OLD.RET_TAG); + DELETE FROM stat_link_ret + WHERE STAT_RET_TAG = OLD.RET_TAG; + + IF getTriggerFlag() = TRUE THEN + INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME, KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) + VALUES (getMaxTriggerId(),getOpType('delete'),'stat_template_ret', 'ret_tag', OLD.RET_TAG, '', getTableSubSystem('stat_template_ret')); + END IF; + + +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_STAT_TEMPLATE_RET ON stat_template_ret; +CREATE TRIGGER TDA_STAT_TEMPLATE_RET AFTER DELETE ON stat_template_ret FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_STAT_TEMPLATE_RET(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_condition_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; +CREATE TRIGGER TIA_TRIGGER_CONDITION_DEFINE AFTER INSERT ON trigger_condition_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_CONDITION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_condition_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; +CREATE TRIGGER TUA_TRIGGER_CONDITION_DEFINE AFTER UPDATE ON trigger_condition_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_CONDITION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_CONDITION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_condition_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_condition_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_CONDITION_DEFINE ON trigger_condition_define; +CREATE TRIGGER TDA_TRIGGER_CONDITION_DEFINE AFTER DELETE ON trigger_condition_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_CONDITION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_function_define', 'func_name', '', NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; +CREATE TRIGGER TIA_TRIGGER_FUNCTION_DEFINE AFTER INSERT ON trigger_function_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_FUNCTION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, NEW.FUNC_NAME, getTableSubSystem('trigger_function_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; +CREATE TRIGGER TUA_TRIGGER_FUNCTION_DEFINE AFTER UPDATE ON trigger_function_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_FUNCTION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_FUNCTION_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_function_define', 'func_name', OLD.FUNC_NAME, '', getTableSubSystem('trigger_function_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_FUNCTION_DEFINE ON trigger_function_define; +CREATE TRIGGER TDA_TRIGGER_FUNCTION_DEFINE AFTER DELETE ON trigger_function_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_FUNCTION_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_period_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; +CREATE TRIGGER TIA_TRIGGER_PERIOD_DEFINE AFTER INSERT ON trigger_period_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_PERIOD_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_period_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; +CREATE TRIGGER TUA_TRIGGER_PERIOD_DEFINE AFTER UPDATE ON trigger_period_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_PERIOD_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_PERIOD_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_period_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_period_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_PERIOD_DEFINE ON trigger_period_define; +CREATE TRIGGER TDA_TRIGGER_PERIOD_DEFINE AFTER DELETE ON trigger_period_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_PERIOD_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TIA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('insert'),'trigger_timer_define', 'tag_name', '', NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TIA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; +CREATE TRIGGER TIA_TRIGGER_TIMER_DEFINE AFTER INSERT ON trigger_timer_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TIA_TRIGGER_TIMER_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TUA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('update'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, NEW.TAG_NAME, getTableSubSystem('trigger_timer_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TUA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; +CREATE TRIGGER TUA_TRIGGER_TIMER_DEFINE AFTER UPDATE ON trigger_timer_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TUA_TRIGGER_TIMER_DEFINE(); + + + +CREATE OR REPLACE FUNCTION FUNC_TDA_TRIGGER_TIMER_DEFINE() RETURNS TRIGGER AS $$ +BEGIN +IF getTriggerFlag() = TRUE THEN +INSERT INTO sys_trigger_info(ACT_ID, OP_TYPE, TABLE_NAME,KEY_COLUMN_NAME,KEY_OLD_VALUE,KEY_NEW_VALUE,SUBSYSTEM_FLAG) +VALUES (getMaxTriggerId(),getOpType('delete'),'trigger_timer_define', 'tag_name', OLD.TAG_NAME, '', getTableSubSystem('trigger_timer_define')); +END IF; +RETURN NEW; +END; +$$LANGUAGE PLPGSQL; +DROP TRIGGER IF EXISTS TDA_TRIGGER_TIMER_DEFINE ON trigger_timer_define; +CREATE TRIGGER TDA_TRIGGER_TIMER_DEFINE AFTER DELETE ON trigger_timer_define FOR EACH ROW +EXECUTE PROCEDURE FUNC_TDA_TRIGGER_TIMER_DEFINE(); + + + + +CREATE OR REPLACE FUNCTION splitList( strList varchar(100), split_char varchar(1) , strCount int) RETURNS varchar(64) +AS $$ + DECLARE splitCount int; + DECLARE splitIndex int DEFAULT 1; + DECLARE str1 varchar(100) DEFAULT ''; + DECLARE str2 varchar(100) DEFAULT ''; +BEGIN + --分割字符串,返回第strCount个子串 + + splitCount = char_length(strList)-char_length(replace(strList,split_char,'')) + 1; + IF strCount > splitCount OR strCount <=0 THEN RETURN ''; + END IF; + + IF strCount = 1 THEN RETURN substring_index(strList,split_char,strCount); + ELSE + BEGIN + str1 = substring_index(strList,split_char,strCount-1); + str2 = substring_index(strList,split_char,strCount); + RETURN right(str2,LENGTH(str2) - LENGTH(str1) - 1); + END; + END IF; + +END; +$$LANGUAGE PLPGSQL; + + + + +CREATE OR REPLACE FUNCTION clearTempRelation(devTempName varchar(64)) +RETURNS VOID +AS $$ +BEGIN + /* + * 清除指定模板的所有测点与前置模板的关系 + */ + + UPDATE accuml_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE analog_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1, + OUT_SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE digital_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO1 = -1, + SEC_SEQ_NO2 = -1, + SEC_SEQ_NO3 = -1, + SEC_SEQ_NO4 = -1, + SEC_SEQ_NO5 = -1, + OUT_SEC_SEQ_NO1 = -1, + OUT_SEC_SEQ_NO2 = -1, + OUT_SEC_SEQ_NO3 = -1, + OUT_SEC_SEQ_NO4 = -1, + OUT_SEC_SEQ_NO5 = -1 + WHERE DEV_TP_NAME = devTempName; + + UPDATE mix_temp_define + SET SEC_DEVTP_NAME = '', + SEC_SEQ_NO = -1, + OUT_SEC_SEQ_NO = -1 + WHERE DEV_TP_NAME = devTempName; + +END; +$$LANGUAGE PLPGSQL; + + + + +CREATE OR REPLACE FUNCTION updateFesResPara(tableName varchar(64),startNum decimal(10,0)) +RETURNS VOID +AS $$ +BEGIN + /* + * 批量修改设备的规约参数1,要批量修改的设备在export_seq中 + * tableName 表名 + * startNum 修改的起始数字 + */ + + --创建临时表 + CREATE TEMPORARY TABLE IF NOT EXISTS tmpUpdateFesResParaTbl( + TAG_NAME varchar(64) NOT NULL, + RES_PARA decimal(10,0) NOT NULL + ); + DELETE FROM tmpUpdateFesResParaTbl; + + IF lower(tableName) = 'fes_accuml' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_accuml,export_seq WHERE fes_accuml.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_accuml.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_accuml + SET fes_accuml.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_accuml.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_analog' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_analog,export_seq WHERE fes_analog.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_analog.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_analog + SET fes_analog.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_analog.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_analog_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_analog_ctrl,export_seq WHERE fes_analog_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_analog_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_analog_ctrl + SET fes_analog_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_analog_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_digital' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_digital,export_seq WHERE fes_digital.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_digital.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_digital + SET fes_digital.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_digital.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_digital_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_digital_ctrl,export_seq WHERE fes_digital_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_digital_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_digital_ctrl + SET fes_digital_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_digital_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_mix' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_mix,export_seq WHERE fes_mix.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_mix.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_mix + SET fes_mix.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_mix.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + ELSEIF lower(tableName) = 'fes_mix_ctrl' THEN + BEGIN + INSERT INTO tmpUpdateFesResParaTbl(TAG_NAME,RES_PARA) + SELECT TAG_NAME,1 + FROM fes_mix_ctrl,export_seq WHERE fes_mix_ctrl.DEV_TAG = export_seq.DEV_TAG + ORDER BY export_seq.NO,fes_mix_ctrl.SEQ_NO; + + UPDATE tmpUpdateFesResParaTbl SET RES_PARA = (row_number() over (order by NULL))+startNum; + + update fes_mix_ctrl + SET fes_mix_ctrl.RES_PARA_INT1 = tmpUpdateFesResParaTbl.RES_PARA + from tmpupdatefesresparatbl + where fes_mix_ctrl.tag_name = tmpupdatefesresparatbl.tag_name; + + END; + END IF; + + + +END; +$$LANGUAGE PLPGSQL; + + + + +CREATE OR REPLACE FUNCTION bindStatDev(statTag varchar(64),devTag varchar(64)) +RETURNS VOID +AS $$ +BEGIN + /* + * 绑定统计分析中的实例,使用对应的后台设备 + * statTag 统计分析实例 + * devTag 后台设备 + */ + + --清空 + UPDATE stat_inst_para_point SET POINT_TAG = '' WHERE INST_TAG = statTag; + + UPDATE stat_inst_ret_para SET POINT_TAG = '' WHERE INST_TAG = statTag; + + --填写 + CREATE TEMPORARY TABLE IF NOT EXISTS tmpBinStatDevTbl( + PARA_TAG varchar(64) NOT NULL, + POINT_TAG varchar(64) NOT NULL + ); + DELETE FROM tmpBinStatDevTbl; + + --查找对应的测点 + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('analog.',analog.TAG_NAME) AS A + FROM stat_inst_para_point,analog + WHERE INST_TAG = statTag AND analog.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(analog.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('accuml.',accuml.TAG_NAME) AS A + FROM stat_inst_para_point,accuml + WHERE INST_TAG = statTag AND accuml.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(accuml.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('digital.',digital.TAG_NAME) AS A + FROM stat_inst_para_point,digital + WHERE INST_TAG = statTag AND digital.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(digital.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT PARA_TAG,concat('mix.',mix.TAG_NAME) AS A + FROM stat_inst_para_point,mix + WHERE INST_TAG = statTag AND mix.DEVICE = devTag + AND getAfterLastDot(PARA_TAG) = getAfterLastDot(mix.TAG_NAME); + + update stat_inst_para_point + SET stat_inst_para_point.POINT_TAG = tmpBinStatDevTbl.POINT_TAG + from tmpbinstatdevtbl + where stat_inst_para_point.para_tag = tmpbinstatdevtbl.para_tag; + + + DELETE FROM tmpBinStatDevTbl; + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('analog.',analog.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,analog + WHERE INST_TAG = statTag AND analog.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(analog.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('digital.',digital.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,digital + WHERE INST_TAG = statTag AND digital.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(digital.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('accuml.',accuml.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,accuml + WHERE INST_TAG = statTag AND accuml.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(accuml.TAG_NAME); + + INSERT INTO tmpBinStatDevTbl(PARA_TAG,POINT_TAG) + SELECT RET_TAG,concat('mix.',mix.TAG_NAME,'.value') AS A + FROM stat_inst_ret_para,mix + WHERE INST_TAG = statTag AND mix.DEVICE = devTag + AND getAfterLastDot(RET_TAG) = getAfterLastDot(mix.TAG_NAME); + + update stat_inst_ret_para + SET stat_inst_ret_para.POINT_TAG = tmpBinStatDevTbl.POINT_TAG, stat_inst_ret_para.IS_BIND = '1' + from tmpbinstatdevtbl + where stat_inst_ret_para.ret_tag = tmpbinstatdevtbl.para_tag; + + +END; +$$LANGUAGE PLPGSQL; + + + +CREATE OR REPLACE FUNCTION relationByTempPointName(devTempName varchar(64),fesDevTempName varchar(64)) +RETURNS VOID +AS $$ +BEGIN + /* + * 按照模板下的测点名称进行,后台模板与前置模板的关联 + */ + --获取设备测点名称 + + CALL clearTempRelation(devTempName); + --创建临时表, + CREATE TEMPORARY TABLE IF NOT EXISTS tmpRelationNameTbl( + TAG_NAME varchar(64) NOT NULL, + FES_SEQ_NO decimal(10,0) NOT NULL + ); + + --accuml + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM accuml_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_ACC')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update accuml_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where accuml_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + + --analog + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM analog_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_ANA')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update analog_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where analog_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + + --digital只判断第一个分量 + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM digital_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_DIG')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update digital_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO1 = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where digital_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + + --mix + DELETE FROM tmpRelationNameTbl; + + INSERT INTO tmpRelationNameTbl(TAG_NAME,FES_SEQ_NO) + SELECT A.TAG_NAME,B.SEQ_NO + FROM (SELECT TAG_NAME FROM mix_temp_define WHERE DEV_TP_NAME = devTempName) A + INNER JOIN (SELECT TAG_NAME,SEQ_NO FROM fes_dev_pt_temp_def WHERE DEV_TP_NAME = fesDevTempName + AND POINT_TYPE = getFesPointType('FES_MIX')) B + ON getAfterLastDot(A.TAG_NAME) = getAfterLastDot(B.TAG_NAME); + + --进行关联 + update mix_temp_define + SET SEC_DEVTP_NAME = fesDevTempName, SEC_SEQ_NO = tmpRelationNameTbl.FES_SEQ_NO + from tmprelationnametbl + where mix_temp_define.TAG_NAME = tmpRelationNameTbl.TAG_NAME; + + +END; +$$LANGUAGE PLPGSQL; + + + + + diff --git a/product/common/database/initscript/iscs6000_table_struct.xml b/product/common/database/initscript/iscs6000_table_struct.xml index b061ce59..29a4f0ec 100644 --- a/product/common/database/initscript/iscs6000_table_struct.xml +++ b/product/common/database/initscript/iscs6000_table_struct.xml @@ -1,8286 +1,8424 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - - - - - - - - - - - -
        -
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + +
        +
        diff --git a/product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.mo b/product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.mo deleted file mode 100644 index a2d4a24e434d6d628826bd4b06c28294e949edbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2043 zcmb_dTW=dh6ked*EWrcMeV9ZtNrcz2ouVd=BBVHJ6p=Ot+=`1zG~FHBOV_(*b~eRt z32GDr(4KP&+WoM-Fdg;)>U%4+M<@P(Z2d zf!zngvZi*xRs)p+cR?fm>DO0R7QBVe>(>{R(RlA6V!NW~3L=;z8np`{lF1tm!Q*g^ zBU!D7AoA(VLKYpdV9;w^l#cHyMAeErv{Y46O( z^~)!{@_A4No%Pv@w@^Vu_3GFDM^o6lK2uq{wIrqP%Iw`b>z%3~C!ms<*}>z#y%@M? z)XJkn$Y?kbZq!cgMnAvoSC*hO*tflDZcBGC*8`%t)-YRq{i8tY-=6hmSNyMDU3+=C z9lF~6`I=Wdz5eF;dbRrJ$w+hi1*QpgR9BBM?ijX}B%$1%~Pn6)Z^-v3Q>v z+pos=lUQGJU*99K-dGF^)hF4cA-A=zi^tSNg2dy=o_Mfsj52*p znqz8)(L&2ONtiV;G8j5IdT@AKQ9K$8rEE(u3pAx7^a%En=q{Snu=oVg#dx42Z8O~vBp&UJ?!%j4s18zx6{*N4Ni^Es z`rv|f(_+yyv}SJ5*CveYgu^F8Y18G@R1es^;3SDvY!01)L_Z0-1DzIW8zAwn{%t=` z*)G>uDv+Nff&MKOkF(MVo9oV);fN%W7r$TrOr%-}80A_%4XJ7jVna&GE))eCLS#&}5Js0?F*!wQR^wz-^NV%5zMRW@(Uh$1qKnqh>_p874Ps2C5Iy zHZ~NPul#ph^UA&@}PEIg(yg7=1xjC!5TSp>NG#O40&Lq>0%lNZK z4hKWtq&DSm9YPGp8Q;h(=z|phCBIDgZ9a&dCD7cI)wx+|x^{YwP))p!pIHHEb2%%>@QXJ7xjIn5I(DW0 E9bqF6uK)l5 diff --git a/product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.po b/product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.po deleted file mode 100644 index e1205d85..00000000 --- a/product/common/resource/en/apc_if_srv/translate/apc_if_srv_en.po +++ /dev/null @@ -1,71 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-07-17 09:49+0800\n" -"PO-Revision-Date: 2019-10-22 11:31+0800\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: en_GB\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.4\n" -"X-Poedit-Basepath: ../../../../../src/application/apc_if_srv\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: I18N;I18N_C\n" -"X-Poedit-SearchPath-0: .\n" - -#: CApcIfSrv.cpp:137 -#, c-format -msgid "" -"I18N output test:\n" -" This is src hardcode. \n" -" int = [%d] , str = [%s]\n" -msgstr "" -"I18N output test:\n" -" This is English(Great Britain). \n" -" int = [%d] , str = [%s]\n" - -#: CThreadAnalog.cpp:291 -msgid "控制目标值非法,控制消息中var_value不是DOUBLE或dValue未填充!" -msgstr "" -"Control target value is illegal,the var_value in control message is " -"not DOUBLE or dValue is not filled!" - -#: CThreadAnalog.cpp:347 CThreadDigital.cpp:328 CThreadLocalCurve.cpp:706 -msgid " 提交失败" -msgstr "Commit failed" - -#: CThreadDigital.cpp:275 -msgid "控制目标值非法,控制消息中var_value不是INT32或nValue未填充!" -msgstr "" -"Control target value is illegal,the var_value in control message is " -"not INT32 or nValue is not filled!" - -#: CThreadLocalCurve.cpp:234 -msgid "计划曲线\"%1%\"查询不到今天的年、周规则或规则重复,请检查配置!" -msgstr "" -"Plan curve '%1%' unable to query today's year rule and week rule,or " -"rule duplication,please check configuration!" - -#: CThreadLocalCurve.cpp:250 -msgid "" -"计划曲线\"%1%\"根据年规则ID = %2%,周规则ID = %3%,查询不到日规则,请检" -"查配置!" -msgstr "" -"Plan curve '%1%',according to the year rule = %2% and week rule = %3% " -"unable to find day rule,please check configuration!" - -#: CThreadLocalCurve.cpp:273 -msgid "" -"计划曲线\"%1%\"查询不到当前值或值重复,请检查日规则(ID = %2%)配置!" -msgstr "" -"Plan curve '%1%' unable to query current value or value duplication," -"please check the configuration of day rule(ID = %2%)!" - -#: CThreadLocalCurve.cpp:302 -msgid "计划曲线\"%1%\"输出测点\"%2%\"格式错误,请检查配置!" -msgstr "" -"Plan curve '%1%',format error of output measurement point'%2%',please " -"check configuration!" diff --git a/product/common/resource/en/debug_tool/image/check.png b/product/common/resource/en/debug_tool/image/check.png deleted file mode 100644 index d75615e3a6f6ebeff680ce3babf8e6126f3fb77c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)1vF@0>e2rZZTX8nq~d0-?;1ECi`dWJy{SA{4YKBKlbrMLz^l^aI&KYEzpQ z6|;zJVVOmtP+%#6AZ0BgC`vL%z1^9)efH%hnB7Eyb(9AHR-vv6NC zNzW~fWCnCx$#?>cq~vHcOQ7RPx(8i42OOHJ1Xmv0nJe^_z5M8Lp*=}B7tU@ls?MTu&;36dm z4HCAbB%*R)gU-fs4WUhcw6s7U@?ps1Y+I84FD`g6FJEC#jZWjL0C~aG4oD01_u+cb zHRy1$J&BQk?W+a5*9i*q(l^q7fj-ptT-#fRF;mh|8DOS1ngph+FMo7@cbC^)EVXhL*<)NZ&7yKK&Z0sT$siSSp)|_^7ZOnr5+supnTsHM(4tyI z4-3LF&?sBf!UrKi=7{*njEr)~$2|Y%jsG7l6^rVuF5G+0{m%CwEUALPe72(VzAQT` zGE!-`$irz|D;lQ4arQbCM?0U;d*7ZcLV8<7Rxb|(93KE;wAh?sW9N$9d_|2{usa_S|gK)Q3!J~c^p$LPfClT-*kex<2SRmj~ zp=cs$d@4;0er89hs5yGmUntg8dxeyqF%8X~GNxvAh&+K?U`S^MkqpjE4k!0n;B)bK z_(qN2?pE$oc}r}#vC@*iaVm#8&r+qc&ilouK`#6HpnW&i3f@Kye}&SmFX$8$I838ulCO=fFCq~1uW436=4rw<;~2iu3rCA9~@g| UI{&Xswg3PC07*qoM6N<$f`#8!VE_OC diff --git a/product/common/resource/en/debug_tool/image/search.png b/product/common/resource/en/debug_tool/image/search.png deleted file mode 100644 index 05160b8a2c19be05d79da83f5b64029fbe0e350d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmV+b1ONPqP)7i3n2uBA_%&R2!-+@@FH(2E$!^xTtRqKU1TAB z5Zwq}bk{|wSrM7%EV~gy$s~xtKGt?7CfobOW?OSwx^s8V^Sr-v{^#X+2|3qR`OW1L z>rM&AaS-hUxG>qmz$}4YfpOdLIiBRMOW#v=q1ta9B*I++HZjNo_zf{;SfGFyl??1A zKmd3~LNt$d6@AKuGoaTWI}PGn4EzA&vYmhRjmXkS_5!b*FK1igA~Clx<1<(_n9?dvXeM&KWP6lilSH&Jz7XFt z7A&6pAC|6p{8k$gt}$@K)U~z@==EDoAUpu5)6gAP)`DfwfMozwl~4<1V{$_{`JB9g z=wm<}o>TF%aasI5AF#%6o#e$$Y#Pr3d?MS|0rDUy0#KH{po4R%)9eEavcZSc|m@l~ZLZnm`idlf}8M>q84;Xt5@D@YY z%JK!>!RP^-qG7N)Z}?n2i=aOm1W~6_+z^t^!F*6pz`9Pr8B%bMN^L9!)&%D^vr^Mw z8Zms1y0wB{87^mG9|!YW)92j3WR^YB>LG!%%(!a$w2sx#TFI`sh&?A@heCW`NG~y$ z9uAW29ua#j7hD}$@; yN><%1!(N-P4*+nj7 s)9R72Y7#sMQ1myor6p_ljSR;C0000)EuJ+$J=x zTemL6u;}}{yF828g2bjQPV|WU(OA;o_Ao;8B9Q$56v-ap8OQ0bP Mp00i_>zopr0O-#puK)l5 diff --git a/product/common/resource/en/debug_tool/image/uncheck1.png b/product/common/resource/en/debug_tool/image/uncheck1.png deleted file mode 100644 index 31eb83b1bc81b40bc4c4dced8643a3d80d4893c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 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 Q7Dqd9gL|mutYX-I0S&vZDF6Tf diff --git a/product/common/resource/en/debug_tool/translate/en.ts b/product/common/resource/en/debug_tool/translate/en.ts deleted file mode 100644 index 6393677f..00000000 --- a/product/common/resource/en/debug_tool/translate/en.ts +++ /dev/null @@ -1,1775 +0,0 @@ - - - - - AiMonDlg - - - Dialog - - - - - RTU刷新 - RTU refresh - - - - 点配置刷新 - Point refresh - - - - - - 数据刷新 - Data refresh - - - - 全部 - All - - - - 区间 - Interval - - - - -- - -- - - - - RTU号 - RTU number - - - - - 使用标志 - Use flag - - - - RTU名称 - RTU name - - - - 点号 - Point number - - - - 标签名 - Tag name - - - - 点描述 - Point desc - - - - 点值 - Point value - - - - 点状态 - Point status - - - - 时间 - Time - - - - - - - - - 告警 - Alarm - - - - - - 通信中断,无法读取数据。请连接FES系统! - Communication was interrupted and data could not be read. Please connect FES system! - - - - 区域start数据非法或为负,默认为0! - The area start data is illegal or negative, the default is 0! - - - - 区域end数据非法或为负,默认为0! - The area end data is illegal or negative, the default is 0! - - - - 区域start 大于 区域end点数,两者默认为0! - The area start is greater than the area end points, both of which default to 0! - - - - 停止刷新 - Stop refresh - - - - CCheckUser - - - Dialog - - - - - 账号 - Account - - - - 姓名 - Name - - - - 用户组 - User group - - - - 密码 - Password - - - - 验证 - Validation - - - - 取消 - Cancel - - - - 权限验证 - Permission to verify - - - - - - - - 提示 - Prompt - - - - 请输入正确的账号 - Please enter the correct account - - - - 账号不能为空 - Account can not be empty - - - - 账号不存在 - Account does not exist - - - - 权限接口错误 - Permission interface error - - - - 密码错误 - wrong password - - - - CDebugTool - - - CDebugTool - - - - - 实时数据 - Real data - - - - 测点选择 - Point selection - - - - 测点监控 - Point monitoring - - - - 实时库表 - Rtdb table - - - - 表选择 - Table selection - - - - 表内容 - Table contents - - - - 筛选向导 - Screening Wizard - - - - 实时报警 - Real-time alarm - - - - 实时事件 - Real-time events - - - - 历史事件 - Historical events - - - - 节点状态 - Node status - - - - 前置通道 - Fes channel - - - - 前置数据 - Fes data - - - - 工程调试工具 - Engineering debugging tools - - - - CFesChannel - - - Form - - - - - 专业通道 - Sub channel - - - - 专业 - Sub - - - - 通道 - Channel - - - - 通道状态 - Channel status - - - - CFesData - - - Form - - - - - 专业选择 - Sub choice - - - - 通讯状态: - Communication status: - - - - 模拟量 - Analog - - - - 数字量 - Digital - - - - 累积量 - Accuml - - - - 混合量 - Mix - - - - 通讯中断 - Disconnect - - - - - - 告警 - Alarm - - - - 获取进程所在目录失败 - Failed to get the directory where the process is located - - - - - SYS_MODEL_APP_INFO.xml 配置文件无法打开! - SYS_MODEL_APP_INFO.xml, The configuration file cannot be opened! - - - - 通信连接 - Connection - - - - 通信中断 - Disconnect - - - - CHistoryEvent - - - Form - - - - - 查询 - Search - - - - 打印 - Print - - - - 事件条数 - Number of events - - - - CLoginTool - - - 中文 - Chinese - - - - 用户 - User - - - - 密码 - Password - - - - IP地址 - IP address - - - - 端口 - Port - - - - 数据库类型 - DB type - - - - 数据库名称 - DB name - - - - 登录 - Login - - - - 取消 - Cancel - - - - - 提示 - prompt - - - - 请输入正确的端口号 - Please enter the correct port number - - - - 系统初始化失败 - System initialization failed - - - - 数据库设置 - DB settings - - - - Mysql - - - - - mysql - - - - - Orale - - - - - orale - - - - - CNodeStatus - - - Form - - - - - 关键字 - Keyword - - - - 查找 - Search - - - - 刷新 - Refresh - - - - 全部选中 - Select all - - - - 全部取消 - Cancel all - - - - CRealAlarm - - - Form - - - - - 全部确认 - Confirm all - - - - 当前页确认 - Current page confirm - - - - 所选确认 - Selected confirm - - - - 取消选择 - Cancel selection - - - - 刷新 - Refresh - - - - 停止刷新 - Stop refresh - - - - - 选中条数 - Selected number - - - - 总报警条数 - Total number of alarms - - - - 未确认条数 - Unconfirmed - - - - 级别排序 - Rank order - - - - 滚动刷新 - Rolling refresh - - - - 状态筛选 - Status filtering - - - - 当前报警条数 - Number of current alarms - - - - 报警类型 - Alarm type - - - - 报警状态 - Alarm status - - - - 时标 - Time - - - - 域ID - Domain ID - - - - 位置ID - location ID - - - - 报警内容 - Alarm content - - - - 报警优先级id - Alarm priority id - - - - 设备类型ID - Device type ID - - - - 责任区ID - Responsibility area ID - - - - 测点ID - Point ID - - - - 设备 - Device - - - - CRealDataControl - - - Form - - - - - 控制测点: - Control points: - - - - 命令类型: - Command type: - - - - 其他参数: - Other parameters: - - - - 控制数值: - Control value: - - - - 执行命令 - Excuting an order - - - - 状态查询 - Status query - - - - 执行状态 - Execution status - - - - 反馈结果 - Feedback result - - - - 设置AI限值 - Set AI limits - - - - - - - 服务点禁止刷新报文 - Service point forbids refresh message - - - - - - 服务点禁止报警报文 - Service point prohibits alarm message - - - - - - - 人工置数报文 - Manual set message - - - - - - 遥控请求 - Remote request - - - - - - 遥控选择 - Remote selection - - - - - - 遥控执行 - Remote execution - - - - - - 遥控取消 - Remote cancel - - - - - - 遥控关闭 - Remote shutdown - - - - - 提示 - prompt - - - - - 请输入正确的数值 - Please enter the correct value - - - - - - - 等待返回结果中。。。。 - Waiting for results. . . . - - - - 程序猿还在写 - Program ape is still writing - - - - - - 远程查询实时数据库失败 - Remote query of real-time database failed - - - - 未查询到测点 - No query points found - - - - 限值 - Limit - - - - - 禁止刷新:未设置 - - Disable refresh: not set - - - - - 禁止报警:未设置 - - Disable alarm: not set - - - - - 人工置数:未设置 - Manual setting: not set - - - - 禁止刷新:已设置 - - Disable refresh: set - - - - 禁止报警:已设置 - - Disable alarm: set - - - - 人工置数: - Manual setting: - - - - 解析返回结果出错 - Error parsing the returned result - - - - 接受返回结果超时 - Accept return result timeout - - - - - - - - - 该命令无反馈结果 - No feedback results for this command - - - - - - - 取消 - Cancel - - - - - - - 设置 - Set up - - - - - - 占用设备 - Occupied equipment - - - - - - 不占用设备 - No equipment occupied - - - - - 程序猿还没写完 - Program ape has not finished - - - - CRealDataSelect - - - Form - - - - - 位置 - Location - - - - 专业 - Sub - - - - 设备组 - Dev group - - - - 查询 - Search - - - - 设备 - Device - - - - - 测点 - Point - - - - 所有位置 - All locations - - - - 所有专业 - All Sub - - - - - 所有设备组 - All device group - - - - 类型 - Type - - - - 模拟量 - Analog - - - - 数字量 - Digital - - - - 累计量 - Accuml - - - - 混合量 - Mix - - - - 常量 - Const - - - - CRealDataWatch - - - Form - - - - - 查找 - Search - - - - - 全选 - Select all - - - - 模拟量 - Analog - - - - 数字量 - Digital - - - - 累积量 - Accuml - - - - 混合量 - Mix - - - - 常量 - Const - - - - 测点删除 - Delete - - - - Del - Del - - - - 反选 - Reverse election - - - - 删除 - Delete - - - - 取消选择 - Cancel selection - - - - 请输入描述信息 - Please enter a description - - - - - 设备 - Device - - - - - 测点 - Point - - - - - 位置 - Location - - - - - 专业 - Sub - - - - 类型 - Type - - - - 值 - Value - - - - 状态 - Status - - - - RTU - RTU - - - - SEQ_NO - SEQ_NO - - - - 是否可控 - Whether controllable - - - - - 提示 - prompt - - - - const类型测点未配置 - Const type measuring point is not configured - - - - - 否 - No - - - - 是 - Yes - - - - 所有位置 - All locations - - - - 所有专业 - All Subs - - - - 操作 - Operating - - - - 当前未选中任何项! - No items are currently selected! - - - - CRealDatabaseFilter - - - Form - - - - - - 选择字段 - Field - - - - - 句内条件 - In condition - - - - - 筛选内容 - Content - - - - - 句间条件 - Inter condition - - - - 添加 - Add - - - - 删除 - Delete - - - - 执行 - Perform - - - - - - 提示 - Prompt - - - - 条件内容为空 - Condition content is empty - - - - 列为空 - Column is empty - - - - 请选择一个条件行 - Please select a condition line - - - - CRealDatabaseSelect - - - Form - - - - - 应用 - Application - - - - 表选择 - Table - - - - 列选择 - Column - - - - 所有列 - All columns - - - - 实时数据库选择初始化变量失败 - Real-time database selection initialization variable failed - - - - CRealDatabaseShow - - - Form - - - - - 专业 - Sub - - - - 设备标签 - Device tag - - - - - 提示 - Prompt - - - - 所有设备 - All device - - - - 所有专业 - All Sub - - - - 未知的数据类型 - Unknown data type - - - - 第 - Incorrect conditional value input in the - - - - 行条件数值输入有错 - line - - - - CRealEvent - - - Form - - - - - 滚动刷新 - Rolling refresh - - - - 筛选状态 - Filter status - - - - 筛选 - Filter - - - - 打印 - Print - - - - 事件条数 - Number of events - - - - CSelectAppDlg - - - Dialog - - - - - 连接 - Connect - - - - 断开连接 - Disconnect - - - - FES IP地址: - FES IP Address: - - - - FES网络端口: - FES NET port: - - - - 连接状态: - Connection Status: - - - - 专业名称: - Sub name: - - - - 网络端口错误,无法连接网络。 - The network port is incorrect and cannot connect to the network. - - - - 网络连接 - Connect - - - - 网络断开 - Disconnect - - - - DiMonDlg - - - Dialog - - - - - RTU刷新 - RTU refresh - - - - 点配置刷新 - Point refresh - - - - - - 数据刷新 - Data refresh - - - - 全部 - All - - - - 区间 - Interval - - - - -- - -- - - - - RTU号 - RTU number - - - - - 使用标志 - Use flag - - - - RTU名称 - RTU name - - - - 点号 - Point number - - - - 标签名 - Tag name - - - - 点描述 - Point desc - - - - 点值 - Point value - - - - 点状态 - Point status - - - - 时间 - Time - - - - - - - - - 告警 - Alarm - - - - - - 通信中断,无法读取数据。请连接FES系统! - Communication was interrupted and data could not be read. Please connect FES system! - - - - 区域start数据非法或为负,默认为0! - The area start data is illegal or negative, the default is 0! - - - - 区域end数据非法或为负,默认为0! - The area end data is illegal or negative, the default is 0! - - - - 区域start 大于 区域end点数,两者默认为0! - The area start is greater than the area end points, both of which default to 0! - - - - 停止刷新 - Stop refresh - - - - MiMonDlg - - - Dialog - - - - - RTU刷新 - RTU refresh - - - - 点配置刷新 - Point refresh - - - - - - 数据刷新 - Data refresh - - - - 全部 - All - - - - 区间 - Interval - - - - -- - -- - - - - RTU号 - RTU number - - - - - 使用标志 - Use flag - - - - RTU名称 - RTU name - - - - 点号 - Point number - - - - 标签名 - Tag name - - - - 点描述 - Point desc - - - - 点值 - Point value - - - - 点状态 - Point status - - - - 时间 - Time - - - - - - - - - 告警 - Alarm - - - - - - 通信中断,无法读取数据。请连接FES系统! - Communication was interrupted and data could not be read. Please connect FES system! - - - - 区域start数据非法或为负,默认为0! - The area start data is illegal or negative, the default is 0! - - - - 区域end数据非法或为负,默认为0! - The area end data is illegal or negative, the default is 0! - - - - 区域start 大于 区域end点数,两者默认为0! - The area start is greater than the area end points, both of which default to 0! - - - - 停止刷新 - Stop refresh - - - - PiMonDlg - - - Dialog - - - - - RTU刷新 - RTU refresh - - - - 点配置刷新 - Point refresh - - - - - - 数据刷新 - Data refresh - - - - 全部 - All - - - - 区间 - Interval - - - - -- - -- - - - - RTU号 - RTU number - - - - - 使用标志 - Use flag - - - - RTU名称 - RTU name - - - - 点号 - Point number - - - - 标签名 - Tag name - - - - 点描述 - Point desc - - - - 点值 - Point value - - - - 点状态 - Point status - - - - 时间 - Time - - - - - - - - - 告警 - Alarm - - - - - - 通信中断,无法读取数据。请连接FES系统! - Communication was interrupted and data could not be read. Please connect FES system! - - - - 区域start数据非法或为负,默认为0! - The area start data is illegal or negative, the default is 0! - - - - 区域end数据非法或为负,默认为0! - The area end data is illegal or negative, the default is 0! - - - - 区域start 大于 区域end点数,两者默认为0! - The area start is greater than the area end points, both of which default to 0! - - - - 停止刷新 - Stop refresh - - - - QObject - - - 初始化消息总线失败 - Failed to initialize message bus - - - - 初始化数据库接口失败 - Failed to initialize database interface - - - diff --git a/product/common/resource/en/fes/translate/fes_en.mo b/product/common/resource/en/fes/translate/fes_en.mo deleted file mode 100644 index 59bf12c570913dbb6a5202c8631f65264e7b96e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15508 zcmb`NYj9oFb;ma;;b8-b32)MJL{S2XBulm-wv4HbB-^Tya3m2z97C>kkE9FtA?`WX zwxB7pvGGerHW(a(OJm0#6Z|6JvE_#_bo!yC(@E1#I-SWRC5`Tt^r6r+`H)P>On>X_ zeeON?r3d7U_W9qv_u6Z(wf5R;KaPHJ?WHd%p65wlBn@1u)J5>)D|qqzZl+Ry3jQ9f z1#i4cse8cX;Mc%sO#Te`Rq`K#)!;2x8#++Rp8@N^qu`gpjKOQJQR)uz_ZVDdu;1We zu#WooLFxBnQ25RLoGyP1l>BZ`_z!~%!QX*%!Fiuo>Puh`SPc$>*MY;}Ebw1J(QgEt z34Vq`;d2c*8*B#az&=pg9X0qacpv$nf;WNJU90t|HrQrxox%ME-!qs2zd*a0ylw_> z1I3;TK+*F_lYbptM*ag(#^+9ixD9MFXoI(s-wa+49sp5AodGei`Ug<-`*%><|JLMZ zK`i4i8cnth=@Si~$r(c5$z#DE*3KOf9pwxc{6gzJM=|UX^=Ya2m z72t0`R8ZI7NL%nO@NRH1cn`Q1#C6nhkS^3YQ0)3IAb)DylwU%j=zAl$1e^=b2U7-5 zfFjQ*csn=~;|jkTQ0&}j@KI3gxE>UK-vg!pQ{bP0?|}@F`T!I={l?&}7zfs>0Tlhd zZSsRA|GLTl%;bM-@?WMCpGGwZ%-Z}euMuBt{{IqgM1$t2N#3K!LNfKg3`}ooV5+y2#TCPHFzaTiytonMgKLtV5zo( zG*w4IvBQr+>E}v>mwp}sTfjY_@c%DR_}_tZEC<(te*wM=(v*p+?ffN>5TV*Z@k1Mw z`lmsOHwVB6!Q2^9Z$6kG~E1q$Ey3|@|NM9H^+h@#GcHQ=udUP}-~MYRMJei2aobfdw& zpvZR&lyQ9DNuGyf>hsQufR4;&tpoUHTI4FAE46)e11r+-YfK;i2py>G% zP~^A_<^K}A4g4DTI4E)*1SNi)0T+TlHaHXKlzFub6gj^IiXZfWOck{sly+x9Tvq)A z6np&|tOw^KyvXH%BF|eOqNrbj;zzR(Uhr;%kARp^eHRqFz5&hv{|yv-{Q{J6`4|*_ zH=!J?)G|=ydkPf4+Xsp~KLf>I{?Fv^yIbcU1ue=CfDPc^fztjmf~>T!1f_j9DDAg^ z*MjdG{5kk}^8W)$yGt)${fE zF90p_ArMoljiAi8Q{V&OhoH#4kV1Z{XF#bR;wAIze?b}NIShh~=Xb$Y@GL0hS5SB# z*ba7pFM#)gqoB0EgN%$*7`z0;Jl^v-Zy67HE+;X)yf_h-0-iPv-upT8`x@}uq-RJL zN#qdSpCrjxKSGixq``ZOF7n72{|V_P(icf9Nb=lFdV;i5GCY4xlKJ@<={C|T(sGj6 zZV5@AMWnBgZXpqty#2yupgeI>59wQy2|Uf__jdzj;txy@?_tC#O5wZ9vN?W#GmE4RD)UrK1})s=|R$UBzdkR;bz`Ele|1nY4F~+^8PE*qoz#a z$2#--D)2L;t4YtBvTfi@lFZZ3nlkax>q+9nNzw+AJhzj!lf+jlNSjFh^G$wyozzd- zN?J+kCds^=LlXay=ONM+BwSB@ha`{81@U8f#D6!F#P3>2?Id~Tk=BwNQi{|`+DK|3 zeU7w+)J5{29sICKGXG?5$`jGxz594SOh?8E{=P(q-R&B_Q=ns&qC0B37# z;Mw%6r^ZfiW|#uHKvJyB+E6rQFUqseM08zh#r=(9{`84g()|}kE}qEjIa{Q2DWamT z^NGezo=*?HJP9XFRF>1|ffHjV4jGv|`GTXCbW`na$W1xod`64uI?*J}^2RJjTXM{T zeyRsAAXLc~)8UR{nyKgf`5u8__tee5yVi`MnV;n+Qu^fC^tnBwuWV{;7ZIn@wouey zn+XPS3S?GmDkko_vblAcl|H;T^ZeoT@x9}F_Klr9sa8hf-NdV!ni}mRGyD?YuLcN7 znPUgWx9l7{`O*yK$0FLO_U5LRrq=el+PTvXEmLTkXOJTLB9AsAWMf5VA|AIpU9Fo| zrb6WvY8DmB@uK<2&>NYT-Xy@M&%8Bu@imOZ@67&Vh#`R=3&BeMS`!cThC{C15s7(G zU}R|f$c69IHna1@*qM{*cQ%a-og4k(Ii+LyBP)onN5&2e=y0wj5kABM2BjpCmaG)f z3x~${^iReqKvb5~c>lJ{jvr3KDM(brNyjlSW>h*dXB-ubBctaxnPT)PtVs`^5es+| z2-lla)zUN>TErN8b{M0w;m`yseg53&(H+d9v3Fif|7fG0ep+c{ zEmfHn-K$Iw4vf8XHof`nu?>54Gh8lxp+9|Ohlu8>XW@{Z`((!ibquWns`Zr`na!QG0XtMGcnk?%~Kf8lt zIxLO9`dlSzxT8LSD^J`+d@i&7aC-Olk>QIBs~-t;+4$eQR#2=rwu2jyOWg7J57>aP zKQ@k{YYUfEWtQ9NwX#&ki-X!z@-n%=n%Q$2FVv=5@$hm@D|1w~XoKI=VpTeKRyud- z2$y;50AsA3mzaf?Yr@J98$zYwP%yLGkS^=dx4TpF+9acP5`QyOI@@m*6n9 zhFZJe{;q&?uE&f0nN#Pr_9m1S4@wb@=3kKu4w(Q6v(Jn~@s`tf8eNlbdTn-7lg}@( zyp*ihhEk)$yGPIO$J{s8u!3V$aT8yUD)hM&E<6JB1JSx=W*BC%>>G+5KQ|evt{$dryz=Jtgru z8qS(ko>)Ip6Du zrx)SizDKIZPMp-o|5cUYk1lLpEoJ(agxJVNPPZN3yc45jS0bXJp43_5M^hYs8?3hJDuPxrWKtw3G0t(tP=(5G@t(YaO%F!3NrOr<3y_!s0Qf{#t zV&R$wHyLe=BsnTtI)=-ym5E5)ZElqFBW+3^vV#%_PS9oPizP0}R(HpmBu9eLx6gZ9 zhI6$OvDLi`J?ri0>pR9yZy(>cYw{LZ3kL+jXM}}zUVrmCklEj#K6FG^-MdI~Zw~4l zV`w^>it*{FB$?L0$n(-goSE2Qrr_W)*+zbUx93bU&pbsvw^A#UiN`tZRyT*MzhNhx zNFrWu%~<(hM|DHe4!LBj8#%JpTXSmb7F5^OR?nGd)h?)?v*4?>^J{A%tZuW{MxF@qTTk^o*3demrMaakCsAEZ z?Tm&*+_mGd>FY%v*Iw_=?u~{b@r71rPblfw?xKe}mR8Tt(Mfk*cCxxD-kAte6xC)9k-KOj+F^J9C59>n)x;JsL|Q#`$LZ18*+Q#>F$NxL0N zcJ{2K%j(*COM1x45~!-Hw|bKaH_@4h&QJ|KA?_)n79nqHH_KK?E}N^YXrkLnq+Bb} zWjQvt(Q0WZ61BsYo3MJtjuw~2R%ap>3&q1#@dQNiFnQLiMAR?0!ijb9z=rLQz{1=a zx7o3TYiIlG@?^{PWObr-!nL|02$jsI?UjgAk3sx<*hzVzWGWu%^!(hSv7Jn&dfhV3 zom6M1?KlBh3iy}nKNNmE<+w3?*P4nt0rF48aY{-BIw_LLs1+c|%HcZ>Q>)u9uv37( z*i?mA-^G2DZIitQZ($a9^@(dZ#g_Chbn}Rcc=}XrcF6PT2^a-P%CaFObw!dfnL05o zoZI91uHy#Wq|{}2f$J2F!Ia$G+(=Vvzz-MGs*zX*<1%xU3siW8f}+GDhWf(--cOxz*%UdAIUTqVoyc zwFq2^q<;a=U7+#Ut`rM}xu`d>hdlrX4=dEo%4x+}L@k%==(5-IlloS`aLIDvIB*9) zDZeuIE6<{6a#{s_WL-ls{JEQb;{*AHIlK9{`&K*^TVp3>nKjK>D#^G#5l1#2dJQgr z$=^XhNcBbfDZLoBgwk3~~E*6a2KmR@g_<;ve)Z+E6---WY!OR(HIdC^lAwsyS+ zF|I6EdS#xp&C=}h?)QcV@KIoPEV7G+nCs%jj@=`Ov z6Ra>q>(2$*0hUi$<-aFPhfVp<3r0{piD=|~t;lt6<(x0tH=!&=>K1aUnr!)~DwwNX zo{yCLA~9KK-Uv*?&>VNXj}=ois3xD|4{-_01Vdm9#7J z3Jsqu3*D8rOl~#zJJ7X$o7~l9lSE=`9i7R_;ZfCVkonu-4Sb?kjvq2JytrK-94)U! zz-evA4XueroF2=S^Gq*Wcq~M{xha?-v3!BI7btMGBp#1wn zKyGJ3xqb40#8sw8&RL$u41Y($72AryvKVk?rDyrP(lE&~I*s}I$yimWHrw+pJC3{A zeqc3)oC5R9n>kXmL*gqrj^Z5*IXW_;IFBRi0G+IimW9jN91yM$>6 zrJS;R^+7upSucxzVKB)%%?gcak=wFNjZMpxo92RLE~Hr{n=c`>Fq?8#@s>~juw1B# znwY#eP8QMYfRd9h+9%Pn-0=z%>!m+HBfGJJaV(+<6>6osHQYRJ$aPwVSnIA@6YQT| zZg!ps{4BU$5pPhfn#ziW`Up-|IN~rvBy`(E1UWBqJCKMmlk|Si_`teQvA;}0o-Xh|iC>Zh+ofJJFFiV3FQ zNp7=SQjNmuPt!qZC2~DXV=UTPv`O0E16_-F!P|Olg#cXEXG`j}XUUVEWN<)@gE^<`9$r|!bq;mI| z-ICei((5wv1TPkw{fkBaV^`qnR+bdLIMUYyJ|uf%*2I z_^FHE!RugIlUaaK%V?j^NQ%8R(L4DQZK?txsY)ufHFGRE=;kSuy(ul%a!D5(0ew96 z_d0T3HOFPSRQAroMvkzxF2ZqI_I6HH-tDv(J`0ZXdaeW}LvZ(8aIDemDAt*bM?rmV z{Vk}N#yn}$p2w!3Kqv-fDj&^E&l6sx74I4YWYk5pywxP8({C--D*hKU0spR zh}?a%|Ecu{B0yVClmJPV9nLDBEuxWF#Qij^JwQ%FI6bK*B8( G2K;}}%HvG{ diff --git a/product/common/resource/en/fes/translate/fes_en.po b/product/common/resource/en/fes/translate/fes_en.po deleted file mode 100644 index 25027a4e..00000000 --- a/product/common/resource/en/fes/translate/fes_en.po +++ /dev/null @@ -1,798 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-24 09:29+0800\n" -"PO-Revision-Date: 2019-10-24 16:39+0800\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.4\n" -"X-Poedit-Basepath: ../../../../../src/fes\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-KeywordsList: I18N;I18N_C\n" -"X-Poedit-SearchPath-0: fes\n" -"X-Poedit-SearchPath-1: protocol\n" - -#: protocol/iec104/IEC104DataProcThread.cpp:3310 -#, c-format -msgid "IEC104 遥控失败!RtuNo:%d 通信中断" -msgstr "IEC104 Remote control failed! RtuNo:%d communication interrupt" - -#: protocol/iec104/IEC104DataProcThread.cpp:3411 -#, c-format -msgid "IEC104 遥控失败!RtuNo:%d 找不到遥控点:%d" -msgstr "IEC104 Remote control failed! RtuNo:%d cannot find remote control point: %d" - -#: protocol/iec104/IEC104DataProcThread.cpp:3458 -#: protocol/iec104/IEC104DataProcThread.cpp:3666 -#, c-format -msgid "IEC104 遥调失败!RtuNo:%d 通信中断" -msgstr "IEC104 Remote adjustment failed! RtuNo:%d communication interrupt" - -#: protocol/iec104/IEC104DataProcThread.cpp:3493 -#: protocol/iec104/IEC104DataProcThread.cpp:3721 -#, c-format -msgid "IEC104 遥调失败!RtuNo:%d 遥调点:%d 范围超出" -msgstr "IEC104 Remote adjustment failed! RtuNo:%d Remote adjustment point: %d out of range" - -#: protocol/iec104/IEC104DataProcThread.cpp:3610 -#: protocol/iec104/IEC104DataProcThread.cpp:3795 -#, c-format -msgid "IEC104 遥调失败!RtuNo:%d 找不到遥调点:%d" -msgstr "IEC104 Remote adjustment failed! RtuNo:%d cannot find remote adjustment point: %d" - -#: protocol/iec104/IEC104DataProcThread.cpp:3756 -#, c-format -msgid "IEC104 遥调成功!RtuNo:%d value=%f" -msgstr "IEC104 Remote adjustment success! RtuNo:%d value=%f" - -#: protocol/iec104/IEC104DataProcThread.cpp:3763 -#, c-format -msgid "IEC104 遥调成功!RtuNo:%d value=%d" -msgstr "IEC104 Remote adjustment success! RtuNo:%d value=%d" - -#: protocol/iec104/IEC104DataProcThread.cpp:3841 -#, c-format -msgid "IEC104 遥控成功!RtuNo:%d 遥控点:%d" -msgstr "IEC104 Remote control success! RtuNo:%d Remote control point: %d" - -#: protocol/iec104/IEC104DataProcThread.cpp:3848 -#: protocol/iec104/IEC104DataProcThread.cpp:4093 -#: protocol/kbd104/KBD104DataProcThread.cpp:2308 -#: protocol/kbd104/KBD104DataProcThread.cpp:3668 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:360 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1543 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:492 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2254 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2398 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:442 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2074 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2198 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:1108 -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1105 -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1284 -#, c-format -msgid "遥控失败!RtuNo:%d 遥控点:%d" -msgstr "Remote control failed! RtuNo:%d Remote control point: %d" - -#: protocol/iec104/IEC104DataProcThread.cpp:3877 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1566 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2278 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2090 -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1134 -#, c-format -msgid "遥调成功!RtuNo:%d 遥调点:%d" -msgstr "Remote adjustment success! RtuNo:%d Remote adjustment point: %d" - -#: protocol/iec104/IEC104DataProcThread.cpp:3884 -#: protocol/iec104/IEC104DataProcThread.cpp:4112 -#: protocol/kbd104/KBD104DataProcThread.cpp:3692 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1571 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:642 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2283 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2418 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:572 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2095 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2215 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:1125 -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1141 -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1303 -#, c-format -msgid "遥调失败!RtuNo:%d 遥调点:%d" -msgstr "Remote adjustment failed! RtuNo:%d Remote adjustment point: %d" - -#: protocol/iec104/IEC104DataProcThread.cpp:4140 -#: protocol/kbd104/KBD104DataProcThread.cpp:3716 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1594 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:772 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2306 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2446 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:687 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2111 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2233 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:1143 -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1331 -#, c-format -msgid "混合量输出成功!RtuNo:%d 混合量输出点:%d" -msgstr "The output of mix is successful! RtuNo:%d Mix output point: %d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2026 -#, c-format -msgid "KBD104 遥控失败!RtuNo:%d 通信中断" -msgstr "KBD104 Remote control failed! RtuNo:%d communication interrupt" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2094 -#, c-format -msgid "KBD104 遥控失败!RtuNo:%d 找不到遥控点:%d" -msgstr "KBD104 Remote control failed! RtuNo:%d cannot find remote control point: %d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2144 -#, c-format -msgid "KBD104 遥调失败!RtuNo:%d 通信中断" -msgstr "KBD104 Remote adjustment failed! RtuNo:%d communication interrupt" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2180 -#, c-format -msgid "KBD104 遥调失败!RtuNo:%d 遥调点:%d 范围超出" -msgstr "KBD104 Remote adjustment failed! RtuNo:%d Remote adjustment point: %d out of range" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2260 -#, c-format -msgid "KBD104 遥调失败!RtuNo:%d 找不到遥调点" -msgstr "KBD104 Remote adjustment failed! RtuNo:%d cannot find remote adjustment point" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2301 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:343 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1538 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:475 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2248 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:428 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2069 -#, c-format -msgid "遥控成功!RtuNo:%d 遥控点:%d" -msgstr "Remote control success! RtuNo:%d Remote control point: %d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2335 -#, c-format -msgid "遥调成功!RtuNo:%d 遥控点:%d" -msgstr "Remote adjustment success! RtuNo:%d Remote control point: %d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:2342 -#, c-format -msgid "遥调失败!RtuNo:%d 遥控点:%d" -msgstr "Remote adjustment failed! RtuNo:%d Remote control point: %d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3097 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3083 -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:460 -#, c-format -msgid "HMI命令解析失败,不下发控制命令!RtuNo:%d " -msgstr "Failed to parse HMI command,no send control command down! RtuNo:%d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3268 -#: protocol/kbd104/KBD104DataProcThread.cpp:3353 -#: protocol/kbd104/KBD104DataProcThread.cpp:3445 -#: protocol/kbd104/KBD104DataProcThread.cpp:3536 -#: protocol/kbd104/KBD104DataProcThread.cpp:3615 -#, c-format -msgid "RtuNo:%d %s" -msgstr "RtuNo:%d %s" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3273 -#, c-format -msgid "KBD104 定值读取失败!RtuNo:%d" -msgstr "KBD104 Read const failed! RtuNo:%d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3358 -#, c-format -msgid "KBD104 定值读取成功!RtuNo:%d" -msgstr "KBD104 Read const success! RtuNo:%d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3450 -#, c-format -msgid "KBD104 定值修改失败!RtuNo:%d" -msgstr "KBD104 Modify const failed! RtuNo:%d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3541 -#, c-format -msgid "KBD104 定值修改成功!RtuNo:%d" -msgstr "KBD104 Modify const success! RtuNo:%d" - -#: protocol/kbd104/KBD104DataProcThread.cpp:3620 -#, c-format -msgid "KBD104 确认修改定值!RtuNo:%d rtuStatus:%d" -msgstr "KBD104 Confirm to modify the const! RtuNo:%d rtuStatus:%d" - -#: protocol/kbd61850m/IEC61850_DecodeResPkt.cpp:1079 -msgid "写值不成功!" -msgstr "Write value failure!" - -#: protocol/kbd61850m/IEC61850_DecodeResPkt.cpp:1122 -msgid "写值成功!" -msgstr "Write value success!" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:402 -#, c-format -msgid "建立双边关联失败%s" -msgstr "Failed to establish bilateral connection%s" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1304 -#, c-format -msgid "Ping %s...成功\n" -msgstr "Ping %s...successful\n" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1314 -#, c-format -msgid "Ping %s失败,下次重试\n" -msgstr "Ping %s failed,try again next time\n" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1434 -#, c-format -msgid "connect %s...成功!" -msgstr "connect %s...successful!" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1443 -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1457 -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1471 -#, c-format -msgid "connect %s...失败!" -msgstr "connect %s...failed!" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1498 -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1535 -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1569 -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1584 -msgid "建立传输层连接失败!" -msgstr "Failed to establish transport layer connection!" - -#: protocol/kbd61850m/IEC61850_FormReqCmd.cpp:1560 -msgid "建立传输层连接成功!" -msgstr "Establish transport layer connection successfully!" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:277 -#, c-format -msgid "收到总召KWH成功 %s" -msgstr "Received total call KWH success %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:299 -#, c-format -msgid "长时间没有召完树,通道:%d 退出" -msgstr "Long time not call tree finish,channel: %d exit" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:312 -#, c-format -msgid "通讯中断[%d%]" -msgstr "Communication Interrupt[%d%]" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:337 -#, c-format -msgid "server个数%d,已连接%d,本通道%s.. %s %s NoUpdateTime=%d" -msgstr "server number %d,connected %d,this channel %s.. %s %s NoUpdateTime=%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:344 -#, c-format -msgid "通道%s 通信中断,断开连接,重新建立连接" -msgstr "Channel %s communication interrupt, disconnect, reconnect" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:359 -#, c-format -msgid "通道%s 接收超时,断开连接,重新建立连接" -msgstr "Channel %s receive timeout, disconnect, reconnect" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:503 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3773 -#, c-format -msgid "报告非使能%s:%s" -msgstr "Report no enable%s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:539 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3809 -#, c-format -msgid "设置总召时间%s:%ld毫秒,%s" -msgstr "Set total call time%s:%ldms,%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:551 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3820 -#, c-format -msgid "报告使能%s:%s" -msgstr "Report enable%s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:596 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:618 -#, c-format -msgid "设置TrgOp%s:%s" -msgstr "Set TrgOp%s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:656 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:682 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:707 -#, c-format -msgid "设置OptFlds%s:%s" -msgstr "Set OptFlds%s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:734 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:745 -#, c-format -msgid "读取EntryID%s:%s" -msgstr "Read EntryID%s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:753 -#, c-format -msgid "设置EntryID%s:%s" -msgstr "Set EntryID%s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:788 -msgid "PING 套接字错误" -msgstr "PING socket error" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:798 -msgid "连接服务器 开" -msgstr "Connect to server open" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:804 -#, c-format -msgid "连接服务器%s,%s,返回%d" -msgstr "Connect to server %s , %s,return %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:821 -msgid "网络不通,退出服务器" -msgstr "No network, log out of server" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:830 -msgid "网络可能断开" -msgstr "Network may be disconnected" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:849 -msgid "网络不通" -msgstr "No network" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:873 -#, c-format -msgid " 通道%d,ExitServer() ret:%d" -msgstr "Channel %d,ExitServer() ret:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:1440 -#, c-format -msgid "没有找到RTU名 %s" -msgstr "Cannot find RTU name %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:1451 -#, c-format -msgid "通道%d,RTU%d 没有配置数据集合:%s" -msgstr "Channel %d,RTU %d no dataset configure : %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:1470 -msgid "上传数据路径为空" -msgstr "The upload data path is empty" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2071 -#, c-format -msgid "总召数据集%s:%s" -msgstr "Total call dataset %s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2128 -#, c-format -msgid "录波:命令[读目录]%s[返回%d]" -msgstr "Wave recording:command[Read Directory]%s[Return %d]" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2192 -#, c-format -msgid "录波:状态[目录]%s,文件个数%d" -msgstr "Wave recording:status[Directory]%s,number of file %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2251 -#, c-format -msgid "录波:命令[下载]%d,文件名%s" -msgstr "Wave recording:command[Download]%d,file name %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2271 -#, c-format -msgid "录波:所有的文件已经下载完成。错误个数%d" -msgstr "Wave recording:all files have been downloaded. Error number %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2321 -#, c-format -msgid "录波:状态[下载]%s,文件名%s" -msgstr "Wave recording:status[Download]%s,file name %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2377 -#, c-format -msgid "录波:新增%s" -msgstr "Wave recording:new %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2468 -#, c-format -msgid "通道所有发送后数据后%ds没有收到数据,退出服务器" -msgstr "After send all data in channel,no data received within %ds,log out of server" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2511 -msgid "通信没有建立遥控失败" -msgstr "Communication not established,remote control failed" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2537 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2551 -msgid "选择成功" -msgstr "Selection success" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2542 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2556 -#, c-format -msgid "选择命令成功 %s 值%d" -msgstr "Selection command success %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2570 -#, c-format -msgid "下发YK 选择命令成功 %s 值%d" -msgstr "Successful in send YK selection command %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2574 -#, c-format -msgid "下发YK 选择命令失败 %s 值%d" -msgstr "Failed to send YK selection command %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2594 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2736 -msgid "找不到遥控点遥控失败!" -msgstr "Cannot find remote control point,remote control failed!" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2595 -#, c-format -msgid "修改定值组号%s 找不到遥控点遥控失败,RTU:%d,YK:%d cmd:%d" -msgstr "Modify the const group number %s ,cannot find remote control point,remote control failed,RTU:%d,YK:%d cmd:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2608 -#, c-format -msgid "修改定值组号%s:%s %s" -msgstr "Modify the const group number %s:%s %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2615 -msgid "修改定值组号失败!...1" -msgstr "Failed to modify the const group number!...1" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2616 -#, c-format -msgid "修改定值组号%s 失败..1,RTU:%d,YK:%d groupno:%d" -msgstr "Failed to modify the const group number %s..1,RTU:%d,YK:%d groupno:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2626 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3118 -#, c-format -msgid "确认激活定值组%s:%s %s" -msgstr "Confirm to active the const group %s:%s %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2634 -msgid "修改定值组号失败!...2" -msgstr "Failed to modify the const group number!...2" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2635 -#, c-format -msgid "修改定值组号%s 失败...2,RTU:%d,YK:%d groupno:%d" -msgstr "Failed to modify the const group number %s...2,RTU:%d,YK:%d groupno:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2647 -msgid "修改定值组号成功!" -msgstr "Modify const group number successfully!" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2648 -#, c-format -msgid "修改定值组号%s 成功...2,RTU:%d,YK:%d groupno:%d" -msgstr "Modify const group number %s successfully...2,RTU:%d,YK:%d groupno:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2668 -#, c-format -msgid "下发YK 执行命令成功 %s 值%d" -msgstr "Successful in send YK execution command %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2672 -#, c-format -msgid "下发YK 执行命令失败 %s 值%d" -msgstr "Failed to send YK execution command %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2682 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2695 -msgid "撤销成功" -msgstr "Revocation success" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2687 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2700 -#, c-format -msgid "撤销成功 %s 值%d" -msgstr "Revocation success %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2713 -#, c-format -msgid "下发YK 撤销命令成功 %s 值%d" -msgstr "Successful in send YK revocation command %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2717 -#, c-format -msgid "下发YK 撤销命令失败 %s 值%d" -msgstr "Failed to send YK revocation command %s value %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2738 -#, c-format -msgid "找不到遥控点遥控失败,RTU:%d,YK:%d cmd:%d" -msgstr "Cannot find remote control point,remote control failed,RTU:%d,YK:%d cmd:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2776 -#, c-format -msgid "遥控返回 retCmd.CtrlDir=%d RtuNo=%d PointID=%d" -msgstr "Return of remote control retCmd.CtrlDir=%d RtuNo=%d PointID=%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2783 -msgid "设备返回撤销成功" -msgstr "Device return revocation success" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2784 -#, c-format -msgid "设备返回撤销成功!RtuNo:%d 遥控点:%d" -msgstr "Device return revocation success! RtuNo:%d Remote control point: %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2789 -msgid "设备返回撤销失败" -msgstr "Device return revocation failed" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2790 -#, c-format -msgid "设备返回撤销失败!RtuNo:%d 遥控点:%d" -msgstr "Device return revocation failed! RtuNo:%d Remote control point: %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2809 -msgid "设备返回执行成功" -msgstr "Device return execution success" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2810 -#, c-format -msgid "设备返回执行成功!RtuNo:%d 遥控点:%d" -msgstr "Device return execution success! RtuNo:%d Remote control point: %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2815 -msgid "设备返回执行失败" -msgstr "Device return execution failed" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2816 -#, c-format -msgid "设备返回执行失败!RtuNo:%d 遥控点:%d" -msgstr "Device return execution failed! RtuNo:%d Remote control point: %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2834 -msgid "设备返回选择成功" -msgstr "Device return selection success" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2835 -#, c-format -msgid "设备返回选择成功!RtuNo:%d 遥控点:%d" -msgstr "Device return selection success! RtuNo:%d Remote control point: %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2840 -msgid "设备返回选择失败" -msgstr "Device return selection failed" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2841 -#, c-format -msgid "设备返回选择失败!RtuNo:%d 遥控点:%d" -msgstr "Device return selection failed! RtuNo:%d Remote control point: %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2902 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2905 -#, c-format -msgid "KBD61850 定值控制失败!RtuNo:%d 找不到对应的DS" -msgstr "KBD61850 Const control failed! RtuNo:%d cannot find the corresponding DS" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2922 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2925 -#, c-format -msgid "KBD61850 定值控制失败!RtuNo:%d 通信中断" -msgstr "KBD61850 Const control failed! RtuNo:%d communication interrupt" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2943 -#, c-format -msgid "控制参数不正确,定值控制失败!RtuNo:%d " -msgstr "Incorrect control parameters,const control failed! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:2946 -#, c-format -msgid "控制参数不正确,定值控制失败!RtuNo:%d" -msgstr "Incorrect control parameters,const control failed! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3084 -#, c-format -msgid "HMI命令解析失败,不下发控制命令!RtuNo:%d" -msgstr "Failed to parse HMI command,no send control command down! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3098 -#, c-format -msgid "修改定值组%s:%s %s" -msgstr "Modify the const %s:%s %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3112 -msgid "修改定值组失败" -msgstr "Modify the const failed" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3133 -msgid "确认激活定值组失败" -msgstr "Confirm to active the const group failed" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3148 -msgid "激活定值组成功" -msgstr "Active the const group successfully" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3277 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3551 -#, c-format -msgid "KBD61850 定值读取成功!RtuNo:%d" -msgstr "KBD61850 Read const success! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3278 -#, c-format -msgid "KBD61850 定值读取成功!RtuNo:%d Num=%d" -msgstr "KBD61850 Read const success! RtuNo:%d Num=%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3287 -#, c-format -msgid "读定值%s:%s" -msgstr "Read const %s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3302 -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3306 -#, c-format -msgid "开始写定值 组号%s:%s %s" -msgstr "Start writing const,group number %s:%s %s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3326 -#, c-format -msgid "定值写值错误:定值%d" -msgstr "Error writing const: const %d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3341 -#, c-format -msgid "改变定值%s(%s):%s" -msgstr "Change the const %s(%s):%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3347 -#, c-format -msgid "修改定值%s:%s" -msgstr "Modify the const %s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3384 -#, c-format -msgid "确认改变定值%s:%s" -msgstr "Confirm to change the const %s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3388 -#, c-format -msgid "确认修改定值%s:%s" -msgstr "Confirm to modify the const %s:%s" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3463 -msgid "定值操作错误:不能找到定值" -msgstr "Const operation error:cannot find const" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3608 -#, c-format -msgid "定值修改成功! RtuNo:%d" -msgstr "Modify const success! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3614 -#, c-format -msgid "定值修改失败!RtuNo:%d" -msgstr "Modify const failed! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3669 -#, c-format -msgid "激活定值修改成功! RtuNo:%d" -msgstr "Active the const modification success! RtuNo:%d" - -#: protocol/kbd61850m/KBD61850mDataProcThread.cpp:3675 -#, c-format -msgid "激活定值修改失败!RtuNo:%d" -msgstr "Active the const modification failed! RtuNo:%d" - -#: protocol/kbd61850m/KBD_DLL.cpp:47 -#, c-format -msgid "AbortCallback() %s异常中止,退出服务器" -msgstr "AbortCallback() %s abort, log out of sever" - -#: protocol/kbd61850m/KBD_DLL.cpp:64 protocol/kbd61850m/KBD_DLL.cpp:127 -#: protocol/kbd61850m/KBD_DLL.cpp:191 protocol/kbd61850m/KBD_DLL.cpp:228 -#, c-format -msgid "没有找到服务器名 %s" -msgstr "Not found the name of server %s" - -#: protocol/kbd61850m/KBD_DLL.cpp:132 -#, c-format -msgid "通道%d,YK返回:%s,%d,%d,%d,%d,%d" -msgstr "Channel %d, YK return:%s,%d,%d,%d,%d,%d" - -#: protocol/kbd61850m/KBD_DLL.cpp:196 -#, c-format -msgid "通道%d,定值 %s返回:%s" -msgstr "Channel %d, const %s return : %s" - -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:379 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:511 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:459 -#, c-format -msgid "遥控失败!RtuNo:%d 找不到遥控点:%d" -msgstr "Remote control failed! RtuNo:%d cannot find remote control point:%d" - -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1599 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2311 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2116 -#, c-format -msgid "混合量输出失败!RtuNo:%d 混合量输出点:%d" -msgstr "The output of mix is failed! RtuNo:%d Mix output point: %d" - -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1622 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2334 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:1307 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2132 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:1036 -#, c-format -msgid "自定义命令输出成功!RtuNo:%d " -msgstr "The custom command output was successful! RtuNo:%d" - -#: protocol/modbus_rtu/ModbusRtuDataProcThread.cpp:1627 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2339 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:2468 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:838 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:875 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:905 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:1395 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2138 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:2253 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:568 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:651 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:755 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:1050 -#: protocol/modbus_tcp_pis/ModbusPisDataProcThread.cpp:1163 -#, c-format -msgid "自定义命令输出失败!RtuNo:%d " -msgstr "The custom command output was failed! RtuNo:%d" - -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:564 -#, c-format -msgid "遥调失败!RtuNo:%d 遥调点:%d 量程越限" -msgstr "Remote adjustment failed! RtuNo:%d Remote adjustment point:%d out of limit" - -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:570 -msgid "遥调失败,量程配置错误,最大量程<=最小量程!" -msgstr "Remote adjustment failed! Range configuration error, maximum range <= minimum range!" - -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:577 -#, c-format -msgid "遥调失败!RtuNo:%d 遥调点:%d 系数为0" -msgstr "Remote adjustment failed! RtuNo:%d Remote adjustment point:%d Coefficient is 0" - -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:662 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:523 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:589 -#, c-format -msgid "遥调失败!RtuNo:%d 找不到遥调点:%d" -msgstr "Remote adjustment failed! RtuNo:%d cannot find remote adjustment point: %d" - -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:726 -#: protocol/modbus_tcp/ModbusDataProcThread.cpp:791 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:644 -#: protocol/modbus_tcp_bas/BasModbusDataProcThread.cpp:703 -#, c-format -msgid "混合量输出失败!RtuNo:%d 找不到混合量输出点:%d" -msgstr "The output of mix is failed! RtuNo:%d cannot find mix output point: %d" - -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1007 -#, c-format -msgid "SIEMENS103 遥控失败!RtuNo:%d 通信中断" -msgstr "SIEMENS103 Remote control failed! RtuNo:%d communication interrupt" - -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1064 -#, c-format -msgid "SIEMENS103 遥控失败!RtuNo:%d 找不到遥控点:%d" -msgstr "SIEMENS103 Remote control failed! RtuNo:%d cannot find remote control point: %d" - -#: protocol/siemens103_tcp/SIEMENS103DataProcThread.cpp:1098 -#, c-format -msgid "SIEMENS103 遥控成功!RtuNo:%d 遥控点:%d" -msgstr "SIEMENS103 Remote control success! RtuNo:%d Remote control point: %d" diff --git a/product/common/resource/en/gui/translate/icon_en.ts b/product/common/resource/en/gui/translate/icon_en.ts deleted file mode 100644 index da93a484..00000000 --- a/product/common/resource/en/gui/translate/icon_en.ts +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/product/common/resource/en/gui/translate/plugin_en.qm b/product/common/resource/en/gui/translate/plugin_en.qm deleted file mode 100644 index 122d1f62ac945f7e5841f59d4644bbbf2084bc14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147848 zcmdq~2Yi&p_CJo#Y?4iOv)KniF;YYCy(7{^R63}rpac>i3IUQJVg&)|1QbM&UIdjQ zg7j{`iqh;#(d;Hc0YU5_zxSE5`#jI?KD!Bi?*0B>um9zBeJ7ipGwsZo(`Kg4&eWv; zTwJo?NTqTI2CdxpT}L6BPZL7a6Qb24j1SFX9Ct*ayt)_IP>A^AjJKsSzPDVVExIYN z5&qs9*cdnj_@t1R_W++3vgb7+qB?;79AF>dcE)kP0P)>crx+ir0GuRj(f0xm3VHH5 zA)-GKGJmcRv5$dXJ0R$t%ND}*K7P*=qGm%OmwqHfgL*>FZiQyJ@p-%ucjTg6b0NA{ z0PYato>zo;eYQfm5&gjL@-v$d_u_j6nL^x0xLAn$2@eY~ZnuyZ?hyiQlILC);>U_Y z{!&ti^E4JM8JCu0TwY$G?BM{SueCP`aRK#dRTzIwQ7Fr9VSMWW#^betJB3I_dw{Y9 z+IjIVA?kJl<_UT6J|TWabu~`{qlBo1dVfY8wT1$V3E2s4`MIQ!9aaKM2~lY>AKQ9B$0=_TA-**Xlbr7&SaE_2~CJW(MBy3d9c2Pusj=6Q7Wo&Ub zV{1F(ZOsU!d1v?1f|TNwKtW*jrXhaSePpBXp&!1!(yo0vLYP<(t zJN1XCed!PwY^7^_8tjC4?ewJwa zMK65stZ3(cLx`70iguNbg8p>TZs39Jkv~c zD*z9^K3JjLu$S@V>!SO#Lqb;SB6^CoLQMKf^nCsqAwNzQz3o!Si4ThVTiuN{TteKR z4Y^TaGq5r6YhV*0D#if8e-#^wL5?#*T#Xe&@9r;T?~lZYmKe7#qZpT-W_R`kf3mj_JCha4uYVUGzXBHrx#f2@|LfrB@XffuJbn3^E%^zzZp{|DU{c~la)Joh1lO)R^E(xythEstndxCrjoMO ztwPAN|Hy_D_Y2vjjBI!S^6%phWTWPopTAnjMt>X=V%9l@ve);r@xCoWRIAAN&sK#p zx+`Oe8jMdaWz19C#{z4M)!mqx?A4X2>m$NMt0piN{Gy63gwD2@~-(Sg`9Lv z_V}*15OtQw9$w6Imz^^6H0s+{S&prPd0tjdJ~Q(Q*1t#2{t#H{pEr?Q-tXD0ppOya`|!4-M&%o{Xk;xY9jYMCoq0GP+sc}`t4>g-uErzC%fde z{hNiXT3cS9vtGzYr^@R&j|$nqYm;LjFJ`x~*{U`ZV(4nd{a@Q`Ganb?Oe=`k-jE+> zZP8z!6}GqsY_X%TzMJPUcD~5?P*29edl}y=#(4Z3<7X3XaWQ9w+?#ESOI!d|rIpRG z9ikQHW^+70NrtGJfc^HJ-Of$lvpAO-gKX>#WPrcn>*TCmH!huPloN5%fm3w zXKn2^v=(x1Ut5O`EikUhw%eY^c%|psZog@z5I?+QyW*Tp^wu7BJ2vKa0?QrZA?Ej~1@1E)cJ>z!Ud*{J7W9Qk95Bfn}#?C_+-<{0(O@D>5?iR*&GZ^om%Q)yXZ47ZCyf+?ih8;>Z(G%@?KP%xer6HjgD%2g6O>x)o!FFWNQ)CzHdI( z@9L;7pH&j#+QU)ZD))vyFfpn}6?{H8CaPB_;JQzv?*8;0Ayz#XbRr3*=IrsPXkL2~mHULfPjh z#sN;o?=D77dhajjXP2XvJO%yqu{)xcwU9!@or~IVwKvA$8nBO$KeYn(1&#&w18xD{ z4LlFLN67QFqW0Z}@4ur(eNY9u>FzdBAGQ2d$eWrmj+q(t<&Wot{5vJ;Ti5MErj?G$ zo17}-L$^lduWSi@@T;hTDhIHCHj64~hjmr{Y}AFH>kIipqo_ZgS_8eJGGopVh4QYJ zQGbqYBxL2cqW(_Ce05wI9rZNUd)|Z5G2!Vkf|F z*_EOb>tY_OA5|#ruQQfRWxS_-bcu#BLKfQ;T@rFwW^axzsbN0TCr6i@S{3s3$LP{k zE(&q|TZPgdAAQp(7wAn?C`DaH`~8e1OE5n5JmcIo(Mdxf*T3%>U8Zkm$cb^$Wgo=& z)GQla?k(`c`mWIxuA!b4&ghCSV7;zA5}iB<`^EQvD3mMaMOPIC`2O3`)#ffoz4aOM za~Ur@#d!TWg)(M4V~PEYPqk*8E2FDl`y2X5>FC<-qe3>W7F}-z=BHCsbmL0z3Q@UF zbh9Qag?!_1bhAT;g?QuD=vF1L55&A3-D=EuA=+$+ZoR#dkQI+b-y&v%-%Cfg`4KkA zjs?+ed*bt%Nzv^xo)PlaYSFhf{y<1)r|8@JPk>FiH@fGKXN8lY(L!FkJ$iYC z6d~(fi{5lPS;$%^qBl>vSKxn)LvLl=HI#ABn+j#uQj9%kF+T7hl;-#MbtCI?0D zUs6uU+wO@znfyEK&63fl-+W%k`F};{j>h4Y+WGa@Pw7EuMc8Yw@4M@vy(BqI-$P$lVaZAo{n{LHs)j^$*XNKUp)JT5H+4; zELg>Ov6Dh6zGaNPkFiuD?!LR;KN_F8S>(|P4{#@q~hy%9fyFMhVyZ(JRG zmTYhSkyFS&-?q0|N%c;(cbV}t>{*Zf9=Q_o=@|Y*y9`pUF{nY9j*q1+G zY(Izbf#Hk~ZDBlAk@4s$#*-!OXG&n4{ycC0;gv%|{Qj2RdvY7>hlTbFt6qe@R>yvM z&Rpzkr|eg@V*b}V8TT(!D4%oLe}5a}UH?ADj^`QQPGJ1vutHh&O~%%Z81E5`g9b2u zJd5$WR~bD^?0>khztk-iD@RQiBH<`wmvxLY-eX)jD%M^c`}{peW3^6gh5Yr;*u+%$ zq5i27TdM8?AznMc=&c=F<~rp4>T?Y;k>*e`o72Hy{jJyQkq z`1>QVd6g0&$8L`OY0Mo$*v>H~eiVEDuVj4h)z}NEp9}GLo7msFZ5Co)li0sHYtU1V zFn$~rdvzD;^}ZA*HcS(8j4Li`LVqEqeyLD)y&M;F2gdiMl5vhtGq4X&k1M(SAtBCw z7gymS=!s`n#8o){su1%Xamk&h3t6^eT-DdHo;KebS8MV~_&vXktCu+w>%O%@+2h$b zo`*q#jLpDi!KTI$cnfpeuCVZR4i`CDd>?GYQ!CB_n?pqzKr|4IL7DW9&w+q_*BS` zR>gf$V~mgqZ^wP{B=mwkJ>$MzcoF)<3dZ;6#eMfK=3&InxU&b~SZLTT?)x#2|4$Ey z%dcdIKK-pidHzh?j}2cEBI|L5a%E23l{YaCH9k}*WnISD^^B!b81Gxk`1H?=&##aB z^%VGF{#|jujm0{9YGvH-#W8-r&yV}P-9gv|XX5_64ScvEBko#n%x|Z3#*{0J@5VA7 zFU$B@M}_jAthj65-LOM{jl16eVes*Khp2#kaPN7CsPdVR&9WRa^C?dln*0MfKlUw0>zOmKpKo<^YEVqbPY*h7D|S|heor}W`*=!k63fT@#S2|!#k@vPF;Hv_Vmw=)60Lxy2^6=khM^V+mjgw z|LVwnW3-TRpTk>!nUL)dIDYK2LdY`TIDVW3`%3%BalYEuh&POI{Ja?LIaSA_GZ~vFGH(2mar*_vW6c>q%W?ev3D)7h_Z@%KhyK)j z0OPSI6x!@JJN|h3Lji&36yhB0^q-uf*neOj40fvd-&f1Y^Z%MN=I*6JHXY!M{dofX zEq^&3*uP}+HO}~9>#z^Bb-Kv@tJzhdl;appTFpI9UTNe(>kYn zyc7H25T`ci82p|NXW91Gg-jmHc*wIn^bYuK>J1edl?V5aMpYQ`}z36&YD|pL4Ef! z7O(BBdjXZV@1zjTau_@O$T%p|*=SP@__gOcn{B)qfA7RNAdPWQ zO@(r24QGon+l4&P#@YJNY3LynoZXJW{@eMmvwM{^A>XURcu<4 z!+2^77|Xrm>|JLf`0TnftuOlV`gZ4k+~EHuO`M-R1HEj9aDI9i{PJlT=cn(0PiJ&= zo~Qsmx@)oXL=O0I#xsnYKV2OrIJ{?WLWkf)w^Ufnnx zdYR_DdMXKW*zLT&e5a7EeeqFnFACWsK6ce0@N4n-xPeE79QQ8ciBj>-z9_f0YJ7a< z6d`gq#A~071e<%}6Zb-1{_SPl&HDYpf8H=f+pqi2kf<9iM!$JK~2|;w$yIfc|WYuk^}U z?BB1(*Sc^-$d~KK*VA&bUuDKO6yIZSu{h;LfI z9@;q|zQq?ig?P{rf9spj>snNZzhlrNDAzXr!G`E(&5`jBSN;ZNDpa#cSAyzG2+Bobj`}U9lG~332dq#-lwLPt0(|_d@$WD(iAlzbbTe zX`9bNp3ig@yZk=`3gtFi_; zelWvTeJ=FI4x?PPF0X-qt107S&nc8$?_zvlG2_POu7>T(V!RhJo;d1ia!+j`HnvtM zH=lJiKQ>i}i{CK*GC-kxd>P|2x4K&N7$s!O4XzgZG+<{}%ez_&vHBavGusu)je}in z%VXc0@Vl$+$hkuNdeL=z4*GFwlIxCdr4YsYy6(8L2Jz{du5P#Cdl@HP{hx>bI3~yS zKxy#jn~%DNcrpLeF1yn6#z6m^<;q^TR*2iSFwT6D@x4O|rQyZQ%a%y;w9J0Eh&hx zS9Yy`?JVrN-xS)M!nLKwJouMiaBbDjz)$v)Ywu9B|36n;pZ;|aagiaeqs?oho?fow zy?Y6nGLG?+Z(X1NIRtX?qU(#c&;w%Ju5U+Hf`6-_>$^vw7d`Q!>y#7YljU*cUI71n zu*P+*c&rc|Cb_OPfqx+CSJ$vCOtbG{Hw)-gU`hVj*dj62RSdd4Q$ zil2dAT_M3%3HaNw1ltnqKYvY3h-wN!m2)b=e&;a6{a#3j-M?Ij=|dFCJ2x_Z_)~)8 zJ@n_wr3CjK^?-h+FF?G(7qd^wtj*%9RNTjUU4NY+0z#CKo5PY+DZYQM5vvZBRnX`5U2MB_*^v zjqy7^FyWTiZSZqGs8F6vN@({W`dRk-gbrsRZ^}KD(CO3ODBn7vORb5BFW3_9Z2uzc z*K>@w{mA%!Mnbo5{zAO@#e}}sdk9(OY{Ek=9nd%85{ANGBB~Bbm>gY3hyyzkX8+bm z$nNtK=A1u}m2hS=_Mr!#Nyx3e8T#spguJ^?A|5h1;au?#@p%=-lw`&u zegH++#P!p^n$ztZpU4i?dUH?oo>{HLW>;K_F z9!>*yqq^X;Nz2_$=0HB)H=FU3hutkQDj|;Zr@O@{jDPDf?iMe!gnm%c-Rg%Yg}C{= zyKUPH*jZ1wJCwpawLa$V*ckKu;vDzwb>q;!IL7IZx(A&Azt$^o5B?bZ^WY+PD&-w~ znB*RIQwJfk=eg6{%tPFJgZr^l$As|gaUZM?ef-EM_rZP*VF#9WA1%E_$b~Pvk5yU$ zd0*UpqUv|>lb>;)m;^aFa-aKTpZ9?OxIaGv{@PK={l#*M?~HYS)oCL9bW7deY{^92 z>nHcAXS%{Ze8qjbJ?1rPxBJYP=|Z?~W^DfnW0wNPnQ@FeuQDEbNTEFZ9OGwS1F>(9 zeur@l(ZTOqyo{d@P$+l&<33vjexutTV0<8t@q^lozt&SI$0fVZ_UZz^PG!b}QlY$7 z)_t}Q_Mh8lxX(U>ex!cuK7058*3&Ha*}P5Q%U|5z|I!rwxRNE!=tS2O^%_OQB2~?#}Bl7IN`(#yJDr`KV4z+sn9UtwMRn3C0fxx$|>!usvHKs4LzXi>lF4|W6XW553T09TV@EsV?PnP8)EFQ5 zgmLoYj7xl{_q_|~nAOS-v#!m<);YcYOb#(lA|MBK8!`|`4` zu=9U&|59NB^qnaRWkNs3HbWU_^k96WCgT^!82>5h{-siTA(Q@QJpD4`rMisQkGp@# zf&9pP%l*ryC$OI9xUUReB4o}u_pcpc7rb#ld7QDq7mT-VW$ZhWG4(KGRvE^e*BO_NXI$%}vvCjqzSZ~l zx3BW=N8F5GKF9d&WybFhG5$JBp)Ak!$r^%xZ_t3T(NBzRUS#Yvh4HRQjD5Kt+5Z*( zeE_##4*QdTpHhW!#`RKfl@y7Vc<9!&vl8mQ6 zW%Qg81Ed% zc=r&-5BIyTjmADvZNB^3fqxKJf7gBO&|o1tHf22gqWhnDkn_c|+}8)y2j6GAuW!5x zIda5({n{nSt)-gieI0p`A82CGP0$ycY2xD3unSKE3m|7d)Kq@rRD2J4in8lYP5g2@ z;>vGpvI6X=$(uDf3BQ+#(d6@W5I;(1Ji1YntLXQa8IOLc$pf&T9$uo!i~FIcxf!#% zGk#Y`p*%iCvn4}6T3w%UOMk}GS2bJvhfwZC%{H+o^7jU5Q3)F`js=YKUecoa#vzYj z4zMcXI9nN;4`b}qlyP8N#+1X1?=)jP=4Je>7-PZjjOTA*ytst%m#PY7zlMyNe>1*S zi*e^V#&5pTq9#CoOdY6Db{(%ptr#lAd-(oV8n4^6=tQjdsG3^zipSC4bS?TA_~(#A zv-iM0(&-Z8^z8~|w*ibj-ex?qP_w`NH1cyEV662sW3yPs2VP}-=mO(oZ!xZ3#kl($ z#$y#2PxfZ~{AR{8PcY^+Wz6rw_|rJX^ItGt?x#?W-^ci5HO6lq)M86Kgt$OIEp{IK zePy>WR>)+0WjSMRGsfR)DU>Te)?zp9M7~>+7Q5v--t92}0g z(-y{x3mI$IVSN23#y#g4_oXp@J6WL|JcM!0uZ-LGFdmClXp5PvInL0!`&@Ijhu?AR zRL$Axc_B(HW~^L>vF#ehtT!2-sLnXo_x+_C`1g&!FmB6HC~wVW>^F#UePhNqJ2HM9 z&FD?koNqT3a{YSE`RSj~qgHA0^`Q@HFKF=-VVAYc*Wz=$$Xju0@f&{?V$M{BvRoqL zfe#peZJ@<(sx3tFc*Y(}7>AB#oU@y8-+ac8jw_V$Js8W~$=Ip_W1pRj)8An{Xk+|! zgyxc8!Cx{)(?+#`|79lQ`B98Nw`Tn19j(~vO!zxq))MESKMNnyN}O6JWTTRdcYne- z^drVs+A+R*k5=;H-|+7MFZ}^O$uC-|;?VEAjMqw4Oobk{Q!CX6>oaQx=`_aQB*63X9xvzF8uan7`4IN8yy{x=+f#%r z{x#!EZL~@q??j$eGsYu7Fn%Qz%C^5TKHQmc&t%5KhZw(Z#rQ`9tx_lG{hR7&mG0;u zWcBB?$~Ls8S#zyQT#AslOwp<=YY+d>K*qVd70S-F7`xSF>^Glr;Bdx0eYNTnuwFZ# z(P~jXQr$6H-3;W>zuH5qI~xAW_RY0=%O8QCKa26)dyMB-GyXiD@t3O#W!6~6$Nyw} z<~zm@MridmKtJ15S*t$@ew0s-E0l?D#`ga(9`3>T&JwL*-z`Gi`>xh>4D2ASJmZT6 zTC-%>qd)d!yyVoHkzepqcg8DC70M@kIH8o*yx$na{Vp(eFUR=MO2$J|wB|zwg8qGs z3#(}@eyE5z*xy>q9*f~0{gUzCD~t~gWPE~A?zyafm;388UeDB8RV2C6Mr)M}z5C}3 zt##k#h~s{&wSF7xXykKR>rc_%xSEVjMl-%TQ=#nfC*#+Lwbm!F-}SG-II^#HOJl6t z`oAz^bBizOA*{(h>Z(jd5iwg>v7!+O0WLk@u6Nwd(=-Fs*~usp>f7>Ab@@ z)U8k!&t!bbsdd_laT-07aoW>bms&8F5~gXl_x>6AQT?>8gZsh1ScmccON{RgW&Cs{ z<4-LaFBexRi?3mPVh-cX%UaiY?+N)q1;$J7Xm>Q|fqIW=-3q|R)oW?JuDTH)?4b3j z&x;GRmD>uD{bb4Piv>{g#Pr$tJ>)yEs-B~LOWB? z8u9w>+S$Dq5#Kwj{m^0;;+}VE-s86;9?(n6TR2b1O0Q`J+94sgjn&Rgvf~`WL)y8$ zDMI`)K>KOg1mw4F(Jr344Et)B_Vag_;6FXjnB7F7T$-l++VC{wOl8Ir#~HVMpiutf z(SFUsdRo0$`}K4g%-3AT`|s6$pASFhz2z7m9nSdHF%7*yo=r*ZFZ%xLpQmF|Pe);? zxI|}>E>gq@F-i=J!v_NG752{QDI-P=i^Y${JEW%e9Q<&H5hdoZ=o;YOF}p zOGSAm?2S-lkm!XXnfU)m(OUEq!$q1%7Nhmg(nK~s$;4+P@Y!JeJOV$DfQq7a|targ1t*bT4TRfS6_O6(kw{d^&&e{2s z_T}!}o%ibQN)ejs5}j04L#PotS-U6aMep`$5z3WOVN@Zg>je&Ha z!=8-`3#R5oC|oA6Fd9zm@fiNwT5m!zosjp%soo_UT1TLlgt-|jvQU1M8V2HdV#kp> zHO>3t8=h6m^!bTEY>DUrGR%=Q-D4Fo-&BWAzNiZx#h9bQEc}0%hlW~$G! zeJg^v+=}LClu1V^;{71zQlF%Q4t3912Q9n{SLnSlbKAwev+_6Z@JyLjFlBb$zD@im za3u3$q?Iw;*YQ-Qnx}o(EyzYn&!IZ#s~c^QseESJ1TfgpKynF z+2Y)t`y=zA3yUX1O^I1TI=t&wdS@<=T-1)DsUlUc&+gr^$1`I^1ire5OQ`uwL0gGu zQbi>UFUide%x{VzQt+*Ge8Q5DIAa)o=GD#R=r8pBNAwmXa|=9cw&ZVHTgkg|wP(qC z&&$iadlu*Jp6Qvf^63a|E3LOJ3p_gn|I$!5UEE^A<;&m{Uj3p zWnCLq7O^hU6KE4kr)k&6$)3Myzh}+V2oslx%_|)fN0K5LZ5=Hd>7`xy+h^qNoKdi7 zZe+!wWB?7)RK|r+nOP{6R9)p@3Vv0?Xx&J(j|8Y+wV*`=2FLFtnrZp*Pb9#pCtzXB zBdIHX8iwetruybS^S zGGa)tl+2WVDT7C(bsv?QHbNx3bZdaFf*IDUCA^IxK6oP?mpVK8Zh_e?U~FBs8rOnNBd=_nfe?j zx`4WQn~&}?Dsv>2(9~FUPsvCbmPVhcF|vte={GxT;X5zrPF?>rj;bAMC5#hQjt$;?NLADr0J0z|LyYz zmBhvm?ny}3TLd^Uq6p+syhWT6p}U;=g!h+LYt3lgAE42_xcOj}W~ zXibEf>VehD^J8emq-WE%>7xd1s1H^&I^@@G@ONwd=xM#?WUl#N%}+F`ygH>Q&)ioc zbf6eSEbZ+ia%j&RuNTyKr_J5_67+6ZZ4rnhnFK*H#v{~-^x15l8S8x#HdG!cAypE* z#VP`^LGbS3vm!mK-zZqV6&6(Pp6wA@MO~xqKP(;Z9O#n!3#C&I!j0@DQd;`@<~6j3 zcF&r{k$J3_zM+%-m5G08=pm~aWM$FTOxreD&eUe&Bi^gX3MMl!8GGp{@K!pcg4usi z*|YBj&-B@Oi}rZ-Ey$a{-aBmvjF8*|o4oUPd6!Otsu5`k8j8lhZ&wOhMKeYeEKF9D zWT<1=)*wr^@J3fwTW%IAB)%o*OEM~^1Ixny z*1)$UW*7IN_eP(iyf1Bz(AC20E(HP*9YKag1d=YbILJc*X|78VyLb88{LQN(mMeg`Ds~eRb>{k zcZofIq*Dj(q3!g(B;>7x|7Q*FkL@DxRZ9#BO^@G&MH88gsign1tnl%w>K;`|J|X;9 zuc{PgB7gr2o+)d+bC=|8TjhCfif7ZV2vrUbs`AD-#4qCulciZEXGyMmiX_i zVCyc{Fx$JKc5qR;UPjr6=@(ZUkSf6~$Cf{JUEg4AX?W#p_fJ9jP)Mvk2g>>LxXFc_q=2`_) zBG5?+ppyaS9;wuuOueN(N_i@l5`j{=07_w%BW@RDL}cZNw|C!ur?my)HcX$Fx0nWH&3wNBxtMfz$J>Ok=#eYI)0uYyAO>9ZRXXH^X?VZTpEpK`O8%c5z-1L7`l+jy)+g98l% z#^sr^wP5}xlf1O15(jr<8vYqEqbSe3^%1)17QG=-JR^cR>1NDa}fk6zKD9%FZXH)7VEGcM0b*SPyjJ_NR5Z3K$!5xnwHm3pskijn3)`aH$kJI;BNN&`Jlzp>X`A zg|Lh(|G?b*m9z3TP4Lc$G;9^HEGTG6zI4B%s5^cl7f_~Y^j(OAdKXN|Kd{ep;5p)f zQk^;s8IqowmXX~j?a}nKai%PoLi0o-mL*Ri6jb(T>xovox2abI85Lct~2HTp=oJe!skESi!xW4m|4L>jMRnC0yBQ5k*H#*8&0 zW{D_9%r^}GsF`r5>m(eW9dG8Zd&QG8FMN5Y+B``gFdV^l&z|jAu;B}pMvKRx(rj?+ zaJ1hSx7I6mdG=0#G&i&n>$X=$Yahe^$%jZzJoWrv?T{H!NNG8wq^U&R)?ia zVRt=l8Qk@}J=44!m8;IWt>r99XF<6)r&;+rp1)&j{s9$fwmG!jQ!A#crYY&_+p7c)gtpjuhzwRCWY0U1nZP)rjf#cpUaCikKPIIPiV%hLzq4Dn^6hwkTys z^WgF{*D)!49d@Nu8KMI%Qn9yiwEKa!(VnQ>-LoRm?m{BU)RNuv!+*O-N~v|TBI=~p zMJnjwJdQ(h(1ntiNJB7OxW4eFFFY5%^)%{OZbn}{Q#OYGc4gE~phZ>fSY_TlDn@DDr$YC9>tdmHr9D7^TkzQZ*vDug_`R<5GwlfepezY= zcEn?Q!QY0WN1WS8It{tw`E&oMvx}ZSGe*89lzZCGr@f(mn3O+ttLKe*1xqI6zcP`1 z5%kwJud01MT+jNUQP@vR)AI7m;in~ZBwU`&yYjcJENnb#`*%V$4wN53P7oRuj#pW^ z&u=!94)LIe?@(ZZny-OInwoXNs$frwd{7*NqIaF~lRu=Ud;j%Oa(TAoz{L=mis zk~Ux_8k{`mBU4!0S_YA!jA`;t`(qJ>4`m5%FIQyBp|)-|MV?9RBC{|VlAU~chDcK? z%sPZ>{C0~qkzN5rNQnWFFimDXp8jfNYmuH$6X7pu@O?GXq5KVCzVNJBhy1L(Jui5d zF6V|tVER6~EA`(8c}J-UAWfSjl+m`DzL2gz@XWbb>`_E&B{JAe@m%YHb3yHnXk1tq zvtxy&iE%oM+BuFKel3%7iUJs7!{A0xUgB3g!>wpzg;va;vjc}gLQ^ja)nKgM zv8Fs)>!B~)3F`=OzgknN9b}BtOpr3>kLX*a-d@0l`9+=6@(5SOO6$4xe}B2+X+Z)FEB@{sXf_i=-A8w=PTW2E*e| zDcPZ+Z-2g)5%IRB6&O9Ruz-BA2;Bk-)26@^KcOlEA3-v*?yXysq#SN!-t)F=)t)u8 zJ^P+FEV3}|A?X~b0YISp_x>joSRPlA7#M~+U(OjDEM zQpJPW5CxeLp(%tZn4}8&d51PN%5!6&2iofPj>&7pAIc9CI|X%59BQ zd@Gm~x)+T!h{ifM+8V3imgV=Fh$hDOnyAQ@#rGmGZ1A@OI^rCU|JCc>yn4y#riWIJDjdFLs7N)}57DjWnGWTik2{>n< zS5exi0=BQJqH*{dnq&S);U6W5kP%9zcZ$9P)CGSG$6rasqZI^|4nLVY1e2Q%fO?m% z#L+c)8_+GB$IIO_#i#I1pPgK-Q8NA>+~JrYvr8Z68fK#lJ_bG!gHU*o-4&+eT_HRI6Meby)NDSb2TZZR}KbL^xPJkh++dMr2N%iwe`Z-~`Ul3QUPXs4g_4CsD6R@10d$0b4{d+9Dcs@7^FaHF@~()+5!) zt3=+Oaa1TfEz{(SFRB(Fu6z*>t%NHc!3uzm=vl7Z58(K6`Iux@z!0kgn49X@@> zBshH62yhNug@4R7Jp`vZd-&S#LBc!$<&2A4s4JqKnxMCpgX{xFr4oc zNiDoIO|DrdHOmvCV8p(|)qjIN$#7&M8Z+SvC8}IEiXi*7b5s8z4GZr-r2tc)D(o0g zzMV?ujx+~O3oFWQ*iYe_A1UJi$FL*Scmr;uaJ82XlFPvgxXUMxboDzNp`zG<;mexB zNe0^+@uF}ALywd?ee%zL=rn@<9sJcq%%A^E6Sv1$!H&KukEW>um^2^3CI58-OfaED z;nck?>MoAZqTRs1rj$lg(OA~PEz7Zwh4cwt1O6abpbRh{YYeTqlhSw# zInNketQdw{#p6*mxp|CJlt`#sUodIC5tk1x>V&+aE!&*M0LQ`Bf`uw(8T@ssiL#qW zYf%vagT*}4p38e>kJX$Sj!c!$fktw$kCYzrs`1r6>EdyaHcr2p{A`|SOA!X~%zBYS z3MT($aQg~9(ivRfNjOe8cZRbhX!b};q&ymA>ESn)Wn_PFd-=Kq_74wL-y^l1yoRY5 zN3yo)dt5R!{6{`2&K|&x8T#PW^~{>$nfp3IJf69;u!Yl&Ky#K;pOqC>*NfXlwl46@ zo#xrKUHKP-yYZTD+wnJ(s<&z)HI3YubTE|?hWt%86k{sMF<5FS$Ej#q$e^MUfx|?6 zFcJr){F-O*VIflAOx%Jt8J%uz?zDH&ZiI}uyEq^bGypI?eM6v_%yI~3SqwpFqsL)> zbcI{Z5(naF{)}^&6sl!oYzPL5kDAbMP!PoEtlv4nfnDpFZNQzRoqtbG{=~&_z6ABH z@W~xu(X((98Q8zjwgyj#F&)X=Qu9Rkn-+f1``kd&3?2(@mN9rmYEbxvU^Q06&LJ9! zB})g6UNZb6W^OT>R@paJeqF}ASeb_{S+u#uXoYK>F%+FR! zJFwqbVR=57o6O6*zTQ|%wlB((F4S5H7K7v#@X1$QwjzUt#HQ886nG{>H#SV$eFD!W ztDcsdexWJi!ENN^KVMEcxR5k$zNd(!i&rU8_9{mq)I~LB(D-(+eJPjB4FG* zR*Jng?689uuV8A<#l1=i4yN;x&pi@Os2IFRy8~@%l&`>?TNHK*EYE(h!1yIQAc>u5 z>!lzA^~K=)TYY^|4w>AY8xau6-M7Fjt31!of@xvNYL*M6joxPt>-n##y0LcMY}qb< z6fk(4=jaa2z*=Z5sqeJkk`h7Ym$8!?+Y(23==v<$iH9qtgH%P@D&m^f#8`r=`AFw?s zX&7M|3-#Ov&wEvsr@)tG7+gyif^dQjIav)iLK2QG6f9nXvo7A}HzHA**lp9Yyg4du zH<)x6-y$t+h)AIzZH$k28wzLe)K|oimDZ z#saLSPnB7uK~dz~k_fZaMs$ThrXlu^fS*D93y0c4Z5r%ry&)8g`b(q!Je(!pxQbVN zgbJPDd(Ln(cA8j@PFn7dZLmkt#Ei#(#{y|}v$@2Q%a=(WG;}PJjSB!u_%5bU`Q;Ey zkg)0+fMABq z{JI%kf>g`YvgSt1=DtoX+m4Gg59lqcsb3TdH7al0=Dc;Ap)J<3RGca(7m!~~OAdCk z>6~lCVRUbs73&3)3v#{b65Z=>c3c++KyV*?F zCjoUzM%#>hp3V-o5z=hUC6aBp+%YpnFxO4k#09I zeEsA>B9o0A+~m_T?psLoSt82gj}zp+yI?{q`b4yW8j+2GA0gVRpXs*4R9r_+zYPZ2 zRQOux=h66YKc#Zepi@K0c|}u70e|u}v&*WwdS8IfsNUjpbs6kH7A3p9I4OwZ#pV)z zwT3cR*#&2mZi7})D+tXkYhd(1pZ-VM49^}pqHUYuX(_1<+O`=yDs_C@Hly2;!%ndj zEUUWw6B2UsURwwwyZV^1qq1-DdEouu;}3DaFTLHOP9n5vFuHA<228Mls>H;eebcf# zkKjAVUQwfYqazzSo<{%8t7c08f4V_iTK=jc`q!i`lzSy^M1!fT809T0rZ|d3}^LVHa zluk*{Y?(7N)$ z1$BPjeB7F^R1d9MT?`VjYFc*Wsv}nx?eYE$o4`BH6dl8R5!xh5u_3vkPJrvvr1J6S z(iQ5~1MXIrY>oD5+{P|M<;Ww>_cU15)>$=JjlEtQF1Xr-kO+@=xC%KNC%B>hqWZgx zR&`qS&|fe@CkqYMht?J0`i#&o^IHe{@q2wZ=#nl^#CDMwqvSaVT)mX(U4YQ4=q4KS zfEI!E^4G1#3oQ{@@4tDAKxkW=2l;(zSMgtXM2Dd0bfv-e6oDTKVQ8$|a`5BocLtEv ztkyv8ftB8gn**enAwN17QYCF^#?Tek0CFS;GyrE?)O1ovu<*tN2Tp_gPj;?(CU3Mk zI(HSVIf=flgYNzx%Nx7Sb9BM8clv(Z9p%k=-uHHl?+gTPSsRgNzGdxS#nQtQBR4jg z=4A2>#`KV`Px;}d^!)tQQ}Xxi^Xz@rvvVg&m2kuoK_uvymEObPW97J3gHG@F%}&Wq z&&p08lBKqkGKxavozIN}>Pm|;c0FriE=4Rj3>th)-J)#3uE_xei*I2dEDw)|`>MtH zaqF+f^}BQC(5Fw&T&WLU$oFU#LOzsH0Sym2QEu^dA`*P4T(8p<3$-pvhhS(mQ&uG9 zuaQ%Zl`>)>LyvRe%!PN^To{>{wlEDxOG3jUbe$^+XT#j_ovZV1o{zi8!jm#yX5csk zU!3Jv56wri|KA_RwjN8T(z~d$#v8iG{Ml46VXt)>t!fiy)@oRd0~lo_bYejVqB}w>YXqB*hj8k zO4cLL(f#f>x@?M^j4DY3Bp(Lx!NAZHzM5y+%bq>Eb>b#=4Wen}HIWqNgfn_PswlOT z3aW+Gjqr7~fqLuDZF#0?^|%KM)J4ys8ujc0^jt&&oPq!1!;D= z%yD^kto6)ZkcaC(=Bf*$t;w;y$XCW1Dl^^pT=1MaHEUgL1Qr>m+73glzPinGho5Qx zBUds#&695^-nYdTXC`0{kwT(CYQmJQ`4i{stN?EwX*ReDD)960(^k@_ zJDAzR=(*B!6}N?_P);Sb@db0?CsxCoSb0lk>MadVkNh2^JW|R44+NPa#%&BPrj-BI zrk2|eJ|)to<81X^Pxx0Snr*))|0bZ zKa*G3y6C3o7Mkm!we3HwX0aZ8Eg`L$btc+k&=*r%)a7RSaI)@PSXL zGhIxVIPLuZ=@5_@r1L7omZaJEFLhJO2pF>{L*hFN!cQKC8xsA}tfGxd5i)o~hq5(> zl4Kgqo4P#*a;%zq`-$SBM%2$Z;iK;hIvlZS9Rt z!NdQfzC@ach%GPjEL8UG+{C;53IT60R?lZu^zK=izkMr~6kGu0R8VUSzhVq=A*y;p z+hU?y;yfXr=Z?5Au&CHb(=T_{d9D)QQtew8IM88Q8hjILm^EJAr&7`0ue0(ERAe5; zh!xT6=zK+YcO{mw8|kg5OXiJho}g!tBnoGlujdfAFOn(gO_z-Ng$E_XryoFI%*wmJ>`3SlGL$FtqAzv5gBYI!;5O8sLk$>DAf;B0k38srlfOkMw#& zpdMyEjccg#mchCZidIepehtwd4h*5lYNJ1H5Jd4FbGNXVi=^q{d$i<9S0rvF{|?J9 zJrt}DP+8nqg50d!y^DFI%p08bKo3V?ZYch78eF>X@FJUf+*3an=;;CtC0e2cA%5~7 z@8lE{7SyD%l4FH*RlecG?EGj*?<;KD4;jd7^oI!(S&Y&TN(AHB6JJu6H-EWz!8GfJ zyI@i4dc8gXcHY~=6)8NEFlfU5UmQ#iT{nf_-EH-NVkn)W1SEqxT-g+#_dnYiWGd@} z?R#XCWr6jO|F>QNwdz~pLCv7PQPe-xwA(R=U#DcgIyucav<2~O#FR<0nw1f#vf zkbk=K8)fv1@AUzyz`jn-GU7Gio%W*MJnN~XEbQQ($FHl<*`dWAQLLSvuNXk55KjpAG|!_2bwIZ{R+d!4v} z#)1i|gf%_=`D5#b!g-A>BeXJq^JW_8AR7HmQjwn>);kMt0`15Y8zg&zE}f@codOO1 z(KbitMynyBgsx1?fRS=u)7*l(FlBH(xF=^bz1)J3`Nq`Ltu<*q(WPNkC@1yvMSi@LonvWjcVYqKtmP8*>N5hupB14a`nu+Et=$+{6S7;;t^Vh zv>CET-RO^#pT3INhPt3I2J^!nd7?<7u`tTTe2;3WE8Zj0FQev()^4PBzL5h#5Rr~m zJBb4#Q!Zw{iasKJ|EY1x!wQa^+1Uvib{>-g#?Xo(oJHVpKyNax~8U^(0eiT7(EaXb_D=5O9ZZyL?p2eD{`7F@*PS=pV&WU%ij+FnYxrN zh*FTh#?&vGv7j&G6S`J~*gfDaP7IXww+l%IHr1x&N)fEN&>|$x$om*J^E0?eVu&-y zNFg!bw+qoh6WnQdN~Ylx3$y@y?ov|@N`g-vR<|yz8;UH+RLAS;DZULN86ItNP!N~W z{?!G4p?%e?XBN9Jf8RFG#GJf!d&mjQCo+n21G}XSOUp<#L~YFg+I>NbCXBYNVUeik z?S0ide}AFWBQZdj2E{4e5~4w0X7G|PfB`{F6Q&F$kx`yJd9vx=*klX7b9i=b^(>w0 zmnB>1AwPV6-F!i@p999f_zUO8RIUN2rc1!2aA@x zkyCg}OohX>M3E`9C6xorP~D6b^`I-#*%`AltC()z)$_hJ6V_6MNh{OwuL*2R+G2Jt^m6ENGRIaawe`b^UZ6or;CUq&K{FE58^=~He&D?lu}J5e;g z=V+57J?JAPJ==r{ts1+Z`K}LkUWV>~Nxtn*9UlnZ_^hfWzx-H4o=p~_K5_`jy?~57 z8ZfJ(#c-P(-36Wvjte}eg@Sv$OLm7Z*bN0u$t|WD_2)jUYK$cN9qiKZWer-Dj&P{P z>g)f*i^#32<0~xa!DG_wjHoJN3On%7Xt=SozD~i#*BN2)`z|xHs*x_|^JSzM6X2cT z-=D0C6uQM*6{46go9$!=nfFBpryzOey%er{NdaYPBMBDaE?*jx{`Q_#6S@_8@nPWN zV#U&L8t~Rmsv2#=Mnt6?9okeYEqC{Bq)cM0Da&H%q=H3rl@({z6nCJj#x(NE#S?BI zN*cl)gAg24bnt_^FoeUE4-F2xxQy|@n^kLxNB9XUL(9_41tY9CvhjTTk(xKC0(x&9 z*ov4;xCZ-QHX+Xh&AK{4tCx3ijxY{OdY5bnM}ls#p}ETx`X;Fpa0GZ=thyd<{Tt>0 zg}+HDBfg-B6eV;Sue_D#7gf2J?ERy=^fqrs+G#cQ44zf3cZS&pLTfdr719vVH^?la z?5n_*R57=NmrIe`QxZdOoD>S?J3H=~jKFlfr~4e#`p}!6hP4`jKv#dV)!gYyO}Lr2 zQgg|>j}_`u)U0Z54TdGdnzOLTYif42P`;sgj7>gvlT4tqQvA#-AGL=+3fGUCwX5%WEi3YA0AVF?wNI5K$%JC$@YdG7Nz`eJ4+8;VLgI*vuja6pT4uRDuC- z3K4@nDU3}aZt{Z}61pr!nf-UcS90=i`8zgy_D@zuZJ4IeeF`MgI3v`z(VEC==En{r z_sWT-M48QITf|P8hqIL?6Q%)$suy9)^;OF@tQ#RrIleUKPY{tnXHBTm6Ou_~)tCTNERm#KpR|+_fnv_$V`Y++ zOD;z{dUE;eE~U7tbhqnq_^k1Dht4qNzMrt9TBGkLEQOKCH)f!*i>wn_j zl6*kB68t1cHBcTy%Q6sN{|~Iha8(!4QVdtToN~rc<|O;uX~kyapHiyz!E~8-N?L>A z$VD*b!WH2Qe|^qI$j!kj2ufkA@p^R4I5?x}8DKa;lfQXYq{fs(#D_f5d=Dqz%3;wr z-yO5cN{CFZ4;n?A00+Y8w@|~-#SdQ_=3%&g2VV-=0ecCJg5gc`lhQ9m2}g>r`!HHY z;U|cA5X0>q#w2pfymQuhrYWy=IC6!``)~#MrU44Xt2L?D?1246S9wiUHwJ|(-LOz= zFi^KPEIzvWp7pDc!!zM3EA*gc_<|Iqqs4-h15*#zuk_AbUPuq^SZv60HkI13125YY zQYz5K^lc#q4a&7JJx3TKN|nsyE56NF)$?g&3;y-pN2|Lx!VSc~JZN9^_J!eMZeLNj zxC2%`oe{$|d#2&?-;5q>7e}eN(40gPk4Lfs!2`j9=7_#*c+(@1N zY=$s(=5Kq&I}Ojj&{>j*b(X}Dbfoi`HdJh)`dAgiEyP9M0{z+97B+o=T^Np?g0JHU zw(@w`*$SkeNy4R>EWFZ|7GA{OHw=kc`4gD+P6Vbj>m%cPD&9zB_WeXWl|b4|zs$5W zBY0HAoNriyTvGSGhtq`fUR7S)&;o^Clv$!v=k%=6qq0&)^csF6k`0aX?EbZ< z4j`L!U*B6=oM)?ymaqf^uU`(;$$g|)-;7ME4D?pY`k>=@WD(L)J@N@)bJwQ?Hz-f0 zWQ|pmy(?AjZ`g*F3r{VerzU!ln-^X&H{BAUb?Tg%K4L`YQR6aH@KcFpH`H+d=|jY> z_0Gh>-wTbkwJ%e{qGUrAZ6db_d*Z@pKG9~31T&pBPTsG8CB+GcaDoueQsYLA?uM&I zOi3+;@)8vLvDxE0rwvWdNHcL#Vb;G@nd)J>Lvu`_4D#_nQ0bjWW6jxaXl}s0UCU&|FDPqVg8<94|ypkiGjP@k~hAUbc5{lfb>{$tQh9vMSH0%sf zVlo^hCt^k{rHo8pT%fl-ch8HwbZ>h!EkhlV_H`i0si_>04Z3%4keZr2e7Mg6iOQ%{ zm-G?YX_+P&R2R-5%5)$rDCk59eh+6{mdf2d6K6{;pSriMr*uF)?5Bgc)#VfnXQF7_ zj2EuKMSX1{T=^oZ7~zUX*uo62Qn7uL{^?2a_A5ucn0H!An&qvG!k z#{!x0D6N|G$HK>^m1v0XrQ-XPrEiQ#GEYpw!fgeM=Tmy~{)NZ{1n0JD=vnh>A)J~B zdo)Asp?-Ibk({kAswo2Jv2xBwNesQtZoF+5Ze)rDyT}ceGtXwE8433O2D>AC-e0pv z!dh}x_YDH+^!|H9NIa0bN~a(?sBI@jZ=plK4J1P{S>91!g1??*d>vKkdy3gMG4CpB z(+#FUx6hIDgWtE~U9dX@FUtVq{0Qw&c+4~Zz&_6bb){4=A<7mAyyM)6XF2s-%q`mx zDF$aw2@S52jb5_!i~)wCu(e>}MyugUhTBjb2>>HeOKD-#0uLQ?mwBhLBGu7kj!|xX z=yl$#sj74tQ&n`@i**fSa7vgfSZ{~dWP##@!#}|lI3YLrx!q3 z6{OVgy7-yQR|<`CwqJ%xPSyz+0o5|dNd!QB7v(H@EqC`ce%V^NX@dD+{(rf}jUdnY zUtP4B_f0aiC_KPP`+O>y`V)Hc#MeW80XGlVyG9N1Kji1v<<1sNT8|qZu}yGKt=Nv; z_r$gRz*MX`S#j^CW!QPb%ME%d#P3Y7=3Y|dsTyNnwB}q>MG-i+Q0p;xLjO;%rt>c1 z7sik4yzzg#1dIem;49pNAw=keBl#bVv-8F{8KI~eme+dm{CMBW$zM0kIN=sN6orOZ zf(sP>WN+XAwHCc0R!Gwxk1leSdSSvVOVp=-I*XU31B6S~bD+)4?)B@}x8mbMyp_RS z3V!L+7-Nzrq|cfyDdVM2^X6yOjNsQu>FgvO^P>Mkx6r#6_Hom|kqjos$LgqY>gGP2cEsibj`xH~N|$Hw|nfrHEKqU^*qEZH7@1+_pkhr{Dsl z)&w8jwHwDAgTG$J*pboO00*<)PM^8V1~|>FPhCR_RQ9OM@rFnJ-`d?Fgh~dqDny(0 z@tP^VrUpKQ%nh3F7UheOdmU~t$^_UG1}7m(WQ;7Ev>}d&ke1w#VH;AqCE8}(|BuPcr{cR5bq01-3BzzxC2th;6bHWFTfiqHy*D2k&^@YOsL z9zWdw^7k ziy$*Tk)FOs`Zo`aJ~Obke`pB*-Y~Mx#;XQ@sr2fI>CrxRfj;qo0WPD)p_4qh1@1;xh`t6{9w4Hr^->AeuZHADT5LF%-eL!4stqa7SJ%iXf-@}|#Fps9bowW(ARzh&`d#QcV_6QHWEmRFs36ARxCM(5 zlD7i|i*1QD|KO5@XaAt0`cxMrt$rRJm@UVw2U?eZo=VvmtX$1A9ZliWE2rgT=6a!^Nh3Ey^2|SvwQs*It}(d9g#HD;dhsJBhab>Hc)7wzHfUQzhGip*^dMNxI$#o-;KEMvSDVExsU$ zQ_R-)d<|dHKS~;quGe-8Zetlnm8gW~g{+OKDi}8ppM^hLY|C13?d*faPuZ450IhBs zxtSwr9skwZY;`z)l92%z4nZH&`6>5--*g(j=|EiXJJAeRFcGaZ+pYnpC_S zGv7PKCh$3&Rvz!xneP$tRK6v}ce-X@==hRTM+V~!C|K|&KCYu^Bs<E#)|Td~xBhs>gf?oSJ&tLqTQWYp62rL3Wf<1U7`2rK##|Na z48V-uq2QPZjR(i%{htnT2gX#|-}&kOt{(W`n+Jy14*a-G`AWf8WX$E@e-!3iKFt*} z=yJeO0xKWBP{%H~jGFwFRa_||Ruy>mBZ1$^V=+ilXD`D#8Yba&x|#~r_jwi!nXwH2zH`P4 zsvLhB%vv8oV&QqY?ui#281^RLARlR!c zYH6p;SKv=6&=0|`Rwz(o#09G+0BQ@$7ChH~e{*LVy|q0V9^xd07$Dt11+)cjl8k+g z=oei##><`NgM9m7Cb89z9AY*QXZPxgvS;j<(Hq zgYXt$e9=VD>?{fzMTj46OSWp?Lx3)R6bnrd-zzlC1mVpC6A-sVVIRzHGFe!>6Hx-} z&TS=ljsa2E`8~?V5rrae(=c2CQenea^-&q$r4B?C7G(pnA`7dS`BE2qv&~irZdDPp zysDYPGC3R(SgduygfO}9o~q_@<*f%J2x}HD0G|`F!&ts?U2pS*E-YY3HB&1}3eyn{ z#0{FGLh1hRbd8&C%lk3|rM)AQI~j18O?j8()U3Nr*K|zIeTSM!Jh2eqRI#G7$t|l= zbJKMEi;=!7ZgX9E_tq&1B14Pv!mx5^TZ ztqT=NtG;K|W8*NSWb$h*Hf>hv>lEImOGx$V zns=Vnv+J#4lZq}}C!H&tU zaPJmCWT5cFUW^h9mBGqfkj~`dc6qf+HbshKQcUv$!qcMiKuko7cWX<^`FqDOU&QKG z(9;a^*9+$1`}Yr-q3PbI5(dd;DHbG^_)4Tue3xM{j_KhxK||z0R9+W8<8q$ZNo8dV zs-X|zRNf8dq2v|STEnQQ-Z9;{BeXEs zNG{9Q5z~{#Z+XXd;i`(Sm$d1&ki^In%}G@>$2)RX_H8x0Q!6FjtOm!wWjL{nFJWN| zva{o)Om#v0*^*_ahPHoi^Tao+BG1G80>EdmsjM%BY%sGptqwMJeU73E!J~hm0L#aA zvLtMS2wg)_kDxD{Mrc_`J2>|hsI=bW<=d2%W@=WB@s22U$$Lk2sPY3el{smV$c$;7 zdOx_vlG+j8d6)sO>rH?_Nc4=u&B+o{f8z4wXU$Kx#)xHc1{eVq0#p5}IuezT z9GPf-tym!iLxOH(^7A}5d11z%B5Adt-TB`ujOHd(DDPVt_ONCy&A~%@t&zzCNKT9_ zf^3o78KaW!+|(HZPu|!VntdMFR;ql6_sU4=mTo0{$yyu3z6o0*KHnA+{ODTW}6LF zP(t~o;us~{ezTDF}`DijZf%@&u!{fg#1vFR1 zG^_!jjX3r-O6zdjnYO<+u!jBF&%Q}eH#s;t$2S+mI|$+>*)!rrQf91F4I}jyIH#i! zo`vU=FeI4Y1A)OZ5eRH7Y^>@5EGG8EVJrxwcU5RMXV1#n7lw$wuGk7SM6wFICw2HO zSpx9e_w{)P_m<3wY1pj8Ky};;r*YskT8c;aXA_Q^Ixv0Az3^nv(Ct=ss3&7P8hbyr z^&J8j`Qym~AI}7VDmBEgkXmy1B3_ILs&$MZH_poEHMYguuIwj)xk_yxfpNdq$E4=N z29pFc5)9&q$P$0tmVRD}S&q|XCn{Pi)?iZJ?X)Hu8PIzCjOUhj3DnW$4KZmpOFXdD z(g44}xLKLV3j0LXM16@I=1l0>#MizdHL1@M850U93?RpIrv;JR%c7=(3NK%{gdCp8 zWIdqIes#L!feee5t6^W_dh44v0i*fl?qotWs`BBHdHOomA_C#Jul5gZR!{QHeNSy1 zkZ1R)k#z$jeA#mmpdBv{yz$$?b-x|$Ur$^sjJWv?{7;v?SA92EZQ2wb3Ygb1yv$xh zMEEsNOh!lW>=^XsyiagCm5m}NPHl9lcEL+!BUd`zW}Vt-<6kk*W|_qlT=rIaflA(7 z8PHeG60al`U&+1f0rccxOI41tO?wG_FaVY2;f^6~EG=j=?ps`uxMR{XqoI`naGMXbWRF~`NA+EzSNc~Y_#nuGdr z16aPCI+#?Yc8|l^0`>_w`FoUCEjy0V`ZGadDb$fc5t(GyCsC@GjQh=8k*1N&c zzg9UAw0lVqhwC=6P7=lo@m&)mveYMFk2LuSA7-~#+H&m@`Cu}+@V=zJBCDZwX@7I_ z2kDX{E;*?=qRQI@@nd}(;cny&{=45P>r74hTcg{4dj??kDR2Zda}XMMwFkilWQzR9 zV8e8um z=cmJfh(A0F3oz2lNuNXZ+37Ygt8v){8Q7^`iCfR)bDMCIRwrN^r}1qY&L_ z;WXk{!IXgEAk^$0qU%O1O(VoI?0 z@A8A#WqMZ&yUd4r-q z`ybqTx4K@*f;u4El0cx?n+>TUNMPzKm6jAF4LT`OuRJvt){I&UuCxjNU9aS@QKcw4 zuTt~CACr^&nX7f!w8>k zw}DyhU>PeD+NN5i4Whb9BSGQmcaJ`LL!N_7M9r#K`I6W&gRu$%HTxUpQQ7A_%~+vD ziZ@?``&aN3@qxDzn5s=&l>l@jDhT5&PH z$If`^BMMil$!ysy59DTXD_U`N%5;?SQ2brQK3}211!jKD0N>i4jGwDU5qEe_gRfV* zuj#zS7tO9(_O{x5vy>!58|NU-%{H&BA>bC>A)=I1YQgEr85@)fQ7jJ7rkN3(9%M>P z8j9K)01hW3q#`P+U^@hHuhc=jAq?ylV;Hoflo z4l9a!`+_jtCZWn&%FW5*fFCe{kln+Xqa;C7ICHbPC@H!HEt{s^J?b4y8@UXo#oGya z;jrV%H&d99Dx8dY6f_Lmes;2N_90`yJDJ7QaeHM3Bb_9SDOJwm`=dJ$PaXTCcTOh6 z(|l!V7Xy%kuq8BLmh;#^XLHa~A_5*u?>txRhAV6@v;NZ8E^9D=mT%BWO}}INVcqaz z#GV!u8D9bqU|YG|Q6<~IMoMt_sGh~P(TLzBs$}oh2vIG8FKifZGp|3{9Ko;$nfPi& zL}H{U7=c+&XR>ckvSYG!@jdv!n7AAa9I4c&S=jAAhc~l; z#7tEZ1Se<~*_NF9!Mmr$PuuZnWFxcfCJH*3Yx(d__yhDdY4XR1_(l9f-HA7phGJ=F zI10^&)XnRbiph*_5Sp~=zt!5(uQ-Ofp(YUgDO*3Bf<&kefgQugN725nb#67g2i)}~ z@9uF`&dcX^CuhcWFJ4unKuU~C+L`pFRZn%{y!M+t$;aZ8T+=nl?t;S3-sCAk!}56vR4JJ6}~T(R0|^{PKXB2 zT&fR3Gg^m~-?%WQrkvweRA_4)QUMO7AGYJe$Q5CkAO;HHsLTbd$>w>lLw*S6YtRfjON$>P1o+N z&;r|k;iQn0TA_17szHl)QL=+#4zZF;o6Z?7oRR6TpuYM;3`l zO0%MNsw1jS=rjh|qFoVOSsOkd@lk`%rSXYh+{yQpbcG+y4THm@2q%BpF_2t0%;56ZpQu2j-hvf zYI0w)Y1huU&sl|fi(@m~mzhC*UUn?3)SJqa3=mAKBGdA3RjoRzX(nT*Edl#Cr1ZJ- z52Hp%9PBHD7fiVq{NHzLoRtLx!U4wGU4k{iRDtnPZXs%+aR&ar$ZYci;hYS`u;g49 zFgEwbk9vhLVE@4DX8etFxNtDUZ(F{=e=&zjRf@McRQ_4%ET<$wA&o*U|E(nx{H-7V zr{Bn$o_}WSI#Wlsw7!5!`pMJ>$D1Gi4rcW*;WFyToki`ehEK6hiLvH{Emv*)aX0iz zM1jKH5{AB9>AoTcQ$3}zt5Pr|8p2N<*lL3z{ae%pCb|a1OX-u+s*U2RCFi##XU`I| z*}_Dh8R#E+sDHHIVWhV!+Lzddw7$QD)$(r}fhjG8R*>yhby+T=+&@}rz>K?Sg^~=y z6V%lN1>Be}QHI-MbY$M)6hOtO9eG_pb84a1+uCMv=&^SkRrky)79(jig0X0JEi`eQD$v8c+$5)T??K{DYwW)pM_v#5voi zu%3+XY<;#Jnp)$CGAnu^`h%C-83kyB81KOH7A^>Y+Jd-n-C9Jty?H^EzW&}(wjB#K z|D|Ag?o&X!0RyGz(qoSGu)_*((Jor;B4#ExoYF{Kk)JER=$$em0(ifd_=>D-U$Z>U zJEp=z?;UrWx>Bj(hC*p-P-2MyM#3R4)v&TUBI*!J0Xt}nIHKMnFBW<6;Yr|;iB1%1 zunBTrDEBIN8{N}l5=$d{^TsTO9r*kH{nVYO(E86iX~&G`fb0-Bk-bB0+I-#F#}_zP z({BNGTqGPaFJ&VDHcw-pvvNmG#0_CN9ypA{)?+X}&q&%Ksn}K?UPP#EiwfzA-Wfvk zOe>m_-ef}6!fC%!_@^zXWjVn(?<-(iydYPDs7v%yz;pfRwP+5J(#N#d0k* zYs4nYMpJyj<$a>}#I-}G@kOaMS6iFSVJ$(TYs9!L?^yG|(Z>7AF6de4o+wt_!2(OU z;~HRWDb^$r;ODMSU)GhbAVm9O9^(nQ<>-Eib-CQ=-?nU(OCU@Tf0bv4l|*PySA1DT z4@DPS>Y4Fu&@)Q%6Mc*fBY#9$SHUalIQcc53tT*TZPvYD>1L68cG?FZrV4c6`bd|a z3(=Dl0AidIcaQdZiL}ak1DF7pRVDfITNHkpD*$wPa`N(p_mPSknzmH%@a$o<7lP;e zQrojv7UZqPi|#9vJ}d8h!OLR3*9cH~+HSGeHg^B3ioZ(R+!x@NO7wH|3pE{cT4;>YAWHl= zk+J_7j@#-|QUuXbW)K<_A(7E6CX=eE@?STct6gMmolg=0BNeQD z+OA*XPmL=|i04I(z^45)MUld_HQVIhm=vn2H&+66X%MPMH!}>TTPq(Op2f|P1&+b^FrF0Y~{78 z4|!;G<>$l?;Hrt=4_30WQ%g}%qC&4LyXU0B5E#l-R;_;$7bt3P^n+P~szE9!5>!De z%ZrdQHZXii*)ulc-y3wgtqm^eW(A9VC#SX^YQF!$)S>aIPk&E5Qw7a&)fKBf)Fg=| z@cj~Pa^k})U01{lrzIcYNUtF^Wou#U7GqS}hh>M(iuYi{0AjIZFmP9@#`;%?SOZqQ zkFM>GGHAe7B)D}-cC*1|-O$#tf0gEVJbor+bCjJ?#u9iv`kjxAY#8C;+>9GJ)c?ln zfzi>y;q}guu2hk@bikx036{;_0m+8aL_`M83??SZxdx$b96oLD;~!F=8$YHS3k2t4 z**n&hWU#2+K9JBjdj3SQr0u~JT{0}VCWV%wBN+ovqGuQ=g>NRZu-Hg`E%jvQUi4?oE1Yfx*)4{^-bTmj}+OMhmY<An;M%dvyC$yE>73FXKD>0Qeo% zm^Av*-q9E)zWY00E~-v9xbPmtJ+b%$y*LhcF!s5!dvLR{E$WJ(WmBa| zbk?W~lP5V#lxg>X3|&_89JVVP{n2hHy9AJ=v!-mp1IUnH383eI5kpCM6tqs{pQKua z$4Iv@cj5ng-0U_3asL{;yrb^cONfxiiMh9N8HX$08 z)~aJ66Q`rk&7Q3_#=g=CA5kb#S9WwHD~OOnb=;=Kzq$QHbEhh<8y)Y7m$WfX(UIcf z$VV-;ixk*6s=94P0YpdvwjovwXZzNah%=S}1pI7A9V4CiRrd9bQgmI~Y$*MvYy^DU z$KY712w%IC5#*q&j+KGGSva>0a5SW{adS=NxK8HScJBE_n_eI*DI40^I5L5BAeh)~ z)MMG0c5cBXq>-xhy3((k|2i>s=(~zv_q0xY*7$fo_&RtYZO|Vd0S`lOj!KI$?~+hk zU<|gU)az9jN=rlEGE`>wOh|{*#J-QzxmV1W7YAgFB?oCpd~TsR$!ylyWR^J;71N2x3OHH{LzjIB*g2Mr7b@ zWj#@uZ+NcqM&NF#Dc(?Ro~ZmMmkT14|X_A*G^pF|VoAX6ibW6sdMFE=%wzjIgD4T2cqBy{c2d3Gtw^SvlOQaiekU7UH4jJ)*6Xw~1;cx-+yfS*z#{iSWCz=UwLst*}wDEr*VSmh%5}_20brWw1TF? z?FcGAO9SGm&s)2;F=s>-(N;E^S$*J0PY;Z|;yin49tQ)vMSu`fR_djoX(lbhYE3ge zi&nsZHnsJ0XaW*3>3A!A(>$tI9G*t}c`k>d#Ub~`ITkXF!m$aUpo338dUNW7{lS$E zn>Y{=nwX&=Mf6z6iWk(1Rh6EY}nVywY_>mOs z^y$i8grB8&3Q1Ceh4V>icR}b68rpEpJ38_zLMJ3wF{0aj0%2>Ko_Y&?DMJHGJ*B?c{PnAqLWQmK z``g~zi{{qW#OVX;uS)I#>#OoDprt6b5BO|nbIp}DyVP!OZfK*{Sg2(i5r;g)IiY-}kTWliMku@ZqW0+Y$b*(oqpt51Ie-CrWCnkdA zce@8!&pw*v*JZ-^@hqtZG3o8EA{owsI@kel54 z;S0okG>+_SojMiVN0(^CnT$(jcC98bLKM>jBXDJte}QB(cB6KbE#0{8#oi@K7oWp7 zU$l_^;r{glsYNF<#Qza-_5Vh-Fsz<%83EFRurXnvybFw>Dij)#J{GpnNCaAGE?i`6 z53CcEtO_!RIYP+m?0Ifg*a)~`y!U*Vbu7O_P+EJiEy5!(OBr`$>@zAR zqp&N$OT5TbOr`FR%h}RYp;V0I8K?0U_Oi{T5GfLzV)>2`8No=}8D?}W=Zp$UfuH_C z+od*!2oAHdr)1~X%W;&F$ozCX7W`=%g6aPq!GhshfzX~jMz#t~2wsLG+_Y%L^NUu# z(6Q*wMR#>9x_i+*9pna`hM9QTNZYdBW&Y1F_8t|A&Qc#_j>3j1VyfzZVAI;giQiCL z7P}TKOJ*J2c*Bx2pC{+OV|DsdXByvb3(hqUQHz@u>$gzzLQ-8?2wC$>adE(UF1UiE zHj94df$}9}l@cfn{N-9*d;8w^(O@IE0=6!ZoEuu#NF`|u0so%0r`Hib30RVM8-z$X z%nvcW$9yc^q6ZpobMi!UQrY;uJ5=2?h<1nS7pqa2E>YHEHA_?D^Eif zC5RV|;SFh{Knm9?)oip;IRMbrk1dbw$GJfnFaY)2(D-m0+&V#u_)%D%qR+d3`FnioQ^YClJ&u^!tg z44XD;YU9iKk6C1=Zmq7$tS(=^Jh-+|yk}BjfbsIwmDp54I3Bqm_ir`+>v%m-g_1^` z7u4_aT%W&NsekA4asK?y8FKb_88q(}-*mF?_sO1vz0b=#ybL7J`@Fmr%kU!d&*b>a z7Tu{x=H zGePd1_Tw(EbqsVjY+YnY7E}9h)C992so3K2d0_z~OT>iK1sq}a+W23b8G7xm6wbq&M;d%@r$QW$uXwYEoqEJe#b?W`#n0e43 z?7P6TrJjeDbWT&cPI(ZJassQ|s@~opu*Df*1XL(5;0KM)3g|l%1KpM9xXucd>J~(5 zUVbFjR*;{C%a+K`tSOu2`UX;ASqdkC7h9IkL;NHtlcqLDGIP<3NoGE99!Xt;Gx0B8 z`t!ju9Lwx}U0{_+LW?~+=VerRxFw8$4!`_~T7pe#`fRGBzERJ|d5O&G&VvCoax#T4P{Ps>4vhuYFi`4DaEwJLL>xrP{b{fi}dT+G)ny-49(i8L=X)D5FpYE23c zU6Ko?Wiq4LV|8-H)DiOTWcwJxxErU(l5h954qQ;YJ1|SejM0XAbEKV{T-tHNF{l$G zpUlu(CyeEdKOAdpIUzGe28Uyg>dE#mn_quW3LzQ|5G8yeiiur}&EICYs1E=FJ< z!COi*7TyQ51saaL3=ufRsNr9GNeRsOPj% z!-0|hE19it8W<`j3ig{PJF&?H9L#_usj3k;xaDZ^(bR69 zvy%v`jX+?kEtOr{{U)unbKuLynChJyz?w3mBvuv+QPvTVhx4tluRemfV4Gw0GvB^y|lh-g9nTXLX%eRxNHBRl*9i;-ZbwE~EEvRNJHZxr> zqZUV|^7Sv_WV+aMU@}Ppr@8c{+;kWhpYCap6UBCGQ>{xy(o#k>3*IT(_<5Xeo?)Hc zeBa((I^G|wkJ1holjA!|M`vrv79)c@1r8IX)awx0bIFNe-)b0w%wcu5en7;;WU^o)noA3vEU2kVP9>4P6Npn z1}MT~`iF%_r3&J!!KMxvKtdCRMlea#wrDuyk{2oM|;}joQQgE<1*KM%7P(&rFywLRY zrMp{!u6e+ttg0tvk|sM;Pde+^s7#vG|e$u zjL|0rvXdJSBfG087ScHK2U1wBAW0F|JK#u;)^7pkGzOc^F;s#E37jHdE2KC@X+_WC zkhw~2qWgw%OuoHSHqzMM&Bbd&vStqoLnY1wTMLp$Ml!y!Z}s3SPi@rPiQFOk6Qx*X z(pZ{Q7bxmM*q5StFB&gTCNo* z6-sH;r`DzYD3m4qxu8CIFe}xYJY$~3YDlJ%lgk);5&cQHJblRySv6y!vVt!}`Fn;g zs=dP(^tiL}oiqq=duT61sY8U@vGW{^5$YUQEnKu>;nLzh|ND8>HNb;h_0(QL(`w>9 zCWQ+6R&xFm!9X|7^UPElBG=uwdI)KoBhT~?+ZY!Rb(eZ&Z394S+UbzSeR#1{PF@TE zg(lg^R~*}r0`SegG61pK4mbhcJn!6@+v;{K#`cW%j}C6~y5Rrf;n&v=4C(8f`3&)yLI-@yY(B814ic@JrB;uARJkVL1Xdcup)oH!9)3sdQ6!$H|?gFp>ez$8#-4;Wkb z=V+$t*#Uo#)aK;T*7z|WfdKO-a~IHh3MrUq*#Uog4g0|e?3MWc8`xIv4*xE1bovv^ zLFS>Yj7+TV@rP2GU?qO4j6)ve`S$A23BXPDTT6nSn)Mwzjg-FF;n4t-)uWsao}P(C z>Bz_V)ZC2u!hu(LEArPn-^G*7IiqLu_%zSvPB>aAFR|E}JsbJEJ(-`GY2A~#a|L>j zhmOXl3bU1G6#HkViTw&iTTGf1?b)ut{>)uPI=#D!6)S;NXceXMpocd89)u{3YN-QA zv6$5G;wwu@u9I)uYy1p2ob*E3g)DMQY)V)#nuH?@!6o<5k{D_yXnF373pjjV*zr=# zKoaLE1uYl>#-G2T_^5LU^_@P577+WwK<`%^lo}qzV4f(00~lCVWY7FLl`C!?d5l{o z?3UJ!?~`xdNp@dELI&fc&wk~y@X)s8dmd?{r27(Ro5Z)1=>HU6$Ac;;i33|s_^LHte z@s29meQQ=<@s7BTA*AM|YfJWj!N+2jMoBz5{Yv4eseawoTG$3_Vd&c)Ks6=)u{RPd zg55JS&BQKjnbcjrZjkBh>SOkMSb~lowNA;xSli?>Pt*@7YI6h&P0*(MRsmMlyydaC zx}?O-C_so>ak^yP&kYW|_VDYh%c5Ooj{s5YBqRArJ;f5a$Pez%A)oj$DWz%uFjl2T z^tU0M8eBM2Z>s*aGy9(1uwm%g!HsI;=BW=;E+fhrjV&3os_+mb(I?}oFlQFT>lf9ZN4YqN=R zS(hf;xY&1Uj;?HVx2IJsvNXubsNott3weC=b-1G?*mP86z>?-MxjlK zdW!q<)XAyS0t|d_Y$|4Yg{Xk@8>-zy&H@)|W4p-;lT=NW8;0T~&?6P6_OEu-LA%KG z%2Ai+qYC1zQ@at|z&)G!g1WS~XF{7o9oa>|JA!ni)VqI`CG`{igDNQ4p@9rL8^KYj zo7%B2ee6@px6j?Z4h5wdW%6W}P>)@dOTb(d9{b`v zkC=Jla7A3>Hga{`0h>&@$+P=~QTld8Mn0xE7;WUPc?DJK zwkywXWaPt0=Pl^zQr|9$tv%NKqr#ZLRI?Kv%tymd^>*VI$Xh6TCSoWXu`1%%k795Y zU8-^5tGog@2{)FiU3Nb?u8V~$sxEFlrAgM2vrV~cqE4hGwSFRvovdIM_4CniQ`bB3+b={nPzBB zqB*1E*qNScpeVK;nRLrej@Orvm&UN9lE>3Gq$;h{<(mFxaCqGY;eY?=aCyF-sd+qo zxl&0(-Ydm?|PuLQTa1WS`Lns-1nm>3?7*4I?i&&U-qORrVJsq)&XnFt~v5WoEz`03Bl8t>b^}+F81bY55 za%3STp)M`oY?N_eK@5FxkDOZj8gMl-0~_;SXA``M_iV^c09v#hQD98GLz@V5h729~ zd9EwOWsQP?nWUK$6<8Knq4q9;)C~4W4Ib*}<|w+8x3?wZr%|V}`TeA%G4d>~S4?AI zM6n9?wB&Ay?x9`+Gaff&niX-`V;MZ6rR|fu0#iqlS^m9;HSAzK2?p#I6x9F(XhG4DYVC-os1bjr?GPjqQp(q zq>c2>0P2Md;kMK=fItR}1GAOb3II_k^yI|?wN-6kmcgP!xrvnMXcpjfw9kCYZowIE zl^IcJnVA_EZf%ybyPSPj_s28#-3+vq$}j1=?oVSssgyDHeKC$S^+ei|r#ETH?|cbn zvlzZcRl_9%zRMLiz{hNO<4oZIgX;=ApKr4EB#tjbQJQy{mV&t%T|&ss$OvBVjP96X zDc&^p*FU3(mHFb{dQ5;^pVsdSxs=$oC{Ef8aOxn^eTY1oQMVL0^M&864XW1=&n<8S zBx7&c`=ZF3lDksKRf0)o!x$IEhsdJhvV~MN@=Y~YPbEw;Ji~Q}?6()X#tw8RCVA}j zz74}K4!Rx6X5t#t9&cmm@cHh@=c|Fc8ye&Es4GJ6F)v8^@|8x`_<-m+aU_9y3t~jF z?6L@?!^7#IJiLWaSu2kfhm~qD#UXxoX7RgH;kh`ZXfZ$dP4cPg*5Ld2e}ck`&eGzS z{^XZ>J{6-lFdG1xXB*xAdfG)W_o%Z;D_N(?wBJ_XQ<-lmP9)|4#|2TG^-2nO7op6< zWp-cxk2!3Eo*X*KRX9lraiZu;?OS35 zL?mXEzW4-rZx~_gEY4Zd5d>*{u8i=z;HQ=4g=X}{6}CaD4t-x5!ROn8QoDPRtz3Of zoDUJd)Le^iQQWMQM%F1u5)Q>0=4n=v;5l)wz(Y87?40%x7FQe&wsH#RcRkX-d1&;R zfwdb()>+53YfH>aAnjr~(B2sT_-Mq8e@K^BeT#aFZZH&{F!PSy)OiHvlQ1L(Vp3Hr+TB$Elw%kztfis{ zz&~!5Qe$6KPbB(QnG0S^#?CYjeiPZJX&OfYtN(k=S4B&s`H$fWevvfnzDixYcDy}} zMQ(tth^vY6Ub%6zu>-nKMO39ude`+-jH4<2~v^or(tah(BO2EiDy0959jNv10!kL4;V=gXxOIzS_6j@ zPAw_Gk`k!HkbRK4!2{CNQ*GikJ5h(96#&F!%l+^Hm~C3s(`PL&xYbNi5aau)1LG1F z83Mt|7GfvSb?yxYwZxVs_ilsDh@^C^9eR#tj7klkqh_1->iO`WYoZrd1HyWk5qs$) zFetFr18kaTgcL$wjH2uaNc&To94mJtmnAI;vN}uJhm9YW_kaaf=>by_OV@=1HtVYE z@zJHt*Y}Uk8#-o@XXWN=7aLQ8bnC8HVBUg=CHkRghcp=TwO0-&JiO{0uJ`M!cp( zSjtQcZS6(2%pGu)+@b!FvbMBtsU|S^tr#g83c(#s>nFYeo%0bjyEOO`6*8TFDZZrn zL<)y7$Tl6n9zSJ~SO#2-0uvUba04vF*(I+X9Z-za$-iFqEMJqN+wjRX_KqVZJURa1 zt;kMmd~*KsNoVJMcfa7dsk}HeQ=J|g`7)R@m zXOa`UC0hX1>fML%^10o~8P%ri#zzsAuwmp4htW;*$@f4gRc^dvSmTPD4bm_-rX~v~ zO?k%5R-Q$A$msK)O98`<{o zW6xHZ;YNa<7UXLmyT1zHw#V+T^j%>gRe;~{)W(6~UfG-~-?yvpxzs9Ox2>+WcWr-H z@w?}O-;oAT&1MZ8a4GFs_glwvYZfO*C(t}EbmSO5AHzp6oR0fp{m?Vfo_}*ejV^BN z{j@oLC%^|y9%qJ_t>&uU|#iaFERXy6ji2T?)&F1Q{s%mewv3KRi zs?x;O#@?MDdw2Eq-jg4DPk8Kd@aR-J8o~Jw;~(l9bjI@jFb|x6r(+hkA7NY#y8`XYthVj)`LlsfyAWnAIz^%7cCvkEBBsqe9+=`GK+5*JTu`HrPM{Yb$I6B*ws} zX}Fi76@yj{I{wsK?*_)?@PI@b_)r9J@)Apcwbs@To4-?etDfEUkND=z@Q9gUiri}_ z|t0CbllA4gj7{*}R?Vg~WDQqd^B6Y@lT>LZek>6wk=0 zLFO+W?_V=8q>et~fb4jpe{fhXu=@0hVruh1t}se752ltYt=*=}Y0rJK|J6ZMogLgT zERs-~HJRZH*KT~BgcbZ4zw1#7+8VGsHlm^uNu~28$ER0+ZD38Z@15lAo7!p<1ecln zn*S4>I`i$d|MyV!kK6v=n5qI4L<6gu4IY!0Z>8ltSK<>M0#rqjrj*f%6)0-i1V%m8 z1BwM!s(})|FJgxu*uO;efT1(0#_Ja$7mDcYB{h3d6pfozserWeCN@pv25^s&;zAhN{~jy##uawzuBz6 zb^vRQebx9xJt483WGxBG9v+z#P{m49WyVf3qZM6a^UhVK0y1B*$`q))vF}|3_g15& z*%=d^C?n3XifOLGv35XG5L1^sTA6_=jGhbQ7+qHM3UE_ZBBsODIw4&pCl5(NW(9am zwwI(bW<@bFdR>7TbV>$na&mvQouULKFpC?02HovHsRpLR>l-`xP%eVwa)=FQw+t&I zyC%_`M&)jN^Q%K>3oC?KVdKjVat=6VGWPW}k5ie{vH4WnNFq|rgmzR3h_@uC;X_7i zT{_%4^HKAQ$qHC6R6Ky@|I}12c1|BD>KR&Z?rD5*sxm=NXNJyc!oDjdZR`w*T@+iX z6iI9HM(_zq1|YxS?>9LoJV(ej`F0zRM%4hXuwzS|ImJRO_Weq8>1Hog=b8_GC-w;D z1i5Q@!&wK~8l0<){(OX5Gp1K8h%~{A--R|tOH7?p=UM8$vF#7Z)*}@*B@2~q0m;Yo zLX~0_Wl%GMSKGgz-yMDA@?Wb|(;!R8e0|L_LcacgJhkSZ2G&ZcmwAP>f4!~ci7mjDnBpbfh>CHFa7|G$M;v9sr_ZN*1 zCQ#VG{Jk)RgbvV^LYKXbe^P0)_ylZ#;vG^1~zxtT0na7thQTQm~wr zH&v{fSy(%k#5Zq;5=1gXy0L^|6$jy24C|cx7c&>Z-_q9B)&zVTsFt0C;Q_=m@0)!O#v52u>vn zS;MR49id58Iwhy!93l{==5o8*xyCiqy7VzTHPNLqIxU)#eDmso(dYVyHV-^Dym7Oe zmP~$35h3jyx*74F75Wvf96K= zJoZrQ?K8#zsEFJ@d#V4`KkSjf{ov7)(F#Eg&iH4b?FJ(8ewy@L2l=~n>-O7MpkMeZVkj$oI~Tqu`kNS}!kZ}uUF&(8xfnqd&96TZzmrX^cKqr83wj#8 zChUbN8NQ-1N(~-fe+C1kKVuefnw81`h}HNV86l}A4L_hb$48z_0s^?%m0K=PpyczO802x`o#y0` z#@NBumhG3(l}6bMaE)|x(+|Fs_d(|yo!^$6JuAGzyWzK+#k$AnE;Vh8>3_Z7N zu^nlB5>ZR}cRqsLD5xhH(wUo#9Zn`Enuo`e3-4>3~VO z&}F(eOFRx}#Dw@pHt@elO$k3KSB{YJ4`-)CQaKNYOo#8lT1Brpj%Y5IYEpA@zc9tv zA^9s}mc5Vma@?Zd!VB-A0Bh6f6`=WEc<#keh_hFh0=kHuG)wY#IU2;>OVAWeiJRiH QTot6jF)-O{ues*`10OA^%K!iX diff --git a/product/common/resource/en/gui/translate/plugin_en.ts b/product/common/resource/en/gui/translate/plugin_en.ts deleted file mode 100644 index ec225fd9..00000000 --- a/product/common/resource/en/gui/translate/plugin_en.ts +++ /dev/null @@ -1,8544 +0,0 @@ - - - - - AddObjAlarmDialog - - Dialog - Dialog - - - 设备 - Device - - - 自定义告警名称 - Name - - - 类型 - Type - - - 告警等级定义 - Level - - - 告警点计算函数 - Calc function - - - 告警规则 - Alarm role - - - 越上限值 - Limit up1 - - - 越下限值 - Limit low1 - - - 数字量文本: - Digital text: - - - 添加 - Add - - - 取消 - Cancel - - - 新增告警点 - Custom alarm - - - 值 - Value - - - 模拟量 - Analog - - - 数字量 - Digital - - - 枚举量 - Mix - - - 提示 - Tip - - - 自定义告警名称不能为空! - Name is required! - - - 无告警点计算函数,请先配置计算点函数! - No calculation function,please configure the calculation point function first! - - - 参数:%1的参数标签不能为空! - Param:The parameter label of %1 cannot be empty! - - - 越下限值必须小于越上限值! - The lower limit must be less than the upper limit! - - - 无数字量文本,请先配置数字量文本! - No digital text,please configure digital text first! - - - 添加失败!正在回滚事务~ - Add failed!transaction is being rolled back - - - 添加成功 - Add success - - - 计次告警描述 - Counting alarm description - - - 计时告警描述 - Timing alarm description - - - - AlarmCalcParaTableModel - - 参数名称 - Parameter name - - - 参数标签 - Parameter tag - - - 操作 - Operating - - - - AlarmDevTreeModel - - 位置/设备组 - Location/DeviceGroup - - - - AlarmManageForm - - Form - Form - - - - AlarmManageWidget - - AlarmManageWidget - AlarmManageWidget - - - 请输入搜索内容 - Please output search content - - - 查询 - Search - - - 新增告警点 - Custom alarm - - - 屏蔽一览表 - Shield list - - - 保存 - Save - - - 描述设置 - Describe settings - - - 测点描述 - Point desc - - - 屏蔽设置 - Shield settings - - - 是否告警屏蔽 - Alarm shield - - - 屏蔽时段类型 - Time type - - - 屏蔽事由 - Reasons - - - 开始时间 - Start time - - - 结束时间 - End time - - - 一 - MON - - - 二 - TUE - - - 三 - WED - - - 四 - THU - - - 五 - FRI - - - 六 - SAT - - - 七 - SUN - - - 日期 - Date - - - 至 - To - - - 告警动作 - Alarm action - - - 是否自定义告警 - Custom alarm - - - 告警优先级 - Priority - - - 模拟量 - Analog - - - 数字量 - Digital - - - 多选 - MultiSelection - - - 越限等级 - Limit number - - - 告警推图文件 - Pic name - - - 选择 - Select - - - ... - ... - - - 告警声音文件 - Sound name - - - 越限设置 - Limit settings - - - 越线等级 - Limit level - - - 越上限值 - Upper limit - - - 越下限值 - Lower limit - - - 越上上限值 - Upper 2 limit - - - 越下下限值 - Lower 2 limit - - - 越限告警 - Limit alarm - - - 是 - Yes - - - 否 - No - - - 一次性 - One time - - - 每周 - Week - - - 每月 - Month - - - 0 - 0 - - - 1 - 1 - - - 2 - 2 - - - 提示 - Tip - - - 保存失败!正在回滚事务~ - Save failed!transaction is being rolled back - - - 保存成功! - Save success! - - - 确认删除? - Confirm on delete? - - - 删除失败!正在回滚事务~ - Failure to delete!Rollback transaction~ - - - 当前登录用户无修改权限! - The current user have no perm to modify! - - - 越下下限值必须小于越下限值 - The lower 2 limit must be less than the lower limit - - - 越下限值必须小于越上限值 - The lower limit must be less than the upper limit - - - 越上限值必须小于越上上限值 - The upper limit must be less than the upper 2 limit - - - 当前登录用户无新增告警点权限! - The current user have no perm to add custom alarm! - - - 全选 - Check All - - - 全不选 - Unchecked All - - - 删除 - Delete - - - 点描述不能为空! - Description can not be empty! - - - 操作名称不能为空! - Operation name can not be empty! - - - 开始时间要小于结束时间! - Start time must be less than end time! - - - 请选中需要屏蔽的礼拜! - Please select the time to be blocked! - - - 开始日不能大于结束日! - The start date can not be greater than the end date! - - - 未知的屏蔽时间类型 - Unknown shield time type - - - 越下下限不能大于越下限 - The lower 2 limit can not be greater than the lower limit - - - 越下限不能大于越上限 - The lower limit can not be greater than the upper limit - - - 越上限不能大于越上上限 - The upper limit can not be greater than the upper 2 limit - - - 请选择要添加自定义告警的设备组! - Please select the device group to add custom alarms! - - - 此设备组下无可用设备,请重新选择设备组! - There is no available device under this device group,please reselect the device group! - - - Open Pic - - - - Pic Files (*.glx) - - - - Open Voice - - - - Pic Files (*.wav) - - - - - AlarmMng - - 未知车站 - Unknown loction - - - 未知设备组 - Unknonwn device group - - - 未知设备 - Unknown device - - - 未知 - Unknown - - - - AlarmPointTableModel - - 告警点名称 - Name - - - 所属厂站 - Location - - - 是否屏蔽 - Shield - - - 屏蔽时段 - Shield time - - - 告警等级 - Alarm level - - - 告警动作 - Alarm action - - - 所属位置 - Location - - - 所属设备组 - Device Group - - - 所属设备 - Device - - - 是 - Yes - - - 否 - No - - - / - / - - - 每周( - Week( - - - 每月( - Month( - - - 未知 - Unknown - - - - AlarmShieldDelegate - - 删除 - Delete - - - 启用 - Enable - - - 取消 - Cancel - - - 提示 - Tip - - - 删除失败! - Failed to deleted! - - - 删除成功! - Successfully deleted! - - - - AlarmShieldDialog - - Dialog - Dialog - - - 启用 - Enabled - - - 取消 - Cancel - - - 删除 - Delete - - - 屏蔽状态 - Enable status - - - 名称 - Name - - - 查询 - Search - - - 屏蔽一览表 - Shield list - - - 全部 - All - - - 已启用 - Enabled - - - 未启用 - Unenabled - - - 提示 - Tip - - - 启用失败,正在回滚 - Enable failed,rolling back - - - 取消失败,正在回滚 - Cancel failed,rolling back - - - 删除失败,正在回滚! - Delete failed,rolling back! - - - 删除成功! - Successfully deleted! - - - - AlarmShieldTableModel - - 名称 - Name - - - 屏蔽类型 - Shield Type - - - 屏蔽属性 - Shield attribute - - - 屏蔽模式 - Shield mode - - - 是否启用 - Enable - - - 时段类型 - Time type - - - 屏蔽时段 - Shield time - - - 操作用户 - User - - - 操作主机 - Hostname - - - 操作 - Operating - - - 全站屏蔽 - Shield location - - - 设备屏蔽 - Shield device - - - 测点屏蔽 - Shield point - - - 电压屏蔽 - Shield voltage - - - 设备组屏蔽 - Shield dev group - - - 责任区屏蔽 - Shield region - - - 未知 - Unknown - - - 已启用 - Enabled - - - 未启用 - Unenabled - - - 一次性屏蔽 - Once time - - - 每周 - Week - - - 每月 - Month - - - 每周( - Week( - - - 每月( - Month( - - - - BriefReportWidget - - 运行简报 - BriefReport - - - 位置 - Location - - - 日 - Day - - - 周 - Week - - - 月 - Month - - - 季 - Quarter - - - 年 - Year - - - 查询 - Search - - - 导出 - Export - - - 关键告警 - Key Alarms - - - 操作记录 - Operate Events - - - 巡检记录 - Inspection Events - - - 检修记录 - Overhaul Events - - - 保存 - Save - - - 时间 - Time - - - Tab 1 - - - - Tab 2 - - - - Tab 3 - - - - Tab 4 - - - - - CAccidentReviewDialog - - 事故追忆 - Accident Memory - - - 确认 - Confirm - - - 取消 - Cancel - - - 提示 - Prompt - - - 请选择一张画面! - Please select a graph! - - - 请选择其他画面! - Please select other graph! - - - - CActionSequModel - - 标记 - Marker - - - 开关名称 - Switch Name - - - 延时 - Delay - - - 目标状态 - Target State - - - 执行状态 - Execution Status - - - 实际状态 - Actual Status - - - 未执行 - non-execution - - - 正在执行 - executing - - - 已触发 - triggered - - - 执行失败 - execution failure - - - 执行成功 - execution success - - - 执行终止 - execution termination - - - 执行暂停 - execution pause - - - 执行跳过 - execution skip - - - - CAddShieldDialog - - 新增告警屏蔽 - New Alarm Shield - - - 对象类型 - Type - - - 显示勾选项 - Show Checked Only - - - 关键字过滤 - Filter by keyword - - - 对象名称 - Name - - - 屏蔽类型 - Shield Type - - - 名称 - Name - - - 时段类型 - Type - - - 结束时间 - End Time - - - 开始时间 - Start Time - - - 一 - Mon - - - 二 - Tue - - - 三 - Wed - - - 四 - Thur - - - 五 - Fri - - - 六 - Sat - - - 七 - Sun - - - 至 - to - - - 日期 - Date - - - 屏蔽描述 - Shield Description - - - 新增 - New - - - 取消 - Cancel - - - 保存 - Save - - - 修改告警屏蔽 - Modify Alarm Shield - - - 编辑告警屏蔽 - Modify Alarm Shield - - - 位置 - Location - - - 设备组 - Device Group - - - 设备 - Device - - - 测点 - Point - - - 一次性 - Once - - - 每周 - Week - - - 每月 - Month - - - 请先取消屏蔽! - Please disable first! - - - 请至少勾选一项! - Please check at least one item! - - - 当前用户无标签设置功能权限! - The current user have no perm to operate! - - - 对象名称不能为空! - Name cannot be empty! - - - 屏蔽类型为空! - Shield type cannot be empty! - - - 时段类型为空! - Time type cannot be empty! - - - 开始时间不能大于结束时间! - Start time cannot be more than end time! - - - 周一到周七至少需要选择一天! - At least check one day from monday to sunday! - - - 获取当前登录用户失败! - Failed to get current user! - - - 保存失败! - Failed to save! - - - 提示 - Prompt - - - - CAiAlarmDelegate - - 当前无告警! - No alarm at present! - - - - CAiAlarmTreeModel - - 时间 - Time - - - 优先级 - Priority - - - 位置 - Location - - - 责任区 - Region - - - 告警类型 - Alarm Type - - - 告警状态 - Alarm State - - - 确认状态 - Confirm State - - - 告警内容 - Alarm Content - - - 复归状态 - Resume State - - - - CAlarmBaseData - - 其他 - Other - - - - CAlarmColorWidget - - Form - Form - - - 动作颜色 - ActionColor - - - 恢复颜色 - ResumeColor - - - 确认颜色 - ConfirmColor - - - 闪烁颜色 - FlickerColor - - - - CAlarmCompare - - Form - Form - - - 告警等级 - Alarm level - - - 统计类型 - StatisType - - - 日 - Day - - - 月 - Month - - - 时间段 - Time - - - 关键字 - Keyword - - - 查询 - Search - - - 11 - 11 - - - 22 - 22 - - - 33 - 33 - - - 警告 - Warning - - - 未选择告警等级 - No alarm level checked - - - 开始时间需小于等于结束时间 - The start time must be equal or less than the end time - - - 当前类型最多七天 - Current statis type up to seven days - - - 当前类型最多六个月 - Current statis type up to six months - - - 请选择位置 - Please select a location - - - 位置最少选择2个 - At least two location - - - 位置最多选择%1个 - Location cannot more than %1 - - - 请选择设备组 - Please select a device group - - - 设备组最多选择%1个 - Device group cannot more than %1 - - - 提示 - Prompt - - - 告警条数过多,仅显示前 %1 条 - Too many alarm,show only %1 - - - yyyy-MM-dd - - - - - - - - - - CAlarmDelegate - - 当前无告警! - No alarm at present! - - - - CAlarmFilterDialog - - 过滤 - Filter - - - 优先级 - Priority - - - 全选 - Check All - - - 位置 - Location - - - 责任区 - Region - - - 告警状态 - Alarm State - - - 复归 - Resume - - - 已复归 - Resumed - - - 未复归 - Unresumed - - - 设备类型 - Device Type - - - 时间 - Time - - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 告警内容关键字 - Alarm Content Keywords - - - 区域 - Location - - - 状态 - State - - - 已确认 - Confirmed - - - 未确认 - Unconfirmed - - - 确定 - Confirm - - - 取消 - Cancel - - - yyyy/MM/dd hh:mm - - - - - CAlarmForm - - Form - Form - - - 导出 - Export - - - 过滤 - Filter - - - 禁止告警列表 - Prohibit List - - - 时间: - Time: - - - 告警状态: - Alarm State: - - - 禁止列表 - Prohibited List - - - 优先级: - Priority: - - - 确认 - Confirm - - - 关闭 - Close - - - 删除 - Delete - - - 0 - 0 - - - 过滤告警数量: - Filtered: - - - 当前显示数量: - Displayed: - - - 位置: - Location: - - - 智能告警 - Intelligent Alarm - - - 设置 - Config - - - 请选择时间 - Select Time - - - 请选择优先级 - Select Priority - - - 请选择位置 - Select Location - - - 请选择告警状态 - Select Alarm State - - - Save File - Save File - - - 提示 - Prompt - - - 导出成功 - Export succeeded - - - 全选 - Check All - - - 全不选 - All Unchecked - - - 视频 - Video - - - 事故追忆 - Accident Memory - - - 禁止告警 - Inhibit Alarm - - - 禁止告警失败! - Failure to inhibit alarm! - - - 警告 - Warning - - - 当前测点告警已禁止,无需重复禁止! - The current Measuring point alarm is forbidden, there is no need to repeat the prohibition! - - - 工单管理 - Work Management - - - 合并 - Merge - - - 分离 - Separate - - - 当前未选中任何项! - No item is currently selected! - - - 当前用户不具备该告警删除操作权限! - The current user does not have the right to delete the alarm operation! - - - 是否跳过该项? - Do you want to skip this item? - - - 跳过 - Skip - - - 全部跳过 - Skip All - - - 取消 - Cancel - - - 包含未确认告警! - Contains unconfirmed alarm! - - - 当前未选中任何智能告警和未聚类的原始告警! - No intelligent alarms and unclustered original alarms is currently selected! - - - 包含未确认原始告警告警! - Contains unconfirmed original warning warning! - - - 当前用户不具备该告警确认操作权限! - The current user does not have the warning to confirm the operation permission! - - - 包含智能告警,无法合并! - Contains intelligent alarm, cannot merge! - - - 包含已经聚类的原始告警,无法合并! - Contains original warnings that have been clustered, cannot be merged! - - - 当前用户无此条原始告警合并权限! - The current user does not have this original warning merge permission! - - - 包含不同域的原始告警,无法合并! - Original alerts containing different domains cannot be merged! - - - 包含智能告警,无法分离! - Contains intelligent warning, cannot separate! - - - 无原始告警,无法分离! - No original warning, no separation! - - - 包含未聚类的原始告警,无法分离! - Contains unclustered original warnings, cannot be separated! - - - 无此条智能告警的编辑权限! - No edit permission of this intelligent alarm! - - - 包含不同智能告警下的原始告警,无法分离! - Contains different intelligent alarms under the original alarm, can not be separated! - - - 请选中含有趋势的告警(模拟量和累积量)! - Please select the alarm with trend(Ai and Pi)! - - - 请选中具有视频的告警! - Please select the alarm with video! - - - 确定 - OK - - - 无禁止告警权限! - Have no perm to inhibit alarm! - - - 初始化权限失败! - Failure to initialize perm! - - - 故障录播暂不实现 - Fault not achieved - - - - CAlarmInhibitDialog - - 禁止告警列表 - Prohibit List - - - 关闭 - Close - - - 取消禁止告警 - Cancel - - - 时间 - Time - - - 优先级 - Priority - - - 位置 - Location - - - 责任区 - Region - - - 告警类型 - Alarm Type - - - 确认状态 - Confirm State - - - 告警内容 - Alarm Content - - - 未确认 - Unconfirmed - - - 已确认 - Confirmed - - - 警告 - Warning - - - 请选择取消禁止告警所在的行! - Please select the row where the alarm is cancelled! - - - - CAlarmItemModel - - 时间 - Time - - - 优先级 - Priority - - - 位置 - Location - - - 责任区 - Region - - - 告警类型 - Alarm Type - - - 告警状态 - Alarm State - - - 确认状态 - Confirm State - - - 告警内容 - Alarm Content - - - 复归状态 - Resume state - - - 未复归 - Resumed - - - 已复归 - Unresumed - - - 未知优先级: - Unknown Priority: - - - 未知位置: - Unknown Location: - - - 未知责任区: - Unknown Region: - - - 未知告警类型: - Unknown Alarm Type: - - - 未知告警状态: - Unknown Alarm State: - - - 未确认 - Unconfirmed - - - 已确认 - Confirmed - - - 其他 - Other - - - - - - - - - CAlarmMsgManage - - 其他 - Other - - - - CAlarmPlugin - - 提示 - Tip - - - 此次一共确认 - A total of - - - 条告警 - alarms were confirmed this time - - - 当前用户不具备该告警确认操作权限! - The current user does not have the warning to confirm the operation permission! - - - 是否跳过该项? - Do you want to skip this item? - - - 跳过 - Skip - - - 全部跳过 - Skip All - - - 取消 - Cancel - - - 包含未确认告警! - Contains unconfirmed alarm! - - - - CAlarmReport - - Dialog - Dialog - - - 导出 - Export - - - 选择导出目录 - Select the export directory - - - - CAlarmSetDlg - - 设置 - Config - - - 动作选择 - Action - - - 声音告警 - Sound alarm - - - 语音告警 - Voice alarm - - - 告警方式 - Alarm method - - - 方式 - Style - - - 次数 - Number of alarms - - - 优先级颜色选择 - Priority color selection - - - <html><head/><body><p>选中告警时,告警的文字颜色</p></body></html> - <html><head/><body><p>The color of alarm text when alarm selected</p></body></html> - - - 选中文字颜色 - Text Selected Color - - - 颜色 - Color - - - <html><head/><body><p>选中告警时,告警的背景颜色</p></body></html> - <html><head/><body><p>The color of alarm backgournd when alarm selected</p></body></html> - - - 选中背景颜色 - Back Selected Color - - - <html><head/><body><p>无告警时,告警小窗中&quot;当前无告警&quot;文字颜色</p></body></html> - <html><head/><body><p>The text color of &quot;No alarm at present&quot; when no alarm</p></body></html> - - - 无告警文字颜色 - Text No Alarm - - - 选中颜色 - Selected color - - - 文字颜色 - Text color - - - 无告警颜色 - No alarm color - - - 语音引擎 - Speech engine - - - 引擎 - Engine - - - 语言 - Language - - - 语音名称 - Voice name - - - 确定 - OK - - - 取消 - Cancel - - - -1:重复 0:不报 x:重复x次 - -1:repeat x:repeat x times - - - 不报 - No Alarm - - - 重复 - Repeat - - - 重复x次 - Repeat x times - - - - CAlarmSetMng - - 当前无告警! - No alarm at present! - - - 未知告警等级 - Unknown Alarm Level - - - - CAlarmShield - - 屏蔽设备树 - Device Tree - - - 新增 - New - - - 批量启用 - Enable - - - 批量取消 - Disable - - - 批量删除 - Delete - - - 屏蔽状态 - Shield Status - - - 名称 - Name - - - 查询 - Search - - - 提示 - Prompt - - - 请勾选一条未启用的屏蔽信息! - Please check a disable shield info! - - - 屏蔽失败! - Enable failure! - - - 请勾选一条已启用的屏蔽信息! - Please check a enable shield info! - - - 解除失败! - Disable failure! - - - 请先取消屏蔽! - Please disable first! - - - 请勾选一条屏蔽信息! - Please check a shield info! - - - 删除失败! - Delete failure! - - - 全部 - All - - - 未启用 - Disable - - - 已启用 - Enable - - - 已过期 - Expired - - - CAlarmShield - - - - - CAlarmShiledDialog - - 禁止告警 - Inhibit Alarm - - - 未找到插件 - No Plugin - - - 装载异常 - Load abnormal - - - - CAlarmStatisTableModel - - 统计日期 - Statistical Date - - - 区域名称 - Location - - - 设备类型 - Device Type - - - %1总数 - Number of %1 - - - - CAlarmStatisWidget - - 区域: - Location: - - - 统计方式: - Statistical Style: - - - 设备类型: - Device Type: - - - 开始时间: - Start Time: - - - 结束时间: - End Time: - - - 查询 - Search - - - 打印 - Print - - - 清除 - Clear - - - 日统计 - Day - - - 月统计 - Month - - - 年统计 - Year - - - 提示 - Prompt - - - 结束时间不能小于开始时间! - The end time cannot be less than start time! - - - 保存 - Save - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 保存失败 - Failed to save - - - - CAlarmStatistics - - CAlarmStatistics - 告警统计 - - - 位置 - Location - - - 告警等级 - Alarm Level - - - 时间段 - Time - - - 关键字 - Keyword - - - 查询 - Search - - - 普通告警 - Alarm - - - 智能告警 - Intelligent Alarm - - - 告警比对 - Alarm Compare - - - 分析报告 - Analysis Report - - - 22 - 22 - - - 33 - 33 - - - 警告 - Warning - - - 未选择告警等级 - No alarm selected - - - 开始时间需小于等于结束时间 - The start time must equal or less than the end time - - - yyyy-MM-dd - - - - - - - - - - CAlarmTaskMngDlg - - 工单管理 - Work management - - - 作业组状态: - Work status: - - - 未创建 - No created - - - 创建作业组 - Create job group - - - 查看作业组 - View job group - - - 查看资产 - View assets - - - 提醒 - Remind - - - 艾动接口初始化失败 - Idong interface failed to initialize - - - 未关联作业组,请先关联作业组 - Assignment group not associated,please associate first - - - 创建作业组成功 - Successfully created job group - - - 创建作业组失败 - Faild to create job group - - - 获取作业组信息失败 - Failed to obtain job group information - - - - CAlarmWidget - - 确认 - Confirm - - - 当前用户不具备该告警所在位置的操作权限! - The current user does not have the operation authority of the location of the alarm! - - - 当前用户不具备该告警所在责任区的操作权限! - The current user does not have the operation authority of the responsible area of the alarm! - - - - CAssetDataMng - - 需要导入的资产信息为空 - Asset info is empty - - - 数据库打开失败,导入资产信息失败 - Failure to open database,failure to import asset info - - - 满足条件的导入条数为0 - No matched number - - - 执行插入语句失败,导入资产信息失败 - Failure to insert sql,failure to import asset info - - - 一共%1条,成功导入%2条 - Total %1,%2 import successful - - - 需要导入的维护记录为空 - Maintenance records is empty - - - 数据库打开失败,导入维护记录失败 - Failure to open database,failure to import maintenance records - - - 执行插入语句失败,导入维护记录失败 - Failure to insert sql,failure to import maintenance records - - - - CAssetTableModel - - 设备名称 - Device Name - - - 备注 - Remark - - - 设备ID - DeviceId - - - 型号 - Type - - - 参数 - Parameter - - - 安装日期 - Installation Date - - - 状态 - Status - - - 厂家联系方式 - Manufacturer Contact - - - 维护周期 - Maintenance Period - - - 一个月 - One Month - - - 三个月 - Three Months - - - 半年 - Six Months - - - 一年 - One Year - - - - CAssetView - - 全选 - Check All - - - 全不选 - Unchecked All - - - - CAssetWidget - - 添加 - Add - - - 删除 - Delete - - - 导入 - Import - - - 导出 - Export - - - 关键字 - Keywords - - - 查询 - Search - - - 未知设备组 - Unknonwn device group - - - Save File - Save File - - - 当前未选中任何项! - No item is currently selected! - - - CAssetWidget - - - - 位置/设备组 - Location/DeviceGroup - - - 设备组 - DeviceGroup - - - 设备管理 - DeviceManage - - - 添加资产信息 - Add asset info - - - 同时会删除维护记录 - Delete maintenance records at the same time - - - 对设备名称、型号、参数和内容生效 - Effective for device name、type、parameter and content - - - 未知位置 - Unknonwn location - - - 提示 - Prompt - - - 所属设备组 - Device Group - - - Open File - - - - 请先选中位置或设备组 - Please select location and device group first - - - 设备组为空 - Device group is empty - - - 添加成功! - Successful add! - - - 删除失败! - Failure to delete! - - - 删除成功! - Successful delete! - - - 资产信息 - Asset info - - - 维护记录 - Maintenance records - - - - CBIWidget - - 用户不具有指定权限 - The user does not have the specified permissions - - - 无用户登录信息 - No user login information - - - 输入名称不存在 - The input name does not exist - - - 输入名称不唯一 - The input name is not unique - - - 不允许在该节点登录 - Logon on this node is not allowed - - - 用户口令错误 - Password error - - - 用户已失效 - User deactivated - - - 用户已锁定 - User locked - - - 用户不属于所选用户组 - The user does not belong to the selected user group - - - 未知错误,系统可能未正常启动 - Unknown error, system may not start properly - - - 未知错误 - Unknown error - - - 内存出错 - Memory error - - - - CButtonGroupWidget - - 配置错误! - Configuration error! - - - - CColorLabel - - 颜色选择 - Select Color - - - - CCombBoxDelegate - - 星期日 - Sunday - - - 星期一 - Monday - - - 星期二 - Tuesday - - - 星期三 - Wednesday - - - 星期四 - Thursday - - - 星期五 - Friday - - - 星期六 - Saturday - - - 否 - No - - - 是 - Yes - - - - CConditionModel - - 参数 - Parameter - - - 条件 - Condition - - - 且 - And - - - 小于 %1 - less than %1 - - - 小于等于 %1 - equal or less than %1 - - - 等于 %1 - equal to %1 - - - 大于等于 %1 - equal or more than %1 - - - 大于 %1 - more than %1 - - - 不等于 %1 - not equal to %1 - - - - CConstCurves - - 查询 - Search - - - 名称 - Name - - - 值 - Value - - - CConstCurves - - - - 提示 - Prompt - - - %1 定值读取失败: %2 - %1 failure to read const: %2 - - - %1 定值读取超时 - %1 timeout - - - %1 下发定值读取命令失败 - %1 failure to send read command - - - - CCurveChartView - - 位置: - Location: - - - 设备类型: - DeviceType: - - - - CCurveLegendModel - - 颜色 - Color - - - 值 - Value - - - 最大值 - Maximum - - - 最大值时间 - Maximum Time - - - 最小值 - Minimum - - - 最小值时间 - Minimum Time - - - 平均值 - Average Value - - - 单位 - Unit - - - Y轴缩放系数 - Yaxis Scaling Factor - - - Y轴偏移系数 - Yaxis Offset Factor - - - 名称 - Name - - - 设备组-测点 - DeviceGroup-Point - - - - CCurveLegendView - - 全不选 - Unchecked All - - - 删除 - Delete - - - 查看最大值 - Show Maximum - - - 查看最小值 - Show Minimun - - - - CDataOptWidget - - 专业 - Subsystem - - - 位置 - Location - - - 刷新 - Refresh - - - 全部 - All - - - 未知 - Unknown - - - CDataOptWidget - - - - 位置: - Location: - - - 标签类型: - Type: - - - 设备组 - Device Group - - - 设备 - Device - - - 标签名 - Point Name - - - 标签类型 - Type - - - 操作时间 - Operate Time - - - 设置值 - Value - - - 状态文本 - State Text - - - 主机 - Hostname - - - 操作员 - Operator - - - 用户组 - UserGroup - - - 点标签 - Point Tag - - - 表名 - Table Name - - - 总数 - Total - - - 取消设置 - Cancel - - - 无取消人工置数权限! - Have no perm to cancel manual setting! - - - 初始化权限失败! - Failure to initialize perm! - - - 提示 - Prompt - - - 请至少选择一项人工置数信息! - Please select a record first! - - - 获取标签操作信息有误,%1 - Failure to read tag operate record,%1 - - - 获取标签信息有误,%1 - Failure to read tag info,%1 - - - 下发取消命令失败 - Failure to send cancel command - - - - CDataOptWork - - 读取标签信息表失败 - Failure to read tag info - - - - CDevHisDataWidget - - 区域: - Location: - - - 开始时间: - Start Time: - - - 设备类型: - Device Type: - - - 结束时间: - End Time: - - - 设备名称: - Device Name: - - - 查询 - Search - - - 打印 - Print - - - 清除 - Clear - - - 保存 - Save - - - 提示 - Prompt - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 保存失败 - Failed to save - - - CDevHisDataWidget - - - - yyyy-MM-dd HH:mm - - - - Excel - - - - Pdf - - - - - CDevHisTableModel - - 日期/时间 - Date/Time - - - 设备名称 - Device Name - - - 所属区域 - Location - - - - CDevRealDataWidget - - 位置 - Location - - - 点类型 - Point Type - - - 设备 - Device - - - 设备组 - DevGroup - - - 专业 - Subsystem - - - 过滤 - Filter - - - 按测点过滤 - Filter by measuring point - - - 禁止告警 - Inhibit Alarm - - - 全部 - All - - - 模拟量 - Analog - - - 数字量 - Digital - - - 累积量 - Accuml - - - 混合量 - Mix - - - 查询 - Search - - - 所有 - All - - - CDevRealDataWidget - - - - 关键字查询 - Search by keywords - - - 禁止控制 - Prohibit Control - - - 恢复控制 - Resume Control - - - 禁止刷新 - Prohibit Refresh - - - 恢复刷新 - Resume Refresh - - - 恢复告警 - Resume Alarm - - - 人工置数 - Manual Setting - - - 取消置数 - Cancel Setting - - - 请至少选择一项! - Please select at least one! - - - 行“%1”,%2 - Row“%1”,%2 - - - “%1”等,共(%2)项 - “%1”,total(%2) - - - “%1”,%2 - - - - 下发取消命令失败 - Failure to send cancel command - - - 提示 - Prompt - - - 获取登录信息失败! - Failure to get login info! - - - 获取登录账户失败! - Failure to get login user! - - - 无标签操作权限! - Have no perm to operate! - - - - CDevTreeModel - - 位置/设备组/设备 - Location/DevGroup/Device - - - - CDevTreeView - - 全选 - Check All - - - 清空 - Clear - - - - CDisposalPlanDialog - - Dialog - Dialog - - - 告警时间: - Alarm Time: - - - 告警内容: - Alarm Content: - - - 处置预案: - Disposal Plan: - - - 处置预案 - Disposal Plan - - - - CDrillDownChart - - 位置 - Location - - - 总共: - Total: - - - - CDropListWidget - - 删除选中项 - Delete the selected item - - - - CDutyDefineDialog - - Dialog - Dialog - - - 保存 - Save - - - 添加一行 - Add a row - - - 删除最后一行 - Delete the last row - - - - CDutySetting - - 导出 - Export - - - 保存 - Save - - - CDutySetting - - - - 用户组 - UserGroup - - - 上一周 - Last week - - - 本周 - This week - - - 下一周 - Next week - - - 引用上周 - Refer to last week - - - 班次管理 - Shift management - - - 选择导出目录 - Select the export directory - - - - CEditCollectWidget - - 趋势名称: - Trend Name: - - - 确定 - Confirm - - - 取消 - Cancel - - - - CEventDataCollect - - 其他 - Other - - - - CEventFilterDialog - - 过滤 - Filter - - - 优先级 - Priority - - - 全选 - Check All - - - 位置 - Location - - - 责任区 - Responsibility Area - - - 事件状态 - Event State - - - 设备类型 - Device Type - - - 事件内容关键字 - Event content keywords - - - 时间 - Time - - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 确定 - Confirm - - - 取消 - Cancel - - - yyyy/MM/dd hh:mm - - - - 区域 - Location - - - 复归 - Resume - - - 已复归 - Resumed - - - 未复归 - unResumed - - - 提示 - Prompt - - - 历史事件过滤必须选择时间! - Select time before filter! - - - 开始时间不能大于结束时间! - The start time cannot more than the end time! - - - 时间间隔不得超过90天! - The time interval cannot more than 90 days! - - - - CEventForm - - 事件 - Event - - - 位置: - Location: - - - 时间: - Time: - - - 过滤 - Filter - - - 清空 - Clear - - - 导出 - Export - - - 优先级: - Priority: - - - 关闭 - Close - - - 事件状态: - Event State: - - - 事件总数: - Number of Event: - - - 请选择时间 - Select time - - - 请选择优先级 - Select priority - - - 请选择位置 - Select location - - - 请选择告警状态 - Select Alarm State - - - 请选择事件状态 - Select event state - - - 事故追忆 - Accident Memory - - - 实时事件 - RealTime Event - - - 历史事件 - Historical Event - - - 实时事件总数: - RealTime Event: - - - 正在查询历史事件... - Querying historical events... - - - 错误 - Error - - - 当前用户不具备事件浏览权限 - The current user does not have the right to browse the events - - - 导出成功 - Export succeeded - - - 历史事件数量: - History Event: - - - 提示 - Prompt - - - %1 历史事件数量超出%2条,未予显示! - The number of %1 historical events exceeds %2,not displayed! - - - 实时事件总数: - Total number of realtime event: - - - 0 - 0 - - - 历史事件总数: - Total number of historical event: - - - 历史事件数量: - Number of historical event: - - - 历史事件数量超出10000条,超出部分不显示 - The number of historical events beyond 10000,the excess part does not show - - - 历史事件数量超出%1条,未予显示! - The number of historical events beyond %1,not shown! - - - Save File - Save File - - - - CEventHistoryModel - - 时间 - Time - - - 优先级 - Priority - - - 位置 - Location - - - 责任区 - Responsibility Area - - - 事件类型 - Event Type - - - 事件状态 - Event State - - - 确认人 - Confirmor - - - 确认时间 - Confirm time - - - 事件内容 - Event Content - - - 复归状态 - Resume Status - - - 未复归 - unResumed - - - 已复归 - Resumed - - - - CEventItemModel - - 时间 - Time - - - 优先级 - Priority - - - 位置 - Location - - - 责任区 - Responsibility Area - - - 事件类型 - Event Type - - - 事件状态 - Event State - - - 事件内容 - Event Content - - - 复归状态 - Resume Status - - - 未复归 - unResumed - - - 已复归 - Resumed - - - - CFaultRecallRecordWidget - - 位置 - Location - - - 名称 - Name - - - 刷新 - Refresh - - - 清空 - Clear - - - 删除 - Delete - - - 全部 - All - - - CFaultRecallRecordWidget - - - - 开始时间 - Start time - - - 结束时间 - End time - - - 画面 - Graph - - - 播放 - Play - - - 提示 - Prompt - - - 请选择一项记录! - Please select a record! - - - 确定开始播放“%1”? - Confirm to start playing “%1”? - - - 请选择删除项! - Please select a record! - - - 确定删除记录“%1”? - Confirm to delete “%1”? - - - 打开数据库失败。 - Failure to open database. - - - 删除“%1”失败! - Failure to delete “%1”! - - - 确定清空所有记录? - Confirm to clear all records? - - - 清空失败! - Failure to clear! - - - - CGroupManageDialog - - 轮询组配置 - Polling Group - - - 新增 - Add - - - 删除 - Delete - - - 保存 - Save - - - 轮询组 - Group - - - 提示 - Prompt - - - 轮询组不能为空! - Polling group cannot be empty! - - - 轮询组不能重复! - Polling group cannot repeat! - - - 轮询组不能有特殊符号! - Polling group invalid! - - - - CHangPanelWidget - - 位置 - Location - - - 设备名称 - Device Name - - - 专业 - Subsystem - - - 操作主机 - Hostname - - - 操作人 - Operator - - - 刷新 - Refresh - - - 未知 - Unknown - - - CHangPanelWidget - - - - 位置: - Location: - - - 专业: - Subsystem: - - - 设备组 - Device Group - - - 挂牌类型 - Type - - - 挂牌时间 - Time - - - 操作人组 - Operator Group - - - 备注信息 - Remark - - - 标签名 - Tag Name - - - 总数 - Total - - - 取消挂牌 - Cancel - - - 无取消挂牌操作权限! - Have no perm to operate! - - - 初始化权限失败! - Failure to initialize perm! - - - 提示 - Prompt - - - 请选择一项挂牌信息! - Please select a record! - - - 获取标签挂牌信息有误,%1 - Failure to read token info,%1 - - - 下发取消挂牌命令失败 - Failure to send cancel command - - - - CHangPanelWork - - 读取标签信息表失败 - Failure to read tag info - - - - CHisEventManage - - 未查询到该设备相关事件! - No event related to this device was found! - - - - CHistoryActionModel - - 动作 - Action - - - 车站 - Location - - - 描述 - Description - - - 执行结果 - Executing results - - - 位置 - Location - - - - CHistoryLinkFilterDialog - - 过滤 - Filter - - - 位置 - Location - - - 用户 - User - - - 结果 - Result - - - 类型 - Type - - - 时间 - Time - - - 起始时间: - Start Time: - - - 结束时间: - End Time: - - - 执行成功 - execution success - - - 执行失败 - execution failure - - - 执行终止 - execution termination - - - 执行跳过 - execution skip - - - 标准联动 - Standard Linkage - - - 自定义联动 - Custom Linkage - - - - CHistoryLinkModel - - 名称 - Name - - - 车站 - Location - - - 时间 - Time - - - 用户 - User - - - 类型 - Type - - - 执行结果 - Executing results - - - 位置 - Location - - - - CHistorySequenceFilterDialog - - 过滤 - Filter - - - 位置 - 车站 - Location - - - 用户 - User - - - 结果 - Result - - - 类型 - Type - - - 标准顺控 - Standard sequence - - - 自定义顺控 - Custom sequence control - - - 时间 - Time - - - 起始时间: - Start Time: - - - 结束时间: - End Time: - - - 执行成功 - execution success - - - 执行失败 - execution failure - - - 执行终止 - execution termination - - - 执行跳过 - execution skip - - - - CHistorySequenceModel - - 名称 - Name - - - 车站 - Location - - - 时间 - Time - - - 用户 - User - - - 类型 - Type - - - 执行结果 - Executing results - - - 位置 - Location - - - 标准顺控 - Standard sequence control - - - 自定义顺控 - Custom sequence - - - - CLimitOptWidget - - 确认 - Confirm - - - 关闭 - Close - - - 未知 - Unknown - - - 否 - No - - - 是 - Yes - - - CLimitOptWidget - - - - 提示 - Prompt - - - %1[%2-%3], 无标签操作权限! - %1[%2-%3], not perm! - - - 设备属性 - Name - - - 是否越限 - Limit - - - 越限级别数量 - Limit Number - - - 越上限 - Upper Limit - - - 越下限 - Lower Limit - - - 越上上限 - Upper Limit 2 - - - 越下下限 - Lower Limit 2 - - - 越三级上限 - Upper Limit 3 - - - 越三级下限 - Lower Limit 3 - - - 越上限应大于越下限! - The upper limit must more than the lower limit! - - - 越上上限应大于越下下限! - The upper limit 2 must more than the lower limit 2! - - - 越下下限应小于越下限! - The lower limit 2 must less than the lower limit! - - - 越上上限应大于越上限! - The upper limit 2 must more than the upper limit! - - - - CLimitOptWork - - 系统初始化失败! - Failure to initialize system! - - - 更改是否越限失败! - Failure to set isLimit! - - - 更改越限信息失败! - Failure to change limit info! - - - 越限设置 - Set limit - - - 取消越限设置 - Cancel limit - - - 操作员: - Operator: - - - 操作主机: - Hostname: - - - - CLineEditWithBtn - - 选择文件 - Select file - - - - CLinkCtrlTableModel - - 联动名称 - Linkage Name - - - 联动类型 - Linkage Type - - - 联动状态 - Linkage State - - - 执行方式 - Executive Mode - - - 触发时间 - Trigger Time - - - 车站火灾 - Location fire - - - 区间阻塞 - Interval blocking - - - 日常运营 - Daily operations - - - 自定义1 - Custom 1 - - - 自定义2 - Custom 2 - - - 未执行 - non execution - - - 正在执行 - executing - - - 已触发 - triggered - - - 执行失败 - execution failure - - - 执行成功 - execution success - - - 执行终止 - execution termination - - - 执行暂停 - execution pause - - - 执行跳过 - execution skip - - - 全自动 - Automatic - - - 半自动 - Simi-automatic - - - 手动 - Manual - - - - CLinkCtrlTreeModel - - 内容 - Content - - - 选择 - Select - - - 执行方式 - Executive Mode - - - 延迟时间 - Delay Time - - - 失败处理 - Failure handling - - - 执行状态 - Executive state - - - 串行 - Serial - - - 并行 - Parallel - - - 秒 - second - - - 自动跳过 - Automatic skip - - - 人工干预 - Manual intervention - - - 终止联动 - 自动终止 - Linkage termination - - - 执行下个功能 - 自动重试 - Next Function - - - 未执行 - non execution - - - 正在执行 - executing - - - 已触发 - triggered - - - 执行失败 - execution failure - - - 执行成功 - execution success - - - 执行终止 - execution termination - - - 执行暂停 - execution pause - - - 执行跳过 - execution skip - - - - CLinkCtrlWidget - - 联动 - Linkage - - - 联动分类 - Classification of Linkage - - - 待执行联动 - Pending linkage - - - 所有联动 - All linkage - - - 联动类型 - Linkage Type - - - 车站火灾 - Location fire - - - 区间阻塞 - Interval blocking - - - 日常运营 - Daily operations - - - 自定义1 - Custom 1 - - - 自定义2 - Custom 2 - - - 联动列表 - LinkageList - - - 搜索 - Search - - - 动作列表 - ActionList - - - 终止 - Terminate - - - 执行 - Execute - - - 单步 - Step - - - 暂停 - Pause - - - 导出 - Export - - - 打印 - Print - - - 当前用户不具备联动操作权限! - The current user does not have linkage operation authority! - - - 错误 - Error - - - 当前未选中联动 - Not linkage selected currently - - - 继续 - continue - - - 联动名称: - Linkage Name: - - - 错误代码: - Error code: - - - 错误描述: - Error description: - - - 联动操作请求失败 - Linkage operation request failed - - - 执行失败,请求人工干预! - Execution failed, manual intervention request! - - - 功能名称: - Function name: - - - 动作名称: - Action name: - - - 人工干预请求 - Manual intervention request - - - 重试 - Retry - - - 跳过 - Skip - - - Save File - Save File - - - 联动报告 - Linkage Report - - - 历史列表 - HistoryList - - - 执行详情 - Execute Detail - - - 过滤 - Filter - - - (*.pdf *) - - - - - CLocationSequModel - - 标记 - Marker - - - 场站 - Location - - - 顺控名称 - Sequence name - - - 执行状态 - Executive state - - - 未执行 - non-execution - - - 正在执行 - executing - - - 已触发 - triggered - - - 执行失败 - execution failure - - - 执行成功 - execution success - - - 执行终止 - execution termination - - - 执行暂停 - execution pause - - - 执行跳过 - execution skip - - - - CMainWidget - - 告警统计 - Alarm Statistic - - - 告警对比 - Alarm Compare - - - - CMediaAVWidget - - Form - Form - - - current time - - - - duration - - - - 多媒体 - Multimedia - - - - CMediaWidget - - CRobotLinkCtrlWidget - - - - 多媒体 - Multimedia - - - - CMyCalendar - - Form - Form - - - 至 - To - - - 取消 - Cancel - - - 确认 - Confirm - - - - CNavigationConfigDialog - - 打开 - Open - - - 新建项目_ - New Item - - - - CNavigationWidget - - 导入 - Import - - - 导出 - Export - - - 当前节点名称 - Node Name - - - 画面文件 - Data File - - - 图标文件 - Icon File - - - 上级节点名称 - Second Node - - - 上上级节点名称 - First Node - - - 是 - Yes - - - 否 - No - - - 提示 - Prompt - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 保存失败 - Failure to save - - - 切换画面 - switch graph - - - 调用程序 - call program - - - 一级 - First Level - - - 二级 - Second Level - - - 三级 - Third Level - - - 是否使用 - Enable - - - 操作 - Operate - - - 图标 - Icon - - - 数据 - Data - - - web发布 - web publish - - - 属性配置 - Attribute Configuration - - - 全部展开 - ExpandAll - - - 全部收缩 - CollapseAll - - - - COperationOrderForm - - 典型票库 - Library - - - 操作开始时间 - Start Time - - - 操作结束时间 - End Time - - - 操作票号: - Operation Banks: - - - 操作任务 - Operation tasks - - - 备注: - Remark: - - - 操作人 - Operator - - - 监护人 - Guardian - - - 值班负责人 - Principal - - - 增加 - Add - - - 删除 - Delete - - - 上移 - Up - - - 下移 - Down - - - 保存 - Save - - - 打印 - Print - - - 预览 - Preview - - - 提示 - Prompt - - - 打开历史表失败! - Failed to open history table! - - - 保存失败! - Save failed! - - - 操作票号:kbdct_ - Operation Banks:kbdct_ - - - 操作开始时间: - Start Time: - - - 操作结束时间: - End Time: - - - 备注:<br> - Remark:<br> - - - 操作人: - Operator: - - - 监护人: - Guardian: - - - 值班负责人: - Principal: - - - 步骤 - Steps - - - 备注 - Remark - - - 行:%1 保存失败! - Row:%1 save failed! - - - 保存成功! - Save successed! - - - 典型票名为空! - Typical ticket name is null! - - - 操作票号为空! - Operation Banks is null! - - - 操作人为空! - Operator is null! - - - 监护人为空! - Guardian is null! - - - 值班负责人为空! - Principal is null! - - - 行:%1 顺序为空! - Row : %1 number is null! - - - 行:%1 与行:%2 顺序重复! - Row : %1 and Row : %2 have the same number! - - - 行:%1 操作任务为空! - Row : %1 operation tasks is null! - - - 典型票名已存在! - Typical ticket name already exist! - - - 典型票名: '%1' 保存失败! - Typical ticket name: '%1' save failed! - - - 是否保存更改? - Save the change ? - - - 打印成功! - Print successfully! - - - 打印失败! - Print failed! - - - 保存模板 - Save - - - 开票打印 - Print - - - 电子签章 - Electronic signature - - - yyyy/MM/dd HH:mm:ss - - - - 结束时间 - End Time - - - 操作票号 - Operation Banks - - - 开始时间 - Begin Time - - - 签章 - Signature - - - 操作内容 - Operation Content - - - key_id_tag - - - - ctrl_value - - - - 行:%1 操作内容为空! - Row:%1 Operate content is empty! - - - 已经存在“%1”,是否覆盖? - “%1” is already exist,replace? - - - 操作票号: - Operation Banks: - - - 操作开始时间: - Operation begin time: - - - 操作结束时间: - Operation end time: - - - 操作任务: - Operation task: - - - 当前登录用户无运维管理功能权限! - Current user have no perm to operate! - - - - COperationOrderModelForm - - 提示 - Prompt - - - 是否保存模板更改? - Save the template change? - - - - COrderManageWidget - - 典型票管理 - Typical ticket management - - - 刷新 - Refresh - - - 删除 - Delete - - - 编辑 - Edit - - - 典型票库 - Typical ticket library - - - 序号 - number - - - 操作序列简述 - Description of operation sequence - - - 删除 (%1) - Delete(%1) - - - 请选中一条记录! - Please select a record! - - - 提示 - Prompt - - - 是否删除 %1 ? - Delete %1 ? - - - 删除失败! - Delete failed! - - - 自动开票 - Automatic Ticket - - - 当前登录用户无运维管理功能权限! - Current user have no perm to operate! - - - - CPlanCurvesConfigure - - 类型配置 - Type Config - - - 年时段配置 - Year Interval Config - - - 周时段配置 - Week Interval Config - - - 日时段模板配置 - Day Interval Temp Config - - - 计划曲线配置 - PlanCurve Config - - - 新建类型 - New Type - - - 保存 - Save - - - 计划类型 - Plan Type - - - 删除 - Delete - - - 新建模板类型 - New Temp Type - - - 日时段模板类型 - Day Interval Temp Type - - - 新建年时段配置 - New Year Interval - - - 新建周时段配置 - New Week Interval - - - 新建日时段配置 - New Day Interval - - - 日模板类型 - Day Temp Type - - - 新建计划曲线 - New PlanCurve - - - 关联标签 - Related Tag - - - 计划曲线名称 - Name - - - 类型ID - Type ID - - - 所属位置 - Location - - - 所属专业 - Subsystem - - - 时段曲线配置 - Interval Curve Config - - - 导入模板 - Import Temp - - - 新建 - New - - - 预览 - Preview - - - 否 - No - - - 是 - Yes - - - 星期日 - Sunday - - - 星期一 - Monday - - - 星期二 - Tuesday - - - 星期三 - Wednesday - - - 星期四 - Thursday - - - 星期五 - Friday - - - 星期六 - Saturday - - - 类型名称 - Name - - - 年时段名称 - Name - - - 是否例外 - isException - - - 开始月 - Start Month - - - 开始日 - Start Day - - - 结束月 - End Month - - - 结束日 - End Day - - - 周时段名称 - Name - - - 星期 - Week - - - 年时段 - Year Interval - - - 周时段 - Week Interval - - - 日时段名称 - Name - - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 值 - Value - - - 提示 - Prompt - - - 保存成功! - Save Successfully! - - - 保存失败! - Save failed! - - - 行: %1 结束时间不能小于开始时间! - Row:%1 End time cannot less than start time! - - - 行: %1 与行:%2 时间段不连续! - Row: %1 is not discontinuous with Row: %2! - - - 周时段配置需覆盖一整周 - Week interval configuration needs to cover the entire week - - - %1 : 开始月不能大于结束月! - %1 : Begin month cannot be bigger than the end month! - - - %1 : 开始日不能大于结束日! - %1 : Begin day cannot be bigger than the end day! - - - 年配置需要覆盖全年! - Year interval configuration need to cover the whole year! - - - 请从1月1日开始配置! - Please start configuration from January 1st! - - - 请配置到12月31日! - Please configure until December 31! - - - 模拟量出口 - Analog output - - - 是否删除曲线'%1'? - Delete curve '%1' ? - - - 删除成功! - Delete successfully! - - - 删除失败! - Delete failed! - - - 计划类型为空,请检查类型配置! - The plan type is empty,please check type config! - - - 周时段配置被使用,无法保存! - Week interval configuration is in use, cannot be saved! - - - 日模板类型为空,请检查类型配置! - The day temp type is empty,please check type config! - - - 未找到年描述 - No year description found - - - 未找到周描述 - No week description found - - - 导入失败 - Import failed - - - 导入成功 - Import successfully - - - - CPlotWidget - - Form - Form - - - 对比 - Contrast - - - 告警描点 - Alarm Plot - - - 收藏 - Collect - - - 导出 - Export - - - 打印 - Print - - - 日 - Day - - - 实时 - Real - - - 周 - Week - - - 月 - Month - - - 季 - Quarter - - - 年 - Year - - - 秒 - Second - - - 自定义 - Custom - - - 趋势图 - Trend Graph - - - 清空 - Clear - - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 查询 - Search - - - 上一页 - Preview - - - 下一页 - Next - - - 一小时 - One Hour - - - 八小时 - Eight Hour - - - 一天 - One Day - - - 曲线 - Curve - - - 表格 - Table - - - 错误 - Error - - - 当前趋势曲线已达最大支持数量[64]! - The current trend curve has reached the maximum number of supports [64]! - - - 实时趋势 - Realtime - - - 秒趋势 - Second - - - 日趋势 - Day - - - 周趋势 - Week - - - 月趋势 - Month - - - 季度趋势 - Quarter - - - 年趋势 - Year - - - 自定义趋势 - Custom - - - 保存为 - Save as - - - 提示 - Prompt - - - 保存成功 - Save successed - - - 保存失败 - Failure to save - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 请选择告警状态 - Select Alarm State - - - 查询中 - Searching - - - 查询开始时间不能大于结束时间! - The start time cannot more than the end time! - - - 开始时间和结束时间之差不能小于查询时间间隔! - The difference between the start time and the end time cannot less than the time interval! - - - 一秒种 - One Second - - - 一分种 - One Minute - - - 十分种 - Ten Minute - - - yyyy/MM/dd HH:mm - - - - 一秒钟 - One Second - - - 一分钟 - One Minute - - - 十分钟 - Ten Minute - - - 双击输入值 - Input on double click - - - (*.jpg) - - - - (*.xlsx) - - - - - CPointLockWidget - - 添加 - Add - - - 删除 - Delete - - - 确认 - Confirm - - - 闭锁配置 - Interlock Configuration - - - 1-1AH5-断路器 - 1-1AH5 - - - 控制状态 - Control Status - - - 启用 - Enable - - - 取消 - Cancel - - - 条件 - Condition - - - 无 - None - - - 小于 - < - - - 小于等于 - <= - - - 等于 - == - - - 大于等于 - >= - - - 大于 - > - - - 不等于 - != - - - 且 - and - - - 设备列表 - Device List - - - 提示 - Prompt - - - 请选中需要删除的行 - Please select a row - - - 请选择测点标签 - Please add a point - - - 添加失败 - Failure to add - - - - CPointRealDataWidget - - 通讯状态 - Communication status - - - 正常 - Normal - - - 异常 - Abnormal - - - 未找到组号%1! - Not found group %1! - - - - CProcessDialog - - Form - Form - - - 取消 - Cancel - - - - CPropertyDialog - - Dialog - Dialog - - - 备注 - Remark - - - 设备名称 - Device Name - - - 确认 - Confirm - - - 添加 - Add - - - 编辑 - Edit - - - 安装日期 - Installation Date - - - 型号 - Type - - - 参数 - Parameter - - - 维护周期 - Maintenance Period - - - yyyy-MM-dd - - - - 厂家联系方式 - Manufacturer Contact - - - 所属设备组 - Device Group - - - 状态 - State - - - 取消 - Cancel - - - 已启用 - Enable - - - 一个月 - One Month - - - 三个月 - Three Months - - - 半年 - Six Months - - - 一年 - One Year - - - 提示 - Prompt - - - 设备名称不能为空! - Device name cannot be empty! - - - 操作失败,请重新操作! - Failed,please try again! - - - - CRealTableModel - - 测点 - Measuring Point - - - 点类型 - Point Type - - - 设备 - Device - - - 值 - Value - - - 状态 - Status - - - - CRecordDialog - - Dialog - Dialog - - - 导出 - Export - - - 删除 - Delete - - - 添加 - Add - - - 时间 - Time - - - 关键字 - Keywords - - - 查询 - Search - - - 当前未选中任何项! - No item is currently selected! - - - Save File - Save File - - - ~ - - - - 对开始时间和结束时间日期生效 - Effective for start time and end time - - - 对设备名称、记录名称、操作人和维护内容生效 - Effective for device name、record name、operator and maintenance content - - - %1 维护记录 - %1 maintenance records - - - 提示 - Prompt - - - 删除失败! - Failure to delete! - - - 删除成功! - Successful delete! - - - 开始时间不能大于结束时间! - The start time cannot more than end time! - - - - CRecordForm - - Form - Form - - - 序号 - Number - - - 操作人 - Operator - - - 监护人 - Guardian - - - 值班负责人 - Principal - - - 描述 - Description - - - 备注 - Remark - - - 刷新 - Refresh - - - 未执行 - Non execution - - - 未确认 - Unconfirmed - - - 检索条件 - Filter - - - 按值班负责人 - Principal - - - 按票名包含 - Ticket name - - - 按操作人 - Operator - - - 按操作票号 - Operation Banks - - - 按执行时间 - Execution time - - - 按完成时间 - Finish time - - - 按监护人 - Guardian - - - 操作票号 - Operation Banks - - - 操作票名 - Ticket name - - - 开始时间 - Start time - - - 结束时间 - End time - - - 执行状态 - Execution status - - - 详细 - Detail - - - 已执行 - Executed - - - 提示 - Prompt - - - 请选择一项! - Please select one item! - - - - CRecordPropertyDialog - - Dialog - Dialog - - - 确认 - Confirm - - - 添加 - Add - - - 编辑 - Edit - - - 维护名称 - Maintenance name - - - 维护人 - Maintainer - - - 维护开始时间 - Maintenance start time - - - yyyy-MM-dd - - - - 维护结束时间 - Maintenance end time - - - 维护内容 - Maintenance content - - - 取消 - Cancel - - - 提示 - Prompt - - - 记录名称不能为空! - The record name cannot be empty! - - - 开始时间不能大于结束时间! - The start time cannot more than the end time! - - - 操作失败,请重新操作! - Failed,please try again! - - - - CRecordTablModel - - 设备名称 - Device Name - - - 操作人 - Operator - - - 记录名称 - Record name - - - 开始时间 - Start time - - - 结束时间 - End time - - - 维护内容 - Maintenance content - - - - CRecordWidget - - 保存 - Save - - - 处理问题 - Handling problem - - - 上班遗留问题 - Last leftover problem - - - 当班处理问题 - Handling problem on duty - - - 当班遗留问题 - Leftover problem on duty - - - 关键信息备注 - Key information notes - - - - CRelaySettingWidget - - 序号 - Number - - - 确认 - Confirm - - - 清空 - Clear - - - 保护定值管理 - Relay settting management - - - 切换 - Switch - - - 当前执行组: - Current group: - - - 前置设备 - Front equipment - - - 定值名称 - Name - - - 定值组号 - Group No - - - 当前值 - Current Value - - - 预置值 - Preset Value - - - 返校值 - Return Value - - - 范围 - Range - - - 单位 - Unit - - - 定值代号 - Code No - - - isError - - - - 读取 - Read - - - 修改 - Modify - - - 提示 - Prompt - - - 未知值:%1 - Unknown Value:%1 - - - 无保护定值操作权限! - Not relay setting operate perm! - - - 行:%1,当前值无效,请先读取! - Row:%1,current value is invalid,please read first! - - - 行:%1,预置值无效,请先读取! - Row:%1,preset value is invalid,please read first! - - - 行:%1,预置值不在设定范围! - Row:%1,preset value is beyond the range! - - - 行:%1,返校值无效! - Row:%1,return value is invalid! - - - 行:%1,预置值与返校值不一致! - Row:%1,preset value is inconsistent with return value! - - - 请先查询当前执行组! - Please read current group first! - - - 设置的组号应不为当前执行组! - Setting group no cannot equal to current group no! - - - 验证 - Verification - - - 权限验证 - Permissions validation - - - 请选择切换组! - Please select one group! - - - 未选择设备! - Not device selected! - - - 无定值组配置! - Not setting group configuration! - - - 接收超时! - Receive timeout! - - - 发送命令失败! - Failure to send command! - - - - CReportStackedWidget - - 返回 - Return - - - - CReportWidget - - 导出报表 - Export the report - - - - CRobotAVWidget - - Form - Form - - - current time - - - - duration - - - - - CRobotCCDVideoForm - - Form - Form - - - 请输入关键字 - Please input keyword - - - - CRobotCCDVideoItemModel - - 时间 - Time - - - 类型 - Type - - - 设备柜 - Device - - - 照片 - Picture - - - 截图 - Screenshot - - - 录像 - Video - - - - CRobotCtrlWidget - - Form - Form - - - 请选择设备 - - - - 执行任务 - - - - 空闲中 - - - - 巡检中 - - - - 充电中 - - - - 检修中 - - - - 告警联动: - - - - 机器人状态 - - - - 执行任务超时! - - - - 未找到控制点[%s] - - - - 解析返回结果出错 - - - - - CRobotDialog - - Dialog - Dialog - - - 机器人联动 - - - - - CRobotWidget - - CRobotLinkCtrlWidget - - - - - CRollSwitchWidget - - 播放组 - Group - - - 画面文件名称 - Graph Name - - - 画面轮询间隔(s) - Interval - - - 自动轮询 - Autopolling - - - 开始 - Start - - - 停止 - Stop - - - 关闭 - Close - - - 自动轮询时间(s) - Autopolling Delay(s) - - - 自动轮询(设定的时间内,未检测到鼠标移动,自动轮询播放画面) - Autopolling(Auto switching graph when not mouse move in setting time) - - - 轮询时间(s) - Autopolling time(s) - - - - CRunSequenceFilterDialog - - 过滤 - Filter - - - 关键字 - Keywords - - - 顺控名称: - Sequence name: - - - 类型 - Type - - - 标准顺控 - Standard sequence - - - 自定义顺控 - Custom sequence - - - 位置 - 车站 - Location - - - 位置名称: - 车站名称: - Location name: - - - - CRunningSequenceModel - - 名称 - Name - - - 车站 - Location - - - 类型 - Type - - - 执行结果 - Executing results - - - 位置 - Location - - - 标准顺控 - Standard sequence - - - 自定义顺控 - Custom sequence - - - 未执行 - non-execution - - - 正在执行 - executing - - - 已触发 - triggered - - - 执行失败 - execution failure - - - 执行成功 - execution success - - - 执行终止 - execution termination - - - 执行暂停 - execution pause - - - 执行跳过 - execution skip - - - - CSeqPermDialog - - 验证 - Verification - - - 操作验证 - Operation validation - - - 用户组 - User group - - - 姓名 - User name - - - 密码 - Password - - - 账号 - User alias - - - 监护验证 - Guardian validation - - - 取消 - Cancel - - - 监护验证: - Guardian validation: - - - 操作验证: - Operation validation: - - - %1输入名称不存在! - The input name %1 does not exist! - - - %1无遥控监护权限! - %1 have no perm guard! - - - %1无顺控执行权限! - %1 have no perm to execute sequence! - - - %1不允许在该节点登录! - %1 Logon on this node is not allowed! - - - %1用户口令错误! - %1 Password error! - - - %1用户已失效! - %1 User deactivated! - - - %1用户已锁定! - %1 User locked! - - - %1用户不属于所选用户组! - The user %1 does not belong to the selected user group! - - - %1用户权限检查出错! - %1 check failed! - - - 提示 - Prompt - - - 监护验证: 输入账号有误! - Guardian validation: incorrect input name! - - - 监护人和操作人不能为同一人! - Guardian and operator can not be the same person! - - - - CSequenceManageWidget - - 顺控配置 - Configuration - - - 顺控执行 - Execute - - - 顺控报告 - Report - - - 所有顺控 - All sequence - - - 正在执行 - Executing - - - 过滤 - Filter - - - 历史列表 - History List - - - 执行详情 - Execute details - - - 导出 - Export - - - 打印 - Print - - - 提示 - Prompt - - - 无顺控操作权限! - No sequence control operation permission! - - - CSequenceManageWidget - - - - Save File - Save File - - - (*.pdf *) - - - - - CSequenceWidget - - 顺控 - Sequence - - - 顺控名称: - Sequence Name: - - - 执行方式: - Executive Mode: - - - 自动 - Automatic - - - 单步 - Step - - - 执行 - Execute - - - 暂停 - Pause - - - 终止 - Terminate - - - 正在检查控制点状态,请稍等 - Check the status of control point, please wait a moment - - - 正在查询... - Being queried... - - - 服务应答 [%1]:%2 - Service response [%1]:%2 - - - 服务应答-错误 [%1] - Service response-error [%1] - - - 顺控名称: - Sequence name: - - - 错误代码: - Error code: - - - 错误描述: - Error description: - - - 状态变化 [顺控-%1]:%2 - Change of state [Sequence-%1]:%2 - - - 状态变化 [顺控-%1] [功能-%2]:%3 - Change of state [Sequence-%1] [Function-%2]:%3 - - - 状态变化 [顺控-%1] [功能-%2] [动作-%3]:%4 - Change of state [Sequence-%1] [Function-%2] [Action-%3]:%4 - - - 顺控名称 - Sequence name - - - 功能名称 - Function name - - - 动作名称 - Action name - - - 请求人工干预! - Manual intervention request! - - - 人工干预请求 - Manual intervention request - - - 重试 - Retry - - - 跳过 - Skip - - - 等待执行... - Wait for execution... - - - 等待暂停... - Wait for pause... - - - 等待继续... - Wait for continue... - - - 等待终止... - Wait for termination... - - - 顺控开始 - Sequence start - - - 顺控终止 - Sequence termination - - - 顺控暂停 - Sequence pause - - - 顺控继续 - Sequence continue - - - 单步开始 - One step to start - - - 单步继续 - One step to continue - - - 未执行 - non-execution - - - 正在执行 - executing - - - 已触发 - triggered - - - 执行失败 - execution failure - - - 执行成功 - execution success - - - 执行终止 - execution termination - - - 执行暂停 - execution pause - - - 执行跳过 - execution skip - - - 继续 - Continue - - - - - - - - - %1[%2] -%3%4 -%5%6 - - - - - - CShieldTableDelegate - - 删除 - Delete - - - 启用 - Enable - - - 取消 - Disable - - - 提示 - Prompt - - - 请先取消屏蔽! - Please disable first! - - - 删除失败! - Delete failure! - - - 当前用户无标签设置功能权限! - The current user have no perm to operate! - - - - CShieldTableModel - - 名称 - Name - - - 屏蔽类型 - Type - - - 屏蔽属性 - Property - - - 屏蔽模式 - Mode - - - 是否启用 - Status - - - 时段类型 - Time Type - - - 屏蔽时段 - Time - - - 操作用户 - User - - - 操作主机 - Hostname - - - 屏蔽描述 - Description - - - 操作 - Operate - - - 全站屏蔽 - Location - - - 电压屏蔽 - Voltage - - - 责任区屏蔽 - Region - - - 设备组屏蔽 - DeviceGroup - - - 设备屏蔽 - Device - - - 测点屏蔽 - Point - - - 未知 - Unknown - - - 已过期 - Expired - - - 已启用 - Enable - - - 未启用 - Disable - - - 一次性屏蔽 - Once - - - 每周 - Week - - - 每月 - Month - - - 每周( - Week( - - - 每月( - Month( - - - %1 - - - - - CShiftWidget - - 查询 - Search - - - 保存 - Save - - - 序号 - Number - - - 交接班管理 - Shift Management - - - 当前值班组 - Current duty group - - - 填写记录 - Input record - - - 交接班 - Duty shift - - - 查询时间 - Search time - - - 按值班员过滤 - Filter by duty person - - - 导出记录 - Export - - - 班组 - Work groups - - - 值班员 - Duty person - - - 接班时间 - Take over time - - - 交班时间 - Shift time - - - 本班处理问题 - Handling problem on duty - - - 本班遗留问题 - Leftover problem on duty - - - 关键信息备注 - Key information notes - - - - CSimOptWidget - - 序号 - Number - - - CSimOptWidget - - - - 开始模拟操作 - Begin - - - 图形列表 - Graph List - - - 提示 - Prompt - - - 当前登录用户无运维管理功能权限! - Current user have no perm to operate! - - - 请选择一张图形! - Please select one graph! - - - 确定打开图形:"%1",开始模拟操作? - Confirm open graph:"%1",begin simulate? - - - - CSliderRangeWidget - - 最小值: - Minimum: - - - 最大值: - Maximum: - - - 确定 - Confirm - - - 取消 - Cancel - - - - CStatisWidget - - Form - Form - - - 统计方式: - Statistical Style: - - - 设备类型: - Device Type: - - - 开始时间: - Start Time: - - - 结束时间: - End Time: - - - 查询 - Search - - - 打印 - Print - - - 日统计 - Day - - - 月统计 - Month - - - 年统计 - Year - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 结束时间不能小于开始时间! - The end time cannot be less than start time! - - - 位置: - Location: - - - yyyy-MM-dd - - - - 告警等级: - Alarm level: - - - Excel - - - - Pdf - - - - 报表 - Report - - - 图表 - Chart - - - 保存为 - Save as - - - (*.jpg) - - - - 提示 - Prompt - - - 保存失败 - Failed to save - - - 日统计最多查询31天! - Maximum query time was 31 days on day! - - - 月统计最多查询12月! - Maximum query time was 12 months on month! - - - 年统计最多查询2年! - Maximum query time was 2 years on year! - - - 至少勾选一个告警等级! - Check one alarm level at least! - - - - CTableDataModel - - 提示 - Prompt - - - 只显示前%1条记录! - Onle the %1 records is displayed! - - - 时间 - Time - - - - CTableDelegata - - 是 - Yes - - - 否 - No - - - - CTableModel - - 统计日期 - Statistical Date - - - 区域名称 - Location - - - 设备类型 - Device Type - - - %1总数 - Number of %1 - - - - CTableViewExport - - 保存 - Save - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 提示 - Prompt - - - 保存失败 - Failure to save - - - - CTextPrinter - - 另存PDF文件为 - Save as PDF file - - - PDF文件(*.pdf) - PDF file(*.pdf) - - - - CToolTip - - 全部 - All - - - 告警列表 - Alarm List - - - 时间 - Time - - - 告警内容 - Alarm Content - - - - CTrendEditDialog - - 趋势编辑 - Trend Editor - - - 取消 - Cancel - - - 确定 - Confirm - - - 添加 - Add - - - 删除 - Delete - - - 清空 - Clear - - - 警告 - Warning - - - 测点数量不允许为空! - The number of measuring points is not allowed to be empty! - - - 测点名称不允许存在空值! - The name of measuring points are not allowed to be null! - - - 提示 - Prompt - - - 当前未选中行! - Not row selected currently! - - - - CTrendEditModel - - 测点名称 - The name of measuring points - - - 颜色 - color - - - 只能添加模拟量! - Only analog can be added! - - - 该测点已存在! - The measuring point already exists! - - - - CTrendEditView - - 提示 - Prompt - - - 请选中一行! - Select a row please! - - - 警告 - Warning - - - 该测点已存在! - The measuring point already exists! - - - - CTrendFavTreeWidget - - 收藏夹 - Favorite - - - 错误 - Error - - - 当前趋势名称已存在! - The name of trend is already exist! - - - 添加趋势 - Add trend - - - 导入 - Import - - - 显示 - Show - - - 编辑 - Edit - - - 重命名 - Rename - - - 删除 - Delete - - - 导出 - Export - - - 选择趋势收藏文件 - Select file - - - 保存趋势收藏文件 - Save file - - - - CTrendTreeView - - 全选 - Check All - - - 清空 - Clear - - - - CTrendWindow - - 设备/点 - Device/Point - - - 收藏夹 - Favorite - - - 错误 - Error - - - 趋势名称不允许为空! - Trend names are not allowed to be empty! - - - 最小值不能大于最大值! - The minimum cannot be greater than the maximum! - - - - CWaveListDialog - - Dialog - Dialog - - - - CWorkTicketManage - - 票库管理 - Ticket Library - - - 开票 - Ticket - - - 删除 - Delete - - - 开票记录 - Ticket Record - - - 名称 - Name - - - 类型 - Type - - - 文件路径 - File Path - - - 请选中一条记录! - Please select a record! - - - 确认删除 - Confirm - - - 是否删除 %1 ? - Delete %1 ? - - - 提示 - Prompt - - - 删除失败 - Failed to delete - - - Form - Form - - - 当前登录用户无运维管理功能权限! - Current user have no perm to operate! - - - - CWorker - - 设备名称 - Device Name - - - 备注 - Remark - - - 操作人 - Operator - - - 设备id - DeviceId - - - 型号 - Type - - - 参数 - Parameter - - - 安装日期 - Installation Date - - - 状态 - State - - - 厂家联系方式 - Manufacturer Contact - - - 维护周期(月) - Maintenance Period(month) - - - 所属设备组描述 - Device Group - - - 所属设备组标签 - Device Group Tag - - - 导出资产信息成功 - Successful export asset info - - - 记录id - RecordId - - - 设备描述 - Device - - - 记录名称 - Record Name - - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 维护内容 - Maintenance Content - - - 导出维护记录成功 - Successful export maintenance records - - - 导入资产信息失败,文件打开失败! - Failure to import asset info,failed to open file! - - - 部分设备组标签不存在 - Part of device group tag does not exist - - - 导入维护记录失败,文件打开失败! - Failure to import maintenance records,failed to open file! - - - 部分资产不存在 - Part of asset not exist - - - - ConfigWidget - - 分组管理 - Group - - - 新增 - Add - - - 删除 - Delete - - - 上移 - Up - - - 下移 - Down - - - 保存 - Save - - - 轮询组 - Polling Group - - - 画面文件名称 - Graph Name - - - 是否启用 - Enable - - - 画面轮询间隔(s) - Interval - - - 画面文件名称不能为空! - Graph name cannot be empty! - - - 保存成功 - Save success - - - 保存失败 - Fail to save - - - 是 - Yes - - - 否 - No - - - 提示 - Prompt - - - - ContrastWidget - - Form - Form - - - 统计方式: - Statistical Style: - - - 查询 - Search - - - 打印 - Print - - - 清空 - Clear - - - 全选 - Check All - - - 导出成功! -导出路径: - Exported successfully! -Exported path: - - - 对比方式: - Compare Style: - - - 对比时间: - Compare Time: - - - yyyy/MM/dd - - - - Excel - - - - Pdf - - - - 报表 - Report - - - 图表 - Chart - - - 最严重告警设备 - The most serious alarm device - - - 设备 - Device - - - 按位置统计 - Statistics by location - - - 按设备类型统计 - Statistics by device type - - - 日 - Day - - - 月 - Month - - - 年 - Year - - - 提示 - Prompt - - - 请至少选择一项! - Please select one item! - - - : - - - - 总共: - Total: - - - 保存为 - Save as - - - (*.jpg) - - - - 保存失败 - Failed to save - - - - FaultRecordModel - - 时间 - Time - - - 位置 - Location - - - 设备名 - Dev Name - - - 文件名 - File Name - - - - FaultRecordWidget - - 故障录波记录 - Fault Record - - - 位置 - Location - - - 设备 - Dev - - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 刷新 - Refresh - - - 删除 - Delete - - - 打开 - Open - - - 全部删除 - All Delete - - - All - All - - - 提示 - Tip - - - 当前未选中任何项 - No rows are currently selected - - - 开始时间不能大于结束时间! - Start time cannot be greater than end time ! - - - 确定 - OK - - - 不存在%1位置! - Does not exist %1 location ! - - - FaultRecordWidget - - - - 当前用户不具有删除权限 - Current user have not perm to delete - - - - HandoverWidget - - 交接班 - Duty shift - - - 操作记录 - Operate Events - - - 值班信息 - Duty info - - - 关键告警 - Key Alarms - - - 工作票 - Work Tickets - - - 交班班组: - Shift group: - - - 接班班组: - Take over group: - - - 接班员 - Take over person - - - 密码 - Password - - - 接班签到 - Sign in - - - 确认交接 - Confirm to shift - - - 未签到 - Signed In - - - 已签到 - Not Sign In - - - - HistoryWidget - - 开始时间 - Start Time - - - 结束时间 - End Time - - - 查询 - Search - - - 重开 - reTicket - - - 消息 - Infomation - - - 链接数据库错误 - Linked database error - - - 历史数据过多!表格仅展示查询结果的10000条 -更多数据查看,请缩小起始时间和结束时间之差 - Too much historical data! The table shows only 10,000 results of the query -For more data, narrow the gap between the start and end times - - - 请选中一条记录! - Please select a record! - - - 提示 - Prompt - - - - InverseTimeLimit - - InverseTimeLimit - - - - 该功能只支持在windows系统运行 - Only running on windows - - - 曲线配置 - Curve configuration - - - 选择文件 - Select file - - - 生成曲线 - Generate curve - - - 保存模板 - Save as template - - - 设备1 - Device 1 - - - 曲线名称 - Curve name - - - CO曲线 - CO curve - - - EIT - - - - SIT - - - - VIT - - - - UIT - - - - Vb(基准) - Vb(base) - - - Vt(换算) - Vt(conversion) - - - I> - - - - t> - - - - I>> - - - - t>> - - - - 设备2 - Device 2 - - - 设备3 - Device 3 - - - 设备4 - Device 4 - - - 设备5 - Device 5 - - - 设备6 - Device 6 - - - Open File - - - - File (*.xlsx) - - - - Open Config - - - - Config Files (*.xlsx) - - - - - IpcPlusWidget - - 提醒 - Remind - - - IpcPlusWidget - - - - ptz - - - - 调焦 - Focus - - - 聚焦 - Focus - - - 光圈 - Aperture - - - 缩 - In - - - 伸 - Out - - - 近 - In - - - 远 - Out - - - 大 - In - - - 小 - Out - - - 预置点: - Preset: - - - 调用 - Call - - - 内存库读取失败 - Failure to query realtime database - - - - Label - - 打开 - Open - - - - Mainwindow - - Form - Form - - - 票库管理 - Ticket Library - - - 开票记录 - Ticket Record - - - - NavigationConfigDialog - - 导航栏配置 - Configuration of Navigation Bar - - - 导入 - Import - - - 添加节点 - Add Node - - - 删除节点 - Delete Node - - - 清空 - Clear - - - 添加子节点 - Add ChildNode - - - 插入节点 - Insert Node - - - 导航栏 - Navigation Bar - - - 导出 - Export - - - 背景颜色: - Background Color: - - - 文字颜色: - Text Color: - - - 鼠标选中: - Mouse checked: - - - 鼠标悬停: - Mouse hovered: - - - 图标: - Icon: - - - 数据: - Data: - - - 项属性: - Item Property: - - - 节点层级属性: - Node hierarchy properties: - - - 节点状态属性: - Node state properties: - - - 窗口配置: - Window Configuration: - - - 一级节点 - First Node - - - 级别背景颜色: - Background Color: - - - 级别文字颜色: - Text Color: - - - 级别缩进距离: - Indent distance: - - - 二级节点 - Second Node - - - 三级节点 - Third Node - - - 取消 - Cancel - - - 确定 - Confirm - - - + - - - - - - - - - × - - - - ∟ - - - - | - - - - 启用: - Enable: - - - web发布: - web publish: - - - ... - ... - - - 操作: - Operation: - - - px - - - - - QCPItemTracer - - 时间 - Time - - - 事件信息 - Event Infomation - - - - QObject - - 未确认 - Unconfirmed - - - 已确认 - Confirmed - - - 预览 - Preview - - - 打印 - Print - - - 模拟量 - Analog - - - 数字量 - Digital - - - 累积量 - Accuml - - - 混合量 - Mix - - - 其他 - Other - - - 警告 - Warning - - - 未复归 - unResumed - - - 已复归 - Resumed - - - - - - - - 位置列表 - Location List - - - 告警数/智能告警数 - Alarm/Intelligent Alarm - - - - Renderer - - 打开 - Open - - - - SWitchButton - - 打开告警联动失败! - Failure to open alarm linkage! - - - 关闭告警联动失败! - Failure to close alarm linkage! - - - 数据库连接失败! - Failure to connect to database! - - - - SetValueInputDialog - - Dialog - Dialog - - - 确定 - Confirm - - - 取消 - Cancel - - - 设置值 - Setting Value - - - 人工置数 - Manual Setting - - - - UserManageWidget - - UserManageWidget - - - - 提示 - Prompt - - - 用户管理插件用户权限认证库调用失败! - Failure to initialize perm library! - - - 当前用户ID获取失败! - Failure to get current user id! - - - - VoiceSlider - - Form - Form - - - 53 - 53 - - - 0 - 0 - - - - WorkTicketWidget - - 保存 - Save - - - 出票&预览 - Ticket&Preview - - - 保存失败:%1 - Failed to save:%1 - - - 保存成功 - Save successed - - - 获取当前登录用户失败! - Failure to get current user! - - - 事务执行失败!启动回滚 - Transaction execution failed! Start the rollback - - - 出票失败 - Failed to ticket - - - 出票失败:%1 - Failed to ticket:%1 - - - 消息 - Infomation - - - 电子签章 - Electronic signature - - - 出票 - Ticket - - - (签章) - (signature) - - - 创建目录失败: %1 - Failure to create directory:%1 - - - 请先关闭文件: %1 - Please close file:%1 - - - 历史票不存在! - Not historical ticket found! - - - 当前登录用户无运维管理功能权限! - Current user have no perm to operate! - - - 出票失败,请检查网络或者主数据库服务器连接是否异常! - Failure to ticket,please check the network and database server! - - - diff --git a/product/common/resource/en/linkage_server/translate/linkage_server_en.mo b/product/common/resource/en/linkage_server/translate/linkage_server_en.mo deleted file mode 100644 index b1b36d9db63b3ed3fc7b740a4a3a7e973ed32c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7118 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 z - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/APC_DIGITAL.xml b/product/common/resource/en/model_studio/setting/table/APC_DIGITAL.xml deleted file mode 100644 index e56e43f3..00000000 --- a/product/common/resource/en/model_studio/setting/table/APC_DIGITAL.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/ATS_FES_LOCATION_INFO.xml b/product/common/resource/en/model_studio/setting/table/ATS_FES_LOCATION_INFO.xml deleted file mode 100644 index 6a4341b4..00000000 --- a/product/common/resource/en/model_studio/setting/table/ATS_FES_LOCATION_INFO.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/ATS_FES_PLATFORM_INFO.xml b/product/common/resource/en/model_studio/setting/table/ATS_FES_PLATFORM_INFO.xml deleted file mode 100644 index d3ebdcb9..00000000 --- a/product/common/resource/en/model_studio/setting/table/ATS_FES_PLATFORM_INFO.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_CRAFT_DEF.xml b/product/common/resource/en/model_studio/setting/table/BAS_CRAFT_DEF.xml deleted file mode 100644 index 5d1a387c..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_CRAFT_DEF.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_MODE_DEF.xml b/product/common/resource/en/model_studio/setting/table/BAS_MODE_DEF.xml deleted file mode 100644 index e682b209..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_MODE_DEF.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_MODE_TYPE.xml b/product/common/resource/en/model_studio/setting/table/BAS_MODE_TYPE.xml deleted file mode 100644 index f54d6cf5..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_MODE_TYPE.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_CTRL_PARAM.xml b/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_CTRL_PARAM.xml deleted file mode 100644 index 7c2b4cd2..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_CTRL_PARAM.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_DEF.xml b/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_DEF.xml deleted file mode 100644 index a8e069ff..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_DEF.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_INFO.xml b/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_INFO.xml deleted file mode 100644 index 4318fb7d..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_INFO.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_SCHEDULE.xml b/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_SCHEDULE.xml deleted file mode 100644 index fc057e3c..00000000 --- a/product/common/resource/en/model_studio/setting/table/BAS_TIMETABLE_SCHEDULE.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/CALC_FUNC_DEF.xml b/product/common/resource/en/model_studio/setting/table/CALC_FUNC_DEF.xml deleted file mode 100644 index 3cc05131..00000000 --- a/product/common/resource/en/model_studio/setting/table/CALC_FUNC_DEF.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/CALC_GROUP_DEF.xml b/product/common/resource/en/model_studio/setting/table/CALC_GROUP_DEF.xml deleted file mode 100644 index 024a03c6..00000000 --- a/product/common/resource/en/model_studio/setting/table/CALC_GROUP_DEF.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/CALC_IN_PARA.xml b/product/common/resource/en/model_studio/setting/table/CALC_IN_PARA.xml deleted file mode 100644 index bd62abaf..00000000 --- a/product/common/resource/en/model_studio/setting/table/CALC_IN_PARA.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/CALC_OUT_PARA.xml b/product/common/resource/en/model_studio/setting/table/CALC_OUT_PARA.xml deleted file mode 100644 index 8a20f18e..00000000 --- a/product/common/resource/en/model_studio/setting/table/CALC_OUT_PARA.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/CALC_PARA_DEF.xml b/product/common/resource/en/model_studio/setting/table/CALC_PARA_DEF.xml deleted file mode 100644 index a57b2b1b..00000000 --- a/product/common/resource/en/model_studio/setting/table/CALC_PARA_DEF.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF.xml b/product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF.xml deleted file mode 100644 index 219f07cb..00000000 --- a/product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF_61850.xml b/product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF_61850.xml deleted file mode 100644 index 970c065f..00000000 --- a/product/common/resource/en/model_studio/setting/table/DEV_TYPE_DEF_61850.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/DICT_POINT_TYPE.xml b/product/common/resource/en/model_studio/setting/table/DICT_POINT_TYPE.xml deleted file mode 100644 index c9b67c33..00000000 --- a/product/common/resource/en/model_studio/setting/table/DICT_POINT_TYPE.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/DICT_STATE_TEXT_INFO.xml b/product/common/resource/en/model_studio/setting/table/DICT_STATE_TEXT_INFO.xml deleted file mode 100644 index 09ecca66..00000000 --- a/product/common/resource/en/model_studio/setting/table/DICT_STATE_TEXT_INFO.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/DICT_UNIT_INFO.xml b/product/common/resource/en/model_studio/setting/table/DICT_UNIT_INFO.xml deleted file mode 100644 index 350ecf75..00000000 --- a/product/common/resource/en/model_studio/setting/table/DICT_UNIT_INFO.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/DICT_VOL_LEVEL.xml b/product/common/resource/en/model_studio/setting/table/DICT_VOL_LEVEL.xml deleted file mode 100644 index 92f87154..00000000 --- a/product/common/resource/en/model_studio/setting/table/DICT_VOL_LEVEL.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/FAULT_RECALL_COND_DEF.xml b/product/common/resource/en/model_studio/setting/table/FAULT_RECALL_COND_DEF.xml deleted file mode 100644 index ad5a1e3b..00000000 --- a/product/common/resource/en/model_studio/setting/table/FAULT_RECALL_COND_DEF.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION.xml deleted file mode 100644 index 7ac9862e..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_BAS.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_BAS.xml deleted file mode 100644 index 46e4f084..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_BAS.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_MSG.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_MSG.xml deleted file mode 100644 index da85df28..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_MSG.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PA.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PA.xml deleted file mode 100644 index d231bc31..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PA.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PIS.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PIS.xml deleted file mode 100644 index d447e73d..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PIS.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PSCADA.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PSCADA.xml deleted file mode 100644 index 10bcd071..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PSCADA.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PUSH_PIC.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PUSH_PIC.xml deleted file mode 100644 index 2b6830a1..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_ACTION_FOR_PUSH_PIC.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_DEFINE.xml deleted file mode 100644 index 3759359c..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_DEFINE.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION.xml deleted file mode 100644 index b72ca9f4..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION_LIST.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION_LIST.xml deleted file mode 100644 index 21bf8ac5..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_FUNCTION_LIST.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING.xml deleted file mode 100644 index e7b8ce54..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml b/product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml deleted file mode 100644 index 46777cea..00000000 --- a/product/common/resource/en/model_studio/setting/table/LINKAGE_SETTING_FOR_ADD_AND_MODIFY.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/OPT_CTRL_ACT_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/OPT_CTRL_ACT_DEFINE.xml deleted file mode 100644 index 5e97eeaf..00000000 --- a/product/common/resource/en/model_studio/setting/table/OPT_CTRL_ACT_DEFINE.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/OPT_HANDOVER_GRP.xml b/product/common/resource/en/model_studio/setting/table/OPT_HANDOVER_GRP.xml deleted file mode 100644 index 1a5b808a..00000000 --- a/product/common/resource/en/model_studio/setting/table/OPT_HANDOVER_GRP.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/OPT_SHIELD_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/OPT_SHIELD_DEFINE.xml deleted file mode 100644 index 7b070f84..00000000 --- a/product/common/resource/en/model_studio/setting/table/OPT_SHIELD_DEFINE.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/OPT_TOKEN_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/OPT_TOKEN_DEFINE.xml deleted file mode 100644 index b969a89d..00000000 --- a/product/common/resource/en/model_studio/setting/table/OPT_TOKEN_DEFINE.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_AREA_INFO.xml b/product/common/resource/en/model_studio/setting/table/PA_AREA_INFO.xml deleted file mode 100644 index 453ac6ba..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_AREA_INFO.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_AUDIO_INFO.xml b/product/common/resource/en/model_studio/setting/table/PA_AUDIO_INFO.xml deleted file mode 100644 index 28d8d96b..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_AUDIO_INFO.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_BROADCAST_GROUP.xml b/product/common/resource/en/model_studio/setting/table/PA_BROADCAST_GROUP.xml deleted file mode 100644 index afc28947..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_BROADCAST_GROUP.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_CTRL_PARAM.xml b/product/common/resource/en/model_studio/setting/table/PA_CTRL_PARAM.xml deleted file mode 100644 index 6c55abd5..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_CTRL_PARAM.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_LOCATION_AREA_DEF.xml b/product/common/resource/en/model_studio/setting/table/PA_LOCATION_AREA_DEF.xml deleted file mode 100644 index 07a6315e..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_LOCATION_AREA_DEF.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_LOCATION_SEQ_DEF.xml b/product/common/resource/en/model_studio/setting/table/PA_LOCATION_SEQ_DEF.xml deleted file mode 100644 index 0f2bba7a..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_LOCATION_SEQ_DEF.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_OPERATOR_DEF.xml b/product/common/resource/en/model_studio/setting/table/PA_OPERATOR_DEF.xml deleted file mode 100644 index 6e2057da..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_OPERATOR_DEF.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_OPERATOR_MAP.xml b/product/common/resource/en/model_studio/setting/table/PA_OPERATOR_MAP.xml deleted file mode 100644 index 6d0531c0..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_OPERATOR_MAP.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PA_TIMED_AUDIO.xml b/product/common/resource/en/model_studio/setting/table/PA_TIMED_AUDIO.xml deleted file mode 100644 index 1bbe175d..00000000 --- a/product/common/resource/en/model_studio/setting/table/PA_TIMED_AUDIO.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PIS_AREA_INFO.xml b/product/common/resource/en/model_studio/setting/table/PIS_AREA_INFO.xml deleted file mode 100644 index 0e5ae3a1..00000000 --- a/product/common/resource/en/model_studio/setting/table/PIS_AREA_INFO.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PIS_CTRL_PARAM.xml b/product/common/resource/en/model_studio/setting/table/PIS_CTRL_PARAM.xml deleted file mode 100644 index 4b836198..00000000 --- a/product/common/resource/en/model_studio/setting/table/PIS_CTRL_PARAM.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PIS_DISPLAY_INFO.xml b/product/common/resource/en/model_studio/setting/table/PIS_DISPLAY_INFO.xml deleted file mode 100644 index b58076a0..00000000 --- a/product/common/resource/en/model_studio/setting/table/PIS_DISPLAY_INFO.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PIS_FES_LOCATION_INFO.xml b/product/common/resource/en/model_studio/setting/table/PIS_FES_LOCATION_INFO.xml deleted file mode 100644 index 49888897..00000000 --- a/product/common/resource/en/model_studio/setting/table/PIS_FES_LOCATION_INFO.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PIS_LOCATION_AREA_DEF.xml b/product/common/resource/en/model_studio/setting/table/PIS_LOCATION_AREA_DEF.xml deleted file mode 100644 index f12a9f70..00000000 --- a/product/common/resource/en/model_studio/setting/table/PIS_LOCATION_AREA_DEF.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/PIS_MESSAGE_INFO.xml b/product/common/resource/en/model_studio/setting/table/PIS_MESSAGE_INFO.xml deleted file mode 100644 index 4bccbbf7..00000000 --- a/product/common/resource/en/model_studio/setting/table/PIS_MESSAGE_INFO.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/REGION_INFO.xml b/product/common/resource/en/model_studio/setting/table/REGION_INFO.xml deleted file mode 100644 index 989c7d80..00000000 --- a/product/common/resource/en/model_studio/setting/table/REGION_INFO.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/SAFETY_DAY.xml b/product/common/resource/en/model_studio/setting/table/SAFETY_DAY.xml deleted file mode 100644 index e2dadeac..00000000 --- a/product/common/resource/en/model_studio/setting/table/SAFETY_DAY.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/SEQUENCE_ACTION.xml b/product/common/resource/en/model_studio/setting/table/SEQUENCE_ACTION.xml deleted file mode 100644 index 0d656a7f..00000000 --- a/product/common/resource/en/model_studio/setting/table/SEQUENCE_ACTION.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/SEQUENCE_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/SEQUENCE_DEFINE.xml deleted file mode 100644 index fbec1c59..00000000 --- a/product/common/resource/en/model_studio/setting/table/SEQUENCE_DEFINE.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/SEQUENCE_FUNCTION.xml b/product/common/resource/en/model_studio/setting/table/SEQUENCE_FUNCTION.xml deleted file mode 100644 index 52023160..00000000 --- a/product/common/resource/en/model_studio/setting/table/SEQUENCE_FUNCTION.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/SEQUENCE_SETTING.xml b/product/common/resource/en/model_studio/setting/table/SEQUENCE_SETTING.xml deleted file mode 100644 index e33bf353..00000000 --- a/product/common/resource/en/model_studio/setting/table/SEQUENCE_SETTING.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_DEF.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_DEF.xml deleted file mode 100644 index 2fe02bea..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_DEF.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_GRP.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_GRP.xml deleted file mode 100644 index ffb6ea5a..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_GRP.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT.xml deleted file mode 100644 index 214cb803..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT_FOR_ADD.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT_FOR_ADD.xml deleted file mode 100644 index ef87d6b6..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_POINT_FOR_ADD.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME.xml deleted file mode 100644 index 0937bcea..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME_FOR_ADD.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME_FOR_ADD.xml deleted file mode 100644 index 1e33d84e..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_PARA_TIME_FOR_ADD.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_GRP.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_GRP.xml deleted file mode 100644 index e7cf6b43..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_GRP.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA.xml deleted file mode 100644 index 86f3a3ef..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA_FOR_ADD.xml b/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA_FOR_ADD.xml deleted file mode 100644 index c3e57410..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_INST_RET_PARA_FOR_ADD.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_LINK_DEF.xml b/product/common/resource/en/model_studio/setting/table/STAT_LINK_DEF.xml deleted file mode 100644 index 5bc63d5e..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_LINK_DEF.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_LINK_PARA.xml b/product/common/resource/en/model_studio/setting/table/STAT_LINK_PARA.xml deleted file mode 100644 index da21ca7a..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_LINK_PARA.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/table/STAT_LINK_RET.xml b/product/common/resource/en/model_studio/setting/table/STAT_LINK_RET.xml deleted file mode 100644 index 93fbf769..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_LINK_RET.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_DEF.xml b/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_DEF.xml deleted file mode 100644 index 878576be..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_DEF.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_PARA.xml b/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_PARA.xml deleted file mode 100644 index 10dec40e..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_PARA.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_RET.xml b/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_RET.xml deleted file mode 100644 index 2f47ab47..00000000 --- a/product/common/resource/en/model_studio/setting/table/STAT_TEMPLATE_RET.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/SWITCH_CFG_INFO.xml b/product/common/resource/en/model_studio/setting/table/SWITCH_CFG_INFO.xml deleted file mode 100644 index 13423b26..00000000 --- a/product/common/resource/en/model_studio/setting/table/SWITCH_CFG_INFO.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/TRIGGER_CONDITION_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/TRIGGER_CONDITION_DEFINE.xml deleted file mode 100644 index 06bf75f1..00000000 --- a/product/common/resource/en/model_studio/setting/table/TRIGGER_CONDITION_DEFINE.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/TRIGGER_FUNCTION_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/TRIGGER_FUNCTION_DEFINE.xml deleted file mode 100644 index 4587cf95..00000000 --- a/product/common/resource/en/model_studio/setting/table/TRIGGER_FUNCTION_DEFINE.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/TRIGGER_PERIOD_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/TRIGGER_PERIOD_DEFINE.xml deleted file mode 100644 index f08960eb..00000000 --- a/product/common/resource/en/model_studio/setting/table/TRIGGER_PERIOD_DEFINE.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/table/TRIGGER_TIMER_DEFINE.xml b/product/common/resource/en/model_studio/setting/table/TRIGGER_TIMER_DEFINE.xml deleted file mode 100644 index cb611fab..00000000 --- a/product/common/resource/en/model_studio/setting/table/TRIGGER_TIMER_DEFINE.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
        diff --git a/product/common/resource/en/model_studio/setting/tree/calcFunc.xml b/product/common/resource/en/model_studio/setting/tree/calcFunc.xml deleted file mode 100644 index a93b2fcb..00000000 --- a/product/common/resource/en/model_studio/setting/tree/calcFunc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/tree/commonTree.xml b/product/common/resource/en/model_studio/setting/tree/commonTree.xml deleted file mode 100644 index 76ad3643..00000000 --- a/product/common/resource/en/model_studio/setting/tree/commonTree.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/product/common/resource/en/model_studio/setting/tree/ctrlActDefine.xml b/product/common/resource/en/model_studio/setting/tree/ctrlActDefine.xml deleted file mode 100644 index 6078600c..00000000 --- a/product/common/resource/en/model_studio/setting/tree/ctrlActDefine.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/product/common/resource/en/model_studio/setting/tree/expressionTree.xml b/product/common/resource/en/model_studio/setting/tree/expressionTree.xml deleted file mode 100644 index 053f799f..00000000 --- a/product/common/resource/en/model_studio/setting/tree/expressionTree.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/tree/sampleTree.xml b/product/common/resource/en/model_studio/setting/tree/sampleTree.xml deleted file mode 100644 index 74d548f2..00000000 --- a/product/common/resource/en/model_studio/setting/tree/sampleTree.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/tree/statInstInput.xml b/product/common/resource/en/model_studio/setting/tree/statInstInput.xml deleted file mode 100644 index bfb857b4..00000000 --- a/product/common/resource/en/model_studio/setting/tree/statInstInput.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/tree/statInstOutput.xml b/product/common/resource/en/model_studio/setting/tree/statInstOutput.xml deleted file mode 100644 index 3525d067..00000000 --- a/product/common/resource/en/model_studio/setting/tree/statInstOutput.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/product/common/resource/en/model_studio/setting/tree/stateTextTree.xml b/product/common/resource/en/model_studio/setting/tree/stateTextTree.xml deleted file mode 100644 index 2737b01e..00000000 --- a/product/common/resource/en/model_studio/setting/tree/stateTextTree.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/product/common/resource/en/model_studio/setting/tree/staticsTree.xml b/product/common/resource/en/model_studio/setting/tree/staticsTree.xml deleted file mode 100644 index c9cfcc2a..00000000 --- a/product/common/resource/en/model_studio/setting/tree/staticsTree.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/product/common/resource/en/report/translate/report.qm b/product/common/resource/en/report/translate/report.qm deleted file mode 100644 index c47581ceba304485937b8a9bd122a6c7abdc8cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmcE7ks@*G{hX<16=n7(EZlq7iGhJZfrDX92avYrd?>ULNblu*xxfNQm-2h+`vGZ& zOa=x8l%a?rj{_vd2Es4)PkB0f9y^dJ;vAG(kY7|1T#}faothG! znUbDb!U)mo%22^jz>p8rS_0R~^K|{5r|r9*buE3da0SQ!UZ?>`I;FstLUl4IFgO8C v$Y&^LC}v1Sm;*84+1CCS%R7iP#|7w>VxZsBk-WkKG3WW7X)pFo#9|Hr - - - - CReportStackedWidget - - - 返回 - Return - - - - CReportWidget - - - 报表浏览 - Report Browse - - - - 报表编辑 - Report Design - - - - 导出报表 - Export - - - diff --git a/product/common/resource/en/sequence_server/translate/sequence_server_en.mo b/product/common/resource/en/sequence_server/translate/sequence_server_en.mo deleted file mode 100644 index 7c8d083d13a98b23b983f63f45930f597188c83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6147 zcmd6pU2GKB6~}Kwnlw)7N76QFlcv{gNRzT-?}AC3MTn*jp{OLd0isGMjfUN8@08t{ z&CD#|RB89Am4%OLOpr=i1$jJqZ2_ybqlFdB(m7 zJ_LRld>mW?wt!EAwyM7aeh2k3I1jw{9>(xt8op?Li{f+OH&K5H#D`_@Mf+H)-lfp(lYtevoG2L;km*P&`O;dYVuc1ixfn&`-J-kT!w-q%A$9CHc{a0*Px6 zWC-#DW(H3)zA0}Op*)E~T6`BJjuJzm=X(*hJHYV_p~ob>yyc)gR2Z0dZ`+jXVd-N&Xb zUi8kL@GhLL4sT;#?@@1bm$&<1dFNTbdkgb+4p!d09Lzm*)<52ZX;bIBD?Mjo{=o0N zfk{7TO|F}leibc6Z|9I~p@v4x9-F#6kmNN30xNiQ$I995m=W{)Mk_1v6-pL6U+tvRj)Y)wta`Bd|9TnQ5bCPRP*_t!VIU8_cBd)cKM((&P2^_{HIvw`WjVJ#~H@sVp6;ZZDQE zpMn78(%z{LPWk;8V$mCp4urfi&`eiXW#`uN)(f~Z>ALKlq+|=-|5P`Ft-(ba+@s|^ zlXQ4$4WDpF@kUPdux|pV1a3c;e|~e8K#9YdnsD+RI|2LDQn+ z5^*ij$`gx{3tHv4mAd0cf&VK%(D;>Bfka}rJQ zhBnJ|g^4w~@-W5~o89JoRyWMWJeARHN4QJYu6aRgt&gL z{7hReOkqnS+AWbbT%KrZZE8V}tZF~f9g)}FOp-S>HAg>=ood$e`K*x&glTrf>jhz^ z#A}YQHwwF%kbzm?x)2ZXGkrUiW=~=-I2eVR^>A+M>jAbn}M+V5h zQBs6Rv-~ghT(IN~|D|TICYWj!+?d!bQUx-EcjyL06imNUcJcaNwn$lsVi(WbR!TTd zu(^PQ(u2rIk_L8$_Nsqgq0SDHEh{ugl_y3|z^T#$g zPban3U-P-vGDA|-`cza%tekK&78xP;u|+=HB@IzVn4K*24gQ*GR#ROsz>IodPz@Xo ze%ZpcyOzWb>=_rjNrfAbw?pK%K-^*k&j#Pwocu&MW=-)meNhSACPbz zxTp{lBt<>{8riK+4Rxfntp)RT76`*~li9V4Y?@g)D=o4-qdR=P5GJ=p4o5c~%V!1d zZoWy!r4Hw!N7j;Ok?S3>np_uUv2xZ(_Qs1=?Oe z?G~J_ohGyM`q{IFi|6o)#rqB~*o`=-n+!LV!C{HP)4HSByTjF1QA= zp{IyuO<4$SbQq8}`fjKnXj?dVn~RvdBkKrzS^F$BjmZS@KzC!p$wbO<8&EI=D0W8{S+uHM)`g7x2$az5oCK diff --git a/product/common/resource/en/sequence_server/translate/sequence_server_en.po b/product/common/resource/en/sequence_server/translate/sequence_server_en.po deleted file mode 100644 index 048d6dae..00000000 --- a/product/common/resource/en/sequence_server/translate/sequence_server_en.po +++ /dev/null @@ -1,336 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-07-31 16:02+0800\n" -"PO-Revision-Date: 2019-10-18 15:28+0800\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: en\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.4\n" -"X-Poedit-Basepath: ../../../../../src/" -"application/sequence_server\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-KeywordsList: I18N_C;I18N\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-SearchPath-0: .\n" - -#: CMethodAction.cpp:77 -msgid "发送操作指令错误!" -msgstr "Error sending operation instruction!" - -#: CMethodAction.cpp:118 -#, c-format -msgid "动作执行超时 超时时间:[%d]s" -msgstr "Action execution timeout timeout:[%d]s" - -#: CMethodAction.cpp:200 CNode.cpp:106 -msgid "执行成功" -msgstr "execution success" - -#: CMethodFailedAction.cpp:188 -#, c-format -msgid "" -"动作: [%s]-[%s]-[%s] 人工干预超时,执行失败" -msgstr "" -"Action: [%s]-[%s]-[%s] manual intervention " -"timeout,execution failure" - -#: CMethodFailedAction.cpp:268 -msgid "人工干预" -msgstr "manual intervention" - -#: CMethodFailedAction.cpp:271 -msgid "自动重试" -msgstr "auto retry" - -#: CMethodFailedAction.cpp:274 -msgid "自动终止" -msgstr "auto terminate" - -#: CMethodFailedAction.cpp:277 -msgid "自动跳过" -msgstr "auto skip" - -#: CMethodFailedAction.cpp:280 -msgid "未知的处理方式" -msgstr "Unknown processing method" - -#: CMethodRecoverAction.cpp:97 -msgid "动作执行恢复流程失败!" -msgstr "" -"Action execution recovery process failed!" - -#: CModuleAlarmCreater.cpp:88 COpResultHmi.cpp:69 -msgid "开始" -msgstr "start" - -#: CModuleAlarmCreater.cpp:111 -msgid "结束" -msgstr "end" - -#: CModuleAlarmCreater.cpp:172 -msgid "有部分动作跳过" -msgstr "Some actions are skipped" - -#: CModuleMsgDeal.cpp:216 -msgid "未知命令,无法解析" -msgstr "Unknown commond,unable to parse" - -#: CModuleMsgDeal.cpp:242 -#, c-format -msgid "顺控[%s]正在执行,无法执行开始操作!" -msgstr "" -"sequence[%s] is executing,cannot perform start " -"operation!" - -#: CModuleMsgDeal.cpp:253 -#, c-format -msgid "" -"顺控[%s]模型已被删除,请稍后等待其他顺控结束后" -"执行开始!" -msgstr "" -"sequence[%s] model has been removed,please " -"wait for execution to start after other " -"sequence is finished!" - -#: CModuleMsgDeal.cpp:290 -#, c-format -msgid "顺控[%s]未执行,无法执行执行终止操作!" -msgstr "" -"sequence[%s] non-execution,cannot perform " -"termination operation!" - -#: CModuleMsgDeal.cpp:320 -#, c-format -msgid "顺控[%s]未执行,无法执行执行暂停操作!" -msgstr "" -"sequence[%s] non-execution,cannot perform " -"pause operation!" - -#: CModuleMsgDeal.cpp:333 -#, c-format -msgid "顺控[%s]非正在执行,无法执行暂停操作!" -msgstr "" -"sequence[%s] non-executing,cannot perform " -"pause operation!" - -#: CModuleMsgDeal.cpp:360 -#, c-format -msgid "顺控[%s]未执行,无法执行执行继续操作!" -msgstr "" -"sequence[%s] non-execution,cannot perform " -"continue operation!" - -#: CModuleMsgDeal.cpp:373 -#, c-format -msgid "顺控[%s]非暂停,无法执行继续操作" -msgstr "" -"sequence[%s] non-pause,cannot perform continue " -"operation!" - -#: CModuleMsgDeal.cpp:405 -#, c-format -msgid "顺控[%s]未找到!" -msgstr "sequence[%s] not found!" - -#: CModuleMsgDeal.cpp:418 -#, c-format -msgid "" -"顺控[%s]时标不一致,hmi时标[%d],服务时标[%d]!" -msgstr "" -"sequence[%s] time scale is inconsistent,hmi " -"time scale[%d],server time scale[%d]!" - -#: CModuleMsgDeal.cpp:439 -#, c-format -msgid "" -"顺控[%s]时标不一致,本地时标:[%d],服务时标[%d]!" -msgstr "" -"sequence[%s] time scale is inconsistent,local " -"time scale:[%d],server time scale[%d]!" - -#: CModuleMsgDeal.cpp:478 CModuleMsgDeal.cpp:541 -#, c-format -msgid "[%s]-[%s]未找到!" -msgstr "[%s]-[%s] not found!" - -#: CModuleMsgDeal.cpp:500 -#, c-format -msgid "" -"功能[%s]时标不一致,本地时标:[%d],服务时标[%d]!" -msgstr "" -"function[%s] time scale is inconsistent,local " -"time scale:[%d],server time scale[%d]!" - -#: CModuleMsgDeal.cpp:562 -#, c-format -msgid "" -"动作[%s]时标不一致,本地时标:[%d],服务时标[%d]!" -msgstr "" -"action[%s] time scale is inconsistent,local " -"time scale:[%d],server time scale[%d]!" - -#: CNode.cpp:94 -msgid "未执行" -msgstr "non-execution" - -#: CNode.cpp:97 -msgid "正在执行" -msgstr "executing" - -#: CNode.cpp:100 -msgid "已触发" -msgstr "triggered" - -#: CNode.cpp:103 -msgid "执行失败" -msgstr "execution failure" - -#: CNode.cpp:109 -msgid "执行终止" -msgstr "execution termination" - -#: CNode.cpp:112 -msgid "执行暂停" -msgstr "execution pause" - -#: CNode.cpp:115 -msgid "执行跳过" -msgstr "execution skip" - -#: CNode.cpp:118 CNode.cpp:140 -msgid "未定义的类型" -msgstr "Undefined type" - -#: CNode.cpp:131 -msgid "不勾选" -msgstr "unchecked" - -#: CNode.cpp:134 -msgid "勾选" -msgstr "checked" - -#: CNode.cpp:137 -msgid "部分勾选" -msgstr "partially checked" - -#: COpResultHmi.cpp:72 COpResultUi.cpp:63 -msgid "终止" -msgstr "terminate" - -#: COpResultHmi.cpp:75 -msgid "暂停" -msgstr "pause" - -#: COpResultHmi.cpp:78 -msgid "继续" -msgstr "continue" - -#: COpResultHmi.cpp:81 -msgid "单步开始" -msgstr "single-step start" - -#: COpResultHmi.cpp:84 -msgid "单步继续" -msgstr "single-step continue" - -#: COpResultHmi.cpp:87 -msgid "未知操作" -msgstr "Unknown operation" - -#: COpResultOpt.cpp:61 COpResultUi.cpp:57 -msgid "初始化状态" -msgstr "initial state" - -#: COpResultOpt.cpp:64 -msgid "失败" -msgstr "failure" - -#: COpResultOpt.cpp:67 -msgid "成功" -msgstr "success" - -#: COpResultOpt.cpp:70 -msgid "未知的应答类型" -msgstr "Unknown reply type" - -#: COpResultUi.cpp:60 -msgid "重试" -msgstr "retry" - -#: COpResultUi.cpp:66 -msgid "跳过" -msgstr "skip" - -#: COpResultUi.cpp:69 -msgid "未知的人工干预" -msgstr "Unknown manual intervention" - -#: CSeqAnomalyRecoverPro.cpp:121 -#, c-format -msgid "" -"顺控主备切换,原执行中的顺控配置已经删除,顺控" -"[%s]无法恢复!" -msgstr "" -"sequence master-slave switching,the sequence " -"configuration in the original execution has " -"been removed,sequence[%s]unable to restore!" - -#: CSeqAnomalyRecoverPro.cpp:153 -#, c-format -msgid "" -"顺控主备切换,原执行中的顺控配置已经修改,顺控" -"[%s]无法恢复,原时标[%d],现在时标[%d]!" -msgstr "" -"sequence master-slave switching,the sequence " -"configuration in the original execution has " -"been modified,sequence[%s]unable to restore," -"original time scale[%d],current time " -"scale[%d]! " - -#: CSeqAnomalyRecoverPro.cpp:181 -#, c-format -msgid "" -"顺控主备切换,原执行中的顺控配置已经修改,顺控" -"[%s]无法恢复,功能节点找不到[%s]!" -msgstr "" -"sequence master-slave switching,the sequence " -"configuration in the original execution has " -"been modified,sequence[%s]unable to restore," -"function node not found[%s]!" - -#: CSeqAnomalyRecoverPro.cpp:204 -#, c-format -msgid "" -"顺控主备切换,原执行中的顺控配置已经修改,功能" -"[%s]无法恢复,原时标[%d],现在时标[%d]!" -msgstr "" -"sequence master-slave switching,the sequence " -"configuration in the original execution has " -"been modified,function[%s]unable to restore," -"original time scale[%d],current time scale[%d]!" - -#: CSeqAnomalyRecoverPro.cpp:235 -#, c-format -msgid "" -"顺控主备切换,原执行中的顺控配置已经修改,功能" -"[%s]无法恢复,动作节点找不到[%s]!" -msgstr "" -"sequence master-slave switching,the sequence " -"configuration in the original execution has " -"been modified,function[%s]unable to restore," -"action node not found[%s]!" - -#: CSeqAnomalyRecoverPro.cpp:258 -#, c-format -msgid "" -"顺控主备切换,原执行中的顺控配置已经修改,动作" -"[%s]无法恢复,原时标[%d],现在时标[%d]!" -msgstr "" -"sequence master-slave switching,the sequence " -"configuration in the original execution has " -"been modified,action[%s]unable to restore," -"original time scale[%d],current time scale[%d]!" diff --git a/product/common/resource/en/setup/en.qm b/product/common/resource/en/setup/en.qm deleted file mode 100644 index 13e43ce74a29eafef58501b8e8ca69e803bf8d47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13348 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 abPqRA3+^Zx;C#in`y diff --git a/product/common/resource/en/sys_startup/translate/en.ts b/product/common/resource/en/sys_startup/translate/en.ts deleted file mode 100644 index 78deda2c..00000000 --- a/product/common/resource/en/sys_startup/translate/en.ts +++ /dev/null @@ -1,794 +0,0 @@ - - - - - AppMngForm - - - Form - Form - - - - 节点应用 - Node Application - - - - 状态 - Status - - - - 主/备 - Master/Slave - - - - - 重启 - Restart - - - - 刷新 - Refresh - - - - 启动 - Start up - - - - 停止 - Stop - - - - 升主 - to Master - - - - 降备 - to Slave - - - - - - - 验证 - Ok - - - - - - - 权限验证 - Permission to verify - - - - - 运行中 - Active - - - - - 主 - Master - - - - - 备 - Slave - - - - - 异常 - Abnormal - - - - - 已停止 - Stopped - - - - - 未知 - Unknown - - - - AutoStart - - - Dialog - Dialog - - - - 开机自启动 - Auto start - - - - 系统开机自启动 - System auto start - - - - HMI 开机自启动 - HMI auto start - - - - 自启动设置 - Auto start setting - - - - ButtonForm - - - Form - - - - - 设置系统开机自启动成功... - Setup system auto start successfully... - - - - 设置系统开机自启动失败...错误:%1 - Setup system auto start failure... Error:%1 - - - - 注销系统开机自启动成功... - The system has been successfully booted... - - - - 注销系统开机自启动失败......错误:%1 - Logout system startup failure... Error:%1 - - - - 设置HMI开机自启动成功... - Set HMI auto start successfully... - - - - 设置HMI开机自启动失败...错误:%1 - Set HMI auto start failure... Error:%1 - - - - 注销HMI开机自启动成功... - Logout HMI startup since startup successful... - - - - 注销HMI开机自启动失败...错误:%1 - Logout HMI startup self-start failure... Error:%1 - - - - DbCheck - - - 数据库检测 - Database detection - - - - MySQL状态 - MySql - - - - 节点名/IP - Node Name/IP - - - - 模型(写) - Model(Write) - - - - 模型(读) - Model(Read) - - - - 历史(读) - His(Read) - - - - InfluxDB状态 - InfluxDB - - - - - - - - - - 正常 - Connected - - - - 刷新 - Refresh - - - - - - - 异常 - Not Connected - - - - 获取域信息失败 - Faild to obtain domain infomation - - - - 获取数据库信息失败 - Faild to obtain database infomation - - - - (首链接) - (First Link) - - - - - - - - - - - - DogCheck - - - Dialog - Dialog - - - - 加密狗检测 - Supper Dog Check - - - - 重新检测 - Recheck - - - - 异常,错误码[%1] - Abnormal,Error Code[%1] - - - - 正常 - Normal - - - - MainWindow - - - 应用管理 - Application - - - - 进程管理 - Process Info - - - - 工具箱 - Toolbox - - - - 版本 - Version - - - - - 提示 - Tips - - - - 系统启动失败,请检查所有配置工具和人机界面是否已经全部退出! - System failed to start,please check whether all configuration tools and human interface have been exited! - - - - 错误 - - - - - 未发现系统模型配置文件,是否打开系统建模工具导出模型配置? - The system model configuration file is not found. Do you open the system modeling tool to export the model configuration? - - - - 开始停止系统 - Stop system - - - - 开始启动进程:%1 - Start process:%1 - - - - - 启动进程:%1失败 - Start process:%1 faild - - - - 启动进程:%1成功 - Start process:%1 success - - - - 开始停止进程:%1 - Stop process:%1 - - - - - - 停止进程:%1失败 - Stop process:%1 faild - - - - - - 停止进程:%1成功 - Stop process:%1 success - - - - 强制停止进程:%1 - Kill process:%1 - - - - 显示 - Display - - - - 退出 - Exit - - - - 加密狗退出 - Supper Dog Exit - - - - ProcMngForm - - - Form - Form - - - - 节点应用进程 - Application process - - - - 进程名 - Process name - - - - 所属应用 - Application - - - - 状态 - Status - - - - CPU - CPU - - - - 内存(MB) - Memory (MB) - - - - 主/备 - Master/Slave - - - - - 重启 - Restart - - - - 刷新 - Refresh - - - - 启动 - Start up - - - - 停止 - Stop - - - - 升主 - to Master - - - - 降备 - to Slave - - - - 强制停止 - Kill - - - - - - - 验证 - Ok - - - - - - - 权限验证 - Permission to verify - - - - - 运行中 - Active - - - - - - - 异常 - Abnormal - - - - - 主 - Master - - - - - 备 - Slave - - - - - 已停止 - Stopped - - - - - 未知 - Unknown - - - - QObject - - - - - - 已设置服务自启动,若需重新设置,请先取消! - The service has been set since the start, if you need to reset, please cancel first! - - - - - 设置可执行权限失败! - Failed to set executable permissions! - - - - - - - 文件不存在! - The file does not exist! - - - - 服务配置文件不可写,请确认是否具有权限! - The service profile cannot be written, please confirm if you have permission! - - - - 写入服务配置文件失败! - Write service profile failed! - - - - - 调用系统重新加载配置失败! - Call system reload configuration failed! - - - - 设置服务开机自启动失败! - Setup service startup auto startup failed! - - - - - 未设置服务自启动,无需取消! - Do not set the service to start, no need to cancel! - - - - 删除服务配置文件失败,请确认是否具有权限! - Failed to delete service profile, please confirm if you have permissions! - - - - - 已设置HMI自启动,若需重新设置,请先取消! - HMI has been set to start, if you need to reset, please cancel first! - - - - 启动器文件不可写,请确认是否具有权限! - Initiator file cannot be written, please confirm whether you have permission! - - - - 删除启动器文件失败,请确认是否具有权限! - Failed to delete starter file, please confirm if you have permission! - - - - 未设置HMI自启动,无需取消! - HMI self-start is not set, no need to cancel! - - - - - - 打开服务管理器失败,请确认是否具有权限! - Failed to open service manager, please confirm if you have permission! - - - - 注册服务失败,请确认是否具有权限! - Registration service failed, please confirm if you have permission! - - - - 注销服务失败! - Logout service failed! - - - - 停止服务超时! - Stop service timeout! - - - - 获取服务状态失败! - Failed to get service status! - - - - - 启动文件无法写入 - Startup file cannot be written - - - - 警告 - Warning - - - - 正在运行 - System still in running - - - - StartUpForm - - - Form - Form - - - - - 系统启动 - System startup - - - - - 系统停止 - System to stop - - - - 验证 - Ok - - - - 权限验证 - Permission to verify - - - - 退出系统前,请将所有配置工具和人机界面退出! - Before exiting the system, please exit all configuration tools and human interface! - - - - StatusForm - - - Form - Form - - - - 加密狗状态: - Supper Dog Status: - - - - - - - 正常 - Normal - - - - 本地网络状态: - Local Network Status: - - - - - 异常 - Abnormal - - - - 未检测 - Unchecked - - - - VersionForm - - - Form - Form - - - - 版本信息 - Version - - - - 主程序 - Main - - - - 数据库 - Db - - - - Web - Web - - - - 主程序路径 - MainPath - - - - 数据库路径 - DbPath - - - - 无版本信息 - No Version Information - - - - - - 已安装 - Installed - - - - - - 未安装 - Not Installed - - - - 无主程序路径 - No MainPath - - - - 无数据库路径 - No DbPath - - - diff --git a/product/common/resource/zh/apc_if_srv/translate/apc_if_srv_zh.mo b/product/common/resource/zh/apc_if_srv/translate/apc_if_srv_zh.mo deleted file mode 100644 index a72246b19a74cecf8317c4ea3824e9cb993d8428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 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 diff --git a/product/common/resource/zh/gui/icon/alarm/icon_中.png b/product/common/resource/zh/gui/icon/alarm/icon_中.png deleted file mode 100644 index 642c410844e46d6f8fe6e7d993fe611d7e88d728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmV+g0s8)lP)4u*Y0002YNkl zI}U4u*Y0002XNkl zO%8%E5Jn%yMB*jXg&U8eF1(C-3-RYH9>EJ3b?Y%?hZ!<8wREiTB`jKo$JYnh>(VEY zh2B2@8cTt4;0nml3@EL^UZTw!m;w`E+qIEAd;^BMF16LOZKItBL63Q~hAof?UPbno zp8O= zQ9{Nr^aj8w<}iidg*O=W0r{MT|KU#sU>=VcL0@t=8jzk0FoTKWIdi}?PSBaud<@8a zVmuVZx0u9s1>i&04u*Y0002VNkl@zy#R-N+d7efT6#xJXP71Xcv{>*F2?$Q$-?pW!zsz z@*A;M8vs}DMw0o{`LnddTSS|v#EL0i6ODnpa-)f`#A~9xDoN!{d|Wh72zH7lq#-`6 zrUf_FH&zRIi4R2K5AGTfFCV8S8Uc?l-B_u`3(?_^5=jmmpYDn%0|-AD+yDRo07*qo IM6N<$f_&L!n*aa+ diff --git a/product/common/resource/zh/gui/icon/alarm/icon_高.png b/product/common/resource/zh/gui/icon/alarm/icon_高.png deleted file mode 100644 index 93891e3ace5f28f843d8e98d63cd2b0521328a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmV4u*Y0002QNklG!{^qhHInuunNe!Id^!FIkNtsWo00000NkvXXu0mjf Dh;e1& diff --git a/product/common/resource/zh/gui/icon/alarm/trend_dark.png b/product/common/resource/zh/gui/icon/alarm/trend_dark.png deleted file mode 100644 index 1e403e5f7e87e777db443ea24c0add5c7f8a78a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmV;n0ZIOeP)4)jvzaKo|z_=dOZe=wJr1&05kAAn59-po^1qbBU9i zgPUCihl-oKT?ChY0avB{0M@K2f>03)nR+Mprm<l5Oi+r# z>?)*P0m2cDO%vlq!|yKiKO|Nq)J|-BV15rQ{v&z8`H1}!z;VGIJF~0K7%eDvj-pkn ziQ{H=T&fS$YI1W1P;C>vK6g{yJ+kC)J}t6D-xmI)hr-eH%b-uSOKvf}S7Q@51Zt7^ geBIpt`-uPx$wMj%lR7gwhmO)N~Koo}mho;il#Jbc#(%wK%V7-B!K$pS_Parq2D{v<_us4t! zs3(vFqRVQcVOk5%3|dknZH17oe5=VY^S<}~nfC_5ii}po!9S?7(wTJXS=a-?7Ovi_ z>}koy(x43^vKUG*c6SG5f+_`S7*9tE5|4}Xc) zAoc9ILrU_<=~@>`(gWi{xLUV`KRNt>6|FVJ_F7>JElCy%rYEW0RgUhL>c3(rV3qX1w} zIJ#ZN|FX5eGcrS4G+O;i*({)y>I}=GUi3W&k%F7J(dyQn$rPTyu(FS3^-{BO%7?PZ xe>~-~8vv86Nb9gfp_gfg|Nm#Gtmw+5`vm#z<{J(_``iEk002ovPDHLkV1lEy?BM_a diff --git a/product/common/resource/zh/gui/icon/alarm/video_dark.png b/product/common/resource/zh/gui/icon/alarm/video_dark.png deleted file mode 100644 index 7147d9d5a847c3fafbd93ec2c6033aa6e0a50c18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM|^P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0VPR9K~y+Tt&}Yi z!Y~kplX3?%0#gf`!Qq&}BQY3kt2qKQXpkrbntO19UVsz83!83!3+a%VZ`$4D<#m(E zRt$z?#w6nQ`XuFC;mpuW?(ZTpYvYe9Pi-3@Fyjq@#8Ik2oElwFIWJ~wnp0mZR+avA z0Evv0hp;^gY~=1NE>8rGvNJkSGBZ!|&l%7&ljT%CV#nzX0K^r$IN3y=k&4E(@ zX)#^$g0HTqVY)OaMss9 zXa@HrZCX?J!eWi0?WriXsXjrT(yw0)69QA!bEgJR+*RA*FHLan<;({^%ZN? u|2CUxFi2=qI_Vyu-&Ym8cxcm{499OKA_J%vc1{@p0000` j=fCd5JU9QH*bZ?8<`Wuax@BeB00000NkvXXu0mjfmC;>y diff --git a/product/common/resource/zh/gui/icon/alarm/wave_dark.png b/product/common/resource/zh/gui/icon/alarm/wave_dark.png deleted file mode 100644 index b18454fa55aeceb6a00df0a4671fe406540c0cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F7aP)){m5QSe)kz_mO0)Z+^+ax!TPXIoF$r5RUPhfI_kOlHqH%M}V$R~)_$W?Fxp=}bC zIyG`sQOTe`MtF7>cw%v2x^k^PY(OV-VT^r29A(;IEZsOSsC*R!bSG=#-(n@u=Sd^i+!FMYv0K z0u&=oLD#W;`K>DYp&PPRfD1SDiIH_dCRkbdDFp;gQsAL1^;rNe+%N{iC&DD9!8o3e zceyGj0}S1b2ha_ey~r^?mK9*aQr#h{gC25r5tFE>=BfErE&XrvrRjiN~tN9DG^cm+;B7dTBk00000NkvXXu0mjfaTO7b diff --git a/product/common/resource/zh/gui/icon/alarm/wave_light.png b/product/common/resource/zh/gui/icon/alarm/wave_light.png deleted file mode 100644 index 1df62d88bbe119c4f9ef2e9cd6c89e83caba35ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmV;!13dhRP)5dKzoFIb+5Qvpr|F%@7cz^NeiDqmXFNZk?(Ip6txl!B@BW57h zeSf$BAb4#8(D*u-tz}`Vt6FC4GBoDUW zOxR_m>GI{4nwo2_l#@Xcn{+TR(xS3wd{_W7NKQfcZvHFHdoDSb!8iiZ@vKPiRKI#q z8l~{HE|iXKVKQtzSOB6sezFxmdsu3ycxQH4_54yzDSoWc2`&6jR4hCtyicxF%fgv~ zbp>E4swYnwHA!@nApwWm7M_*fg7P^7FwvW_!uX`z&=%phX)90*hO$f2{8k$Cnq$N> z07mR6T9#KQBWV?G1pr3o1tN3Psc_Z-5kb--!u5;=7ph+kU5d9q>L#25m@AvBAo05`v-*Y!f}NI|)7TIWxa#>DL$9aoVB8o=Zbo0N^^n zq&4%9c3!sPmD12gVGkCYJ=*B4@^ztnX|bN-YRcIdS>2G7t;Sm&Wt5u{>5&?rbYiIiOT< zuJh$)jn-^lOc+tNRDf}+q<7^~oLNmtH92Ox(xuCd^J0>tPgk=+zEq^SGt-k<%^o+b zX8TMq)XD|T6db{8Z?&2gb82`?Y*sAn&YwFhr_3(|yPPg;LMzRvtbnrjhW7wkL|iv3 l_}cZ{hT5#>7`RSXe*m;E`eM+AO@{yg002ovPDHLkV1n#hzT*G@ diff --git a/product/common/resource/zh/gui/icon/asset/record.png b/product/common/resource/zh/gui/icon/asset/record.png deleted file mode 100644 index 3841ef3476342698b32dc3b47761c8f197dc33da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1028 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 diff --git a/product/common/resource/zh/gui/icon/bi/face_light.png b/product/common/resource/zh/gui/icon/bi/face_light.png deleted file mode 100644 index 0d4918102cfa8790b43047a18181ae263ed973a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2612 zcmZ`*dpJ~EAD%Hx=xk>~r7c1(rCf?Z>WrBrw~R64Rv{;$Hl5s>h#2IqIF;tOlyRTQ zEkz=Cx(byo9Aea|j^ong7P*}@&hvcF^PT7W{@DB7zu$Ui?X`cu^}cHoXjF4Z5|+eZ zFp#CiAvy+wbpy|TiHm@{r)O;j00}>fqk$NVRGaX^rtOlF2f0s{hbZ>JzfZhNVaQm* zasI2{clDmP?U%79K+kk2eXYKaP0^NT8*?A+NQ_sCc{tJ%DK4%o@;u~2NYx9Y_1x6+ zd$WrgRxvY+r1Z)3Nz&9N3~3}j0*gT~WC+8>Vu%|A$PTz4x#( zOF@x$ZepQ*xHBSaTc_KB-Z@5ZS8uuJm%)0IxuEY0OYiAlI|^6jh)Ut2rSkfIubxo! z)@do|GhYo+uE+h}Ai_K2`{l^Db#Kx$LMk4(>FT2_tNS%oKkYT}Z^)~jT8>cK7gAPQ zu)o_-cV?_r<9^i#{Zmc`xL zTE(JB(>jC1b5#9Gdh5ix3+JMA*}VblpoyNZ3RqF}+* ztGjyTM!qFqwbhhBng(hX#Ej>SMpsJiaPV~#6Y`wslt9h%mJT%2H%E1Rx0cqE*X8W^ z0kJTCzO*|77A{3I%?BPxV1eiT!TMj5#ki3$LA@v43yW~@@v(nUbV9eWKB7Wv&t z%9mkovu}%U6o|cKP%@;O$-yJ6eo-O~_flO*HK0H!>qSLPRp~Sj%;j|^#NjgoM^t+0 zt6lz2W_+}=vj~rne;Zl!FplVwO*AVw2t9xQo$q?9(cA0ulvNCT?eXyHNNQjGbbG76 za4@%Ef8O-BBg0Lp^qkmJ{O_uLzh9;W2yKr|P1=c3r ziN0Lla}Yw6Mg|od%8!BNsb+NsH6l59B-Iar2OQQDY0-yH<;@>%rkSdUBd)DqOaiCZ zBeAeFg*FC;xFi%KOgm(0vT+%1TOD5cbAep#a@-BAxs6^}aB zD_HDGh;<~ILJ9oxSuJ?T(hp@R7aM36YN9>~KWTsYsX%fv*E~=iq5LP7zgNlkZ_<4E_HWJt1F>?*hKNNy{pwIDYVHcwq zJZm^Sdtd*nLU*q6&iuvu7sIp9j6UBXhgeAFeYg&yQF%GKE}AOq=-4~6L=tvT%oMsQ zubS0gQwJ*F4oOpUob9zx_ZkW_zp%oUM~nW5mnhPES8mT$_FoEaFrEH#d!Y4Oj|5Tm z>g{4f;_4(2Xbu$&{*ZFu&C(<9`nzkB(p`vQH+W(|xo=J$5vlj9G?<<0Nqk*|Us47x zB(3wH?&C>ogtad2*1p%TYVE>2260Po(v1zcN%DzA8r3ORq$qks_ z+-x89@B6;jDC=C>e7NyM7I?q1^ssHwEg2ig$mRX~Xk}n74;x3_YI2K7)hBYK+s3*_ zzrR&9Jq&RP#48hyTgZ^OOrFz5rW*sNY3{OVdxts~ds7~`4K~8SXH4wA1P!NRlvX=4 zQQWL+htssFHL(WbxV%LnJ0IwyrKF_H4hJ*{bb@6T0FEP(^GqaKa6pJX8&Qhi+!PMfga8T^@d`_Sf3lzb=&xEfqzA zNX5TSu=m+ly^hS|$754q_cZ0KUn?Y9%^@S%n@%UT75gOe;LZy(Fa>GKA>@T>U*eM? zu4n;$U!aHXTQ~8k(C4$FwDR9=ENuQMnhpG-hm@0@jfMZ0=5x~kL|lA;tyT+gua)qtU2<($Y) zf+&%HHpjUxG-BLkz;?HgUj1<@;x@I5xg7S+LwGt4?P+`%q!s!USqm;@>MkGXz2Ng_ z(6nd$C0b~$`4e@6>hVTStlSjhISWol1*bB#k>~=G(MoPox_mS>BR@8nuyjMrE<1%aCIMkTcz6dBO<9&Eh75bxMR}FQT*ckB0?Lxg58?P7&JeYD>;f^`9 z-9rYU_C>->!9e561XnG=>16dJ!Gu_{*#I1JX&G(5I9!9Jex>sU(KJWz_sxKrTC<1S f(iUwhHm_5c=-_cZY{dxt4a8WQQ4f_JbdUNQ>b|X$ diff --git a/product/common/resource/zh/gui/icon/ipc/camera-hovered.svg b/product/common/resource/zh/gui/icon/ipc/camera-hovered.svg deleted file mode 100644 index ff027f96..00000000 --- a/product/common/resource/zh/gui/icon/ipc/camera-hovered.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/product/common/resource/zh/gui/icon/ipc/camera.svg b/product/common/resource/zh/gui/icon/ipc/camera.svg deleted file mode 100644 index 9ef7bb93..00000000 --- a/product/common/resource/zh/gui/icon/ipc/camera.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/product/common/resource/zh/gui/icon/ipc/down-clicked.png b/product/common/resource/zh/gui/icon/ipc/down-clicked.png deleted file mode 100644 index 962230b5d848c265e59ae63086f6930b40be4af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2635 zcmX9=d0Z3M7QPb(0TqK`k%Gb)5q^r)tuD}j0V5`$Bp1*$1nG%TTEsRVf{ zNV1k?^2+Hdytm`}zXnfXWaV694C%ZVaJSTw-F5 zG%UH%0+_$_rG(IcRc$H?(munIAE2#R?EUDRY!uXR3Re8_IRZ)=&q%Mh04&I1=jB)n zz}|mspT-3N(aqmA+zbTFftcQvZWch2?f=!0{S>hKqGO0B2UFhrs4c`BT#|cGI`$}2 zncm}mUyT0GO-HYK)_%{NjsBd9va#j5U4Hrn%G>mj%VBIWs&Lco@Y9dXrjH&?SVq5X zE$TSo)|jp zoo1GVbpkbllXR$V^2ay6C>~ z6HbPfos+tDjI&sZ)9mT4zkDfwTT7gk*8m_n;<9bH!Z|lZ#gd25-?3?NFL|er{3paByRRA~=evyPIg4lM}gm3O|Z) z_$arrp;cef`@2Bpl!aR4=U(e>{zeeaiZ$V_cZ1`V@&QXob+2rAIG$?2MW5j7UPP3R+!3gpjqulp%Rcfl z6Q#SL#5O0dohsW&JQR>R0$(kxow)qm=iU6O(tiFkGj1KVf9Kih zS|$ycgj(w+`Rs z$?^?vX`40t=MrJhFRsz|h=sR#`+;Omj5iIqb=e8SW?Wx~Ixsb2W0y?3Z>-^bhfgdF&Jz92Z|J zIVKUvyx{o4{gvagt%*|Er$LPW*0N{QpYmp4o{v8_Z>u_TLm>O4zio-Wx#83l?gce= zMdX~lQ1v0*faj5R+oUV9wVWVE0qG)K%Wm`h>9nB85<1{ZlLNeZ8+E`Uql}!hxicS% zCvgYZ#pW%#<+eMCVH(q^q}eT5MOI*^w%4( zFJUZDkGI26xrK6_BIg+FAzYi)!*!C;;wP}Z4f1jdwAm77?g;U{QCDsfJNE;z3P~w0 za?a8ux_@aLZPB6&%SG-{&}dpTY_Gb(&L~uyO0JzS3mU`2J8RWD{$AMAKq?k!z&DcG zQ|d+(Ifvm>@^>xkXTjk`&``2rt6kmvwmB#_DwzFBk2}G}@Tk@s6geW8hd333M0E3)^m~gJn`{5E;pf{aRMiR- zW%X}i9jlC4h6R{eYP(!w%AKb!{jCq|w#x0FxT_-qrab6ixBaCU^8Ot)T(-{OgMUbB z(!Ia)(h(~km}0j7$@r@e!UvB!Fjx9@$R)01Zg~^f{n?fN5s0zUFdxgQe#d8}7XK`W z{k;yv&>5!c1c@N_`lIQ*iLiK%Zw6H;`H8u2__5rp&32=*9!$u2?mi@ruK+3Zm1M@l ztysp-!z}$?%as98e{g|>bXnAwn|r^j^8I!>Rj^RC!vcYr~M6 z_=^QUmP2w?#Wm2p`GqL+PaQ1t8l^G4(!AJ6`aiO|&fbK`%Ks-8d*4z26KXZ9zS zktGM4K-j@ngPmtD+=1oLBJunM(}i#c8!8Tfb(?jf%vVB4V;ygbS^M24H*;h(aUG*YuJ1KYD6a~xtqQ{JsbY20J^fMK`5gBQ^Lq!)glQN(Tc*9jE*dvqW z&5a||JWz9dqQv`GAP!sBgEql)QQy#42^$em?_Xn)Zw;)P-V~32PXQOsNURxd0L!oB zzH38)i{nB!VGv+4PF`#O1D>%q(t~tYfLJ)>BMXP!{+@NE%M$^^uSJnft^jM3Y_2{| anMEGkD+f)#b+dzqM8Me=#Jc5oFy;Rs2Ie0C diff --git a/product/common/resource/zh/gui/icon/ipc/down-hovered.png b/product/common/resource/zh/gui/icon/ipc/down-hovered.png deleted file mode 100644 index b91ab250ff3686b21f69e84ef54b6e2ba683b18d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2743 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 diff --git a/product/common/resource/zh/gui/icon/ipc/down.png b/product/common/resource/zh/gui/icon/ipc/down.png deleted file mode 100644 index de66529fb47ba8eb7917c85c5d5b2fef21663cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2813 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 aTqd_Ki@#S|rLh?3Y6eeNKbLh*2~7Y#Usl8b diff --git a/product/common/resource/zh/gui/icon/ipc/icon-.png b/product/common/resource/zh/gui/icon/ipc/icon-.png deleted file mode 100644 index 259bf2b8be2b1a3987eb4c219624efec2357f353..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8194 zcmeAS@N?(olHy`uVBq!ia0y~yU~gbxV6os}1B$%3e9)PJLH?wti(^Q|oHqv<8G(XL z3;wOo>o@>pje^k-7!3isguo}d*fPj1Il(;09Y_!7De%+7mO*YugUuj!AYGg{S||X6 zd9+Xf2Eu5e01SlDLIG6jj1~&OKo~6)fPpYtC;$Utv`_#B0!<5r2X8MZiZ(ciuwLY6 zUBJ$@lXXMN(IAF)6@JMZ#R2c*?9)IF7z&`FVko$h)^0p9+Q|YIopQ7e=AmHz$06WI zh1(PCfX-~NJ6?G=bZcGD{Mzj9r$B)Z{TIW5l$EdS%^b5K;Ez!!j)uT!2#kinXb8|Q z1RO?34S|9C2sDW|(t*I}C_1pwG}_?-=7SN^;b~9_{mR5E&Z^vAp8N%r{XJd%T-G@y GGywoxSV33- diff --git a/product/common/resource/zh/gui/icon/ipc/icon_Silence.png b/product/common/resource/zh/gui/icon/ipc/icon_Silence.png deleted file mode 100644 index 0c7f6118dfba7e0974eca11645472ff7f28f5fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>4%P)1vuwWp`2mWsO69~8t*ac~nW;^Z}W4KB`3){F20ya88nP(hp&M<;Rd2P?LO z)Fe%8gwdC1Muvf$7xHSpcVV<5m(BLmmw*h=NX`l${=3>!W$=6e3s3B}AbnP>MYjk#{uiCRqtTDvCAWIjdnl(j1bZR%Ve_F(k$%iY%v_W>0|y-}BxFTG2_;YjKj!n4-v~5RZUwX`bJaQXqxckUs#} zu?E0AFlNExZh8Z_3Csc)w5kT3}x`vL(cPhkv&#`MwI8Ap43QP9Rx8DGVO;H>&MKS6AJ_ddPi}f&E*Q7seg^m7^u~7>&%|^|WLVN_S z10Mi8;1`AOe;%$!`!-kSFdCNiWh?HC`rbhI)WRxhDl=xv9_&W+Vx?mx?T^Z%FZRcH ryOT@Tdg<1NZ&`eLLSOGQ(lo00000NkvXXu0mjf_4O*Y diff --git a/product/common/resource/zh/gui/icon/ipc/icon_down.png b/product/common/resource/zh/gui/icon/ipc/icon_down.png deleted file mode 100644 index 92a157f2bc64ee492cec155b423e01ca01b7db25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmV-r0h<1aP)IV2kH7{S0s$MUxCVmm{E3wVa094df&*|21{Nk%sTj);+sG!Z ztTZ4t-X)6jK6$^NL=5g9iL?M*0jod(I3NW+flJ_gY^{Rp*=*xsX}*mM32Khl_5a{Y5kzIie8|Z3G}RqoPy{pR^*TSm zW>Z(m1~4p&S-QtN&+8o8woSX;q}yGqZ7q)HhBdMcJZwCM8YTEe_IOb>_IR?B-C~<%y4!^!ciR@#|hKvyFw=lsaH+)KqP!HVTFPq zht7cO(yw~}`y%1J!Wu{codTEUrRv{dY6NTn=Vf~f0bj2Ne%W$p=?4G+002ovPDHLk FV1nq|n+5;? diff --git a/product/common/resource/zh/gui/icon/ipc/icon_key.png b/product/common/resource/zh/gui/icon/ipc/icon_key.png deleted file mode 100644 index cee4ecb050cda49e0b5d7c7a80e0cf177aa5a0d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14567 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 R)cXJc002ovPDHLkV1mtO`qlsd diff --git a/product/common/resource/zh/gui/icon/ipc/icon_left.png b/product/common/resource/zh/gui/icon/ipc/icon_left.png deleted file mode 100644 index b25f030c8379f10f0da46713c6ee9b9b17ec0b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmV-c0jd6pP)cJgiFqOFZV{fxOza5eZU9KR4>TrirxWm0<^1Om7rq_^SIS;Yd}6vP@j43 z*upq+Et4$EWN#T*tKgr?g03UXL&q|y>3UI3&siM|lUo&?j7I&5plb_b3Qr=8rJ_`M zehF5j;1t+%E%6KfYb3GTYB=>pV8(*BAI9M@`C3?T32X;ZoPW+p@;v7|O%+vaX}ZQ6 zVAGG{^QPwrIXDUTU*A6DtQ3dK|Kzc}#vZU0L~*a_Il884vUd+`%=?6Lu7UL+iU;Fn oVfl|h<__5L!*_Z8w2}sX06djoqRtpOYXATM07*qoM6N<$f>*+mtN;K2 diff --git a/product/common/resource/zh/gui/icon/ipc/icon_left_click.png b/product/common/resource/zh/gui/icon/ipc/icon_left_click.png deleted file mode 100644 index 0552d0dd894032356a03fcd29394e30dc73e819b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmV-p0i6DcP);tRS40pX9(J5M9`mAuh2uZO=uCc3B+}a85b3~8B>$8 z5hf?@rC>(7YJG6va_;%Qd(OFEEVuK32K&GZaG@)Zh--3(z!^}RMb-(_g~*;-R>=T@ zc>;;4b6tqciD~BW{ZE-Qfz=uO`|u8q%H`~_Bqx)GO7waoT=z}O9uB?EPX`A=WFlmV zLLsd}hi3C}MGBk)d#1S@AukHK#9hlOB~q!sllc~?*|z)I?~nd1a0P5RPB$0~J|dTs zNr311zs7j%tD5jHtOJ+TYH=x_Pb+e(^(5PR);um}z6<-H0c<)>w^6ASZ7q#hc(!5Tz=5DPBeBMGp!hsMm@jURt4eQn2UZpPQh9R7E_f z2Sud4h~QcDQt+~r?QXJ@nd~O=vPsQuk`_PM&Fp06H*dc8X14bF{VFOn1K=!xX#o2G zXaN2I_y*u@`YFgL={pW!ku!GM;tZx?K-ab8#W0Fm;b3?qkm_2X!ZiT%06yj?PXgym zW-PfDhhy==O1h>c3($KZ)iFPiAEXKw0o*AA&bc;Us@oO}U9YlXOEx#b8AG?Go}I?gwz5fR`N0tb$R@M2X2GGV+V;G00HUqY5bqx80U=Gy%F zuDSze6ptm9ktYHVz;b57WnToJER&%&GB?Xw(`3e4)n$>%3naBJ0#KPhpJh0>zv=fg za}%|u_GnYh#3V(b7n@l>h_qSMc@$F1H#Fz>MXYa=5&1%xC0jc1ITlr;n*$U8t}&# z^#ZaAXjNvQZ5lehYs++{AHClKYrta(I5Q1>3zW+6hOXh-=4kA@4xqI9QQQSKfItB2 z&4!1j)yan9BrNx%_y*{RE34(4fOxhgHR-8kk^ZWAPtu_+0JS>%-}N#WJ&6;kK|0Jc z@?rHk6h%Q(f7a)95D~`7Ij}2$qu}}N07#~Uw3-cf$+5m}LL!H8atZ9nTmTnEo2E_} zC-(v0fhdEP)ZH|P+3grXqmV?^D8h`_UV71rD+ zvGh890B`4_vcn^l3DF|qz}$ZTo(#!k zqySt2k-^2l7i1Nf8Y3=-!$H#NUhE#N%eq7l=}- zU|H>JU;}s(zol4=3Sw7Ua Z0iRbfP;0PWBM<-p002ovPDHLkV1nTJu3i8D diff --git a/product/common/resource/zh/gui/icon/ipc/icon_suspend.png b/product/common/resource/zh/gui/icon/ipc/icon_suspend.png deleted file mode 100644 index fe8209b269f5283f75a697b191bb57dba4c8e8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 667 zcmV;M0%ZM(P)cmk_NcH2|Vn(rx; zZ8!F9S{-bwL)Ufi-DF=sj2?$NJ_1~u4mrvMPErKCW_PhbO9p8@}f@$VPIFMy)Z0QogHX`EcA7;IyZlMG>G1Y5w=E z-$T)2&i7p3b=my26&JBL+w~^dQrlI|e4yi1+2N_KavDb&gpvGQ0agZ~W)O|zTflya z>+tejo)N;sVvRbIER%o48eh{aBhBMYxr+5Ji2A@mA>3n{W+TDO`?*l|x#;gqn>a=O zyd)=iyZ;NuBk*n75ehYTfUFV^+Mb#f`9kj21h17&PzF)q^s*b)q2(>vH zaZ&o^Ofh>E!z7^}YJx}$*@g06z3NgB>9;|o*L_zlyUNDubV|j^vWz56iS&>`q-APu z0uOezspS(OlYbUC4jd@#BKQe>1YQDOK8259V{L7r_%1er4`3=0#FQxniCCGgf)$7K4_66W|QkHwB~(J`cE5%2^1*;kwp-4>y`Ik(>A%>98nZ)2SFGDtt6=8OffVm zDQ%O_X9V61f^ZPS0xkm=N;y?2&!kjJ;Bn@yAP8T8bLsKM^BhX0c}AlM+qR6b$aM>H z9BAzq1nhLXk59lWu-a^T#U$M8J=5tt$lUILEHDOFrea$Cez;LA%G;;3_T|0{oW@Q& zQBBhRGJ#ovwqOK8259V{L7r_%1er4`3=0#FQxniCCGgf)$7K4_66W|QkHwB~(J`cE5%2^1*;kwp-4>y`Ik(>A%>98nZ)2SFGDtt6=8OffVm zDQ%O_X9V61f^ZPS0xkm=N;y?2&!kjJ;Bn@yAP8T8bLsKM^BhX0c}AlM+qR6b$aM>H z9BAzq1nhLXk59lWu-a^T#U$M8J=5tt$lUILEHDOFrea$Cez;LA%G;;3_T|0{oW@Q& zQBBhRGJ#ovwq4A2uk#0^k9!%8Du_xw|#j zSq5&8#7*Emuv7%9V=hb48{czo+SMw(DE=~%&wv@L}eJdv=K`;WsY5<4f+PL^dQ`u@Ymc#yOl%M#6|fjGz@1(c-)eV5@<$sLUv{9Sw3cs~Dm!f{mXlO{YInnR l;QUBV0gHnqm8P2je*updk$=x2F`@tf002ovPDHLkV1fdp;*S6T diff --git a/product/common/resource/zh/gui/icon/ipc/left-clicked.png b/product/common/resource/zh/gui/icon/ipc/left-clicked.png deleted file mode 100644 index 7978adc09b9af8642a5f0a88335000cd14df8908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2382 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 diff --git a/product/common/resource/zh/gui/icon/ipc/left.png b/product/common/resource/zh/gui/icon/ipc/left.png deleted file mode 100644 index 74755b9f5fb2771d9ce8197b976ff2e91ab725b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2409 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 JRy&2T{{uk!Q_}zd diff --git a/product/common/resource/zh/gui/icon/ipc/pause.png b/product/common/resource/zh/gui/icon/ipc/pause.png deleted file mode 100644 index e7ef825d3bfec21f9cb9f1581511253c6343e34f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2958 zcmeHJ`&ZIu9Hu49WT~xY&Qi>svLr8wd5NLJEHw*nSuCAeGx1Iv%}XQ{YTh#KvP?*D zt>(c}bCjY+q!!o-#gR|V0WS<3Ah7Q)|H97pgFn3Qd(L~F&-24`-uHQ)@+frZ z8Y>4Y5D2s;JS-#zIQ#!xmLCFpGp2k7>ABS2fp647h7}Bp30_Nd4G_(bcyT zYPea80TAs-Gy^G|e^>Hr$37(X2AxisBnGjNJN1b3bQ`_$(m*Jwn&o;m2hc!z|I7S9 zyV!wVUaNMDRP~+IzaAgKRJW~BbDj`fNy$U>v86jl(@iiLnSY87hq9eUasI4AoWD$u zPS06FLSyJk;%HGJ;#CLOAWHs0lYC#zeckY_d%s^~Hf{$8>BB6?wD-)+0`mUYHn_17 zKQ*9|iDy1rD@!l*(md)y;!}3LsSB@m8zB#4chkRFd~c@wj65)N`fIt+d|7&E9LmX_ zc%r=Xh`42;%`R9Nl#pf))OIokVWVUpgiWVTC%hiGvn@~eTU*f6K)-hdv89n`yzjOq zT`*er^!D`;4I-i9r`@fGAl|!P25b_OHf@AsSU4fh^Dnd}RdJST_Ru2oEoGR*H2THD zoF+BK7DWTEt&ut&L!G)KcHLfvMx%USRxbY0wkyiX@52~dx0iWDE?+GxvHT{Mzrw#_ z3e#|QkxK6Rf+RE2dX~hn7lMQN$zQj32!itiw6NmWNl*`debt|4wLh-rS)Ejo;Y3{L z_;NJR>pE$H^EX<{Sd15H>B81~YnRk82%hsd{(*Bhr9S=$UsiTO_o_jrKRFKPyP%bq>9mq+(@DjgvIo9dh&n;UZ?!OtoX_6GZl8M+G>onAJu(IE zBz{_zssMUL#>Ap@oSbNxDmljat|hJ3UR^jn@YW{B^!yr?G|5$*ujS8-H^@xUe3=uE z>DJ~vD$jFLDMgrg8T4*$ZTIX)PAy#}5t(-$+|E=?Bs%gS`!#4PN$K4xncXaQHD~|c1O;Fx2q)c69GVR3vgDid-_Q-s)CUBu)rE9Y}Wlt zA>V*8HE*PjI9d_V=vI0MMJKGVyT!`mQ5DXQ$>V4Fk?a5W6y{YLY&q)taQbziXM@7` LqC;AOlgWPotg`k} diff --git a/product/common/resource/zh/gui/icon/ipc/play-hovered.png b/product/common/resource/zh/gui/icon/ipc/play-hovered.png deleted file mode 100644 index ce6d5db57e577d403254c7a979791e244d4b8a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`dp%toLoEFFUiRi=bQEcQ_+RIc zT|`4i;}NEug9luiI$J!}A7DD7)-xfZD^;R%M^UM{=Vkt@ol@5xd*9u)+~w@T>y?{1 zBpA4t#DGg*5A>Xo#uF0pBM+v4k=&J%f!r - - - - - - \ No newline at end of file diff --git a/product/common/resource/zh/gui/icon/ipc/play.png b/product/common/resource/zh/gui/icon/ipc/play.png deleted file mode 100644 index c5fae9b69a9928d2dd53896b1b0b2f6b0ea22f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5454 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 Ms~h0RYBr(&0|k!wrT_o{ diff --git a/product/common/resource/zh/gui/icon/ipc/right-clicked.png b/product/common/resource/zh/gui/icon/ipc/right-clicked.png deleted file mode 100644 index e0083d9c5889d25113f2764115fe11da5a33c426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2253 zcmX|DeLRzEA7_nj?r_gE)G1?)lb2FTFP1iDGlX<7t(2)Ko20y?3wc+0Z4ybTbL~{mANPG-pYQd(zTfY4eeUab-ICxyrit+a zV?8}R6P7PM1hh@M2Qmcja&|?Lo*tCXqSJm#jT|l9l>Eb*d4|vLHDAk5dUVlk*I@c1 zsT)0}>CwM(p2;XhPgeN~R6!5zk4s~#1Zn*AFni|0*`H@;N^VTGo#=b~#C+taAO&+z zt6vYl<;0c4Z;yDKsLzU%;V^+lu~1^a~V(bW}s~uOH)onqzJ?Gpkhg$0lYyq@v z(sbAdKxuNz-o{QWfL6FCnGS9S(E5p2pRX1HR`N#A4`x<00DU_6dg|Coz)JRD95y3t z0?;k_>$iJ08+@>W-*>$k`m)H_2Ko(;E`wy1GrqxEl5m~~f!&_&!LBs&a^|_)C&4im zne3Zml+rGWoTyR`^@UvDnM^~)!w;*6a!VmE=d$(gN!g)zKzhV0?WisWB*)8JF8l5V zq__vuY8PDpT+iEd?!NrQc!u=C$NMSptMd~*9NVV!LqFGOwY~#wDDlF3c}9(Ez03Ky zmp(N#>8qR5@jb6{S}Lg0;qrkx@pZYM+?>{5-d`skc%U4kO2=DqaGo5N<7qFq`Z!bW zJ)VunKG}nl|n?cXb{Rl?% z?@O~Kt}^ZV)_p-<$m;wv#yEI~vOfkV8W}W@X%~<6{>KirIy+>@jS4+K(}2(~T&uQ| zRpx7ylTZ~hb()ETKMpp0aiAd?o4_8c@z?|EoL?^^u*Yi?(b`z01CvPT?6AQ;?+_f% zb0FM?{Ek?QV(~Z1na;fC_h*KnDyy5yK2$uP80jJ;hO<6!n9jE@IzUx=RpTU7Y@$y> zZ95uDBw`Z*3DsBUk|pAT9um4T*kJ$_7c3AG{fLFX*b<6(^F#rdd6k9i)M6I2Qh&K7 zjN2nTX4|A!-OWM81}1bwzigMkM7(^J1#KDC?^Y&znspGjWc(dm!EpYhM-V|*f4dXH z?fKQ7p8F`XDJ;xP`3kZp<)N0o0WU z!?uzPLjBlxcU=(1KROB}wjq2RF2c&j014{+IKWj2;z9-Jq}W%k@> zP*;O_yuQ2Xffz?H=o)4P2bb1*4TK!YNr_|pb7-)cAo7cAkIWHFJYD_XDHUtG}c zXO>3{;g;=SQ8y?G7B8kPm<0o2IA#?H_HQC_1)|Y(w#BKphcrPJA1%zJbUK zp5Me0E0%+R?O9+q{%AdO{F^Lg*dHX+rC@)WEQ$Uq>pYgmZ5MXxKKY#-l<%HJ3BMAfhY(${j%YCf&M&)j*c;O@!dEZR=}MDH;Vw z4r3$qB0k_$iu=@!PFX}a%88P#3DYmWf))A3j&l5Yb&?Gt9wuX4rczkaB3!%?r>co0 z3ICOKU^rE}H*?4Ut#^e4qUx(Fj^k?jW#(Wa?HvT%Rz X+Lu$yhoEQRH${)-6G*S{+9~=Q-#GJv diff --git a/product/common/resource/zh/gui/icon/ipc/right-hovered.png b/product/common/resource/zh/gui/icon/ipc/right-hovered.png deleted file mode 100644 index be780155001981f6ab559de0bc57e6a1691cacde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2294 zcmX|@eLPe9AHcUcbZlgvrW7_pzw%T!H)X?^r%ByhF)hleE@eZmr;4nhj+>UsL=RLH zg_!ysl!v8xNaYr#Y389zLW^8nNxH{&vM!6gQO))9#thnx=<|n!iqL~)^ssDW z*CS<=u97)o*9g*O=J{ms>?tu63zp{8C(x zD(Bgf8gSxP=7i7I!Rmyb`2!ytlZlZ`Czp)TS9O`at=H!26622e3zV_zu-ch? z2clm5-Rs$QF5ysggaCJZ4bB9pHXOJdMbjquKT9<>2i)*cwd+OY=lg$8PsIHMROkM| zicfOz-C}0*D-r5{{Ag(E3-AsfWp5-JpD!uOb`qZ=UntflY-3@AKEpg~I-J_&7Xnc6 z&K4gyp6iX8?~)}AIU743%l(NdEa~Hlebgo5Ato zTVz4X>Uvudupmiu0ow1XsI=!sOj-7JRFWIu<(3PzT=QoSMS)R&wOsIc|G~G&3Y>_& zoKP8AG}u|C#_ujf!=W61o*_693J+PI?JG=GDmnZ`m$)y_px3hI&($1d{>w92W28GF zx;M4x1Nj3FQU{-ACF1CB+}$m@+ro3qH48#~B@ML6tauVVx`|;?^5{jN9`ItNs;Jz| zTd$VLNK%tD%x)=+VG!*nB@MBhlQC|@qc0^5)9KH8c;w$glMZaLpbGx~<`R*izTedZ z>c@N3F^T)ysBr2~q+Y!)UDBdsL?-#A9O%H)IaSR2S_H39^*gQ^55-0`0+#eoi+M*? z{>%!zs60Q14Ce>e*rS--MTV0p3Go2bKiomj7&a-|j1fiZnte3}UW6QceU>E^D3)B& z+-EoOQBR8yXHpWuBTtpo?9d`;WP^M)9%l{@1-pnr2#kvigMyX%KnN4F(+diYnFOy3 zUb?zK!8g{CVJ(jfTsZYXGoLI6T0jh31%&$vqJ50SX36VH8%Hx7ApuQU>H>( z=A((y*&033lyYB-baIKp0_P=Z0N01n;>U!%(S?P+*1)c&2Jr2Enq6~_I1K&AeXcR6 z?Q<(%5FzBEL4X z+3?=HhQE_Y-axy6#_(v)aoZR+|CNYULk0!yA>x zj*X8c87=Jg4Hj#ON~04%V^g=UM{!<_Nc$%WoVjdjBaYCt$RW5V->fG$}?<%R<0X_DAYGcVZ?eFT@5$#3w@@(dJ6*-nT zBK6zsfR@Ux%#|X+v0yufD{_aq_9`dH2IJk1Opc6Z3=F%yufU2*+gU`0YQd?WCCJEL zCt^%NhrX6f|EfDtsVJF^63(6IQq@$N#yySAlbN(&T3XA<$PSg+A_Kl!iu~&uNEV*b zu7aNZ=fYfR?9#Y-*f#B`JS>enYPa0)lPUyO-nA8R&7Dp+Yci6rhigFWz}!GNv4D^_ z@<@W*wu`w)ftNPtT1gPvWO|+}aj#fIrY&nL*gX{v+-fKYVsMHDFK<%#(#YCgp)__C zR~Scu@lChQB*>2J1YHXJl?rne%P-Yp=}(`NAhtd7XtN3Ia1dfA-t5?H44WN+*xnbd zj!@vXWiU6!?*1sBOf#V%iffgUyI{M686=C1eL_tmPi)tewdPoU0nnROAVqR_WHW&- zBU6#WA-`M~y@&5fkYK&~X$XwU(-CnMD#~Rp8I?+AhE)u*gro+?CV7+bqTybmkP->qXC<5x+qvD_WWWKiw2*XZ*U*BuaS} zS%Q2}?7^*7b>`T|Z;F@e=b;hK$Oc@lBOT@zmMUAko~H1?d(rz%F$z%c75qOr=(f6Y=Icw zhL$NKfg3UHwOU lfR&3}D37jU9l<$bpDk0?>C|o?K)+`&o~~ONcbxa|{{=wv4ru@Y diff --git a/product/common/resource/zh/gui/icon/ipc/right.png b/product/common/resource/zh/gui/icon/ipc/right.png deleted file mode 100644 index 4c0daf34a31b585da98590eeb50d789a2ae40370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2381 zcmX|DdpuM9A7>5@OAcwT%5B5!C-We`7K_-7p(H(}WpWuMY^dLoTi9xz$!&hQ6uETO zlj}-T?lG4hMNt|n(M>$=Ar$?N=U4r4&UwE+m-qYgIj{5id{5H8y;K$DEy^-7GAhna zl>P9tW9@3Y=&GShazuN~4A@Tk<_U>{veZPw;*#@vyf4cE~c#F}<>j~$9S6-JVti5wB zNWMn08%R1n1)m9L@(G7@-Ar?I_(U*L&)2wP#Wn0^Cc$U0uwkBkq6@*n0>R*Hcv`pB z$bT5aSpO?+NKP)-`qd?xq;t-y9nV2=$5kEh);l$owV>mM9jlY#=Jg&4`da!=Jp?U} zZeEV4#$BRaJaUTK#6zba;PYOaIL*l|sh^`+F7K+TZKRT5QqNu<`Z8IuY7D#CgV#Rj4_&NCZI69<3?W{8-&%j zA2Rf)puw8$1ED;rqXtancj9Ul9}fp*nwZ|lakYkKubE;8I}gX=Jy>77>D!ot`~~^6m=0=mKP<|91+N zZSnVl5^&gx$QaHVBF3yExhOc|y~q{Gfoc@LJ>q6%C|_g;J$VQrLweZHkfgbGJA7$( z)nO_iw0FZZ+eMy%fRO5nXLd`*RX|4Kg0xNCoMmU+s6fi(=&-1GuM48TY9WgJwNfQv zWy+z>U?9l3kai!t;xOeXaJaZ9na^{b$=*&CY>Ufv+W@N^7~`Q`&>N)?(zqGV;-PN< zsRcL`0b$HcMw5LHb|&#k-o}j{1$$zF&x&YNL14f^4%#EYWLX_a-)A$hfplBnG!7#S zH*fx+0tHwZhh>SIHyU!$8_}ALT$%(j<8Ep$>(8Z05(!*MIIA~{M$6yHy`|53BcRd3 z6u_(PJw7B{9Yg{u9k*gp-UL_R za9hyht&HLR2YMa&t20PGuhG^Y*c|^o2j*OiFNFe@mMMQ4pyIX#0ZDfjW@FTm#hDPL z!SY!FsEyQjsygKp_2!n)j9cn;QIIa5!c#MNe>3L@aX&r!=Lu6MLUXm8!zw z{I>H?-=#GPU|Z#@0U+@_PmK~|^QjtV<^sp#tF$??3_n0fS0(C#b6QA!FvKg}?hiQn zIbC&-?N(Gm+eD&CJ%AcMPwo1P=;=X4M7h5o;OBk>n%)A_C(jQ-iin(`T*9HLL1sNf zf=n+AX{7_!t<7LFV;MVyMma)_e?NSrC58=K7RW`;ux@>+;s{e6R!e?~<#@ts><2np zH6E~M-17@C=|6no$&*&oofDmCKEZwYp1v;xH(q;U_LwH(cB4rOnqYr5BnGh+POQ>3 zz*S=R%}JX<#!ju8YFq+(BCttGOMS>ksI{J_e-GCbf4#a;78mZEaPj2_n&kn1#J8f# z8JWm>I^tuzT!u#H#JH8j9P#ar-d9;pj*>>JX#cHPu2YixoAU`SOk*4CHSCj@5c~_L zCy;*Pu)PTtE9TV4NFvr(N9yumT1gM4R5mvau3-Y__AiX$82-d(j5s%c;+1H` zdIo)TSdHS65^XN)_RD?}@hz;Vx8y_BtrSXA2-7%Uwh+Ca@w{6tTwB_uy}D#eg^bL{ z8mUFe5)a}oAVdAysuiakrdotxs^#w>dy~|q{g1Vr;sXEwoAD=CWQ1kxShzS;Rb1we z#NW-u8Z3$bcsKpW4S8ygG;WDdY*OTojqhE%ovkv6ZOns z_?Z&)y!#J@((lVpe<<{Y*$5}j_hUMgkLTNvnRGKVz$js4)tw=ItA>FmCSHZlnm@)x zN8_cZ^+X2?W!FZlS0L$2+zF3cS$~$KPe6c2aC@jLGi2RjxefO~Lg_bU2K{JJ`vAtt zLDE{GCo*yT7b^koQDrQNrDVFA@FRIqYOU>r|9yggvyoraNYX zwC{S^>~DbkL(4bkBoPG}?aF|#P+3@J<9~Mtn!kB~!VLLm%{`;KGE4qhea|Rv%o68b z2UEa(lbo;&K`AzYt_PTjMcBETNEFE4}#pGyDI@cn?x_(Ac;EQ9DD+qBs2FE?S_4+)!c=2 zU|Ic~B>P3#o+3@yWE`eYA>Hta1XE<++brA7g`@;J()*iT(>1t=@nTIx1Mny+uVHUq zNqTWkD0o8f6z~GcOwDM;BR&mfa7=m5*_Q2lgnZWFMjfzf5muh?v#|7^FFXrL@33F1 z-I`G%Go`OR!-t5riWt$+ULwwSR%zRZx>_6Oyu9SQM@C{Tp<_h&H%Z3XVK1ee?92Th DkJT-| diff --git a/product/common/resource/zh/gui/icon/ipc/up-clicked.png b/product/common/resource/zh/gui/icon/ipc/up-clicked.png deleted file mode 100644 index f50f42a543eae879ea377e45d71d39d1016a7531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2699 zcma)8`#;nBAOCFbWMbsFq$PAT(!FdHHQDB}a@k=E-E{g06GzM?JDk&5ebXW4lKOPI z%!;OBESIK|3{e?VOO0I438R!t9L{;~`}qC=-yc4o&*OD_zMik=`~7%--e>pudmHLo z>O&A@NFkE~z*nk%bhW`-7*c^ikbVG#t*dYmrfh zIi|Q@54oNoqiUK=4j=4IQ2gGKx-FJjCa3X6Q+x`8=7W-=i&Dq!8ps^YZCLWrJ!rdo zS0K)Ym3DEfQP3ebGUQQ&GI?qLh{#>Py)4rX!g;R0bY#>7S{@b~q(y-|G7oHN>9&V( zb$z$=FG3v6+T#~)`#>H))$TX5LqU4+udD+LA4Jt-`Zl8AN8727RD&1x{1%f{@=2!+H2S8aYoM1^v!ipqCAkG-*C12M(>|m}-}%{9Vc7GXhATM50!+ zZWP%wq|EzE8osB?HdDa&TVI9o*pwBptKd&2T-YM(awrVd!4-Snw!wc91~Iw1NWr$+ z^8~0>moiPRW$_hz0kYKr|COAfn>X2eLD4D32{m%qZH=52k0-teMJopYoBDk^IK$n% zbP2C!4d5FOb>V7-_G5E&#hGtAfo+x8kQIap8U>DuIkf`{aIH;f@0k{g3f6)o`#QUN@ggAPWODqRIYtwrHoqq@NwGUma|0eA_;GVN+x9i?=hV3vxxcAp!1av zpffYWkmVgS-nCJ}+m_(w92pN?UlyCg;;UBBe2T3($1|7BjWEL-P`@t~rshMBydPX80?Cd?dy z?6y0VNP=T$1uq8RNC&m*7SqD``d#T58h*1Y)T-B3!{Q}mCcNl}Bkgo>y}K(XnPJ4o z@~eaYv!@1t-K@65C>W3RT0`yPuHBh}#MQ1)?J_B%#CBt%CkbxO(EjI_X-ewJmwWUO z`QG@3tmy3S*OTHdOkE9zX5gWJtVPTUj(d5-`?ILiu7xOtzh6qnJL8fW(8Z0!ggLr} zj{AZxBBwYtWc3*xU9Y4X0Gx+I(9m}|G}|d(VrX9X0F06r??+_fu1)_DOygbOd&+Sm zKvGUW2t0gK{Pw@hnr9EMeD98MrRFMAzi{*SvJY$IMM~_~C&9@y{5IVEG`w^EHFx1( zoI9(8^4~)mYOuO0xLM1tl*L~(@(iKj9dIYr%nrE=Z*dyTa|;!)9>cs#c1}lE(qkiO zVl#|UkHuYUOgd%fv~(pro9z0weF)v!n61Pmy5ryoMIq=%V z-AVOT!5zzh--SdfofeH~YAVZCStb$vKEfUPz@0%V{VE#K0N!1e*i=RWDwDO<Y?;lK1|f1cPCql-d$1x4b`ur@cV(7z3nI4$-Z!3u6?u+s!cevMH>oL7kO63o zU)z`~7`9rThHsDa9e~+7n#wkUZKu0)qq@ZV2%6Tu88=5iz5L`D{0$IlGqME13=m}h z(j*iN8-vQb+#O#_lQyE1kStm1UfZCVL4c8(CiRv`(ry@b5TAOdL;`-q?p!+%#>r!{; za?sst&(m9iNFxwTKK|W|$O)avGBY<$Knk2e<%jEsx@DExx)L*P(UfQ$%4BI-YP&mI zfjU&nN%XPPvoH0*P`LO@oU=-IYa@_&JbLYhzmtrd)w#Azy=AkaX8=;mvKN~SPU#0r zAth^{feCv?z!^1N&vh%vmp490%E(r)(L!SVySUerHWyGpAJt7vbea?xXfRd(P1koR zTtN?*6)*S#Usp{urtUxk16wsxd3FM!M*y}5{Q37wm1OE<%5=ASpztKZ!p<;vAp+=j z?5tbt?Cp?^0x5$VU!AQAG^drD1MVla#l4jJWQGbzHoA3#@hm(6S8D-1?ptD>M~#4I0E&bLr6r4cN7Jv$)!T3;LJJ?_*Iy>!sp<5L@$Wv=J1{L; z4f3ozS2Q&2e@oqK42Pi0eqhgbyoO;JJ?!tuaYAsP|n8Ms`5Nd=xM9h ztC1p2=&0|+_$au2os8cva&s@Q!n^Ir@) B^y>fs diff --git a/product/common/resource/zh/gui/icon/ipc/up-hovered.png b/product/common/resource/zh/gui/icon/ipc/up-hovered.png deleted file mode 100644 index 73ade91b79683b12c8577854d5fd94d872dc38cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2751 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 diff --git a/product/common/resource/zh/gui/icon/ipc/up.png b/product/common/resource/zh/gui/icon/ipc/up.png deleted file mode 100644 index 0cd949304a3e2b939b8e188c8a456c3a9aa58175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2911 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 diff --git a/product/common/resource/zh/gui/icon/ipc/vol-hovered.svg b/product/common/resource/zh/gui/icon/ipc/vol-hovered.svg deleted file mode 100644 index 2a42f67e..00000000 --- a/product/common/resource/zh/gui/icon/ipc/vol-hovered.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/product/common/resource/zh/gui/icon/ipc/vol-mute.svg b/product/common/resource/zh/gui/icon/ipc/vol-mute.svg deleted file mode 100644 index 8120d372..00000000 --- a/product/common/resource/zh/gui/icon/ipc/vol-mute.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/product/common/resource/zh/gui/icon/ipc/vol.svg b/product/common/resource/zh/gui/icon/ipc/vol.svg deleted file mode 100644 index c7330305..00000000 --- a/product/common/resource/zh/gui/icon/ipc/vol.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/product/common/resource/zh/gui/icon/robot/charge.gif b/product/common/resource/zh/gui/icon/robot/charge.gif deleted file mode 100644 index b9f66660d511a71c18415dd1ef6ca039d5d6a650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23177 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 z 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 diff --git a/product/common/resource/zh/gui/icon/robot/overhaul.gif b/product/common/resource/zh/gui/icon/robot/overhaul.gif deleted file mode 100644 index 8ad2b78e7f5b46428564857c7e9e8b3fd7cbbb11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138602 zcmagFcUV(hvp&4jAq7J3umhnNLocGF0ikKA(!?O3AXPvGL=3%4XbQrkK|ujggP@{< zhAJRxKomsOfarrgU_(Xt@w~tDzUO?`^_}m_KiPX_X4b5%x%Rr}p4rYWPBylobAT)4 z$2y>TyhkCsr6op3r)Qz)a_QG22uDB9!U&6`o2~em3Y{B5jWfe5Sz_WoshHqQBt24V zJL^`xcU_bb$}Qn_8kTrdQA=LgvWqTh#HIFcy>ps1{w?B@+%)A1TuJMLr%Q6S*w0KWs4>zdQ_dPpi zsN^0|+j2NK$T={Gairs9cY?Z9LUnGqrQ?HFI96`p;D|Ekn%UH^`^oZp1MfQG2;Kqi zn1GDRy_;myxCamT5<6#fZ@)IKY#Th`q`risl1_flCM~Bsces_PWQZr|2C_~-;E}I%DL@TEaI6w`D3^@ z6+D0cWs1b(a&wi6uF}&7x7`|&&pfYwYCt-vR+s-~>-hWQktUiK9}!vwN+nn3i?yB} zl9Gz6GPt*lkLF11DgJaAb-&7fdwGTS^%vg569%J8W{K>y;ux8O_1g|6b{3Get~`yp zea$;Opti_2Cyi-5`CBbA$L_&9q|-j*N54+(GvF6k**;p@(lOk1NKbcri1n?(1`-i5eb4hH-;=hJM( zy;BTt&%H>Ooj9!eIzx)FgK7NakN)5XR$uRyzM0uk*A z4FkE+TQ)uXvdl(n`0msG>-MIJA1c+i#!F2}gMS-ee+pJz` zcJ8jN)n_I5m94U2F03GvsWqfaoZ-XoXZGo9bw2xWR073_H5y+r7!mofy!G#XT008p z-g%95j{b8Lax~1Q;Y5h>)S6EAsbh&`g#$HdQMAiR`o;Tf4DWux`yMp7`w7pCH#t9G zCRkJ?+oJjT z)*VeSDtwFP4oeS`M*=M(GK!Iw7~!3^%_l4^I?Og)(_t%UpJJC1n-Ck3915ny#>6Gr zrEJj*4UgX)VYhMp&+sNq@LwXy(OWbr|NH>{Gbb%RF#@zSu`&)bwXgxLZB0zAEJ)^7 zMxYtV)OHieW|OJ8G0D`9WMyY*4gS|hb7Qu|@I7{3bf^ECYvXQ7-<@i2wHY z|J87kPijKMCa;L3_ydVy5gX!K|4fx&M@x(dO^#3WiI0!@_rJ)Dj8BeFii}SH%{E*D z^>#$Xg~uOC(*Ku&hlia@TvBpqTv&t)eT(LX36rR(a62=aBhAdl%ErptjAm-;NTHaS zQ*7wwX13;ZM^mZ={olIu_^<=95pl`?)(!t}UEBXv_n%mZP1u;39+4PzFe2P3F+LXj z*P893{&!!j{#Sedr5pag`(pjS>TcR_X45}A`#*O2-$NVW^Uvjf;&$WaKan31w-N4% z8*vR;U;DHA``6EvAK$-y{j$6y`uyqRhxhN^F8=-I^}?(9IpNC}&u5>_Je{6;@_6#m z#JJ$$gZpFmMn{J44h;_U_x1Ac-0tbVb@N8o^=nrIXcA>SU`TV)2#Z;0$a!%Q?(vsq$!h-y~+??#JO!m=?Bk70JQd15cJdm7}xIZC2 zE;c55UsUAYJrUtyyF*#KLUslR1qS%<@bmTY_VQ$I-{#@&=IX+5c56f%}hy~OpJ{T4fOSNb+n0EngmcoT}@R*SxHerUQSj;Rrae4j64bD1d*?P(W-Q_#>{$;BkAi#bgYEhj|VC`FJhYdd7I@^&&;{ zeY3;uXPwIw9Ewz3t~9z-61KMnk6d{@T4fS8TJMrX7&~c`^v>dK`Gm)w%%>=>)2OaaNxq!Wibu5n%gz*^p(ioQy%xM-p^c1Xt-VK z_G5AOW=iIZ`}eH>esP-}v4(R`c`fWKa8chj*7a(Bh-13-n7i%#!f1_B$b+$;!Z#1N zhzyD6sTOa?&TZeZ?V_F8`zNKl`nMS!J~%gX4fg86^F!93yKf(z!kO5cEX~K3X>Grd zp8E97gS*tSwF7qFE+vz$&4*fF+_|?d_xYs#g6K{4neFk(TMnQ3^zwc6(Ymd3 zE8h>yKP*dfIC^sJkM6Xyk%*gXCZ^LY%)(kN3bXM}dUH9levxyz*ijj*q^8teDk{Xj zVyu98JaWEJ?_BeIkozr9*6HdAT^Fu`tx=1RT&wnzrdl(M=g{ybXpcF z+@)_6m?@>uRmDOqqFz_~?`e5`+&vAFTc!RMB6cGDc+{KPy%GSlMvXFuI+-w}|98DZ z+8j`)+C)YDmHz#$ZsoQCKJ=7|BMmMWy4tdMrpRvGNyjEbwiLC{Ps3z$xPI3~#dU7orUU8aRG z?#}(7M%5XoAO%jCSP7~GH~&f+QHp5X%Xt6sx-if1Q`f@rI*8O(u@*pTdLO3IDkkR{ z#G2yTn|DP9J2U4Z?sMx6;fP7 zZOGICEH0q@)9Cy6VPOH-Mp;>n#^o}ju(8W`)iA5^NRrr37t$_EA(XUKLxWw?mZOu}0nbciT^ZvFJ= z=je)=EmwBp|NfKm047bP!rb(IBUm|?DHWj%gNj|-Qr|#5LTrWRXLoi8;T|NhdEa6K zYws35jPac8)H~FF^hHLTiitMkdizau^PB z@L0uUVV2?;7im4*E0IRZPF19nWJQI}Ig$)s4fO?AmwdZvdy;klYi9QEvdG3WviSO! zhU)uqQ7fW+GWHC9J)be4i5wR%6MB{h3bVz#c)8A6+_5Kz42U+19ybjOaQlawZB5(L z+c92>-9nIPGnad}DD-Ve`I#L8CKxmpsxb0(Fvnd&IXv=}_+D#A%Q*c^SgkB}!TPRo zc_`oqX#MK^+HFw*PxgR@gSr4TPtMG3n?D;?-^>}YY$->|iW6&zE?GP-!~}e`q_+ zcA@pkgmbZ2A0}N0)eL9X;N~DY*Q%h_U(1QLf~@0!Dbk;s1XU7{4V1|b)6RG?W*O`) zKStKKr`-fj|N5}kz(VA4$O^tUF<5$*-*UTRnuOZQdEDB`MDJD;m7>cDSImGcfRXGQ zz+h{JE;8k7+=30i7C32K@hY$R+9-5w*)9EOB5%^i+F~%08i%d{-sYTFdaR$2cydr& z#KMO$-YG&k`A9sxIejT=n|w_symJnBI)SQqO*v0}H%vUaOU5U^NKw$Mskp~tj>BCl zBJnkmO?ZQl#v&O(`J7Z7UD_f=Z)y&2xvi`I{jND#|2xMIY|CxJ?2I;ZHPL=zlWi=m z1k9lvQZj3u(u{)T-71H^HzRxm{p8oR;?{av4NtA+o;3EgI9TP_cT*#i%)%soWgXh}5ta#p#J$Jd$$wKGheRBN!NCfsh%2+T1Ld#M#UMaHy$ed)MaxY~{d z8jPvQc_OExqmp@jw24}34vo-XUz7oWM9#<=NJ@GZV}wD$LOIzUUXAPbXkPrkTCwtH zhk&c(G`RH)34t1(yrEXG%sGPxOv|1c){>yo-6h1B&R*QZ7_s`7^4FJR2AiWuwbdcL zrA8v*Lqu&dN1l++cw}p+G@Pv@s&ACJyD0NE`I4B|}qop4)}mJej$tv#jVyO!y82dU^3GN4*@nDdjh=lk>goQaiAUJ3Mpk z(zUB+E4KOF(L_X%vQ*ySvW;T+n7yi(C0V-fBP9!G>I+3w9ahfb+M-+t3nqmv8Z}O! z&HfSffye`&)FJjl-~DW}0%EC!Q81x}nM~c)FjDm6)x6?**(ltVP`b1Ya_5{oTUA;a zZnZ!WP^qb-4fAXTy&budsh=>7f6zMJka@e8KfR|D-guseyg`L#N_mN_q;+?`bsHgL zzl-5EMOtgV9kZ^ubnHNrhzpI!uqpmP7NWZWp%3tfu@x{Q^}-Jk4x=EC&X@LVsZG^Pu@wgMjH*npc?k(*X)` z$o8z>!jC^6(zJK(_SsAk1lc*H?*zRgQ~xggt8PdG{+*1@{t)1Qag$Uyx_$%L1SZ?$$ngX}BEAz!M{S0eCxry_AR8J<$O05GnM zi+JaBbSpl~*(^(vA$N$E_J@oy5oBMvX6L4vqs@?0W*wzv;ZP~eY*vn@e|BqV7NQ)+ zBNID?u*JRjS|O~HL>%GcY!ryw7|OxZo3{$WBAWqkj=26Hw3dX(0Q0HK$QS^I2KL8_ zDaSML%6o~$9B3>aIK)MXuQSm*5IIyTCQty_$P{=t=jPPNiF4VGSS3Os2$Y0z4?EAJY(@Cb!+A^7Qbt@zEr|mU;2>Q%Eus=5&jM^OlrDruv5*WB zKmo)$xg}eq;lYAqV&i3u?`2B8p57e9S7wDyYK2}@MHC+RWg&xoi%*$`Wb=_>cDIG#zUtx_U3kKmK_b$KjgET`^fOWnaAS{H9{av*i* zqiQ>C5l_oL zLf#jg=#4u0etp>6zZhrA7Hdzn7gi3m;3as#r&_$Iw(R#bbF$@Bb?RSh9PuFD zX|eIsTb9M+g|Q(3hM;#EQ09L7snt=4M;2|rb)!LbrlIGp)~qcaJtLVRsQ-cl!l-A~ zUAziB|AO7bPwNoBvZb_?&po*w9oPiqD{dl_Bo7oV$f$G28rJb5uk&tMEvl50I_)hNo@zC=63^X~YChQ-ezW!B zN#f;Jsdj@4N8h|ZMmXFXU7bW?e*>4x0gx>JubUo$Rp3c@kyyjyk zp`6jyblZk{Pv0Gb`>^l0^LCdO0x!L4jS5-T~WO4z>0}q)LUP*cj99rjI-hUDXa*vm}bi8}r z@ee+7UxrXZbztsxwsTE&PD?O}M=B8GzqE`7{wfdIoiDK2-Ak{iU)xUnLoW7^haPO#Z zwA|Ty^1dWkH4oZ$?`Aa#rpJ*w?LUDQ^Qi9TLx&$%k?o*yc5EG!L!FXR0g4ot`nAM98#p#mZG+uub27&?xR7xP4 z%mKJ5>?OIE%z|R)2F@iQpPN2fM*b?fThiUlH5wHLi97O#P%NM&9e-kM^kn_;nsDU) z=6e~~+rBK=xwhUL-S-fo!?#!Otzz!Ieh=A2z9-xa(;!1<+@aUo#%{*o_pgrK>4v5n z-O&c2Pq4Rjc@N&l0MFa__k!`dT-bcuh&KM-{b(#z#2>`oMuzr$Hi9hKRHDApYd>*SAn85uURuql$a@vIMHh zg&BYoKTBYWe~l}z_l$qSjw1zd9T3=rdvvcDp)P{p_fL?^C!_@kE%5HvKacj3psQm7 z%Tm1R7MuM`K zaCJO%2)yHuhmr*d^Pa~sNAPvv#s;^yhk-sHDI_p(p~{KQN#;vfqxu|C(2c3+4* z_IK&2*MHhNpOD6{G65SV44D8N~%-5-(7X2^1Ntfu<6G84pk1HA@ z&vBnVe1w(Bm6}1-k(Kl$xr3A5;1yOGoImUf542HeU7@772RQ@Zju`1K7$ov+MA2~q^%NipMmN^woSta}Hb)4T` zW2DL?hYV&*oodxMMan!Ngm4EQJRzygDYwlZe zKtO&mQetIlUZ z=B3+Z4cZez^(M*E9D+)Pc(?n@5d87H6Q*6)*G;N9Sf2_R=z!dMjRZ}DwDZc#Z5g-! z3uS(?6ez`C_f|vACTu*Ro)*N@^l_|}ltl)SbhfO? zSg7J2r|2kUA-B*@ti)=w>uCa0`dwWtMeDxS10^_4S}nM+i4xfMw;&fO6*@rkf(wQ$ zBjo9Mgs4kT@lx)qVto#foD(IqP}!OhXy}5Az;M%I!@1MY*9~(tYpU#tIOkaM9_q+2 zq_45+jc9252-gKKwI_X_Ky$QY-8G788>#z9%jIO}JJk^zJAu}+h}?SGb~S0yZDM#l z^AbXe;Cy+cmhhoXd>mGAS;mEeh{D>6`V6PnWQLFu*jsya)`uTa88z7D=QIgLXdE@v zh-q>a;Q=@Tl0)+4Ju3ot>`lf=Vl_6IzKGKNgaHu#kl?KBRG9wjtT^KQZO_Ox%UHYT*M_0i@V6s zMz;Q}goxSlJY9hpp6Q@0NilQ~H0dg*NgN__$m$aAJd!sZ+}}pQh)A8ZakdaKfjn}> zQAcM-IAR}IzFzLGsGm^o`a%EtsbO}FPZ|+5#v!l-qZr%{dF%X|9=6prq57w|cm zzG>aUa}*y?TMBc(QFMy}o9*rY{%o`G&kqSa;r2>x)vgQ}4nAHfVjW-&&ma+%;<-2v z4jDh?@XiszP+acABr=Co7uqv%Ml48dBn^9wj4%Mmm_SjcB%dhrI=2b7FSN#0e^?*5R+RLviB-w%5W&yva}zLF{vqbXk6kJGj3MH%?GO0-RJylRX!53yf)C6ewQWj_FQ z>>Jn*rYlv2mkAJ7<_H=v4XPSzgN#NsZLM1v@@2WAP+H!`&FnuvFtI?`Fry-)UNzI;`b6nDp zCnQLau#?)?)R;$ngi~fX8Ym0%&3>|L%?gLWOM`f`ge0$VFv}_(v0e%(=m3rQ@=Bw% z9QMgV?szjhi945lG%p9?7fCTxkYab>1~ghY{c_^eJS*AHXEFDHYZal|O2;N$(RFO< zIwdc!H5WnRIvQ%U12~dVTw<4+Qiw3yNRTNJ%)UF>dhlvn?8WF1OppZcTfrWVYa=ph zALCh6n~{wVQKlx#BCrBnxM?u2iS2@Tl`(YVs5{0yB$KeQ(Cz!0cyNeYV&QIhV9}m2%DyHzZ+|> zrHWp=Az6=H=hC4a$Ps!JPCC!j=pa%4C*e?J=1kUl^TGPl-AIKH%rh?|YQ?i&+Q|av zoP^8?@nA8WN2C;Wu9JmdxR+xWa2$eSVInW>vtq(V_UQc>Oj<F5HNf^)pLWf$n0R{Y`Rf?W-YVjV*FYPV3vV<-bma z_Fm19$R^_dy77&S%UHEqpe|gbO;EyRK1}JzL{HUF-fde_`%2FY1 zYSDBreQg26ITm*|^qx$&v*?wVlBc_&N{%5nDl0qBIwGsBT$vVWs$Uh<{#vV~09tuZ zw>QGZsdvjxxvp1Husrtzq)k1D8~ZnTForiXk)%$Z0d;El>|H(_1NVtBD?H$ws?7bBK$$S&`?Q?;^@^;b zUpgsi6gWK1GzhR?Hl-NHP~d}dUxFxR{Z!c{2j{JmfL!sIJ>F_-3jNCYaSPTUlKr)W ziEzS~XVU3L{4YFSLi^%GsZ%9IC$(z1j1W&>D%@Z$O-)C}MWnk=#F|Km^Q_{p<1f;G ztoK;&Fp3nCQQ5q9N7??o^1KP@k9!Mv{Su^MxXrzVAFpfH@5@PT5|!YMgS+X=H%F9= zIZ*M{n(Or1>&I+&G_k(KQ#^S~SKCaw=RWZmZ0=8Y4M%eb=8}S>uYt<&EEDY~G=49; zc5>|@W}lyl7gB=Fp-G4*3o_L~5kDIyfiHJ~wM24yMHxwh*$U6B791t2D%&Xf><`B{ zO0Jh*Fp=40X!#lismsz5gNgbvZ+Mwjf__x87+T=XvkTSS=_ zU!6HS^jcH&l40!(XsIk*7`=9ZVS!u{fBT0f5%fz)R^}mUYd=Xjf$He>pefr6>GN@R zRU`0o%+5ox+_a`5rzh8jT4mV)`jz47pA#oCzqObo!Kz%)aZ}aUgiznYj;Ego24S{j z6R(k!Y$yjrnH#Y%fx}RRX#l1$OOSjC+a+H}9?s`3aq{V6N^rS;P7c0Q?B~GzlWEQ$ zFf_=kcvy3*RIY3aMBJTo7rGk{qiHTzAyVn;6^u%EvTGV!OwDlW8b(*FI6M=fQm;^c>?g^jiylttT)H-fi*QH+-jH9ga(}tdCDFVF?-xSomf29eH#=Xl zS%6Fp?NWF8u6Wcb6BM;%c%;)-)?tB1uqFMaF!6TX{d_ndm%$@QAAG96V}?{K zHW)!6nO@0L>`i9-v*j0=MdCLJ5GHumA(RBD7`!?qY07*k?do-CElgq`wES(z96S(! zs(6V}(Jw&BOv^;g7BMnDW@SJ!i>%Zi2wO;A(hlqsRf_p6HW+eIuzY%#jGA3n{2X7Q(8exA`iap%V87Z_M zxc5?D0Yi?z0OCHm5A@Q(=pLdvSz?I}U&A-OZa{XSP3Nt)1O6I zc-Y9_-yiwMsW{YeuF{>9ElYCA4VK#j%@#Q2-h$!kb{~svwQG`p0Xy*rE;|ggya z;6z(!CGAKOGijL1{+l1OJ~SG$-JxO}8W@~i6egcU5s{g95FVS)r^D55_Cqz@d$IbW z7zcGiuJuZ&gsd7(ega?{cZNc$k3ghXg}K&n0@}E%6`{r#(@5k$P~X$IOkF1 z*UgbqYVzo)BWJ&8JW(F*Kn_qu?;Mq#&yg6lI{D#*`ziIK9vyoI-|5cYcOK2yr=}vC zleL5TI#bN$TI`5V4cGC*kCEcjM?Eind;dc;Bd-|;3z`&Wf2Kw1yJ|ByuQcjRN9%_V zFfLSi_136uOMorTT_9$A?NqnP%s&oFo=s-eZ9oUTQLObCbeVwBByCu%aSuSsU&=1q zznp+hC{&VW1x_-HiY0o3WGEZ;Pxm4t=~>5>QRdgNwQ0tB^om}~u()@pCH9M2#~nl^ z#&4KzMpJ3|n7udU5vf+?iLT}GUCC*k0#%Q-vCNn3nt*Y<#j-%w1Hk&NY*)5C0M_Nk zMU_7WKkQfZSHanu=6Vo{rv0$*d)a4-;(m&Rg%;!OGE{xOUX_#zdUCtURCOni8pC5( zAG3PR3!?B;UA%Of3B+9Waht+Mm;3Z_e3H&{DUA&XIbKq}V}d?_ku<l%k$3c5mmQEzk`HX9jSnx@YKQ|X+pCQf_aCPn z{+P>ANaduxr@PaWwN&ntdubA}ksTnl48ByQOcU5_nv?66lr*xAX4eBK}@ST3wvsZ0!=hEeRrDXOTKw-Qx zp$3f^N(~zq?Bpn@pYBegt+}t0UpmB=td^P8)@)(ws1(>=xqfx#rZq)oc4=fdlo-)P zmPjESEW<OYB6yjI?Ynh?uHxtQ(bV`o?TAZ2O!lhe`p}m*?e6x)BaEp9-^_x9KVlucbW-5jc z`_Lc%dFxWZYkZEdlMg#UH?rvX`olQVb7e(0^)#?)Z-suFgmd;V|8=Cowa>2b%cabqXR2$~9k#BYD=O8w6NL$h?d@S{rwb(Y5 zA*J1lu|Kv%0=t1t{$x@YkPYvWI+i#Fs1+-~?E~SG$txN^VkX$qXo>g_(F`O@usN5| zh;ZQ#Kmig`aY0zIU)EzPJ^6MB^@9wa$n{Vav?rnb<_hTX6Ub`p4W56cdNdGea%=k(90ThnA!{95su>5MMmqY{_V<&=Ey7nJc zS@kuLC)?t?0Ck_5Y=uZq?_Ki5nrjC8$`an)ZVTt5T}V-~L*Q_rBMs(P6HMVQAzwuS z=r}zDu+YGk*Xso9CIZm%)_D|*ehBvGZa*(mWMYP-%GuV(a8*1ID=e4)%3&eT$pOYO ze94rR5JjJ6^Ff3Wnj*~G`Kvj1gJw4xFw!58pUd}3CQI7Z^g*$c9O61Nrts>%p&zXF z?K$D|b?Y`S4KGoOGsP=)z?9x=PDorJmJ9XH6$44*NDbbcEq!|KcW@3q551kHwB@Dc z5NWuM$jZ>U$}p=JKw}%(D(GgmS*u~c1n?v!AaYpsNg>`)^bnsXqT;s_tYUZ#-PY}W z%j}?vZ`Xj%Gv8=(kC^B?$1f8c9xJKccJAEM6^b_HepHFuJX+@t0vD4bm=%;@vBRPE zVsot*Yo4CPK8!;1@C6!)3A1&PY}{f5X;W@YB@iP+a90darrYK{Sj`sCk#@K63Wd9` z-fQi>_-?16Spio5A!mz0F4)4mdE&dGo-zXfWJTiVzD=y(4?OlIPrcmeV|6DO#-=J* z3vOAh-nWc;lBIEJwGeCs5gCy*6)Qg6p&O#oT5WD6Zl?Xwl26cQWy!hq;@YD^Eyka| z1zT;!YQsSp3HC)f^|QH(F=UAhp_A+-qrF*r+=ih?FnYQY(#|Lvier3JL-ry~8bdJ{ z4h>NOA_89}fi?UCOUU;3Ayx01Ue{vrMAqctSpCC0KcFH+D8eW!JNWIssf-UPFJwl3H2#+9%mk}_Dj)ZsmRiH_ zb^DdRd#m~2dP8Pf$m|I}rf|quj$QUcT3Ov!-9LZW1!;XQ!Qxb9IP}?*eqQmPkBFRSnAwy}74paAhRA1- z?+3HhEx-!)|L92Gy21Eo06YJMH2&#G-Uv}eHuqc5a6%|XLkaC#uUGDv4+&Q`TZMzl zgJu6P{y$A=`hm(SIv8m!a+VKKH*laPu>p!QO?o%0U(Tp=wp6)YAwMX|hD#lIFy?RW z3Y6KOb!}2Kre#^9vyp#@@l05=<_RRO1AIH#;jJqY&CxGB%P3o|+DGz=x$l^0*6`fW zGP6589`?h$65Tdd?CxE$1nVQcysPd*1|%q&r>Xva z*0$eN>>)SIt>g`hCUhJL)DuZ-UwE?Jv_Llexxg~!=`do?GQ{7oRyN8`#1Q6{mRW_c zk+Hpd`pEOxQr&fp&t*8Hi^5AglGXH zf>LT$RzCwzU5N@^(2SCuWJ|hNXqU?wcjfAyO&?@Fvhgpl(Py49@!9@*92n}{ zKxxAA5OPr0a*J7RsP9|Kph|IfyQBKrFPZzYMrL0}F^GG|3keiL=#xWAjT2-8%!Es8 zSyIWY=`NXs-UZFDW_fAM)(nfPfyNVg4;?-~zU0Sl+dKh} z8~)*kfppDw`Y>y3ljU=xj`u1S-b9otfH6G^7*S-(4umbUst^+rzA7IOc%jEzC#ie= zs+USkvVg1uG2&!BYqD+n5imY0#d~_0NJCnXj<;4r)r?L(k@Y+AeS^gD&rEiWC0?-I zUK;)CMo=i&;0*Jb?!g;2#PwQs>eD^2)O7Bg1U)F+QhU}5w+hme?0N8B~XOOz) zRe&%0wo=*1yJt^{tAvQw3ZZd1u^*8I=J0#6Pu;3BP?XtYa%CCNuVDyF~>>D+F zk)WbfwgyiSKjYHVqkB1F{7|?e~6;G%!K^i%~t)AmYGh7GYS=0uvMp1l&SpNACIe|Mm~lCt<;J_ zg=9mNSNH;X-`QSS|K5WiT*>G5EoVvZ^8)V+cDTObTW})Tn7tqFT4wEc<+!tPfg@S^ z7qumozGs_WU1jLZ;H#p$GKpjhFU3V6+x>$VQ8|*0Od;p^__VPOaisO{_zxQeYiV=M zvn5#qEZ&9-d1xUfmX3$V_;7Jy3E9c5;-mJZv01qCJV~9O>ryj5LgNW0A9{tAD?x5J zIc3B^S%LgqdN1CT?JV(??12k6qf4x~d34QX<;W9ZB7yMWDzIH)%v^412HN)mTCBkA z)lQ4tV;3e<3Kw<|_C&sRMoQ(p`KE&ge?; z%p`ITZ;fTRUB|OG6Tu6Z)B#KzZ+Kx+M{lMei1C$a#WRB|w++e4xGL71Nw6;zE?X1ea$hY&;;(l37Q3dnk+6nRC$0%3$Xz5*(#-gkx z7-28n(sy5uO3i8{P?11S5gI~*r`daY?Zi;)U1ZFr$Y^HT@$)X#tq9ZMOjvWOwmnH- z%vhFTkjTlkO}=Eo9#*BOvfydpT%BbDEnuV{rW2{HRy*sojTqZFAAm3I+k+k|rS zYky_;;O3|SP1O~U=4#Jz5Gp6}{)uxZ_zx#XMnMoG(geLYPTL{xc?eT%NUw)Gkku}wp4+k?t6(t__=K-KqNy;}alxd=Wa zl>}7)co1SEFnm7@dJ@%_&7C{|?h$NLfv0yz=>W)+Rxlv!t-L{3Dk$wLZq(WqOip}? zI@q(*Acd2yA5K6fiL$NeGk7azpk`3BI5u1v@K+u)k5cy<=r7 zw`xLqnLy1i$ZZyys9Y<^R+()o-@%|jHVNOU!Dj{6eFU!&1f8^kWh7!aQ$2>?^tUT2 zIji2DG_sN-3${qJWW~_DIK_Y7^fepx~L?^4!fEVkK(B;N|0zQ zm*H>aA~J@-p*}QBD%~^LV?yuB?tR9^BIt7k6w0%g2Pz7W1)awwilB{_(%FAZLd@xc zYz&n3L4nv16PiLXhi3e2v1Ls+i48#)08dEun)wv6_gR=U{=fN?e^5;t5dJ?=jn@AU zs&OF&BCR?ttlZC;9UdTfJZLzV(@XLa~0 zo85ZdbXX#z0&;3r(gh{I@s_1yn_|bShjMBw4eqvMNIen=X2&A*JRsBpau=cu`ica?Ko z%ew#G9ZkA@&9N9md6k=E7jcChS9L(KF+?e+dBU>kzfp~kMS+#a?UjYShsK&c@h-Sz zyj8It{JxgHPXH6izz0-ThP|;IVq+<1-6=*yd`{UPvN;)=ln7Bgm3pcP(eTHf>P*3{ z08tKME*1>TNa54SFqswRBP}P{4QNB9ymE#i+V^|-m1L~j$zgmZzoNwunIy6wjO)ad za8E=www=Czd>%ZvyP_JJi-TvUD7V-dwU;_pI_(t6Za|ye#-h^>$Da(`@0@%$*r!Mx zWH&mDCxeb2`m^Py+LdiRT?=2I8bk&eAlffEpnCqnH>-ztd&r46n>z;pU~+ax~};b z(Fbiixf-B8Ev8+nV%N(|_FxnF9RjZifs@}1++zY{ha)_scT)e_VUZecEDI8|WIYU; z7_e#8+i9^+;8E~B=P3X6-Nt$D37gu&DxK5oV&sJnhuTA>)>bu)waJ4k6{ai&8|nugp+~8iBP; z#Q=`NogRf znqI~LM5WoqY)0VNy21}TvJ8{%St(Z)`{2%yDU1XMZLKQk`%VOsPi~bi1qyhCrjA#^ ziM*R9{X@f~H$QILtvk#K-;Gh&-KVZ!0eMk)FS!)%V*X+pAH$m~f)cVc>YWkvJzk*F za2B(QpwPd-F8m|RTiIqSwZ(_57emrsUD#3iYuv0bfLZ6-&A!0Fb1JbE;U?Wgo@@jq zOSXZFxXvkxc%TnZmtdl;eOY@}%Ly}`dnl@0jcQ^)YP%uBpqbl8f^%W^k$~RQ;k>4( z1>9zAAtup(UB+H7TSA;o)fpWga+ht_$&qp~=xVr;YY!FgRm@4^idSIuE<0| zg3X8+2r`Y_BA8{7OB=ys8kv16B~y|ge}X8}`w}X4GnWx?uF_Kd`Ft~cwp(pOwe$!d zY;Ki0t4wH7W)6i1g84?X5VV=LpM{vdEYRq)TO6++_yaDSjo|Kz z#VOsZMs0=hImU~OX0*XD(x4l70}lZBKv8z~=k%r4N%12=5Zo&|Fx@}2*w=IbbooM& z_wU^}TP5%q$1J<@mA>3c?F&X7IS;#DCl#MI@A#=>j(c4DylgBrj*ZCF$kjxW}ETdR(VB{l!k^xogJm4=Yr|*b(d_N{I5zN{slB`>26m<4C zC8##}Z66{b*J=k8miSV{+)tbGfvZ$hGgD3}*Z_VLTjplZGQNIwLQ_QmMm077Cb~`= zNLHK%=eZU=iCt6yuNXCKjDR$H8K?x(z@dOQ8XQU*&N1e`MWZP5lpcTZhxULvhy>MZ ztgUP429Y}@DvVOV5Z8*W6DKaz-$5}Mn73aC(|2BH z>Z;-kg9U6`7+|Ym_7e^|5o{Z_0>b-nyEFs#d%Pe3ql5aTe-8{9CsgD>I<%DH4}Srg zy2_*ji-pQ90KYImloTvoplZ-VUt%P%MRj_nEf`#cU#jzAn z2UL%_S9hDzvBid``xB&@xf`{aw#2(Xa@l;zw@#qex6H3o=Z1m6$&0@KZVLSaY7PPR z{|~51`=?Yhr~m(vYASOl^$Vm*nr1P~(a}N$)B4~Re*gV*)+x?9lt>}1Ae8Y#Sge16 zU!ffBEFlt#^CV!O{*^D?Mm0dy7mmks)}kw*L3O#emA5`BSJ*xMt>jynTShbP)`MWY z{`BlEodCRl?X`n<2|@8Aw=1x^$__Zu{9a=j4twXxUm@n;Fp$#?u1q&$;s%4QSVY~D zVJ6c(GKjN065_F#`LJh9qe*ml>-boYXA8&9ZCyX^(M20M*M{;5)vc4VsUp+idt7X+ zrqI} zS1pzO?_rLAHuW1%FaUxE58zlhc!Yt|oU_KK$nro|RVR}}F%SzhXV$58=aqd;-X(>a#$X%tUh!z9+mUag0I)Q~L%CkE7 zs#_ZYObuD5aHwUGZtJ3d&;u;T9j45h)RrXc1Q|k|N^%rQKd;T7$?H#SbiOj`!wVq~ zNlXGHu*80)BZsZ@tB*J>4ARC(u5_^d&<(*JSr3-zSeACW;ywdiFokT3`z%L1Nu=}S zuY{)8HK#>(4AY*VHoe7CjjshD76Jv#oo?S|Nmeztn}@Yj_%<>3LZnv5X^oekZ3!`* z7eQmeCPhgSEDRU~h1SKfN4)5$+H9!vhDagaRmAVcDt|D~p;CDjDfJOH5r*~DaE zEiYUJRHjfL0j*Au!D5Obm4xl{f&^OoD$_dm$5ia=9$pN4gwS8AJ*H*##`BVg_A)8q zHij5ZquumurF&Vt+rWcI73c!(*u7UAhS}iYQ6alA_9`JuMvBrPs&i7<0`RQM*~{y68^SH;lS*?iX=TMm zvI6VkUWI|34n-?`jJX$V&b~eiyWR?d7~@>bI#~BYseAo@$+&fxLM4_KaSlMhA(9#J z{-mSE#+O=`wOVFn8gLIzOb!|s3aVOH^z6tITS2&DREHMxi2(F$^MG|xOfOJcAFBj@ zn^AlglY~dpM|Qms-OPz$01Hb-lxhr$WB53fZd?Y8;;lodcT{#;oOe_cn10Rwq*KYu zf@U?16h@Gc3h(c2aq}9^sem{qv@Gnb7oyDP3*p*zk7zIfitLS-<5R{gngu&Iy|kDc zO0_!rVVMR>Fk`J8m^47kkY=1%0-Bqpy%M;zU!6%WFe$=t! zw7T`nNsL5s^_qlkN5`Bov>v$sEiX%Jo}#g@h`X;%7;FBNB&iR|#IKJ@hX+TA0a@18 z;ERq^@r){7-&6BX1hQFsPSI;M8(_^py9+{wMh$EhSb1~c+3o^RJAj?`z#DlcD4QtK zlGUDRGvbOU@NDKokh2avn3AJ5WgugRb>B*!rJ&Pz?iRBBD2KX5+_}(>J9w&cyZ|h7 zN6&t%jTTEy-9;}x$HpW^3y4O%+377)cVZ2K4XD?XAn~X&8nv0PKXHI`TFZ zQ}j=KaNWE7C~o|y#d7Ts?=|Cm&wdx^vVe6=mV*pQ405=vRcN@ZB}e@r|1hn!$ZB1j zixdE4WILcHVwUxe8T`{y!Wx-$1lq@NgDlD=ZT)niCUk&oed6rNihcwFqE4)!OWGM5 zZDsoNakUKkK^s0MS^V;{52a!@hj8shbI$IMWQ93?M0;ff-(y-bTS;IBpwag4qimll z);5w0oZY$v!`;upGr;3t?`t!Rru)KN!1lfSVrqd1s34!O0mI={_0SuVI0 zep3NocX>q}A~$=n9P2-Kz1p-MJDpyDTknVeQA0>C*KIe=v@{#z4I0WkVp;YuRlD6= zUUtkuA8}1o;#~rEzk1IkM)a6$B~@G}inxFdGSZX|yQ8gBfORabkZoPr70844@EG%sc~buN9-2DX~WcqbaVpRsKGs ztt_|E^kj?_UeI>>&e>4h5rx{Op8I3(9yJRX?1SbHPTI*-a0oK=X=9k^7 zuZm(NEOGEuLIy#xlEL;54SJv8Qm^PZ6vJdnnXXXVe$_#}q#awO>Y%Ekk6HJV8g2&T z*~pQPnC1^u+If{-5totGG3Q!gG` z{PUOq{u;sz+4i8WJ3^GG8cZ;?bg=>I(D>ASby|=DE$j{LXqkJrz=&}!jjrrAhj8~Y_j&n-bREOpe7 z5H(Wi1xmw@6QkS6C$T@Po({MZ46F-&qPlTm(^s?u8lSPF+n%1B#YT(~z28qbCC{>} zf0^FnIz@lEBLrnaU9KC9tphttFNd;}Nof*iu77UW8ln$+Y@o#XYp~*rlH23n6f=UNK3 zthTep`=s}X1sfIYKWr%etn|NZC@0IP*JX~8pBwU`MCBxm^=TUt2TZTF=3d7c*qA!yKDh%Kyr7a~&N}0K{JvPL>2v3SJ0>8=3vbzFJCWv@ zbIxR8gn0Gkpz-R6!qHiGfzk&{EHz@otjrZ^zgwVt;GbTU^28g!h{0ZS#IXDuBH1we zo18Piv9s1`2&Gj-9cR4sQrK-{tSXB<0LYrsLB{8s`>0Hq?#8?>AU5qXq$LskCml`Y zHC(x+66)ac_WVH~xu)p*NIN!1UN-4WuBs%ztqAM0uJ+ACXwAqDh=7qF;?!d{1^u`L zNZo6{rct}^9!DT`OIyT-lx3I8N@AK1+z`F^dc)ev#z#mKS}YwM3td}czGIDL)jlkx zls3L8WvM36E7Q%^WAPpem#mx|6+%`d8Y!!gT0p((`q>?x5{JLJVEg6j`a#)uglnIz zZB}fkl6%2Y#^h0_6b&{vH88X#Si3?4a%W+nKUB}p>;#nqR?7vl3v(Ih3Myp1QTC_0x z&p;BWz0=Q-n6G@LmuLj>zTb2yT$9y;AN9#^Woq=|3^t1-_~0tBT;$#{rd`?tNWh85T^<_{ zoZPyCbV0RCBs0X*ScpR4GT-j#GN7q$Ncz$P0dn z(Va|d=sIKc5z}r7knP!FaekL#WQw554KvUGap5;^yMWrV!niPVAE2)Gv=FxrfW%8^ z%4`>9VL-9q1Bn3Nlp{s0eN2s1C5}R=R_}~%o0LQ%DOd2wL{&)B8LFB*#GC;c5eMra zS`@UXPQ6t2KG3Arh%cn9?CYa(`@wD`?si*BBI^Wr{bM~ zRV4X$LNh|P1nabfqFT19%VQ;n&55-v``C9rNsj?(eZbnNqa4j(f{YFx=ps)yrt*#a zs&qvM&fJ1oDd4u{K=>C9oY)`yc3f|v8NjIiF$Cb4$!t%wytT3XeqZ4dOmj#ib#g^F zpqXaAo89R6EZ$32E(z0Kr z^AdRb(Mu99`r%x_wnzpGVhJ(tiE?F0S4=BM8YIT4xSTFp?aIax$N{oRVAJS%uu8}i z(-czNunGZTG(<27bz#|NyJHmTdFPfU-QiX{Axb^0;pn7+)Qj&6bs8d2Be$*uR3++7 zozS-}khwx1w~=#5G~et%d>h*m=6>^MJV~{nb^NrKEOU=1J}BX&`P(%B1DNp%8Uv9q zP@Q@M-L5pydX5sM>n(X6cax(5>&!l(U8uM#0_0wm(|A-VeCvd@$rYs`I$XP@ve!S~ z(K0ziK@^+QIB*fk;wsMKhM;~w#(k0~=#h8E=SyS9j{km8uRI0Q+F@=I*!)SAERu`I zGY3HdMsD>OQwwQm&T6f~R(;CHN&p)Tu)a#|6M^EdpN5xH$Ml!oixM9~0O;(i`(pFfO**%xlp zU%oe6EwwU!#rT);Nd|k@gO3OB&uo?piio)u+Jy(heQ@a_3iHcU?9(X)g~&hK$r|dR zrH$#OBOmXfX5@Vk2o|Jb?96eW2ujTcc5mPj0I zQ!OkBvC{pwqR&5snHa#4|ASVvw*KG3%mibxWP~g5j#p~D!1@QR)cl7qWB3nRX&$L@ z2}6zB{1>hGHo|mVj=S9+DaiGxay}t8nL1ndq+jqW5 z-{;Tv>-qsP&sG`}wVVF(?=roquz|AaSQdu76>i_qL*7Rp$rpTH$ZRk5R*7=>vtRZ5 z6Ee9`&xg_24>{%D;N%W%@YsJItnzC!=zefl%9YCB>yHeiLb&fW$pX{GFG9BOq6OFf z@7;OC^XC_FsxJ85D`%a(Uyy^2UjKYX4&gO9Gk}%KU3A8pXLgch-&^#Y&v5KyIPTTA zlci;9djJNHIB1RFvT2Q54{yIZz=doi>pwrTSk=Od2GB6B=gsGrL6o zRyD*u6Cc{0O%d1@Qw(JzDd+ckx&81a2CvUJ|I<_wn^a;`3F^W335Yyv=uJ%E-wL_D_kPO$v)U;51W>T&&nZvCrVL8kVs0Q9}=a$P74DpDJep&1OCwSU6>5M6-MUS1jn&?d433N z+0*PqCn_)hXL9BndI)+8sVhe{+K_c}Oe()akU{>7R%%BxKqKscBu_cP!h4-m>tC|S z*wl1cE2-Y&$u8-Dc{xj4jD-`=JT_@z(yB?j(AS&T;0M}W)5zpI{)H{j*cF&7Wowum zTFe_?QT^(2!cE>8dLYIsk+{nckaUZBVsC;TtxBxb^>@qxq-~WtNs{}mHpTgt1Lm(O zcOuDP53?(M^B0{3F8vvktc=FX4|eEX8p`Dq6C!nbA?hTVVK2j;Uby#5B|D!jIA z9q>)_9j^>z^Ip>?G2pehUAv&r^QMsut&HSMf&w@N#abcX|HxolrrK^13wvmzTpIZvHe6|r0`JO+38Z?Kj-PO;RJ$bH65PLocMa`$p-7H(NAn$R z6$ko#;0Z4xUbOd*&M4&aA=!JGc(Cd+-2v5k2J$!-lRM>teDS>ql^>d5*is9XsLy)v zu~6!bQLYB_F($tK0B3AsIxqU2G>=<+0b3Us^!W(yBB}ZNjT1YX&OCC*Y zB&{(!xyEet={Q)wSCIHzri?9?I3IREvDHM|jF-_U!dGo6RDWU@k}M^T5{7iVTG+yfR@{>*CZX z2FfIrqxo~LfLc16*6-~p(pSnMT;>{pvt@H&0Ov6tA%-lCQ?I-FSP!~|Q3O|il&u9b z6+l8}yiHqLV8I>sT2OEkBOiwFrW+UvfR%WTP5_Sqg}?AgRZg6z!T2yc8UrM(AQ^$^ z4~A^nk|cF4RLGIyJq8U@@glZ#X_Ayg`LHx0k%@J>C#<>Cr8&ifk+z)4-q()? zhn`V_(#V(p=;SzhT^ARN|0bHQU);E%rHe4*ha_; zUnGbM;y_HFmTAH=$s~sd25iRT0FD6To1X|nGnS4jCW4sG50pm&$stsS%ZUH)#Mv8? zc}SDAOM7GL0BI4Yujd4i%*~2mRc_z*qdNwaP;*)L{}>@u*R{#7V$WEij_94Y`1Hj2 zJzL56vHr}pAT4StkB1O<+I2nFp(d0#_MH$izm6CSMw%E)rxmD zpc-M@fPuU(Er6vGz`Bwoq{>wiqkMx#3kCa)&}zt_!r{FOb+`9(rGK8Q#1b>ATL}gL zpEjFa2T6}}SUb%!Q9nI`WS7mP$f?QDWzcI;-94A zs^wL!uB{vtb~1B`Q(R?{U6GngWPWrd8=Ar&C^=36{w&K*RaQntwo99s3c6R*Ry?|J z{{0|PKsgUql&dBf#37sioH7;%hyNpDqqTMG|0U7L&JbRUp=WGHxaBn| zBQ%tPI8Gy$XtLsWLV2{^ zJm)|GB&xPTUM$hj9|5Yw-iPY>2b!m{-Lu~A&ef?M^5BN;=KcFYFHb2Ow-T#tf{7{=vb)Qr!{W?nQK^+Fa z{VevN2!}uI6q4$myLx_b{deeDLl42~kQKMCbV*K#cThfRl#z|38jJgL9b3}9k=uy2 zosM#Xx+M#O?G{;Nf6H@>)nt{LH>hWw14npzcs-^ixWsppTH|@GSkT=FN34Al>7zjI zHLrX4S%tE<9x(oBgz8UF4~PNB7w_u@LRVuVS^y#^Pf15HJi#+aiL%wgIKSTU*x zcxa=73P6I`rz|24X;qR`hMHS1Lj}MPYgZ*uBAG?wOYROsSZOPfv`54B)>`HcZzeM+ zTmU=kOZOw1C636#1JayJ|3V}vJ@JT1Fb!&SUQOpF%LEW%({Ow zn$v2rsN!PmVpM@^u%sp7Y*th)d&T5s%sl!ll=9IT0g{U2D13P*QUW}ccIZt!dFHIE zVqQ~IN#fuh9~$%uQMQ+-M9xRChFhCkfDN$_l?0xe)3w*mT!xOT&J3yEQyXr~hH&*= zVXB{c)ze5xS_ji2$cf7Onk!S9y*tKK)1q+r+6Pn$elM}{u&m*W&;qcKuMk0m(@xW+ zT`MGv^~JR@nKN7l6(2%+jngJAlt{x>F|9 z8eWFa1c^Y3L1>)7OVfe`)?gR-ugUHZr(lF-Fw^6CC(}(I2vObsPC89Ahc8reB)UFf zeZQS8*{7NfZV|~vF7}`MqO-J%O~|Zh4#NPqyUH>Wg(lbL&LF*Y-U;kAwThk8j*Ks#OmL+n4ZWq!W1I6Lx4 zAB-3wne}tJkF(LXE7~*dE1)wsp%S+3^8wFl;aQu{JP(?#L!ziZ*^LsA#wb%qbmG}u z8pG>qQ5YFU;z5u7T$Gb^c}ybV{LVvIQa{~DDt*ix%az*8^!otR#LCl5e1_@|Us`NY1l%JjBMmea8?(Mm~c z7n${Qr*7Uut{5O>1Qk0br}p>?mBgXov~g@a@WRA+HIbed>~#pI#QoxmUF^8QqV*>o zuDg_wwFKBkZ!tQL*+=FZ`p?bJMB$6F{!;47?u#%6HB zpFQ8ml-vtbIrT720r@d4X0kSGzp8dY8?Fwl=Wf~p;@iMy^bb8hMl@63$yJR1kpMpn zMoh{wb)L9KnAbtgZO&v^G7fc|sOBF~*3R@w_LR0~9@@QV`o7S2Mqm4bx{O=rSY=wB zvM`leo&q5zqKuU)034&&byZZA-UGy@qx9gV|uUU{?3g+?lz@%CMdc# z_44ziFPf{joiKybRJK;ETyosbDBpCyF zi%&5L27^x;7g!1_LGl}`Pc#p_t{Fr2b^zp>BkN1dJ8D$fa40eYv)h#nBG$sUzSyq? zdq~Oq?i7lAqCALhSu1K5ZGrQ_;ueI>8;b3GTLk((>HS$GgItD9Wc?*~%yh`)I+O5g z5a=R)=dtS!ocp?duQeqe9G|(n>y_zPoPAzYE6G;RxZ;c-x;?<{5s$#w4b-t~CXLvB z;l{Jz>Po*Tjl9epc;bWIMHw2l#jJww3o=30H|94?m!a67QWB&7r$#zJ3P3D{LEjtaIpSfAx`J#bV-!g(8 zOX_eO2~=Y@WSoekG^qK2%l3Rb+T(Pz=i?B_-Vch9IU=>Se%e!*SXb*?BU*z%qTGR6jG#%Sx<{dH? zU(?M^fO|0hpKt#tER!nwF2p){zk!`q4eZp|r4pef72Ut`BZ_D`Vu!VUlx z`pbqhl$riV&I4TGxaK0+PwUSB(@|Y~2XB>4*Q|#0F3~_9W~>~g403JbnYnPc(}_Tr z&N4X{W5algFdvwAMT;!wh~{kD!jpbNLdxRQc5g9`--!7ov-N;~R03HFSM--xP{pxN zq*ex~pcne}i%YM>R#D;gI@wUf9Y_rx1?a{))3{f7`0#n(k90kE#qZ+}Te8x3Vin=S{yVSYRzNFYyD4Xw@O>r!9XK>)Cs7!U z+xhb83C%y}79tC5?y3y&H%PJ42Q?85(MP0EvnejH zF=7g4H@i}BI|*=~T?v8?F*U|Xps&pV81qzI_6Uj&gK1?l>_5oo@v3)*2vFOar|oTL z`T8$zY|1$-lERu%Wg5Nx_UTD_TH@}j%HPTw2FpcN(nW)SC4>eEB8mY%Dlz(@rpOT zESaLS`ACuBzG5IeqOPeQm7&PawX>1kou^J}E1=(;IV0{FoAkDkicJA&6~$6msI=Y3 z8z!#FWp>7d0kt6`o)t;@ScZYY;-4Hl+a(-OIUDCWxWJXd$k>u+&uX7bvORmJUo!JK z1v&u8lf*OXaw8t9KkInNa0>+@UjwbC+{8ideqe$DLSx(bqs!bzu&>eu>CQS-?`Eip z{94_6x=QNQV@skGx6dER;{kla3VLLfqfE`))ZhYgxnc=d^F{XUZsAw0M>BD5M~ZX2 z+ozgB>44p=a=(nTa@7+bC-)2*`E{M$T?91vo0|KDZQEgSyEf;2@bI(JTc7r0_zQ0w zLPq!e6?hNIsoRfXwv6tWMFsBhFo-hWUp;yFanpIH@Gr7#sqnGynhL|qL6^WmPvbDE zDb`_e@G6Xc%R5U=%h;`-->YC^w0hC1pJ2EFX#Rt>!EyD@LsgP5Vd8lUdrar!ab!oF zWO-fi7{vCD`!qMct{mL?E=v(-BiS8&Tl2suh$M1k*UI1Ms0S5X(y3b79k7WT7i2Kx zDD_6F^|^FE6kF4F((P%YXEyai{$HgT(7yU{u=v`C=0GNcLY4G?ELVoq&LpS)(DD(z z*-O3Zc-BqFEM%JtdfjHp_ST4G!EGg5!gGurz)UNJ*WD`LZDX$(jn+ng^-mAfbddHV zzm@3uG|B^+DqDk}x9^gaWrpnSj>gdb+za7+_hWdLpbm-}cps?{qvfltmZ@#qwBA7+ zVvaqZbLE3LFG>DAz}i_bscc7PajX3>A2?1$c~{>zsHiIsS6U&Kc>!6szQ4MQ=4r6| z_t%5wp-;|%99#I{EiUH4hY!6!e0>0{neTU}XN6j+;T?CXHx%eNLHl6wYdACFf(5EN zZWI}D`-;DUFZ#@jw7uRk%oki6t+CpB`Ey$3iA_xOna3}%bfttWybkj6xdFg-`Ank0 zkG&ZLD)Y*IH9(IW@JAg~ekK0uDeT#o_$H`ay8Jd9JS*nat(phZ>R?;K4b2DxsEmfy zJ-A72X-f3N0ag2Z_!6s2DTz({2d6(5KJ;47omo`d$KbGxYwR4Az)7P7lLkFU>5sk= zsvO^MS&bAzatv6}oBWf-7(+ItMZGm7vS^9-JdAq=qVfN`J>?5H_1}O~Tf~OO#*+VI z1=g%;^=%y%5btfl8x>!v;uxD1A*N%O~ z_~l<=1js%WEzVuUuKdvzfWva7Bh!lQBILe@a}7Jx?yQD8fnS_5u6J4}VvbQG(PtIP zD9l%V|xDK50;;$LWV>1x3eq-fusA3f^zEf7T7pXJYpOnYFoSsB4g1cRmmXER=@3=IEZOcX*fDf9jMNlBp1X@w10vbKf1P9~62ceQr z#HXs(C3oK2BW$;P2GP?{fc2eR=^${GOM~eu=2XAjd(fkEqz8y7?Ok{5JATs*^Y|A@ zH?%iPa+IZiiA#=h{-2W{npst|1`z>Y1rUNQ=!#;LW%amV#k**g5vE8a>5-;y04_(w zm|mqCD;1@Z5B}bK(F0RmbRT|+Sz3|k124;bKQ0GBA5?u|kG1SGBz2~xOZ5n)`%E#f zcrsyE&J8>~<8vl=2}+iuj$$ku%9qtk|5PunY~!a=g}rl-*OQ|Ms$iz^A-s<^(z4sh z-lHFO>~H1V*e13fZzmEZe&5<=oNIFTDI^H7O8{%%d;-M1LY7j{&kl}&KBi~7}21{fm}kXMJ7 zR3upU8Ajm1a-$@@W~OD<5CCGFi0>vcCH(&AKuuz(DZc?j$K@NP_}J#_vw{gOFGA*B zvL2;&%*^)WJ)lW;qh(MRz%JFi+~!A}YG)VFuJr!785Uc?!CNN$Y=8AsJXZR5?WRj8J@?ZrdTP3#abzV5ag;B91q&>~Q-U1+7BjSTS^z z#}HsUQljVJPdYM?qe$%ShjzgZUIw`iV7-~Vr&Svz1q@HU+Hq57dti9htnt z+C3K?=UCF>jVP-KR(ro-|IXw0AFWw4dT)C4U*i~(Uv78QSjWG&>P~d^YX(FQ%+w|8 zh6(=~D91V0Qe{VW@S3pSvL8de-Ol~0UQ1`)4(^n6zJdAc6fN<>T9c<P7x1&$?TAMtHChIYfGl3fy+5T1S>!)+fN$2 zN52)p&z2gkadP^id9<3aZ{z3OWDE`fe}9nt?5PKf^q5)v`twnVVxWjtq2(Ad7yJ1f zC+hcM`z&GNsm@=XoJEDZC+S_M^a#+Z!0UZp;?GhwKQl#pbd%CkcJPck#f{^bI)-AI zP(u=hRW^X^`$f}v=Vh7tR{l-Wt?j0oMOhkexNynQrF&|>c{CLNeCqPt@ioBX_f3Zi zT6rCo-I$%5smxv&XE^m(6-&ly2;TIqko5KDw&&N%#>fY<6-YVJoEQM?W%b3RgByi0 zq8=?TgLfGlUxIxf?!I|FitVsj)V>3wN=A=@RL-A>K5%KOZX=PcX{Idt(fEC8U5Y|r zzm;x@oyM4Z`e~i1*3izc4h=_f0Vu_IwklLfdi z$ABNjV|UM5WoXR!keBaTtua;hj<4;TYPQUw9BNB7a;$%%aWWmeA6LmG*94weW{~}| zfUu2)y6AbN;T5H1Br`dly5*VL&9SvB2Z*QSAmb7PbPdEUl(|97@?a=2(?uz&H8)LE z9)SWI4=*$)lQm8%%*Uob?k1fI|7kJF)4kH~)C`TQ_%g*qFI7qZO1O1`?qEA06R zL3U53${u#2YagS$*GGSy{xVnuNr&%;zh>XK$>+fal{TyA_u`N%&?|=!DhXjnxrLni zlMm}BDM}xvjcM~X&&o5d{66BNx2lGPovi5>>?QwxIh28g-{$4U+GI!b# zFwYa9Ue{%1kXHqjv43)01UgOa*!;tgrVfo z7AF1ohWUu+p=V7_;@Np&WVJD$QRnsSMO{QqYagK6EA&Ot1(Fm_=8Z=WO4h%|w$Jpf z!#VU~BWVnf7+XCV9|w~Uc9L;63$-qyA@hKn$#g>2<4Sl9WX?3(0Zj^Z1g!j~?&PK# zEkv04VgvSqIPws8kim}(Z-$#i2f3BND1YQ`ciagYpoUTl3>{i(A%Qe!NoOC-2CuoA(nC$UXMY^07&7 zMfdt3;!sUVUcBkMV@Fe88~3A{!nh@c@tq0P5(rm;_FQxR&=7d{#HDue%XXF0N|?hF z*Ai*Lw;1U4%9hmjchcZ=otFZF65nMUAnJ8 z_2*ft=KV?{=h01*j~+Sx^WhVc`)0gg7Qa(Q-_lRDR6GW#b@7Ann?g^|ohJ&V2{W&C z6NAZ9D<`gMt^V2KQRNwP!1@g=cCY?alKlhT^p?0^%a>p>r@uL5X`cJga3tO+o!si8 zrZ0NES55y#_c2u0%gyqQYpUH=wbvHo-#kT~uk|!NrgxIFA-(eIEikVnG~X2X%+Ua& zPYj&U2m+f7xx!?nh*$tFX$my>@>L|^2-&cM{DXvx8Em}Vd2weX4shN&+iY#c0UlH5 zvnFCW%)C)%CcJ}&<0wXYqB=69!3UHhg1jGU^mNsdNLV4Oikqz%v?B-Wn6LU9Fc3jn zkcmjtA~XE;xAu^-4Cm&KZEC~iwaTN>q~lVEg5_$}X-s0<;8 zh*6O|8%(6EY%Z7;W$JZQE>3dj?4_Y*Qjej>P}&zwQACv6=$Oa3s_C;??{pn!mCqeP zo7G%Cj<8FS*c|m-`b_u5ys>V0>iK#trA)30P3;gCdVc&;0e{(q#NNc1yqII5bz|&w z&eHl#hw86SP^eqlyiOVw>)`B4UCeJz7S#BjKhmp9_H&yGQt;J%b3BUn#%Veu4Jf(r z+{3f`#&qV|n(M+XL(jKKQkdo*t)03E;}?A5L&Qph)1mAi3SpVa+T42k$vEoebj$+- z3*7^Z<>s1qm@W-RjS%(wklB^&tGQ)b2P{U#3w#c@B5JXRP86uAk^1`-BCd?(Ok$nm zFbO?maJRWJ8S}g<##$73u6Q84K<_DQy$+o7QVN+bxHEC!F|Ha~rn!dM^RR;<*<_a; zrRC0>d5vy_CNm>aLR5n?CJuA1ZB)gr@SZ>R<6h6-I(jf650WlO>>akd=)v0``215D z0+{y6A^T#`JpDUvW`}W1Yw63P25e5}cv-K#?KJzo*0F6M4pn2bK=&7f&7^(RtB&JIoKqbYUHb zu7cnWxj3la=QKsW|Ho4Q!B>WaFzMki`P=J5aEVfdl-WXMxyBK^rRnLE7cAq^P;lU= z;|aL;f~xdUEn&8^o~`e0y&XTsD0Qy?V=nd#;3vQqu>Ie@eB!gxn-(&kn?|y-EKwv< zQAho79>j{=@!5l^zayIR%n%rhkUXX2)ArkH0SS{fiW{p65D(s|c>EUYKVNVVWKGxu zd`vf2sd~pTqm4bT_ms~<^E4jaNHv70W4X?^Z7gCRm6;pcmc`PIrmomoo%q~XX7Hpt z<|rjwr{_aZThdYVXMtaBKp)(y+PdgEqvYTrSJQuqfIqr%wA;5hbxvNdbZU!P2X461aDkc z>9eHFyB_+ot@`+nsimeZl!qt!4oiR^mwnniWUqF0?Ha|8^LH!={$o}1@b^rJ>h;|c ze`h_f^z7hY_jv!A!-gJ<@QmFbXv{tbuQpALN^S7 z4Q^z^_g2&{oHnxf>?ASb?@X3aKqPS`;qoFN%(6nM!6^*I$|#0r(j9dT+E-X;S%lX> zHN|CR5)aX7&JL@jat-&&+X^HsnCq8G*kwlZAgG#=n=7}u5T)xB z7Bptnb10ZkoD2K?aJR+4J6#2sJkIf^(LwJ)|LA1~TY_YhmD#twZNgj8j2u(1^jFW4 zBF1vL4zmg5a?sIe1LGZuMe3wHG(v6C)JTCew%>LWZkmk20jRd zto$ThctmC) z<^fLm20jYyjSKm?30K3${~uf5!PbPjben{9iU9%yq=W#WD;>m=LXmE0QUnRTYd}O0 zgd}tXjR;DYE+`;X5gQ3jR5VmUP(x7>P+^N*$<5y1^W1NrbMJ3>-!*H^%$k|z;HXk~ zq}GWVBjq~4lM;i-S6c_W8lTpJMGN(yaSfD6tJ{J@iK+T4`Ut zMjlIjE>$t=_nF^pF=>RlrsVHM{312*QKk zJAGeNaB^ZQ#OqXw!o-A3Yk!&CzGGd+pWi+^C392vOz*MOX~reK9^l@F4EE){9f%!n z+1Y<3dcbWy`4T@hU`qQg?_C1?c|YW1DhZLktLAfbdXiY~pkbVmhPWEkF^ z)w(bEv@DBe+`fyXk=*WfUQ?QDb@5W}+>7SHDL32tw5NO1G`}s}^bFjU`*=a|nSlnX z{oYe;viu9J^3q$at=fLKFCzwYduw+^0>nOQIk4fX-|pxf@=V;whp6@JMcq|9o5_KD z=F5av>x%|C$p1Ep(gnv1xB)WRUY(b@6C&lGJ5W@VEBvC=ps&LY36Yt*pqvFi-B%7L zK+aayveAQ7eqg?KrN;hzZ75a#BFva}H+Zg0#M=3ViPrjpxI;XPPNwa;mCt-F@w{W$ zH0w}{*%E1~JYnv7)&-CjFpYo+8|Yhc{%m48Dk8?Xtm z01*BQT3!~)A({QM0i{)Km;Q#9v`nrSDZm?X2pbb83u54gE^3G$Gxrx7uJqOmoPKfh zU{-OVSxk+d{)hS}#YQ{IAKIc-a+QfGk3`J78eP*hA`&Rbxbxhrp2Ek-c2f9>)NM|# z!rJaN+emG2Tt)a7@a(OC(WB_kqgP!TXrCW-hgDg6+)W(xp6d!fZWSrLz8$sGb3;T( zTSPq_>;J(Bp5O0XroZ?Eez8FKtMA%^Q0`FK!Su!qf9tR`llA5n_n$`dlh-2=ja$9E zEW^(5vXrxXLl8pu5ZjfyZC_^=hb~Cw-FXh$=oYH@m8N*c{N!zr29>YwS(fA=kB8oW zdDbG?Bdz{WW5a1L?EF1YtLy%iYRivTJmu*i&u=4;9N64lj|(oL$wVq6_I4eQNkp`h z12YlWxfGc}G!s(t0g?kyq_X|9JmECu%n%Z8Ko(yacEMC}hUMkub$jJix>VwcOwF6^ z-`(UTprPW@1gI?La2ctl*x}WHr#*SDk!LGvx9k06$m`!QDm)ZTbznjhYdNwp%?V4c z?rtsv7xfb@7$}uR+K^%ry6T;xasoG_)O68i60hx0%kfj@ZJY;7$ZrfHP4e`Znikot zH>Fn9R5~j1$IM_&o=F5zih*pJkV*OTWhu}qT}!K}zLkIZqOqe*xAaj*3^$??mM6F7 zX&D{DKIbOI%{b!!rdPZ69>+Vvd74<2cG<3}3g`8x_eE5dQ?v^Ln$=o_s|pC-dF>QR zEP@GGh|kDS_XCF>5R@}%$8BbCSo~ZSJZoMYj%c|c! z@XMF7L@}|cXe!tN?n2JFg&!Pe9{)s!M=Ll%Vn%Q=%9^Mc8B!|Q5rm#R*mvc49u}L9A-7Cy!XM(*ORUL4FjNIW1bOH zVX;4XuSdH*@0{ED!fD;xJY>=Yj?g>yl9t48RbzjqF$ZIYEe{<2@#HOR_-p>IKT0Rp z49}YJ)iq8XlbI@mtwISW(uN5(t+(+sra~1Ke#6xjfQA@8nTX_ zFdlP1BQn1T*&fnp#dOsd0`h6{Hjp00p2Bo zFsR#GOo2;h>#O8DpHWVaL4Eu_ikSW#R^qHNLoA9jPzxG{+i1zUhY>NI(~6G=;_mUJuVaQI=PKm zacZ$?94V2`QgKyIrgDf9M1y<)8Lmv%4q(kT)@sUP0T&8WRLY4GU8@n-E!_C}*W&jg zav~^NaXkKSCp4#QyA8uwOjurD&Ytu7GUXXxx3t;#*SQ%hf5%dlIOi)>P{j z0ODNF>?S*jAog4S&{ex(l>xi)!#j}{8fq^U4?_1X(W(;{-KjCfGb=RpKIogkvSyz- z1gu&3%}v}vlX>KCr(Q2atKR8j(Iy5u6)+3=_;<9MWG`XJ4#}iapyG2-I@oNT9jdFG z$Lf4~wVD#6OBQj?LA*|}^ZQ~X=MkHOv*Cka@Nx#>7Khc1S<0yrNus8WPde$a5LGburt=lo zpPFA&ZuFkciD^n;H>8pju zzwW7ic<(FxgwntEQPKd*fP(^U`Jc*?^qo%1wosnXDGn?62a^z!c4gIcWS}QGK)(Su z0Lztiz2*=`?o-s6`#V9iAIz4VKD;{b)i2~wY81UVZ)>E6*!zkOy;suNIFY;mqE?Y+ z*ZYa<5XVB6dAHW|4WTlshF+1DYufhsHQ%)z&4bE{0rC6yvRYntACnwX-g_$S1? zox5bxqiy-t`$X?k*2c+fYIb)UBjQ8 z^{y+8xDGaFQF7`C5+^4w5@(J2(<8m;?3SAWdK^^11~SOnG1&sxX0LCu84J^g`xmd|XyLMS3|-1ZW_E-^j|dGbaP zTTMz#HF=4VP29A(@bnXNDjnc5bq9g;h9tQ>B75LD8FH~2EMu#6{flk18@b-483q*# zxhMOlTrBH?KKab18YBiXFrZOvx(`vkHO7CMMLDXQBv0*=F+<-gxufNAD+kgT9q0gr zi2MkZy5wPsLN@mIhOc)#JNnC^-8&`mq{a+|3{-|w`(}^<6?;i#M#`BOM~8iHZ#@p& zQvNdKhd%Xn`tg%9c6O;d4&*PcS*HBZ-d}cx_`iAV@WQ6@r(e0I@LDmCFL^P|5m4*#rMLwg=QzV=Sa0r?Mw8-Q^IRH z!-lkFjDSU&g^goZ1>0DC<+>VN8$A(rxT?ZchwEPb$VnOD{O30;26Hn2=NKNxse*AQ z`&+GqZp5$2%~c)07tHuS?t7GRdPmb99P6n!U)#;@b9aE7QNQbvnnFF!=)q^f=Rjs5 zlifZWJFavN?VC-AGBpsB;_s8HwC|t^rYUz1|JB=C(x1HRrOB7o=a3}+^!+n7rDPd15oK>zM10ALJ~bGh$8$Pvt_Kil``#mys+N8+!k6j%yI;`+Ij+ zS^Q%aCk@QTY)oh}t?2AHKF3wk0uXc6BeWQYyY(`qbX-I!fw=0WT$mo!8<*2oVr*7{ zUA=Sk0|R(XWqj{txXKEcB-5klQ3wCLox6*^$Gx4|##_(}?h{**DnUJ!Sj*8KKG3}G z@0h$-ih1S$jWvg|gaoA14S(EO%C&H%4z8T|db&MQ;cnmr-wf``*83-~#O= z#6d{!c&8$i4Sbpj$PtU*rB*+dsd#u$rhnSy<8?e0fR0Yp5Arw75(_F_3rUjm8e}=^vzlxex5^xauoF`Rs2gp#DhO$ul$rkziR|L-2Xm%CDrBU>W$QuAOFrF z-2syV68&$KI^qVN6cI;e$N6ZIsOlcT3yJ| zKC!wF4a7T^njBh{FO>i)g%ZN$v~h(363yab9knh3TN4g-;_k*4MobA`?8;RW_$7sI zbYpyG*x}7{7V-fu?vKA#J-Czb`R9ovF|)I`Bj==}s$?><9Z&yIoOeEWY`hQhD{+MM zeHT)gHK2Of2gSg5f%_~!s+V*;cpUmQyDjr_C#f?m^d(A{)%9WIy-xY&*Jo0T_gaOm zzpuI944ZpsRWv6+X$HP8O)^i<_-oX19UH~#I}#%E9(EbSx7a&j7W?63x$(DG;AE2B z(#YfH6Ze!(e=$1Qb&5bMMgA}xgAJWo8?^)>5#1)2AP|7Y1Yt{@RY@e2P$1;Q+rb<~ zF)=q7Y}MIpLe@;S&Lhq%2MCr1;4LMgzog=DxnBA+HD|lm{rm9vrz@A>XtTFPR^1LN z*5?o8c9Uh2;I>6p@x^ou$xy3!N-_h@TNa!rrd2WBz2Boj_9%6~%hK6w?_%`>5GcrH z&vzcFv#=IlW-C@-Au{!6K>e~%xCC2teS;oax#vTh?-ip>20+yQyU_%(MTgXTK=$AyYeq(KQOu00+L>&*C4t~AC?-vow!z`phD_$8-A}6*w>K){<8$zUl z^){&Tmtp`(a`d}+X7p}PHo4V87HgU87K3_0D!1{s#BUq9vemgx`nuhFL>WRiZS{#l z@=WodvRi3+M?T)Jc$?0FY1deJ+!czZ%VRaoVve`=UQ^A4#3xuB1$zk0*R8@>*eDx* zBaQ<^o8=u=-Y;?l)q2W3@1^itoWqh84n3xtsEA@ZkQ7*Xmq+TV^FCGYX~EJjEzkP* zAAkf0oH&YK%ll~O=c9e)GTcShu~>M;A-KrAT2HW0rr_2vJmP46sG&|zyw`)}Chnk! z2BOX&RDI>GexgHn%U_SYD=3!30OS|voR`P7Z!#Z0*mh$U3cVaHL68BuS73e{EAhN! z(FG%V=nU!$Ay+$uuI`(JBO%UBpqZLwr=H3nFAHx%z|gocEQRVCcZ!po)8~I~FA~gv zotPUid3Wp1&1#3xCq!2XcN~(M=>?d+$EpKJnOEn&c?S3#$Ooc|xr3?Q z3Cx~vA7%Sa>JIVr9GCPH^}x*a&+k&6H$;lW( zEkzKbgSo?#4u*y?KfDO)8+G8~UPmeUe8+5gk;5JZC8;yGlXl%PB3>P+Xz{1XXgRG9eC zeqr&_oFc=tHa7_^dV-q2)ckS@l>^6305Dg>^0-l*T<9^jRVR<6M=)^qI|1CNrSc-9IV~wttY{O z>-oadZez^dTSl$Jg3!WVv^KH`c=Jd@`(x+@b!`nm@$vIs&MJp3p2P+vAu2WpcR%@( zmbKIGKrmY?upp6D64s#kEa#B%rYPhU?IDj;+2f*qVs{*iRAz3>Ai>YLbf+J)mqL?e za3VjCRLfy|UDQIutzE&XzpICIhPXytSy(pLQY8Fqnr7wR7Ct=+}ZMTjMPxtu#802pLRcZ9?bshvAJW=S*CHUa#@H$%1VrK=H4kD zP&#~yR84Z}Vz2wWy7_`Bzt8CG1xRSsnmaH8?TMm(xWDt$@o{h_?4EPTq@_%9gF67R z`1_Y<-?qrQoW$05e?89fwKx#Hd)y5SmPnm$9lRoCX9YX8n?@5*8dgtXm8iyN;58d%|B(pF4` zpAEryJJ4vo@%R%30g*W7(X4C3GxRJaJtw;3=NdHmk5*Dla`d@9UdR8;Mi)6q@|cI~ z9TOI!j)!}znLW8%HF}O9c6<5KZ5L*MFcQmjEnO2$Gq@!hvn$Ke@6Vz48SS*4_k-2n zF{VoTkCg=*&x|#ql;SRYatVFVdgmU+*qM3X%8f~ugwBY&0Z;8rO`geW;V~SPi+Pjy zPd>;5}_M!Xc7GDIPy^)y1;UO@NEuo2_SQ9IJHh%zE5EQ2bC z@0;t1g=tHOfgy%wY>|OBgdCYgGkNk*M5!g~E>=1{+1g=bv!GF8Mn6WaG^xf(QGHNz zS}*6{>R}&X2w?sHq~I~kiCW1TWsCcm#!1y`L0QaD3p^nN%vTEwY3T^O3RZQMGQQ@M z!Z%qo4@_}U~{lRr&T1K1;*rRgOr0UYMJI3}esJ?!d-0`>HHHqXKi8 z75I4PorPUbTJ+_=$PcGHu^kadc9XNYXHa6Uug$h&cD_1)v2N#7$VcE8W+Lg`vCwUP ztEocQm!0xqUva#9Rn6}fhA-bp*}vb>aeZ!wTdeWj1l~kN=<72-WGCr9r}QOqQVsv8 z_?>YKXZDefF4K6v0Xz^C!HL0qk_>wU$ zop;5`SU|A(?e5vt;Jtr^xhm{OSqhf+&v%c=45eo|>x$^qE*Jc%>mEUxH)7vdJ*^tE zxWu2YhFl7Z4qyU~rj)P@PtH>o6`Hpsyo^CvM_IRN2~&|(tLhAQySIXJG8Gu>DeDSCfM)p407o#e z7c3fR=PfY*E4o{$!PcuaQLUaQ$fCZ*k_fpce~GgVz{}UxTJPez)u7QPZ$@QJP(eC| zS?N0;OQjt!S*@F_jGx3q;k-+x=seWr9iC2Qtv=E6_3C2BUe;OIfqpDOO*|`;KKcCk zXyh%Lw=46a8~>p(aOZiQ@D291>XU-@2HNT+B#5}r16uF4ZypzGMvocVSN~J=dZ4UI zIznj57;@=_;M6!Jrkm+6MFP#mT-vawS3%G?9`b#L zXynNsRO|Q*j^s5i?ov{62Uul1I zZs;c{BMXe$qWn{plW7^n#8#n7&E?6ltai&Wk-sbDmi{%_S)jiw<=y#dHF!a#JnAnX z?C*ZBL{(#_#!#H}I-o)meNG@FtPrK$Mj9{>?PqxXaQ~I(Hz+5!%~We6o-}w*#Qs5= z=-4^!#TC~l8b^9}`_A@SA>KlTI>SD_@?AT*`;kI2;JL4=r=EvCPQ>rGV4&395iD09 zHq;X1?Zh8Cc_GSKf^oa_m=1RFyv@6zs@-mn)iUEawy~oIn4%BYBiZf7QxWb%CLDv> zx6`rK5!s)f|6vYKPL6zMOa3V22Y#GiJN|wGf#yeP|43K=Fjq$4pCa`*JOO_xFdte{(*`Dz?Gitt@;N5it&wnzg8iQU;T`8Tc@~5^FBOh#h%Xo&Qu(90C^~@RDP?W2N2On?vOahx(ywtt zh1HF&f~s46#MEemFr7hmo5Xh|L5?EM%pwo(^bD9^S3^BDGsho^dNdV#!LWIT&O8-r zCp*nh;m$NziEQ|v*Nt*+e^UW>pa6v7V(%k-PG& z6~51aZB*IE-3S(c*D2G1X%RfPt z`Q93tdj~IbMl&<|BYXGQ-h(=T!4p!HbdKYvJW$a{$bQEW-^cTB9z{RxB|kNP+>9@a zo({-U-`#)L@X+aN^fYj#Mk`{n_~oo_r*To^5daiV+<>SOqd!06G9Tv!IlM}s3gO}{{a<(Pk$e~1vP{u%K;qou z`Qs>irDB(UWaaMlZL6r)=be{-9;rLS-;PuQe3NMfZmVGb7s9%Ldjd}1|DOZ>5B{cb@thgHpLDlv2U(iHj~UP zv%c7H%RKcbLJH|u1$;v2`lA-# zE8~*d7bcX%Lhii`gzA2v+>}uB&EEUC$+tQ|?IZopWJz9C>MzmduG&Mqv=uS`Kf}Py z*Mq4+8;Mb@m#^yi7$07oSJe^OZnLgsoefJ>F39TQ$6VQytBOK@GDMR(lIt_ISqHA= zyGSxp|Ez4zE(4M^!vvM4jgXfwzsC zi0w&(f({kE=dc2*HwGQ-Klrop+BQUXS^E8O5v90>;H$^njQ!KjN5wBJa`*4f$Q$3^{@Q_THM@?50EV?T`uu1~xUNqfL$&<| z$mMspL1!7Nw?T<#WA69VSgzz~!8c-hTPnMTfqq2Ld*X*z*J<~sn~Alepdxq!@l^u0 zvq^Z(=WH(MJ(Qs!^k-*#7x~t&XDr1`-lOqxmu!DsbTc)dfPR(y7srrTGcIdf%&mR& zI{DrP!4OW_w0$ML|MLrQ_n!qqcb=9hH*TlKnVqUbrfAIP^AN&i@9!4x z41Ss|yB#`8d2>nS@u|1}mc-hCyZ;~CpnHjPc!ot*QL?hVO?%BC)6ud=PPy-5*7-_s zVJB?8X5=C$3-S{ibg1RBUSzcJ<_;%9p_wEzk@-l?foZtpvwBdFJu|3cn>k*3VH$*> zV~WP5=+S2l%8TXL8se&3IUzvzOt{_(A{7WYGdlAAQO9*+XC-7TB-+W=)ab(CwW%vY zy74Ery+9sRik~bL^4XguiBY3~Bz59#j_anCN@#`~W*s3r(ZrNl4%|zn9MISn{cHA< zP&4qV<#*EgErNK)SLw+(f7sGc+n&kArMa63Z11UW+qx(t;6k^XOi>iaBKFN7A~s@6 zK14yF_dWOz&Q-M6t8jOxz8gqh{r(u882Z5N9B1m&!Usk5^S8edetvzA?^piOqQ*oC zx>8wkE$E?PDM*UIe1r%Xg2Cog-#LJ(mSzI)kl;?LZKHD))cJ#BH%LsSa4E@=~@E=;z!5d%NiY8F)=d zf#FFMF;Cd*g@Alau%>EOA`giGjK2ntOr0(#GEY8lYRj^E8patGRS;~Wrn(cUB>J9f z6tcKtI`s+ZRTy&!vcJkk#jY%yMn9BuiHAgLC#!%_isk;-6o{09hjQzQVdzGT4ZlQ1 zT5*P6PtYJz`(Srdl*y70b!C^HB~RB-5c-2NHCPk8m$eY(=v4 zi8Hx3`h;Z9>hyM{p!E9r<$EjvMOOm@Pj8)szNSgW>lpOD+&8FYJSFb9rP2v z?vo>?JE0A@qxnu)>wzr4mU&N7_;*m@e(hB|?vG=$!5MJv^3FR)t~GIFM7uKTzmDs<7DPH1_!Hdj%C7xj&3 z!rU*4wD+DcodGrXb#qO6w$8)+o?tT@cK=EGG=a9Dq}z9;1R}?B#Ws6h7TL7DBj}H< zZt)QH_j`$tO|F})gWZ`x$WVeS02O}X+%KYfF%B#ilkEI$LyDBN_v3$~&m6GlKdFoF zCFx25r>CP-?Dl;h1d*`BbcgweG1%VhZb6W;F~IH0hCKPR!t@UYk$6P>BjBR z^}OR3>~r16rW$N3Y-_$f%X$g(Z{28Fx}wfNYm{#i?Wlwr!vie7bt5?&$aK`Yjq^l6+~Lyu zRNb5d;Kv!bxB=^INVe#==I8*j{O!$m3{8>tOePQn&f>}nuCte5On88oY363`&jr3& zkT*FguDaR>mB(XenLDa@hG@&T`H}S;FO|?G(oxQd&?tl26JmdPaAeG_t(C>JY?gCG z9fM5LBCM=~hGDkWUti=%kP^rtINp$_B|6y<=TSbZ;hbF*6v6~>XZ7<@5NS7nDlRCK z17sI%FyPt)9xQ!OGsP+d6}EKo>s`4GvGnZc~g&Z@9QMxl#wzxY(~FP{k2;_ zek+W$0YNBXXq@(k+mipX6le*8_ul{hK9HX(8Z{E>vhNGk%5BCos} z!!K9<5;9DmxVoQf^D<{JEl0~E?W>Ta|4tX3%EO+*I}0ZWP@DV(6#H0U1+kiGw570U2zx#}OFPeFe*4gD+TMSIk&;}8m`7KB=OWI5u23o8I-Z4!FXm(>b? zha!Ar&pHwy(`nDBv+Ci6_=H?m+gwjeX`vBC2Djs2%nl<|hbmC7Dp1lC7N6z298{skzb4t-9c9YXY9LP*eL9>t<84;CZ~&MS%{U(L@FrP2l>W|5 zmkd@PP=q4g&k`MrzcSPz^TTYyu-^0lJYMw_7G~Nrd{|NRIlEN+Inh~o07i9DAE!RQ~&U;-7Xn>>=D$XGhY@3#sO5l`7T1Xo^X=VCih zh+>TDIvYnu&!7ZLTC%BWc6`ArdN)+i=tz4-OCUmH<}w$LgI5KSA;seZlqbD+qfB_h*AXDP_hVTQ zT>l2icM7}FpphKdrryxp#)K#~uja#)s#rIo1a^eQ)RLcu7UEhW%cHUh2kth(yS825 z_N#1Zb7dO}@2(Nl2b!5xC~4p-AvBM;I^5&#&nUv4!E%rdK|aC|>pOQpi}=DPi%?_= zZ*D!z|alj)P!+m?d zKK+hA_T}}zbrefhK{J7DA8ih3ezC;=H9!lSbFz=W_0eA>Cd9=*aG@rj4!I|${K-R2_EWeSW4?!3F`8+ za4sJeD>15U`_+cA8xwi6IDGH!V@En1phweWf-Zjz1*!=_ze&}BfS3JmG8H0$&gV~} zW{7MP4}X28cYO<%1nj20DTJvPW^!QUphkaJrdMaNF)BImV5SGjCJl7f-Jc0iZd)ld zJjvCY_YRokAu?4Y&>$2EKLAiNrEivdx)TMRbKl=wmf%h<253Um#eNTnOMAhlT-tz5Va%HsP(b6Z)q-l*b3u^gMJBm7;)Mt=?}Qm(Fp+!Yl=*PR@7y+9FQr{$5*e1z<=z=Pv_H)m!(*)1S?(#2yD z;gR&DJ16h`H7p(O*KbdeG{&xs%1U?TeI`WS`d~sb%-gR=nF{*|M2s4La-?`pcnL-` zj>;S}BS~k{A?Zm2?3+vHB~?L}LgCK+6UCuU+~;Lg0OOgG)Rx{AA;`ZRrt1G7%Je@G zCHgbc<^Aj2)NKj7avNtHQXe1ZAW83^AjnU||GD#5tpHI%wS_-$bdF*m_?{G8f7Ne? zlg0_V^>5(k54`74)3HM^hH8b4@Yi3r>gWUB5ZnOhV%I9csXYbX3_1C{uHf*+?S;>i zN8mdbIfw7Xk``}*DjoD($_gh$b6#oK(22KJ&jlme0qwl&$ES9lRE;;7J>KM>CL(ck z#<~6V`P%a^@10Ux)E0AiAHFMj1^VU*Xg_{_=-soG6zZ{uJR0N+K@zQ^z6^c`%1V72 zQL7k`)z02`2p1+-EY&S~u?n#Z9-LP6G4Xo_nJgmMO^F zohUE9A1{c%w0ddjnEja?nTd2(wf9N+F=b!J6+k*t+q-B%^-OgeNGvJJRfQx|=_U*V zmrGCMi&$+iX`JFR+f=y`CMR!}F<1rgG4^61)smev;F{Z>DA@WJHIAubkmg$g1ny5K z&`kW95PsY(n8#50<{?}b%Q@J6x{8v9(rVS@Dzb_JS3?4_^#%wHtc_t4Go!p*7=#+OLQpQ|gV^}GN9rtN+zN$Wim33<#Y|5|T*oNE zs~fJyCkwXRzm4wTG~C4v)Qi##&c478oQ}PE3D*7oQO!*;Rdwicu%s{+EDZ!H9t&fgy6;;cL+V?Z7^~i`}Cjn{pF(cOy=IDqg1qq28q;BxL z@9dk(aQ|FUawCm}tQ28v_VNYm89lTdR6yn0aJ?I-*N4ykMZjT>*u!P|ZzIaIkL7g8*2ed>^5dKlNPanmsqgb)QxyE|aDFMq3|_|pwhF@8 zOgCkNB>7mdWEAo8kK0+KL%^N|AVPgEnhQI9E!<&*A$*jJcwG+MT}Dp6(6b2jqJSV~ z#pJHhLKU|bjOgC^AIX>#2Yy;MTv7a&kW&+&i3BkIPc-fDwpcin2bVS>;E`mMb7x+Jw*V*169^7IY? znwU9K)z1gKpRURm3}`k@DP>)vY*_>6i)s&F{Cc)KoiX4&M1!x&PDea|hu)J~arxvi zcfH*RVf=Q%zA@lb%Qi5VdjxKS1HCS~Kr5`W&;7J&)l-)>m{P2=b4zB#i|hzibzc8w zA>lNt5jm3WZtPFc%Yuto@8?Qcg^D}vTpzZT5S5kJnUMDE7aB*8TK-w6y(MsocRiSC z(paL9aJWY?8#;Q^G)B=^PktWFidq(D0bZZAMzO!8q8dEFx-SZFJG4ZQN+~!eZtlr} z0I%H!Qe98PUPl{PhY-iVPmvp3O)MvjV8kQlW zc-#t)q^q9kE-ZFaa~cd5jM%~Qa>GHnnA{3#8Y+p(4x|by)5SoED0pBVI1vRZlt_#x zQ8nCZ(i9H4Xi|U@#Z-Y@#P)vuQ8i*UTo-z#g4G@}5eUu54BGzJ* zvi7Dy^aNuNB00wl21rQ`C&*IZBihz7`&KvF5bzxWt*2r{itd4U8FC8w@_ikI=}Fp9 zYWOTod%!_h6(pwTya5EOH)Fw9yU}|2K)c;9jY-op)QhHyHe3iK%vBErj_bAfBVegG zpd{tcF$Ydx3g3}Z3u5==KYD$$If1l|LES(apKNC?UsPH?q^2alk&pQPb$-vA9Vb%E z$xZ6_e_FOa_&2Up1h}#Q82l%$B!A8s1zyC67yW}P99v6!TS0?ik&Viq#b0Q*=~yON z<5hppb$;-(XDF}3_kpu6j+CK)wKy*WA6q&m!|80>E$mfA{x#?3H+lUX3RbmZzg7BY z2fSZlEQx@F*CrLko9&u|bzbLdTilb*I6=BN5dBIcFEGS4dMpKQW-~x00dQ*Z^&hiY zZI_VB#!*tjI#LWvD8E=aaNRwB!2F!%^^80gdm{G_IntyD^w9Fjo;|h&M!h^%uD$Bl zB`_4om~IVrQKj6%-cs_oG_`=buJkc=`Y`5tHvSS@YjbjvvA%BiX&SHL78hTAy$`B> z0M18j{-rdQey^Hi6z$5i;@C}`6dJvlsyz!M9WbNr-(p2$uZEgZVQ7f~j{GxT}V zAgWDR!C7crdzQXYMmwbdaXM4K3mPFHPd6s#-f(mP9R&%pS+mqiATwL< zNdF#emXiytc>s0hTD7iN=Ls%$m9H?ss-A%KLx{w`*dp##dwE2BdG&&T=6KIU8p=t> z;1k8%&BsEr%?l=q#AK#ALs}3`zV?c25ur2HRD@xbHgr&^i4GigBIt5OFvJ8X!o8N7 z_5{>K%hW_ku74r4CT#4GR%2}p0&OB^E(4<BboqCCNZTU7f!H*m_JHAIeg{|>6F4;sWscEndsCy5z6(6r@v4_xm3813sXHk- z>0iESoB(2$0KNZ$7_uu9M3&S?4QL3cD`3zOcR%g|U|Fdy+;( zz=t0;@N?{0o#WY#ZQyJzcV||rX*{jhc8hnO@YvHu&|3wH>RHty*H3AH((1c0lecL$ z1(S^h-+d~2MvEJSQ&mO(*u}wsp~%Q7gCQ+v9kZx1A#HSZOU+r`gs>Da&DD77wC!h~>-lUoO6P(Ib z6EpU6OA%7ik&5fzgv3B{`xAC-ealcERI3;ER>2{GN@Aq}2#@VSi@_-h>=>U(?U#pL zmXFuqhmO8@fRd`vWw^RBT6U1h0Hp-09|)n>0$09^WDK#73b%9_CH*;>$;7DI(5!); zsPFR-@!x4P#Haf+K}dWag$x(0cPcO}RdwS8qeS#YQIM#>fKXJM09_4mQgxo;(VI+y zbM*KC%6HwZCPPfZeNfONp>Sk}S~JQ3Y18O1NibAi4|jgQVtR&x6$U_(-zXYj z8{8=}syvHsWJGtAOr-t zrynSn#adPb`@t93iY}RnECrQfY-TOQSXm$^^B#^1vIl+}lG5!S$3&>|h`{2STv?E6 zYZX=W8e-(@AsKSAAqR#l+&pKco-97>B!x3~hMTbfjM@RGNicG|+35#KGr@mt`^J~9X@-Em+)$AJ&B$pnfNqZ$0X`)?FUMQ~3;2Z#7xqHbyi*hk!l$s-zwv7=scy zr;RH1cKLxbULkpaL5Fd#``NjFRM#J~m;%+NFMVKy1_i%rQTeX zh6-KxFLK94TL^(3Kdj0zgjC#`auqmy0Ex05lGdLpmdoe@k>zm@L?l-72t!7M%3an#I}y@7{ba^V23g;rjo^#qbx3zwpP(2 zTU#o440mNuy*4;m!$>enWaK~EdlLZ$iXHx-4C-=>Beg2T^niAEjUCqEn*Ofv2aJ%L zEh(iFJ&VrWDdGGz)R}2Z(vD`-?z87`=`unzo`_BT!|M zXE$g4%~!muOytR}110mK+@qC-1@1$v~YsjR-!D$b}%`O1W(j-dS62`h$`1&91A&mS0VpyMFv!%H3}j zzs|@owNvXxAaNowM1&%mDw1LxL+_I^+Hi&mEr`}}L|yXZye(uMmu%tPQ9{*+j{K3F zCE4bI*+``o0jq`f|KJUEPXPBI#2t=3wMBf>!)aX719Wp@q=>At{4Gz>7(PN}^r zzG9h_pf_sdaV~BO0js#lM3}>QY(>2HY%qBUP0JL+m+SQ#*`Ax6RE6d&AQ6~C9<}J; z;q(k7xj2AH$lhMcRUdJ8TQcwfSP0Um0m0ss9oKF*kcY~Z`(#j20r>>*=>K8w&BLMY z`~Lr#F=H0nFoPk>3}fs?#*&sl#-S>Il*LDB*`|EcM$KfA`!yofrUa#lt`Fy;Eb_oAbS~sA{5V;_W z7orH_Zv>ghyO!mZ{79N_xvp)bXr9x-f@XVmAJ;*k;b`|yo?VuWb2)mKP{;8dDxxiO zGA^)IudKk!rwuxe!lndViY}ie$x#TV(U8Oeym8ysVrD5wffe83q>$~&&BjWbUd9Ev zwmK-=@T_CpO3FW+z{#JhVPJxI%5`mq-vPN%Zl$co%! zr*&bVtA462aI{hp-o9HZVymZeWTl@Ag3f2sF%Bg$^2qZ^UR`8OwVc=_su*{p`J<*%zVhmd^nD-Z z9g3a9*bG&|eYl<&9dodc+E)QI{Gbkpp^NWp{Ns}dD_0%q8WmwQsSF>s%2W#)jHjRb*#O(ebB zVvEr#VxlCi#^t%DFN)^yJM=WjlQi6AW)}idh^8a9{cu!(&41GALu%rYJt}>;VPXy~ zkY@*uKrD2k_$Iv_@@D9f9!njD;6k=}%&X%ljX5R=x(eJjXzFMjjiy`lg>;5`7!5~i zQOSIYWT9}6owuC{&_sY}N=gw^Af&8CFbzO9tX(2wc=#Mxd+!$y9<+iAEaUM%KwxO& zl*z1ZA9jiZvM3co<5uxuGR{^zt;Q%WX#P6d%a02lU^~!3Tsy zll^FA7o|S$%aCjVeij9TjF#6@8Y3?;ka(H^c}+XJsSEWI;R7KK7k%+i!DP>S82ckY zom9Bb4hA?8!Mu;Eo{7d>3d!PhA?0D4^KlAldouM&MJ7EevLW(xWNcA+Q*VPx&-#ET zrq_eO$p}E=czi^yg{I4THfz!L5nKm0D~x(Sgvt)?)R^#Dl0(O)urEG#F}o~`v`X^g zqF)XOp<@Bjx6R`WsjRNskBi;BhPK@_Rvm~l#Qsfe`)ep_gK0;>-NLeNI#Nq?HTzi%)cTkIkku(h8VF zH_Rzseblbi`mRGm8CTfw^#EMuB28pu7*K!OOcJ_3SbcMTTHYSSkyhBfUKz}kpCUa5tyo1|fXGMtDg~x>^=Op1 z?58il4n|(|UCpKihh$x{>Lcy4Y7p$E+;Z!oS}nX@m!Uvis-3?YqosKte*Gu=>-O5V zR5yIqvX>1+7Ef4;A8j}rqFxUDd0eFA=^;}lwW&8NAehU85)vPdY`nTvPeS$30e6&- z4d9f7Sz$V36k@&%A+>PxotEc8G!E-q!V@3p<`s;TjLSV?t_vhMR)Rhh69+k9J~y>H z5%4|i-nDV1+kvh#auP}#%4X7Kv|V3;VFp;i^BhvIMZOvGus0Mc;Tz0`K@i|_SAS6U zu*KFHJQcBT(1fQxVf(#`=e^o;SH*4|4?)EyVG2n(S*Cm>b>G|LrfR4QT=;O2S2ktn zXDCQE;k0cxMq+T@?GTJPKZu~uRzuKqe@4Hw-r{$X>?S9LKB`_}c>p3dYuW>2FsW9|L5oEJMl0#Y2CLo=G_bbKBSEN3%ub|8@TOC+ zA$Xbt)olF{?T%1IJE*y#@ST>1E8cnZ{Oi$~Fq;tuHxZ&3F`xn|3h8K;*!&u()u{Xl z%4rh0n>;z%6}nv_c7TN$H8I6OxUM)sH+2j51i(lt|FaFjy2P9D(-?gGCU#nY1 zv~A_X#>Im9EuTVL9XI)dGBjmwpeCbtl6<5~` zOyl#L8-8YYY>Y*|xWm@9*t@aXk6Ap%Aan3DxtG?{w;kKMa-a{1A=x83V&AwrcVj=0 zRtT3gU8Bb=eqw^V`m(GvKJxUKc~Q2Ah5bg_=(yn;6|`&0GO4@=c*SD%@Yntw_zj%K zoT+)i#V2m*z82q-YXA%w{KNE44ZZIXCzG8jfL5By6F3$1%7WOh)|;}vMw`5r0bisPiY1GLww;n?eT;7W-=~Ow9mW5)8rP0u45#GRYOJJ0%R8+YYJqLmR$~+< zl2)D*=_t-ehUq}7oze2y%>41 z)qoZ{`re4Zn!E2-PdMX5whtbqTw-;wgIpL26UD`(f_HyhZ44?JGf*t5{o45Qj)G;y za=c=nuY^8aa-MBqEv)z9};;BTIVy-2UrKE&W+l!n$_HZPh)?WPZ9t7mwYNCOVEMpQftZ z_Q9$J37>t#6h+UmG$x9!-PkBx8Sa^??IcPB0SzV4n|6^k80GZft?JtqLnQt2Y_#w) zFWqCpC@T#_@GNitG?uuC@LbDrejtgl8uAbE5o@HuDV3ZF7Fb1~{pVA-ICDF(g7 z=P}GtTFAiCbaCH?Gz_JQeWjRu*snvA?r1^kVN+SS*&%T9VLY8ZtoP6JGKa<;u??rM zRB049BjaK2@arK3Fx} zb9$X%AE%wvY)bJNx4ya;8UiOIE2d+^IX1lw@gL5`e=7?9Dv4zo7Qn{ z!_(jLFRc{?2_oB+KM#cuQ9|4Df@4+Qy_5rr0*%h;%cpIjKv6Iozb9Zrj`V8KvNli@ zP#%y^&Cbiok}uMdcj{dqRFP203}mWrj_prhx4mPhcC?pduV1*_ClJt8PTYiSk ze0IB)q!Rxl0x3OJzMnWon}080$YYQz33-^Vvsn{*QtApJTHb@ipWoNf!DPQwk!@A2 zPe1os_Jb+g*|0O0BU63-N|wuQ5HOTKsWSgKL$SzaYa+t#=)|);=f-`mhL5~@?+jo! zfpj8czMY9nv1%9f9=@4#2cz|SQ330XEBM2vYeD?5uP-rlyDbbo_Jy&H-3q3MN^oXH zQ}@9TP}9o<|Aj~06of51g9KY9GK`n-#PZ0oWittTixdecIvESX`9>1g1_$WY3W^(< zz(v+D*=gzo+*eh1CFhYUntyz37xh|aQWqe6;;BeNypoSG!%KKRM*7@5r+``t;DqVl z|EoY=@mG*=7@&q>UKUcph2b-;$1M$#fR7xFAOd!ZnfOkk?Rn1_d6XfY>^kZtkG}E(+o2aZC*hq>4S@o=oaEGq@FBQ%USf0@RG|eD zM^U3*61J7syY|r1$Go~6(EAEb;tU%E`A{8z*Q77G^7S`*UkCvNy{0}@?ZHxFW`b%O zSO$J$z?0V~T@ziPHikz0RU7Z&{Z$*Yn)WJ;GK#4q>5Ry=+89)2EnV~Aq*sc7k*eNhU{cBHRXf^q*oh^m&fs86uOjo<%!O}AHe_C7yeU2 zS^3o$+NGZQ9ViFf*nIh#Uwz@aDn)G;kHLZEb_5c(Ab2)FUl=T6f2_FoR?@A6ido7{ z0QiFW8!ss7n(*Rnf@@#aV zS!}#kv0+8@F~{3a$|!(z;y+n24=+`x?6{fuOFHQ@82jEL4AgV6)H2f6NCeK^|CUY+ z0L>o_B=ihxJS9dOKkZyvlTMbH3yF*L&-o9xW^xfWY7F3Q zL#Q$qe&A7ugSvE>B_CzEbMeH%G3rQ1Hb}-l<=L-(M1K? zzS>xuaJ?TDTUx<2wg0iV+B5<&4}+HYdkdw5@_g=6j?2y#BOvn;M5V|;-kW2IDJw1d zD1`6AIW(R$D;g|t6KqYsRX$K!6Rao|&XFh{@Fj7_% za#Zo0(C%zx1|Etek--*D#H1M~F)36asG zfP9WLl)~4z-JD0Wi%?s>x6j44&7vEG|Dz4EXzE9Qj3e&m}n{mnMXs3{KHn}=~kQsC>301E7@M311R@uGE z=)iTAU52{u1;h)axhs;e9Qkl9=+{ipag7$y_xk33kW!ACtYYicceYzu3Ao6|TgS^1 zKCJ2R!XtnV5B--8f9B#pc18S4hnLc?5>)#~`G309n~IMrdlGc03uTRn?b9&-FCE_X zr#D;G^SEswd(~fp1D;K1ba=K|k^JbB{_QVF|5W5zrQ78duvK(i;I(WViT}1U(}wW6 zUzt2MCx`j}W^sVLERA%n78qs{{|V!M*3D#oBRiNFT_Wr1ZE3 zgktoMfsknJh3zij#Q0#gxhM+{I$^Vy-mMud^m|Q0hXJzubK^^1h#)Fn65wM#x)4#k zb3Tv;t_1d_LSZ@J6zuQU1V){BoftD5o^3m^g6WhI$%w+vnVYqDd4l@}lnZKMr3=Tw zZa##3Sm3I6uIXLX7KioulOTumq94ONS&dd=-C0<+YPkIFEzbEAtrSyRj$KbhHyk7L z?!NO1fPF@f-}jd)N^}i{pv)_nuaT?!v`TGPOBuW-|5DF1Bnc}|ua^wkanVo@u}+Pq zo5b9QQ1S^rhoFZ&_@IKz5<<^olmTtN?=zt*!7biY*w!{KpJ}LDSSqwcoDZh5=>kLD zbHnXl8 z+`kQeZ4toWcWq*opWmSXLybK1`v5#ATLlb$X~4wlSTpwL#J>i=&3_Gk1N|oZrZkHx z8L*|z*owV&k_qe83Pv_Wc{-(>RvnI?K0$QuFTG&<2HG?#V>sN5?FUKEId9 zsCiyVIju*QB)a2u5<~{;i)!U=_U;-5#zU4QOg(#xW8p%GYi zx?`JBEDc(0A}FJ7xdc;8UM**Hk=ljAb8ZhKzo?{tq?z=Pso43)d#tHUOxEgvfU8f( zCC%&s=n4wCC1g`uW$Jtl!zed0ve7eCgD*e|8n4(o!fzJ9h0`_l2g#jbr@=C{5GKWhE z!T0Zp(;dfuETp};e%vx5MS_!m?^J!7x_5~D2KszRY#*64RkEXC42SM2Ohi1gLwagJ z4;T+i$96TtrO4f_ZHRpxq)*QtUA{c81k8bth3^Dzrg2rSENIL`*yEqXVk6JgHRwrx zQ3>rPeLUKMx%J{Br@P)-dp3vaA8%?CSJKmTx9|lHv%bMeGro)LpA-s58sZpf&eA1X zU8I1!0o`5HBcPtc>SY{S=UxwT8X6F41JdBJ;IaG`8Z8O zTI%ld1_r;prdgn3`0u>x|KXUJ{L7T|tL6&nH86Bk)8o7l(g#~_Rr-j{OEwmY}|l^GlHZ` zLrrb^E-yU02LFIh3R7vg<0!4Lk@YO#JqnL8-#$xp^4gnbqi4MXVo%UDK_C{B+=MUD zMfLKl?ad9cnf|wc9PV_1mg+35zQ@};lV%*TJ&GiX;C4NhVj<3pmhr?Mi|)uo-9L1j zw0i>+LPm-9jtE$22ArNc_(BuvG2ufFOd_+;<+RO(W11+fB5oRrINAhN70o&@z~{b2 z9H)@{=kXrI(U1z-dH<{Bh?j)|hrPND7YHare`Y2M9!TPvdw#q7LfSCp6*A+NQ~b%_ zeyYqLhr*0jG8hs<}vul2& z&hlS=B+(Q;A{{o;4A&Ro`OGTY{a-FYYu!Y|$}DV3DC8o7^W%g*+;N@*Cb6k<_11yI zwlcWV{F>s_)4-{0<>ix(D_L%Fa!T?uO+!K$ES=L@Uli}6CVqa^Tk|7kTQ zqi)STsaBdKXnU9R&ul_d7ml^ENW(D!Kax)s(`F$0d~ia}UuC3)xMUFa(qSAkBjeMFSeL3z#}540(mk4o(9eRj5b< zuZHYWfC_VdWBhHZ^`Gs1|HC$`)rldkBGFn+(K>jK1@V=h!5d-6Q0ww-n zpvNU#@0_&KU*)HNkao?U0GtW=Eps%Jrqyqia}5s(PNjLy>PeCPL%bJy?3-U+z45u! zblRjSQaTeK@blI&<7XSX{2O35M*h5z81qoGiR?uFWt&aBxEhdQ4kgN`abf3=*v! zu~SWe=ltk)@V*?FTKReDk6w2>l}zazy}O+%1J+I4h{o27A(s)`C2K_Mw3tIz>k)}^ zys29u5l$UO`d`Xt4BWm!JbIeS1WHR9DT^~Q$0WbM8X}otIq7!N<(_vf;4$_iVSpex zwPu^`Wa}(g^3@k^(JDBr?Q7my>as65wj7Pi9^0qImHpi~Bh65;(JlmoPMLB##2Kwb z>V=Hk%^)ohO?SC)^)tia$6W2SvLzh_!2lNw&2@UnVs*-TxxJG^otgu9$9EO+9Hdf` z7u8Ni0hF1j1OX;bI}TPiuWD~LDAri%uY%m z$|u+LGVzO?T2?VJ+-A*1>+&5h*7}$*I%uo19o>V zJy2@RMeEca^2bG&rxpHX>dXkAk2hO7Lrf;d`q6<4bvt-Pg2Gjo5~QcB#qG73|Ud!3Nh ztvCjCV}uE$Wr4i-dRFc0j~4qmHXrd@PrY@5x^3Lllk@3mMrKa6R7P`W4(DmAql!5^uaJ)+IAw<}u^*FIG|`??E%WMOrRoo-hwq;^nVsKj$(+rPJD z%ly;6 zX^WIWnIkHyPVW2+&fX8pCUl`S5nYUwsh>d(2M*O~hK*gSeT0J|qR-W4m*I=w0Q}Ktti#l7@~t z+nvn;T$!2Gs<))4M=JGNIX50Ro=*=EYTVeVB+zdjdmrE=LuEdiEn_DVxQ+eq_i~|x zBuowU-8QE#B*?P#JwnGvExZ@Yr+&IEb*@~Zs10{gr|U%$I_l=DA8GX3of!Zt-2yQk z<@&B}svm8#`-2=*p{KfwtYy^7E#C5nA@4SAw_(@So@0#HmN1`v17yQ6wKgDoxIBw4 zX|0t={i%Vcw|nkR?#K-C;X=lBa3|kcqD>~3s47VN>R)M(?B~DI9{c{Wm2XZ0c{ZUw z2LoY`9Nm!~ctp~^fuU0_@m-b?IO$sS?)Yu;P$fW+l&y)6xnUQQxAKGfcdycaj!OXn z#F?_JRJUJoshKX-mnMh>=oARuoZ^9o|Nu;j43U#eCC3xg$o%`_*I5+j7!hS;#5a+D&IoKDd^=K`L2;rT( z5qj3vD8h9R)TFeR0y)4LM|&TtBW^?fN+SMa#HN_Iq~D)?aypGF_k!V^KYXhG1Ux4j zd%fIj+tv<^l}9#`@VjSWiLUqXU5e)l&?A>F>~(mbYN$tYM`VIB&!`=lw3w8E^_*V*1A|Js4i}=j@6jBxlteqea$ZkOlR%D5WG>2=83~ULh zL0T-NCn0-hJ9o{ih=_AQ43VmNg4(_@ssW0;L03y|=nn^W_eNXWTPR}fS`?99-*bf7 zap@K+keH_+p9@3V5bGOiv|L+sTl+u@rPplz2z|;LTU_=7u>4}9_Lqz)x2vX|h6ftB zIl&;}XZj8)S<=V*8}fDejIPUDuIlr^e|G8CBH^Vpqb3;&%=8BGO;V6C>|^Xd1Z}l= z9&*IbWrni<#w9Jr^XB((@^ zh*DbH)o<2|+7||Mex6699A@pva%cW{t`;TGX?mfN@}S|koqNIR zvT>w~8(lWDOZ`RDzJQTl5uO3W-kt5-f5qP6EmV0$bK?ox!cf7rjo1>4*ab**TE~%j z`JHd)_7z@`Qcxf*?>^vOBU4^Y$i{2Q^&!SgjTzsaWT71^f1VnY^>`24ju24;-r85K ztG}iGk@nM8{+4p|Xh7HW=FUBxrrS+VHJ=ux5o$SV38X23lI#%s?GTbbZs`MlnMFHC zF~r7Z9PvQX)`hPwhq8eH)Z9qCo6%SWMH2{b_$JA-^0HUSrd;($TYaVAmb2IVGTj`} z+%(8&$lV;JQLZGUKw8f)(>IH40}fZ5Ez>2&PdjD754Xs`$veRr1=|y{fMh)A`-#-Q zlJRpU=ha0F!2To>d^usX`^RVnkc{W>Q?cWWO6uwWo-3ot2ihN9e+fvQlty`1SsQ~2 zK`AEOtDux*;n`;+#=O}2Y1~Zo3CWZ~el1YLMbTINMZhx^5e%PPQ)|cNI-0BBMo4}t zJ*lhlR$LT>c+#t`i`=NNS(xo6P2gPyaNi9rqSDAgB(b)x0bLwiAEOi0aXrfT2(A2d zi?A5aDZ3itNe`U)vfO)eq^$xEp(&4t zPgEd>c~dX@OcbSgGKxF)aY3-92m*zu0^A)fqh#86a{ zp6!QgH86AF?1Gp?TI1t)zmoB87p!?En=NT;(fHJL|A=M3OvU*0lg<9T2A9mzb>}0L z)}ry5+D6xB{z}G2Zaeh1-swNHBLcPCL(&n5-}%4T5uGHh-~G{3{b`x0ROmB_aNtHt zom)MMZoW9y2}z$?-0XxQ6s5KYYE1fdOzOA;>MHUQSrzgp!xL^y7@Tm0+&aCJ_i1AFA!Fe3y?ix@eE^ zx+Yt9yF89>$BEz733?BO5L_-*WEdr)w zTPdx)^2j5{_q%qVG9Alico_~r*x#JU)ZiLYjb6lw19k`Mb`B$q3il0s}S-48paS}Mju?!rel zx>VE&Hy-H{Xr1Dv#f)3?f{@Ew@`*C zc&m>KQZq}yJuA@}od+`X2{t(^9QC4BK?XriK)eSarzq_sk|TEjF%OqH3uzGfiPhU)*%0&K*TVcmFzUdW`?RBi2w@{|@5;P*^Ox3%_7I zb5T&5+80AM@@S%jID58DA4PhrK*`=v!+dIn06(KC|)4Ber!ZK?ZL z(l-9KA-l9gkE4aHtT|pfrA8NGwTd-_#4ZAU-eL6Yj!i!1u?IgqIk$7@#g@veRW(wu z2W>jv6EmsT58Acgrjn->E379`lNQ^{k3-Uf8pq##s>exXyHuhpYQ# zHEzEnvIia&7A=hyVIM(T!N(Czr5x8kcSouruX!%}op0ScvXDkf zjCn8Jvz0$?8wentPVS(?5HzK|Cle~p(F~>p%&=m&uS{AWXj*-*TdA`AA<@ne24=TASkt6#LcA`y(s=4;t7icde0}oWsT%Krbo(BsqEVQ}n%XGn5yFf^uBVfRdN8=|l50J0_jZ2d^Sq zGocivrE%(TIi7Exg7RU5a@!)hV{aWbO~dsfvD3U(8UtD_N(n_ph-w*K=uh&C=+na_5@Vah z*d{Ty2_gDhGx<-hsTkWN#x{wuO=4`57~3SqHUY1Yh_Ov#Y?Bziz;v&=3IaguAkt-LdvV^k_!p-xJ?o9jGQ z`eK2KYI@RljCn+@66I-cbXvX>k4BuXcX2|zX9aOEmjlW|U(P^vu4%(nVc$n}4lDmg zy`B6t?p8f{TC*Dd5w&=A`&8!E<3Yvq*9Sl59msdd0Vs4hH=~^qBYM+kYXYlvUBUeW zP0kk%M6j$k|7^LRqlHB)F@prz*?akNpI5G_Ra_5@Vah*d{Ty zNsMh0W1Ga-CNZ{2jBOHQo5a{AF}6vJZ4zUf#MmY=wn>a_`diXgjBOHQo5a{AF}6vJ zZ4zUf#MmY=wn>a_5@VYhbEf767oWJL`&yWvCA`U%Q6F~3ipJAmI^%l|++4-@8E@(o zW1Ga-CNZ{2jBOHQn|cr5%(;Wn`n{-t^~M$aVbirBewY~BB*r$0u}xxZlNj41#x_Oy ze-dMx#MmY=wn>a_5@Vah*d{TyNsMh0W1Ga-CNZ{2jBOHQo5a{AF}6vJZ4zUf#MmY= zwn>a_5@Vah*d{TyNsMh0W1Ga-rvD#dn?S%982APupdb+p3L<=m0zX9{qyGR_m5fgpiagQHtum`E_T+`syp7Q5d94Yhz?Mi9l;@Jj<)D0W>;kfyI=tWJH6vqu=cdg9R zq)NBBj2c!cWtJx?pU)~3jD4Df{%LG*e@DWJ{;sWdWahPbd~&Xwc67lL~`6pm95=Oc`=$GxNcRjx^A zvdoFhj5aL3!(xJ`Qezg0XA@DojbH?iWPd?FN`cYwrfi>TcV?-hMQ}I&P|Z^qt;FX` zuO+`Y1fp#WaUvA=xdw#Ll?EBML48yBzM4||OP8`1^xCQ);3*tNhR@iE;rA<8@{~W?VzzimU99< zB*lhfs^LGiFboF&_XaWs-3C!XTmR>(hyU2oZc@>miPl~Xb$qnj;IQzA)8xG-W^azn zz~Z{6O<_GJ6wSU9svcFl@Ip!DJKOco-(CleQ=kfM`d!Y1@yW}PF@1cAbm7Q!M`2o? zPEPpBN2`sn5^1bwk={%N_3{;Fbj+*r+WwK_+71T8X`{PO%30mYfNeg_9%_*vt~qL& z;b<+D_$K4B6#RL4$* zCyy)K{*b>BYV+g5=*#WJ@mhF0-Px09E^1@si!^jb#JGcQ(hNF7YJK%fS>y)+ok;au#+jP+5 zBzIHyT{+Cgu;Yk``09Z8ATOe1fx_N5dD7cctT3qEwfvfJSZ!y2fSECmYY4$%^26J3 zX*OGu-aPF=>)^hQX0b!2JC)NP5;OFvps2n64+S9-DDT(bUm+rP8W>2VjEA~hH2XOY zgB4$z;?zE5iCCS4Pvtp}Nm@+y1tttJ-wQtfF=wy(1H7>2vSv&O7ZiuA;i3((dq7BQ zCR;+b5F6L&es{I-V&U$o^4d^;P%wlxmIdY@Kc23DS{thdrezgxa@N@oKf3u6yycNS z7+E^=!Lv>`1w)F$=HX9uTp#qY(+T1UH(Uua8W2zq?{DrRC%bOh4vzJSGwnNE$)uKP zWPWS7r=2PlQK_G{#})bZ>b^PnhQ6J-Rs3gpk5AN$FO)K0j5l2xvIVQuP!S~xCfzEz z9kW92rwWtDihGTycU^}Ac)gG_0~gDJHv4sujck7AQ!~4EUTqQnmZxb4aSPNRJ*e`^ zY0&@A@~=ZXD#j{-&nBso%lu82VA+oi@b0f~!?HO@bP5>B!m8a~o;-4F;gqF@5B(&P zAhhGaJPx>fV$2c5NE;Cqbl5m~4z%>&J?y1O99V}T`KM;474~;Fvekwa@01NR#DI~ z*4u7b+|%qoW8!8ltZdfaT4ZHcQ_LrHmov>bzfrR`by}wx^M)n$gO4fIIER)|`O-_h zK(Y|sUT4%>*M>16X+DWk;swOSu6VZuTE|>)yh0oHurS;dCe|JED~M0NZ-T z)M}&!n_Q|F3x&1u@Q^5y(_MMB6kIDaO%BzYO|4noY=^>3>YH+nC}1>iChpm9KtN;g<7ElwePX_}MD@nz?zlT3&pj!u2yG1irr# z*M4hJ8XUO)aBq%LIB@G}z21|ji}eDwFB4r9ZaY1Bod+=a`E;i@4H7Ua&qKRyAdKz zRGk`{@s`o}cIPFrB|;S)Fsy>O{pqH*rFyBEGKik8*k8=w9-NqZwL}H?n#Y& z$Pz$h%HKd^6i=xM?lw`|Lk5xN@xkuI$esrd&1PC;7YM#VuJ}nZv=J5SkgTD4rN1aYC60hi+R&zsMcw=|3YXS#|tSReGiyeMjz&J{2oGqkD0J zqRkC%nk7NEq#{B~+QES6A6t6s;}El0gOn&C3=t zc&$?b0tKWry&08Hr9)9Qm{Rjl0i*xy4L4|EuVjFIL`msm1kVi`m#eq zp1f(ouU;@62y-12B>us)za4hri&~P6q(oPyjP9<<@r75n3t$ShuZ+G<59V!_Qbb<= zcxPR;TeM$kU;^#zWo?w9@lC%g+PN3X2XuRN7@w#dIpb!L2>XWSYOKNt*P{{dwN20@y@!!EHl-s14PRieQDH7x zG>t@Xp_237S-R@3fbq&s6N$#NeDwBuIi|;aRiVsg9a`nJdhbr6CIK5~|4l zCBKr4{`tFQY)NN13uP0gFs^VH$ieM61O-v_xYt3r@E{f~rMrI5Gd+a!eCN8_LK5VS zQ_X1+nNMlV>jKr6A5mbsG$oRS=$3|@`h5{83sP5ZZ?omY>Jgjwh4*Sido}-Vu^AeSsL+FYWLpQFv^@i>H(hq^3_aGvQZtg_bke@wT z8kv26yG1|5(Kx#5lxvG_ZL5k#BQ?&C+dbM4*BSMu`KA=rrsai}- zf6F;IS$IT{nA8#;n5O;)wLnweRAOQI5o-R-7HO^QiA1^Km=58v#ld76yK#yZOeo?% zBlQpZEq@uveU}m(@zDS+d0(-n8(9(Rfre7C8Fn(qHhe;cpDv-~n``qJIGA>k3G{6` z5`1Gtac>v+4fK|Jg58uOThyYe?=@-L<|>&+?VD?=cH-mh zek1o6Xge1gI9)CMzMwOZC%yOm7DrymV2RWrlzO}1?NA|HSAHgejRk1{dJI`qQ+8MBz^ggb58tAC34(fCO%S4S#$< zV$@t{WC`^TqP_EHWmvYgd!1*n^~OD*(o|>#PcqxuADq~qdqvXXsXUZ+qkC-+wE>8#H3@(KQE8iRmF~HMy~}@?{CWXyRfCR$6$iGVq2EP z<||(&{z2V5jxz~L!Be{x(mluSD?nEkY`Rcy$$YCR7P?eAa|Q2YWGQ5IDpXJ5dC-^h z-O?MT64geihOWa8uExi*JNhJ?n!8nbBcTvz89n;zAVdYvGwqB8P0>p6*U7^oX^zCm zi$@@b(VU<`GD?%FI(g`9_R$uc(m1DTpZren(yl1V;t&$fm`~iBz9<5bpGQd%>GJ*i z--8MFs@0b%hKTY{HHqVb6Eh)Fi@n38M{>h~KQ*yM`m=7_Mf`y5+H^GhKpkD#tkq@I z8D*DzEj{@`;@J;ZHW)Elb+HxK>gYb)K*)dMQ8Pd8Hw;I*}rOpj$^n#4+kUUD|=7i zb;1YQn}Quu3Ep*To0`KMPMJ`e!`^KS87R?;cpR41qDwz#eS2BW8Lh{tbc_hu93{v` zdc$)Zw=(bdNLO!idhuxEF!Po?eG6mU=ClzEAJiCP?)cT+AT_{VXMGGy^0X z^*w$!C3QZZZ+d!sn*yuV^ApoggmpJoz?1yovTmjq6Wx zT;9WYNUJ93g+l9~CTV(ILTz_$oqW_+ zd|ArtyQk&qeT!M>=>+w%t>C}cqjCt}yXlp=8Ww1Kc2@V$x%|4NDrdQ%Iz4Y#Cyl!8 z1BbFih;ptFQX)Tn6vZnIt>lE>}>G+?1hAxspabWnZC4(MRvgCtF0Zt{Xi+r2- z;Hk#2$&O2hyPXYf!99DsP}K&YV4BY0!>IE%Mjhp@w7f8HNNsX#c@|QsP~dPy$6vs0 zP`oT9F9l2Ql0)ak)*#pG`fK;0Bva-G$-~sgFl6J3OI?Q?ikt?EVA9kiYN=Gdxmzj2 zNe5kux4-c)ZqgKL%`k}o7dGI}4rs{uASDR{PtSl&cHA>d_<|H{h%JL9k`wfBczi`f z%2Z(X7P*lgG*vh;u2KWqH#ICVIM0D=4XMxr-A@_|k^hgF_x@_~|JFX!34uU>&|Byo z1B5C{LP8G`n$is&r3i`$2$(_#CG@VLNKw#G1uIROprMGMs8mHoKcJ{s8NTP7^_=fK zb7tn3S!@1*`-gk2{ob#AUDw{2#y^@c)tg^&r}yyOw8_+;dkF10&tq*MZrU{(vpepJ zGAho#0y8vid49!y%KH1=-H1KhHnbuw5#SkCw)e&RjnDbX1xaO}YLk(@Dk|bR%Vq20 zyhmHgfH8WsHBMa3P3?BVo|`bw>ohT}qKfW(G$O$ zQ%NHPdKA&(zm`5wPKU-G(d4QgN4$rHY8yItjy10JX=?Rn6YKSeC>vq*#PPDTL9GQV>w+y(M% z_-iw8$#^njPa|Y=-hjZBB^|$)B-Mp~-0CY>|6c8zm59p8@cWZq-$Sd$esA>7Lx{lH zuFP{rf4xrdnVQQ8Y*XWREfxiv|Jh5|K&r}ZB3I473mi5dP*pu5la`fwS^mq$A41=h z>~`O&i@s+mBEIok50eVc;z@w-)oGWJa`3g+c#|?p5do6EbWtPWM-e+r3Y#e}s6=6* z#6&MyQ_|Cc@kM;?Kk9&@N6Ov~>MGz5L zFcV;bA;57-z>iy0=_Wt>GJ4Mr3em=M)Z7^}ck|z~7d2&|AnkRXgS8P4No{qd?b|=aS zRt!6Jx5=48%y|Fm11epqNJQ&QoTthKE)FaaY)s3ySz>_!Cl@fr6&ydhl*|F)c-kC9nfPo+Q^ngeu2JctZ1UAfES^ zrA@!MJ1WRgRNd_&k0~wd->0Uyc4YfCwRiU=lT6}?yVT3i|%>G1ZK&8;kSyu zcJk)Czskl06nu};af6k~y5)3UFo=QD-1K7bGGDm$;2q9K-T*p}w0^^v+Pyk(FL6xP zPo$x&`-3mP^ursLFQ31wdl8aHi+e6J10l%7eLzrGQ&+X_yf&&6Gx^keir-WqOG#@8 z(f8pa2mk4$uHNkxUTxO>vFE_9cu=brH?C_LKVU3Jy}oews&r|h2xwMpS5+MlYUDRB z9(x-;qWP!=KZkDP2?!l=%5TdsWop5vm50zk(AbwN_#)~Rc!9MBA~*-C+%Khy5c+w4ojoLRl9Y}n<~|q?C1$ew zU@Gc(xG;nYko$&GtPEpF3~^J%3;uoVhz6|vzlYbnLTdE#U?#Gim9^4$c_3YH^pAujhYXfm{PZ!WqvLIf1cIvS`xAo@a?Bhz zU$%>#zaVU6K*}6IE5qBpQ))0JjWpl`t>Baw2B^(G1Er8nzo>D65--Dm znZ2TNDaE*tRXqB8ehwqKOG*l&nem7JJorjgsiOVke1GVR&DoJx$9_IlF1&zBhAt(8 z?z<1AU|-Hc&+?|7l}kBw5o4WdoR62WJn#Sg;<+>=-7?l#r;{Oz5sR~igVU}05pzvN zibO};QB;UI!w{LO@^YTbBmZ}1HUE5BSOE)}g?gS(K>&PM9t)iVKy(B+I4>?KCcsuh zDu@9%AJ(f9qTs<%D06?Ml6o?<_Q$>;7p1)BY{W0777~|>Z?rXr!Bh3hJ_-faSk7XJ z)lx4_xx7j&4+*GA{Ap`o$bC@;s-bM_YBgN|0xaoHTc-n9ctz4xxvJ$^Nl?<>mwv<* zhSVFpmMzM%p(2F}BCyCxG?XQLDO(~Jlz1Hvg9AeS6_UQZI!+eed01(FjSGd0eLkjw zkl*O72;oY4e6$ECTLIRXBM72hZ!fb4B{S};qyoDVbBf`pbC? zAFkQlFgYJo!Ry_%l}ubqTdR6`=~(2c%O>4kGK&cFLYuuR?oxhlarh^)k!S1xaL4l9 zjd88Kq$$Lo&)J^5H`cC4X9r3p)$PxIKVu7_)x-29Gm8@R95v& zqi-r>unVq7Qc+D38SvJmPMm!v;T|w@%q}Itl6NyZjW8PC@h6`*RNY4%M3^zx>bsNR zpgi!RYjfG&Jz%Nt2I{idVP}!g$tpwQLEhg)QHLCkOd;l_R>!Wv&QqCFmmPvY-S@1k zZohB2Ao{WMW@r!tf~L0F@QVHRyko66Peo8h=j2fTjqJ&Q4*)BG#s7xv|JIi`I01uM z5(d_tquVvZd6$> zZ$i3aE{!f=+Uy8A5blj>7#ARDN=# z5+q6^%k81~VTO8N+#|xmF}PUMkV}XKVhJebC!CcAa4UegRkGkQu!<9MZ!Yo}x&0`? z$GA{JgI-nnXJ3i}tvkyc{gWUe#t{CQUz7b5HWm_=Kvc_r(X?cTymS)sj@XqPxO!2c z%9*D3VrTs#B6Mi#O&#m+o~xCL73Es-zKsLS0+>{_jmSYEcWmHtvD=z0>GoX%I8Bxq zNC1-D#y~3NQpZt>u~IHA`-BW(hsJJ~;^^2_oXLca(|*PI{qYWIS}^Uk1Te?d2qYZ2ij=hqda2c0LWqbpPi~ zBkA8rpyOqX=2oU&u*5=;_^qIP!{S(lEgwyE|EUK8^f|67+)1Wf51J=kMZCtVuv2TY z8;Wx|G7mz;3d(rBQG;%5XQaD^t^nTWK1#<1eO!Mc&ZP#UuC__Y0rpXEooT=_4Xkn0@BhB*G82W_>e z)C}2~p6T!F|89$A0=5Cf|A*?!{jcg%{m<%?`d9UxuKn-oV`v|EygO}0V^z*rOQ608 z2Tr7^^W)7rY|`55_H}Z23@y|tTTknqNnL<<>vfNC$x79M=dMj^j&KdCq1Ifh?*q%+ z6YNyI4$mpCFHPSt4k9M62JUH=`upBd)bi)vxpnjP1E^IkMkwIG@f&Bn73I`jB0PK2 zRh*8_ZxiA4GKD^~r2MHp-*P#rMl5+{tl@RarrwS`4fNRNHR8urHK7Z5(eH9cRV0>{m}ioK z5bNJMWyPpQ4I64a>SqT7Ao0|t8t~#{8bL($vU)$teb-JCk>=@4-5>o${R889 zBq(WyhPGv_!02Tv!{M)+KNx0X&k7PP#(!2W3K3-ws%q-t26>e0?HKtxDyDN$HNtNJ1VMSqn+%0Z?LAe5g#5VFg$GiN}x zSN~U`hbBJZ6RwhX_N4c|dH}v(*_F*e%I$>D9n~5&_PidzqRNy>4qrcd{Zu;jnx~}h zuVdGXV}UwFaY^hL-_}dsqGillRCLqMEC1Xg``nwv|BHvVXAXHY8M!ZLN!7}Cp z3nwd4i3wX5p(^a^r;j2XKB5px8;oNAJF9XsJdYDTd_X~Bd{jbe=Hlb#a2DbMu0#|y z+8urinJRbGMb0;#7$6f}Y&=ti;WlwXv=c~kJu6u&Gd%(Lr^gZ~#JTIzonxqusJa0; zE6-pa-iWsXLWsM>pN`wZ@>k4{#v5BWQ$U-}00DWF?mbdvrrscL0DCE6`QOVjAMkx& z`ZoW+ZHlD-Dod&VEK8Atx)F*i4i^R0BPD1wP`v{~)|kNAcBH8t3_bl^19-yrQ7Pu& z<6TBSGuz9yaBcupZ!N->KWNEWde<~vPY%zdUuz3gkqy0}IeEJ{-1-tKmV(OZI^o$N zq4Su7D*5Pg3oJR{7#1@l?zFdAFnRslKZG3AN)uc=j?+)q6^GY2KDNBoy|^>cuj(o7kNO~I8o(CAKk5pC|kBOJnn9z8}M~Rz&sE}?m;2M zHn;PA@tp2bh%imP)&hPqs1zZL=P2grr1x-neW~<(->!HH*vCUSwbuFS@0!#dW5A0 zpelgzCL8c%LDaG$;@T2HTy==o&BigwnV}cwOi6`WR{1}5hsM+BNZ0YPdByC6(Mj z2gsIs@03^yGI*`Kiq&`!YVUa$kMjLb-ZBA7Zq^kZ$J5_MlNHGax7{_D`rbaAEywiV zlFnNnLyeR?Y66ZRA@wI9XJ$!FUrSnMB^&OFc37#+a_b-EzsGXAyDQpNxDmzIZVn25 za33>{n`Pi0&fxezTb;OS8g=z{fM)7LGV>VGH*|x_;C0jc5HtSkD2^y@I|c9Gk6nF{ zb2Z{5f3-wWPts=Pls4SKHF7Mr!A#eWGnPUi(P)~4V15se%dT~1Jb}LkKX9uHuuV`Y z#!6OkOKmw|;kh~ws?D66Z2mf!Ysjc2?w6%9fVvZI_Vpsm@tZ~Q`UhqyIX8AaI9j*=%0PHEOq z%d;ADE&Ab7WnP^3?v2#JpB+beU5;HRPc;K^af(dZ~bx>j`Tp-1PG5qc?5 z-ImYLQ?I|(`r{hG1G++{sjny6p6w;d zRrh?#eASvIaNyNo>E~t(#p4Rz8j(WlP8)E^TFCkBVfYjzoDg zcvnXB;18vAs0Y9MQ#l@L2woJL&1NDj-GliB&xITH5{1A6N)~`gEHB`hgS3b$s**Q zPh6!VAvFLxP(J8q8r=VKH_I7xw`)>P0w>{2bWBq4@N^f&G&Zw6_mt9+Z>!(+<2Z^# zti-yQVOQX-HwbUh;-tFz`2CWH@D511iCkt~&I;(bV0dx>H}&ZRKdQ*(x`#6?^?kSw z?)gUR*>?LbDW_MEg=Ws3%UgujmY?;5cY5{RppdVveC0ut@4d4GMn3JoD5s%|8wlT^ z^9`t+0k4@Hfq$|ZwBCw+O+!W9?~1%Ndy*gGq*>)}1D90HNt11;(kd{d|H&pIVKP*n z_7~cjr|v^j`aY#1viuQQ4rkj8o*3kAUH9gfj2=!GR^E*C6~i6t!>Q-4?c4;lEa_Xp zPI~5?H^@{N04h8EGPFXWYeX)-E(0lDDQ*38OhtIfaJ4>eMlSW%yv1ebv#(PE@pQdc zJqVR$c$O+eASNlM^U=R|tp5*F#s9y4>M$S)-~^!kTjwP(z4T>#_HF0E445JL#I8L8 zVAL#y-w$`LT8NcDj~J@M49g<_nqTwL*g7JtFI%1TIYv$8QKi6F3b3>N^#k#}h!q)o z4%o0(qm!gG-uVs>5UFa1#JFjSrnwxn>|a}3?m}z8?w^Ef!RA^7vm!R$qx>#iNW_!f z($ypfff0{ugH50%L@lYqh#;ZJcNVJt;+khTxBNAgksT&GrSFeJ)B976bZwz;ERD$i zz4H;2JVu&M)g={2mK7lEh}!Pb39fE9y&3xh7oWHeVc(K8itpHJ{pW%U<3QEvNdMpx z^PZ1KkFXxcHcD>vH5_I=EMa!X4D5MN`Yxq2Co@VkEutB=O#e?yL3;VggI2`4)?4zC z{R0G(AK*SqKh7{ij3-|Re5AQ7hO2aRadLSSfcT><90u~%$>0jMh~|1Y`mKC8fn@s<6QP5q`6I7R zv9cB&Q4?oj_plWqdnAK?ObX5oD7d*z%Od900|5Mo-uGMcj~Ny*g1+_lO3o(WK*a9R*m;s*%J{VzHNJ$rg z(3M8)ok_jj2$qF4+b0rXCQ>y%3nGYsyJ3#pi45aLZhymH+8-wiK7KL<7lrFRYfyQT zv(y`7ytnoQq6^MXz@d24C; zb`McNKj`zu2aKso{#^sSb?>5_{Tf>E4TqIN0V1@OCB)0VbD(4euw2>ib>78yHr$gnC2>G$))Hamer%>kpb1nlk4CQHzRL5Rg2itVSN z16ns`z@HglC^V{GUVXM&nfD>sA_%V7TVMl5KebMXr54;8g8(kgqhb{@vsxxf^^fpg zhj0h^z;`9(zKIp_OIWhV8?>iAB1o|{HnQXToFbZHiE3y23Z5qzq>ok0Kg1LopHCIX zZ3td)Yq@9}HoSgqfv&^;=sz|e^7*&(aFRO)xLSY7B35yr@~Q|9v%@p}d3}#3UN{IO zf)76W#x9Sr{y`Mn<9s-8)*8B4lSrb14{dBc)cype_c!_9XXmH>fn1Gb>{tp&;Zu#N zN|Ix6@FDm+CH1iWf~O3aaS!K+-y1DnS6hNbT*nL)J8fgm1Yj)mfvq1_E~xv^;FwjB8p17B@2O;* z_!vJ&KP%Fl_>~#kc#y7v|KfAzV=3+021FOvuJ@Pygz`j`>}Dq3610Bp_?NFBFS8-w zFWFJ0q%Geq&CZJz$(wllidl2@x6KIn+6zsNXGYL~rF%W|m#*29#G`y-J!dCEpA@GF z3e3vOvQD1z7kZW!M7t&Ug`UH6(4KSOzYjJ>JNx8nn);E_EG$*a`8DM!gS2|@X*L74 zzVP(sdqb$9073*(u4OTrK|Og7<6L+eui4!$e`ISAb%5-Fay9xQq4s&CA0yLHt*V(G zp*kR;>M)C;EQc|Ml=!I9~9m z!5>V92rFiU&8_qlj{*9w++Gl$-%;WZ^-&Ct`}OSDAXAV0g%K$?mHu(e3;eY8tp4y4 z%?Ye6$+xTjz3JfEnXzTtgK5LCo;E#wZR+GLz5~*{N%oE(JLS7$WV=gW`h|T1i!^Sk zRyVAgnV))Jr!9f|Wwtm8{65J4DdoG(UiyR+q^9rihc^L}UMG?t+^i(^Fr^m(-0MG- z0Dmaf{m7K9C|K}`zoUdd>T(!eQRRP&pZ$vi+yEE;n*%Vp45&AR_#YgAQqt$=uK2Tz zj_&Lhj<(g=r2gHh_eATFA0Q&*Q9nl8RR&?qzl1Nl>X{`nx@X!qmzY71u(tN^WTf;m z+HK5g?rpc_H@PwcP8mO|+n5%n^5HucK_gSWLp-+L zDM&_n{UwYQDrJ-)a~h0tC7;zjaCt6cNz_-FNu^Jz?w(-?YTive78o$^M9462k^kH`!DZU^OG{Vx)Yn#Oj zuRu|C=MJ-tFb-}@w)@Q$MX$Y}pqOf7An({OZTYNo+b>me?HL8Nc6LoE(l9&hVFL1m z>v%EbM;$?I+5|mOAZ0BwNX)@Z0c$}Qhe7a z#a~n4(`|t}TLdZZ5!3N64QCnp$FpoH0GEiaD%Nd9+;BCCAd;HaFR+$paoA_o&4RX( zuWfnb&{IL3D3a+%i@!KpYANw+M_TvH&q9Q1Ns4DU;g5`MxCLLtb#0+^{!);tPUjXc zF3)F`R3qKl2DJ>r0!#1yMdgF;JPTXK8}JsnAY?sNxdcrS0N|6wABlqSUXprWltpax zqh;%<%?&5mR>Y#9@S5tu^0UW7e!Paba*X%!!31;QRx{U}qJKDSi)9h9+u0#Ltyl$2 zdmrT=OZ-a;Ouh35(m(j*jqZ5V-Muyd2(xJo-0Wt6updgLW5-z*=XSrTXeZQubjmvT zUFpdPRA;Y})^QxP0(vG=G;u>d>bvYkFyDp!Y@>c?A8hHMR^PeTB$HkP9q;Fp>5oz( z{>TeD*FV};3*7X$VZqZ}$=Epct1t`H@SXVi$sT73ws1UUI(D-hKDn)B^dgz(%0Zs( zWGi9|hqRGl`BL+(Oyk zO1YzL6)y#PZg=3YLo#8wohH8#UA5Za;HaRjQNJJhcpji4A#vsmO~$$;tu7c7`o3Le zmocJSOQ2vL*;m{ygWcyH4GeNCld`=AV}ciS;a&s}O|kkLP<1RtdjoIvSu9QB#u4zB zM=xM|pTzG#Hn)5^_@kVXbwTmpn%VIJqS)d+M9Cbxhe#CIh z`Ej;grs6Hj>7H}R0f?n9BWRy_!ASmKBxc(60U%ZGa9lr)@xDaeG=iVUFTxf& zjALcFRB;r#KiEj`Y!UXf9|0B52O~(` z62TyIgDe-p)}3pwmOmZMd6$+d{Zh$Z*Odw}tPS;~pz28Tiae`#g}s1V3&O!~_jr2m zUAr`nJ$CQY54hv$)1bpmeHN}uOn$8M5v7i5F}Gf)3u{#Vc}&S|zkZ~N{**lUPNOb? z>+la&4=gasuvC(Q9f&W=^2rUeFxqO8Z|^q{avTQecUsq1Pscr9dt>pttTMQ*4_=c0 z&ZT}Mk5K=`cSTt(D4xZH1od5L0j|L~C66$+t&NjQ)wd(Q!?aNTp59G(392(4(j%fx zzDtzuD>r^&*ROSG9cWC-MjDy0k-eR=a-U7*RpV%g(azehMGDHQ4VH)Xq4v}>y>RAz zk;^B-l-zzzfs|Qq>nPIKZGYvDyNi7-jqR%sxVoItpFA6W+&)D2oac1w9=5H7)e#f*zKrqH$r_&w&0A5VRKL8Xqc9BrDx}dU}Dl|Xbg+6QIs0( zq)}j(FTvPu@#_gfNA|k5Fvd(@*M#bczJ%4(u&>T*Ko|D@&bagW4U^A6ul{@2OWii9 z(!7uX+-73t$8Jtno~2Dgw>N&J_Kr4E;@sse5HLGpv3K&@s;HZ~wg}ze^)XGN;9C1O z=Ezll;x1=U9{NwhmpAI~7J4K@`CI0aeoV<|)5a5|@gVjiw+r~Ny%sJD#B7@wT72V( zV9v+a+@mRwWW&KNr zn$mlS#ahMV6mNVPm@mgjCN~Svr-D1Z;Bxrb&$@)n{#rF@sKM;Kd|+RLz9!3I?d0fi zB0Sw%jW1I?7Jo^w1|-;m$?MZiYclr}6HMYfL(dEdraXR8Q@WlGHLtzy-4y8`L5Aoy znGNj0iE*vFAa#T7f}qi>GN)<(OwOB#0%@Cff)?|FxJ(}T2WdRob9Ow3{yA6VT83do zmgZ`+eJ+8^;w)-eFvlz2;~{17j5EA6XAP>(v)X~;YR`~hVyYOqtVO1PS`gRepK$$G z7$|_Fn$D_0lh{P+9z8Z*&m~#j@myo%_dMYP;fRQ1n=HmaZQyv{!K!v_50hPVXq zTz`n7&~UVrKKTw3!-=u2r`|zu`a64ElQe%TW*9{)h^lqO6yBv|9|hlUw63NFrhAR$ zh4dlTfB$YN-+dU|{8!^fsqOy0%>UZ_{uk4D0+RoOY5wra*s`cFB^vvy_h__&j*cW^ zKT@A>l>rQr(*F&?NbRR%HBOd&whJ5#dcRS8nysL0n$cQ)buv#xzbiqxqh>&T zKB>p{Y$0YMSHBLj<f%xJJVpYDljJK?J64RDlwkyj!wVcaq9qpVi= ztRYH_RsBmnE00&8Ln_ug~b~uBTfWmJOw->PF4) z>aDSw-Y z>eGsvZ~pdBU_3jH%ac--@I=+Cm7`4|s(b(3sxq}2bG_N7@cEpgpjk?G;}rJ(-GnU3 zo))95(CkpItGZIL^)vp{LN4dOetn%R9PC1H>V$CE4zBfB3^7le1!3fBj4s)1-Bomz z@FItaNQ>)2CKWZt-z;Z{7-F1qxa!<#Zvkz*r~kKpTa=K-XwgKBHJ#HZty2%6$%*uH zR(%frG~uHCM|Xx(dHe?hEV$+cmKwrB3N|^sW~x_1Tr-=dw4^&nEJ1{N_#}Y0PmI63 z>Rx;UNpEy#91S&G0+)M>qLJdyaz)oKgSr%4>CkN&$%(tWEp-~GZ1A);_Xu@3^Oz81 z0N{#bE#RkmYMRMaahj!eIX!!*cT~4tE0lQ9(UYom*;m`d*pOh$yrX=bZ=J*rskCX` zL@V4mhUK%K=|7`-HQI(Csorr^KvmxXC4K$mj`cCHEJ=q*;CFe6PrR#8sF0O#&>2Tr z3@H#fD~xu8B~rGB6;DOvkK6{gEx!f59M__#B1R!d;Wfolf+n)QfSyHSopj;TMYUiF zB3!~7L#)IHVZQ#<7bxS&q~Fe<&Ye^qxSyj!2{}@E^R%WkMbqlOk))87lZN((c9QAP zCdY`HUStPwM=V(1wQ;DYi)n`M*d7yvWKN$Y>6Y+t$?iQ_anTTE;vA=H}HAgg_0PN8iZ zmQfbIHiY&)qw5S%NqbdjURrTv3VqFKJ!9lX=^d-tG!2r&s+3Aw!pHe2g*c*y&lle1 zBPMhn?Q!^1@_VG6(EghG36@n(3OS!C8rZiwh~|x5I*Lo&dQ8!0QV!$`>T7Iyot@%v z<>0(ouR4E%`wff)kNnCHkZ@D?{phg-+Nk+(4sG}FI&K;UoYMtzSau8Q&tTlIfdacC z#rLH2Z?ni4q~~??)7iIx17*tmz-TsJm71oemnsc+lNVZ35J_y}nwidHhyWqtdq*lA zxj=io2Ppt7e#9nA?uz*;<+3}| zed;oxc2E(o*>q)uGSAt;;hn<;bSQtGIXO)BFCIm>$hGt>k{*=(wVWa3;^d;=yyDOl zBpfxb$!um9TW^U8D+T2%aNzDRL$1L^d>t~YF0*rd6cvHuy&xq~WVg08)KN}R8ly6$ z>wtnvx@*XEZChT)&j|URDS3{;m~1b~ ze5S|*6~^!<5EnO;5+tPPJ_Dkyk>H4f{ zG-zq&TCgG?;-ai4001gT$>llCZC-tY6;Hr1uM|E??Z!T17`G4L0J`R3npZ~s2<^?sUJkqYE9Kj~lxTsDr~-h$FK6)!epYQSOcGe)SXH{Ix#%cCGSux1P`kbWq&xe6Rg4vU!34m2 z{Ras<+{%%9Z4#Rv*(X>t{!|&}IT4hvEgC-p0o|DzOOSokC?yPQ(xlZrK#!K}pMucY zVuQVoXQJCV(O+8=G*5GxHu~7@6!QQ+dBM9D-|o^5KTrS)@g-PHMC(jCC{Mu!2e~Tx znFSc&dc*fbz#9PEBS`RtDP!d6(^8rJCXYgw_{|k94Nzcs-nq$-oB$!dcspZZgMF6=p&Elqh zxbS7l&6qluFRIR${l!Q=zA+{3+Hf4D4beLLWreeza)i;<(o_0&e<3L5=)8tlg^{^N zmF+w6qY=5S;F)iK_{=&T6Fco6jJ3B9$|}YFju+CpT9iItEj!ble1?K*8beE*!1f=X z4x4i659_FSOMCb?D17ht#A1l5MUtUCv$W=?4Jwv@JE;>>yqmuE=+3O-#kY+z9C{I5 zNVKydAAL^QSUTuuFJ!<~zYA*>soN`*M)r?jkrH=xo>BLg@AOLT@*u<-2a!ImuT#2C z{7QyM8;3^TN1izsfr%JTiy!;HMKFFe7AY!ykdoiz^ST))sYa8)#|V!MelhN!Js1cqBN9_1-OCn&J>NC@o$zJFRnqWUUCWkNZZ`4mLwt+%>q2aw*hncBq%N>A>?Pd4&j z@Y9@nZAuY)*CdiK)kCEc!H|t7w8d{CLzquUQmT=@0{vaD{5EZ}B~<9&;K$}3IHv8B z<=7Al@jyXH&*$oap|bygpZ*+kb&7Twnu!A*x_8*prbD-l1#47|nE^af5wGXLnEMYh zU0fj=g<{5YWM|FKcoi#yFcr#GI|M`0w4|Ld@hGc4Is)EXK^ zRg1nFvZoCJv#YW|fMi?@nL0=Gyjy zC+U2fpvMR0x<@7WZ642J7Tr?jVItvwonfxKQ@7so+f8+E$UD!;zrR!rGW`HHrFgD$ zQwghLoy>Xyv@|$%66BehT%h3l{V)pM`1sl#TwW*UA>U#C=>oy*8F;zDbu>O#o7Ht!zIR7UJVI_~Hke-q@UYQywn56d2*<8@GOiNHCyT%OVi9XKFKZ2SrD}bE4N+zz`=LLz9Qi+w zn<)bD(m70fK0it|uX(nv9~CTk+Jw$eQf|hM54?*9U4+W$^PDmvOPjGA6xRR%X*fV= z=UU^zJxEL^GJlv)-Cp~)$=ME&9$33TNX!D#-RiP3z~|y1?xhZpEARN|FUHL!*DEyS zu9t#aurT7TLi>Hh0PMCcD|UJvd9Tz*w0%!!+Po{_pw9)jbs zH8+Y840A;*6l~@DEx|}M-y$b%cYIC6k3ARzpQgL7+>)Pt`A??|1!0Pvu^%6$liH(~ zQ|{KF&9RN;wfSJ?MJp-4ExNV5+X{4zFxY<@4=Ad!svDy-!8ODzSAd{;(>(d64&sG6V3iPo@m1)%?(IUw;5Dju0fOU`#GMFR-LfToc-y zBRmu=-FXd*SA>REYPUUap$WYzWjZ>%xC-uVneSvX`j>`g8D~&KCvaR|cVwvr!xJME#_7*6_q;& zPgT)o9mK0hxKC|=mtcs`1v8N1@_gEsn|W_^KC^h$wS~RZZ;LfnsbOJq7X#Ql+#tN1 z*9=US>ti7MW&S4DBf?>rHE%?zJbw;An{qB)&RFGMs+16R7@_{4a^e=|3f&N_19dg7TMoBdDI)k__CSZbBVs zF5s)F{}f|^I6oe-tRjJ~vig_Ali&O-OWP%~U#Tm?A_CDKbh_OAjiPDzgK?Fzz(K{1 z_}5|dft7WuI<>J~U`_0&XZ)DEse_Mpr%G;6_r9U|Yj67ZCh)5SPMDS}9Lf(IuaEfA z{!Bo6OSMi^dA#!2vx#nQ!8PiOKBhxu$Zforr~av=o_Ab@3~3$dp7O82AKli|cOH1< zD~eWtj7hcczP;Vwxk9`AncdrYdsks+gX}2*YRNw;ruc%-l9xh%I~EkFUmO}Q_h*0W zZ;X^9z3sdPinl?kNktX^7;)3|+aW!|KvU{@+|<(A2*R7?rIk!_|7t2ZuikmtMl!ms z+?uN`EXq`4?B>HF@6NNtV~|hr(l?{$oG$3UTBFJ9`wm)JVYIib`7{843X&;xP?AM> zUO$p81+5_vBqit(wh0zN#^%RSn?&V3Uk|1E0<5{W)RBA8>QL~toM3Pt0b-g9XSp05Fe@je~CQh1b`#E-(4H4p5-g^$|S`)Wq1bFW#uklQ+*VXRhZ3c*>DkVDK^Hi3uP zxhDiE@hbjow1{~r1gW@rw}3qVP_ZApY%CkwlUMY8P-e}@${=m7cvWSDTlTA&M^!dX z*A?NEuImDe>QuP;Zfw3WALrSWA|m7&U(=X}7!#p^(xW)nKPt$ME+{$g9!Z7qN&HNo z9?Dn)yye%3MdCOR1siEoa^EKiaP%<><79Kdh3C|$8$lzsN6%K3M5a_Mawd2$a^H-+ z#Q%}HH*Fp1t7WTcL{+yi*S#RWkWXd-?q!jb_-Nj6IY4?}UXcGeWCCQ;?=%m;{+g6q z(~?b6NzHTLkI?i0He7803>^&uli+r+Bu;kJrF zV+4T#i!$Y2J!A!GQ!j!DSIC$WtKiw_-1v!988HbWD~O5^+RVT$b`PV+AkxwhI|Ed` zkmgWK8ZSGDm;|_;6$Bz8``y&el<_)LLwJ8!3PGGeIbO-m;C_>8aSdVQA@WD%6Y2|y z^WU-pp!iZ~3{AuEv#B}4RrRyPWs*KOom4B3$1?MMudWX?&OD{i$$W!`xE*GpfJI0l zIk~UV*9wR5ZXrR)e`6@6g5Plx|TLbkxmq^$?5}ysa52~ zrVFLuF^pfMkVjYz_~XPC@TE9mi>B-ncs{~-gPoCS{SQOUGgayg2yj=OjmEHQ;dV{= zLF(YLzhwaUhKCrD3`Eo^`|;VKnF&9Yfcdpm`YnCnvH)FhtZk45V+p*U^F2@6pvjwW z)FFHNfz~RER`s7jiClk_7iIW0`COBcavxAlv$QS@ZE$f%-{|SKGhY*zpCOzIH>L5! znO{@oxr=W;{23@X@K7SdvIrA3kC&*TX%t<4zeP$X= z43EKJLN$-|=nQZSaa3ZJr|2_Bji{s9B?ZVc-dpU@&f8-0sRpDf?>2#G!I|!D_N@@^ z#naE0hC%mL@&VkUmf%Czz5dL+K=0%jT#>+2R4p^cEN{u5X}#XNxWtsW+b?*l$kAQb zj3ujo<4pRxR;GSFJ*1B)XJWwTm4tOt99p`gw$PFkJj-u}U1o=5G30yL6a63$rPi~3 zD!*{_gS&mGTgd|2tUj1;K)1HW7X7qIT`u^&19(J1*iTFdqAKH{7`1VgoP;92H3|_p zoaPRO5uoBLD*PI(ktp63MwnyAo%kutY$kwdlsm6|gra-q&+=+vu7CU|og9(zwXRP| z8F~xIaiidsj1#ZEJ~)&BJ$cXQ3Nnnjr{|WxZ3kkFXL;mIgnX-z`&9Y*@jY5DW-5rd z5pf43KOgHF-$JsVDzvb6Ea8ss}wakBkzImOd@i<2B8ADTE_FX9dzt00;Ij^&kjbkqBk# z0EqX!UF{MF%Lk=@&MeVV8;B?eFa!Wwoy5CKps>Mge-?sF&knGF# z&6Ek@jra%tLOX?O>2yCb3es)*HrH+^!%#6VeAO9~xCBbswtP2xLrl!)z8Qi4;!+{) zcHzB`BQStY90M;ksPAcLl?z~YyQa>ps1B+Lv)u2fu|`NI_4t2&I>!pC1@lHToA~lX zybS(sv-0k)sr}QnAFTa9*-@ter~jQ*l>SqjSyuZWwVCXyvg}E5|D#G1qP3D`@D%x?KlR5{fm&l=_lKS66B;r~@jmIN!33z) zY4AO{>nikV$DjIpWz%d8+ZzVrWB*5Y?-kZ$!nW-`=^>2(p|=2`3K}3ZMM!Vh}%o!h#{0C~<5<9<>cF4nb$Jy zRz)1C@ZT9_ULDp`6u+$|VKw9PU*)P|nhgjH$t3cKeu*|dv%V&;qf=tIJG;5XbQ_Oq zNS;|TnYqJ;W)Y(KJao6daA$P2X+Xk~w3(?jpA}S=z_FR#XY-GRP{1BLOW5_bxPOG4nbn`X`{7Jm%fN zy02)_U2}uqI+7xL=clzqOl8c>i#~);ESQal3UypNXr(6@8ffrjlpj%5&H zDxQi78(S`X0Os^ph9hPcU|7mo5+ta+z-RV^!abP`J9Bh>(YTK2CBfoQ-R^fc9yk0^ z>{@mNBK$;`SAen?%zbK5+F=KuhB$H4K`@7^+c&-i*}F@HMh>2;n&1w-2`a?U(@u!K z`m)W>z<;bPQZJMk8bGP<#!FwFO;;v;m#dzeZjA)fpl-1 zFV)CYa|jCt$xzL%MVNlu`USzOqN6s}iVxnq5XpN(vYK(rAH zen5c<&@ijM);!gKY0@t;Vp$t@H_3$&E z%Uj@8sw-3U);q+82g7Q0^3rD6rN(n~<4x7@xR$Im=SNaCYp{^?c0`@i(>BBAmnIaE zm{kP>&omoAu0N8{t(s=Kp&!ZscWDD2N`s~JV_n0F5yBO6a2K%5&m9d#*T$An6lR*{ z!+Y&Y6m&!x5c0ss0uexc}LjVByd^mXtaaN2e@f2Ro#F{ z2VYbO{YQgQ8N-`$otkBn^R}PXnrSEy=N4aPWUmc?yM){9udH`0-6!tM__og z9+dDS+6JL#etLv{%Q_Xw*W=uGoFUuBXkL+*ET>pOKwR4>kcI#WCzf;W2l~2AhZ2(M z=yRuMfJl#OXgaa?w`lKx4X6$GQl*GbA2Af587Qc5j)~?Nwyr+4xcVWV zB>B`Q;PmHBh`}qSF0N!0nn#`0fO;)Sk3wcaYlB}}j;*%R&p}%5T`e!s$+Fl5I%4SB zhoAo2M}SqS@O)!YN!jam7;Hr?dcThLGF;6k6QhT}Jk5CVp>;(35u z{5nCL)r<(1UvbAVxGc+yQ@v0=GkX|SVu)Upmblt9?XTO%V~L+kz95J}f_&<6kxkO$-LXmaOtyl+G#oY%3t zb`?I)#idNOn}JyP6`a66ENGDj*Tdo^X7D0lr&o{Y6%V=IqK7kZ`6tyQlYCI%oyEIo zEbjTu>XFq~IKXqIrXW8kQsrNf+C`h85{X&OPXIc~)-&1!YX(QxJJX^RFC|-NOjATp z(bsRuJlF>?TK6*rXkyCk274mNj3uRQY8IZPE3f?abue)@p$4-JYLJ7J27oxptD?;I zsZH&kYEvLYEtYB-iih-R^47R*v-bb4$dcNsJ`8)4`hS5jkY;e)u zms0h?vA8I1qsuwo$=G$Ik=Y$`ok@Pm%$JX(TQnV4g^2$GKZ`dzfo=aA>HJsmCIS6_PdWsB2Z&*efuU8n?f|m7+SFk)>oS`M zsdwM;`mkyNzeS^g7c5lucnmz^BQ56B7 zZTCgQ>TKM2m3^q{kog~zss>K@qpR-Lq$y?1Uookn9aAt{H%oml;^DcCKe`3Sl8P+8 zFeZ7h8~q0A0?AnK4w??`2lIeY3Z%BY-f-)Sx0f$?twoy$R@3*ziZ-MV400UEE(7<^ zY&;*ONOI7(&Fxw+6DRJi!p8T4)60vq_L`u!)X0kY&k)6&_f(=G5$uq zYvHSMO`25NGd~EdJ9~V6c@9b&9U)&{L?KmCjdVTaurC`Ikh0Kvs^Z43IbzG^oI0=o z3mw>P(C}@AB+sX2C{9VJRa?t(kRJ1@nH(HHFMoQYUypi&)8;jiON0g4&LkX_7%@I2L6x1z1)Zu9o2`L0l5|{GE_w z`Oy05Ma*3yHx3r08SAt$l9C^RB@oT|gdn?i=Cg-JSGF48ho&tyHft}sa*9neH+}NA zbvb!D+^*!u@+YL5qhyu}SCiry__1%vThA4E)%j`e{R2F{Vubx#*I^yS17*tN1NuIPTk^V*!$~R zFpgywk{yauz;r<&lE0w7%CG=Qg7B*k3?*qQH=U7!zXr8|b~J@M=}6rn{UohR0V6=8 z#z9pV#3Ib53ARHFa!@s+&koZ+BE_hJ!xB^0@M9!nu7oJrCouPy0tWZN?&DdcP7$Pi z`663Zp2S66jvYo%epUr30DK0LfQy_mTJTJHSpU(`!W+dfZ!?; z|NgGk|Ho$i6ZZ8EmhnyNnLvks30`y%rax7FPC?yEW%Fa1FsBIu(6q$c?U?3ks-H8S zh8qNZ@%MKsl=Sdbe#{!f09H!{@VpPD>F$jxtu`R)m6lLs0;dJhGGLQLukacx#;2L< zRk!gC55x{zi0~CO`x6bplz50!cHoA!8hZ@N8?DR9r4yJYZ1@5f(x#?qp2aK7QSuC_ zR4CW(ox3Q~^=rP-kngU}M$&-T1G_HZa%+L!gbVHsseejWn zi`r`J%AssRBdN~QUvK}FM1R;_L@b4r_nj1W;{a(&Je|SEp6-%bBuW8Ko8DR2I zYFSb*8d>OeuhNXn1skVEN6+Si;CnMFZ6D4FvCHXFd{Gmuy=emcHF+~?M{4pmwSCZZ z6C`St-rMaDG=*d92eBCoZ?hhWF{^9CFNRA`D8P=m2Qr?Tu0BbbCqD!JHD zKL*29iyr0$8ngH6GE*Q~{s3_JwQfP`XTPMyMx_p@%q@az5?MB{S1IAXN^2t&Xd~5C z#p@fNi?MD&^+>p0?2IS~Ax{*DI-Ik^|eAGW2&AP{Q*mUIXQ#SWFt-YYU7U zd3ROF3%KTS#q+H87D%|9uiqz6x^r#z22|~YZz?b1K6QSlJ|H6wzd?K~$^`ki4jW%? zg5_hl(P0bkei$j>d4mcV{lHkF*XGE^-URT-MZT$0s1{{F)>7jz$hQx_0L6&Sl^>op zJF`Kj2C29He0Khr8<5&GW;U(*7a6oU>o_!P!0bMl)V7iAun`+O_%V8lg_LJMh!4rbiAb7HojwA=HC-RvW-XaG1LRgiig9SwEuO_&NR z%mmE)lI+;)4Aj?LHB+lAZPjfM9QwW+zg@{hm~qHonxN=Vx)YFhpop-CgIkXf(Abs#6avCZZ^ z)Ly2>ZTJlceT#6Icg!E%LwYjr(|_U>dFP#jH$XqzPQBW2=i7s;zdlK-uDw+!{Kw|5 zf4VgVK+=Cwjo$w|)fh#S8MgmW4O-KJ%8wvf#|+lzG=mY2J6_M&ikOG|Tnw*^b#AD0 zp&C1Hk3~5L09Br?0hW3W489vm0RKta&W3cDAB1Di6JOmszs6drob^8SxTxw!?N)MF z`nXSyQ}dHk&Z-}LJLHRV4XSHwA1hq^9@0<#^CsbMy%>@^nZn3lH@$wW9yWi6;Ec^% zADyM=TwwJ5aaXn@@=jACy5a?gq3{`ru~BMTo_Y}CSVl;CB6mrD)b0Eg=&EDwr5NXt zvId6y3|CPF7dg%e#O#uxYK!G9kia)9VChEgDYQYKLpCvjj!l*Bsd?|aU2K%6Lk)Dz zpZs1sO4ttlwAV<#@RI!ZrQcm;gqVrVK3sEJGbYV8&DrO77sn}Lk|#&AR?EXkH`1ht zY<F<)(4b7-Bf zPi-V&S=BL)!2&)s0sDd3snhRVXgV&}#L*q*@OExI6eh7g*7tdDBxT*bT1*EdnSLh< z?S4QgwzYZvc1w+2iZ5+rKxjB>H-SPs;tA(IyOh8378{j{YCC=z3v)yY!5(Z*zzh=c z_ZD_x*j<#{03;bR@dl{RrMIoPA8{l0mIa^_?7o2@YB6^kGRym0#kJa8-UBh;sX zwk5PaMZbdA5i8FF(I0H-2GmP-uNN^=SLS8Ek4;Lb+!fp~_WnUYhGcny25EpwsHpUV zFYY}F^VxCpkEB1u7=3v!^JF9{mzx)%9=35hRt`-NPS{@Hy?wsg_RRQ;Od+q>1j}~( zLhq5hU-`=7)qDPY$Cr;I@K-Srpz5QDzugn&8PhH!+4~R$vf1q@;?=_4>}3a&1f@`Qp9Qb`mB$ib#tR0bY1p{gQeG z++U0W%I;WIYWTx@r7o3)=6auE5~6ZMe47lj(&kY3yX9}yeA)up8avgG7XXmPYBcoi zwlXu{-QLx?+-!q<-p{0t6Pz1OdmVYaKD`zgF_@%=(l}e%NNok*M*G8Y>$PH*q!sz9u5SQ{@(QGgFdG>}_trtIttL$`T;`y<$ZK|5 z0^u(CJmjiJn8NlXTmYmT-b)@TinGu=_+uD4)l_F+aW3XVUV@jN)-8FDna#s2h<_fl zjVzae8hTY4Rt{j5Tx4hc)TMVoJ3BK}6y56^uzCyJRNACZ%%VbS)A0BuB66yOYB;1Q zS)iV;2|^h{4b8Ep)DIRtozmF0=4CD{Nrp1!f+_9MB3!y+54xOhwi&20T9|DxkdTUu zlm{EL24GMJHP4kD#$H`_VeeQsu3qFwE=lKL5n1IXBLCYry)8f=(^Yk)uhldtE&pd3 zSaVt~FV!?_`6X@PG*yF>p#p3{M|?$On(0br1W`?H5^R_==>S#W)aqZ;P2Pi75H%?m z)b_eQ)zMsA5p)W}8+s*g#CXksjvgDKY4TetwyDZMnbcG9f3`^Vl8I=``(>)uj|L)c z+u5@F%$H6EhKONaY`P>CuE@SyyI5mbzL80QJu9WUGPfSThjg=x76YV&GNoh#xL3j( z-MSNx%i`(8XFX_Ie%s|QHeZk4EP^0B&j;kO!|)L{qKJ7SdWSqN4M_0dyGxOaRKDvr zdgS>F|w5aOwNmFu*F>YT1h zrQzWU#2y?NRbfeI&q$}<9-r5OaKPGABEW906y}*akn3y+r$S}u*Gbkvh)}Hz{6V72 z*dyzn_i!&g7lg*qy%2u&{McuR!9%Gps!t*hTZ}}z$chVVfK!GNny2zXk=CmZQ4 zcPC}h31Lm#>CYDKrrrIr7UjmuR9YWyjt0y-J_*t5HKi$hS*K@2VKzI>WgX?Z3)E7F zVGFe}kT>9}ja>`n;$m!shBM?cpe+HkN>5sRI5>lp4OeRy9I7^mE6 z%kKs}>3K3{2#;LMZm`YB%A*>Q~ytSjnP*}$e|Dw+1#}% z4dh3d`0MnPIXT(B{l2b4;IPeQS6>ub=@h$O$?Q^I(hEZwhsmyyzO%x%kDHM2C{_yW-}r2 zKeG1aVBcME@HW~J`8N7uHs7F7Dm>5 zy_nXyfIBQ@1d2|FuFjjkEnkzTWY=cY9e};?)A5!{z0+(hTUqc$honD$zgan3%rS+Vy~no%{mV=Vio5T(*T1`85){k|#Uml<%Ps%`7L;IDy6U(=EM`r= z+}0}AmNQRHpK083=1R%&xBz)?0NZL&bOET#?dfHsysTCn(x6|UwfvLP2vsRfs9dEL zhlh%%=?5S@1DW{*?b$zO>d$XAYV`*G&4{|c);(Ymc7F{Jt^fDjl;8DVGa6}5%p{$x zRPR3EBp84GUuNp&8HfS8uEK0(9L4~>F6yy*>)VoAkmpKg@9cwiA6>}BE2%#wpk#&F zlnWYP?Yv1JX&XVvT#BpKUL9G2@b>$=4seZ~)u4{uNtr#6MstsKSwFD^Y!5iQR1MU9 z)TcG3Ve_kRPNgRI7q`>wrM}K=<+6xjI6ds2h~MJ2NDs~p)W#xbkZ@I0Lkiy!ki%8_ zw#j>{1Ll5zP9@Lq+s7G{0?%PP?S;~)5W9rlXn-PW|J zwW0~qJ_k91yF0bz{~gy%T^` zi^MIymDkpN`OE4cz{j?z@MolIQ$=;aYyEmU%3S;6y@|6VW99%Dj)$gsZ$*DZm%op} z+pfa@&2<~~M!>u64%s9|sqg_VI#E54AX&9rZp!HAv{t)I(b8BhJa|eAF>DbwMXqPs zxAbd&P{HIWom%idk&hZak^{Io$=;O`2mCTGws>N=dlk zqd{l7K_;o8R-5>EPjjTE4&~YJu4z0SYM!r%)m-|}ptvAlb1`U|giN2Zh>2?A!BeH& zoufcoF(0}%>on1zi9t`F6Q(FFwaEYg6ymwGd73&g3(#@Gt%6V&W};ybtXHbaOC9>l5Igv%R5 zgo@%B@jUD*asnuZ>xUEP9}`eVtfobBW|_yJCulRUDvC<(1q4uPc;me>uFKEa3+92foTtV_In_mB?CIr7ALnW4hw0b8Fowj*)0`skW z#1+_}TFkgN@qU@QuZ!VYV1;D{*+66;cCMD0xSvq&Yd2XZCUd1QWmCUV9~Ir6S!*uL z7>>W0TSv0bz&Kqy3h$CLQu`9j4Y+*601%LGBV}c6oAwLi)aWi(B;d!hxVFhPdmR@j zmQzjB1x9!v15>WEDDsE@&;cCMrRwx;U6x*Rqebp!DAj8|^LnQcN_28C&e#^9Gg}&_ zl4c(D{b0@^G3jll-MGX*+)J!>w{Om%hx+7qs*?Y~0cy~rM}^sZ*P(J+uq*BKK(;BgmfOjzV4s#NzA(|ed?oQA#u0+HW z@8&y}>!p#FEeN@ghg&>Eg;e~Gc$H;_jg8_O*@>XGRKu0^^{$;%1k!L@HLO$ND!Hr> zWUYXxLAW=BVUu83S$&PbCfmCgxI)lt-oL)w4XFvFPdBFDd^BF^1bu=}mhdi|5oR=K ztkWzVaM1td(?wG`{@@*b#FsmYY@0)#YGFw`J0le?w`|2cx~;ZB^x?~_`O$EyeaK5s zS(0JowL=?L-BkC5U2$^eyfq^Jh8az9y?mkiLy>A;E_~|5j<`7ZCyRc|o(e;P7gs)S_^5cw|-Syl~fONdQ; zXc|b){bw27KR3`+M@t86drYo>(}nn2?fIoTTIzqU%}1vJuotV2XxHmTh6ySD=Z}w< zXTqskUtbCL9ij@JLKSWEDu&EMZXBg-hOhnT+E`q&g@(`xI-hbxc}H}wF?fEbJRmal zC~CGildBp5)y;hv%{)|(Bvl${mJ^=k*lz4X?_a}K>x zh98I!I5QSsnzu5XijFH4G4f5Nuu@~VKQ-q38=k?B#f)Jg^Kl7r4YVOhvgr`(^rmeo z16MiwF2 zoaJvG$^#4b8g$4@R~;!mR6Vz(2r<7p}?6vB0e_Wg5i3QgsUrQZj4sG`juYDLB$fPzW2X+1^WqUEnlrYHs z{D)#A-jV1q)kM>hIt4_I)NJ6Cv;;Rp$1Dm{z2P$hO>7}imtLtFiBY7amNr7Yn>i2?fUHj?D_Xqz7nD<2$9OzjkBUc1uc7D*C zQZlsWo2-Hoo=g}p4aQ>Ffj^n&xnYKD=BpqX_Wfx-Kcy`&I`L~wfX=4)nGkd=e&XCM z*ap$q82;0aN>4#yu`?6P4n2KmYKgNTNBZ35Y8&<#gnDV~(V&u$6_>d6%S{-x?!nDL zY>Ix8*w1$3HH{nAw~jlM4juZstc6wI(Nvj(3K#w5O0!R8TN}oDccu#n?dNEBbWd=Ev&o5hk~$UJA8JzjH2b+6N5PAinj(-ldf`SwJ(W9kTD#Urtw_sufm$l$&R1ak5b zTXmuax5!lU4iipnMh5yNpCZapvVI%90QFC6X zueFgLC@mZ|jB6@ggV~HyDnZ)Q#HwxIy7p#zYy?YNSHn0rOUMi>l<6G8hW+uVNAF?X zqJzu9dkAk6*D?B|z8w#carlTYZB|!?pk=UB9yeK=jm{zB?Q$A$Zc4V5NI0@6jB1Lf^VA=*}e=NKmf>TXvZnln}iJ57MgFy zHLGj+pfp!^tQ5XW3b^e=L);9~FmS{hWLg30wiFV;YEOZeNd>rhDJoqL!cNZbcEy`@ zxfxobRseVF3s&ms1R9Q-(9}=sB(1F`K!(#?Sm0$xVAYaL{qSNEhCeG<`}zH* z!wxWg8o&5f^~x=ay%}EVF|xxh3{YQSLYV*8y*|YAj)8*yyX#l%+tYM40 zp)klvh6y7w0z2@m&ZC+5Y3gex)1%|clRKKv^~06Z;8cBEIHYI%>Oez=*iI#J&v# z#HJ2_iQmDbB^i1-rJnUP(kyMex8}Ct1UKdHyrw^X{jJAUc+bqlf(`{`|wXC_eh_?hFQ^gd#xIsnrA! z#PXhGGtG>SyC*cQbJ;ppR(G(Tjr1p@pEfx+SJk`Ar!Tx^b>1sk7v}n)>v8>PzfW9k z|E)hj+kahq{e@iNY3}+b>Uh0vP(a!C!l>+zcZAe@|HITaM2_TnDG{``u$>$9m~SxC z<4+r!J!F)$>Xgm`Rew|Ix^-*D$isJL`Df?b_?Kf`hEHN+SOnjiV<`TmIaT-P zZ}^KPl2o>)hNJRftSz>>nZ?qAN>m&5CqQ*xf_lWP&@s8VnUm&Dkh1>FScoh|KC+%G zN2X;TEoP_HP?K$PF3>m@$r38#Cn*t*?7YF8Bs`?l(jk`b$y~LIWMTWvNQ_pKrwCA%^gVdsWPpBuj)~XpFbB9(^-v4CS zXd1_@o`A*-zY>ANDa(qNUiSEeL9Y>_tq+g^jb@9J^u#AmYG}xcy={9mxXo%%{D9%* z&vibK27ADW=70SI-(-+JU)63_=c*g|Yl$%ke{b1PVMNSDhvM?p>M$q4b%DkDuRfnI zbNcJb8#eCy#JnFkb9#+m&(!CSWuBf(kMXP$B1=rk$t9nvAh&n(<6trPkc$tEXGnAG{?nP1Ai+r3!<)wbA;i zO*DAnm*usxKkX&>pep)TXOKpIFCNg%kn`DMG}Un% zv5ypb*?hL$Jy2ahjui#Te}o=(`>}m@zkUeo$NLge zGM0xZhGQth)U|!m^=hr)@Xvm-ls3hlaYLzb9+hFRT2bPj3ux@>9bhfVOR>bsZOh&t z`fNpV+vl&TgIV{gI7$30smdAhfq|mFezZ1~Zx*ivd)Or6K1@mBIufpHj~P6+39Jn? z!5o&Ph-SO;kG{ioq!;h9{U`giEW%a}Jg1`8Lz{_f-D^ntvt^h?Kj$3&&7v&SUi%df zp*c<0im{r->ec;*VR-2IS)NWXl5xF@vxf8nv7>T~Zb$SGtqbO2KR;Fjn@)DDn?4t3 zSrgkj7Pj(d#VY??D(U%XJMYxB8!)Zjb_e5wWUu1tiWJXQ!+`Q*IZtGJD(Cs+)`hCD zT9jQThv)RY!|bx@UFJht~Y-J$IFJ-~0Q?i+9`6)(3LmF+nEtL*tZ zTnDT$@~){z(`E~Z;#%Z42=vNt0bb2fD;K${s?efee*KiXtK@^}^Q}X$U z4NP}IBy`(qrWY|q$4pa)u=NSJ^?eYZpUvH*kwmmp2E?`T;c>OE76vPq)J>WlkDT-o zpyI(D5q0H$4D9*6nR2RK*aYB3xq~o$q6kG)-zu(d?nIWuHAw66sTj`5tain-Va|HR zPn?0;LL$YEW0zWXdOraZVWIopOwmrq4O%b^m)zGUygmO2d6YT^mttgm*p`E zUWIiN=8QV{Nv8PPjj|G0Dn#fbP$d*{uqObIW4&Nq~(^c?$(%Fk}5;(T~`lj3LkyB z{%aU8Z23%k8J#9Y3{F_%eq8$)J=uR8HJ}F#KZAjCj;S`NKTDM*9LQhlCB9J8g@@0D zQQg-5lrr|kKDw;#wmmVp-myH;6BbjE>+&;IMl7f=KmE=D61T#@WQGbw$nnsE1uCN8 zht7swT-Jxs4JZON1-3Lhwgsn0YiUAoPYx{~=v2^A#2jq0yyy64ioo+l6DE0>rxr(n zYKqt(O3fp5ydL286tFZsyQ(JR_}1;|4LqZC8VK>#Pw$6>7q-AFT|Z=oZ3e*hH#giG z7dH+&LRExBrfw^u6C@y{ zXOH5K;NB7&-D-?ey1KeD?h6h35^!TR=h_6>diF|%j$Ieqx3dK5Qvg2?by#>eGKB(m z<89tlsL5;2()!hG>-T5b(-~mDZ0|$yfir{Knng6{WSG7tm z6w()ht@*i6gIEgLOH{#uZBG9XS;I8@yPL4>)B~!qMMj8os31J^#K>QmOxkK#XlxqIJu!MYSX8g=})Jk53=XWcP^zi9o*BC z?%H>ed-Ks%^9xP6_2!ityv$$8kCYcxqNY=6w?EZ;@4zK*P1mgMWJ|^>!SR((F-}2A zrJbqoTzVB2FYkf_{r5FcZ>I|K**jdvwNB0OSx<+bj=>W{ENnHeKmFYePAS1MSDOX* zfd>H6j-`a)YaG!a>2ZV?c9mI=$I9s1<(TWgXX})_+!$lK$$0hmFWBEzh0V|+`j^Fz zk3#}V%}$4nJonSq55C;Ck$%<&P|pBc36C(@gdx1Ej66kTjzeYoLY;VZ9|0{`Y<>0XhHzeDz+o>CN)mzeVHqNak%e5^}%yAPRHp7#T z=F6+M>C|$IajzcX1Bl4t6AfzZk4{t`c)vJ|-i^=gIJ$S`R*|8_5CLwLSx-tkTK*yJ zl~?uTD@})#nb|a2P08Np9k3hAP2<_-?EtkIdtocPU4p7TY&2C&L12PjpkAM8i5Uf} zD~CVc*{boidcgaN&ftnL`&7}$#hG1i94>Ws8N?^0xw}yDT>0jcJL3r7*%zQ24a4C? zRyAzx(u-4nU;lbsg9?5p9;90tWBP~mWI%x25Ck0)c`0KW-ZD3gSOj_LZRvVHWa!mG z9SBf4g?zZ<+blZXblYEpX7435C;GdNY)t|Cz6{N8v{#j7&A-164CiR=VCwy$IY9SM z=G*|VuZ%SA)NXz@Fha<7Tx9;NZ%$!#*0z{2f*H`AE&i?!ri4Ec&8<*6@EznU-0Y97SP9CnWoy^P<}jI7Tr4ehx)UZV)oUHN%-y==3uVf~h) zUvuH0U)uAW!1&$p@P%CmAN*=NbLDj$X&zyiIk@twp)uP*b79B6cOoxrMd6jlrwwzl z_O^uWg{TyYfbg#Paj?j1^5;{w@`2sTjIc3X?@J7vJ#j7L-py@4d!}w0U;YSAK6m4b zn$Syby*%$*@(~RH%CR^)UsQ@E&~|iOVr%u&zEt#x*-4&y7`aq4Xbi*2L{p? zy04&Ol>B#EOb}Kq+tajiXXH{0q-IY2M|0Y5&;}_1ZY?5rIgpHJIJC_Rz)gO* z+Z6bSpZmAdsA|=rPhkh{S0~d_J@B_+BHXS}mfB?zn05rd7ipA8UzbX|t;|F*iTc^! zK*O}-O`_zkSy%|98`?9A9k50InD@J#)A;f50%;3j*NqWx;~Y0j3LS%~2JgJUM#YN+ zIu*p7Lq*@5E0PM!S6+fRu4Ty(vC=p)SOG?`6nuQ84Ls3_%@2s!3qo2?=qLx`tDyxA ztF?^>pHEo0a?ufO!`3?7Q{tkYVvtB+I_V$2%0`L@`pNm=l-Cnics8zlMNw3y&!D5KOzc8x= z#B=xdTrwzqSZO(EgrgJRIPd&f6;q!@8yxXR7-9)pB|axxnvVR|m|`=yASW@>dihMGhU{F8cs+HS zj@)>lb{-JX!9%n}i!FI^@)_yQr~I#@?ww7p)N|6+-DHfp;~cCsXghf5qb&H-;#M%2N z+clxYP}$!6)Y!kseW@G?wMob5eb<+)k-i?~q}%p<8$71+d~dbKzM*ZH$i$^X_&Hs$ zYW=9Zz2>oN``6t=_5dp6$ShS+H(t`bohq;dv9w!8vzvhiJwsPLd?n`n_nM@6pp3cX zq6w8z|96Dg+U4mXVe_z~uiG^T@k=$0PtRRr4B)P?%xk74-0O@$aTtGPvQ=|UW7CHh zjxd{@-pUZL2?dRZ5wJ^X2OU&SB-s2Xf9~N6va=Dg#Xj1Fv1#9HU@?48`ydE&ON z#JRfmQF68>IW}xjSMk~Ls>h|n84(vVY4&!u{)B=gTxGeG1>Mw;cnJ+^ApYi%YY8US z=DiggjNSu?SW5|97`B?Lcrg2yRE9_)jUX7~x{o_LVcvkKAoOE9H%;pBIhq?9z)v@c z2hDFDU|tA@Upt_H)h008k*G;RR2#TkF#&V5gKUzr$P+T@&VD(ipDMfkQB;rHF$JKp zbG&aRW~-hb4i80KBt0^X>W@0K8Dt`3p8}Vjnd}3jmk@qD&3kICFd&eo4+2y?-ag zPN`>~&Y#t+vC*>?uL0QAyBqeYKU6aR)UwO_Gvh0aIi-dw>a6)v<5kB@SHG^(Pn~iK zn4s2+I?HTIAY|c61&iWckJWnjl*4b1RG|;Pro!O2BkrsoBZp!jk=g62$A?2DYT(A1 z&_XRN2_@B|+wfH1?Tk{v{m=3NGrvr=)yNooCQ~C)>b9)Oe^{#_#63mDK>~WVC0AD` z^$SteWQ#EMz7sJRe`U#DKuG3$7tPTT&z5W;n z2Kk1>W3p@!Wc+T7TSHOZ*@h2kl;wPCu92E+d&PnmGNgwWC!2$w8*~O@I|H5L#?A*H zr?fb$i3?NB1_LPvgF@UYiRKAy>mw`77kvp^$K{?a zWLaAQR#Ubr#|A;872kG@A$}Lbq>75q&vp#`iWx@ewu;@nr6P1HFP?8(Fp}=^GLzKv z-^pWt(F>{=G&nf0`d8($5YK@QWnJiRefHTGrTR^ite{2}nqXwAH<=OMa)HYTPj&yQ zwI%nHbnEbg-3sYf1F{d$Y*lI=K)x`af{nv}}t{8L)U8rp>?GeuwE2#yhQ6TkX$2H7$E)NHKBs z{TI^6Ig>DbEz=N!?Qc5o&*s8SOaX+z19G<1HeumKT91G!q2Zpohc|81ckMNCzXgK_ zMis@w6tbNnPt4tGVsxq!f5(9AqH~g&3IIcnN$D1{u1{%v_K8+#+6#;+9wRbMbx)Id zpBWFUqYi}m`bd|CPZK$8R>cNZ+r$$oI#=l3{H9tn^(z!=(d8R<-a${zoYCr-P%cd1a&obFK@P<|>n0TaVh&ThD zQvJJO|GId-@hpOFwgiqhp%ywqzPX@=%QJ#sl|lVki$mRaFOTnf#R=Ul)1_T*HGmT}(~$~~_z-><@pSf)g;@O>2&H$(#cRvyFJ^TL*^#XPNSx;Gh^d>our4wTv* z#AAVC&}NbXs0NPN-M1EUYIgH-il$?R^gWQ&ldwg-k5`r3=eK7@IJ+r0*9Wrsy;73z zBut!Ib}N^@E*-Bo!o)|i4(f)Q_BwBA$3-uUfU1v~KjtSM4*hDH8GVz4_E%U3*m%Ov zNeb|qAGjNX_uN{uf7~82XQ&1zX$;X+i^_;S3Oz%^geoOnAC;|x?|4M09|-e^QcZ%7 z#6K`5$o9S$-^r)#aMjom*SzX(UIq9Ib=@Tn_8@We&+S zl7sV?fr>V6@hxuzsDPie&h>y^l&c_QnE^L%YD-y*@2iRvTu&o85>-*EQiRf4_Fjt} z$yDHg*xR=_lQp6l;?LZJ8Wy|8jVCLL^f91^2XWI~lAxT6x|qv&s<8ArxQ(M9-1w2s z>b!-zuf}9^pkgFc7E=wPmoC!ZIPrqlvxlt@k!;|dc=YLv5cJ1q+}9{+W<#fRJKI24 z`CwC5kl#r80e8|vR0d}SW;hpmgtFj$68YWVsL;d@VEiE5&mHSxwRZ9-R`d~%wvWFM z>Wgo^b1HUW#+brUm+Hx-!CH=-hN;`Z0T5biCHJ%Kg zO-6Jo;hj2p5_^5IJ{djF@Cve@OMCAO#)NrG?F^5D4ncR9SJ);xG!6q$gqgyP9dNB! zKkP+Z!Q<8vva5^vJI1mDU^6jR`_wJ5!Djj|PG^0ttG{CtcRSEW{f2TU=n_YYadof* zUk@?gy|^4D1@AcEa??`eX3~pZjrE<2<~3}OU*yudP}k9mbfJS<_$==OE3U9~{y$uA zVrFC-m*5w9U7@&4!`{uIZV&d>jTSoMD-?jurC7)wSBQ|U&BWAG>oP#*7p*Q!~g>q&lI*Uzh6Wj@}a*#1?TQZ zaA&5^M^_jP`uaAtxpa(Bi86yRp)ae-L>(q2^WXKxJ|SulVcSO;qD;J2%HaE#uy1xU zK_@tRmkzp6RpGrq#MR2suXnzWY&2d39#xfSKt)PB*W{bU>C>Gf#!C3YJiH`Mz4d_x zu`M)XIVh!QZYAC7S@x54}u05%N*%n}rd8T~|-Q8eY6g?a#G$z&j zHGo9ibszIWAvi3NE?5%tfN+F4%s*eBvLtpTy`lWDheTYU-Q98$M9|834!^v0nxTH- zJ1!jSACrFEtm1yS^l|k!8b%8DHr)`3?=RL2*&B}7CUMAz|3T{YLMfg<%LVpAC!RQ9 ze#FnSRJz+d@{_bs5ey7=1^?sx9Z>9VJlW2h8!jJ6cGuO?D8Dz4J!97W#Y^1!F=0BJ z88CA425s8_WX>2n96#pT*}yJi+m?LNzIF&~@s2*ouOH6}-T8otrMb{C2htuL$L+YL z038TULi^?Y9XOcjgrNE6lNPZ-_cu&O%e3m08R`*6RD~IIGvgiOB_}~|7d`meW8WX8 zWiwdR@1Q0JESMLG$!pVJME(R0PrAHdOplpnPOl#obz${kDYW6hPk>SeJn%T$=`d5s zt4o{)wF080-~Cn8+MIMe!0xi)hU@+O48kx#Ji_+Kg5M{)x~{!`x~s5x`p=X{ObO z<^{eN&;1o@9|Oc`ae|`15&pAFx+qfNao>INY^93GlP(OtBLH0?14RVdoDsu=+*O`) zEgQMFFmoo^d-ga=RRfT##6CMc^VvLKbLMJC_#fLGLL~NE$jbtJWcTDcl9`AQ2 z^}2EVK#9oj;R*6CC`b@VrwKEGwFeqvnaKTH4t1B1Jrd475yte}ej8h`i=e^I_?F&| ziEqj}7#OWtmD&E&{em)S?SbL>kq!ci$JZBFjSpo+nJ}aV4xOI~JkgG?*_@WI#4!5! zq=K1^%Cr?@-y67X?AZf_9H?Syo=M%6eF%r+XRn_Q??y?4ugB#D)&g-bR({Z76)$p+ zHG$!P*3`rljcl>;%cNkGOosV~ev&i=(Zf6DjNk`qTThZ2Ci#0x^#ulZOXltFagns< z3o~+q#w0D?TDtc}j&2)_;`_V(eDjZkvS+ZS>gM@eedcL2YrE&iqW3l>Q8!`zyypFF z+`fX17Ks=Rxv`ow?MH9g#Gm!7SvGI=WG;t2_<}EZfRE~pt3f1Yq?@Bq>wD@KM12q4 zbemYRA}h$}GebEqTLStCo64oIe_Tq-GDjD|pF~g>7NMJmO`Ql0ECe}sh<|QXh&M5N z8H~v_*&jUPA2W`@T~T!);w2AET)C0?bcaM1GW%{wb~pqH+E1X6%Zt%r46UPs?#>?F zX(&zMuKHnY1r*od$zz88{O0kDxzI}q-AxBVQ+7wNI#=d0kWw?3=J@Pp`#7)aHsVwX zP^2oPYn=%=4aDqp`G&gkS1rV$4Gs$;+BnZ6O_V3dqzIf z*#6;WnfhppHVie+ZQ1(daOf@3g?P}r>*e3^k<>OE^54hXl`o&V@)sQ>b||2TSM z`wFwGA2_NbyKj2XKPfP;22dr$%XfNl2$4O?-yUL z&m+6Q(V~2^@63{B*4=%MhCB)Cj|yiWJ7&w!k;br_?mR6<@5FC-F&E0%s~#k7Rb$0g z7gKc;J-61^tNzsTS*{z~sqkgJ#^WVfyJ86&>*$LvKR^b?tqSwR4kXl$m7aG$B~_?e zC97p5prjHd!tg@Was!{vy2yo%m*TVe-e0np ztyEk7#y>GXYn@Q!@$m#EHU)>n#{ifvMR;C=#=g(>Kp0fbY-Aeth*XQxZc#~W&=?HLuqrbL!t*?ZhuEf91+UbRneIM3P>%9DM7j~ri zbl%my)}G{!?{VEg>)7=|d#Ud2BBY5nZl?dU8zzxyPoN@K8`;}QV&qA^gfp4 zWj!35tPeOPF$oLl6$ESVSTPQaVME!X<@}vC&zj}G(kt$#a08Ghu25hN#_9|f5Uc(I zv+IDfu8ny|RFNA=y~eb+Qw#FtHF!KVo-VO6^E9^$YXnf?Z%^|lYD*nCdA3FD1^wV;4l{n-B1ah@oYhZ2BxX(WfZhA4h!g(>)QM--+gJ6UXB7a-HhyR45+^6Z7-V zj=-80f1=3(#=R^Be-)qo32hL1IINre7KIZO?g~O}BjLSBs_IK18Jkkuz;@2ai7?NY z;1{UdE_-30u2Ez^obr1>TBW+tycwC<5LO91$h-vyWYw?}Fi@E(ARfS0El+m4KEe5I zp+JR;lV{q$rB)i0?|wIL7#NkFFY;Wu33kEi%z9{LNlnI@KL6qOJ!zn*pU(OER<5N| zQKxf=JqBbO>)&->1-fe>aNT_i_to7;Tv#U5Dg*Tqki+EOfaoip+&@@H_0W5|L-2y?`4&HfQA*|J}oR`xlG zIOh@g2ywP>VHB;O9wk$Q`oHcjzdQuPWsH`&P*neUMmc_8VvcqE1``XbyLjJl=Jt5a zw)?W7nj5%EcifUL?MN^6j4RT4>#`Sj{N9_rG@Fc}>&`}K#W!)>yt5o%_#;w-(GBhmVqwrJmMtdtSqbN4H0?mBN7m!OT<$^bK@{ia;i5cg_f}o7Mr zgL1cgZx99vswnt=9fd6L&?oIc?{Ylr1JuBBT9lgGfWwk;O71Tt_>%R;%i?Ov%=ULsSFfP1@aK*JZ_3%jT>`Pq?2tT*&6Syic7S z{nP9npdP_bFP~=2MyQ|ADh5!Y7MsdBzwY|FVCllLoUw9}Q8x2jjY&s259oFk6753L zQ+Dd-rI>L}3`&&o9YNt5R^OwdoP;|2MlbEk>y<46!mB?@H461zu00{ER5L}5&Oc={ z2`_!5SXJPuPmfZ466kOrqk}7pJrK5EvpLW7$FbK@CS;d28Wee-6fIl~76~snYpRIw z1wTu+c7crdkRVAeVrk~LTvgenvFEwsw{uxduxiH`ALt`_+i_PU=z+?!?<;)p!ZY}} zoY{HhB0)95xvOt$zj@bWb8Gs=G}^vH3}h}sUr*&NdQJALBGOecFYEqJ@wVZe$Vt#w zZ+vbodDJ#4!!DUgMWs`ru@CVt|B$`c9whMF`g{M-^5q03vLLwWOwoIsrnL$!9F6c? zNY|e8zexz)ojT)O7;87n)-U;AC$ zOSrhWWa4eVolJ@P2MU1MJK8?*`{E#K?$+|W0R2dB zEzbu=YqN9GqqRpw@hn&ZKEmd8i)R+OUSRUuoTm>f_YAbrUdMbz(0go8l48Z`FQxn2 zFBNG}!tQ&E<*V%~E)y1BttxeB`Uc6`6N;`7I0cEpI*HTBk|aM?q$aXW>=`L$TUkne zu*9ZwEEgP*R@|AA=ydTf$t28!v4?}Z@#)P2;DK#Ls8>HAQU@A@|B-u}t_lNVIXPcr zr&|&{JrdzIjh<9RZDr{gyEx7s-k23mMu0*???Sr9{^#II$ss}0rK>ky5=BXLu6I8P z$>nj1PJ5@vYJU)q>@+RA(}41|dXW%^3iEvTLo15N7kI!wP`BEXM7yiMo@Bfg+6I+v zqSYH9E^tqI?-5nd>~6`ZHJqF%99km(gEA*q8P0ENO@klbD%~vWQpEHd3TB9UP>bv4m<5=i^JZ2Sqzp_(V;V>PL`?XHzQ!A^f26} z>0kcG$;|fr6+&BzvYyrX;g+Nh)5JVgm=bTMi+(a3i3aR>=h~b380gANeGm?xps)Q8G?UB5Gbg=eP&9 z63nE}3(ROnY+}0K>^{AlXb9dm%2{jQ!gv3z;b0UBQ+j4|ai@P$ozh2^RY~U>Tcx^K zADVzSEavGQ^%_@Xu~r2(bcujo=nVvo*F!hrtF}WGBg&UkX(K7EA@bge^lkG2U!4GK zckKe%Wd>?A_uXhmDjq3#RMkA?`!BeaJMaDEEI2MA0)VpP2aqL|51aJ#_-#BFi~@5; zo!}t!uY6LxDKqB=*BTz2QA>*ZVIigIL5=dq0@NXT`q9MabHBi@3K_9OfpR?7p?_V< z8$a^;`bP1mO^3a|XpqII@_IHp2%vsk)xYq$%Mid$q#({Ts_@!9GXwzfbs;%d7*L6& zNQWm}<=&O(Iq9|cPlOje2HIinWQK1o4b#e*11}+QyBlro_{}Jr6+t;5%Lqkly@am* zHQ`PvvL-+TdY@rYGLhrUgM^VefTT``o$e*On%~N`CU*r<1n-U4T{(P;x5n;T-QK{*s;l zLpu!$v$+DL&sbN0jCet_1AmBKt`*=dT0d^0Nd%xO&yEhEHgDFxNNoKrf*ZSlcRR+r zd@hz#{U`q2wLKamPgpesRw-88-1k&H!rw^@ru4{_xeUGy^KH6$MMp}v2eX?tm@&As z8_rQ98c^_H;B;GfwddtmF>|6Y;l(d$e4Jh$0-Hve`c$O2-=q(70ORbao*M72{oSjc z^>@)f9qhDx?lI{?Yt`ruG3%Pcf$IkcR}_rvx4kFvC4O>QV`Wd_@G?o&|J;$etBdi8 z73*JZMC&4Lb3B}E`9Yyd5fWbZ;@A#BnB=U{YKHr2gWO1rRLvdBjCJlGwg2(Tk$?nS zt6(>V^++edo%kk8liW}PG+-E7%WS{V6M{*FjT^J8QJjtItLk?rVF$+c=Gf0qt$x73 zPln^X2GPnD`uLTzX7r{U{vAZ{7UIAxBEYmC(n!j&e2)kHH;%KDgQ3lqseYq7RCH*J z_+$u49=t`yqB+8(4Ii}iGt^73%&WktqU;P*X&LLV-wNoVMHu=kv2(R`X87;<-F+2i zvGKm}JA>IduH8AqjWny7VWY_}ifuj=tZg$>XXcUy#`Z@0F&6A#*F0aK&bcYdi`e zRDQLW^dzBt^$2-~rbyBfpm_K8#8}FAH%_IywYBZ9PZ^@1afk%FnX@>_Y(|B#y^|am zHiKG;&cOK5DX6{LvWu4#FH_q;S2YN?T^Y3hVG07z7d4PpW*Bxt0og?;a zi&0Ka;yB_Aq#YW`*EYCGcDO1$zW8M&RRri%0ai%W7xYFv*rU)4NrCIJ1~X4=)<71` zEf0j7+2V3ZOUb~pix{XNODy5yzdRhqUE-mhzj?*W9D-M!Uc#SuE8q)h1STi<1I*Pt z-R+Gq+I=4iOyI05RhbsQa(8}S*H^|Acy0Yi@-)f4pGajHyv5B!RkrgRkuDZAh3r7l zN&J3kU+!VfIo0drta+-nPK%}u3AB|<-}#D>Z#JD`_gG)xh^LlA8U-)z%wz7cHj<&R zEL&z~SyoZNor^(_holV@J4lh$)#@}Y?z+9){1pOIrt+_)%T0+b^;$L=a)Y6_LwB05 z29Z`xyOXauKyfKtEC2!B5F4l>zQclo;mC9>R^I6%K3Coi}{NY4h;Jv;G^I!HtlS9`@;e;gpKk4n54Fg+ zS3=%i{d*07fsIMjZy4X}>)Q)+G+J0-jc5LI$m0g^6MTU`X_{JP7~(TBNN_bxV3?#I zWgvalv!`F-u+u4>_7{4>kh^L{lUOTGlF|udEc;T;+E73W4&8mql=8Fs0=Fm9#Q>I^ zfjCB&SAM|V=t8QgHxs6dE>it~IwJCyPo>>g+MiB8bX26a1`fMTm}j$MLkUs0xdBU; zYkD^TReO=NAYdSv(L|paRC%-Y=b!{}uC!Yp&P{|&a@7Jky2L^StQR2FBtDbP+$FMd z7inYyp%Sq$J>SKqTWON#I|W3CirEyxsbC#s2vIXWNJ$n=_)%RTT7Vq1>^?SQAEn3$ z=l+(fQD*gA4p*0aWx6CI>bwQ$+3P(WU3yU&0@xamfbNH~Q#Y?yBxs+p-(1@L4V?+( zSyCX7i%wYiHB`1o^EQ7P;R^yXI8?Uc6A_c)e^Sw@e9_xdM05Z$SU-eCt@%Gmbv;Q1 zMGKh_hz@8#{PNQk*%|G$-|n-0fkuIqeZ#pX!}+*%MvLKX)_<$LgX1yhD}5dx)7Rsv z;qmb8W58trc@~x-9w>&CA%nFj9kV|C(LhE??XUl+d~aiSB?>UB%;H&Z7Sbr%HUu?7 zX6-AgqDp-{JeaxOfG;HlzvbH1Zk-KA_cw5qr+7MoiuX~G; zN-DqsDsqd0>ZvE#UEZ>EW2wOl9bHRKUrR9ofZ=nBYtE3Pa+iC_x$wbQ%@dTomCAPUFScEIbdr4Yw3UB$}^WykfVZMCy=0~AMNhC`s zIEwUvh?Js;r!l49eGHtmi0Lcl);6?ps5f;-hMLh#oNQQK5z8bmH@)qd^4FXRbRTUC zP^Izy6?RFad(KzupxE3tpQ%fQ8gv5ycMo_wCJJ#It8QqUS+X8e`P2nYh@Cq0dw(0e zmUkWF8E(WcrH`p^`t&g{dgvrLN5dt7%|0=T#8PCyzjfw71DZ-%R& z?WR?({4K9}CdT4m^!a&$yI!6>Vy^!Ey_P9%wb47Zpd5UQ1gC#MnZ!O?nznMhn_!Q> zVa5R90Cb9QjUBIuOt0kg6q+e0b}^*S(I1YtQ-L3~nQ+IyXeP59iS6#v!BLPAvy|TR z@l2qCIv_`5=C?ay-PUmBkFUkAzNt;1{*H2x4t_h)9v#Hu{pJEd8#Bm$U6|O7n1Iem zgNH|i7s1f?r90+_izmX&Uu)9cpNb`zDR$#y)2F5N1Tpmj*m+B7pu;*L3j;YY^5nNxO{zSZSqu(4Zb5NH_=U#1L4P+$ICYqiVN-7KY@1>@u) zVZDNg0uH7^mQy~*z-ULZ`1Z})=zA>*2Yjlx>r6}=HE1FJ%sM^i?(>7I&D|U$)f-4_ zwai{SXyC`_Rga0U*&8-AmmhbGx9)47py@|9Whmf&&rwx;hge1*6;6V3{l4(ZS!8Y2 z_69;OR;ZG@WjoN8b$Pxu4Pv~uV-*b3i7;mS}KcWr{1vPVv?@G z1On)g?^i11XJ<^sD_dbGBrJ=hTer5EpgQFoLl+SsKZ{mU#JsJI5`0Z*^IBFBqUro9 z(>Q4nbubur71ma%3bAI;We+~l$A&m1FrdvM54f#sDE4g5&$IqIM~50|3jA4hx8B{yb)>&w20`@HjRUn#ESetlK){_wr`^ktYN?M0TSp?A>C~P2ksKM{v`JQUe7cHD$_m_J23ouB zCFmx$9Ht@lQ38FJOSW{rZ^kmkV>TI1@B(5DtF+6eoCF`5%HV$*Nl%Iz_8U?Oxk6@y zeqSkut3*wf@pzxA{2D-2Uizjn1mahLXs8e@S4S?{xjl~wnwbHBQ3^NbLX)LVJKGW* z9hdl=BUkoF1@AJ0PQYnr5kIviXxket&*V;rxLMgGGE*B}H+(lXU8WzNaY}4xwB1+P z9`FM+i|F6*xG^yU8Ym6Rq#*hX@pR&zt?&med#hhe5JOvJ@R?r&HTYNVd*uF3QCJ}X zgKppEVdskk@gWaJg7lVFwKB15GRz|plQZSJ$EU?3{H&aieO_D+^WO-KPE}YrBOqW6 z`>ImZ;$}{dZ~$k_#vRvu2!2&T4k7IeNzu$lkLK69?K*4?g*9L0)1t$5YJgRpW%4Ia zdsx5o#9@Czat%9<0g!j8(71wIL{!F|y>A~miABox#rG4t4a zA2IUX`$ABRu}ZN{6_;Ofan7cu*G4u)BuFOIPf118z`NQo3AYIsZNAz%x-&eWU#IF- zPvo8uefv3*-oGCOMsEQGyxbSOYci=_ER0mdYqw;hsuF3Wr{C8{6wgD?Z;bp(h}!r` z*ZO8(30=}fGK_8)P9AmbBe2o1Nqq6+Keo!;7h_d@%gn{n%~qL0i3f@lv4rAY%tcoD zMK;sM?^Cq;&Y5bKz6M4vJak98Ie`vfs(lBX=2i(q2KrKMAJtD37*eHqK>Z#mm!w7r=!_0?Cli@g6h-+2G8Vsy+6eVpK~p$ z5PZbCcOu0l=SnAs=%Tn$QkPJ`%rS%A%82$IdgaqDJXe}S3wDz8V-oaVlhChb3KBtu z^|?n#bcr{bWCLr#BumsUltmddanZ2lk%^v(;O`_&t`La#T?g}PQlW_pJ382tyLs|j zuAL?GR#zSXe zqEL6Do9?5-z{lw>j>LSa5Q(1D(ZSQr87?foVe5HR!! z!Vk5Q2dJRbO53Y{y%;uN6T4x9^!w*ON$(^U;Mq+vq%3DIS{KLHo{V&jMD;UN#)lkf z9C_I)<*Y9^b@iyt&<(d*A~rlLzGh8YkhxuH0m3fiEC!R__R|N2^L?9`RL^hB0@LQt z$M%`R=7zIs6(|XEfD$0@#QeYc8@iTqG+s)3J5O$w%pSsEo6G60u#Qda#pEFc`i&qt zIUs$=FOaG)$4^}52)>_`(wJU|rDJ6AqE}8V>T-)1Xki@mbH8-X*C(G2pJsN`j(>X^ z<@BE^-$^&L3>My9WIgVf@KOq*Rm6wF2FsTA1$*zE*SU4R%9j3-#3(Fx|u$Kp{P0Gm-7oDbt#^vH`_e3onf)! z&qx9q%JNxR5FZ7>YA@-?|lrUuXB^eRqpN3&C=0f4pA z6-%LCekJM0QVJ>6dNCTE5zm667&Wg%YppYn7kH&Ki*lR3CtaQUaqLsfudUQh)6W&0 zn9--f&vQ}8T2I`j&c8>UVX}lO*+KZuYbzvBGM4w{kv{r%FC?{A*hYBXBW2qJ{cveJ zY0VzP5tD&~@r8YHYGzbM&nHyJMjZf;>}+ zQHT{63;=t6(78TSRDoPMl0pg|F>mC3=hFUF5A8`Yw%~o6w)sqA^{%=X@bDW$N6EAl zP z1g@{{Z0|H2-axHxdbx=W*M7xd^Vd~i}W$_aeA3Wnu(r8{q}GuG1Q{8+4AqBD+sLw7=C z**$L(UBRZ{HLBgJH8L`u)t_%T-Q##F;@d@|v;f1lfzk$F2TRB{ZoUmr%_@%x8?n}7 z<~J#9))K+B_qxBYU&RX02|P8tL<)N(Edfrv7{oR)Di)WbWJW4OJT##1#}z;&%EIwA z#5SnbDtMz=bQt>9P4e*v#tUqt_2syvY4ZucCt>2UE^C3|1?tOmyhC60sDUMxyqPRl zU$%S&qi=#?)huBd$*VcH$T6xfRC3I6^F2*<804J}v|KBH{RA}?*F08;25IVM6n&*{ z#4da)6)CTO9(F^hgqB=j6)pmLM7vURUf<`Z(M1; z0kF0w=fzGs+`^st3=Q!^{N^;%>xNECA4ef{vJ9~v5!FD9P~rA+W%-ZP3Ox=lKR+RZ zcg_qCD5uxjIM5Akx3z;y=*jvKb0mJ~#-l+@E(_AyWeM_}8g>BU-$L2QwHJ(NHVicJxkSCIeTV)VK6W|`X{v0@ z&VmL@C7ipu^g{9gEr^rP0z#YC^~E-{k{pJ~InMhqjNxhG53wivp`FHzYWJOSjj+!iz2R@a z45^8Uk2O2tWo4S5|K9y6{I7rCITUoht7g3LQmQEQMbowaB85IinEL^p;jeoL?G|?>7fET4O zl9WU*RJm%SYE~Xdml{*F(@f|7AvHSus|vS>f5U_|#@w~ttoYE6W^M97lqDQzz?>jp z!zBN=oelvVbkB%@ad@8g1)J)>O43L2IOBg$YNpjQLq2WiuiZ%m))HHgC<2lZyC2Sr zj_3l@`cy8{#E%1{C7SeZf#f<4;{%{g(50x5FCjr%!m#>&MV&9N zg^2fdo842`{cz`hJyX}0bPJD^o|(AyG>KxOPYh=}k5vJzCOvs5_Z`#%xpQoC2qEKd zfE!n75F%}bmYMfx?7fx9o%NKW-=E--q^tGcyx&`Gf6wFJ^EcFf@s~=B z#oAM0h>BD3=SipZ(p#-@&8oi_sP)NGX$6oUdxVR2|Az~}$shQ$Aow*VDf_rlokIOa zmnFS2-1~#+sL6i?LkWgoeeKk*Ss+zw6_N(G4i-0&-z-ia9F)}jZt>8L z_A{!+w|j5wpp7~uesWI*t4%8Tm{=)WGkv%3n&!0GvcH$k@|dlSpUB#;9QH>68O=I5IbHd)*tu-^g}*R#^u@Du zX}>i)sKZIR$_ESmyHDcDeR(mfu5Wgb2p0F&WTk{JrvDs`x9BZ5aXSmu8f|ilde`!Y zm%l(x7@r%M{hwXx)Ft=$BisO&9lrZuv{R2N%%OMgcP@G7$hLnlU6sqV8vk|hwRiW# z@~z-tzZaczvdf4GJ1EvC|LMOfA^&{r^RSoNr*7J>y85M;Rl-8v1E&4>d&%7ueVuI! zL2G%JG7M=c5a4!Ci_k#gLx^qJnkQSqPD^tPujgvOw{elGo<}9pBn5R+< zjVgI$#rm1tR9-trLw4oUYcQhYzu;D(_1+hGwgto!S)Vws5inbod6tlMzDBNS-S;G^dg6(U2*auEl?k5Z9m;GAS<_>_ zf<#FzW(!}UY4u6UXWwf|G!?wSnN3hB4vVd*;c8+(|`PN2Qh<4YrTtyh!XQj4JbvdP17J zX+dYcy_&LSC)mTA7HW2rNf0u=SMD_#hGUl|H{N=WZC8>E^JkE={{;B zd+K+=v);UP6hBF~U<<$v9PeT%AY7)rw9&&f5a`?32fh%5nshiejxO+ErjW-y`FwIp zD@@iwEw;27IW$ihqEmBR5^|16@~qyF-k9~>NUzIJ(tO`V>*~41MU}h81A1pNUFOs9 zjvMf{kSLJbQ^crgTJT5IYF1MQe)=k`sQ{} zlOQhr>nzL2;W2X-iA+6&@dUxMU7KQ|>i0z;?J_mMZ(-2)dJQ9%KHRUM8r6j}*Q_+U zef%OSN=Djo#Esv=8$R)HSv)t~#E68D@0>Joov=E?o**;8t92(pbx|o>d9T_~oBZkA z;=I2b$gJupNJ9s4a^J=f&aK|3Jp}%`EMiI{{ z@Hl5rB!TkxY_)>O-Q?yJqwb?3k8^Q0Fyjc8?h@tAl{AF@(TfsKbiOT$ho7t{drb@F z@=?b4Iigz&KVR&gmhty$Q<%i#@);|wir7wyy0L?8uHt9$d8dN{WG#RhusVrDP~XZ9 zGF&g3W~W8Oygq29h<`2OtV8Q05b32`luiFj?F@g9P7$3K&Qv{&o{TSo?)+q%Jq6xSu5=b8@6} z;a45lwCS{p5g%5^HB_DI_E<5OyV8SI2mA@NopIzzvD$}FFE{ZJb-(wPwrUNPoh@yh zS#*_Y$8*uuPp@R7cYWf?{)XK!jH*tKw}_DJFeCOn;o3y~D}`UF%yJ?DLU>-rkgRB{ zSb1i8(2fIj2LDlr78e;3W`4{9N|ZR#vh$7B^rpv=!0NN{^KOFEoRv%G9MaBFSqD7m zTo}8DKbO33)*h>*rk+!_8j%UNqvBpCFIA zjh0e4?X4J_BCp1ALZ*Hl%Xgxzhv542bZmzPSuQJ`UGl<3%LK2{YAkPSA7SVSaU);) zk8?)he1;*m&m~cVWY%xCgt%BJOm-(+k58U?PMUy%W7W)A3i}Fgx$MxX3+kN^Ci*<> zH>I@6)^3>fYC@C~2N;^!JJz=AqgS_ujxl`aUHHSJEV#CbH@Us@1m`E=?37e$ zQQEa1Z)6kJP=zdrskQ^AUU(6L9>ZmyZqzg$PhK3F=9$wbAa!wCN?sZwVAU88=yv)> zv*itTzk_qMa%z~)I#P2rx|@kdKf~A~XJ11M|7UjJMu*S#1^KpV0zt>|{#*TV<1|f31 zabCf$;L)}i8_Ym&&f6W-WaUqnO1ULzd6fOX^+z;Ecd}4xU?&~Y*M3g$(zDQ<1F6m0 zx{n>7{5-RjJdY^3u_*wRu7$Gq6ylTC zcT(Q5k96C1dR9W&PHDdW3e3;sc{$s6(b%zvp5x<{OIV#I?UN_q=&`)v*S>>nx@|Wz zoi@JfkjzihJ@N(wO-Q84d){J0vas{rt{k`ydBN)7r5=wiwQf#JUq??R#<%jMP@4$L z%?M(TJ%9Y)bJ}T`TB$KRV)h$Ub9{v;@l%h}{SI+56yLj0=>4_t> zpL&vd5|G6`W7v5EFlmn=fgq_o50@(5Q>$z;lxb|Dx_3Wuy+$|aGCWc>o=^A0ap|mM zj!bUsIwU?1SsGH2>h;;PwBI>udiD5w_fgxioo3i0i2~f9OLXE5sYErkV7BbS^}&-! za9ggLDR}awr}kW4N2Ymm-->`oT98UqSaN0r2$Gx^q$RfetN(#1Ia=6?8TAt8{_}st zYt5KlqE0V@(kSHzKZ^Ik$7s7QZZBqBP7gi$8_xXrAF+CqxLK3bm&RW%PEtnBOE;Ot zmKW+uI2FN}lBO&;Oen-kh_jHizKNmV`D5B6J4uq5Vb@~eAO6N9@R@Q3X};c=p!|_f zVDG(?AhT%%ZK|`AocY_YQ%O76EYgdcBxOmIaqyxtPAcG$t#ScRXsXB~+wXTH6yM7w zO+8|_LjA70$;QX&Iu;c>AwBU9-D9VLVH!Jk<4ugyaw5VsWVlixJ~>JI^*5ke!9Q>i zYh;2bk>>G>Wb@|;Po5%MSTI}pvZRcp&^1%=EX_Ricy5dl-io72Z=Kl5y8)IX*JS&4 zt;C!PQU1uo3>|)e1;(k^KBeiSocra^Kmxu)qj3L+sUN(VN&#=sJx0DYHk8 z!I4Qw9Q^(J*>?LOX1fvpKYQ;1V_9~diG4S|`$FaJN*$-CyQimTIDzCaDUcFLORETI zl_kInOO_0K4J_cby^;Ze26hbrhS&BQSWANC1uV%ciLym`sijsFDMpdvFilQ9ox7{L zE5CU2HU9sc^WJ^8UaHXDRnzwZgPy9o@!WI2^Zn`j!-RTf)zI9y3*5X7OdW-J@)YzU z3D1Wtwc)++4VF~33@JA(^N9K}o?MS7k7_-Pm~da7nHi5Ex@bBf6=YfnY#W|Q2{s1o z_kACnW6vQliYVzWikgqGR)RI|U?^jAN8=B2tqD8?6O;aVa5 zBtprqaGsHu*esPnZXg1l%@@82yS0fZX@NRou%v6O!=z+@JgSvDmmfv|cyP}wz=k%? zt4nlvfsgU=No+OiND5=X_$(%$ejmoqokv|a(Tb>zRRlANFog(9-})-zH@*vm#3Wj< z6N(|i5HT)|A3$rNB z&$8L)kwhwm+_e&HJ%;XYG4O1>@FL(=p%-M9qkQH(oGxER?&BG8R_43y!w3lTO8H~R z@4^5?8NMuWtfNIypy^pu&R)dHXWoOYFvfVfjIEp3ar?#Z05`7#kqa{+fp#B;MkbU1 zp7gdGK{{e&)cQ#?Nz-`>){%KQXHLS6V^jdFT)GUbuLFyVu#PSuvI~fHlVwt!K!@&D z5!7$PyLk;*--Jm~Dl=jMc~QYm355~}Q=KdF%w_Vt=cd*^d|>%0dXE4BPoX1aA%(kW zU!7XYBngYV2d0grFv-QDDB8k5)2sol7Bt^SAr58x7}X|Nu%~o#;%sgX0D93<}F2v`6Kd{G{a?0ueaI~j`n2rXmo;29<`0{XBuuzFYQQ85)XV5$#=4S+nHo96^3#}IZ1AS1i=jGW(l5M#F2~dLZe7|J`N@-6*OHREtl2j zfuadC>u~NYBV4(GaO*k)r4?BWhSZ5d0S|W{r97ro-BzBtoM$fIzwhs%y^@7E5#1Y< z6FAYSg$=cfpdIJYvn9gfoGa?rEp^vR!c59@||457l;2 zIcP{M#X?-Hz&8pgUw8`E6xE7_>`XQ_o0AZOu!UrO6~@vnBwKe7Csoc*vLX{&VlsnM zz(dcR15fVbd1ycX2lwC|=W;r{ErhewM!7XY)lYn~#E3*U^X$gzg?;2E+RB7Gcv$7* zVbd=n-Db*EHj&sC%<>qD^T!d*EFd;ZuoDe-7{J@wK>hYj=$jiT6*O#lo6O)y$xxYl z^nC66&s3@Bj3;M2JD8&RuJ>vLG+EQ6&Mz2Fk1f^8n1Lb{q85AajPa-|u+V&FqsW+H zn$XHq2#+ivGK#RM%Y^SD+}J?Ws6lf*Shj|il*BMN+C~-XVp9o>S$T{ccyi#mSKm^8 z-W`m<$iUP0oVx>@LBPX*qo|o>A+#JJ%Mp{Pe8dd{bt%*ll8_k7K$GgB0v-XJZ7Gk; zedoZF1J4dVk9^mAH3A0~c*yKaG|_s8+~bCcV!=eMR!6x~=Hx-w_n;Y~09B)y7dI#r zDFZq1T zAk{IoMqxY*R&jzj4BmOY({te2hc6>P#XTK?g9t0eMHGzy3Wor-O!Q9E{*MhVa2$7 z%SRv|0nzoevxyKsF(09-sGJj&K&UF@JGngD$FH3NKujl&+0R4KGV(L=|I5Ns>I0up zZjDRd7R@I+LPLaO_c7E)C#)x!{?=8R{5CTM<^d<3?$BGH~XyAA8B)r;}uz?09f zd<60l7&-!@np$L9@qejsdJa58hd1Bh{*6G&mvH|snqO(3M<8vok#m`Ic*r7&L-z5| z&uSx!MCeBgg~fNisYQOJth0HaUqF7kosK{bJUbn+gSdYVJXs%)jAF4Lh`j23qFO3k z*voc3h%fr^-c!Gf*KX&fdcOR99G*9wj%wwm)((N^@Vw^3dZ!)W=^f7Pey+j5)4v?x zu#V1QzVC<9xy;E>szyZ9pqn;yowQH{)uFrr!Fame@g0iTnZ#Xt?6FqnFi)g?x%Vz@ zn(i7O#X>vR*`8ySg_bTL;{1{}H|le{d#mo=moaz;og^E6&;Cq4o3!RKH7^w3r7XRm zLQ~m=l%!N?|Hy42;yfM?28&jA@_4jCE6;<<<4K3phXD^cvqZt$4uOYJE1$f(`gXFQ zlNrl2@Mx5@mWX#W$js`VhZ2^$0BBctnjbXc2;{&61HJNilt8x10NG~ z?e1l6KdK9aQccV_(%qI()( zTHS3!#Bk=5alab8>r82YRS$RPbZV;+mh+7BH)S{XVQLiCNCX%A4)uQN>$W#`ZAqqSg zZ8PSSA;E~!xWkb03c6>oMs_EIlN34XAs4yR7m@G3eFSJ>5EGGlfs5*80XXva)Tx0M z3(G{YT!u#fPjx?047bq$0`BcAQX=F#B_#r8Pnmb#H3!HSkf%}X>y#ArRzjAj-|=eR-b*NjP2Wm$0kN=6)kK0vJihsK#0 zj>?bgFd+dn^!qde(xrcgESW>acu*;|8PDjzBUafC@N`VAbT~b0f(f%gwxu2MJ>|Rg zAA$DxN~S|~JObzw7M-HjF9bTUE$GB}EE7o(G4RAK53w(ShbFHyvAUTKSz(!wyi(BH zLC^7r{v8fsg#u{0qr{0W#$EMxr}vTuBsHc4Jgj@jvKWWN)FL@XZLHiewIrAbMD2DQ z#<6sENd>j^q)$(*-eA)KrbM=Ceds6SJ`4Z>zwo6AA5S~)ikPM*)$XY4o#Q|&7NHv! zxAsk3A5qf-f`~ziS5>0=nUywui#fyD%M06H#-dEybXrQ9$rxmErP5W{2b)Tb(9j9$ za9=S^RBF-trCP0|De`!f(AWdl;}JI?d^`j^`gjGpT@*f^A;80{sWihz1)gkDTM~+o zBHuNLnqx-wr&GE3I-as}*;& zyUq97J_5aUcvJ{n?VlCc<3NC*JZ%%JYax)p)7AkxjKD+AWl|uFNac*DZbyNzJuoVS zCz()|*{Bbso#T@lC5nEvH|ZnV?F!n9QN5F=`?gHhl!?<}Ix+iYVyax0z{6oxE#^p; z<~Y!cWy*aJ@|$jeq}hVzhl26Y;ia{3D99oyPv{`ed6x) z$wvYn)y|jYF(ZJQ#c^xj7=~rGfk(4!P<}}4c}SWbG~dqvPe*N_JIb}wyY9dLVSj)7 z3p^=M%A_YK2Be%6Dt#esVr7Ac?~NJl0W`IEMU#0vp{B#07=vaNg}0o5he{!2m{xE+ z+38SaQcCvHZvt)qJ!Q#uj8m0s(yJBhDAQXXn)NoySq{%W*~d*%wkwUbied@ILmdc& zE-wR*PQYV9a|$quMZmH-av6C(Gaj9s%hJcgjE7Trgzq5hWZth4(+1g&`*o3fc%Ed> z<^7o&N9B0V08jfencsJOL-HY2m|Z%T4-N2`1U!=QRuA+LB8iAH4UE)&9; zOz9rO^6SNymCdYdAHPqDgPP0@+U0kA=nmUP@KU~(E(bpY51CpNA{UH@`#0GZ400}) ziqI?z^k-r`QM1XWmL4TA3a|H=}tH~odLi1^WNVx^kOFc?w~8lPnuKd-(@qu zv%u3Y?t6HFhx`19ka|G5)QP7 z6nZE(C&e5)MT5jfbd zDBHHg!^8D1(^>jm?4(DRh_+)`K7Usp&bC^(!Q-I(q*=Q|{hoZYlt6fJ8P6dH9;z#P zsJE1Z}*$m@RABL{= zl08We`_33kI;HC{zC7t`?|JJ3)g9YMNST>7~)e;PcPyU&t^XRh2G^5c_RA106cc zI~90F106PEyG+@gYFG6H9`f&zC?DmkA5`F>L_ra`>h|%B3Own4KE0;n@UZL75I%d2 zhh7IJtxVS?4Asqe^hD(GXp-@0#WGAXwLY@1Cn;p1s^qFM@gQVMvT%;kf{ct-v3AN2g$DdQRSezVLd&3IU;APNz+ z>N)Ua2Q&wsQK#76fCn;jISo8!p}-F4(Sau`2-f4C?z5?t15bC{{?Gsq>n*c0O89u} z=}EwLSpHH(o(4y?hJ7}}CdMHz)fx8q_x$hayeBo*{4ce#A%Sqoc%TXAGDWM5QVCXh z9GY!!2cB5x3igg3PqrGmoAK<{7je%A<^f;eUNIaMrdQ+M&VS3~0a4;F=kWy6)S|vx zk;f5EcIqpq_MnC0UiQ_>f#(6w&^=y$x4>gm#yNqIz{zj4I;K_*JbQd2yK^RwdeL_* z@K}@M(3}!89;M z32+p&v+b4fDADrWzMpu+n$n$PFaQ7`07*naRKeYzf49foFUF(pFDuYS77SYxq4e<_ zbjHKAT22XCyD?u5JiDEI_v5(T0*^jE0n6?Np2VZfWt|fU)23DqJUf4r4;FYt9?zix zp3pF$kCj=Sj(VeWhe^$p73RI8T6<+YJAb7Q_Ys3K#fA2c=%ua4vRPk5Eo&&PU-)?F z9g~m8sF1|14K0ijP-`2i)pDs;OE{1tT5o7RNZ&z6cxr!3RQAf49=6$#Eyc)+@3;S+ zkmho9I2aF2O71dIEW@x0Iq)37S-lhBA;2LY4i_?JfJYyzz_5gKIcny>a{ym;&s%!O z0uMFxGfOlnMdw0}j&MO#&Ug;ODJ18zUX!vIk!Wor_7$d94m|hxrS9eQ4=eEOWz6zpcRm6tU94U8 zuQafwE)TbmW^pts5T$OSRBgh+Ox84mr zRKvHgQLVfY;LayO>IjNn_1xa+jAu`ymLI(15f}-0Na~bLt&oMF2#A>Rq=3hwk_pQ~ zm;{I#F0^_Rx&$6Fe{$g2@vC_t2jsx>K!*L{yXbJ>38jyRdTWL3JSOKdHEWCscfpce{&Wpby{#1{?yV(ycW6l`dw$$G&C6_W-bYcGdx3lTN;li#ojMV@QH~OC7jzs%*SZg@QGp1f#*R_zjpxekRA_bw91kR?pH;V_pmE+Kj^u!kJl&Q z>26~K_R}y3P-%qftV-HD8g-Q*z#&u1f~J#sWdnvOYVlamo%}%*evhG(8lmSh^U)~( zCjh)wOXw3&2D@ZE6q@g=NSNvEJ?zopnxap2A(j6*Yw)J)2rWBM;cd-T@E}4W)kJV zb6{S@;lGhlfk)FgUeyzL6yqVyCEAAoi+Zb*pQnrQgfV=|?IFg?RqNZ^-YC7MHgm~= z=fF&|9C!}Qt9S?8NV|oN=uO!c{vw7WnM;y{&<(98@Mwm^%!f=ZE(WDu5~|Z^5+d{{ zq%KXZkbsEfQ*+=sj58+(p2PUo`rh*}pTgeS^$Z#+(mtZe#I1=X=&1cEIz{GI6nHQV zje&>4=&@m>OsxWix%vPPfr~GIC-jkoF|;s3)B||Z_ef@2*Op;C!+bcy{=R)YhK>I_ zYO?L=VRGQv)9@X%gNIH0dkZ`qVM@e*v?(DrVmXv{OnsEdmuyfKx?xG+DM%lW1lLOB|o0GloCkLLx@t%6#<#v6UVZgJqhuz*~qd#yF z$czd+rbPfl^;s4YqaW~)kB1!6{ecGoY5Guau8xnVAMkL7bS86o7^B(doZi{+<$Dhp zfgE@a@$|Ttz|+6APdE6edq_*0w%Z1g1O|1pVa5|9B>f#NflaN7CGf-?&7!b+n(>&T zKRUA~1w0XA&t=v`lBf(g#Cpi*BNGS7!OYRJwwy($*H)*elX&3-LW6;)PoJ(tns1s& z6UevSjX(}OyBoI$bW}H^*(Nn9ES&bXU2}S8jA#(!p=;B}o4yCi;pqY$atuex=M%C2 zhnWXy@aTXuJ_ahFAVnU^=W$A9z|greUDM^cBzTdNnUV()MhHpxJ&xfuS}+J?q!zOP z69Nn>rRdNb`Z)_U!_^4;CBMnvORXU>*t;}gcNk@RK$GsCTs8-udorx|>ZHSgqgUJD z&fRQ3zViWY|9A#9G|U2zU^WRJ1CVBE zg0)B>qi5oChg7E(bK4t|)SwJzdLjlHZu}_zU#DbK7&4<-0gwo{kG|bI;89~v&o~?a zN5A94v}X=H2l{Pwx9_3aq+wecEVg$_-QEtU7x3)#W1wr&nF(~--6PfilbOY&AVDnI z5C6z=rwN>~BLCT?{^(5?&~@%0L1{T6D_zmJ1eKW?M3m1HMGQhl5W}Fd2?CTszn=_8dwk`+?R30{&4I)4_Z)Z*^jqpoa{8Dw zR?DIfydw=U==Mheo?fQHNFM@~JP_bWTo9~;%qW?|L%_q%VQFfm7!QZtndP`}rY1qh zw$?WR*JoWG3b}I|8zdq!#@Io?GmRjL;YR_7)U6mD;Ne|_UxvmiCLfWMM`hrVtf(LO zbb(I4K^+13vxoKqpB#7&QD3cxvt%LzJY+s3WU>e?oAw9Qp6%VARa^Tw`!#g=Cm707 zd&n-2Jw85lP209%7c4Yub+MN`U*P+a+;p5xRA-eAvA4mHz{K}p&rC8CaaY!fy6~yE zgDcl_F;$UUg7Jkpc!3YkZ2_*wbzMw|IAvOgMLIszUzVNB!t|2AXfvWTBaBn1kp6wA z)=RRbl(Ty9I+Yp!%s6Ltf*31P*59xw+ksvqcX)F-N$nN`qN&z(y2<1BtgY<>~y_z9=RC(eLHm zrtgV-HWL*A9@VP2CjGyx?-HPF9YfG^BWLmda3@$|O) z+fKwxv}qU+$Yr_M;>2SY z(6Y<$iFL?r`v;{WT7vbk$AyJB8WNEGyd8e#&v}*aZ=ukEjGA zK}eA<)ebiWG~zyJV#<*uCY5;}nvcuh`68eZOUnQXmwwRPlP4Htdv0ToX#~qS>=koj zAQS*e&!bxOu(nVNjIt>J*?BX_`9InmdvJT@jAz$lpJpU<67doA0@B@05Q1gFc&OcL z6o-fs>9;75Cb5Om#AJ6=B=d1`t<$!x$Ew{vt{Zr={)y1{QL0o>E{`L!3#jQf0@A=y z4%|NNU{sC|--`OM_=`)~8FUWv$?&gajtsLO@c11@oh;{m4)O4eCe(8tVl~YpZ?hCXT3H6_%d^sISp$yE;WBkM!c>H~u>|iCKEVX)) zZ-+ofBTUdmxVpWi?j`Gd?xy;wk2y0&1h7PhLtRHW;G@h!TsHv3%yQBjs}ZLB9;T)v zqzD%Ij=~VS;|L&@>#Wa|u!sFv!=#phf0Q27?*a6JN6K-jjgOKkVJ57?1D!Fbo6a z1B0!>O(F!Y2Pe^C58CxfGdI0(f)= z9-4^6GVJ+9XmgA3Pz1~(e;D)7eW<(j zo%92?Uhgs8O4~3^mT~p;1YQ`yhJ}#C%M6o?VhIeaIE2-#qWSuZ06Z8$6Ph2u0GZJa z0~7%dsWqxi0V(~=vrR52G^Wg$VgeumK8Y5=Gi1NAolLy@v~LbPyB=ur0TjfF$Vzz} zj)6{<*vx_i@Qf6i?s*S75|IByta*{C1B-JgEX+f<$3b0RbhE@ql3oo>!P#MSk`3qQ!LR6-Y z!gDD-z-GS~%@+qAwAKddufGhIRBYB@vPr4NFXNm}jca<;*|3y=Lw-@g2x9~UJYDA6 z!J$7n@a$$n%Fi7MnFi#z6ca>d*$Cj#M95n(q1|i*Y$hVj6rf|7sJ!P{)G3-18?Xx% zgaP?HXtncEh<(IcYp7qp0#r9KF+K*PXh|1I_k>GRcJW=N@^4Zsr{9XNz*Lz=>6N#g z$0MD{iZ#*i$?QmPriwzzUpg5esaC5n4HK4Sg7(d(2l#;q-)A?)a5~IqL}y9nL_1+T zbZDVaKo~}#`-;K@p&P?DO-!CY58o+4GsoDBiZn9OV;EWhJ8_{kYpA{PGT_&N$cL3g zFenW{-gcIu_IhT)Bs&gucG629Pbc+4q+_UUw@h$1vpIWA4m`UaMS97?3CR;gvI+`y zQ^?u0Oz6aY*>2wr_~`JdS8ve)78X!GaSB1Au}_7Zk91ALun{#~j1#zRZK8VVH6W&s zQDh5OrYCvdUZL?(9=l&25Jh3s6RG;BZ67}qpVSA>rkr4b+xBfcr#n6w+NV~n!Y&lp zq@$0z(U5sVqul&H?9(?7s?WL0l?uqbbX}LrIpUTOF2m6|Oh5V<+=)r}x(z+H;a6+W zO2UjLGuerJY+QZ=Xl?mu{NyI3bhDPju)*0sv|O+J|8q z=@dEej5JKWcT)Zv`uIXh(XY3F3YkCT365Zx8XHQA5$)tsk**`sZD3{==J8W7Dia8N z;d~VNAu%k=f)DPwGGQ#0Xs0r?`FT@Hg4-+ZcliQG zIIQpU_c%6fzS41Y&la)MSVJrH(TpN&+`57BXP!c}Q3EO!n4Zr`a-l{nNQV{#Aa{NB zwHMgr(qo@}KK(W(+N$o2tZ}CRzq-XNd2#VL+>I){dIJ<~3&Id4)vl$sEYRe@BM0Xo zClK;V#ahAwctXPh3MD-Df%l^xg{ZBr!@YJB4mo*u;pcG;9TShAg>RMNwJ2{zw0@z@ ziUshr8g=+9cTk*~hVKW6u3hb9{wl`72$^9dqux(?(x*>BOeX!aI)B!R%9vX0i0<_v zDQ9!mDV)m9;p4JS=@GzVPrK~2brNS>Q${0=4>?(=_g4%YoyCbWXR*4uiPq{eaN$un zMH^eld>3}m!rIMiut>47%jebsAqD!1?a;po$JI^D%+2DF6UX7MZescJ zbyT-j+59(12_WSM;!xNCAllQ|4LLYxJi8rTEruJmP;g4{T0Rh)(2mUG(Wjn;ZyLfs zQEkCijAzu3U8ahYW01176VpV~7s-j1Z6gSMXkmZ`l^8S|m^pPCdez0srAut)O+9)B z^OH01spBR$&PzSukerl35x8tvzSq9lL`mWL?rb|vr0mBy(%0UmD%dM$vb~TEe%aY) z$~xhPO_lWXMS6_TOiF;#31O1k5NdT=14kEhuAIU5EV*AOcWd#tpH1x-h#Ka49n2rhO}Io?Q>Fw zIAxEk?S3+#9C(J!raph?>S`loZJ2^RPEDc^>jeaHjOj-o!TR;sXssM>*iP-h%PndPp4Es5I z=4~H+<^%&kq32EZ^)bo4(|)G(xT%w6uQ%-a+2Yy_L=7LBOqgIP2V188 z6V;~4By)R4MgYzWA_rm&Q@6N(6gz5*WfA47ZDQ(~XAn1BY+ZgEuyq`J?{ipx^%7cC zKqKi zLG6Wa!#;i*^T!@VV`B~L*I$M1*AO*ZfNjGxMRmQZ-BMtq8xmbonnTQZ^o;kAN-->p zWm95GyND8IROGmBabB0hX&EpB=#=OhQShU)<-l_YfG5xmI5V?2_t*uz{_PjxHfpdr zA0|W)`69YNVQr4)4E;j4??9kK0T4}x=LMoblo-I&B#u3H7Mryy8gEf!!hvVjY@EZGA;Xa)(O~b}DZ(r!sdnEEzIuO0g_ydSdTz9Qpx|y3clTioDEr zQ?L60hH36(pMR%Cn%PJb36`<+&PxBxiHiUI!c#M^BwXRBvGY?W?d8$_o)^q<~Kj;kTS#7AC9QE48^4a&0+{d%a z(InuRdG_7B4dOUBL8!q6vL^0dds@w(2N4B?MGVoCDAHsd$iqhbBAI z-6({uTkH%bH9KbAvI$+Y67{T!i34n7?ipTxxEG`8+85Agqp>|}~Y#ALTahc!8k z01;-79Y=k04XwMkIM;*nbVAa6k?e`gG?7r;K^-n_$bw*I$kV1xFOb*d$z{A{ehkhk>bvoy;gt}hmZi5?r(3D9`QYJ8kjEI&Xrif(0#@zYyFx?hb zm+rvZ+7y@VT7y!hF7jE;qq7K?@1Sz#H0n!Byx4K?cqRRjQW+qhkxkuNBNv+C!Ej78 zV;xDTalR1g8gcc1c411rqG8X!v$xs3cW!F!a`f1imh~}d4HPMP%gV8x&S1(nXoXu6@nnjFX6@ndk;?qc=tzXp@o zaHh~#-6aFRRQY7J1Q~-T(BZDHL(&DhYVCIMq6RHgIq>XaKp9-*YCO1tStNuBc}?=r zScpqgn0fjG&g!z&)uBCX*oxl|eA>mDGNMRMW(EgloI+rYOfNE>#};N`TMh>s z3ZyLAMpi-_n>CpTc&J`Du?>`_CxC*5V(8=c7ycGzFc^4x4ZbS%Q4G1?3(A4#0BSA| z0-g@rpw&wN4<{Uk24b@eBqhw9Ka15n*AP)*C+W~^D>o1hXsR+M;GyVN6og#=W9cTi zqXRWrNG;0SSFnt$I8&jV1)dy;xUT+fJ%V~vs^+LbiXfZXT)g~ z^p4qiM>H(K^!c+`CsS*)#HAd6n>pl1$YiT`%A8deVD@-kLr@p z3wY?QSyHCI8P5 zn?7eeI|Hs^{v&Oh?c1w-rStC9`&1-WC<%7RFlVAm&1Ru`-JN-yz5AiSIYcTYXFLax z@$iS%1UwiKl@O17bz0fG|$u3I6B8%x~%Yo+|+E=SD;~}AU&R7*vlq~W@+F%;BE)hVK z1{N_{dQ@_&atB>&*X7VTl{<*eNz6%2F!irmsZ@WeVbojsq?xHZZ0yyF~fjIIh98^ReLc}`-*omJkvbQbhC3P2cCx*cxYnSA1yC?rr$ zq6!K9&4o@~t)zd6%|`NFX%vMqW#98oFDn8FPH2?R-3AP)XC&&-2tcU{JA#?`yf4c| zK59lCO!WM3;4{pklB`wu)l zl1b&o2jwGW(>I1KG^74KH?S2P`@HrgnRBeZOox`qnsaB7!eCR+#% z1I5w=YHJOc6X2Sji^9YVnr;Zo zEOLrLG1@@btg$G%Sw4!;9!K3zpp)R5@1kJq2m>lZNP%v8sK^B6yCB~hje*JG=c!}^ zw!eu4EkvdRzc7QqnZkM_hE*yda9g5lt>!T3kuJ_4@EMkznC{KqYp!f7N*$0eISk}_ zoqrhP*()a2e*zRq~~@Z+a4CUuZTzr}H@d zfk!bA+E<84#fak&rKE-roi1VuF2?OL-n?DMOVt9w4a}s0AG|n?_mAI((1p_jlYR7Cc*)`Sx`F&$S?K?4X^Fn|0QwDKIjd+9cU!X)n- zHtRSs7URRGOF(@M&@9|qYhkGxpamPA8(=Fmkj$LHR$w6H5)~3y%`gQL;pb*}qG2ET z)TaD({QAZS82|tv07*naRHF~fV?kSoZ8Wi^mGJdt8_!>BU@Ivyuo0k9ma(T(;+}b+ zfTt(049UvQf#)4+Y7N6HT0PUNV%8@#40zPBv>%mDs7(Qn@Faw# zVJ2L`tzZJb^X3$u-#m&Hw~S_Bz;H@{?lbVr1j~4)a2LPu+$^4$+~kk@Yt=>k+ppZf zvOmG?nJd~le)vKKKXWRA`4bT4aw9!>0ZJ=|K0-LUA}|yLK8QlY5e{h;SK!yM~>kK^jAPKV}JUxk5Z|CpE#F58=J%bab*#I^b)YD zpGMP|fk#D(S_lI!=7OvEho>6&g$uyr+Usz`1fRNf6n}feK*K!BNs{5(8~8^by@02} zxA2JLv!In#D8f&4)ap%AGspGuXYn(itm5YQyJ4`5rx0Z$)5;)T6gN>wntV;=Te4yu zr<#}Wo6olJp`%q)$_cLdt$Nba=heh^CgNW8S}t|K@`_-sfDyd1oDV zSVc3@v1}g0i`E7F+yD17cy9 zvxLjZMO5u$3@)@0BRLvg#ZN9SJsxRS}pRiD*hAc>0XcL9R|8_EN>)4+HQBv*e`rI{xJkYIx3k z3uFE=igt|EdVr0>0$$Tj;m<$yb^OyGI*Bw`_ z5&ZtwHu2@=1+18-5HdoFF*q7r$5Z}S@y~wv7~ZX2fs=Un^B1ak?EUWtEFItd?ssu= z@eJn29aznqC|ZCQmr&iP;^;(~i)&xLfk zJifnl3CGM$1d)SCpF%w>!>q63@%R#~)*W~nu;onS?)VdELEImzQ09dkMJgjdNf2pMF%s5hK8ASjHD#y@}hUX_N{H zJ~A6&(lSxCj^UH9h4_OzXK~dyA$x#xuLK633$4%Nw|?pgJgF~nx6HqOVHHn*&-cKM zb$sS)FXG!vK6I~zj~xeo_+3XaTcJ*=b%b$(@7zuB2d_kU#khc5V^3qLRYcLWMFzMI zl;ahg)!xE?{i7%GRP)OiM;+_d2|Rzz#m!m~$DI&AeY}c7xP(S*;LT_jpT4ue_x7>L zWjsFavV!E@%47Jw>&NkDug6$RCUVBJ%bCx9#{n*`9C-FHu)_~M*ucY+gOVFf6N~O8 z{Leo=i0-NgA53pgKK!HJTAyLG^xJBD=%9+?Tujk~b4 z0vg6N{^|(@`*eFO&krb;^Px9;~#%y5sSfXn4XKj`NnO$=ffXDHPZ1X zpL-rS{vI5ko5cs`V%S?Z;ZQ^>YG9^p;a1DWR~rlX%IY}2e7A&}eiT7dG{hrc&XMp2 z9%(&~|M3?u;>^~UP}C#bDnE(e{mct^b4|xb9zTI!f4qfau#BywfN#}j@!MbVxJdK2 zfA|QVu$E9Ve5{N=iU0o9dHnI420Z5oe2v7{a>g@!u5aHX2cF%G+P)mKgVr*8xL&^( zJlGV7DH6@OD-_MSU@qZb{6HDjD}RP(W+GI|4!(G)jw8=}7@z#sZERLuoI(@+>KYao zr_t1O_+yjU^aE5^H*sTW3&!*ryiqG*^XU7qX-&g(>zo)!4%!9(GJbmICH(3KCNLeY zp}w|;H?O)l_0+piEjswxOK;-IXFm+HG>wg#i|Z>*{MFaq#==AaKmE)&<|;8<*myfR zf&caS7?)bph`Cn_Z4u^!%lNU$%lM}soyGjxw_z3wc*Qu2-~N-YW6K!F$DcldpPyU8 zQLJN4pTg&FTKJuBYM88)@z1`uh{x?El#?2k#xLSGUYNzFm&W0llbqAD`|bX`|J?%P z?w@P4BXi&xZJh4GUiW9>?FD#Zzm7=@cy6kW|LWNg$xDBMA2>gQAolUKn{`CTpT?)Y za}&>f;3GI&FtC34E!?R82<3{ui@2A8|%JF zvN7!p;S=7Q__Y&n;vZf#QP%3Xd*e1-4>WS;V%SJ_|lsz zKyd=^J2i<9kKIDNauro`8n3n{@%g*cTp|7=Cw(l0w^1})+%BHSfA`W+d~tmitz>Xi zYxsn@Kkq*Wo*15CBCso1Jbw||!q0soS-Sid%siYve2(s6kKFb1u$5IDNNns{85v^see% zYprVW!=C&P;caJHG|n_=n({!^xNlQVZOb(D9;5a--R(EJKx;UQf&lYD$%|0PZk%<{ zo*rUr#db?J=k6~H_^B(*M~{}s>7aAR$FT-{)eLsKPCylR^!1(wL@fi(m59MtyUFIV zqe|%Q+vL2Tu)qYoS7wPnUwfiyH|}mRGd^X)`0dRMi>hSV6yP@pBql${$pq1We<{7G zoq(i4LoiXN#9Yy_|JK1x8Bmq3wwwL#hpr1{UTSM@<3KG4FC>kQHSlKOm?OF_RNzNm z#B?zOP-iZw({pC;!UR`jhcCQWKB(Xf(&}Q;YRgi8qMxtfGGIre{-9H5FbKI>lE$>% zWN;@?4D!DJ{!ITi9{Ox4(BMzia_UOYn%MtUEcs^_X3!~{>9Fg+M?ohU?2v~E_t#KY z!zDfv^<;KErg2A%@tpK?rALyB^`XErPzvG5)$h8W5f_1#5gfr7-yFa8Db<HhP3-n^ZGl`!`oSUQ1rglU5vZN--MDAza_9e= zE#`q&ll_h;`nE@T@QcZzHYW6ahYEaMl)URJ`lSDQ!u3k13UcZ1dLqV1f_J4 z>kX!&5vwiI7m5qLZeub5aas)Wb9;MXx74VRvPTl{TK!vn+!Q0<3fkt>`Art| zPh%n9knCX;MZo{RZPS3U7Awtu4)9qp$+ySlheko!?VHITWtaJ(x4!MdZ=8G(_gbam zQ?JQL{!|xkPP#lK;%J)cg*y>fEwXM0Cv;#y`i8@(AKZI4$M$$MEHf0P|GJHd z{;PpC=++6M7^FMV@!7k3n$Bf{b!C9TWkqeL?d>vO@7r@o^&=63d%`G;ln?s8R*6tR zPRmpp{Eod}M z@#);GA_zmm9-k}Z)c>m(55Q?*TbfR>6-5jpUeo)n*9{|GCv5s>Ym}O^@es)$8+En< zNs-o$b+wuA)T-#BTAk7F#~nn!BHP?ryx>hcnjwdxmz4ie2)(Um*IJfp4P8AFL1d~V z4WyC_9qHOwf&IgoXzdz)7lPN*E{cGiPz&+E`5e>O=eLZuIY}*|!4Tg0EK)kmmWW z2@+UqKA6vFAbE;&SL|)0>GAncEHU&_M6GzMZpYBosNdH0(JhH{i&^XyEA1KOLnq=- z6R8HXJ|2Q48#o{~?q~TPH+<7d&YjJmZ4?(7UNk7H4{>X&4!5AqPN407m(!cNgIbMA zb&EDvp&|FeOLH6`*Z3%XaG(vm*zF$D#H_4gmC$T3L$uv;*N^F~i)^;XVlE?z#UR4P z^07PpHG$+GTsb#hiL~p7?(fd8uYVa|f9-;7n#r?@(O><~u->)|4VUJKJ2(@*Zmz-1 zUzo$$0T!@RKNky_%+z~+1-s3H$I!;U8+Cs7umgK~K zh@soghk|_P?LP&I>O4|G?iFF759_N-b0Zyf83%u^*u)-+`$nuYzB94^cRX`-e`f86 z#8vvm!Dzscg1pw%&Mnd2k0C~)XH>pj89`0gvlGb;E5UK*?WzmVeJGEpGdJYyjQ_1$ zF#Kmg6TEJ|G@M4l;wf-h*wU~5BJ|?nXPX)=YC%upCUsIsJ%KCfWy*kAxKI(3in4%c zyaHgftm3>PiGsp=?PGE=(Q(c~Ui~^?$sGER^B23%|5a6?nr;HIkL~pSk zW}9KYgiPuJVB`%SwozfQR^(VNoQk9wiUk1R`TXSD(V=QK3DlCz;|t9k_Xuc5OAC=Q6~|y?a-oK`h{Jyv^kiDbUp41B{CMnjFvB^8#KLLT+m<@1`l@G( zDgIhU7#?=09PN+wvSMSucFrl zp8SVo^Tv5B(wMX@EN(fN(J_ADcN+i*cCGyiV(B$ZF;C*hgSQE&B#!zEN4_w4e2ZKY z`4V}+TJrmEtQJNbi$=O z?g>1&(pFeWkeP@68=QKKH5oUSkZvT)=QqmP^`<}n_pR2GWgt#($Q~6?{WD`W`8oPI zEZrp4E^SV(a$xq>Q(j~hFoCUOVOWaB+hmw0t{4s7kK)sz%_RHM8JCk+G}l{tM8(9Q z1E0>9YMI86Sd^L)C@r!HV8{#4iCT+Vlc{zk*`|*zso7Q6`Ara27y^3yJ(1`IWT#=1 z-tUkwp=`L!=KS4c;t-+;FngHag{?HD-*x$a=ZEJa0*wH0=VR<5(jt&fbUMlQJ~vkN z2c54aEvq^L!U^AYLrQ0sL(8B@|M>oQ$!YYbP$b9jW4h9r_6!BueQ|fdcq~4J0(*{f zMoKQTW4+f&_XpCf6*NC2c`w@1f8pakpJ38PxZWV*S(GuW;ONS$FRD(n^vAifj%{(mDzc6n@H zM+(!Biw@J@KD|gbuFOgL>W8JYOFT5KRH_}IkE z-lpQ*x%{@q0&;dpRLYVY^XnnfdDVAPr6y)!LD4t2Fph?aM;K&I_LVTZJ>tZ7{$+{_ zOFiG>O80po1064|N|JzcW8F0Z5W8_U@X()1-%I^ucw`DsOU2ymCRLU7i^_gw%D80p zQyF}g3b}U=D6E`V+$(rFO*VRL)%KSa-~plF&9YD^vGk!{AdeA*u(8fRO948^>c*$h z9+a>i`Am-3!gf$wA4~@E`}9{c{elS%ZoXcfJ!|IHU?!Ib8|9n%gFn|hEb9ddb|Oxx z*hJ?z?F`;Wz;)Wkz3NTJoDsG!n+7P=MJ%YRK1vSxxQ4|DWn#=MU(}E^t*-J9nI+a* zSBEkGbK3i)n0OS7LM;XIEh(_y`&10u@=LNHTAadbPkco`#-x{S3k8WWvbJ(jy#$oFBi%{QS@Q7yOv)wR5C8v;=L!pVf;;E)-EM z+8TCzdK=0D4{ml3(V&l<6M~c>fet*10hM zUq;zrdl+d<=yTwbTDWR{M+!BB=yGBoX%E~oTS(+s9g*uRHpqxfL{rXLQ@<6^pchHg zenzCWjvJ;=nRgb>z;*3Djq z%`qIPLbt6ZxY4>gha2ZjiEHqWQh0mG7<2RmraVV)^V?tdr~5IwXN!%1vV-@I>@X=t zT`Hv;H9`TOH&Y*)3eDcTCq1Tt1wFUZqtKR-K+MzbXhVoM+2TG?pEpd51kC6|ETAPk z!!vhCW63;aP^He5`*)84%5s(91(NC@02ep(8cJU-$DSCUA>zVZij5R^@SQH0_j<^^ z7lSO?+=16vWT5E{``_Di%A`uR;33q&fLep#q8$BNsB!;%Sewa1gz07_a0`-Jz(Qf&N zxH1dUfxL3Fw?`hQ>U9~F>CLAH->=YyxK4@$U?Xzx(m?lNSCLN7!` za6LcR<5@#5>&v98X}Gz=uny~sF;%@7*Vs&s7f$njpFkRPk8CX zE8#f;MEPt5yw&v+9)n6RZM|N}I7L^h+-R_Om%MY+C|Os;1-i+yEON*!pnreV)uya z=VoNX6H=zm{JwMCgPgAsBI4LWC+iZX6d-X*>J~Xg@|E3x@ETwhFt>(JXF?eXkN3U3 z@-)?GO_gh*w=eqIbX2%jjk?HZx#K7{H`=gS^pf%)WmpNABE>Z$Yu)C55LvdBg(Z6v8?|qi#>Frm&7*sJIEt_f zt&?`gbEi~|b%WJ`U%UycX6#^Tv^;(BgqsaJ`MCHDKBGq%VOaS*=}%*f+*=cCcy{KT(j^y3{q5Gc=!^bF zs*JK^GbLV)IWMQ6Q-5i;Np7dvC~fDLGsKB-+egafE9wGs_+2?SD;Jn?MGrQTN&_06 ze=6&f0p;B<<#Pn;+#bc$8qlR(-dKQkZk^F+Ns|v21}LdOY|=UAqWccz)&qHzg)j7< zvza$pVO+GN?#NAfi-<6F14qHz9T$Ut260AVZbJy`ZhR``3JX) ze~9CRRp!{3zMC_xCDYbmc$4*uAUu156G*>zPJeBz`sDFmnqGj1{hFq6*#%~_d`0F| zQ`=|SITZygVs{@8XTBlF$xCL2mPs9-r*7AKl1L;rrBqOHXVa*cA%KE|_Dx;H$ked4 zDa%Q58fekMktW@pvwOT_Ol9NN@n|G9cCF)#BvU)|SVwj#$uN89orWg8-e;7E7H?Vx zT;BG8ZexyuFGImp@cM5k8Hxfv_XrMmOqEJ)%eJ3<4-n4Rx-qKLJN74K=pA$yz7*?K ztZFmi?!W3W?WoHK5L(TDyx(_oHkuPfm6OuHiOmC{$d7%pO1yFhAt0GxmY#VLc^p9G zlAa_G3Y-eCb*<#~=IN*@F(wR}@m7%`-vpvgY7E7p0Wr2;56QN+6-Go0NDGB(@2{mW zf~=1(iWZZYQfK93#vbr{1+6k4K;2hs$H$iC9KF}gx zh4n*XAzCI6e^Pp~7<#Y+3LBfFxU-ZMQyFMNPn%YjD=Te6`VA*j)@xu#%V3*XW=M#L zUv|cVPDOD?e-B)m2VJ?w_^Mf^9xqb8*^Zq9iocP=jZ)Fe!X9MbOee1nCY_4eB4j{S zIt$Lbtlcd997-AbC(!-o;3NBdm_E08hO^r{m;HAV71T=vQj;M(Q;a6xX{zfhLfq&g z^-!x)<>69sGq~R~sO$vuo^q@Y2uavRA>00Dj#Sw223lL4;N+k=Ei2`}LKFZcV{TOH zTJ71Q#7uL-N$zUZ`Igo=kL0pOgaQy99g)a&$5;w;%m^Ff*Y-zF(sa-Ezz6I~T~22u zdtHTShbX*0;EB&%-|i`BL`@XK(kWh-M~q>c0}rHKw6by{^y;X)1r8wBI0EV!<9{aE zr=M}cfUhxri0m9ieCGaIu!IUPZD;0kC2+oGj7*7|X^CkeszgK0gZP2?zkJcszw|pT zx zNlw@QO5lE|`X?m{)Yh0zBSXv-w4zqzO7V|@vk-G;`0qUqAtxHp#2x)3)BFBOr63fm zRt5S|npV<@hj-WFYhl0{)4&gHQjIW{?>m8?yJ7+t_i6(( zb853Bk|SIFUtAl~{v=E+FjBx!^NPRZHK)f`D&kdPFj)U7inDd@jwfM_Dlf9=Z&)8B zx=~T{#kvYQ&n09GRUP%vngp1C^Cz4d*Sy4J^h<@q%PTPoGGL*_%5(elAKqpsJYTCB zBVDr%U_Va5N!_Sb3$OS%UWoe|XurEFKgPP@s@b=MBL9TD_qTL#ElgsLg=964H>k4p zFKhN5W)X))q)6ty5V`mnQMUL}aclqHw=&|fFN`!!m99V=xoL~Cl?4{t>Q~)FUZ^1# z@o?FOLtL_+`n2f#Nf;aQIg}pvp0tVY@^f?C{qB{ETV!f7U9{+PDCQ0v9DqbYT0*NU zc0BzM_XIieGx{uMP)=6TcPU!@LZ96a-!p}|PXR|o)1?MNYtUe0V@Z$C4PoKjKMZJB zgxKPASs$4QFe^T-6mr;tabmBq5DHAVoD9v)4!*3SU&dbO5r~6+hD{tdUH(GQ1laqm@aA2o<9v%YiYeJtN zzj>UFB(TX&pMw*2X1RQskuA{=mYQ$3H(IMCd@ zTsp4bwg>k^+Odl-Yfknr1VWmfl$&|G2s!55=Z3&6&z$bz3SsqK}45) zLD}>8EQ7kiVP~O?>a4itTkez^y4fr34D>BLm-6-B8%b4JpkJk*Qs?WLZPalT=v!y7 z6?2dgHJY#=ri{(3VJp~!HxuQY^&QSlYi9c&FWJ~2T9Ug`|0&^UmOATV85U4zCW)8QxH7reUd$pAK33X&NFdyK6 zQi-K^FE<`Q`%LkNP{X!IJmZOQwDU$~;c7LE$?@YIs|i2Wcbgq{Mg+~d6R<-poa;+ z#`KD81$xT%3}$JW5Sb%6;=*aDxKROdH7W{w8h2T&9DDqGxkaurnl1^tb+8JQu1UXQ zpOxt_BmNhs{3oGOY<#J&lSTroo~Ndy-RU?^pI$2Qk%Y2V{;GS$HjV(%J&GFaH_0Rgay@7ncB7s?$>mYn-z96|9Il%(XK|~quoFix?GoM zl6+;^ql>7H^=I4}SjPyRh$c^xFPK)~0hziJ6J4~zplE$=y~|g~Y^h2$J&)Y}=tY=2l2gA6UEPw5vXPAkM95NM5ZAAt={uPWZ5FdB5I(3x>ym ze#?iA(t*nMjKaJoM|kIqjxCttGP;mdbha_+;NmMt+~_2&J;?8v7XRvf*qb99?TH6@1($O`;f8Fd8cKD&#bBE{r-Y4GW| zfmA;1ok4yJ^AOE&6kmd4k~v)=RiH{QweUXVkZQm$S|yC{vOFo9@Q%kKol#5bOV|ji z#l-wdFBWkF2!!gE0mswE~HpjCM8c zpU&-Z%+CR5ryvF~`CJ1XQnQ;yl8&!o-%WbHi}sv5sv{ZjFfD$_C5AKMm1k2BVZMX8 zBL+%d&uB8^r*WARXQ^*~{9H|_EVs9c6&fmdIpkL!1RfO4F&8cTd$s&;-r1IAGUL7A zbE#4!un;C5z51&2^R#B3sCgb<^Ho*ZtJCEJWv#rDW8oQAY#t0N zbyjWgG>C!>2TB^rCU4i*MDNY-?tcRcck4a>`1H)4dl*$QE^ucUVQULx`+*G0Yd_&u zajva7&%9SO&?LNgzsr{)N7UGrP!Qe)G(9(Cg$DOiW~7w%Y`V$_bD(wXT33QPd|FrA z7W;*hNH&#{@_7aZ7> zRAKv#E$v63pL8Ptb-Fhj5K#%-S$+^&-$xY8E|9LL=xld3%KsK1{O4+gq>}YE zd1n_+Ettf6)JUz&$;s0|7HmC!zxv}Xs$-p8K}{A=v2iET57ct88)~|+9z{^|6lgG| zKr8rnORkf*HLk(VX-@J^$FX)_x0pJ2cg!B_%96WFb`Yd;itD#>BY(1YUE2|_{;yw< zKU{aylG*k_2h_eO8#+YrpX~+l9r?mmg(t|+v6}SC>s0O%atNUtW%ffbAOQCuxR>u! z?Qv2bkxY<5P@%>S4lbZj!>5&oJ*gU>n!$tRNb$}|5v2*I^H5JdNJ)Xza-;_z%mC{= zpvt@a{=$IE6WsNoMLTH=Pw9}Ph34s>^P*ma?U*LTbk-K0P?|o;Zv19~~ou-$A1H>K_(DBA83m4+&%y_ZUv}5OclU}1h)7vva|?0NM5|QASk$k#{C*C%uY#{K&lpj3EPpAJhZUIP zs;`?xSk=oJH17%o;9bWFa!ZXu8ZZir2jPv<(lC~NL&V3Z?2%=`kB=LN&;B>Xm2WQm z%{9I1C>@Fo6H}Lu%bw+Ohd)=^>bMH2{OTjMIWAccwJGY@T*FYqK&xA`3MfC6SoBXP zXfQ;P)Yzes5B^TbSZ1~LdDG!f2=*G{B#c-de_Dt>fSO;noP&)AkC2$4JLB`V>d7H~ z=9|5pVJ1^4xr~qm^^B^{$mr|7_8;Hl9XNN~wLEVPkG-g_aKWQK_$J91kg70AY{%M( zSlf_9zBctzq~v5jFmtDuKlJ_T^v^xe)`blaIlhWP$x*1Sh+* zifd9(Uhr~jUi0Xfb&lc7;#2|Nbo+VVN_n3@g z&pLSPYPX5{$nRR>g+|xCR&xo(FN5AMX_vkmgNW2LoE&W9gZ@kDvb`va0`Cm905*}h z5#UE1{GKpke%6)6`A-~qCSqK)*FIx_gI#Fe<2ovdT_y$ zYcp1(#C?H6JXNBN410Ku?q@WqFKhxUa4R z47?1VT~48W0PL8W0gt;NyDU`+lD1$9sS4TkD%YnK@^-b7rsEM~-u!>pb1<9YV(d zFYxCwPMnxMZomD$_4f=&e$fPWo*MrqL(No;uko$j@#(_c~Bay^XLJM@~K z7hkYeFKd>GDl+c)@^uQW-~5JL^T>Cv@A^Hg>YFA?0XuaYM?l8npR?+yv#u4g0#>NY&vbJ9sJzMQz5fBtXd zRee8H0;70;*(>@-M;vyGDsnY{x@i1x%53=e{z}KpQ)>{6NTmBN@|LhO*G)}&W-5f{ zsP&u2^+@K<17{q> z&y+BMnP;0!G5+bMeLt{4nR+)~%0w5RYB2k&Y1RC9$Vl{IOO9u@VD+l-ZR^tfWMfJ= z0W;UYcbm*>G%{d3CsS1^Hl=t)7R8qM+EyAAJ6-09L*-x#TV zu6y69HTt(+qdenG2j-OmqO~_igchtb>6T)H_afb5mgfPKZ}O_%S>w*Hh7aB&-J%i9 zDA`>lNY|Z)J9hks%gK`UzqK z_n35krCb!N21S{VEFC=ShzZ(DOAN+&#}?GsGLr+@`5t>uulev1C!c=CxLayIvW)bI zTV7t)S;qOg1qLwbEH^82DjWm=U}Y%8hedV`O$lB3b#lqzgof{qOd*Fw?u?0FOZj%^ z0fihBv6iyY)`#lDVMa#Bcw{C;24wmMhG*^$cZi_4IFp?+95doLagiyZQ_>|BLv-o7)e_L>kOb$5E7a5=OZ{3Lh(RKTey8q-t9B0L|Yh+SPT4aQKQbHX0zvk>1 z^Pgj3{6~BL(vA4fu`vImuEk0)7XQ52|MjN-J+zWO|D67J-mYBycjiaNucUj@N?wD@ zON)PgFZ`PSIrn4s`^>cT+t)8spFd50{P6zW#M|*P$(z@&UcPufI`Zu4li{Jk0dap{ z@8h0F-Cdm>58K;XTSO1;-@AL~_TSC7Zr*6R-q;|#cJ)gA?=>mYR~Bl*mblkBi;C zD<*npRAfYWSSWkP_HA3YY~B>IF*qnNz~7Ix!Pm!oy_cuQI(Ii$CWB6MabD}R#?irk zwVkbvwUs5+!raVsm5H&Dp@F`hE=7l|t);1RvYe^lvty|(wXee$Q5n*ucY|Dt7MHNBdm{r+-4 zYO?K7Q%pdO?>VnCUO^_qmqM=ZdS&w6ZLo1LQG&HB;nF5T7JdTyGnzY+iT5doKe z_0^q#&*QIpZq>cM&xL>Zv#MD*cH)W5s_l=hEZ=tKYckK`L#*EQq??7mo(i`9(7$tS zwiY4SW^!oLt*Y(4LAIZt1#N3P`z6rs%L`Ax@z>h|SATm$+Yi@18(=^E)}~l@$CAIp z_YWp#m6VH?JRjTb8j{vimi2z5m?7D+d-o&3)a_R^pQByx2eY zEurt)veoj^(M6Ob946Bo!b581v9of`y4Y+P=aG#$q_1wFx#`;q#G4GCrL|uG$d~4d|yA$lqd-4EK6zdr$8A5GqqOT|Re`}JLy`vIRj#<($YipnJb1IQ1!V82fZ7!D zY4U;~@3{fVCfa1!z`Nkmr%UypJYhJ^ie)tgYFU%e^>Xw3L#r@$DPgsKBD|;t*-ip4 zzJQJ`hihyYXz-og#RGBLFpo zhtM(92L_18I`e(t1$iQC{M&=2Lx7=Guw-|xd_vectO&n)O4>$TXFA+KYQ%8L6Go6W{TYG#J<6-3$KSoLHf#8`zWO<$7mNuGl>C)%&OJYaZI1_PTB}cgj-M4_290 z7ZzfmGCvb#XU!%wJ>7b1!uB+K^>V6B&&k^bZBH-%Cq!? zXMXx0Y}1$@RL*R0%u_`Uu~aX7VJ*K%=ANp&J9;r&n!MZ z^7lypTdjLu#x(FaKT7nqFLq;6#33*Ec?a zLwRr$<0nN3Jz>u88{M)#DzNnnhN5?yuI}-s3&0=><9Lcdy0AqEM(x^ zB`61de(LxOHn41Xxu%@OnOu+2U$&7tE1nG{1hCvNtd@2I$LT^=QMJN_kFJhWOhuTm zP1W>ct#dRxRV(F{I1Sx;{tq$p=57qtt}2gmi6gf&Baiytqto&E^pT9m=d`|fWLek6 z_{xZASfdkdQp^5?kC&e+WDFOPYa@!|hJ)&0#x9!oV=x|)0R<0MS9z{5^KkPZMdO!; z-EF_JvT8l=g%3FAg0jO)tIqi&Z(UHoq!*&^p<^Qd5EUU2l)YUai2D4a+jVs2cs`li zmlk70^57!#`JT&jHjlN`a*t;^zV~vZ6%kk^C-=@Utq=VDAgHY5l#?D7B%JR(_VThk zB}Cc&OGJKTQKM$Av-UH`gMKY|ZP$m%W zC-9PQw2DFRhzkihKU009BFG>?-)GAJX=BB(qD}JJo^8Bl=Q+{)B4bv&a~f?#b01gc zq`e^E^Y@J+KMLSQ%+~Y}<~%Z|9~r8E$sZUixtC;cElPE(c3?xdnH5KF{YN-%SQv8G z?&jW|D(BDalk0rCJpSRvU%NiU?a20Vo1DAe{9`!br~KCS1Z8W1+4_VR?fJGg=Ttq= zMrV$E{%c(8G9q{+CvCN5p=EvB1%!A1?mYVo`gKgXa^UT~g3=xbzY|v7h{JPO9m6#M zPt9@vgigKG=LJmJ_WAW4l~dxZJ>4~MP#l>ND*xsRq;h=s<}4KH&X8*Rn%Yl&%j`K##N=9mh~%94|bxwk6Ow@s96Zd02sIF@CA& z$g7%1T1Wdkpz+827l9GFKabhkr#&hg9iBKNrr*TPeU7ZXTWj(;0;u0Vv-jpy82V>h zk7HF!^XuUvupoWeYOAw#3D3%P(^h|&)>*8j9SEYi7OVVxy($MPkIFBN_zcyx2Xo~> zG@E?eSI9#Hgp>6CUxq&854B(E0iF@(;bpXk1gyB$t)K-P_AWZ~{q87I9qhrLTF=_m zuME~`ke_;jsjCBZa_lulL*}EdkkcL&uS$t(G6gh?m4a^68{#@~N+l#3y{Iv+oDxm9 zdq0c{ESgnbW7LYuGAXCw9%9!Ct5qi&jZnlwOf*+2$O$j`+E6zZfY$xJ5oQKVG#z>Jf3S7dAQQiLR68Q>gsh*vhL! z?`4l48y?>~>QmFAltvv^)uSSl?zE35%rNEZbRyLXL`chLM@d|Mt{kTUqx16u+f}^d zWVkL6pNHvt)t($D6`q?KFZ7&pB zh#&Xd1#M_V!l>3yb{-}KMnCxyd&v*ul?oL-(L@eJGVXPT+leMGuL7k_0V zH`$*-?bBB1f0jeCW2IL{jA0b03pFKNuG%R-x`T1m^CjA!QwseVRW)pQ+FwJ!eCy3=9S!U#A152uo{_|(DFO?MyC5iD2ma}TIe5ALSm))2#2 zC+1otqP2yYv5kc?KUO;I7J7HWuf^4&pZ> z@WxULWB!g^f`asMTrYQ*Ut-+o(*sFKP+S-370WP<3$BmOPLl&Q-WsfD!E{s6He#3o z8y3I;#1nZpxrRIW2o)+)woYL|2{0vQrL>}A*!fGssLobM_1T^bdN{`)2s;J~C+FU$ z!kR}&UXs+bR@6Rjx;Frd>=ZVyMtQNh$>U&Y_{KyE6cn;AqYCLbVsM`fetHP{Hyeb{ zqs{29ITZXxHqMm>v;zf}V77}Pe#{0rXjH(lf|nH(rwxD|Wyuk@NN@m3OhRsa>nlf0 z$qhpxB;XoxddMwOxd81KZPc$I4_k&CZs3<3%~00Gq3`fNzYxc2432rwZ zF(TNPLBYvzA(8-W7v`MifJTynj7Bty##-VYietc%1;%~aRpm>p9G#0K zxBw!iA-zPTd?7s1A0X1;!2tAJh&)Wrh&Bc;Np@p5_R<0M0(p%~juW zm2cR}=l;A<9y^orO94D4!R!~8a40xesz+p}k~)>Yn*#l)BQd4mZZhtIE^dgAG)n|G zcg5s5l$QxWQ>ot4N&7wHz^aUc`eJBiMAlS_D-*&E#Hb2~%0rXs$vkY;2ZNm~gqaSV zL?!4+06XBX(T%X!7;B4xpmHfrjRSc|PU6?-0Um zh)3V=Q5Nx`J(DOqRy2x#0t%Nm7Gmo7kd_or{!|y|57>^7uBoCJ!n(Z_JW(Ik@UeDx zX|8@DY!F@925j%4p0EV*C)o&Z2{;N=C07$the#)-XT}_i)A*nY8FoiaV{anbn;n(L zsDU_K46OoIXhrxLQDWot~EM9`IKB*TJ2g08R&mCM){s@h;S;{6aA zY}|vqWw)waiq@y$h;}e@9gLy)oXf7fv_|A-5d?~BFDWUDs7^_Pv^7NVG#~a$!6%po zJ?Gcz5`lM{;$>8Hj+=v9@#e(Sz zz}0M6F8TTp-`A-DV-FZw8**I5_)&7*t_8$u&IU6{#X1h`wR_BdIxyt0rS20B#oy+1 zN8Y+E^EWLiGQ{wy)s=%vpsp~pd^MisrI=w9ZbLOX9)|K@!|gfXgoy&24|P@(mfSa7 z-+Vbn0@fHHwFH6efm>Eca5&o7rUzyu0yh`RBchGIdqK(Euqrh`od_7K>E>EmqrHsJ z4dYh}WlMm1t3>o~;t)k=)fGGlO6YF05vOk(Z!|feJ1#rP+A}HdfLTuO`E7%V8n_S-C2t?RwDKyHe zy^xLnEQY195xq26-E#x`!yw4rzo!C<-f39Ab59=q!RkZ{IT5JBg0OD5Fe)LDk2q5Z zOWuVr6j$sWU+2TZfJD&G0kcbR^=HW6d)Me3O|*FV5d3`;6HLQLryjHsAbkV`_~W|$ zY@8>MdXj@K;bM0I&B+v~M+!Q1D-%r>=G`%HE>@cl{2iDTl^|AqD!-b*5#&A2H%IJ^rd?Dy^ZZ7Wc5wf_YqtBzD)H+;ro>+ z{VebP@3H-=S^dB2`!!no7pMBQVPeos{CvGQwxMUXNIX+7mOd7Lof1#s2R@k&eDof8 zA3HEnG%#L2AbC9SdTQV$e(<^J;E4C&)7Zh`qQSxXLGj~3>iD1;Y{-N%WVp;2(hD2X z$r{qC9#U@|QW+mogbkA@!?KKFeAqB1YZzHQ3~wC<#)lWdCkr}He$t=JhCZ3*J^5Po zzN(csey5*UGqCjbb(6dpoDW)}lioRPxfK1&f$TnylaFj+qK7ZK(n z9(87eCw=@PR%F zd_pAC!j?^EE8V-Ic!Y~+k-}|RGR|UTu_hj%qWhM)xN0K4fCv{C_if_>Ei7Smk61_veQaniAG<~H^dRk3wGbiCek(CW4Qt{r^pZ}$8tJB@FZ%Rhh){7a;4Xa8 zNyHs6!x}lin=mCfieAQw;U*wTRtsN9e#bWNQ(}Q1ivjnqvgv%hgoqCTQ17@(1HFo+ zqLCIND$_nLMclKOH|= zadxum^<;%JdaVe1XRZAHK1C%yddv)q7LQc((W?OD9+nK1g}o#Gdg z=R03NKhT=$lmTQ#2ul&xcHq<2Q0U9rkt3SWHa5DL4Xq_2R&l4E_kDRS^Yz8+FK@nn z9*h6l;{dxUu{_3|s@!#gZ!f{00 z2VX3buQ3;kE|S6{`S1KnQEvdaGg~$gK-Tqsnu`So`Pg{QL|`cB&P5K0uzNUoE1fUb z$MCj9MEtUNx;IoD6biD1xIhl}av#ZDR{fCxbOcl&oc7sYoXM4k|r$wyJAzY9Tl zpb+QGe(!#8)_)8+NBa@{jl^13bC;s>*vP`KKSEp-l{nbB*WXu7|F}kf;db!H&VGeH z5%!T})^cpFE)jKsj7lK>jB@$u-GbdJLf#?6W6ghN?NF%aBJakdor#1!59U2Xfle7L zj)*b))|Yw^^@tB(#5nO+*>@b2Kz5<}FVgvg3so))mk%yn+^|q9`&;}P7bV0AXb1(` z_d^@{(z(dJ0Qv+6Bg>JkXURASQEe`N9v=MD{oqe~!k?~de|p~h8IoP>bwTe1fVpMi zZ>={^ONqEH8Ei2ho=!xp|MqzzVd8zQ(BD@N5Vr)Y zz(jeEU|6L`f0r^JjBa`KX`-<=6buI;8-~8lLP(69?-InVg zwgd~!&*$lHc{;U;j}*5**Ed9MZr1ATIKSoD)h;MAE%&J0+xXGH4)NR%fA4iYDMQUS$7YAFJ0Vg7g|7NPhA(-$r3Rh26#C=I@vXV3 z!Q~O>e>~;KK1_YK3kLfiR^0{21PXyuz(1_|GDgEgC}_z>%bRTN5>_#D;6`i5IUlS3 z536o3-eCaKKIDBm2~g}jY7}tE=3~jJV_pX6v-BizQfE+KldaskPG)JeGDtkKQQ3H zaeI3`<^Xzul;PI<;hDNVc=G1Vrt2|_P$pSG{pr;w)P}9{TNqQwZ9U5-Rvnsi(a~mQ zE?g*gl^(kpVLSDKeifAy7TCL7HCvJmyy?lfc8oJ!_ujPsYO<3}t+e&PBx;wlQOATx zeK$IgMnaCB7}z!wH?cXvZY!Jbh`vZKI?#pJ<7LBRk_UB$|GeFrr4+|!xtLN@S*y`L zEvL6{GNlmBtkLDL0-KpE7HL915MpQ(#lJR8)vA6tP@L9KHeFfT)wT)5A9J z5n;b&Qx2MGl%l~{Gy*@+QfmJ8&{nNvBm9aSkTq_0rn`t0$R9c%&R~9p&xvOUNbS9vB6}80&1- zp98*cPw7zW6>{5%4ol2JO1KAGQc059s@DRN%QN)%lscX+6cXWvjf}^DmZHjm5;gS2&ni}jt!-)LHKO+;f zDH~58786fG0(W_J2byau{L9Pl{l>q_+;H~wU!D}9f3;fr4nwS5v)t%sVzgn6GwbP= zYkG$FkjKA|w0$xo4txuum=@o%6L|~y_I|aAH8-%OR=i)W}VHoF$EY%1PZ2c1j zjeT{-jVkoBFdF{3!@Jy`O%rNz{y>p}1mlVZY)RMoI8&jHS46ep&@j&c0~Mkg9=gB) z5afKJj7mi^tg$=UHEd)-c$eB!p1bW;KhoW9k^BOwjyH9f?2YzvKRb<=)oZ~H7rdou zh1BPIGd0(IbSJO#B-+25*0%F=)wd!ee{X7+X_9i0_0;7YpA<4Ic%G)j*~5?37=wrc zy)_#e3xUA#q?5Y~O!-uVzK00DLvR{3%&yJ-G@(o(XH@_n_)j299fr6S<@jl!R?Nm< z%78ucA4Fkh>(2k>kfYZjhUslB)4epW=o`v}YcvUfR`N&YRcdEdR)LDL7{JwrZOHR> z3-I;fE0zfmV1}hmlLs@Ho=b&A(=-{P4%)uAT)7A^Cp_rP9GL~fJJB@*>|w~`@*7M1 z!_Y@7a;$%QjkK!G2@8Dc!<2hQIvnR3_{H@RhU-TkZJuka=&g@h-80&kId@$^xDvf? z{qw<7b4_(VS9WdedH(eF+znyzmDru@Up!xaK6kUZ_ey+v&x_X!bGJl zHh1}4O*+x@^1b8Fzs1E@Q!cE3^=b3Z+atYK({7!9z6Kvg9+=MuGjXyiEFB2m@({j@ zpa1GT0Jzu};IxR_Usmg&;dBvA)FQ+CQ+5BwyA~XBJZqcHxOS2UqA@SgPLR+YswFU9z2wgI{ahKSHTR$^4}=fo z7~=t~(Vug8#j|FBP+HxMkuFZ;_xCg(V{BT7awr|E+cr7mWK`5}`T)65vW6$~DAd+S{!5 z>yd60l_K=&@)7*9K%}`;igib~5&Ok<(*Hw_>bmGs1Sds}cSPDJnFv0J9`Tv{u@m6((9%OXf4cyUWGcTBsqt100B zb6H>VpMNp&?O$cxgBSv>@*LKr=@g#pUMcHZQ)JAOV%T!TqWXYdfZH({Syxf_(YIAQ zQeJCKG?DLoTJ8!5x|eZTo1AQSfX;s(tr8K_3z(0DuvOgg>$aV z98xU)Nrb<8XoaDUm$~4_j}6}EePYgC4YF~EVe-$S|9tR~k7p3RhRRzHF0 zm`o7m+GzD{{R8kkuCLmMHmPb64|#6d-53Afej0{N-Df$MXhpdd!t*sS)OgRnnV2gw zh!LJonhNEa3e=#efuF6mua0b)z0k!>&0VauT@Lk!tjkEK52A>ScW)F@eW6<43f_^l z{4;u{i5c&aH;mDtL+zM4Ko@2O2OH$+T-!i~Kdiy728ojd_y zAy3*Q``gosc|VFuEahl>?s zY)T23eU-~`a!p#%QuKQBfv{2)zRbih-7v+U?;=+z@zlPcG|PJsO-O_ozYB~FOtdqk zk1u>MA82=GY)UyxhvvVWdwzIrYYt{3|9}|8W{(COmyHZVAbpC+hd(!->S4JU)J2Q+ zCMY#X%cZScy3%Oi0U}1vN)GNA!epo1qb7=scftW9Ra`%eeD$zVg2`(~wD#Sdr80Or$w-_9^zlWxv*D^+_Eah^ z2kHPe=f$8Kxm9DcippaZS3Ef4fi-I35$fJz{T)4AVkI?-Rn-Vs2-|C+AupAx1FYRu zFs9JDrnsvb5i{Fu@SY3mD!HPSGq(aETxkD!4)ke+-kZ^y3npo=&-Y84bct0LEDL16y^C)hIqJK4~QbVJdU#r56P3SL~GH$t}FrDc(~*Ui)3ko zo8Wtp$OCkY>)8pIhi-wzFuizx22I^?W=zqE14FYeK!MwF80 zeA@}NZpawNIBZ-%k3ye3j~eFm95kY%FHYvm$5OM+t0%HT8<_It^UH^CheGgfjRFhT zWT(v@68JMy52%Bct4pkc>L&;eIrTfxsA4211 ze1YUH#U?a zPI3AbIT}L#sSZ>W%~VtdKJ4vxPTjf!+SQes6c@*K#lC$o0w(-X9!a{OZf-yMFfP;}6cifAw=^ zngl4Hj|_E3{l2a?m-{WzS}(^`cHN{AwD<*9A&#nZ_PJJ%LfSz}`_vQQ7scFQC9%@HO0iR~clZHNC#hK|mR<x)0{9pBJn!i`g(WX$euJ^Y{X--9^Bb4Hf~)mzGeJo17w} zj}q-7KE0xan0JuMRZyB|-bGY%HHHPSWir!r?$tLkhmNf>DriGBz<2=rjrsgKRU`Hx za|KB5!aP!EX@I*s`y?*%sVLoKMvOMXyDFqo5z1LoS&S$%_zxy(S+sRlRsP9+e>z?i$4RxGX7>q;zfx*aKT5{X>uf9N~*$)XrwYXPE{D4PeP4`i> zgKuNfIL>ankBztMFCx14wB90k7~r8vS@(|@sq#5d4@31x9l!Gn;`0>%O+qkF?hKLog)m!`LGgT!r)Gb^Oy|>x5o#>?&JK(jDfI(KD`Gua0 zZG4-%U#l-TUd&m)oDh` zr^?k}87i)l5ewMXkMvSlDwoILoSOLS1j;i^i@sPSaAzEya^Twqa};=riCq+ywzjuk z_XfjbF)WagQ}Dr^L{4ECVjH+b`Cvg7&kkYM#-my5mAAX4Z2iP{fp1-A6$)UsOdtsw zpnY~}GR@ZiYxAF(4cI=-2v`OrekzADs!JZDYfl|x)k1SeTR1RVyPyU_DY-?(M&fnU zrJX3CBk}tacQc?VM`G%_lmJ%a)ur!6@Ew7n2;0iy7ln%2-qU>KU{WsIg(N=xk}HeR z&2jXm2?9Kq>YJF>ii(N57_X*I^{R|7$xqPR%G)R0c9O3@#s_;x5BRR7?~=m`bposD zknZrtd+6@6M#x^wvS#Lc4E7S5qEm7Z$izqOWZ<@@np)>R%mUVls%dYGrL55G+286EAGp>m; zKhF7(^vO*{H+NJCFQX3S#EE6}EO~q)rGNt?>6yapnfvCG+>nML4c$AdEbp>hHo0yO zep0JCJn*+ONv~%wGzOeCjX}G1>-~Ny=~msx`pLIQBe%38_{PuYmDLqyL55dNvyv@{ zOH86Kvc(qk-`?-mGBs<+-OfE|PDhdK86E5AHz)3u>Y>yoXh1%{%OZ`Pc`(=X!o z3?>!mRr-=oIjkTOI@iV~RINW+EB$rN8aHB<>Y_E8cp#A{yPbCcBL|aeG&&zO)xmsN z)1_lKK(Nh_s5Wx6JQu2@F4Y6v9-Qrj%a`U{2P>ciyNfx63M&W4<&A zQZ^afDks%pAD)>hnMC$zOUt9^K8YUh;3@#&!~9& z0n0;7*jw+x5`AyFVvL8syZck(3mw<(%3uc&&CP~y9m9KRblFt!&uHhpXBthSF#put zoLs$~!fu9Lp1|OEg#3d#SGkULL{w})S(957!IQTJ*SmtkHSjATVm`syTC{!XJ7Z8?<=g&bfVq)5Z$0E{=1RrrngdtSlu` z1RDMkX>wb~v=!}&p0(*#Q_{=Y!D*+Mbwx1#u(RM2n$HxxMCJ8G{wkw9%1%iXpeIMm zXSG7>A`7xqYPv4TnQs$4wozddjMO9mVJU!0^UONnYx-H+kt}qwAUqbAgx+bA1*FVV z^xvlyc&B6|Hljn_PJxiZR<=dg50vd7wP!T)zv!ay3tLM0X;~`^)8N)0nX5_UF~E>Z zQ*-8m@6~Fw8B&_7vd4}~u`oqL7QuarjY9F|=uLbPO5v%b4<9O@!p<^u=MNs8g{yj1 z@MPEg`3v+2gR4ZlyVxI=BV`Dn@^H(uc^pu|s7h6>z2HX3#kZN7)$qsDT$QVZ!>ckb zU3TjTz}C-$sir(3Dp5oT)`(p2q5!VZS@61ZOdfPz`*TR>33bzB=mNnqR<(;^SKELj zd52x znMmfQFyCh?O#Syrm+#HS6TMSWYkrT4kKAm!;PYkImfz1u`flF5)%zuW@9!59nOn`B zgk1+Ubk+PlZYdx`!JR5Ew2=}}`8E;am4_-iQxU5QzN`Qs0W1RDL93rGVY4Y%C8FKk zH&S>SbPf!eM>!mzhU;4|;W^1% zbG9`@%w^}W->li-`s|MA5Zz`UxdmW4%#jbV$>g_p=kiCg!7R*O5QJa&4N15^*`oc= zlD;_tQ%BNyA-XCV_8m(5WR5)e{9HQ+oq@hfBq-a^$StB)r6Uc8xpzdC00N!ki5LXOvb@;%yD6l}BDiNon`7&K;dmXuH5k#1PAG^d) zK|BL0xTv1@vZ(_21QGU#e6aJqtdbCA#fR&8$b;bjtRXoAdsh(H$^Y9LQd`av_t)u< z|4lZD-{^Rj&GmArg}UoPy`W&5?#9TL!t!Vc7~JVub!{i?RI~~$=7L|b zJjzHd9KMCVNrggl+ALPK11~M53LXWGwfktWGWfYdAm^Coq9>z=pY6VBzs;XdUg?r{ zZzw8)?NL+Xb&$!@xLDm)g_hOutdj@p&7Tw=tq(jkPApVBbh^x`>W6m`@+P{|CVaHy z1iEw0Vrsz({wq7&X65NP=Gk?U=cQ#9Xx+PUz4N9hf!(CV!)x)Eun`J^no-3@s8j&> zu-ZT8EoxxpEF+pbe3C=Fm)}Nr{(Nv?abM)}v(|(bW*tOTcu(7whwtsUwr>96p`VAB zV*L>q*{T!7%n>KvV-n2vC^A*9ZiPfLz`OP8!T)?m%Wtw55(&#|n=r^U_A^;CZ6_Yf zWyq$*6)-9&J!85$HjG8`jZvUuRHdaXeH}aKF=9V8XSkzH&lc6vHvR3|enK6=8mE8U!+k{e z)QZSHv4od&(^MfU3!15NKU|SPNjXDzBMOK$P^i2}rz7<{lp;eN7;)i!9rn>cnURbc zT9!OkJod+O3K0k9tk$A`qDlKJgBFLjxwq9n=et<;)?A|JisjzXMG8rL_y(c}F_Yvm zQ$l%;{w-^#LgZJ4=WZABpjM+4?hQ;RyBc*{M(>NCsgvGe_$H&$4kDA)>Ce?D=d?Fq zF}y?fVR7U6jE@bh5sr2FUO(*}Y^r-61RueGr#9vA_M&bGDVQKuvKWQ#zFn#(-ZrsC zTeU9K%|OutI;m(_!IiT(p+Ac|3fq>b#L!aL>p?zW2+LRLi56n?EguZ?^y=869(Ti( zYCeSC&pt=buj^49F!#|Ffkxg|r5l+}j82fDkg?J_6zILujj>Pe7JW%W9E3q>FQ?>D zot-CMsO=!~yr5yZ_1S2zdOry%j9lLS6m84n52E(?JUN4|67UGEU5r}{y{!Z7n37n3 zKdy331OAvyLl>kUEMA0A3%)hrtIt~jHR^9pDj^K{i`N#+mTT~}tKKoewL=LSF`!y~ zxSvZH--#uMJ|?}gZ7HP6OKHElO{WfWj4wt6>NH4QM0iUKxVoUBgYtfDpop+z>l-{4 zDF?n99=r1(2ZcGZMNaOxEpe5?q>;fY^ivrtKusb6Hri)f%-kZ%s2RgIe(Ex?;S!x= zxiL#4A}fCBxg4jr(78*Gw_2558IQ5hIX(XnnsEn^J2jAB{>ukIa5Y;O z^XH0mjzCig2W6krAd6nL;1Ru0`;pC9=N+r#MMf!7|M$- z9i$XZ*cS?&`-~#xd@ob*0#yHs#bib|6v=ut=p19S8190rplcxyXAFQg7fW?K!jM*u z=*aDiLQ)+Qzjw2T$%XUY`j16s$_*6eg5fezV>m`fSK@^+2qM0!)000{sGF9Ph}Z)| zq4g#D?#=5I4Wk8cpF18bu9Aku`(3d#3o9>GuN!XYjwN6e0q0Xrx_I7Q3c8PKH@McklkoQiK3 zdu83aGPHEE;NC69 zS8Th`wVZ4MkzJmml8t(OgJS6+I;EoJi!z!nuvuXY-=!9$Js<-cgcTb+SXsys<+o(N zY(P5%X-A4Fg~_@q^?KCP4{KcXOvy&Ob@>;lCn4ouk_j5;l4{1+5#;JxF}p_^84Fx^ z$DxzUH%|-bm=H1QPv`{xCi>gyhj%fn@Nd!eLEmkZ0^Y0*&!_;&S(vMQ?>A1_=y2lEk{1Tf^a%R{1-C4L_+|8=m@&6xz`Fu?} z{rlxd-&?nz^?pse^ZS+b$gR5{e7 z56XSgyfrUh_6bF+lW2(nuGxy;k7N+`3Aj9RE3u}a1(L*Zp^rLf)G`ld?rS-dwnkSC zM-#b>=o~uuk*g6BEpkyKLdS2tfbHcwsH#+P_s!FgWFxpjnigaue4$FEt&Ec4!NO|g zbat*BnwNW!OxD~JlCI@%`Q5HdpkbN8G*$~e;?yo8M$G5qUJJi!=(T>n%+6I{=zKqz z6DnKJ<>8ii2$T931ibJUJcNGeJ`R#ERe^xC*NLgRufIjHI$&55()wkU9L%$0%yPQK zZl0!k-lzcQ!CN@F+0S->^6@43UT?DOZ7JxuOM=&Zx%Ou^`&O+&@btWgLOU#z@8GZ`{))LfhFa#r zbXv`c@Maxog}6g|kHvR)uEh^Z@UVf*WtxoOLp%~d6+Q!W$cSYss33qZld;Vllr#-> zk(?Z|(!(f0rmsLTAz~&9+bl?S1b_!WW%&T?dlYb+nlS~)*ggY7CGgqfC|OAcK?*;% zF2Rz8O6-&gk!H?CLEQqlxd^F}o`57HoB`z6GsXW6-CS0nTj76%Zd(7^REu7W86Nq6 zczYA4Ci6GS_szbCH(?8#Bq6K10tfL21Er#J0Kz=OEw?~NLW8Yuyxl>bft7dM^zmR&Xa=zz$&Ut9`n^i$U z#g5U5w5aIXAiU+&+oQMYO<~@jWaAiOw8_jf?nrPs5tT>O*RPA(i;AAVBdGE7Jzfab0VXTX@@8OGnBa;L5=EG(gy7ZxPKYgH-l#^5$>U?P}4Z=aym;zfoJp z=?quj+E39gtg46Pr4g#(@T$=C;u?TNwrp+JmB(W zZ$rjw>Euw}ngZ0Id#p`w%0Culj~{bo$=GI*e${n@5g|uZ(w0c^U%42|?m*trAZHJ= zh+`DxaP2*)mVZKq!91bh{Ip8Cgnvw8<)TmM$ErVB`$cl2i+J2_+`@o( zq`O{?xkXsIZD}(3ym$#`p2}NdP5e5@h}@ZOMwVhS)qVrW(>M069Bi)N48Oix{lc6; z%6p=MS#6!}6u3HP;4Jye=?F^PF(mWBB-7Bx?rQKkmyE!s-Eo8!qm-iwequ?Ag2W&kgd^RTaJTESKfoFlT=`+Q7ot zJfm4)IL>n;YUV{5?{fC4YG!9(Lj&nhxKoF$V$!7y^}6Q|Mj|(&kxDF9mf1Wg@Q|JM zg*q#^_73UcWg#lGvqH0~cMlluNcHi+Ni$h+pdmmLb4{AJ74Wj z{6@!FJb1wIXt%&SHltVUK>Ei~kyKUyA~0AJP(7Qpz^vl3rf-0ZmEgtrm>SomH^Nd| z|ELDmqPMe;T6gCvgxCy#4oCs{8!&ss<3ef9QtJYK((zr?(?3rrw%~>&w7j<%m*A6J zo3zG)MaN)Hui+3Tt7`a*tj%53lj@JB#PHMcOPP=vx3Se0O+?tdUa|dQL5ltHR+yvS z{8CZ(RUFbWJIa9)VUiDbuz)G?oj6Okl!ZfV6uiNi$Kc?>)9CfE5IrnS=Sd&RM!xuSy4)pM4~3BAASl{USrUcQ2C zK9n{v(ieys(5U%4FH4=Y+;QD3%hvwP;fpq&Z z3fgvs;{l5$!-laC3Vim&JBtm^XymVaq+8@HskNAfv@|I$hTo=@MKY-rSo_Uz>6FY@ zMSJo7eE|_o+a*-PAmc)~i`wjsDQTp6_jXvs3~o*6QsFH0GK&!b(u1;)v?cQ&-CxGs z1UY~=saeqXnqB-B7)~pOT7S@NDP@SUVRL#MQtDs}M~;&+du60#cDax`X0>@9ias<8 zm#kqyjx~k2@wL0=$!V1F0@hPcgH*_*Vr`V%F$B4qH%vusW6lTM)_nCB7#yxBb}-|d zYX(s+jx82QH;s`XXbnTBvWl7ZYUzcebhH_$omFIn4Y;U?Ck-4sDWo!|a}~C^=@K-K zBunfvIHw5!+xN`fNACRR-3y~c_rPvSjQJ$R6&A>>4mC@)G8e1c`uTXW-^Yw$^YcW+ zySGYJap)WenfVXwizeSUfoP>JG6+zi#w{~S*ed<@+*f#C8bZ$8>MJH1FXRdZJ2KQ* zKZAvh5*rTU(EtGN6%Pt6(7=uY6@DeNAVZ0-WBxJ&!1@GvW{HMnZryBvIW8kks9;x6 zL~{YephRC1{4yiNTB~rO3trlZm>??aAfEB6{Q||vS zVHXAznLW9t|EVWeJ~JzZ(Y5}+tfkC+yhWniQrHLF=HxT(mT_rI&V)|qERmxf1e?dY zhK@NeIFgcbx-Z~))JAw<>jK$t7C0z%XV~O++}a~CY?_%K@86F@I7YLR!t{5QK_wSiw)+{;}H)<0LS`GZN_-#fN1 zJbL4po=(&EJeO(cy8Ty0I?HWGu6ge`DI$^WJLlv+YvIf5Nw!f8)9InMT4!nJ`c@mo zA8B&P_4z+88|UnXm7yj!?3<`16Suuu*BMEJeqJjKhk8!kVMhy(3mi?u+w?AL0~?g7 z-xrQs5Xj!^gd9{ov)c~Zck&4%T@J6dj$s7e$g%SpzXwJ;-c(Ae)cR32a<`gD;wdCl z=QG(H(De*+y8y5_Z@V^<)TFt^L9W)y>uRZ)`hW|q5^T&Y!9VwG=>;!%9EZ4!mKsDz z-B<%=ISo)C4+uEyS=2nU&f6mZr1{K232P=(tz*AxW{{X*oH_Cnc@1leL%%$SIK^&U zuJ;e*jo$;7u)fvKPZslRI7O>Fxhe-ZDH}o7(q#3{~#v_9;{?YAq}tt(5%#aMc=E^@q0-z)7M|ljMt>cPrLAGI zS?+IhhNA^9c`Qp3et>GDFvon*0IqTp=hQJr- z-zX&!8Db?e(yepfzs!05QS@h0{pY{1GZxH)s&2VYY}}#{j!P4>AF)LnQB@I=YqUT$ z&KtCjoxyWMkPU6OAQu+8t_Gz#Dw;W;RRiz=yI4cd^mwGSDq0+W{B6%3bUN;W-TT?s zF$0ZwsXWn%wPI;|%~J<)R`=3}TIvHl zMn$*~9ca~F8(ht@@x96qpA^Xu4~$D(gQY=Nw<*0uELi-=^BOteFY_kSh{2L$Hqh$B zP8slT^}V1!4T@*xY+3wcP52?Bght-Tb#LN8bdAa^DjU5lsaMjdS}5;wqn!~Q;8>-> zC^kIk{w_50Orn(4os(xreeRUdyvsY4orkSkegiMB_UiR_Ia?=x$g1Ca>netJ^G+`q zG+2|SU`wn&mXU?Jy~Gwal;6sa$LE!=2b$rFVtRqbli(YGP3_Me=J1&&d|Q)V@ay@IHDzv%Plg+_> znL;ALJrV6_@n~A*J5pAV8G?UYd-lMVE(3{CVDT0ys-7YJSm&4(ys*+D^r?@5=d--`K zn_wVKoq%|uS(T~e7TEr2fb8*E=_)*qnXnhTZ}NcB;L94WsS`>vg|=nC1m2PJ zuspQqFzdVGRI8sX{Etk`kxWSF=0i^Da7}%8x|(GJ83jNgI=M+^-(ehs#vezQZFX%q z2XnUa7|lt%p^+pPsx#EiwpixDwwMjV!l#(%5u(Uf+sz?my|PT$()C85u;j|CNIMf_&D z+53j8yNL>w+=;=4ZT{^-SDj^ZDL(DS^Zy-B&MfR|yL9f0rgp9TF-E!9b#vap)b5=> zo>MI@^+qlFP=D~pxQA)+rQ6E}KJ2~n;{~(!QvZfU9}hhJ@iO?{rGf1OACG+h@rq?} zSzqD%ODRQV8!3_vZ31C9)idV-@vVivQ&41z6X{BDg=b1aZfRqWRj!c5M5fo2!eKb; zV8o*c;%CQ6j+HhOfXG9Jn&_8HSGN{q1Y{vMp!rkBc=3y$I(f-$A4i@ z9z#PYDQS|-Pg3hGXaqwFL2wHo<1>8m!m-_zeGXbw(sYmKRpBmyl15oK0-bOnK?h)B zYoDLb-+w^D@q3T%IfDtsX#Rz?v^HQ4Pc+>jA@(tsBUcA911ZGFL9F>bvrlqujEjVO^V za;GN0O@#^<{pJrU)uwzAu%)c(u)nnxCNp zPMQTG6*dQrn5{&uI)&c{Ai8aFgBpZFRgfvloe{vW;_Yc_D4l{&qrw*7!se=X5R4XP zb%n{u_HY>z^|Gh$#GE#oPkdvzax~DgF^!hFe#*Oqv?Tm2`3j7f}$o#h=K=`(@&;JEC z$$DKHH^XhyZy?3USq!-HeqUHwrj=}TU zoR~GSM?x>Z?rh`j<(4$lhvE!_oCyD{g~9)fD#_`&zJ-bOvd7oGmTkGrjEue@yH=ll z%)x35BthlA2i(%phU?x7cOMgSvmR6dl4-gATTVy zR=49HV9VWH-;h5=J+I^~;G8S~nJ@k#D@rosy*wAV-idP*nX`w4zTfw7zeJl@9XI#E zBZ#i28=77?*KlEJVF^Et$Zu~vemd2|M|JxemZ?7UGIR9Zb*!uK4FartsO?}n>gR{r zprdvSx&8FQJyL5Q{a8JQpE`Og{AZ(w9-^}vuVvJQ=nnJRe+Edob{S1|;Rl5*XoTyR ztx9j`=aI#mOmQ@+C^jTeinfmapbrd6AC{n9l136L^E)#IwT!qrt$o-NEw36Ep})ml zn-N%vT419?`9I->ko@Ak$qBW~8IWpv*sMV5e4fI1$Cfp-Rc^fka{Q(p@vvc8WO4z0 zL(Hzg?d!r6u7x=V4%Q4%+n%xsrBer+=)Oy^aH5@91p@(SJCmDy>5{JUb3V>mIUiA${sj z#=07-$wBFAfi!h-RA>EFa8j5R(ZTuj*RKl;P0IHyR;D{_<04-Z+igwaH& zcZ%DimxJIx;U0N^+_R_fL;_c_=UaE5``+p6cmeIo@^DS+z~vlUy#w2~l1pN!`fl~(4W1}ZsE-xT2!K14viTPiPNzwyWoL9Qy*7c>UgGs+uG zcoqz~q^+I*D7>C3CPNIfM-UDkq#54AAlX6o28D5g-7v8t^GNz7_J)_~n` z+-oH{tEXX6i#)&gBWNY)p63R3Pdd`&=R(Hgh#_2DP;<0Y56lk=wuvZLV^~9D_=RH$ z;Rg(NByDo!OfzE0(Z9@vnr5Hj-K+FB_Q^tB=oD71+jc{9auCeTvspLCD?vWHcdWv- zyWDGci0ROt{$|8-^@c42J5J5oFBDlkhJ)B>>6~X{&Q#0ZpXNS>6Q1hMRcIU;=HZ|( zF1P@6zgwUP?w%d%zHo&Uvw|wEij*U_e-{Q@j8)ipSh|xmtOW!**_|v#Ut+Wh3Im}l zg+iELBbte3ahqGY@P@8K(QY}?v*(3@8jm=~$|M2z3(SrzfO*{xA)yPTzs_IYjm{Pi zTk+4+;fm8Ml_JF+o+=={Yy5;e``8&|R^+_A zk?OGVshADDP~3Wf{O#v99!G$(TxtAtTt;othjd1PKuzl6CIiFyd zS;1_e1l7ci}^H$N41m_67|#O=21>#pAp zuE7hbgz+n#XYOp5*m=u-KkDnTefHEJOP>}}ohU%R&LHM(&{-@8jMcxyPfGAFVc8$% z&d9}3TifrC;gx`6v}$tMV=asP*y3j<{|qdO-4X3K@J`JW1&PR!hL3DQ7Ue^v4r zV?7Jw#W(Yw9;8-Kx|2egWh5&gcKPNL6f4}*2 z6hCJeAc$&t#H)t93oEJQ8h$y8BCf=SY6vzd^Pi$dWmNcD>ci*@4yXEpU^~AI6pJkho?PAfRCfyLy6oq-y7B@w7~!8MD-W7f@MKDU=G6 zZMv`kJ}jB`^WZYOOYy!%Yp7Zw-1aJS_rN~L&o?Fs{(}+FEn9=MQK5F-0w&Cm0)P<< zA^wKaaUpVt9{nY%Xi#jnIst1TglT{pqmT*#>@Op z1CWiUN_DUBbM=L2J;H_w*#aVj0@wfud-4ciGtupjaDb{{J`2*L#kR0^q!`f3WkjYP z`E*{9%_u$ugnrq8jecdZ8bA-DFu4Mv4ZCz#g*fI`{z+9C!2o3%EG*4&wYqpawP4OP z%vyo-6T&O?JABoM_*WL8AlAIyBhVwtfs%GZ-U|>jd%ntIPZV<49b2iAFS13HE75+gfVk%$ST1wh3`kgIfSUcpHsP)TC6Hi5@=|R6*K(3ALov1mn};O++dMOC zLHbPbL|*UF8?{vKt~P$uvENJbGvBHGJ5Iz_%%m3rGrY6nB8dz72Q# zc#2qtkk7Rs$4iJi0-2V3AZ~gE&R7IkTApP+H*T>33 z3cC)j*n3WK+V^>Y&yzEOm(w!W8}Ym2@vnm%rE7J(HDGbE=iq~1?i|~cz)!ia?khVR z;k4rGki{{|Rnvim4L43Tw?PluthnabFm!wiFOC%&aBK4Vu^C@ctGBWqUU}3+v(b(p zh4m7$`iYhM0V3wU+bo43PqU3dX>~F=4uvw#7cU!NUiDwq8veAkDXzWsZcH5X0}lOt zUIcF)lph?(<+ZAnf3V+lE~^W7;&;>%c1w~fkwH|yZn~*)J<3vJmDkJs%`dQ=r^z^m z&BG?Xy61QyZg_DPGVT7Y#5vbIlqmQQv&3A)OzL&CHcQb$M03*^SL4wgtFU;0e$HOx zn-iJUnQ6RFa~2kWmI(>w4NJM*_^moHAy?)NJ_zPmdxS;{YSIhz90(KY*T>=(Xp~#1 zB=*ZF(!^tBgPnn?1W;2nmU+I;SWAwbns+m9*x0Q^)92Di4W;E-f|~o!s7~yST_GTD z7rs+MIf3bsXRnC#zRG~eG^SLyrweUswQpfQsq*FOuOSbyjkvT8y zu6@55RAAq?t!E7!ZH!Ex*qJGPOT2uvq`>bJhr&#J!A=|q-T zJCAgDb19$hfX9%SIvw#N;nOkqh6|#sSf|pYUMu$$KXF&m4Y<(}m1$WAe3|=6+g*np zZ^3v!DAX%lA~w~TM`{hu3Ak@-JFKGv2e9>3FdpU0q8c>P4?`Hq$6y`A?>Yb zvbD*;#`KYV^w)R6RWY?TJHRd681GaUe|Ku67x%!fyhH4cq+BQe4$5n#bAFrzLg1Pi zzPPpS%>x0n$0VQ|$yOV~K0ndffN=@U0G=3KV(?y$>}jm|9hHC4Oxc@?hSuwlBbuZT#5LzXrU|b8j~? zQ~f#@amU(wTaA0=Qs6nbsa)A6h3 z^C6V6ioj_%dhXi8q$?y3uf5yy>1da~fG4!DhA zj8-qy>adA@^X&Cryv%Z#4VznWwHH%2yCu9$46#I~6_{9@3&sG%&!!=WH>r;p%&K%R z>{zw6by-B4RJtxy)_9`xaaE^qft2!_&+cJ+b{LC>W9JIibcwmG&F3nFJ(d(bKxBR{ z%MR5Moin4|pei^-RariV+(Yzlz8zS24EVBD0sE#jahF`1z@HH-7_Cv3X{}@Xz!12r zKmsB6pLL$4Nuteb-k%A*5sm25Iy!Jri~qy3nK$7Y?;(M#aLm9!LZ5q8itZKVPesJ` znp+ku^JA1pTHdujR<6eXCjQO!x`uV>+tk^=re$@zhfn{`7;6b@gTWk>ya;g`A|ASq z6szEp(M;f=REJITG_!+L%N0Y%j?PTp`g-8g;{7Fn7tO946KCJ(8u%Q5@K^Kc`e2!( z1ZhFmpo2nMZ86Q5GXK0m0UyiMtym0_72%(f2G{}E0YKZSa&apQ@A`GjTEYaZP({-#a^vOCU2cE2zcd z&d5eLGyMt`vP=%N5+4a6btSVQnoJi;0E0OY&peJ^DujT&-498?TU#d)L zWie(jw}Tp#?eqpynDzY`vRTKt$%I+7avj#B+$1TC!n~*7sh7V+xCc$)M*jGpLxBI6 z?bP83@{?62y;@zR_5w^NEcIb;1+}I8~g)HW-8{XX^y$ATKEM6w8w#Nf8n1fPb#UJ z*_8&(70O3tk}CVgwFm(k3CmUfSe0=d>Zf3v?Ch!FwO7xHR+&A|H|c*){!O<(h35YG z&rHd@@i593{xw?1b?ht^d&Z>NuGJuKs}XN1fXS$>emNL(Q0!|!8U-k{(V{4d*rG%M zV#JeM#n=gpmmsp}A7F<8xlN40i_xWeSfm(JesO2tEo>!FxXyq?8VM@_WSs{40)W~p z5UC=3%PWglDp=7n?0-a&b2U;eP|~m+mH%ja=Y}L3b*Wa2_(g*awzW(Z?$D~Se;M$8 z5M;Gx`zj_nhNXoMQ{MVZX}4HFh-?U`W^r-B4KidjOUw`;bVX9sIk zu-*IcRF+(;MAzxJGPwfm0S%Bd0-%)@oArnThOM*JxL>KoRw-r8Y8>kyRH+{EO;~_7 zcTgyKep7%#19T~21Jt~gw-7=ljP*a3Oa4cjk}dOYb^5UVztfdkJ209$rAk|Z720rj zIYxJkJ8mO?|Jf7t0xqYyn$LcCegIK;gtzZ}8NNqJ43r_)d3hz-97VqL}y zt|b|{&T|y^#hYCk^n+!^lxeP`uhXkTMlnx?G9O0s-Vo~)ccMdzzOd`$%17!8ri4V; zmFBiN7M`xA(eo{%os2tCiB7EJ4h^1``}4?@z2(+Qgk)9M2LV^d{o}`T7B{M8!(dVc zPgsUr(Uvf1>)3X&mJ9_*X>2F3`6+u-HZuXmRU7-+%bp3T5i@v^1bv3;H$+*_7E9ba zN2Y2it|MP4@wR;BgUZaW_qAbm*}?VjxB|_cz@kq*4p)~u#J|Bkrv z@f_G;zq^Vx9iMr?(y#Y*wTLu3^GsSs7K!QcscvYWi`Y}J|EE$dkGbEPu!j!q&6;2x ze8xP$UFX{jcjEH%1>sdx8U*>|M`n);46E_Md!u0gnoN_S zkrg!YIyPXQd2Bd*UR!fLki{IYMMjdxAtj6(c7uU$Geymk8DLP^P@L4hi4B?fS_|*| zX(_h!Iy~CIq6ErUN9T=r)Oj=FBofAYTF}yYPlk?Z&zLf|3IgDQ2f9=7DKv&9;p?(` z>l2F@)xf;|cFZ-`gwM~AWsY*WhUnMqgKgwTV35Qa7abn&nIq_SX=bMLW3ANvltyL5 z{iMlDsH0qa`4a*B$rF}rl}GFS6D*eC<6>)6Uv5hD_b#t`a8{#8qJ9&-#~>v{wnSV+ zJwEm-(D|9+WWy4L@g9n>XXOy_zVBEDuOsv$!m>fPaxm#&+Xy}4!KkT9b|LbEC*Wl| zWY}Ya^2wE=5Z+@|7m#T#01}dip9)`+@Bs(!v9hZ#nkELn+jlK9?E=fA$jb`Caco4O z4)&WhNJ)|1Ai0xI<@7&}UTO;o9udCcFA3c#z&$B>+>c7IX=xK6Z5tmf)wCFUiTq%F z3-8oM33N^I=v@l(Zqlah}`nudGHrQ-+EaIgF#n zDmH|U!VjkOZfsM^U0UzNUf?Pi#yyCIQ_!_GbqE~CUu+Y|LqnKo=AnQJ7qm79#!$dI z)fU8R2s)kl*S_>^=cIb543!|ekeh!=<_$qCJXD1=)u$^13JhL^5S^QmUjF3pJz7UE zvLIumcH^p8*pu|te+M=DScvXY`I{6@>jmM8Ou&I)r*%|50EKu7lE;DuU9fGOvjgyj zg~;Eaj}aqME4-F?^J$m0H>G;jHo}f_!VK+Pc^nk&;h>n4E$plmj6tIXx5x(?yA?&A z<_@jP%a$?7!a6Fjw;4+aQ|}(NlcV?K_0A&XBIc$VoZmR0Q8NiZSa6F49X-ZkaccZV z#^klQ$_6zAKHEy}&16>gN4VpbHMz2nP;X1)IP_x&A+x@6?Xy+FQk#S^$`&eo zdFT{vjaPT$5zjriyhRSjwywI~#xlu0hs|uT2WuXVL->&(kMGEa_@zUuXYRhY^USNK zC{%}@^4D2vEj8BkEYQ^vg1IkxGSSF%R`hG(5u*sO3{wX&7omy#Kkc$XPT@D0b%2*S zo*HvsT#{w)s^p_eXn_2t+~Vy>l>1~dS=kBHAlV$>*Dib31S)Me8BYl8=a!LE+~_k@ zF(Em!VYbyM%#n(Vb>N5-ubpW*9;d~f)1x*oieawv63=Hc%O&&Sl#c=#SiOS0rWe|n zOkvS{IF-c{7>AI0ETqYZ@MAqVb@9_jKZ&5eYgyx}MmoKqEBed2uY%nypXfH-OOEd zd%2QweL7-k+mol2)9Iuo(*Ohs@=6sf^#0AFaJia@pM35C_k{RQGmsWw8s7TuP`arO zO6+7gocv5XD_~c{oX5e9$B#Lk)JPdDLl69G6>3snfp=uV;3*%P(e;=lP-}v}+}2B1 z4@$2cxDn)}?iNlxv2Zurl=NvgUdmd;?CEWHvwv!=BGr2xD}7)*_IsYsOyAy?6~_{`2Is@b6pZmES?WEWUCDb~qDH9$2W1 z(2pVaPj_lh6r*P|X}D{J&vO2J_$uwt`Z20|FEGmwhEZxDb4*)?0vv^J1?4|pAouI$ z1Zv<8BLEB)4EZ4(*eVsv$rTftvpfHHY|1N79u0iCaOLMaQSFsyuNM7t`RUL11^2G} z`Om;V*S`P!TWoRFfLc7=?J#3hEWSEsdvE&Yf|)60?bUJj#b0l)ocYjn@9Il46REbR zLPR6diAw_60`#BG0}~KLs~9cm5<|MCVfG)4+e;f=P$&Ldf)1fEVeh`~E?koNUlMey zR52#5Q-bf?AU0P1g=10ISgliahjtf(|Zi6(U6c8IWemJ}_kzT~f#kg@0KPd(T%u-(gN_G*~ zY=jC}(hLo{OHfb>K>LJZv!ALG70gf(SHu{aIZX$4BbjI`6?FUmmrB)24`mD9i2gg3 zdZYAO#{TJwvF_$7v-|0oMH&fTX?YL*UCJJcs{i*m-N@)5(a+}l!r7{q`}+2?WVadW z?8@G`-94tD;`(goy^vh~-* zAIK7$w<}7y<H`{77HQ4x~N@S6Sz%c;Tp!97E|$ z3kZRDcucK|;IKrtkUb+%UjEZPqDbz7t4VeAw3?KH75gvKxSuFk+4<&mFgjVoLEZ49N@l+?Z7em9W;X|!EMs&me1 zp&Jp>cb#g}G;S<)_hcovrFfsi(dc;&A zi?wWPCX9}W%e&FdE`hU#4%o(9-okwMcNkuAFjaq=<)&v&hA(%Nx318Hj#jW{r2;Jy zRN1^lOnKsX)tu!*BW{iVZ*w&+V3BIz7P3Zs`^FyKLFAg5JpFI1t18t4OdRAR`|5|7 z3>4YioU87ko}MdbBsWqetrkl=D!C0hoSZ>I31vG>y;64Zg22uJeq({~u+Kds+l_ba z5UrdH0;ZqGlRE~Has~M@y@MN(vQmS0w~_=Mj&HfRc!}7IOIYW5Xk*iFZS3i$92RZY zuNaKKm=M8$t1{WHI@}?a(ndpjgsdwfG1nRg&k%HZOx8SJD(%i6;9);0Dl1P9IkWNn zqr1eZGC5>!&q=1=q;jK-eE{k-sI-)=$dd%2FqTHM7!^d=#E$sXfl(@<-?@#Ry(-kr z-GK;{?HtQFhc^LGFRvk}Q~dZQ;^-`METTH98$Y=)NS1Dj(CW=@+3h)io{U$m1JB(*Y zzaOmdvC3&Lb=1(hJ+uI$Udp(7HUn&yGXf2gFWc0#5|&gXr)VH0+7*0N0(XVbXMsL# zBXN}Vg2?$@kv#@vZrbDHKh;zYz$k}7HZoF!T4O#glUHA66Bn#x=x_+;Y(+8^oI@A< z!m#*ugZATN1MUYG-R6ZRKMAbkW~4jEP_)Kt9=eiHHf+=qEgn1nYbUEZAO00;n#HM+ zuv@_HXbupU*;MgqE!=s+B|eA^xW@HZlwU<3?hr{+9!Jei)+=9RcJ3wik0RYDO7=7r zY6|9+vqpRT+wAJ&;X=MXlyRcm!zcPo8Ir((2HDq}ulVoW~e&*QxrC|64Vkr@>dn@t7$7V2Pu0v&3%SWYrbCd^_AxrsuAW$%4Dv`KsV zKrksr)eYNG_>kmQkr4AkZHMR@vXIoD=P@1F^U3A^s!Ci4szD2~Wgi7e4*>3keIAmXS=mAa!@f=+-Klr!}gQ^AW?~Upg$Q)#2&B_vc1QGLdK=apHEUNqrifRR)U~+o-;-=9v2s3SfVlN* zRjzj3dBD@!Onctk&WWB_6Whzp1Zs}jHtWLLT*W|ky0egME+RuuhrEtPzwLrxgH`=c z32BxABkX{aR5_2YAKxuNa70Wsjk!AA{rf73KtjVTk}!%YN14_YQOj9mYvc( z1z61{y9-YoQIBF=i>QE(6}yZz7fw8+!F-zAOFpZShD;OauwbCPCf3c*5d!-z(6QX= z-1%840NE_CM_#*00GKrelx}p(MYy)mpxZVp!ZTTntoqXy5rPN|T9YJUYS-j_@KcsO z8!u-zn9v&z{l+@0A}&er@!5VTH?t2OM`b{)SGn@tc!1p7`#ExLa@N5Oilq)Oljv3E z>1DcV`R*K+b?(`}uXYG!F$zN*xtZsdDSi?Wn}MdULItI#DzgG*nC~hbLNG}9dU=`6 zRgZVbS!r)BH=$8)sS+VA7eQ;%SiXzj7>?D;z0AYs{|UR}A}~mx>L=}?*Zzily7O1& z^_L)w0>ceZ6Y7*0hb2O7CG6chQi6+l9e@L$J%;n+8{n~9ws*?l$tzN?P&4XpU`E=0 zDPGcTmQ+&ad$)UY9U<1ce7i2r(@M;D_O=ub<%K(n#9JDdkCCs7k;8*{ROs3`hN%e| zlqrEoWj|iP?4Ym+m3aVBh}tNa-M{_4a?8j6id+8QSE<)LSENM{XCUPRTWMzbbtUGGmDOXXde9gE1`I&}>@)Va3=m%lz&^aPC^SH|8gzmNTc`nsZSiaXX(l2!E5$;A z*us3z1%zgTgl&2N+Pt$_h-Dg~H(tRgt&&Oua*Gmwao^6_nOLl9r@uganpH#tP-a;= zhl2lA2(JU7S}Jy@K%Affv?|zo10q*cbUBJxqXaBeFtarNMIc_#y7K@P;m0J-0pW8D z=#xTh7pwTMW#SiVK=%l_-h2fF#H<7{Mgh@^f=^Lmo0p0Ip~}q{XCj5MAV%cp=X;_b&TqR@QgC>1edBs81F zxgI&hgs5Lx{QHZag4IwFVh!5N5F~-HowhJP7FNM3UI!BSU6N&8+pnl`awF89k3_SI z1t7FpzrAk+K@%f%ws?a8xy}5xFaqn%cX0$o=JPv}Q`Rd55VinvNHL`4UIgj=B{3%&s@^X+|Yl| zDOb(3y0U|Y1{%`>d4D>_G-g%+QAK;QACF7*#{|b$gl4>`az60$nnJ}m|LY?eHzw{% zUzDNw_slEb4nEJS)0M=y`g-wH+$UFP5n(<%(suF4%XM*mRL0ZmCE$Z?PpdArUcaTJ zHNb;TqsJ5*FK<3(p2dgb`7@Umdi28{-Q>B1zh}yu$Llr*&d;lQPOB*`ar$EE2R|SG zprSPgY>w>1%!W}G7Y$FQH9sLONL7j+8%XGD@n_ysi-_f(9W!4|Q}@05)>d(cgDb)k zhOW;=eLvK@JHUTC@z3k>ITLTOkQdOy%LMK&!Q&c=ElK52Y_&P+E&?JHF6FsrCn`50 zPq)jt8%MU)F&%hgk}?qvs0w z-Sjh_^*W4+G#m{fW(mn&vtI|3xCcSft#a3;(@k}E(E5s?fXRpo7;04x*>!0(GGRIX z8@CU&b}8>U>#c&x-B%pCbvbSx_LFug;`4EMHN$nVf=BFErsmJ2jA9OwKD(T5L4IY& z9%)ECpiPIlnoC0;4+lo>2ETG}IC?fzwd|Mo{|HXj(@lP-Sn5UJ7CXNr=%n1qJ;Q_+ zlFwiToPKrhLw~k?(yy3*N7jNaN5|Z;yg&K)7365TyVqXp!E`P#-1cS!a&A^oR={1d zoPFtW+g2Gec|?dxUo0x@C8EBLjzo zdRZY8zCJ%4UF>ZM_(30Ltf_?vx9Tm~3&(Zr3+m|<`0`1NKkq_6FA;mWjv9Lj(U&MD zJG6S8<+*VAI?HD^ok*{-vzwGoc>rubxf`AIJAdu;_XjC=thy`agj$S81%Vc{ZN>Py zqP!s@;rJOY(YX`m_iU9&)@Mqsd;1&8$E1}<+bj4W?jRUYPT)+2)?K8_9Xhy5NJHh| z;?N~^^F0^H``dD|MRZmD1y&sI3Amz;PJEohG4lsx0B2UeuOnUfYKRsV5w-(}OA1S* z9hyI$$KHSj8EuR8q(S<;L&+ppRBJTolWaA9*`~9XKF#HT3o6BzxxGB(-h)YfPtD_Q zTYvkR%7)K{ITeB!=hV*HEwdblzfpWf+IuH0Lb%S^>RN7SWUj5MXPPgn%RMcNuoy*j zyKO78@%WwUQ-H>Zgh7>NV3z2q3y+IZLO`Ki@$`xj_*fOGRf5E1a7dI)Qi`1pqFvBy zgzh0w;Raf=_#xM{f?26(0bqfFz2vxnKw)+|o;A@k02C-U1U93W{+f2OgLzzb=$EB$ z7AVO6ex0QZ_9nz7sHOiP`(U)r_G;^&y!mR(Y!7Xz(B-zxe$l~F{TMY~tm0;@Q{sbN z={hBF?1-_}4iv&n3Nmj%BM(c+u%xRcl#^ZE7vo}pBJW)U5k~g6mj~0esaw_tVGWneB?u z!o)-aA!D)o`;Sc*^ zA!dzY);PSuIA8^M{l`3lV`u*%njq-;4?~%aEzB z@e_%W$%?-4R=OlW^Tj-G2t+u$*P%1hlI^-6n@){B;jh~TKis$(No2y3Qa-o^WVNz_ z5-P)rK2l@a|8T?eNii9t)O-)#w%=x-&elQD#}5flepCPPzT~1GjCBJ77u}mK08sUs z!|cm6c0t5#{V6E^bcRt_yx^DTd%NuHs(WkaQ6TdSN3(!rE zs>Q#2HY;to32jd24k6{T+v-ySjF(0<=i@t$H_`Ajyv=NjuoA}XMa)T^z1C}U2ghGj zu?`I5@hNj<1xbTMM{#-*8eCR%rp|L4!&p>1G1iU<$1P^H7v%$Yjd?)= z$2-Z1i%fjrg|Kj1s2qhZFTb8t3 zy3(XtD2E15ESVQ;hi%$D>2+*w5#VM_ALBCf}gP8uh2I{yY*3 zn;@napRMbrCzQ&lh0^f$zT1DxHQO!A>t@vqE*3Pv>cCTsQkmw6#RlU= z{l1tEWo z;9Vz!l63=CEkG!@Rt9RrB5{+EP$H9sv(K!-03n4q4nukU0ULkiqsnauOtIA?);}2y zg9QxCa)}J=-6|NT)?USUK}RspG~xf?=4I!24O$rp1c%Oz-=*!qcZKJrZ|n3(Ya9D> z8oEWO1?HLX6iq(*aNo@b6HpEZCUt)V&_m+-bovSy8JA`!nDHxg7>t@U7@YN8h7_I$ zZpg?B%yhLD@H1NQr1&xd&<*EZmlBYd7&M}FBlu%d?5T80nnoU`!(G>J|IP;uwv-|s zvE7Pv$dUxJ!$%W|8fO5w?~TV@pEIqC7i_2_dqKnPm(d86jT$@o>NM zdpd=ePM#-KdNSbutcCpdmwSVvb%Xfx%fJ5@VAO~r=-+h7Sid9a%f0Q7m-~t#B>$Yp z=hwlv+X*yE%#DN5^SSO+@#M+dKl}|Ht>zbyzwHYbF)F@&KR(DyYPfgI`diJ7^vL?d zTTTX}IPT@v5$R|Q!;%apHl`|XD2 z?%6p0`Ms0)m3!Wyk&9`KO0y!`Ybj&{I*yg!kgu6+!o zzGXd&xZxar8<%-ddnbUw0G9}^P(@TkIODBJbka8pA=_z%s(g z_dfsohf-`h!#&C*nz`{+*b=XB8{R@El>Xki34hczo;U8RXYZaC z*iPFisykkP*A#7JUR?XR3|RI39%!k)Qzu_(li(l0tgk*AafE<-Tn6*er|^v5*UrM| z#))TytAj(|8}?g$nkQzsrpKS$u#eIIhJTTafE%zAe1GMCE9Dh3J^en@HYHY{%R__Pnh3P~fR_rt2z2yHjFenLB%@agv4 zIWz)CM=wfR%r)~#i?-QYj+`WR4;Yg_>!y(G(l|C>Fw&H{iZjcH;N7snGF^3ML-K2~ zkI_bu)uzmw$`>a+x?MvFAGe5}&=Uv6b>xVfi1b?t!~>Kr?rI*68FG(xF}(G1^YLn{ z+~P|7LuP4+Mi~+U;WAFB-za766)8t>PkB9I&aHaKzM7w^Kev)vLgrlDWtf9F4D(0p z9Aw%=LM*@4I&uxnx~1dTd{e=h4i)~ye*AYXiRZ-zCo)AgQAWK7rKx&lC4xIlUMTtu z{C0L~0wg)Qj}#Pe7)(cSvxlR&?k#v#Bt){Nyb@pNF3o#5z(3jF05!3o=?jNQe@sv= zbnPj_oa*6xPbnc*n!ptjti9VXVaoRmh(y6+OA9*f>-7*VcQUtkxK3bGV_meY9{UtH zA$`2Mym>sl_a{Q%+Gw(s+#)m_+MKPlmI`)Z9?76%KArweS}>YoKFH~_og~fJA6sSp z%Uw$G*%bDik{L;su2ro<+g_!;n1g$vB$Atar>xIKqCDV&#KXmr%W*L_k2C-@fXdV3 z`hnIIPeG&A&A~%&% zohDy~YDCuaqM~Du5{PSc9+IsKiI!r7l-k1IE%h%B5Sx-PHflJHhj*{-bKTuJZ|4`b zh3_e$wZB%F5&Y77-Eua~$F7LzlHs;$eIoV^>#!)v7h?mNn*XUQVx~AIY$O5WZSK0( ziNS^y>)y(3&V}%q7|r#`wo1H1Hb&#lQBH)A7;Nb&>o|Slm(?f!#c-1pma_M&Na7F$ zi>+N6=Bk_;ovlzu-Li1x3Q|CE0f84#zI^%An@jh0+MU!E+Q1+IA|5@4J%&$$LOOTq z+MvgMuO&~X-p%>TKLV*aeB`eSoJtdbPr9{NGGnk+p?q?NAS8Li;BQAd7S!vyDI_?- zRq`-slUMgH8+C%aU}k5)6+q`}T=4W`my(F+Z)bn}l`gTfzcPbbDpbq%2e0#t*^5@j z2B%}bgec%UUZ-RaZ<2RswH%wTEB2M~fyGs3|41D^theW(!?ASn}xEAFj*N4Szib5U+y+ zF2}O<7IAc1I7RVi*-G4-$7Tf5aR`CtE8|ns4cmQ0a_ePyy^m z8H5H@ZA^j%|-10Dxh*{(rKCh@n}CF2yAtE^p*<} zRKo8*KdPm5T~lK{ZZugE+7Oxt`e+~RSJ$~?Jp0cB(C+%Xhxr#DP80U*!@7eAxctU~ zq!QniN!N0N3TNM~k2_-nMe29|y8jz_%aOXXK8x~KMSdN9pG*;+Nl(q<2jX6~xqH+T z_bY~;?f;dUJfo3$K3%dlh{Kuc8`XVvWhSQK^P20Y1@Xnyb?5pLu%bEC>6zJekwjTR z)(7gtTMo5h(T|*_dG&vG-Q}6(;PRVs`|;Qc;g3i6{@23Od?%*`e;la4`qFrKXWd&k zs-&ch8<5-cBx&^T9&gNejN5yY?v3>~hV=1rkFl4khFAx`RLjf~{obD^kKIok|KN7{ z(Evn0Cvz!>z+(~K=7}D}NBc7TmF70&!QEtFJm(0=Se3ipZwQn~g;46NG zV7KpCISkLhwgaq2yz8!z20t9h=6ymT@{yW(Q?Nq~-?I}5hWJkIU*9cVW-Mk2K#x6q zQnsyH`kb$V(M#v5cIAz9@$5m6w!S*hMEz}UlD%M($o#~E12@u`hf-wEcj71c3MI{R zhi(#?@Ho$F*@QH-hwyEv`lP_a#4BLlRyRie9IOeH?v44ARpBF+$#A@!pul!&xI^8W zvj@oSDmaf=@Ml<5K!}kip=zP%EJ=pqSU2YR-D$Z2%JrvbJL%?}!`|L$$xQuf!xx5! z&SP#Qycc3z$CyJqWnL8Xprre$#(b9Buv^K+2Kr~5c4N(b7}h#soGfjtj52cOYvJqm z7iadWpv`@Rw_CB&I36?j>pB=e_L(EHB;>Nf{WTN&U-6@W_d6^0r2-PjllXRVD|S+M zl*Q8p)$B}FW-W1|gBRmh0bkA!AzX=eRBae7{gnxwJPGY9I@KL`TG!}aorC$FVWwmx^32?$l+mO0=|T;*}7ajTKi5fRYF-1*4Z z#dnsXC(xL&o=w6&iLY=Eoj$sp?3A@zNzIE+in>qRhWu@{C(Kr$93R`%2Jf^~#*&T( zi=vr@0RhxuoP1g#wkfP#g?(MAeZLi2(kQSFDH)aDBBUZyNSR~UTOQ|sevh6B2UOm%EDS9`2T!bz|jjs#|#z!#%J z;EO~O$up9mJyo4>idH$(%+96B7XlM&a7#3z#RU6;0S8W_ z;?+slU^V*@|BRK**ILd2y8?(T*FCfr*)%wIU7{(#wFf5w3)=RQ4sOv1wWv4xt&)Qe zDIZH?VSW6QqF*coP%4`^b_3zqy!=J6OON+54hqmt=HUQvm3uMb(EOGXF!9}z9bO6t zCpQhYz(9%aJwo>|!lLI#mPh0gQ z%p7>>$qX)Lj~!SyYg5roo*esErTC4sdt9+b-Sg9L+aoP!vUm#Q`cB+j1^1Mdb2N7( zuW#t?l;%}U6%sb-AKxwyDXXXz3|K6d7LI3rboR~_Z^8+}3!vsh1?jw6ynQPkVJSzZ z4%u@}kNHkI)RAWq;?HkwA2ESck)HLeSdZTT6ILt(W2p>KtQGFUCIcktBr!8#t%jBs z&h!FW8Oj>!db5F+x4$(EZ!1`N3S2$knG~qj=yq5SO?O6s$|fm5SkTNC4J*SWYYSEz zYvFu%ao7{4Wj>|f_5lByopi33chZ3C0kI;LGgdY;<0NuNrnHj9!NSz;gl zv2v&-(}bDT8M(1ALBaf*$+^l~A-JQ*w{cCO>wPIP zj3^*+;$l13d@o~5TghI1QKT#>Cb8%1OK2+8DgW;XsQ+FqJ-Op2oKZ`#&z?yR)ajoc z-b~rtH;79x%3s@Sh@mZV>)d>F-pq{NFNLi8x=5Y^B;gKXK5X;Mo45>>bs}vzwm6d5 zIXBmjJNVJ?QAJirb0be7Rv*>vGjg?n56Vil@G#?l1iI25`w!54WrY)DdaOl@9M%x= zR`W7c7sH}#lX)|(@$5pv0+#(20KXNb$I zQZ#C&lRvzqTbQwg6lk7?LS?}h*ARVSlE9p|(I|IC-{&>hbQo$mmgAcOv2{6<8j$Zi z8mo#DsKK(O1qMX16d|Fp&dMm?4&x1c+C~ilLDlHGoCFxRm5=-5I*?+NhqvVPo2lr4 zY>S3+Qb$0$1#D@qH;i?TqotYhO8MkdMvFk06e$C*%jhgIO~wNUU()?sa(u<}QV`;` z#e{k|@03}g(em@hSvlUOydfB;w^c(ah#;MgH#_y1Fc%5rXS%I-=h9}Hlu0t;GZQ^f zL#*Y?mq}@jFX<#L>0A_zE`xTX^#C*Q9_^m$$yQSQwd+8O5wGkk+<}t&I)E+9p#rpP zwh&zhAhtMfBaXr%FYL@gCBceggnR&)EJIL1=!TH&y9V5H4F!-vclg;ytFYx}D&qBD zzT3CPrTu3fYQQjyp7*KvNS(;@Urp2KchBGjE?-3>p1S=G4nKIP)bb_F^{hXwx^=~9 zXbt!lq2Y(uonk~0dC-mKSM6*^NXLCR#X@N{`^;MR?37zp@&3osLYmK}&G+{3`0$T) zd0Cun_28WaBJTlvFoSGnnq+H*Vd91^=TN_UjB|7xk0Fo&jX-Lan(@N;U{|!#f4;=G zP2LuPd2BzrPr<~mm(f3T8wF?Hs7gYow(sR8mH;k$14`Xqo&8%ep*Lii|LVjy`FClP zyUiCrU8RLPBzn(nZ1dPcdoyk8pBp2)3nbzAad>d6Y5$+xZ^u{CD=K!q!{XHKukG`0 zy&rqHSh>x3*RF*f?^~G1d9GSXa2|?cfG_Rqeio~m`LYQ7iLFH6fH(#~c7Qded5llH zm9y~9ph+3KaJXzs85(mfU3$-UI$$cbE)l^20TKx=saIu9`n-s}bCDW2Vn;1U$cva; z5QAVRB<-2mH6tm?67(5;v|XR}&H~(gP*-ZnY=l8I_LZkG1OId59Em!a+d*BVwcl5` z5-%-=#O)KxNlrcs69i0`1&+~Q0_@6phYspAKga(PtYTv7@J!OvhK3hmQ(YEBM2q5@ zm6JHqO@oWRCv5_f-Q9ipI}Y&2>xtE_PVLM(tGS#CJ3?Fr@pKqfjtR1QziLDvesfJ*XtD+dq2 ze@eAzWu=!s=}>3l20`w@gq!#SpNHnyjFT%jT;Ph6HB$=p7tLYJP{nG?un5gH!Chmq z+&S0jjTGcBldYAGZPWi5W-;Y0WC?%u*Wd7&a;wK`vvymGFlk``{}?`DGsvq-rIw1`kimbR*45DcZ1l6A}%?Ku?y4m@jn4 zX8wK)Tf!3)I&{9(=&a6-6Jn2aEtLtFSxtNe=@Gsn)1FKFW4f69SBQpzbgcG(4FZ|~ zAlyhIEisiv6q(V%GIn9z&f?pC6ExvkMfUu@M;=i~LDASCCPG&u{))&i$0}1mpmjXt z;q}6w`;$}S_Tx9j!4x%fdAJV!YK0kAdm)l*6||d=O1sPh_R0k}TTf&KDvXMylS1YT zG5j+##eD2lEpZtOPzI)L>8{l-A(pcDFLyd@!6kWYsR4sd2G#E zNe%6+6>}EEcb=^q3}a^D{cG0lD^K~ z#x0sK*(`Sq5ISP2BEwFzkO=`o=L~5zA2Q2{bx1aSs*+PJ@Xt&ZSRb7zF61_Xlq4Wu4Ft`U?JQEW#D45U#L(`=1*38tJf?|A(b6^q%IiMW6qSc+a7)aA zocTnn)KePBCcBli*yJXtGVcDR4gvUf^4Yda5bn4bv&rgVJFO*$USfEX61%p$h{Zt=R4IxPi`o#ePww21_~+HoV$pp zk$|&A){fP`0gU_nS{0gt8h8u0(t%$UReb7Njec8HdT441cli|!Kk7Eqn>5;g0rR%a zy2y8hIxQSCva}i|E{mBkYjeUQZNX|pK&AF!TCu6&BtLe1;KX?z2S)y$74)#oJzy1n zv-4ZG**pcsm0R^RyZ28#hTZA^?xT%mWWWQf!KW7sN*niP7I50Uw0mfDFs2)H=2|&ws*@+4_H?vxBi zwGy0#8~5|F6D(K9+n8ht(1Y>`*1?tCg$q^((cDszU=(OzbtrOOJ-L`g@3&Dcqs zF29K~zIi|^2FPg%1S?O65j0tMQ;ZS-}U3WIL zQi=`yn)mk4OggJ( zoBnTksK~{1@3mSLA^Q))i(%08`~06AO5GTfS*q7f5K)|c?D`BO&l7Vq8Z7v^6k(u$rX2U0emXC(kDcHy3 zGF+rAf+CZVEpi9x38oqBL}crG>9esGUUZDF= zkuE0lDCQm~b1V_}jLWAs&sSC7_8Ib-NSo zsDLhK3WDFtCok6!Pa1#pO{=B3Xp@zg0`!>k;$-v{G7tr+BGU<|cl50acU1NxvDPCB z^b)#Md1o;A97XE^suEOt{3w)>cLl1r0c#EUbYtBOQVZ~QJ( z<>h7G82x9X$pul^2qif5G1VDQ2pH|HnPKiuTI4Lxad3!V_q z%_!JI)Js#xf)k@37i7D$|5%nmEb*rwt9zK4&R6D(_Xb$~!=C)|0aYFW4@mn+Jv6y9 zv$6D)ARgmoaM@sV#T%&+5-74QQl|J81hHm+JB;Gw&L(7P_p>@mC)H-WVdfLFp_CJm zG_|4ns~M{pPqmINj?VcwL`Yc|r{L-=-tuW2o9?Ig->FoUV!?29v(nBk7kaS>$}$%3 z-`r56B=t$_lw60|Aw~+}Q{v9(31Vsalq>D!9qjps#;yBtb`5SF$u|4-0%;^ODME;o z%wvLIiWlfXTm8g!o|DE>m_ZF{dvB5F*ka6SW8-J1@Ixu){Pg5GvR=R>{37do2Bp_)iWt@O!8q-tuO^kzJEG zR&jr#J8rxQqEh?zn@$H(c!jRdXSQ2dR#HAKkUk8lG~aZ$RVu0WM5*54?r?MDx+^_d zMt{dTX*vF9hanaEy0WsVT3N)T*t~t#+9prjLi;fM$$a(VcM# zgD24Q5)uSEM{5jG;|)GWZghy@y5U}(?^JW8TGnPi=O1rWEgM?V+Kemg`#1&SZR6ve zX9ip!#V5-)1l{D#4F{r!M(2R;DR%M`@Ne@W1~j%Xs^=v0Zxc)<)bgx17=DK zJ?c`tjF0S?x3(bBb+Z|EeDc~Lz~h)xf`>h#7b61FiMYsJ>r0|rX^PX)6Aa4^dCBn$ z<|-LLy(>-HCVaiQaN44FG@L5Qo=lJvlE7G289l)NO&6W2U$(|18(1Ltb>J)3dP!Bs zbDsf=1OS}8aC0Z{LWZ3V_)REYDzvOJ%`7-okU^~hy;hR^>7f{ocveBRIP&~6$j>60 zRpjEmXWsq$A^bV>ZoCj6Z`H|48i&``G5*3RvHetl{mPUdq$OJH*hRx~v`@uF#;&P+ zv@-4tf&ag8yrbJ8BFEAc^R>!V2 z;MFFuc)8&KJeQ;PV<2>$jO^|#ws^8-uaK|DCooci(hzdo@4u77`}ShJCe(m@8GcgV z&D#}@jG&1Fzq)iP?3#Sf7lrnp+g!}IarK7di3#{#*&AWHEKEVH$-J5!*M88v)UE^~ zdGIkQT{)Vxqz^oy36S9?!lYYwG7rXJwiTAktF2`YPF7tH4h1um- qxMigjlY}& zV!M{4LH84G>UJfiadyNzS@|Bc;K^-Azp0!>LW=cIudo63t2H(Lx4bnaAqT1oAf4cu z?FkGfa~I4@M=02(+>G3oaR1PB#O9);OE=oiQ_ubRN-AsIB4$IR#VKjMg&M&Pe)hYi ztl8y>LhSyq0THG#<4Y}$}cd47wfdC_t zos>i&C9|^i!0f&N$Oy4I%V<~ojtQsnRh$s1U831vi=&PtJ1Tc`%zCe`Lf(_u1pDAI zy&X~iqTCCE^B)7q7v`?rymW}McDT)cZ>VO63`;sElYhmSi4J>*VA{v?5ndojT9)t> z>n^Z%5>ku9h<3Y;`e}E7&I_u%3Wh%>#3Exzo(@t=e273!PQKUjCTlpH0~aYLKnw296&JT5$vZy34@)j9*?j>E;2^g*e#{jIZ51`1P zA{2{a;pnV96O197RY-dFMQLdfARpo5ONhXyg-Uy*hveMf+Zgb^mO`CKJBIo zw?&`*`8;8j7xp^v)8S6?mKGJ`zY3_Ww6yc^Z#cNAgL?X=Z<*f zeEWS;G$j@-0^H;1B;)n*Ba4S)s$=zQ$cT9g`#W|B}cD}89*v; zoINSX2Q|H;M{m!P{+e>6e$2D}ndm(HC9nYY|K;g^XJYm{>$$hCPM}48-TgkjoZ!9H z@`&|CdTSx*H1kPHWJ?Xt{eacF(|t8ikV<(ygqt3&K3s6+bY_P) z;gMYGoQ8g|MUbW)d>vq^!tXZP&HV}gi`#C3RaeDrs%_u42O3qwHn}yY0TkhJUaxje z+2O?Uif*q|Rz<8SJ)XS8m)2O!wdM0VNV9S?B1CJ{JSZZs@)$naId@!U;(wEdNWq2D zdz>Y%m@{27C4IcY*)~u4vHSgOMnyu5iQ6-!(SB&B9d|78B)`v!-RhAX{(O!{@WHhe z(*l&-WWn@XpUYf>mISnKB>Ym2XLR~(`csC38N+qqb891AXH_UE;F`S;V?pX9-^lZ{ zPiM-U2`Io7h%N0m*x#R)q?+cKHp_}I2l^`g<*Y-qC|ET6otP}88QRZgsf~ts_|N%b z;o=myhh5g-tGN8&^E?2r3XQG|;}C=Vx+JdXJm~kYoL0gltMY5$a~lyBp_XgbWmBVj zTA9>O2^M{NN;z*=Qo)J&n5mVWZw6(AKV}m&JmBpDxkSkMo5@{t9w#0E%qc@ zn_WK-!`vAvBHYGCAaXcoYurkTY0I72 zuHx_ciZz7UCtH3JqAw#x563>m+so^+b>^2m=KdGei*CII8}YHLEbxxvcTb;g8yB|H zo?=$vRF+S7Tz2KB_xN|>Ikc`s-%{o${aVF*bhz-DhT zAqC;pj1H0($?ODZ$YX@otl!{IB=siXSd6au6(#@*;!m7EH%Z2{0X+VeRxl1Bm< zFQ89n70oxFxnNL1x;c-b6Iju$+D7W-(L!V3_mNv@GO zuVUdRIQD=MPh_O#%IH6oUN8usVjnQQ2+Lw&s89ILS#g7YF8ww6NeZlkna>CK6j5 z4CwTSBY=xcK|J{TCHqu)_|4%}!VC8_sYzP$7n##y4+FGBy_+TOlfRs}iD=bVVso=W z1mM#({xia%*bt)Uo0nzL>iO8{vo}3Dj1aSd=@>=S@2;E(V?ugasiu+A6H`yj8wV#( zz`sg1G(>4E)89;p!F5E@ zNtTZqSho&?mLv5xDrfbSN?!cg?*)Lph8|Sycm#|CadvSZas4hr#_1l%K|E)DUU_wfjV^b{GC>Wn!(x7l?dqSbQD(o1# zR^Hf==ZeXR5XK7=6#tnX_>Yn(n}6rm>V!u*qyn3GX}CpNM&YxCb=oy8;WpJ;h{8>v zEE;P~pvL+Ul4|yRn+kzTqzEspM7zyVOX@XXI4Lp;q{Rz(#(;SrS5YqwKc@Eb9?-Vb zLO0zrMdzY1OIXb)lLr!RWW$VQ24e-KnR>!358#_@Pi`;gFUTthoOtnQc3Y9%6>TB* zpcVpK5VMOP5EyV_(GKJ2v}r#psd3=(fvirCbVMnbU$>}`U!+sXG1H7llN(x3DUn&w zd$;3T4z+Wzf5C4j^gntSApS+yt#r(lxi*ZC;oOx?q=;q6X(!ugC_t+8zjSAk?hPTR zo=0)uPJ8jKM#)L%;n)FZU9YIUdS+x`{jfg|&S4lx=#YtLUpUE?AJKC7&U+AEHMs0Q ztMLC{1=O7H|7hu#hok0v?m6&%v|-NW*Ng9dzJKxidtKSL!Bt7%=DGoT%SX`RlJ1k8 z^Pm;Lhun7Xzw%g#xMMot#VV+50SiMmjHv?aT}x$rHYAhoc%C-}Ym1UsrgXtL$4a9P zLZ_Fg#PAR2$Jy3O)0a|No6Qp`Huw_TYKT8>!4YhGgatmA0>n@~c`87d_v2!TL0bSs z9YEr3^G&3wfgNdjY`unFj1Y@iSQ3og!Xg`V`S2Lq4{fBH&>3FxCOz?)EhWK(UBRMG zhACkH-fft^Nt53NV4oot=)%$Owv;Uz>;^Mt_&g!FssODUY(Ss)S$VzJmGv6p?=P{z zV?T-p>U8=uEg(&y8jQGlJx-uUUZxiWp^2?2KQ3>w48K+SV}O&Q#|7JA$N3e=GG+{_*}7b&&smNE8o z0AGddu$E#`CW{Ox&?Wchx?I;yghr_fJ@{^5?Of|c*s9%z9;vrUvBl{-5;PPKJ4#;X zHUPkz0la@FEy>a(P!wws$#~v7i|DE|)|8Iv_K>`2!r|JLU=r5ODR7X^*?fA!QucMCsqB`G+0Ern+?u0x3{<{g!w9I z^4m6Z=j+}UlFMh-sMguZo1IlPN_@3cM-~C-J5|w<}lRKh=O@eS2IvFG_7(wKT0Y2nZ}o2js-) zC%Ri!m-?FMd*dBOal&}`B_o&cesDrL?ydY5uVD4>L+k^Ra4ZOyzLigONgDT!6n zl{)1$roz7VPjWRr_X27_=xH6>7_i!Llmb`2$^!9ve2xY?3m(UoUZqdnhV+hSu5bAR zvX)&dQHA=c@OEBuMFm3dEt`Uy%-nkDoT(Fyu2wyM{X5zlyKnt!T@49UTX*fc+2oX7 zKsZEXby(AUGLV-`icL;)&ZRt(l5P7GyILtzGg{piKfakvPIdxJUGZ#&9GML_L_zWbjwp8R!db0*i*&`rQzh|hLxAQFZsl|eE5;>6du&8k z#uzm>v;WWAOmu*A%-cBZd z*=kjYS3iDFL#s9Gp6b&j51gYJ2;$EJI3uSvVN)N>bkY;rtx^5GOu_WiQvYsl$KG1i zIdfSS&Pu|Gu7HtaVqJk#^-Eh$Tx5`w(eM7Bv80{CK|U=*9-;xZHD8$JAEG&G(K2Em zGSqElRZsq7#t>ZDqNi1AY3s!is1;7gCcfOcy0m|zOR=6xHbw?tXkUl3H(=-(ii8Fc zw!Bk8rEc<{W1)C#3jkU%5PK~^81Ga05I>fs@@nE-9*RfGu!Gj+kg3|5_>LHV_((8dY%5zPlS*c z&k#)cHdexS4X4;h+78|x@-11hgg>5Jo!zYvDjy!A$gs#2ut%+ zGRKmb5^dqsGa!VqtB_Y_WBM0NRC1hT>xJIxuu4WN-J8$K`u-!i{6v|(5g2R#vo_Yf0-`G%=Ux4b*9tU48)9U*YCg8&JdYGnsA4*majivIC>TS(5?Nadzy#E@CwmH;ei^jb%r#Q?BC+2ZM}Epo_mSZ1T;><_K& z00ZvrHZzhKTrKrZhxTV$X##oMx=t%K9}xlt%nG{#D)U3kp2%zS9s9gD5CLTxWIOH{ zAA-S$r(h}yMMn>9@31blFTdZNNV^;x3(Yi^nm)JE11pJ#qFG8GD*=WeQ{cl_%?`~W zI|irB*@lOaMl?BhDXEFHMEIR$%r`1#ZsXVnL1_Y-}p{K+r) zNZ71)@;T{op2N44g(Ixr7iB}>mQlL5m%Q`hU)TNH%{V#$VqHUS;ih%>6;o;)Pj^Iu z5*=;+VQt?cjpb!WPBFKNZ*$pd*B_x<@MpIO8FQZ(b46M((CSNH*Z83pVeQmXpQM6^ z`~K-=YFOYM*>f1T_>&09P|vP3;eDh8ro$w;B_F7tb}X3JASjs4{Xd#~`hS&kg@>YU zXgb^@^NTkR0dGT_5Q>#ak^j~7ezLg3HBp-Fl6S;nJ+X*?Dq)vw>^s3)d)YL<%))QX z1!U`SlPl!Fvz?r=wvQ@*7g=r=B%qf!2&hkV1W`ynPX2Q4IA+tvZ#hnFn2(5XiU(4Z z^wouitSt9WO3$4f(&n_B4{_2#!WzAaU@!szoc~=0kWp2rhVs%D)1gAtDE6+iAogv~ zKhMF#7*LG6gW%E2>y-zd@d4Ru+;#g+-mFqM%k7$FCh*jviC)RZgxWmGI(B`6N*E!hAJ=J;T=66@vdUrhXKk=W8rZ)4>h6^>?lJ({<)W! zjSZ9n&-@esA$5}9dCI{IJDl>m+bJ3SjwhjqfR95EYZ-XM&chSn+U90#Z=oiQ5iX6aly^D%?h6 z_PZ$ZjeX?nrc&=slvFzv;oq;V|2{mL6_+{fKT_yhmU|%W%Z&M|nsyJF^}me%N#q4g z?gz`nb#e7H*1x;}Lq$H;pF*md`d8gP%rE$SGZSg=j2Pz`hvDYq_cY%zRl~vegotp? znYA-QhCF)qugU)WcvjFlG9&&li5zh1Y8bhqOL3hw|sIefzU4EXi$xZ}HugTFyaym!eJlJ*`QU|2AH5P;j;w z>X8#?ofo8in9!{idy2e%4iia3jGX98NBh+yQq z;iQ+=+?!VJNo}h7zouq{H!RupdJg%3)UB8U@p)0C>CGmC<@|;2l^FOSZ3x}f zol)m}u<3ZwESn}E2M+R)zDsI6^*?xf&!8svzFqrDu2fP;p#%g;LTCyas-OsI^nd|T zP*FosK|!OUvJ@c+frO@^s3@obS%``n5EYj#6cu|wRAgB~QL!vnEK9Lq_T_!go_#;h zo_XheXP$Y#>nCQCGw1*O9S4ysMEFR=A;9h0jkj!X)rS-2wlM|B*KbqUiOVImw^|UhS4)9Lu zs{@mFDK|wQPjIiCEN*Elq026Om=uq49zv&BFe=AxxEP4Z(fAAO)d=cSX9`6OWWXyB zIQE$fa>Jb!SLPs`UMx7d?fIJJ^F&WL-&zr#7BGxUI0!=-&7HH$5!*YuY!&NK;yyT% z{^wHQl0mvZy2qO4|4iUjk7B5HFv17J-kKi7ADusU1ioq~R`t6(b3P|zpGe|2 zF_}tm;20QJMF`deHy6+7BszBnDDh(ae9W^)LJ@o=mxK6H^}xbRTwUQ)0A{rDEQhzC zoS_(+3Ux7yjS6q~WCD+V&*!rNaO!VzmST{>B*H7C$vW%G2fZuJ9M1iRk+GCXzu9ZiQ%g=P&0`npfo z7O!xZO^d8SzzGfA`Qxi>8|*M%n>8+tyH-2g#vGjAwimiEMA$4n)-z+W-Yiq}9AjPM zEO3^|QvK3wBPFF)$EBu=nMH`ar3Fj(J?QgYAS#INrYG1n(k#THQN+hJz22AT^5Doc ziaXmb1UMR45MNKtXxPc!-4~s20FoilC~XW|@x+OX7k|2fi3GSM0*$(B%r?yTey4en zeh#Wt#_De@IuXqP!rHsgZ445lTGtQ^E5ckdc0fxxa(8VwHoY}$;-6$Q3Y~`)ahv6D zHEV1%+M?ScVBdW*M27Z1XuS zoUyy!^*$wya#Ov}J=61Obdq6FpL~s#I#xQ}qG1P$+j;G0U$eXaXH@Eb#2SrKHeI?N zyNCv!p~1_-CeG4#d_p@-?IYNYmoC4}fqQ(@qUO}qA4LUp&Ym2T6#(3Q{WcsdLX)t3 za2R~!(@To4xG2ZaL1&WGPr-&~x_1^a0;E2ZK7eidFg+|su?4&bn=Obwg{Dh)fAawd zngRMMaig$ZgNfkK2@X0b!HbmKMDC%!PdhR{e4~)Pl8&vUJ(UMb5pH*TOq&qv0ZN)M z6&(o9N3I`IdwUm~PmszSp&tS(>2h-)Syk|`tDOG}6(mIT&{eNKmF3maetvDt|tOjv{jxlEXBPf3TN21IgC%?P|o^Nu4l^7l`x-L%Rd z4uj;>&(mi++SL`&B7eIvt&Rg`U;r2k_NVHxIPZqvdIvQdxoOaV%18{a$XhSZnBZmq z^Og8UsE0d4$J1AyDh@k#!LVb#zul$D{Dk7t6;OEHWzy?V<2o5eH7BeVQc5VK1mCuI zHoRVr(+oC(H3b@C~1#i;K!P{e+3J;M_L$>QXQmM`ZR^FitLA+l`t#@Kj-5C6?MOyA{1~O|$pMfk?l)f> zoyBMlm-h30fx|dJJ;vsn^Da9tlrYG_n5)4pos(k7ONE#8m_E&2m+McLYd-DzL3E3J3Y-r+Y1aWNGVJUXp8lR|z z7l^>?zgk;3t;1PDk|t}=Tj=OCApfZn3mKkT)p?f2f}bP>)YrzcF@SdaldwVv?f>*J zAfjPcKqp>mvk+C`0}_4(gnrT^p<%*OpfFU53rs|B0l+!q+tmPo)ghCO@=>60nH~e3 zY*~n5hqdqy5xQIr7I2W`25W>wB!wRTr;((P33VW8 z0V<7m9QxM=)>5y0OE+tvmvBjDze5{X4R%neXfVKEiMQtK)i^26h$gDEK=U={0wd6& z#aW1mN6_U)5!fUuLH%dw4FEj$(dFN30#?1yvDk5U}_C$;5$kRu! z5UqC%=00G-*~i4)wx7Z{wNbUVTND;I&m0X7LEafkN`u3@&*ZHCRyCHH)?H*8`ny(SRg8^zgJEqPPuo-|I?vqRU>zqt1LD^s;jyJJ_^FaD4%m(oZiU~ zOd7kWU4(g=-(DNlD*q_rjA<0vnfC>51L;ADm@7R*M4->D-D4g9$Sxo7@2Ri4x~HH` z?Qc4lccHt;fLgkopnpkU`=MRwFW_Y~UY@dJ_|0L#vEiVn%=PN>yl-T^2v%F2t;$AJ z&MMf7h|n&Ki1AH-LNM%?^amjm$A^Qx>*BkV*G}t2DwnyZ$P`p1#tMb@SQUr$vV!8I zE$umTS)MMPQbO>E1E@Z)Ivitc?Ru26ontp}qBd(KnCP$+{SvR zc_#7)b4Z+u%=*`FP96#J3EM_^^#1OC!q=)UY**$O7g1dnt8kx`&enS`H|W+R>h=x6 zoNCi3+=J>$1x$gi*UNH|gjN|n=qnGSBJiHJf%A`_hF@<8afxR>zw7KY zs29Qpd#3bRW@pdsXFQSYt(v(=Kzd2q=x@N?M6J+R^;2U_UIl*29b-7ufH6zYu2FW)?a->@IBSpR}`#>^meRmR6IuPolR!f=8`AES+2>2nFQF!QuK;c54E3z z#fi_iLJmON)Ex81JC3@zvAckKyniLlB=zZI9Zgz)_AO*s=)O$c^v0aphRgovbHWs# zE67eQvyqfM=^L9-*(0Td6!F_Ni2cMqFpNWoq&V=QoQdA}#aX4CG z*xCd>X-gD9z{5TC}yte7tJYcj~J*j$il06c$k2`wHx;5JE0P482Z{dGhEn;9bI7Q;j% z)~Pj}Xw)O<@SX!V@rM{QG$pxQqr<8ixcya)jQW^^4V!>dPH32wb+8g*eG>P;wTt<7 z;%R=K{iJ^ABW|uE@jP!a+PNNeZ0-i~;hWcKT?6Wj-W~ZS5pTG;D~KUiT4jX8`X~HR zltA;DPMqJlYWkdD@u=BQV)yZOAn>SqEp4ZTYUXaEENDTRTZ(4k=Sna9#;J{%MDI?* zfJV06y_=|Ly<%$NnXtaOuNgEof;|yh;Nrhw{daE+%4^tVintuP;m~z-D5u7yU(IyW z$qqlr0H?cBGY~cK(>Y;XaaM?iye{BDps|!$ugh9gQ=cdh!&5J9#Mc~B*($VmDl659 zc3>!S$&lJy{1>*wwcqaBM|02gQjdkwC$mqn!J->wfHB(~`%tQI2^Syu&bi{KUJ+kF zzdtWSw-3@4+NP+aM-qDbLOdE&U=pLwBo#)v`C+ZZ<%rwqaGZ)=;7JlwcH*8K^3yyJ zOhrJyMT=~gsbE;~p~ahx50gA7GO9o9GmM7f3IonA-~7rw!;sT1jM z($&Z{`;%=hFHXj};S?*k#;@j5uNE~veRA$}?gP;G3XG4z5O@4|q zWkb7zrR!xKc8x%|J`{F>O~_P>H#mC^oxGGva_*=KbaRzGF;0V#@nTI#oBa3(9>Qd` zg<|913$qy1c+xw2(DjAWR?^|qH9FMo$TEV!z@zQ{a$(WnelANrg4)z=vSR6uxu2jP z@ExPnJBMIA#?!+vQG@g|HBVP|cEPObB>Vl}XYl5wz>V9-tp%>Yvap8qcV9_idm{qeJ(_JG=8|MJFq5=xg(D@l3_v+aDPC=M09JW}Ch)X%XxDB%!6(|Pj@iMG~ zo?{EW0uX=5X>Ut<0XtDv$e$@d>TBteXel9V@mB11h}7AlQLS%1!SWETI_>F!VAaq; zO1M1XCjt-59L2#q;6dMqOWoSV__IM~ghbLR$w#%-5!13w$F>+{luR*kp{BFK6i&jHp8%f zg1HMs(J|a9y`A6u=v|~Gz2I4HC_g-yx544?Yr zV))u{#E0{c+^UfWW2iCaIoveq1L!G6SW0rCK><4*@FL}@jp*N?H3XDl)#&GRaJE)f4%t}4r~x9_MHe|dmgSd| zyW&Xrb_hqc6{4sDKpw1mJx zT~i`wYT+uE@*)ZLGdusHi`fbh`qws=g!KdfG={hW0LreZK5GC#ib9cg9{0!i8VQQ@ z|1uo-m0oxLM|xF@i+M=w(ATi*%e#~$$H=(f73_0yrfZZqiU)UhVaV*WfTxYtj5uSZ%z{Qy; zK;NA@J`JrJuF@{I%Nid2KBcPWJGPGYa`~em$%b6xPxtO;oZFf5INZ_6!x~PlZjau^ zwo!og!Y%Yi$0PfA(UFbU5aQ^kJGXKB^tGtUwg2(zsI5(*5%707K(Z@-bq$IcwSf^=$0XyK&fa&EQ!e$H)1 z2W{8b@apivPb4SX^wH%!WLX8=DK)LN_lybpe~2+J-*=aR()0HK8xaeE^S%Y^v@_*M zuAFu!)RQk#1%09hb~gNtf|-!VLxXJyzduQB%WB7prP#9AbB~1&;v*A}lZ&PT>jp z@ccY~u7b7Z*Z^$W>wztmqSpe#6X!X?sxJkLG=?oP)zx}sEy+ZVd>CbQEDB7R_3`Frd6i$l67L(Vhlqs76}R&2Z=9lcr$ zyQF9>h*7nGC5fm{XHKge2T7}DAL;>2etpFendPWur{IFf-X5sE!XJoaEd0@r&iy)! zx_LevA(fz9tj17#dxswU@%gm2{CMVS*T=&<)UbK~FD{0ridcn(B z?y}A98kuoMKNgQk%|pZOU4|C?!@#T$^||U^s{^p< z35tO1yUbwOsK==d@&(Rg*gsdNbX&AutAhI0H8o9~CUsHKr_yEN<4Zr~$Ytv~y=sL& zlpd?C_C&vpsZ;bxe}3~dDF{aR!PtxiJfguxh66d5W8Zl00jv{#L= zNdM4?&46E9spvoU`6vMAhT5|Jpb*2wd++q~ZtHdxgBDR!cK0+o2Lzn``zs&3QUcCm zFptQE!|;*UMKpxh#mS07l!wt(a7PWp2x6K0IcvD>VmDG#ed29{?u|eal~u+i+tE4L z7uiUHDRH+uS*No!p2i%0+81Z1>OMY!=u%&FV#Ex-;nO8i6d{ASNYaIAJ6mM_c(?mr zQNgM+&vBjxU7dMECrYt?dS*N<4O6B=wy^yySi=aK2#G5(s)K6&jxHgsq86@az8s`t zc^vdVKgM;NcMSO~nR8B~{YKG9rShI&^@nM1;v6C511Sq{*iMWbiXWvd30 zpCdU}TMmj#9o_j@jtJR454t-##8Y_ADqo+rB-^5q;Z34TnR(pu=(509iT^1JI6rtT z=5t%^QX4!LXazc{#qt_;-%E{UlUl!?X*;E22Eh^ z9!9gq&7o1KnE}Oy_yV(X1JcckIl0?J1?Im@R`7H>vRGg6z#wmum~qwlFGU4n9RTHG zdsi@7FVE7VjZ*ZBYe15yAWj4HB%lLG1TU>wv6>h}B0xB+JJx1RqJrl@5n~**lAuEY zFaSbk8POBU!WK>5+O~q8J(#t0(g+-!dBl(lEmGIJJ2V zq&EPF3;Iu(jC288&K^e z;O!#p{qglwIK+9aa<$n!v1wG;lXo}g`217Y#2dB#8=p2>(4#JwOt$%Q*QYl^-D?#Q z;b$mvs47+1X;#iZa{riJU6uN0@B>^X5czFm|5(X3LJ`GK_^wHJyCRDEvLToPY3BLdrgV z5ZtGoKR#2A!ShJex2tBK9RHI#NxnIvMij-EPi94W7jEQYcS@!!$JZ&fMMP1fda!;; zg%kcSgXYwQIbAW%b|WTjw0+l}>xk_~sG}Dz>R6j;-#XbnDN0I8o>idZpBFb^30RIW zqSk%vnGBrln!<}>C0j%=-Bp_Wj27sxquX0ujQAEk_!LX9e@~Cl;peNA?-umgkZ1iP zOW8In@%PTszmoNOv|9!TUjF1!ug2Exwq8AR5lNStK43*EH&ciEqavT9?6qayY{ICmx}+& zjjAMXY&x!>u?QzTI;5bCqlmX3pE>Y4NPts7%F z30b~}X8lu$cX0h@^d`B)btwtm8e1yz-Y9%Bc0UuHwJR9RF(yS!`fK?cNJ}*Yhn3bQ zmX4-tj;7pD3MpJf<&O^-f{*KlPNW?P%D>foX$ebq_{W)Grcq9KXz9z~MN{0EQupmt zMNiOZ%G?Qn+1v-m`Gp%g$G&HG+^%nj|ziy&d(_mN_>&1X(~1hcR*hsvXS}T#C$hi_SgUP~1BW#mUQW%={mxJR3hv4Fcwer_xAg{|Y zQ?1WkUqG~cG9C&*swvM#7}814p#(|b&UQG)Qej%}0H^2Zl@$~Z-Bp{1obJD|(Cu|1 zXm`=+7hnpwJe}hZD#FYO9L0~FQZdh~)RBv$XYTapFz%=b&Wc8rX}pK9??Ldfz+s2g z;c}EnUF3PIe#*l1&|Vcu7EMZ}RBAer7-Ol~)ey>pnyWU2GT7?G4-P$0B=bqMV!D?y z&R`x{w&}~=;R-BIcJq)xih1Ne>b;g^lC4_{2OY;(#IZT}Q2WmGk{`<1DGzEQ z-ak!cqb z)koMjP>hd-?z=hgIquv7mZMvoszULDR&Gua38EZ%QvclSCed?C-eTR+A}u{_QHKmv z))SL|jA5P5-*)!Vl`i|%1=^+C3-Z>BiUhmNSCK*)Z45*foq?O50~e6HZkSv)o7)@cSwMJu2(i{eWw-xWH3LBh;g%e%sv@8Q z-)ZJINanTGBNyC?!BX^c^oB2rnK@mEzp`BdD~1s`MkCgTz1Mc@k>1PaT#(J_a?auP z!1Nz-+bTL>wu3!OG0{ofOhRD~v?`qHxK?e3f=~1~h22LtY+wwF;%7L>PwWKaLNH;0 z5^%v_is{_e-{2RIHp$pq`mh=PBDB9DRyMNI%=6d~_rMuM=D%WS5g-&7tfe=DCAuRA zLsI1&u>2P0$fsH7!LsFAaaBa|v}km{a$0k}nx@kchycRr2ZaI8p%wDMGK?L^%CGcQ zrr`FPg^+oou;!}m0|SsL?k2M6G7M6#sJOG(r*@Fbu<~4e_Vd2dONl);Ijhm=mSjW% z>1m@&17X#yX-HU&oGp6!W~qnFdVUSh?tn$ExR&p zD!d)Z;Ouj&>hgM+&l-)*`3{pt6gUv%b|pqBN= z$Q08=@4QPN_T2sPVvgzSIWl(oV~*L}L=(YR3m9V;5@`SrHY2^jG~p@3aUg2!#jr(F z8-C$mM;#uh^4aqDV3Gtj`NzvkKD1u|u6hDAAW(6LlVPZ0N&Z(C3S?cK3?nYpqLVbZ zBs%!l%lr-zcuwgB$qL?u5nIJ(Ek=SbG+hNig%O0P0vjag4y6~ARezqv#X&w(l9?F? zBZi`-1~5R{R|Cq!mGbKrjD%XJGdp5{Pg+A&teF*C0r9vjNQ$3obEtB?4uJm-!XK^i z3OaJ;cz!>pa3Pd}Mc_$+!AoodvnSum24gwf`L9z%|Ps)Wxx99c98oJqX4EC5&-38%e zjc7mzq|sFhiP;sUSCR+~0lU~@z{!pBT#WbwkmLXR5MkGUgkh~=pB%X)llLECIHd<> zdh4GQ52%WO%DBXTNe`;XmaU1**o81B|EZfezr3%twUIfC)5x`ofW2!W7+3pnJDo9_P}s&Z51kCcv# z0*a^5=7TMmd1_6i&w~Jqg&~w4n5)nysc~)pn`hMdxj8RH-K3Iv6h{lMLsN_|i5Y=z zYdv+<0|@IYeW;7uxP&g-g(k+id6@2FPcP12-Kn>(EOc~v!Z~>9rw%vYHjiz?kxrVx zXeg8#D=Z)n$Irtke(vCgeujg74?SDpqku(bBzY!pwf1Uvh#byxWk&auPdv`SJ8@I^ zw`=^ZO9Y;MdfO>UqdQA8uB#x`L7k6+K)7Bh!+?)fjtRCt@f?}sQr%5H5>i4{gz*YX z__*DlxXaA@yt=Cw@Is>P+`S^mgg-(Ar6_SxfCZZ-4%6Gr(u9yvNuexMZTue@_v|7) z716evc>^#rVmvDp%m4JsB@+75kK*5Z>li2CHhJ0U%I(28?*gPOyAeiAW$;mE)BsA663564snY{2!>DoU| zuhl(?&dVhO-2Kh{uP-4Po}uX5aJxQ6Du#0+B1*{UVjwqd0Q|mrv7{JMRA4`Y*&~}C zvAKl`T*JiPgZJX8J{zt(CuCy~oHEIKK^vw|&NPn&74{6r>MM4-3F`Xhm@toj2I7M~ zUf`q0mh{=$XpB4Wn?&94eqZzI5FolBI_`ev*}vM8loCx5Iwo-bX8s$J<_xFG)x;3? zBYpW{L%efYIrlf(f9OS-av&+w_Lk&p%q^>0xsXFQ8g4-N7DNur3fM1aSy$)Dn9cVz zf4tt={`2OWy=>gpWTkNAaULgW{g>c*x85HSR1F%-E^Vm=I^X)N_|Qq7U&Frgae2>s z0m{ZAIg0w)ZoL9MHN74|W@gGStf|V8TzzMQFm4l&!^K;Iw`@zfGU2po1K;7vj&^~! zlj`!>1Xn%kB`OZ_&*V(_%|!T*cYcLmFM2T7-UB@HR+6dy#(-+}gLglZOV_rTGs#9N zd^mx$JeRvpIj0V>FqE<={8j$40JXi}AR@kZHIotOfW?lKS_$ZdMQh~ICN}-jyCe?0 zYfv+rF5wr4^XzB4|LGm0FQ3*hQbOuwB3g7;W^AYc#Q4-aTAR*mADJOAI{fLgv4`b1 zhFLg~AYirbaJ3RxtxD|j4yWVih`V8hiQPV->hkHIxEQ1>;L)QYKyY&GF2*4nmtvB0 zGkN{KVX0NPmTTVgKEKjc?yz}$S43PJeRp>48jJxJc?FEnOJ`I; zM$6`8nv1LM$!1B!(Thd9Hm^}xVd!&;IRN%d*$r$-uiF3dZP1$oBYv(Zx>hCwYW~E- z1}cO_;RbheMK5gS_^yo5OtUSg3K)f)d0VYGmca-jY@f!YgZ>4aG`|*;-pWvbFh+f6V7!*(JKOJfksBB9HNYtF_O46=zL8&-a;mRe$ zwqpqD^>ONNSw z6J9xS#W7u@!a;z(BtgimagsEEWWjKtyYbs3v*?)|gyc3SI7=Kq&Y>S6B+G<8vq}ER zqia7FsQyGq&bEh^Y12I_?^UaXQ-r+Vm&tV2cOH`HZxb*O_ypPH$!?+VQd%>kg0k3}Xe@0rByK zKZc7J`=w>{XnGjX&!fhXGxT;9pWLFH``7w;xSMJzB2x@Hxyq3401vlV?W)LiOYu40 z$YgSslc&x)XL?nHt=o3Mg$+Zy&|mU%JCz~5Bf30ew~bZZHK+0SHrrS-#rNJtGUE}( zkm?}f&iUhuKl8EsMQazs)ySVsFT3!vqx{>w@DyQl@YEpB^~W|ZRM=G`SGJj-ceTF# zkbN|Z*X&lhG4o&my|Wwn`}Jt@htxBB(Tp?cov_6K;?uNFlxuI9igo@RGH9$x9OTN| zA%!{D{DyXER@e?0VVUe6(|l%8jLU{CsFB~kI^aGP9_YUHa%vTzUW57MgPPlGW&-cD zQ)K89Vx_mS!vVEWi)M2&BA*%hXNj)B{4Oq|=M3F=aj}iiGyN&za}LWtoq0Un2s2Mh zwk7I9?I6xtOnWF@2ZW-D>s1z_JrvzkUHsw5GGVsdcH!?c7cPG(oxdb)Q9xA`<6Tl^ zUfuMe)nwqpw_H)Yh1s96#iX;*#R}nL+s8?atAx;icgWS?(D>&YEFV4GJbj-1>-4VK znaQP0(cf5LXSekwcA<-I?9cZ*ZjhL|`~B+;$Haf7Se^7=I9)XQ7<;$lUsADcKSt^1 z=X%3pK2+BJ7;`nvJ9i`D&WGLSe>`XJJa=nV%*TCy{`mi7<+9&7glN>rJ#wDdHEB8h zhgJe^ngSA6A{#2uBOPcm%g~*+)3aM~_P=6g?=~oA7R+u2-tk@LSTExgiG2)cybb~8 z{Yso%Sibp%d&1U|uGC@VsH$s4S3X)zZ=~7e~sOEsHH^B>aX6=&s3?KU_dYuoHFYEDXxA zL7ki5t9z&NFEn{=<`(6@olD!)E1NCovf`TQ3q}&FXSJgxzgm^UqTSc%2L(U8lI>y>}i4<3(#&6@8A0PL5E&|sX zP{E1+SI=7WpV3mom2W2g0RMyY+Hgfy?ZbKdaouu+_~(p&`?QLFI>Q1STMx1~Fig(|#=RkjBAp&_`>cbVwkO~7I(_V6u{{Q3 z4EebC_{sEp#7|pbHj8SfrnBRtX1#85Bd@@cbx~#N{5JZ~MB-WFZN7&#XrL&WPL$0L zbqxw{XdS-kJh=(?Sp61nYmfhiGspy&iyqMxS8ok5o#qiE*u~8@e`XX+28veSUXp^g zI7>*0^6qo+%<9C>Aj^)P{aEyu&?ooINhaI2z0$mHWbE7*nY}=3^65wqD=BT>ZC8Ee z|v@J5_yZ_mE6B5FcT6rPBw!zrHV=J-d-$7QS-Pfb(s;fxFg@ zE0`QXIP?g=d*xF>&l2SI4P7Djq)r>b?d*H7{hRs)(l|7hs!O6k3DVvox)T;&ICUkz zaLujZQNE6(7Kh9W3`zf;;)1OALjGirY2R{c?S%KVBi672*a0+F#M_HF zeXj(2!HQKzx!bcb98-Txk8kFu9XTIJGz?3~GCz4z?3{7U7fu;vWx1kuvX zA~UA{aOurb|JbfuJ_pZVN6nKi>9bj0R&kxr&!qS0hpty%L4~{6liB>hIJs5Am^;bC zmeg(FS68#)50G3B-os^l#I3bVHo4L7p4c>+&AlKw{x=8A71!R38tjigC3ya3VpKin z&J;GNCjrFO&0VFrmn^u@8+}$Azimd9L1w9WXz}%R%i%kJI?r-v9CV+WWZ25DjbC4M z(=?b|@K?dZ$KQ%I1@h5+XH1M zY-HVY)+IXcxEV_hH@3CGyhJ6MrIUm4GK|ZF6x9x! zzUW;4E>v*Zu%*cb~%lv6gPzv2v{L9?VzVM!%`X z*?1aFJtrFL_Y(FN+^J%qL;mE%^i!FnwQ9et-*~<1Z%M>kV~?F~+JRhCM)sl4?Y#L-=YJ!%0EHMY!bqU| zZ}u>Xqm`k(*hm(pbHyMh9nTaP)ZSSjwsP6P_5vlKWG8dO&w)nw@0Nn zPtfHNP>anZ@msX@MZH!<6lM*4wY{cf`g7d5=$u{LCYfxxD3yx*JuC9`q4K-sW|lJ! z6>gcVS5^FzYU?#6YpHANPIt{htM-mglt5FoLNAX%ErNR>)P*Z+#4^IIX2i>yqS-tt z;4=}&Md)NNighc(X)|GJhI)FsuA}IY0#zp+%6D&&3YR`){?H=!4OtwXZOMZ{KTMVl z{zIP+JmvNq+E(_GEL(nr!FDt~?aCYhca$|JAJC{??9#1(>$qS1HLy(?sSdPDc;6b4 zALHTgSfBK#=p^UT3_2SZlRk}tKsR8-^eKtdm+^r{+=IU~rjsXb$uSEpV9qLT{=#?0 z=uG<2-ellT+Xn%VQeELTI9$%%bhN?x`2M1{6Uf=P7uJ8gcZA#Nuq@rj={RGdzmS3Z zHNXAFCZN>@yltwFFIJ9l3fEF1^Z@ZH8y(*~O83J^E#YjGMI9BiRSR}AH868kaxJe$ zP8p!XF&ZYoq;&_0pm{*90U^`@sQ5m()u8m$Yu7GnlOBI*!fDDHcKt<#tehuIMI?wk zJ=$Sz1&?)&^g{xdJT7P(E~k`j4M!KTfs~2eC~G=^7-uUzGXb=dUWZn!Sy3$Jlx(Uh z!G01}*oy;4L$34oMSYM>mnBVuKCqgO9=5q#6;((~2>*Cv`6I_YQ7aq{?*BS{k0($& zuW)eI_~(^#C5R<~!#HQ)^zsw>v-3Z8g0+~AyT$M_3sDMnU?QvQxV}6jhcUMkG8pL0)(H!z`U5BQp zBJ|){xNEcAAsqG$FzX7-T_N3;Dat($DYdln8UPhcQ$S&st3!HX1PkvnB)ni$s>DM`HDPXW(G*IZ>{!E9vV9GT)dBF}@!EnhSv6zkoO~?7}tV;&9Y4 z61Zc}%vl&2e;j|ttMJN8_*P@ig)p;Z>GoGTaNjr>ER_{OOoUa_`^4t2!ib|1bdppx zQ(|6e4MK~7bR+!XOE_I?cI6?;i~ZYq01yM_{TlNHu4Z?YfI_RPT7`i|15n!vsXPe= z_)76_6(S-etz9A64pC+q(%-)FU|aw@MuKN*cAkkN`Wis7nD}2X1-~}0wUF!pz?c9N z)-GHNrP)EY=s!hU4Iu^KPs^?TJUJ>v`R_CvQS5Wny?DG-Aak^3X8ZrEC^fm3@9jT1 zV&h5a7r~28HTNAtIW1s3GQX}26I4X*U;Kdt^Jo)RiebBsK0HY_uix6Hda>7eY3I?U z-|yb2s$KOUE2a0$i2)qt2j`P70b2>b7jBd_r`12{_D4TXe5Kz*W19SaOs^O_SnNG_ z%Fx$Yh}Kp6Tor+W4;B4fc;o|ri>jh`FCSVJN56kA2~$`QWm!XpBQ4w@ccyM?P@e;p zLi}Q1@=YBl^W z7bl7C#Lra2lN7U-&&YHU0&d5OvUT)quaM$@QUO17Is0CCb&j51;6z(7R0#iL3kl_X zn{2OSLHL2<@zWB$w|9*XnCeP7Ea2Prq>qNQH78T31WS&tJafP1AcZkJb`9&+foe=( zYQsn#wQ5!b4DB(@oyB)O*BE~pvr+BvoxO@oykrBtq^Hu(JdfX>+o!jnE*roL;0V2J z_nMLHUi4m@PqG@yUjfhf^YsA!z;8nW~AFB|FnSVr_Bga zmNAB+mk<7?!Z;iIj&oKu^Q9L)Mpnbk4&hhFS!D~uv1UUPAN~$zxxUAABKg@E;{2o~ zectmqq?f^9d}VnL%2E#VrLFowg1xqAkc4a>R9kUto8^QX$ffT)0gv;!>fq{Jk@Om| zLVOcH2?ctuD2pX(+INqL0rVx$dJj&O*=spR?FF-twDZ7P&6m`?t%9^0bZ}`QXRS#_v z>;0e~0TrFho2Kq-)=#RJ_mg}$g&02)5T7UmN^%se=GI~uemLe{stD*&2g||%Niufl zBghDEF41hUu2*0JwKkK zGDV7j;>l9Pi6sXqlVqSx)MH-g3ONwyFz0MAohvkFS90JdCr1&uiibc9o8V~GgJn)! zVR^M;Bb(P1pIsx{6W*q9D}yO7JIXKP8)5&1q*2jynGL#4<>n4)Vf%c^LNmw^n-BI7n&IBe3lNxLTU*NS;t_+dGD5 z);JW*mdG6A_159z&zx~17u`v3s;P^5u=8^iWSg-XeOVK?By8^az!PhzANeShpHSXN zCp3JI^tl$$x^%(48P(w+<-%t?)+c7!PEnozb!>D2!XWC8y6ap?Hz7_27*Gce-DeS{ z!rB%tn5qY;i#3HV^kl^F_dRS;=cP{~5UiLJ?l3JmK$$&)T2}QUqTN$lgb=4BNaBOQ zPdKaW_w*Q7F3p}tpew2m_}d@m3N_b@RN@pQt^0S5s|ME$ZbQCTU@AYk!dp^P=4)jh z`xuHDFRBlq+<2q5aq?owyL7vzYjzU$CP6q-w^}B}PK2sACBo#Wh)&`Ob}P#@14Guz zAq*|JARKyQ?~soRBGoH?jKsQhWCW+RB9i^Zwl+23;`>Z_-qzb-N$>EeP%=Z-!bMyv zz&Pc>WS+M;02P$Kv~4iE^57n#^0_`p+s8j(8rit;yeD_N8AZ9Jt76MMU+7-#y(>27 zKJnC?7r_Sr+4U38!QnY7cD2?V{`NEyIsO)!5+leQ4tYQ~ysp->m3rYFJ*1|_qeh3o zw{w8(HC^Zk0T%DNWxb=Zl(cdoDf3f3Fa!-ig+_!q1Yi?}!-)bh(v~z@eyYuh+x&<$ zU@IVOd<8gF8{<5Z$^<&?)9qPZN^dnVWle7pDSa3L+r|W^in*3C2BEy>6k~f0&3Ba( z?6#Y1h0|-`*6XjkLfnUY%GwUkz%`tcXBx`?qJ-n5MGY3v8i8DRTcC_6{_%cz2dS={ zb5u0VA~uEinuMw#SM?|V{9mlSX*`q<{P%m!zRz4UwjnYzmMAio(8kOdvc-_1QjMjk zRHIZXF&l=+SSoEAqSQ|{q)n&ysb}LxS9o-@hx?#yuocd*}J$>imwc2=7(-q=hpr z+{*;*7S@Io3HZU1%z#b6@2qaaC*uzkJ*R_n@22&q&ObbmkL+Ny@KW26mOvXWf+L>< zXwj3M+Dw~N#eSwQErUjyRmNWAi?5&he_2j(6$no)5L{%Xhtf2S1us;?5C5!| zP(}d6NudO}TPbnIa)_}ajd1Rtl4+T$TsP~0W=Ae=vSl*q@kQRo0td0XDx$eV*@0>R z#qN65laF)7w7u2j$!w?o0)Fd)AGajXvxmQzOX!26({46H}PHI zws@06Y*NDbrF&OJZF#EQ?Z0k&BoP3A97POy#tS$NKlgMeoQ zAXhtSF%iJ}^c_M=ACUWWg{OReFpuh`=+poIwi>uzQ1x+ZiglMe`@oZ*0 zft|`{vAKW127u^Zsrj%ub~n9N3e&3djH9QhMM7aU`KK=X!-luS1$3UNR)~RjYq2)M zYM7SMPU!2|{_NQx#V`e*0A2U1F@75KN&{tVACaxgIhzP91+r^EB%~TJR}r^r@N5AF zLZ%7;V4HgTg`-3QnDaLP3-ND-lwvV@n-Z}Z3cw&To*_L;!~G4w0Pr^e136j^V0IA& z-E9p4SnpvOt3EP5%B2Ss1GQVv;Qp_%L}C1$$;@!En|BY@3R5xBx^f>I8J=hyqN$Jp3c zuk`RD9lC%6Th723x&WbG{91*9zzVY%7!wiZxEce=#~}XK%wY6pB|sjg%uoTZArOOs zGJ(MwEYN=X?PuHYemY4U2enN!8xlI?2BRV7K#T9RV<6sRIQK4l+QtF-c3{WZXz~V) z91>1ImRWN>A{#1iL8JGL1}QDW>U^zTWr<3d1@zaIWoMZ6qK4pL)G zRq+3kd#j-2`#{`!peWY7-07ug{J?3=jsS?vHrDW%h}Zn91B)jaE=|myt(|8n)n;H>1(6{vG@>_vm^k?lnXLnqy`iL@T zQl};+z#f5X#Sm7j~TwvqMK{I&X+*{;r)wox(g?`gV3{E#p zbDIuS9-g1|5|=+iBb ztLye_*HhwY6XV-*XzvMWL9Rm}?gy$HbV#&r?nXC;cy%Vhy@QozILiuBh-QFxSVn#+ zQo79-)aPZ>4{Vk47FNg$vzS%K@ln1pdlJQ=)_f`2p?5S<>}=W0$2mAOb`<~ElM33- zfv>I&a8Nmcg!Y2w+uSgxtwRY(%?p*_?IJ?6v1R*C)K*Zt3)OifSo}UCbjFrKbku z>(zMy_D+o<2bAO)a&yLn=d-$?b-Kp^_t>zM`lvg`#uL1?xAmaAT_~SGR<(tiuzg&X z=vY-qrT&Pomr1la`2GFba83Bvz<^z*Q2VoJ4h?4GJf>B;kiQ=t@}D>Ua^$Sz;wVi( z(zgFLdcGrqqDReZ+7o8d1iUEoqS3wHQP$=hr#B%)HHG0 zoZN35Wp{NPw2Ew?epRQ0Cs>_yE@A?$=yUJ;Zw1b)keY?3Zb}HS^YRQpK6mEd!0gno z)t%-f96ra-u-0=WJz{K!qtU){388J=*m}f_f6b=cA2AN0VJ8=TfL$9{2@G)O^TCUH z4;v3OF0@RQ*GB9W<-Rbw^tIiucvu^ZUbFR*b_lZ>s?RW|BYI=IRZW5whGD}=dZ??a`p#R6% z@KMSz{fMm>kA`R^E-^RM46GTy=TF@7Y+j=jcd06N8&nzr6%t^W4p^xpDoGN2Ao zK^Mb*&(or}tTJ)sET_Kw+BDxSD2Pa+~cdo^l>oLKqzt!%aPLt&YQxH zdaKG&1dk{`Nq8HN>4K#i4f6v2r6$wpoX!&D%ltH~3hQ0phWSASEZPKl0Zs{p(G00e z(Jk_n?wWx0abgBdj)XBZsBHIw`2u)&VA>>;)9U7&?nGo{GXwz;%LwtO@|>+S#9!>` z%#ow{Mu0Rzl#-}=C_M`e;vVu#m=)uz#jUv40V5njY+LkRCuN9r zFsAmyYbARwQpikoEK6~+m+O&lxoYMm=VGQ`=tf|CyA#}ARPH!fbi7Os_`2`ZZ$ndM zSaOunZ(8cB!=9xnzNADrS>ES2*~^amQo~J2XZT?Xj)$Z{3=;+@<~B%Ui%b2c)rgBAy2voLH}4u+YB91oJZXK~CX zcf)5bof;`iI~Kb@Ktn6ITFzY#R%Oyg91Zaj3KF5s1(pV%hYM8b5kA51qfu+Xuzw4c z=q~`CVIZuqa)%D$;oh9Bs2KzIZSz%mXt~NZ&03g)v4oTON_n$)l9l}*=q-$P_DM73 zB%bc?!js@2)FZ6*)_JL%J?V$F<^wE_PoD~j5i2ZO3y&I+Eci8}8D~4Dv?DaYX;+G` z5ZMm8<}viw)5oeEEZMLi^D@%rtSz?nnH{#fd=b~Sy@WR(ZC~FWA~mu8J}U`eaxB|0 zFLpD|9?X3?`DZW5D*R^_UC>9J%)M-1-A#sbc(x;AxAc`s=ojb6?30rom3=p#^!7fQ zcAykC_iHKHi>@gr!sQz$+h0ZR=i$6nl7vi7YlQER+sXhOD=lWf$Kno8&;{x45;qsk zgohIn5f09<;}exyEIbMBKOaZ$AJFb5%-MH*>JTBiZmK{5K4A5K>*^onm`AjRrt_|! z!fQ`*%M9}vjJLM8RBkHoMi|aie6uKFYFG$Qy56wfScw|b*m*Fub{7>WPxE`YJq+{! zE(vKT0zB;1#HD|=yqZG?9^F(v`QZl7{+5fIGdnPuSc`8fz6aj^B{6~Y1cfT3`{ab& znYCQR6b%64=c1D1t2gX=Gt3DWFPqq$bomP{b}M4Mft>cz0*Td}SU^JJ1`_eD7vVWe zmna=|`*P-3?VB@CIPGQemxo%v%?>fHlFi}VYq!q7Fqv~uPU3KASM7O8FHaQjj9Y52 z8Iapc?+hkn-QCc{kRX~Q%S{>raKXOaCNb*>%QY>wbF+Vjf13L|E2kL3{SPki=88#a zkPje#QBKz_B?XxAidT(xrMs4r3?@SX#z*|DB-amReF+^-8?dCHn;RwDo!{`Ggu6wA zG)YZDs{a`?{U!TWogthciS$Lti^r5$#Xy;}jaKDReRAwcs;CBr`cRuQy&o-;fodiA6R0rICm{q4Iwg|JG zGsT=niB>0F1;}n+klhuMy?wJe62il+k{5c}EeoPhPfQbM6^UfNsZuD)zR(kQ2(z^U z%xl5U8?hLArDQ^cd1HaUt0x{;0|Ws5T2I+0%w~gmiKE#IhtVk)v(LZHg)YZlbFwBF zs5d|1Xt5uzGAo{uU)F{11%U2{0BX~K_Y6_aj)DCBvG`>Gim5=!blzMb=a^>OWtB{8 zfS>=FcO!)ot=LB3pb{A1hyi%RC?JZ6RTu@L2k8Xpa>>EtZMrGl_x0JgK z@nr?J*=hT0F>U~ZuG@#e3(yyZ+l^|JO8vjA3H*R;Km{E7&m5{$!t8%HtB1sM7N zU=Db$8QGw`llQozcY@ID#;AF={(-1j|=FFYxmoUS~*arStR#M#|9?h+DL zzCx2db=gfXmU_keNT>M_W`sa2HZNT3A#On`7 z6v&z*G|B14wdz zFF8F<56jZ0&@usjO6_2@!u9<_Ee;%Gy^7}bV<)kXFo$*_VQVrDlzhD-vgXB}iUIhE zbE56b+UhPsEP)GrDTc{&f$)@9}3 zQo~X#aO&g7SJjDb@v}ROjZ=Au5zoK^`l)*k|17y~iV19T`c8ozPLs+=iGu#fTEtko zY+q~QYYL1W@|tj(c36U>U1k4{v<0?UtqX$$yv~v9>b_{bp5LTlkh4pe!al^ z`>hdA%=eMAkQcv}U}Jr_wq>DtPWA)qL*!ahB> z8#(5In!4tU@tFx5DU^wDb7J{KLRjW+BBAX2$Da|@OtBBQ*|4tE9v<$etWWTtSb%qG z7(8V=S*LSmFPc-niQAfy)butq>L{`;7yPm)Fu-2od3M*p*9SM$EBZ+uSi5rcakD_p z=l2NQQGBQdvmy#74M-+nc2oMfJ{LUPbY`nl+^z%#JXMWxd@>e0J6QR?{o`L{aGeO! z&HHS}hHM80*5INR9C$KmuWg#n_jh1zHkL1J&QrtIF~YGKl`s75OLNz|--3CTGs0=z zTC$a3&OssXUwo6o?oe&C4F`pL{*&S!uSvEJ-|tT@EeO}$mQAjuk>&`!r9uQ^|FG#5 z>aK`&8vwjLx`)<|9T>cYJ)9CU>lgHKD~gIY_-@Rp6bWW3-(K- zA@r8t`C@fpk;-y1q+*{M;t*Ib%k9CgsADn2lUF5^7W=lrQVZ~KoscG4gR_>rCesk%_ zJQqX?mI*`8D!nql@~aC_oXR0=6hAqKgLiz}3km?bcOVCjEl-`bmK7~#4I$0f-Saco z@)nO#nG?YQzEql~EXdR@mM+6iO+c7nBWkdZFvo9(ID}Sy-5G$7>q$)9)xk_A_hU7f zI5w*HQA{oPrQ-nBqhMw|7YEO@#SIm-n|~D5AZE%ivkGZKKt}gA$X?C~0uyzE2#x}A z`Skl!E61htoeX=uD;7O4*(@X`{QH1)NCd~~I8-n7eb4b%5`S8O4` zgd9Cg+i8!(`R;M((dA9C8Vj}(e<_|&p$Tt=!Eyz+v8^%>%d!2A-1Xa952IwkECZH4 z@Z7@D{Za93vbbv(+!f|iU0^I9)imDjB}yXH3}*~wd;$Wi;lVrp;5qM1)@CZk_l-bZp+X?oRf3^cEE!7k>G1m5qYd*~evN#?|O&Z#6hE zanm5i)$T@E=ku*76MYn7QzqY`-Go|-7ZP7RxdClfSD61w#E~yb=}3J+#9h_Aw`2Li zRGajwjDT*MQ9JsK5e>H*iNX0Td*CrS>g(YO)iKvE0Z7EX`|Dlm-%Phe6ueqj3Lm!^ z4%;uM`96E6=t!8qnE#94V91^Oc}WejsHNW_@d&M1gGlGJVH=*Wb_A0?#63ci1l-kO zNmjUnSKnjv3VxhTV?9{sukjG=%mu!}EJNyNuM)bhT{8OsPDN|YfGq6SXHR@lmb4B{ zi5$DRbmHs(tE;W&-;Q0GyMFBo{}k(Xf+2Xq#zjEhDZ85eTG2Uakwo$S8pHf}cfhxl z5?abo0)dImGtTIQk}48`-z*B4nM|3RIR}8fnSy|;!~jxlM^EO+e z5{dyVR1QLmfU#J__*>!(Fq@=9k7=?RH2AK+IMlzaRTE$bv@wM;;}8Rb7GX-EsizQW zVjyjX=vk1UOD{R50-&|)MIp=`01Q8+LIIhrLmL6y54~hP#1`O?i$#!4Hb-lqKvnB{ zHg=jg2hWiQ(b20^#NC|i*ZH|ybyz4@@)bCv4wCKwKQvI@L=OX$vHvDgXiPyeL3txY zV%5l@0Lz7#14^t`Eot<@0t}FAAmPNAH~=Nk03Ns4ux)hWEG53N3$Yy_8x4p|0r|zl zzhj9B2&|yaXM%{PSQwN*iF!0=kdleb@n_4Mj^ps76sXa)8Q2*FC`e-LOwNux4KQM$ z3<2o7V%mz-Y<~g%+&oGefHLX;CKTF*z;Wnjtt8GB?r_(jlR-HEkY=(ANAz%^c*jge z{(da*Lzo?>L0^g`#~Tp6PI!Sh$4yvxX&+{cgMM=%AHvhNrr_N~Ia+nm)f6-Ysvk~) zUBw_&Aaa?e5c@wLV*Smx)lkCy?>(zhNW-8AYc5Nq0r(u;e=@Z^*F1Fs6L&e7^_bE; zPzYqG^@6|o)*(pfELb@hC%%3SHXUMW-6$94uh@e>btpO!+ffx-;*dkec@WpNsXj-s@1oaT%hdlTWTC z__)IsQ@gJLM#1>nLCM~Rg0&)`Ds7<*EDVmQcfI&dn#byS<2W+!L+_HC_1mIvzFf=7 zo0spjKH4+A)V$)vrVArtUIuTrlV~Xs>`LP?eFg89SCw^|6!dgvbo(YFXs?hL)+F7X z`-+%G{S#x{fBK6KC&%Hou88c-)Ps6fc-`els@F#UVYf z5O%&&=|XDa^Vi~fc}eRhgc>{Uu1sCo4&31{+LFRV@!-9Hv5ay7$``rWPY`K$wmY&$$&TmpPLaH|A&FHkE%@m?k zrYPlW{uXNxRwG%oSy4(`i8vZ)qY&i=+NBC(YS&du6L@P638?G}qUU@5Rj+S^TGe#p z%A@?0Ia7KaH+g-l3+z$rDGiN3khk5=M+|j2xmJi^?2oqrq{rpNj9jz^eQN3eA} z>*gBCM9?++FTQ-ej?Gi_JXLN9q=suT(3-Dh=39Ey zQTbt1n(8cH1AMV*Kg>o6#D~u_mQx+pC=WAieSovGK3nYMY~j<>XrCn+FAjBn zx_#NJ0J+yheuwT5o6(Ja?3;GPb{_V~l?bUFm1P?loYo8YDB=ao@YJhUBcur?EN?oU z)5_8u_=H1R!UWGIHu7YfeRnfj>4+crjf$C1r!&v9Zz31gw2*GDC6n1I&K$$>HPD}& zY>$H0_47qN#aritYPjZNpW4euhhwqCbYXlOjv1-tmM4uMI7|z)Q)bM91(ag#c z#ui_Ry?0a-bGyNI0=mF);>tpZoNbH7s}HHK?*d(Ga5T?B*j^!L1%r#50@(#OVf7lYGGSqGgPW%T%sdCnPjRgzE{ zoj**V%#o_#Arh=(fnbmL!_i!A^&#)5Yv4>FrZ1qv{-mb2Bx0l8^y1ahtn}O^(opIG zO&v!mMv!P7wgJIyd=pk4(K_ZB<39G8a!I?(D0`9fz`WNysQAwK8XMpw0f^p88_tl0 zui&}`zq5ZIWEul2B{ZbCU+#iPYkc29dKv<*@a34nlyZBtNMdeqWyXp%pG>3R46pXg zmC#32kkAys;gD!L^fDX|nFvNjKy0jJ3{UD3%z@vDYxi_~30t-NhbQN=|beCj@r2#n24CbWy0w#TJ;53p7-==$a-dX_I zhjVdzKR)hQADz&cv`9*;b}jBG_@>sju%R)sqf|;X+$ragO3RamSLnpv0Ga*98yFa z+e5md)qLoER#C7O--&>!q}0|-Gi-NCKsknMGkX+ouyWDm^T(2dku$Y+b{-FrOoS0Z zS98&Ljt{23`apP1C!MW>n}Z2xXlF{MC&8Kg@)IsF+uACS1)VOg1ffTT(sZ8_tJ4{W zsS@3v$D1n;cblv)a1B&WDzKeC3;TcfiTFW@j=}zRJ29@1W-S|8ZYJzV&_GA0zn!^zisdVt4(qHD4JBETs5DwgHBS@0&UAfaJrT0bZhwSc73bDWMwXy>n(( z)w|c=pItAY-RNiuolMoGUO2??1Wybsg%hVi;mX;2M|6);bMD&^SVEUs-L=823t#vt zf+2pk$3s3Z1A*G(E5;n-5Sm!`(TC}+3#Tuaa(8G<@+RtCjJVHU1jtx%%Tm&!0~_jK7m+xfy>* z!u|vtdpi2Y-)LCTji(PBB^Z3#b_*8N<9uYO#1CU=XvCO_r&$HOFU}gQ)3Z zKr18>p@V;rNHQR**<#(#Y0%5{bvh`WqSvYMd1}H9l^B|Pn#4&aln67G#9s{$0!edK zM0XIyg;FSoTqlq;fGGSZB29HeT$f`hDkImOz zz)uGx(?$51dO0PSyjut}H6RizDLM?iz#tZYWD_BtBE-f3=&c5lN+sb65V|R-9UvNv zLmv|Y+jIy6M4(lpPAgD=h}ioUB{qnEiE!IQ#FO{rR&nT5#!kqPaCQKw6l2y4VSgV9 z0F;(dY{K5zAR;eyg1$R&Tu&5^{#Bm!za_p9Vw)A%S_Uc)T4?Cd9s=_HSn^cp#l}Tx zv3@re#BUSrgzDZJwPZ+G1Wh>Bi+A4DAnKvR5=-=UPVqnrFsv{Ad=YN0-U%VeJ~`np zf{1744+*s(c{e0E)9u8mh;v1lsf+(h6Puz~lO&j@pBhp;GSK5RvvU`|4=a0*din9$*F8KS{EcS?caMm;6qu@KL zc0u$-aaS};x+u}s!3yb!PW*5rMqyW$fejy9lkfhB^^4{ygTj1{=i)K_jSm5f7nq(q zb$k2UGb{);YsKz8g0??KD699VJ-1=sL|&;_@lketzEk+<_R4h;7hdQVZ25|eiYr)a z*=XiC;3g{{*1PRB>JEx}3o2|u$8q}AKYYe6+ONJKX9tJPBhNmZ86ehJ?a?6hnrvh! zpTjS2Fx6V1yekE?Fw&1o8F?~5MZ4Y+U~^63u&BgoW3o26^{0JpB+6lTbeN{7F}?tG za^nFr%eFX`ze{bZbr{_*MqG>vRrh;>@JCkcNon&yTJwooER9kC9cWy=)0n_(LaHAJ zPS|s6I8B<>#{!kKMwLcq@}xY7VHbHaXMOf_}*U3B`PGwI&x#NC2Yu{ z8Er#{-Mc9UU7@vVIzIG)Baas&UT9|Hkq4U0G;lGcp@j=~t>q7$I6!?}TgBfM&gInC zBpO#%^V8?-1KH*CsVf3E{4oD#=|o!FEq+Q?J`b4>b*pBNvqDO}mrT4jXM@S!R9oTp zI{TpcY4CrV!&d9&MK+~g_~_qLKiG3Y|D(CU>fT6ykExXxgr7}a(zyO|5=kNjx197k zW0s$>Dc9`@ev|CN`0m#f46Wiobk=0+(H>x7_r}xoB~4G%5&7{Pc?bPbLL1u`*Do=< zIrs!wZ(DMoi<~mYef_d;6Pvi0oIe2tR`%b|o{+ZuZD7C)c+z!K5oM^0dgR}a7eZ|mjE+k^sp=Vg|JjTT?!7G0*sIW$H653XjB2;Q z{yC+ioW;W*e21-2Z1_8jmsb>~e$LsM+$?MT#}Dci8QtW|U01j&8c8g%y-w)Q$7W%! z^`k5geYi!HNAfimSzbALnEhGPuY?7pLNwm0!W9C%ZA0(4zg_0(iBU+d<^JGwWPb=6 zyWt5D^X=%7P~`WkIrTLrBeUdKc@&2sV2R3%~Mh<#2Y?HnOvhZn6HZpfZq;N z{KLQ&VKc?~$f&l@3Oc_?@TJhnbRi}=mUC`r*n+nU%G|6u7U9Fv_c!Ok(1tRKIRsxtVk7?8S-@U9O9PfIfM7mE%BVXHM`-^qtH+#4!L#$~dab=huS&E|5O5Ttm;V=w>R_EsD5}CHv>tO_BK` z?Hy|!>*mxk7doGuKfn+n_wyz|uUVl%L&SZzUpvZt(JjHqO3z_5h6S96z@J2H8hw0e zJs74KPqe(-fc09ZLa)9#%o^xlh0Ie1bJx9G|M{%Y%$8@Axzw82rGUWf>nfVCP*o*; zsWFwGKQ#pqWWici@aXT$bI3!)`I!sN!{mrfW_&t?OayU#F!(@?*eI+Ibqy`uBOO9_ z3^?VZb+_e39MUu5%S9Ec%W|(I;z`5X&}9cot7+#L@XX;eVt0(asljpyz1Fb<szc$>lSGQiv_>UU zVuA#UV@(xF8-&uMO%X?NH#+>v;y{+M!?b#1C>Pguu`H#CL%iek(OPiu@qM%_Gt`&K zZxCn*6TMZlodCkpmrM2dpXXQC@?riOb^alJyezP`mZg@l-|um_zpm3Gf{htLMd_RtTt5#cb|hOygd7JV3j*be|jr<@EfM^{2tVRUkACuL<;mvB&4C( zW7cJS+}_^i>;c$@wYtMmo;)Gqvsi^|)Dmpl;`?wPiEEuSa(9mUu6g~Wa6vAO&5u4pvy>o=ErlFabu@<#p073=P1`6AvKmGba^TGu4*;Fw!ICK1&G5Lh-j7G#DC*;Ox<)8A zNxl%4dVRE=2cbJ~UsGmSBGue6abrQ+Wr`wn9QD6hkazAE|e!2~ppNadU z2Q1G%c{X49Q(z-pwQ21TGN1~3&Ee^BDSbv7IueI(a*x@g7ZQ~#oi5p(rmiuq&dIIn zK7RSvz=L1AUs)P0+vs@ZyI2dp&4uaRAWOWlm?#0leR<|jA8v#tF|;!_Ou}@k@({y^ z-p>8p^~GTGT}l)V+p>S%^_)9!Ea~;TBt;A6*wwz(Pc^ZNdTs*Km75o)?c5UVtF>z* zTZAgFAT!kPM+4-_OZWc2P7=D#rGGn_-11@pWnG&|qqU6PWxgs0Z z9$Eg_2VE1-{9RF{~0BufcB>;$=eEObr?$ zWI^c+$KJ-~V4-jeoquf;QTBm&07T(H1i-)>p}{PB8=gZpih)6Z1YKA?w;(1c@ykW{ zN>R>k_O=2s$|y!%6j6!+GJ;BE0*DuCf{Bx)Y#&((||8}KcG%nhbo`) zSFoT|V*LOhl1?;pLS2STWgK}K2I0nrb`ba|Wo{n^b-+N1hjmZMp8dV-kt`+C_gM_{|9cnY1d>lmFg+R9&@d1ERu@AAC0m;4ympO81 zJi6uSSZ;;D_wK(HmJN-LeN?Uw35q*V*L!&wnM4eN-^OgV<&WQcMz(7MFk`P zg%#w-s0t2ZNGCYtzAgwhfvmDXG1a@0L8K|L{UV4Y8sL5+q6&lGCxpUw3F^N#z{mbG z){69E%Ury<>9;dW@wxx=!oeQv(k5{*?J3fE2i`w4|GzIBb_FzKE|Hg($lRt(z;^sy zI2=KpSO`DSbVQs}9t~f1v-t#nnoHHWc>XS2=<&F-zrIg-M~K?@XO7cjXyLH9$R@Sn zw==Q((FKv+a>2`8iT;?YBUo)vuZ1^pqN39#{(&tx+jO2<@GY|ATBu7E_T9WM;NYz| z3Rh`WT2f9idjI*r7SRsduei(iT9fPY=AqwA>uTZ`VqSzMe%jNH%E)!Z3L)X`4Y?aX z!74A#es3*ho%E`5F?U95%T3dH%*P=$<2C+R-g|Rn)*EfhSka^+iy_aE$DQ_yo?Eex zcr`1FHIrvh{jXiS?gE9tXpGfp3M25DFA!y0rsm^l<2Fv!oY|wj{hLfe>qFP^FUqCc zEv+(x%|O>EX_#%6S&d}U)Mo5vm$6p^g_vJ<+=8TwF;W+BEGTL7dTs}O!Q*k?r_6St zlhVya+1cj-mI4P#)niBVa`DAA2ZJp56@mL=+ExYfdxkFdRp94RkBJT@?|T#a4XB4| znFica{AS)zm(sFM%#$Nv3H18lDXh!1%P1L&c_~a1;u{yUcuwa%+y8fAeZ1B)7 z5QbdjoPfmI^d6ktF#k_@ISLKdGUyIIsSP?) zudMKIky`4PTpM78`yE&apWU(7MkndeB3-50wyGBAdghxN|33v+rp;eW&0ml3bPs8gBl3rA!@|oz_ytxCzw_xWFzYFQsoXz5bJgg_4c zYcBBP?HtVVTI4?q6!bU3D=V;?<@Ba@68s*Q5-q3C6WDUolx}&{)byfP*Z;8^Zd23> zZU6c3)Xzx%;%;RM%SA!0LFPb!f)8E%e#>>;-lb;RYhevXQJBS}W#*rz0kP1foa1%& znhwb(=clmHxbDtkb?Gj37}pG*I_rfEdz&T125m`)t-*dQ79E0wx44-x!IWjTDm|a2 zmu#vIqo>!m(XosI2lCf+ml43y?FQd&vB9!Iw)eBRx^O5;ZV_4un`&BG@Mc*wBY%Jo zRH{n=k&tFOlsqMX4~&^5;}*uf;zzLkc7-R|gjXV9ER80NCPwj;H))|wlxgFM#Vt?k zBn`veQigm6Icb!Td>S8vM2v1rVo#VRaC; zmzZ4VSiL(?bqk3sn#4u}0`W|m(3IPG&TC_?-3at@T~ue`015cS(IH_MJFcmO?g$k$5GhLNI_bIu$$`$lo)GJuc z@r>@3c4jYeh9<&Ae5uB*>C%~bsQ|)92uHJZQkIUjBl=1=Eyx3v9LVrP&E$}nH44C7 zg_@*KTgQDMfhkv+fKD*<93?6ZdBMoa(geZiaH=(%&Dw+2Z#yfL**EyKZh_usbc*2S z9om^2o?~6338ho?{iX0A9#tV|o!B3Q@bQJyc84Yvxg71oSMz~%r-lBNLV>vILDLT{ za#DB#vhEb5hJy%7NF6$K6kbDFguFN-opBA+VwMOA?wm{aP>lgT9893YIyM|u2?L*o z?>A?UK14l|oAo#3x(t~=f^Ta>*}H&o)8r`KGoa>p)Rh>-X@o4VD7hvcBxW|8UxXFn z7@_jx6YWTr)2Gk%y`*s41dm}W#5!03>~*O!H&9cCjL2VSq-uJLmP%d6vu*^K^RfK6 zm5vQ!q{Kyng&Vi(Pj`9hSze|G`zyP>4rt`&;YZWAo$?KuE}pmXS9QDXbQmcPReJCj zy!gFdb=Pg<)AvCgowFBqCoOF3s9V9O1qOTZ`>pbQt$)X_Iy);!T$*?0*1xRZ^fspH zDKY8(v^c^9IcWE zhV4*OYKyKCPYtje$A?}&^#0(+ccC#n z#HIanw!Q5u??V`FbYT_Vsozk zB(2iJp<))=Ma)tmh8TG0VhXFISPx5DVqyN!ttg0$VIcgJc)SLitbr;_6uW*qv=Pu7 zD0+ysARuqmAsU1*KMgRq8=ER1fBLbb4uI~W$q*51JBK1x1H%T=YcYA9TAHRJE*#$R zLkx*7DJdOBL%G?gQ9QUnFd0DgvJ3XmiGYd-ttf)J3+`V4(&ErTDx#ZCMpvMq za0`WUXt6O%&cDS;OP^d>rfpbO8`$rM85T@Ky|!T|#b&HfwN zu^gC*c&CQ}LC;jI7g8=m4K)LGlTIuE5sw}c8Y?Ai0U}3;T?LY2G*Nsz8@bB&sp{lK?!pr_;{HXX6=nSAh32agk>#~Mm* zTywr>k9UTJt5?=dbT$+Whdn8Xfd5%&?mKV33C7*z*P5V_rVmwKX@OZ=WS#zvsMW&C zMHlpE&7GGMQZCuC3cQR#Vb)UKllIfkT1ZDuH_E0IEOh%6@KskrdarleZIn3ON(yRg zius4sGf`V!KH;=-@ZQy{fuH7D|Za?b`fZM9yXZ|f(Mg=$9bP2!%Y9$td?$vCbJed8cMQnYXE zXlN1goOo%_AO7td+Q<88+kL?uKnh%2pKdujkiCEr{vXF%%;@x6+@y*eV_GI?K= zqwqW?oB+C3Yn7%B=?T2Yw@Z($)Tp4`wKh1v7Y%+XMLCF`hdkH{;(BieBKbd*Zoyv3 zslo|`0L#Dn-94xpvCiXm9reabiT$C7HG7bpL@xkVb;y?rA}Wk)-bX>Gf=>R2;zryI zuiL#+AbgQM+NSC5<8uE^*r;AsldtcTAp82Sb&biS>dsZMOf9#u|C5)7y!3Q)u>X+x z5QZ=zda^Def22H6?ewp#19PwTSBW>Q_VTB=gSEZ4chSc@q)6-Vml8MNNK|0M@3O!f zm^%$AQT{!t$(bzv#o#{>* zyLX3V2e{}ww}dx_;})et1ojMW#Lm*l{YyMtL3WVq; zH%+dAZE*X=(wt}RD2~3IJ^GY4r77AI)rLxtaqq34Vhq$=!_74T*maP=st-s>=RVoF zmX9Me0a>3MH``Xv;5I$g!Cn=w=$Bx7MsJ5*ZQ832>O!oHqP;yF>xCou88;!?X(3-x z@8OTM9n7o?r^~UZ(K+x&6H+yIpdhmE@@E%PHGc?qj#Jb??Qs9Lt8L`YtZ&rK?4X_u z+R~}))k^Vi|2qwL|3pwldz7}`Zjm~>K>d6jZ8q5Q=NGO(w4K+T8hj$p0Q+`DL2(p3 zpBSB|obNQ4)pYbJpQRzluXMv^D{T=o%FxV1pYb5$=|+*bRaz-bCp^{rtI+JnwHz6I zEbx!$?JgU`^jzZi=dZCfv*;7Az%?2)$#@O$u=Y?pgZ8`zUsTb&R9U>+)Q*E$^}NE7 zb{X!S>=)~+nuade_zs_B){}He?s_|)TG>W64ic8c4O;vn*qPaRbZxE!Fp6oxzv_dL zZe+Q6DC2jWmr*Q0B`M90`vuco`g-tphB+ zH)q#?8PbxYfx%d8`FuyYz?lvVdN1zsTGxgMK_>CXQ*P!ns!^-sR!;NT4-d@JAeRVv zz;sU0;=YY5^4ZVEl#H8FA_E83Dgdb9gNMJ&&9#=z8fQEzd5C^x5(e^?_$8YZ8XB;+$HXvPd@^aCpnYDz;|Stv zRSHm!q8-~35|XM4o;pnddaH>Y+Kd`@UpLg3!?1It${=KkeIa;Hs(XpM1H$XQYYQ_r z1DMH*rwgjBO4DdV_*(;j|Jl&PrfH0f^>vCVg48l*1;@rbep*mfOOu`9eq4o6iugK} zI=iE!+z6eKrZqk|eg0h2qYgd$L?FpQRMbde!rb7N=A{!!CZ65Es z_Clu67^gLVn6#EBXUbjF0LuB!kiX)K#5cy9IWU~(j}^(HC;MzDiMMc=Dv@85n6tJx zaXiK9lJJWgX=^Is;U;}@7QO?2(xA^I(DJX(NTXR9!PBCn*Vj()qQ?zj zfz1#rAWsEI<|uI)p7jqQC+|*BiwNdSPH{B669D<$PO8Z6$Spn88)&3grfeUNYR`H!@8QW{+_VZkdcNp%tqDApwAX|ANT17o zupLc|Iq+bSPCPY@I_I{dJ+38OVaCXm(b!!0VsMjf8RyAe5&*aIg&-Ky5+vUf?jLbf zOuhRSpxhH8H19*v6|;j1(%@#Ez8rM?c0b(hMHh{lL~egn$JylSc#Q9sE4EDq>ouRU zPIeoZQ7~;n!ve&6vo>PO74B*MdMd9QFwrgRHa`?e_cUs1{nOOPb4(NN5RNNA=5RjM zz*GGb_Rwr%(32U{htB{t9NO}iR~J`5T7MWvJHRHw*>9SeunawdXGy1n(o$!*`7m0e0I})I4x(Lzrx5dZOF*E&W~K1qD=uNnX}WC zB%Z$z*ElPazFkzE?0szj~e9Mt2QigHZk=k7kcvFi0^etAKX}MeH!Yt+ z1tnG$?A+_87h#k9|3pRSz$aA--$bI|!sHEmRuonLxHIa4!>)IHzVtQ3HA1787+^ZO z(e>cK__zPMpZMR?^TVErAD4}P3?GNLMb$42vBCGh67@9uM*gy0sOkLehm4` zeV8B6Yyd=i{FN(U{6u(nCoVNPvg93Vx}S-Sljw zQ^9e_(W{hBt*68Yk#e=PsyqEY20dMs|9?>S=3z1Z|KImH+d2DmHf_^BlS#X#RVpT_=Iek77Ag?R@NyY`(&-i+^64l-}m+VUe|G4 z$8r7J(f{*&KhMYO@r)H=(}X23#BfLtuED`zM6nKwD%MB=5mwVIZ3Xb2O2Q$53^r4o zOxS8JG;&J-O$C$)B_Ry}Q~=?S9vP8O1Ik-R z8tlrM4ghX26HSjaQDYcFxtS7mH+3sqUa#o`Rty{6(GaGokqOQfprB&!N<_Z02sZsT z{&h+aLWQ#3fb`QFQvI-uB&H-ODP=-AZ0`Lwng@z0r~3efnm`gt6X@8^7<%R9omiq) zrUNj3qej_!a^R}m!vcg`szM5!7}N>F_lOHLD3{t&@4a~Pop^wyK_ zi1Y7=Nah;CGD~9w0$_}xF=)U5xQD<3v|8Z!{~xf`s#a;=e-}aYDSNMSi4y@AjKv2! zE9hY*)qMl@g)7NhPmCRza^qAb3l>2nYWFK#N*$)W{rdTOsL)qNusxxK!cG*VS@Wu#cteW zyNJtved|j8Ik9_Lez$J{16oZ!(UfpNJ1eDMifWL~*huSq z#GwW-*K#lJ*7@M?wa+$ui*vlji?+X`zT?(%g>8=g#mEfIh}+)r>8nLrqi(=}nVGKYmC;PqvI#hx+>7)A}Hv0miC3F zmt*@)vHXeAwl-S0`MBh!A|n` zWknDzA^CZzZ}92)oUOc|_46G%dQP|p;gj3(#=rl44e>@t>f9Fu1Khya(in&G4KCc05lA=7-G>#iZ>tbNZHafuI(1st20Z$!A1;0?tE*` z2Te2O&m>HM_GwXzXo_Kzl5X24)|09v=H5*Aqg%8-(K?nzi-2Awi2Pwd&ykw;okZK+ zd*Q8l)o%X>h4pdo3Um;*<%?97Vf9PQY8#-a6ro~%AKT0&L-yM^Wy{$$gTx}WY$eGU zH?a^W>)muPVP2O< z;A!hFnuB+MAUrDg3q4NAotmmS7wx^yZR2kn$25AIL>NXs8m}-@D^BG%CR;kvHOz}E zZx+;?QLYW*9W6{HTDzjn5*r*jC1yZ4>-0{)F-O+UAMi@tDlm-w2)eH7Dp0B%=P7yq z`7X+^7zdzM!Twyos*C&&JIAdao;DcpUGB;wdC=N1!z&CoXX%85t()5Lf)O0IDsFLw zw!i3u7%^#_Li?wya5`){kQ^Aa0GD$SDSpZ{c;y$ZiZD9lG9{YDSW84n&939i!n&7N zJbOHUDtUcDMWHFpcC?hcTY?DG>UJ@={$n<->hj|YN!DVqgKMljUj*xXN2M`G#vv1- z$~s1b^AA=b+<5eI?1}rpEOD<)&#`V&w~I~NkonGoAhq^g41N&UFkNneg<3Jqgr>U-1JQ(&^th5TVDY`ZXp>I`eZ}Z`IQKrylwYfz zzjgSXMq5hIJLX48&}`(`_V;0dm!NFJH?JKB0(sP-`TdFjwsqND^fZ@B^n%`b48_NE z&Tl<>)490dJ#3DRx{`BkF$ak56LaFC#O49?3*asgEKw#MGv|>rOf3-cb=-b%9({u< z+<8gZEYsYc%jinYq~9Y%lBw#l=^X6Z8RHU{6p2N_aHpBzSW*G(4&iHF1^#28kHksHskD>dr)CmIkwkCQ^Eb1zT-eF;~F@Vo5iT`{gKFjv3>rDG5tshwWX z&8bXeoOmhb0Aw4wfr1bD1RFyNomhPb%dH+0&ztW( z7oCh(iBB=iA9(tU5!t^jE)x>vxH9KkYj0MgG3s~eZXeHwB_xCF8f37^M1@n5O7=Z% zoAr@n)XSfyJ{sKJu_{=TIDfx*|CQJ(U;%q=f3zwqiHXBTt4f?=4z?PGQRoFTlvL;S zv^_OH5jm37Aff+rY(Eb;CSK?0Zn=9l?Ev)S_VJm0+)P7F+ZX7hl1IrPSZVxD!B4)T z7nNY3A&&^Dx-(=A&Gfr`e^8JdUFh}}bvM4<3_V9|$$BC~(_LF?FM^9jeh>fjU3j-m zS-8hsGVk4J)-B=z+z@#Y{Vv4y`4R{gHWlKWhPy*|h$W9_KBLcGsy=RZqf-pw^%F6Mh+(DXJFJG`#2L4w;=y~aO8^rO%@iR=%FA0PFA5ZbAL zzffd+v1ha>*n#XkFJl0^UY0;i!9}rJ9Uea1qyQ4T_BpTL^x_MN{j&r_r%v!1%U<>W zJcw_5a3!Yi!-@c>^XNTLo&a1l9QJb=zTbKOm*VxSCffiw2i)Ut`?kPmCuL3qe z6C(q}=masCBgWN;2{cm~+#u^nzc=I`(P9|z7_b`Ytpgh&$(Q*kp%NDeSG6qZID}j; zM0cuId^(RQ|F10l5R&~Zvh}Fr0Lmpm_;D&CUxgyW@fZSOHUduRaFGpr!U7s(AI@W@ z=w<0_j8J5BM1@U*kT|h?5rlHB$=f7AB=&(vm2fOYuZ75sV(^AungHv9HS)Kem}Efy zQcIi$;F^^%CV{yL;6nAXx0-@bY~GK*9XH^oA;jy8d=)rYfQnkKmnI8PB1IlNS=OqC zgFE~enJFfVHBM*EvRfp7(Of>Xk+euzkSro}DuK1IbxlJsQI-UX2(Lt?I;SFEK28S29MQ{L0Rrl6 z#fy~)H*s+&gjv_+c13{j#NihzWnbTboWJi7WCS4jqX&9Mk<|@K-9}Qmx-11i;&nzM z4G=nt`k_>Q??g2#3j&i=Sa=>z?M#5%`^nSt>V-;$5`LhR)(Ao4P5C)W99-Fu^+sjz z3>;KFG#@)fFZESm;PbM)^IPQ_;1LdUNQ?S_%a2tPZfL+4K-I)XlAjp#5>WnQn(gmJ z;O_qxxM3cIN+Fnc&k2{e75z^h#B==M2HDc9`Hy#}_En$$yHgyuxW0q2&9jUf>{T}~ z`_OH8rgqr18~ch>rq@^daHe><_{*d7H?9x(W#$kJKxR6R1=vme*VlD7`B*U-M`Acx1{mD@EzPq=xSC*9;RGal9285OkO}hyxVUwL4wU zosjLhuhcXA{i-L=aA&-BY0XP)#O=@f+FfHxdtf?`e*p9Sv&m16Avja$8j-(R?egs` z`tq-$1vx}s@16Ps?ss0ipU+3(d6S*`4?oXCQ|0Ze2>6j(QGZBuz#e0cBT*pprY>U_ za$QNTao(E>SECzqqM|i>MG-~l)gwxKv~tv_$e9p{CmL0%B{MUx4KK#p1!rBiaT(jr z+lHCjFll)aFt7~Igb}9|k#im*K%=oXZmRS5=I6B7IfeV&jTp8YtWVXAhrzG#;fN?%p;9L`-)qZ z6L~EPMs4^q_ECYoz4LsR#Iledcgsxfc$POQJjzT# zj8}kbLwPq4x!OQ-um99-y|k@*w^pV<>fZ{~W}__h+uALQ=b$b1Gq_VVeKF-grQu#A z@Xw{SCeM!&J0i`thVgDFo2tZ|&n?G!KptW12<|J|Sj_vhPyIZ17Ta`@67@^4PKhSH zncqbkT(>_KyGlt9d`q>Jwmof%)<%uLTf%F%_9%nV_cdV-K+$>Tn@#J${#FK0 z)_G!9J1@xlz?P#Nln(RQT>YO|`P-RHps7!1n%aAj7?EN^?NizNYY}_W58!v*s$hu( zm#Di1j3P}dXh@bRi`_BS`h+|~N~@HSpf5Cv?J)80BD(23kxRO4seA=*JByKq*%Z-` z_E6%AtE9Iz=!}o^m4JNPJWG`WFOY>z{@@mBYct6b(s~+=qTO2T5<0nsTUbw|7v-9F@o>I^fIS=9FG@71vieFYVV*7*5?$j9X?I zpc5Mvxl|@ow=d|x?_(@%I2nf4EHmFEwQ6J)TV0>Sco_WV$rQSnyiJ9E8n0k3P=^)M zj$2o-4*21h8agNaFK&P5k zFhML|DdIb?i*ey3yp87d4hqpD9Td92dhg=6NNdf4=^vHKQqB-yBjn6}!8cxl%mk@* z*AQZtn7!N9nD{p=kIK!!82uP3i^@K1uD}=vxi7QtZF)DC$Sj_uJ;mG|`#LmQb+g{p zZ_?~hVA}1YcVaz`S*BdWQJs(UtW9k_UGcyjyf{MKI`7;ZO|!;3(CV=S7iJyl%!ydz zP;6}wqM8UE{1s#MXk+KLrfD7!I!&{nEchT07l6Po!^bi9=zW=gv@nA5<(C; zUtV*z^X4ESQ4l^A2m}}E=4~(pc*2Fh5@ zSM!?+ls$-)QJaK>GMn`rHDY1^xC{tN)osy8tU*x+VW)ggVTD+J-7fQd9=Ip>Y00aH+i<+fF9>-=ZmvWPJ{ZE>#Ug6V-k)nROGOZ{6 zy>{x?KTfC98mbKPen6tm;keNSH%N2!k z6e@?)?*oO{gs%gH?pZ5=4LE%yMPstnhHx44$H=&hed~!K-5I6iRaD?#b(3DbMl<}$vw;3w3#9iw7eBKN2 zL*sLI0%JL0(?KX_pd~+rk(>D9IdENwV*58arbqp|6K(B-v;h<1nQ8Q2x8_)M5x?+!P&>p(b2n zQP!&0ymB&vxt0Vm09!Fq*x&&Gzg$VF7Xnt!d7ISObUFb(C4|#yD~yWJ2_zlLT(e3y zpR!Jc`kS*MFdJ@hl`udJcig~nB@sTKqfX87Q{p(IsCYVNqYkqeA`2mO^eAco!mL%x zNC}yZ@LV9AA@%aZ0C+@8Y*ZmVg)+D+j~5Z{2nv}i(Pngcvl5VrvB`Q=s1jExBGvze zNALdU7D{1Rqvy0(s9IpoUB*;j5 z@I-_B;4o^ssN_s_37p^SVgE5p=G#>YA0GN8l%D73!SVW^KAgFdprMgC5I#aogy{?p zjCjCn&A4dz)X`r-yrM)c63G6+!CTH?Ndsy?4^%3PhB^r$0$H*O`$|ag1^}WOV=g2t zf)8~BD086rNkHTs2)~#Q5?DA;Ls$$0*8++VenW^cX%P8vfKoMtDHq6K(@1+Y$_$co z=&1F2P??%{M+X)QW$&)#$DabT+$um05Qq@|-AW*dT}&2$TXeW61>gx0RBVi?CU30(8;7ST z0lWby&jElRY=pTsFPmQd0g`{E;bS5E#{N990GrOxOxgfDv3g9Jp6M)qzc zVj%#C1*lE5f~RjtojMF++W%IO?*JPATSd;1&He8cd4RGCEIbqQp^qj19~F60->loz zqCREHXymH;TRT}x?5LH=l^w{86=@}Z32vEjbj@!-|M^fnFmh4-;@`YUMX2^~ z8#S|*Skt1rHIe~E7-LljVIPTF1Ql{Oq*-Yh*Fx_Gc?BCERxh!++2At1r7d#c263O+ zoZXo!F*hv;IP#p_s~#$>o}~;?G%lR_yvryrqx|K9jxb00sJHWss4wqPezd%(7_&uE zrh1v-rwU3$S5(9_ncrPZm#hd5QsG|go3Kg4689STx)(pkFOPj~%>s{_%put6F}mz% zh_CeYk>BUw2~)bP9o=o3KMOfYxb#VKX0!BH;qY`0DI0Uix5vR*q8LC3V_;$0< zz$O&hcQj0fJC>5MGOQr$<&MUgw%#%oZQ^C*PRJue7J8a`>mFmZXnZ>@i|3XeV=NS= z&(4Do@6W}I9lVYUJsL*7Ff-jd0&L&(t$UFHpImV6L(6>*;BTs5!y8CuUAHvgWr(IR z?^pAD@_rxDT4J8+?*bMnJ$LhG|CX+6n?jD2wi}?nyS|tl0UmuZ_6*71Fmt;{XN(s| z+CCF7cA}IBdRx`||6z+bOqov?GFaIzN&mh9|p;SrPl#&6Ay{J^*{izH4b}R7d9#QLcACI2jRJO+65a!f8gL6lW z`e2(vwFLH#d~&*IATxnt9|c-5a5XBo#g%!nJ_of3Im3aY zq0zbGEfg&qbGr(&qvx6hUv-^in*-tKvMv6q1&<8(H9^uw20mygnd4kX`E(*#ZcP+J z%}$aSW^6IiQfk#4DK%mfm)uW{xZiT{g4@y&dk8|Ag%)^5f1u0IE^<=h=+&87uR<~G z{_CcU+RyF>sLehHsiAs*DQS|DSlMB+`#jF*H*)Ke;DcPamwa3&uysqqIR-de8@8D_Dn^%Gsb?3AfYtO&x#VPmI|H z(;Wq-3eOKBOk8ifW+OLpgA}0g<5P+?b;@ml^!!e&h2W$ z5k%s(@;Ryx$U+A+6j#v43n#Q{$lomDcKtbscWwr(CCNx?Kq}fp)jk^$eR8YzK!b^d z#>a{g$-WPco^wWE{TT;kjRXHwC>Qb%`4#7m_cCs?7u{5dxauiPlvM&M%tj>#NIvxr zW);>)avl}gA`U(bMw__z$5-}ocE8=brXf{?VwjFF&J4GktN{A?$d~B;fa7ttOJ`-x z%T%3t%=RgHoFFyOUJ;{&FWnz#`fi5E_s&STPWy9XZsLH-@^N$9wd)BB55^3j=Ec7W ztdz&Uj*?vlIkpDa^&nusmgkwkeX|DnvtD&4xwQCGFD{h&h(HR zSno=m^@jp!0nm*(JGPVxq{YP%#r7*T6kLeHGeU_Wv6Sr~2N6MD|M;>v4P3wdd745X zZy_Wa==Zv~W*bz{Le{38EvA|)7p;#m&|>^KXP%7gUB1$}!*z54*j1wnv$K;@Vp7|- zuUVrc(PuBT&^uCp1i$LZR#^uLir%PiL1c9-Z zl9DbQEmd>Qu3Ckevmb#+QC$2MxIhdQ_h2SnN=q9CCe!p~|7g6cJul179=#VtF~k+z zm@q~-sXy3<#{7p{438?l%=(l2Qy)oaIrn2&7q(~&3B|GhG%EbVqKw&el8 zlxY4`uYxJd*{`n@_ERR`9`sl_02;iz%r=jg8u4xj>w+$_$NgpgS05#Rb0IHIpo^zW zPkxl>w0l2-+>`tWGhmT9_wj?p%E-vw@2h_RPA{ynmrefA_fx(%Ol&I$YzB>o*1n^% zSmOMlty!nGeQ(VEZRFTRV;R$OLR(mconb?dTJwTpA5Zp|hCPb&gl{b(NhicDZB+PjH1h7d; zBaTXXfQ@O?8Nu3%&u=gamGtj^o`&G317TCfLI~+Pib@p%aQJoX%M;S&2XrWS>-dlg zC>G*aLcoU9?GO#A0LiG$`mSL?*3dN?%E;UU6g?{GrQhRw))~2>;?rTlGMv4#mY` zj-;aVb$N7v0`oHP;$5~%;i!Y=J`h$!-(f30TVN`h0Tb2?Q_;2`EagUZ`RAS3y);sp zws1)`@Tm{{(FKS0{3C#(RRwI+hrgr~Je{$fn$kn`d=m|L)0yyM*yyzul+chpuo6%} zD8l8l#CX@GG;ke&`ZS7y8JR0W(9bgekZ2o8P~cfZI-()S)Yu<8jTWiO$N&XtEGt*S z&j!@bo$&ul1!@A3jp(b%cZEQS0susW2-c4AH>ewW>UpFY*?K~9fI7#C*P!2)yc2! z2*`ZLJMx;m_bp^7Y5%dm2H=}I6zqD>Xk(vXGk|TeJu2$RcTH?9$=Ct z8ST!IzdJV~t={cn>OU!ymv1%RFb(&=)sgm)DsrT)=6u8R&uD80RDrj>SyXI#}nRW1=Zm z8@s%*(`B-PAW}_TYFI<2))J9W^F(pZwpYkumW{+Z{yN=NQ;Hosb2pNw2!Oo(x1Ga5 zrLjDG5m+haDiC-AbC(52gp8sN%eb0ESjdN@$*ZphRQD!c*?kasuhQPl(x2iK2 zEfN-0oXHV&wUIW$T5aQ(mlQb#sc~pyV*#>zGPNuTqRtaN^@{WfV0|+2&koT=G;8%#QNVy)TBUIVwY&7n;Eo!!DpZhY>Fn1u9yd5jZvxrFZ1 z%r0%%K6TK(hjp#_T?*Cn))bQ=wCm1gcVe;8Wyi^g5j*eemWQW|aImZQWkj^s{?26o0c6%7yi|}r*!mSUg7myt{Xtjs?8>8A6KoBu zwdfhIj@XTvzh`s%%a`-fF~Cd<<}HfehZ$wlwo;k@+oX;I%74l~ddaEmhCOluAbE>W zGc?VuKcQZatP7M4R0o8~9mkf@I$#6lw5)B=vDjTWo4!DwgzfA^^wD_u-Zfpo4v8mz z8YA7U-p*^zN>_$RBjLoMKm*>Jyk|(c*&Zr9x-Xem2&AH&z7k{?c|d4 z&{CVaLiDaSPw}Wm_WJ-1U5~JoB-5Xj(}5KCWt=%`6h!T?$P9SO4P+G_p1BQ8)2VD2 z-i51%XPH|wm!V@sZTSs@?in^ip?MPYz#(PX9<}7ts2=?~LtV1@36CguDy%tr7Zlpy zJgV3LpD?Ei6Ub$y-lt9zSLCJ zUpJOND)QB?oriLk=t*Blj#>`&`uHJckzVpOs>>onSo;~LFG#mbK_3%qm?4%?_Yyhl zFSZwwFLDgw@VkY&EL9q0=>Sen;1mqHiLhGyfrn&^%lF3^#t z^>u_r&S77N0^jmt%$L$7{_5D!!lBZGh8!+_Gk(sp+E=^jA8TAGU|i8tdX8toDtK}7 zE-_aJoYRWU1}FFCA!L-tIjh3?T6yMH_zk(di&_ndm&m^wFM&Y&0GT{Gx9RAY=)>`j zXA~r7=^70k2|n7a^s@oXR)zKU`)VY4y*`Vo*%Cb6Um*LIjLpA|hNKG;7C^}?(yF!) zQ!jL-v?@4@CQJ@<21vn!r!4fqvS~NrQ#>v*GY37(Fz!Ld4Oj-3lOrRwWzmM_sx?_6 z>t#VwGCd1blzMgtxT6x0)+bS;7V+#4t0XJedytW|^vH2B0>|<@@^Et$tnZfvbZ75c z>C86i1$voHp2w9LPSjb#f+t*)#5#Bza;;GM%#L@c0pnt_bjEyH-_JCkVYfAwJ785w zUDdE3&R+?j@Tu0&ndM5Ct7}Hkt>W=Enn**)> zch!>Lv4f!BZ#BCbh2U1Jak%v< zw~)32arh!AZoo3cflrU3A75K%vMQC6WtgFSIb{e~_H9RX=UKVe?{&FP<|5N*&y+|N zw*u=m!g-jRxW>f+e@iv80wYD(OhF@`B(?8f1I=stB;LAwkq%|2_=vj?te!S! zY4w6X*z}E}MfpHdP9AOaLY4SIevax;;&yrRYzAHsa<@5HwLae&(S@NgSO!M) z(CU68t}~L-sNIE1kd!PFAq(K|aU0j!(qIO~RG+(a`j!&Lig{?qV3qBOvg*x)^Rf!I zL@RU0xWuVY8(R#$Jz>GTw`WDh=C2r!i@qXxRNqXUhpEb!P&dx!08gn@Wqw`XXVl+s}c;isw)<|zy!n=jja->3=~ z!!SUU$@;r24OiA~0@N!d z_62~#rvf4+T%i9wz)Xk0bO7_0VbNlubEcS!#a?Pc91g<)fDk%4M2)Nw14(?`VWj|- zKrw>k0x>a_h1dv@7we4{D*s~Op>&ivy$F#?Ag~LH0n{b{Rc>HojNr*^0PD#rAP7)} zIPn`DQrhs>_+elbz!N1$SO_Eb-weG@S!~!?0z)6KwZuAlNklX81%zj43PLm`f8Lao zCZKMx<>Ac=MXKCeQ#!Ge5XdS?6`+dgWvyZ&{5ZG)e+SSTb#>+UYKoKDuvf(>K?pM@ zm_sbMmj)yGg#PCI`>Aq(g@b`^5(JXeL_ZcTn^jQSyzSdmM7*wW3OvHX!Y!ne7b*cz zh25(F#7gXMe*QuT9YG_^(a-QwR1X~>`3G*uG`MM*SbkIv`{07wE9jT#Q960-ydn8;73qwqS^US~o! zgvV=%;WxzD|Mf+qMnF*LjUs7;og%!E$cWs4=jaMyn+g1J1SkIMOt}OQj8btm0A(i5Tn^gOs=H{#SUs;y)rfM@IYa z&3J>JL?zG5i~S!F-4K|z^i2JL5utz;^r@%Pl~6Fen3Y?+c&pg z-8R_W8nWpck4*ji@ePd?6Ek0FZkN8ECjmcY;~?xH&|TUZ@sA2-zFjtMwQA%*Pnaf2{ED;mLw`f8Et9i+k70O7i@oRW z8$N%JRd_Ml&yFYcK-(DVci}8q%+J zB#3cedx_g|;TpdlYQeX! ~Lzg;(bo+&WE@%t`mr6EVZ*b)DHyCj;CDPAQAE&bMB z%j(Y^L7?|IuVQgpYShKot@BMaW|+L>Fwk91hipBGSvc^_<@281UK`O8+s~D3v}5(R z*G7A7yH9s)Db1y??XipEsyH5L*OkoMjls&Zmdif&GH;pEBJUE@2PN0s_eVGNn;_C5 z&w1U`(b~^=L+j_KS#cLD`cNJc)Hy=7mW;j5RYPSb_J{KKVWQ$V;V9buktb z(t3`&rw=)m6UU#k;f+nQfKJ`y zH$L|{R(YlgTr3Z@?3&fCErsCl{Hq15yPJ;Db?hl@)jJoC1mlZy+^q}F7QEat8?xVg zn2o|ki0E4~_t74ohobk=Q-?1g(ZQpw$~18X=z?IqHW#l-xkEt>C83QJ`@)}UWHykj z)licOTBk%5eLpDo*t=1VV~b2IyKP{h2`9SY6rD@2<2u)Yrtp~{TD24{IV~Bi>$HFy zsve#&>{|e^iQj0CwQ8<)%~1lrllIy(g%<*rt}_W29(bn!`6FgLr03UzUqDf~w2WRR zzuXF82TNU&1mzw{T_B*?=QyNH_16!wm8`-g-O%=3?l{B_nO!KmBK0b;Nb*4h;Ig>o zOYbk5>`mte?(L;(*cflS4X5Ch@QQ|R<|L$8^~{TDjp?*_~Uti*t0p;F4=OEFyEm2hq{#H75Yt_kboOe1y_ zIpqK-kAy~Y)-u%b-P|UqI z+`}3B7}Pi*s#zR*3nV?PzF(h&EVK%UGEOFG3A05mUbf?+tv*()O^rXD_wm&e$cBRrLNKEn#(rt(?;YRjX76zlzX^` zYPTlf+!QWuW`MgtLyxID_Km)#p)F;}jijZvmksYuF2&ZoV4=i`%(C?GTNxE}a zzgu|0)KA~)`Shj5lyLo&W4MpyAm1kapk+j3@$iUVMIUCUOxeN2Vs-nU71fa`=p`nec3|xM$%4s9e30(KwL?ah0r%KX!JAOb1NWx&d%HK2icCg-^0>)OKFTg)qYsL zH0IR%yOK}e*uH|-G9LRbh9Nbvwc)I;R`skmSJX0U&LQ!tt$7ow!(XFP!`jnGiDpR9 z%H{(yLPt7yP1Beh(K+yqfm)?Hd32Yf`O!ZY`wh77?W7;1bTv@*_L?0cg0+CL7ufyJ zKfErAw5-}H4c;wkT`}Gm96#ifdB#~BcJw%=B9DWLQOLkwBPSf#X9|2%7oYqnM$gsE zE$^D5^c1M^(Ped*rkWws>L+b8vwmsr8CV>ut~OEDryIQL+;)F_q|7>rwcQrBl@IQH zFAjQWA0z0(@kG3Qw0PS&&9ifzn6kC?3m%xxZ!0GqD5o~|+ux$4+PiwSrx7|HQbkS2 zI4Ka8?{8wIC}*c>5D&Q904L?Na>h~?f`!0m-9ZwbKEFUwu+6CR{W#Yr-QV>nsdjN_ z7c-hJ2_`JY%{r11T6Je*_I^6bCzNHfHwQtu7>{coT|Q_rxKT4>F+GF*GgKg6dalCG zp>$nv`SRA0p}BSToAW2WOfgE|={hiV;vyR#ShuCvX7F?JzhU+dd+-HjR~@(4gy9uh za$LyO#7F?H3S6MF#FF1&o?Z{YEP09;fKMlJ8p_{M6_K>bJg*S|J^BFnxAKP` zfKL;XwK9$loHn}kju36v2c#>F;JzAez&nNLw^}JqfNfODpRGh}W=a1}!vIDiEiOcW zYJ^aAaQUu7uG17eT}dFoFP7XAdnTa6^~ac;A_jxTH;Gc>YylItOq91kkvI?cfiM?u<1`zyfcTgk&cD!DhFz$ zPj#?B#CIN=ZS%`I7X`mix8_fkZ z7>`jDQ9#+G!5HaKEZ7GqK=>(eUV`$wPMBt`!cROis86aC8V!%;YWv{wnYggVYsP4) ze+}yEXs%2RKZ?P69m(=*@uY@wLu$E5hxDT%Wjdo*Dk7Z2;ru&Yt-QMt3(p%en~4_$ zq|7b~jNoik0?tSCngXN=N?31V#KZy9)L1xNzkh^+dr;{II^h7kX(K?z3UQdOyq{uX zin{cJ7KBH2*3z-@y1Y~+F0BiORFIZ&6fYn@LW~ozDRn}G)!VHgEcjMo-*o+N>ALhk z()E9yW~M2mb@sFWQH0n0R{>7Pj=z^ncwvbf#+ydK99_w%<$d{9TVSt;+uRO^p49h)nCme#d?Q$#mq_55~+0$s9G6&2NStRQMt zZB*gJz8i~}$CtGGIX9eq_P&zOD6(TUjCIyWSGrNmzZjpXL%rx^S(w!MtJ>>K4gTb@ zjR))GGnHXJu;yZbI@jRuR^N2@x>>;)g@8Kq5*-X8?0=if7b|F&Fu#@qi!S{ra3Q)y z*@$Eftv>9%rWWKz^d}iRV1wY*USVkRy>KH#Y+L5G8vU?gdUUQx6q#?OIpVo?LTA=# z$6)TA{Y#72J+J)P1I}^weZ5d6<(BYG1Q=$VPw|Y zAG`-tf|;nA_e;4+ORgPy8;9QKE-&Mu-G@3zg$@O63$dIrC75puE1s)(@3u1!`DG#Y zf!UD8;+Z9{6x=tCCXsvn489nXtgOL=sdI5^v=}ryz}s`;x-Z*tmv>W_!^+VSBRO%* zq0meN5>579Zu8{=e_-x}ujy__Z}Ga()&V?TYu$^XY1_7&psUwR;iI4d-Z4h9Ptm2% zQn?g*5Hd95>W28L^p@aoG4Cqz`@Pxbb~qJ_Q`*OJZ1uuuv2F11_1)7geGEA^#`()^ zlU!OnZ}R9IcVpJ}q%^H5JD4HCvY|@er9H9hxr;D8RL)J;NM4xvgOD)Z0@YY%S7^Pr zhZOZ-@#(u7P7&{RD|nVYC9EMP?xSUp`=V@qt^2)oV6|>Wxxc}@1NmUtmin)j4_0I# zTK1?l*i$XJhSS+k?d#O`oO|7fvP-rfbdhIgsgS-pB1e6kW1l7VBxG6e+Q5piJcu0k zjfj2shFDaC$r-&DRz5nJ8F!!hPSE=y$tdWJ zCcAH&fA=vRLtcu>i=C2A>Id%UoCV1WksMtt#*ZG6H(e+Nm^6CwVqBO6Lg9XIL3$bP z|BxfTaFG3T?1x-O%2qQF3p#={S94zBU%42IRwX2HQcg>Ld8Dj-Zi2Lh)q+U<@dYtC z$ylD+ZLvr4>iK0)JRc5B4^ivZ5yq~y=6olSn5T<~2#_dEy;cAn#1T+R&--2-0rO6v z3`cj^s+yGyJ|IQMVt?CMHu;@Y()%>6M66iCqjXs8tKm_nMR_3u%I2@6w?Vug~UG-VWic~8h1nA3`rVN@nC^$pyNE=R3F2*HC*VrssC13 z8esi=p&a-W9w>z9Su_(qqUu77_vTN?Q|?_p)c|4?@lsT+k@WXQ86YEV@}6#aa@_F4 zQvpH%TY&=zEDarBdjA#O_TiR=?M8(9lq5QffqsFzY5d(eBSa~Xfo!*RL(et=CM``W`rVLnN?7@6-UD7DJ1 zD*rfWeQp~NeDXB=Hy!kI8A4r3i(7W>cg6CUCPQ{(26>N#gM@D1(e!C+n}LE`Aq=dc zFCD&)HsgxB%{nanwHZ&HD?!Jk?%%mD^6!ro+zF$B=1*os zxD70Qcqn}8j-yIM!zkU7_B?)Jw#4M={VS{cUUSogG1xN1i5c6TKp~dg#Myv zi8|r!5AEqk2g8DlxW$n_-;?IP%GBQn*0M-h!dZ~0HPsSIWtxoZb@|T8Ik#DAeHg4HjloUu3S>8|^hW%z z+cE!VQoJISYf?w&g{)SJog0M~mqd9X0HA1-*yIJ1aF$%lyP0L7|L z`U;Recta`_{6CDnd032(-}imazOU{3v})C~N<}l%R8zu4NTMmBNCru?%~nktQ$j?h zBq2-**)lCCQd3CwX(P**$(qnSr|)y$*K_@@=Q!@;{EN!Q@dWg)MmY3?5XBW?WvFo(up2blDX}vG6dK%xQRh~_N&8ODivleiJS1qy zD*@3CG8`<)yJaXwdL|a+OB7grKFXtB2re!1`1twcJgy42QZAdz4+ zBu(Uk^NP9a4AY9bkRZJxlM0IyAwRgeA5^e{q21M7VK*NoR^~Af4pw z${^>p0Wc(h3=oKFR0w^5loN&GR}|bYM~%saEo#IJ0J7SsEqr{h1{F61yw-@jhQgEO zMKSV{-Tk;6LuhYH$^D0g#)fcd1-qAlc+7#Q4YNt|q7p{lj2d}>v*&Vp<}O;ka|Nsy zOwnZMZVtHX0Q^eNtmPGSlLY0QWb<=K+A8;onW2AK+{aFS}X;+is6_ zG{gtB;6P|(CqKIcz?3EuK7blS1)$4=ytPH;8Fvvu)!+{v+~-tw0qCzGBi+cd*HKx! zG(e6TIhjcQpS`s7eHmg~q;oqC=PfNG%TuNQ65Dz3@1Hs@Fpp?@;%@&TXyWr?sfzSjfuenNa9o=XQ<(@rdrvb;aP63=TQ9LHD(Xjn+58 z?A}*ap6&dA1gm???dX_x(`nxeoTz|i;ssS`|0P$BoqN>c8Q$% z9kwTNfAx7M4=$w$pNu|%t|xl>k23qm9^kD#*V-4Mg}S9AVyJbsiWO(fsd+h1h7R=G zn8#=qF`u8}b85eF_>|{(#r9H5%Q9K`&(Y`1Dk*{r2{kJ>-^bX@uwbS|e(%T6pWX(6mM?$`! z!ADTrv8cMmX3nFd0ckxN3erH|Q=}K%J6DJ96TU-bJ+F~=L>>^~ev8!#I8e-H%xu`e zHg{hTwKm+yh5YjOR2mLBcjgmZlcpb#-#?$r)xqu1u8$6kudRQ#*i0%Y4(#(Ej)uch zsY)WxOLyojWA0l=X6EzMJSp*LTzf;8_ub9|?oXLQnSx#rh$3oHm$Tid#97V8RU z5oT|Ng;XYtkZjFTd9}z5o<2~B{}0m$_`<27b~|fWU`RXStT3=+Nk@Ws?~8Nx*jbXpP2nLe+~3+OCyX0oD% zSx#ndW!_hjy+(0cxzhHHn&%L#je4GpEZh3A-#WHpw#>q?;+gCKVZL?y*y#XvF~Qz7 zaN(e7Ln-y3g}Ulm;GC(7Tb~FE2d1+&0G7Wd$vZT{_t2ycNFU79&7XNMeDRGyrIfx< zyrRcaH!x7apUYfo8vlC=xzaLk@3TGr5~S{{J2-izNi4iDo{aBVOdJ38JS&)<2OHQz z+vfxQPL*8DQ$b9I_T?f?r<6J1@arcN4)Ud!dnkNjejiBc-PtMnL>R*s@_BaG-&_q! zmy662&_uH_ZwupmF3{e|JDiiATnN=2 z-jBWl!Acvo1(q=kc#u-w2Di$yQ85mU*gTmyr&+X_76`p$uk@UrRjMD=mOR{3ZS(Qx zBB3*M9i>2wwj%dR-r)=jTb?n@2Ktl0W!%sA?EfI?#X9GjX*Mdr+|LmbiT)z^s{4=_ z_BaBLfgomv;9|`#nX{ZxY3srXT^L=LldSCz=lYK`?5o2$y9U3 zZI8m~y&j&&O(HI`p87tO06h;ZC<4Li6>|rxP7DJ}Wr&DR3Hi>ti|fvPeaB3U&vq;}rwmyN&JJ_oaM=u|O7bgr?S$AD%NU3B~lZ7oi zwcs`%p{L#^V7u=Z{L_}U z_3pdpO)g@Nd1Lb{<-!cXnlHn$&ZMNBE{EHG}hqiZ9VR z4YEJZxql+IjI!a}{1I4Uwecc?;WpYP^m*a%&!?xZmKb{^vb0Bbt?JI*ehPJp4Ii_A ziF7;A^2qiOTA)~Jk(G;y{_yT7_mP5%A8ZFVfLQ&0C*MN}w^$kh(r^He?pmy+-Q@G7 z_w>fA2)r97cGSWAgUE4eUO8-QN*378E;B!Ga$0qJkA(62)+3uLaC4_U(;34(fo+mn%=KI#5CJ6)oYh{ReV&%(D8iRqo0_P zKvAlhSTZm<&V`@d_FAVw9-hblO0!Uno1ip4=6e`$!*yuNON_*D@Mrqh@nH;Sw-WG= zg0HRHczr_2HOKNY=G%3V6DJp;5(LCIwqMQ;!r~w7VL(OA4Q{I+?QK8c^YYFGRz%e` zqz+B*QfT@tOv}LDzP#macb>70;%>kbcD{y*Z9lY`~Tz>JRz*|yh6+3 zq7vE|YOOUcG_fM_V=An^W(4`jyATdk1fnB_ z7Ze9_4F$@5x&Cd}2qxe!U-vWz%BXX79ldlOGG=w&hvP;(~Sz$)oNkIC%gfDky2yFw7_d!{mm#>F z0qGGVY72=^)DK7M)wo2VuA#{sso+cHoM$sXhhO8W=~~fct!(ZQ8gZ$j4Qby`hRQ6g zD&?K7`rl^$hc)p3fR0R*0RuerVGT*b0Ix35!73O$3h%Fmb*rJ9RY<%Xz;W^4z!p}H z0w(agXt3FT9o_$`O~~Lg3(%|BHf;dg0T6wL00IMrk81O0;0^{@z)nDLl7kBjn=VqySsj2d>8 zkLuMRD+J;lGT54lOr8>0We)>kg#wzSjf)D_s_{6`WdeSbE^Ye(fF=?qAG^3q>VpQv za;Q|1o53q+&M#;KXLvvkgeRU;UsxvxeC%O$(%s-&b`ZcgS5cTkE&`trnujD~Z(y70 z1*-tkYJns$5$(pn=AkifxJ8Fg;*J~Q(`6{S3?IxvTFP-p4e?Srbf6`@fq{;0Dd?pk zGU!B5z&OKztkV>I2S}qW>2K)bHZpE?MZ~KKs4jPJ(N0u%g?I~)KLaw{Q$^rWC2%Dj zXBWq%hjQTl??q7`^oc`jH`>jQglR^UNv1Bih% zkOf!)!e><%a6$&YbHK|K*n{M95=~I81UMWdR{($mLF-hAYnpO7T_6$c_30vZ13;u~ ze$PWv%v$+GyioVDdS;K z2uzimC3OEy;(uE?5B_=?1H%;lIWU!UsiD%UXI)L}w47xZ?+59(It^oj5?bE1DaOX7 zdj`1sT}BSWZWsOfrJOZ#C@0Zt$)+VYcrPX{&H1AZT+IcxmLJw;p-3|aD;|a}Pl0|e zo|m5E@tci5x5T6D+xJIaF_#U zEX0_(2+>2NVl;=tUT8wNNSLRC9)0`6gEClZ0~}BEn%&Myi?&;LOOI;SxWtY+*$5FO znR@}Hl(_=dk}3xGO|)^BRVg_*Nz%bK5C8clA~#GD9z2_=UrHydu1qYNi5ytXZcgS= zZ1ck&l5k})#>?R5&wW%B)8ulf}r~jM*&1o5Y8G2v2>r<(`{$dD4Lt=4u(K|1zKYztZ{C_s(=}pvK zdtgab-FjeTJEe2}x^u)fm|*VF>dwaBpV z*py$+b7ekFz2MPju%l*Chf6YR8wwr{qkE_N6LthuHY?sT-bF2>I9dbAcjixL-=`u8 zm0ZstgQ3acl+D-9mKodYXdm_<{1$&kbiuo~!4B`<^so&%1UyGw*WEnAdIuJXlJP0bzwr@+_2@IYslXAF;!&SWzS<&x_i^Je3_oVQEH>mBYyp4TW36t zdUGiI8l$Y?fo9mxiJ;LFnB@575uVZAgRIbtReDJ+*}p$AxU*#_N_qg9?x{;_rLPLj z@wJ`R^>ODvHVevfr?iprGe0Ov45;z}U>am4C$tmB@TegREw+jDTMvL@f8Vit*oFco zhvPo_nK?Eim){(cv$-vBdavPDSUJtmp0ah)_9JV?DF^SNLo)Q)j zNNZ+2TxF-NqRn5)glXaq%vHD1$_zyyEG?f8`?+)!2rP9(y{5lBk;&W)_**I;5 z2yNFE99wq=ww+_5Y?2|JsI@x3re3k9W$?L+nhsHqKxby+poB5}9 zaG%G1KUy$Wp6B9nr=YkBCESJ90r?XyMREHVY_WQ8(A8PTI6%Y2Cq-J_Hx%2)z4Z<& zW|~m$ccUMwdxf7}q0TJ{VN7a24BlLsQ7a*AJ5@?5XQWc*L4&qly_55#)QUqBwKfO_ zq-EP{ZE~YAGR2icYlh+bYC9>|g8N>PEXu9aw*gm^BFOWguvLFz15OSLCvLnxOxX-s z*X2kimtAZiyi;1URifhf3*;)zbDIdpK~``r=7qhnNeN4kQmZ@{KmNqdQw67be=veh z0gL9!uVq_7P`+P6=D4f!lN%uDd)GIOfT9U$?>aW*WIwsp#db1YmQcXJxNoj-P3#w~ShNJ%^N6GG4Lq72yo)vDLs#gO z5q1ELoBh!I;JRvL&~v@>ghGL_!f$c1r+D)VQ}L$J1+rb21i(X^caQCbP?D~G&ih*% z=j04ys0Y)l-c2C02$>EP1>?vUXK>`WJDBkG0*S?&t%NJ~st)|v1XnUPn0P~1F;o`h zi8oYFT0wVcI*sT9i8}WCVrV9f7`te#2bT^+f7Q{#zKYM32zdzMk~#4XN+C*;f73%V zGLH%#IDNjfcZ2;E+B@3kqYLx_TBO%?_)n4ES9=+*o_=4O$O_tWvdPYgIMtuaal`jyKk%dSmoOv6&)6qoTukSgp3)G_jh5~PkL~gx%n0q z-`ENh3N0%ADFT+Kza~az628J}Y3FO-2J-UEd$?sc^X^+N^C!2)eZeogu7TPf)a2;O z5f9NH16~8~b7Gj#2lKoi3MS7NZa9u1X{*L;Ivq}DH!v#=kaMKIeBr4RPdX0UI2~>* zDBiS>0XRRLdP^)t8k~I6=Qpu_O0g2IOCBEZ=nvLglFZ+9AA&9lPlrTtTc>)Knn2|2 zS!J4c*Nt!34=nlhlESVsg;mWJ6-eZ3OVNjX$y6ODhm6Qn4g>PPYQ1Tvq zKbo~asd_`~3jeTY4-HWM!<&-pSwk9K&T)$ulT=*wQJ98t4sIoM+E7J%l(+lNvQ7nv zu_2SGQkSbv+c%ZG_(Xpxj5Vt3%}G4*uHeEiccn?J&xN4wKV+y*Pu8>~^*ADQezW|^ zgocG31wJOv57KRePiw|L;rW7yx#j6y$U>%AgD@$nm7~7E*lI&us8orgA zPqp_b)v+1oeA_^QF)%Q|O_xcB{9mBjG((Y}qJ(1Tb=I zNK%a?VnT37gIv}{L<=y0j5Ml31c1FX0~u?WM@WPRcM(D3w!RvFhf4%cC9&!}vG0LQp5bZK*)()6tP&aSdW6Jb*5Tf%=p0 z`~pbSUxEarPsSM#d5Z+}dV*j^WqskdJAZZEe*qGiBy6Gx1V|PbLa$1*uMZ(JWWaY? z@r^_zxZAj33ff(t6-L~p6UYruO`u>gGYfG3cl zcgg!s⩔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%0A_D8CPb*MFXr1?Fu& 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�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 diff --git a/product/common/resource/zh/gui/icon/robot/overlook.png b/product/common/resource/zh/gui/icon/robot/overlook.png deleted file mode 100644 index ae75f6c085b6e4cc44e15153046bf24e110dc1e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44761 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

        mytK?aAJsOE6^rbN&9$Oh-arNZ5p(!yJ8E< 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 Z^Isw0?}_AMMZo|7002ovPDHLkV1oCrfHnXC diff --git a/product/common/resource/zh/gui/icon/robot/down_arrow.png b/product/common/resource/zh/gui/icon/robot/down_arrow.png deleted file mode 100644 index 10fb526dadc0844671283c8c332e5f2f105d4462..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 zcmaJ=J8#oa7`0SXpwJ37id5<1E=9tR>o|36VnSj&G>C*KjnoVb_2Z_oTKgLNmbhJz zI+X>9k%d11Vnu?X6=GpxLPEg6Kgf)PRIbycWeBxo--pln&i8!QY}}ijxjw@%%xrDN zY|-^%_FkB#-(N4Luh3oeBZ|Cu6RAiVb-*0zFr~W{5 zalqRdhEIctvKgjWN+a9dLic4M@<+i1JHo384y zr8}UQYSci0hz-(UD@?RhXNPt*y3ei!77QU|Q)iEz>eQRSz%c@OKF_(L1c9RRFfXeR z-U5;ca{?3vN#!8aWJQC^VDzw5E%v%v%dC#H=t*aLghZMk^!t6jpW|`7AwX4C1yK?t ziK7TE*$IiAa$&MKwqT;fjs1xDI0TtR+risJXQ`*hAp}vqequOGMv0;+6H+@8ATJ6* zki|7bC!~c=-I$0@+B*>vS}4KWu}kaGT^y5X?#>p^@hIaR4tEV-bRjWUFmT&`9u zbGd4&`NFbUQKT`q7AC|FT{PDAsrHDgoXORU7}*5JZH%|ZUC``df|DMOfMI~8H9z!l zKe?Gz=r~{##r_lIRbw20VTv_>g1jhMIkgHcDqqN4uc#HHtjMNJd%!A7Id;VLCZuh| zt^SuQP-ld!KmO^L@fB^tYc-)x zyXV0DtC#k_9Xu^HZZ9k>%)eZ}{Ai~6##r0`c>ed?{NTsCLFxUq#jkq|IAmVemWqS4 Q^)s8%n$|?AbFXM-27VH5{e^M!@e>0Mt1H>7C9; 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 X1N=czW=W(^Zx5}J3bQ}{H<$kdf$=`9 diff --git a/product/common/resource/zh/gui/icon/robot/free.png b/product/common/resource/zh/gui/icon/robot/free.png deleted file mode 100644 index 3a8d148cc7dc7181cc5af00a6191b247c2016538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42966 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