From 3ceb9fbb780b82e29eb95695ab4defa04a1ad82b Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 21 Jun 2022 18:53:05 +0900 Subject: [PATCH 01/77] =?UTF-8?q?feat:=20=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=8F=96=E3=82=8A=E8=BE=BC=E3=81=BF=E3=83=90=E3=82=B1=E3=83=83?= =?UTF-8?q?=E3=83=88=E3=81=AB=E5=BE=A9=E5=8F=B7=E5=8C=96=E6=B8=88=E3=81=BF?= =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E3=81=99=E3=82=8B=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +++++- .../datadecrypt/main.py | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e4f6d9fb..0be1cd1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ lambda/mbj-newdwh2021-staging-NoticeToSlack/package-lock.json lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/* lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json -lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* \ No newline at end of file +lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* + +# Pythonの仮想環境 +.venv +__pycache__ diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index ec4d24ae..344e2641 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -144,7 +144,21 @@ def handler(event, context): except Exception as e: logger.error(f'E-07-02 PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') raise FileOutputException('E-07-02', EXTENSION_ERROR, e) - + # 「⑥」で復号化したファイルをデータ取込用バケットに出力する + try: + copy_source = { + 'Bucket': decrypt_bucket_name, + 'Key': decrypt_file_key + } + import_file_folder = f'{s3_event.data_source_name}{DIRECTORY_TARGET}' + import_file_key = f'{import_file_folder}{decrypt_file_name}' + logger.info(f'I-07-06 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{import_file_folder}') + import_file_obj = s3_resource.Object(s3_event.bucket_name, import_file_key) + import_file_obj.copy(copy_source) + logger.info(f'I-07-07 復号化ファイルをS3に出力しました') + except Exception as e: + logger.error(f'E-07-03 復号化ファイルのS3出力に失敗しました エラー内容:{e}') + raise FileOutputException('E-07-02', EXTENSION_ERROR, e) # ⑧ 処理終了ログを出力する logger.info('I-08-01 処理終了 SAPデータ復号処理') except EncryptFileReadException as e: From 0021e8b2d712f24fe28a24b79f97f4e0b49cb935 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 21 Jun 2022 18:59:07 +0900 Subject: [PATCH 02/77] =?UTF-8?q?feat:=20=E5=AE=9A=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88=E6=BC=8F=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datadecrypt/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 344e2641..1c0eee70 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -23,6 +23,7 @@ LOG_LEVEL = os.environ["LOG_LEVEL"] # 定数 DIRECTORY_RECV = '/recv/' DIRECTORY_RECV_ERROR = '/recv_error/' +DIRECTORY_TARGET = '/target/' EXTENSION_ERROR = '.error' EXTENSION_DECRYPT_ERROR = '.decrypt_error' INDEX_EXTENSION_DELETE_NUM = -4 From 3cc6b93c229491be74119a6fae23be81ca480996 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 21 Jun 2022 19:07:42 +0900 Subject: [PATCH 03/77] =?UTF-8?q?feat:=20traceback=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=82=8F=E3=81=9A=E3=81=AB=E3=80=81logger.exception=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit traceback.print_exc()で取得しているものと、logger.exception()で取得しているものがどちらともsys.exc_infoなので、同じ動きをするはず。 --- .../datadecrypt/main.py | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 1c0eee70..49eb8db0 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -6,7 +6,6 @@ import datetime import logging from abc import * from zoneinfo import ZoneInfo -import traceback # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] @@ -79,7 +78,7 @@ def handler(event, context): s3_client.download_file(s3_event.bucket_name, s3_event.file_path, PATH_TEMP_ENCRYPT_FILE) logger.info('I-03-02 PGP暗号化ファイルを読み込みました') except Exception as e: - logger.error(f'E-03-01 PGP暗号化ファイルの読み込みに失敗しました エラー内容:{e}') + logger.exception(f'E-03-01 PGP暗号化ファイルの読み込みに失敗しました エラー内容:{e}') raise EncryptFileReadException('E-03-01', EXTENSION_ERROR, e) # ④ S3から秘密鍵ファイルを読み込む @@ -88,7 +87,7 @@ def handler(event, context): s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) logger.info('I-04-02 秘密鍵ファイルを読み込みました') except Exception as e: - logger.error(f'E-04-01 秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}') + logger.exception(f'E-04-01 秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-04-01', EXTENSION_ERROR, e) # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う @@ -99,7 +98,7 @@ def handler(event, context): gpg.import_keys(key_file.read()) logger.info('I-05-02 秘密鍵ファイルをインポートしました') except Exception as e: - logger.error(f'E-05-01 秘密鍵ファイルのインポートに失敗しました エラー内容:{e}') + logger.exception(f'E-05-01 秘密鍵ファイルのインポートに失敗しました エラー内容:{e}') raise PrivateKeyImportException('E-05-01', EXTENSION_ERROR, e) # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する @@ -110,7 +109,7 @@ def handler(event, context): decrypt_file = open(PATH_TEMP_DECRYPT_FILE, 'rb') logger.info('I-06-02 PGP暗号化ファイルを復号しました') except Exception as e: - logger.error(f'E-06-01 PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}') + logger.exception(f'E-06-01 PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}') raise DecryptException('E-06-01', EXTENSION_DECRYPT_ERROR, e) # ⑦ 各ファイルをS3に出力する @@ -127,7 +126,7 @@ def handler(event, context): decrypt_file.close logger.info('I-07-03 復号化ファイルをS3に出力しました') except Exception as e: - logger.error(f'E-07-01 復号化ファイルのS3出力に失敗しました エラー内容:{e}') + logger.exception(f'E-07-01 復号化ファイルのS3出力に失敗しました エラー内容:{e}') raise FileOutputException('E-07-01', EXTENSION_ERROR, e) # 「④」で読み込んだPGP暗号化ファイルを以下に移動(コピー削除)する @@ -143,7 +142,7 @@ def handler(event, context): s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) logger.info('I-07-05 PGP暗号化ファイルをバックアップ用バケットに移動しました') except Exception as e: - logger.error(f'E-07-02 PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') + logger.exception(f'E-07-02 PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') raise FileOutputException('E-07-02', EXTENSION_ERROR, e) # 「⑥」で復号化したファイルをデータ取込用バケットに出力する try: @@ -158,22 +157,19 @@ def handler(event, context): import_file_obj.copy(copy_source) logger.info(f'I-07-07 復号化ファイルをS3に出力しました') except Exception as e: - logger.error(f'E-07-03 復号化ファイルのS3出力に失敗しました エラー内容:{e}') + logger.exception(f'E-07-03 復号化ファイルのS3出力に失敗しました エラー内容:{e}') raise FileOutputException('E-07-02', EXTENSION_ERROR, e) # ⑧ 処理終了ログを出力する logger.info('I-08-01 処理終了 SAPデータ復号処理') except EncryptFileReadException as e: - traceback.print_exc() create_status_file(s3_event, e.extension) error_notice(e.id, e.arg) except CustomException as e: - traceback.print_exc() create_status_file(s3_event, e.extension) move_encrypt_file(s3_event) error_notice(e.id, e.arg) except Exception as e: - logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') - traceback.print_exc() + logger.exception(f'E-99 想定外のエラーが発生しました エラー内容:{e}') create_status_file(s3_event, EXTENSION_ERROR) move_encrypt_file(s3_event) error_notice('E-99', e) @@ -189,8 +185,7 @@ def create_status_file(s3_event, extension) -> None: result_error_obj.put(Body='') logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') except Exception as e: - logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') - traceback.print_exc() + logger.exception(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') return @@ -208,8 +203,7 @@ def move_encrypt_file(s3_event) -> None: s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) logger.error(f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') except Exception as e: - logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') - traceback.print_exc() + logger.exception(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') return @@ -225,8 +219,7 @@ def error_notice(error_log_id, exception) -> None: sns_client.publish(**params) logger.error(f'E-ERR-03 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: - logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') - traceback.print_exc() + logger.exception(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') return From c67ff6c3f6ece9f895809ce4172a566f4975a885 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 23 Jun 2022 15:53:42 +0900 Subject: [PATCH 04/77] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=8F=96=E8=BE=BC=E3=81=AE=E3=81=9F=E3=82=81=E5=80=8B=E5=88=A5?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=9E=E3=83=83=E3=83=94=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE=E4=BD=9C=E6=88=90=E3=81=A8?= =?UTF-8?q?=E5=80=8B=E5=88=A5=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=92=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 11 +++++++++++ s3/data/SAP_fin/settings/IOReport.txt | 11 +++++++++++ s3/data/SAP_fin/settings/Invoice.txt | 11 +++++++++++ s3/data/SAP_fin/settings/WBSList.txt | 11 +++++++++++ s3/data/SAP_fin/settings/WBSReport.txt | 11 +++++++++++ s3/data/SAP_fin/settings/configmap.config | 7 +++++++ s3/data/SAP_sup/settings/ConfReport.txt | 11 +++++++++++ s3/data/SAP_sup/settings/GMReport.txt | 11 +++++++++++ s3/data/SAP_sup/settings/GRReport.txt | 11 +++++++++++ s3/data/SAP_sup/settings/MLCReport.txt | 11 +++++++++++ s3/data/SAP_sup/settings/POReport.txt | 11 +++++++++++ s3/data/SAP_sup/settings/QAReport.txt | 11 +++++++++++ s3/data/SAP_sup/settings/StockList.txt | 12 ++++++++++++ s3/data/SAP_sup/settings/configmap.config | 9 +++++++++ 14 files changed, 149 insertions(+) create mode 100644 s3/data/SAP_fin/settings/CostReport.txt create mode 100644 s3/data/SAP_fin/settings/IOReport.txt create mode 100644 s3/data/SAP_fin/settings/Invoice.txt create mode 100644 s3/data/SAP_fin/settings/WBSList.txt create mode 100644 s3/data/SAP_fin/settings/WBSReport.txt create mode 100644 s3/data/SAP_fin/settings/configmap.config create mode 100644 s3/data/SAP_sup/settings/ConfReport.txt create mode 100644 s3/data/SAP_sup/settings/GMReport.txt create mode 100644 s3/data/SAP_sup/settings/GRReport.txt create mode 100644 s3/data/SAP_sup/settings/MLCReport.txt create mode 100644 s3/data/SAP_sup/settings/POReport.txt create mode 100644 s3/data/SAP_sup/settings/QAReport.txt create mode 100644 s3/data/SAP_sup/settings/StockList.txt create mode 100644 s3/data/SAP_sup/settings/configmap.config diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt new file mode 100644 index 00000000..39657e4e --- /dev/null +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -0,0 +1,11 @@ +SAP_fin + +utf-8 +  +LF +1 +18 +VT,Fiscal Year,Fiscal Period,Cost Center,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number,Rev +vt,fiscal_year,fiscal_period,cost_center,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev +src03a.sapf_costreport +org03a.sapf_costreport diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt new file mode 100644 index 00000000..903bc5f1 --- /dev/null +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -0,0 +1,11 @@ +SAP_fin + +utf-8 +  +LF +1 +17 +Fiscal Year,Fiscal Period,Internal Order,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number +fiscal_year,fiscal_period,internal_order,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number +src03a.sapf_ioreport +org03a.sapf_ioreport diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt new file mode 100644 index 00000000..cc0fa03b --- /dev/null +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -0,0 +1,11 @@ +SAP_fin + +utf-8 +  +LF +1 +25 +Billing Type,Condition Type,Distribution channel,Invoiced number,Invoice item,Invoice date,Account number (Sold-to),Customer name,Ship-to,Ship-to(Name),Quantity invoiced,Extended amount (invoiced amount),Accrual value (rebate 1),Accrual % (rebate 1),Accrual value (rebate 2),Accrual % (rebate 2),Unit selling price,Item code,Item name,Tax,Order reason,Reference doc,Sales order No.,Rejected RSN,Batch number +billing_type,condition_type,distribution_channel,invoiced_number,invoice_item,invoice_date,account_number_sold_to,customer_name,ship_to,ship_to_name,quantity_invoiced,extended_amount_invoiced_amount,accrual_value_rebate_1,accrual_percent_rebate_1,accrual_value_rebate_2,accrual_percent_rebate_2,unit_selling_price,item_code,item_name,tax,order_reason,reference_doc,sales_order_no,rejected_rsn,batch_number +src03b.sapf_invoice +org03b.sapf_invoice diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt new file mode 100644 index 00000000..72ec9b4b --- /dev/null +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -0,0 +1,11 @@ +SAP_fin + +utf-8 +  +LF +1 +9 +WBS element,Level,Profit center,Project Definition,Description,Control area,Responsibility,Basic finish date,Basic start date +wbs_element,level,profit_center,project_definition,description,control_area,responsibility,basic_finish_date,basic_start_date +src03a.sapf_wbslist +org03a.sapf_wbslist \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt new file mode 100644 index 00000000..959ad4b7 --- /dev/null +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -0,0 +1,11 @@ +SAP_fin + +utf-8 +  +LF +1 +17 +Fiscal Year,Fiscal Period,WBS element,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number +fiscal_year,fiscal_period,wbs_element,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number +src03a.sapf_wbsreport +org03a.sapf_wbsreport diff --git a/s3/data/SAP_fin/settings/configmap.config b/s3/data/SAP_fin/settings/configmap.config new file mode 100644 index 00000000..77f4cdba --- /dev/null +++ b/s3/data/SAP_fin/settings/configmap.config @@ -0,0 +1,7 @@ +/* SAPデータ取込:Finance */ +CostReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) CostReport.txt +IOReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) IOReport.txt +WBSReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) WBSReport.txt +WBSList_{0-9}{8}_{0-9}{6}\.(TSV|tsv) WBSList.txt +Invoice_{0-9}{8}_{0-9}{6}\.(TSV|tsv) Invoice.txt + diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt new file mode 100644 index 00000000..222b70ca --- /dev/null +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -0,0 +1,11 @@ +SAP_sup + +utf-8 +  +LF +1 +11 +Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,cofirm.counter,cancelled. conf +process_order,operation_activity,yield,uom,posting_date,finish_execution_date,material,material_description,confirmation,cofirm_counter,cancelled_conf +src04.saps_gmreport +org04.saps_gmreport diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt new file mode 100644 index 00000000..56319751 --- /dev/null +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -0,0 +1,11 @@ +SAP_sup + +utf-8 +  +LF +1 +12 +Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty +process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty +src04.saps_gmreport +org04.saps_gmreport diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt new file mode 100644 index 00000000..b24d2754 --- /dev/null +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -0,0 +1,11 @@ +SAP_sup + +utf-8 +  +LF +1 +24 +Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text +plant,material,material_description4,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +src04.saps_grreport +org04.saps_grreport diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt new file mode 100644 index 00000000..6b71aa95 --- /dev/null +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -0,0 +1,11 @@ +SAP_sup + +utf-8 +  +LF +1 +24 +Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text +plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +src04.saps_mlcreport +org04.saps_mlcreport diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt new file mode 100644 index 00000000..89275e42 --- /dev/null +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -0,0 +1,11 @@ +SAP_sup + +utf-8 +  +LF +1 +12 +Purchasing Document,Vendor,Item,Material,Short Text,Document Date,Order Quantity,Order Unit,Net Order Value,Currency,Order Price Unit,Deletion Flag +purchasing_document,vendor,item,material,short_text,document_date,order_quantity,order_unit,net_order_value,currency,order_price_unit,deletion_flag +src04.saps_poreport +org04.saps_poreport diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt new file mode 100644 index 00000000..0b5d631b --- /dev/null +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -0,0 +1,11 @@ +SAP_sup + +utf-8 +  +LF +1 +24 +Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text +plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +src04.saps_qareport +org04.saps_qareport diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt new file mode 100644 index 00000000..db4816e5 --- /dev/null +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -0,0 +1,12 @@ +SAP_sup + +utf-8 +  +LF +1 +13 +SPL.stock Indic,Material Num.,Material Desc.,Storage Location,Batch Num.,Expired Date,Unrestricted Stock,In Quality Stock,Blocked Stock,Consign Stock,Total Stock Quantity,Sold to,Name +spl_stock_indic,material_num,material_desc,storage_location,batch_num,expired_date,unrestricted_stock,in_quality_stock,blocked_stock,consign_stock,total_stock_quantity,sold_to,name +src04.saps_stocklist +org04.saps_stocklist +StockList_ex.sql \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/configmap.config b/s3/data/SAP_sup/settings/configmap.config new file mode 100644 index 00000000..a4216eb9 --- /dev/null +++ b/s3/data/SAP_sup/settings/configmap.config @@ -0,0 +1,9 @@ +/* SAPデータ取込:SupplyChain */ +GRReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) GRReport.txt +QAReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) QAReport.txt +MLCReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) MLCReport.txt +MLCReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) MLCReport.txt +POReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) POReport.txt +StockList_{0-9}{8}_{0-9}{6}\.(TSV|tsv) StockList.txt +ConfReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) ConfReport.txt +GMReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) GMReport.txt \ No newline at end of file From 82dcb67d61e28b25a2601abc0cca1b2cff86996a Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 24 Jun 2022 14:54:41 +0900 Subject: [PATCH 05/77] =?UTF-8?q?feat:=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E9=A0=85=E7=9B=AE=E5=8C=BA=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=96=87=E5=AD=97=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E3=82=BF=E3=83=96=E6=96=87=E5=AD=97=E3=81=8B=E3=82=89\t?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 2 +- s3/data/SAP_fin/settings/IOReport.txt | 2 +- s3/data/SAP_fin/settings/Invoice.txt | 2 +- s3/data/SAP_fin/settings/WBSList.txt | 2 +- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- s3/data/SAP_sup/settings/ConfReport.txt | 2 +- s3/data/SAP_sup/settings/GMReport.txt | 2 +- s3/data/SAP_sup/settings/GRReport.txt | 2 +- s3/data/SAP_sup/settings/MLCReport.txt | 2 +- s3/data/SAP_sup/settings/POReport.txt | 2 +- s3/data/SAP_sup/settings/QAReport.txt | 2 +- s3/data/SAP_sup/settings/StockList.txt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index 39657e4e..c84e21d5 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -1,5 +1,5 @@ SAP_fin - +\t utf-8   LF diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 903bc5f1..3024832e 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -1,5 +1,5 @@ SAP_fin - +\t utf-8   LF diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index cc0fa03b..e9fab9b9 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -1,5 +1,5 @@ SAP_fin - +\t utf-8   LF diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index 72ec9b4b..e551215c 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -1,5 +1,5 @@ SAP_fin - +\t utf-8   LF diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 959ad4b7..7f3f5659 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,5 +1,5 @@ SAP_fin - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 222b70ca..fe66e804 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index 56319751..9dc26ca5 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index b24d2754..7a7f7543 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index 6b71aa95..64b54b21 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index 89275e42..17fe0c86 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index 0b5d631b..8df02796 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt index db4816e5..2734c78b 100644 --- a/s3/data/SAP_sup/settings/StockList.txt +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -1,5 +1,5 @@ SAP_sup - +\t utf-8   LF From b227542e087e6a1422f6e9e13203f869ce29af1b Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Mon, 27 Jun 2022 09:55:48 +0900 Subject: [PATCH 06/77] =?UTF-8?q?feat:=E5=9B=B2=E3=81=84=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=81=8C=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AF=E5=8D=8A?= =?UTF-8?q?=E8=A7=92=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9=E3=82=92=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 2 +- s3/data/SAP_fin/settings/IOReport.txt | 2 +- s3/data/SAP_fin/settings/Invoice.txt | 2 +- s3/data/SAP_fin/settings/WBSList.txt | 2 +- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- s3/data/SAP_sup/settings/ConfReport.txt | 2 +- s3/data/SAP_sup/settings/GMReport.txt | 4 ++-- s3/data/SAP_sup/settings/GRReport.txt | 2 +- s3/data/SAP_sup/settings/MLCReport.txt | 2 +- s3/data/SAP_sup/settings/POReport.txt | 2 +- s3/data/SAP_sup/settings/QAReport.txt | 2 +- s3/data/SAP_sup/settings/StockList.txt | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index c84e21d5..84a193c7 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -1,7 +1,7 @@ SAP_fin \t utf-8 -  + LF 1 18 diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 3024832e..918fa363 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -1,7 +1,7 @@ SAP_fin \t utf-8 -  + LF 1 17 diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index e9fab9b9..9ab7151b 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -1,7 +1,7 @@ SAP_fin \t utf-8 -  + LF 1 25 diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index e551215c..7007a6f0 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -1,7 +1,7 @@ SAP_fin \t utf-8 -  + LF 1 9 diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 7f3f5659..9deb0396 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,7 +1,7 @@ SAP_fin \t utf-8 -  + LF 1 17 diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index fe66e804..9740030b 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -1,7 +1,7 @@ SAP_sup \t utf-8 -  + LF 1 11 diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index 9dc26ca5..2181d12c 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -1,11 +1,11 @@ SAP_sup \t utf-8 -  + LF 1 12 Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty src04.saps_gmreport -org04.saps_gmreport +org04.saps_gmreport \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index 7a7f7543..cdef2b9b 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -1,7 +1,7 @@ SAP_sup \t utf-8 -  + LF 1 24 diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index 64b54b21..3cf6e804 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -1,7 +1,7 @@ SAP_sup \t utf-8 -  + LF 1 24 diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index 17fe0c86..a129c45f 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -1,7 +1,7 @@ SAP_sup \t utf-8 -  + LF 1 12 diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index 8df02796..2a41116a 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -1,7 +1,7 @@ SAP_sup \t utf-8 -  + LF 1 24 diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt index 2734c78b..6e96f9cf 100644 --- a/s3/data/SAP_sup/settings/StockList.txt +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -1,7 +1,7 @@ SAP_sup \t utf-8 -  + LF 1 13 From fb7cf53b65d9d77b2d1eb10cf5e84e4049e4c48b Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Tue, 28 Jun 2022 10:41:10 +0900 Subject: [PATCH 07/77] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=8F=96=E8=BE=BC=E3=81=AE=E3=81=9F=E3=82=81=E3=80=81Stocklist?= =?UTF-8?q?=E3=81=AE=E6=8B=A1=E5=BC=B5SQL=E3=82=92=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=81=97=E3=80=81=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87?= =?UTF-8?q?=E6=91=98=E5=AF=BE=E5=BF=9C=E3=82=92=E8=A1=8C=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_sup/settings/StockList_ex.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 s3/data/SAP_sup/settings/StockList_ex.sql diff --git a/s3/data/SAP_sup/settings/StockList_ex.sql b/s3/data/SAP_sup/settings/StockList_ex.sql new file mode 100644 index 00000000..92816fc8 --- /dev/null +++ b/s3/data/SAP_sup/settings/StockList_ex.sql @@ -0,0 +1,4 @@ +/* 蓄積スキーマ */ +/* execute_dateがnullのレコードを抽出し、取込ファイル名のyyyymmdd部分を切り出しセットする */ +update src04.saps_stocklist set +execute_date = REGEXP_SUBSTR(file_name,'[0-9]{8}') where execute_date is null; \ No newline at end of file From 2f41bfd49b7d5b4e0060d58de8aeefd7bb3896a2 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Tue, 28 Jun 2022 15:23:54 +0900 Subject: [PATCH 08/77] =?UTF-8?q?feat:=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E4=BA=8B=E9=A0=85=E3=82=92=E6=8B=A1=E5=BC=B5?= =?UTF-8?q?SQL=E3=81=AB=E5=8F=8D=E6=98=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_sup/settings/StockList_ex.sql | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/s3/data/SAP_sup/settings/StockList_ex.sql b/s3/data/SAP_sup/settings/StockList_ex.sql index 92816fc8..d3f3d10c 100644 --- a/s3/data/SAP_sup/settings/StockList_ex.sql +++ b/s3/data/SAP_sup/settings/StockList_ex.sql @@ -1,4 +1,7 @@ /* 蓄積スキーマ */ /* execute_dateがnullのレコードを抽出し、取込ファイル名のyyyymmdd部分を切り出しセットする */ -update src04.saps_stocklist set -execute_date = REGEXP_SUBSTR(file_name,'[0-9]{8}') where execute_date is null; \ No newline at end of file +update src04.saps_stocklist +set + execute_date = STR_TO_DATE(SUBSTRING(file_name,11,8),'%Y%m%d') +where + execute_date is null \ No newline at end of file From fb50e497b2dfca7caa2ec181d31218ed3372c199 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 30 Jun 2022 16:49:53 +0900 Subject: [PATCH 09/77] =?UTF-8?q?fix:=E5=80=8B=E5=88=A5=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=94=E3=83=B3=E3=82=B0=E3=83=AA=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AE=E6=AD=A3=E8=A6=8F=E8=A1=A8=E7=8F=BE=E3=81=AE?= =?UTF-8?q?=E8=AA=A4=E3=82=8A=E3=81=8C=E3=81=82=E3=82=8A=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/configmap.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/s3/data/SAP_fin/settings/configmap.config b/s3/data/SAP_fin/settings/configmap.config index 77f4cdba..5d466ebb 100644 --- a/s3/data/SAP_fin/settings/configmap.config +++ b/s3/data/SAP_fin/settings/configmap.config @@ -1,7 +1,7 @@ /* SAPデータ取込:Finance */ -CostReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) CostReport.txt -IOReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) IOReport.txt -WBSReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) WBSReport.txt -WBSList_{0-9}{8}_{0-9}{6}\.(TSV|tsv) WBSList.txt -Invoice_{0-9}{8}_{0-9}{6}\.(TSV|tsv) Invoice.txt +CostReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) CostReport.txt +IOReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) IOReport.txt +WBSReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) WBSReport.txt +WBSList_[0-9]{8}_[0-9]{6}\.(TSV|tsv) WBSList.txt +Invoice_[0-9]{8}_[0-9]{6}\.(TSV|tsv) Invoice.txt From 22955d8dc5aba54a55386d85a64c25629f736eea Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 30 Jun 2022 17:04:36 +0900 Subject: [PATCH 10/77] =?UTF-8?q?fix:=E5=80=8B=E5=88=A5=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=A7=E5=8C=BA=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=96=87=E5=AD=97=E3=81=AB=E3=80=8C\t=E3=80=8D?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=A6=E3=82=82=E3=80=81?= =?UTF-8?q?=E3=82=BF=E3=83=96=E5=8C=BA=E5=88=87=E3=82=8A=E3=81=AE=E6=96=87?= =?UTF-8?q?=E5=AD=97=E3=82=92=E5=88=86=E5=89=B2=E3=81=A7=E3=81=8D=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=82=81=E3=82=BF=E3=83=96=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 2 +- s3/data/SAP_fin/settings/IOReport.txt | 2 +- s3/data/SAP_fin/settings/Invoice.txt | 2 +- s3/data/SAP_fin/settings/WBSList.txt | 2 +- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- s3/data/SAP_sup/settings/ConfReport.txt | 2 +- s3/data/SAP_sup/settings/GMReport.txt | 2 +- s3/data/SAP_sup/settings/GRReport.txt | 2 +- s3/data/SAP_sup/settings/MLCReport.txt | 2 +- s3/data/SAP_sup/settings/POReport.txt | 2 +- s3/data/SAP_sup/settings/QAReport.txt | 2 +- s3/data/SAP_sup/settings/StockList.txt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index 84a193c7..28877767 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -1,5 +1,5 @@ SAP_fin -\t + utf-8 LF diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 918fa363..8c09e651 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -1,5 +1,5 @@ SAP_fin -\t + utf-8 LF diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 9ab7151b..13430d0d 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -1,5 +1,5 @@ SAP_fin -\t + utf-8 LF diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index 7007a6f0..9247ca7f 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -1,5 +1,5 @@ SAP_fin -\t + utf-8 LF diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 9deb0396..000959c5 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,5 +1,5 @@ SAP_fin -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 9740030b..af59684d 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index 2181d12c..fe4fec3d 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index cdef2b9b..5b9de358 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index 3cf6e804..0f67ad56 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index a129c45f..f6c0ca59 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index 2a41116a..794a23a0 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt index 6e96f9cf..338898d8 100644 --- a/s3/data/SAP_sup/settings/StockList.txt +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -1,5 +1,5 @@ SAP_sup -\t + utf-8 LF From edc5637060e03f71a1853d5ac05adcb59e194302 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 1 Jul 2022 09:28:29 +0900 Subject: [PATCH 11/77] =?UTF-8?q?fix:SupplyChain=E3=81=AE=E5=80=8B?= =?UTF-8?q?=E5=88=A5=E8=A8=AD=E5=AE=9A=E3=83=9E=E3=83=83=E3=83=94=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE=E6=AD=A3=E8=A6=8F?= =?UTF-8?q?=E8=A1=A8=E7=8F=BE=E3=81=AE=E8=AA=A4=E3=82=8A=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=82=8A=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_sup/settings/configmap.config | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/s3/data/SAP_sup/settings/configmap.config b/s3/data/SAP_sup/settings/configmap.config index a4216eb9..857e4047 100644 --- a/s3/data/SAP_sup/settings/configmap.config +++ b/s3/data/SAP_sup/settings/configmap.config @@ -1,9 +1,9 @@ /* SAPデータ取込:SupplyChain */ -GRReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) GRReport.txt -QAReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) QAReport.txt -MLCReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) MLCReport.txt -MLCReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) MLCReport.txt -POReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) POReport.txt -StockList_{0-9}{8}_{0-9}{6}\.(TSV|tsv) StockList.txt -ConfReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) ConfReport.txt -GMReport_{0-9}{8}_{0-9}{6}\.(TSV|tsv) GMReport.txt \ No newline at end of file +GRReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) GRReport.txt +QAReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) QAReport.txt +MLCReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) MLCReport.txt +MLCReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) MLCReport.txt +POReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) POReport.txt +StockList_[0-9]{8}_[0-9]{6}\.(TSV|tsv) StockList.txt +ConfReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) ConfReport.txt +GMReport_[0-9]{8}_[0-9]{6}\.(TSV|tsv) GMReport.txt \ No newline at end of file From e1acd610b0e17a6ce35a1cbb3777642453802065 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Jul 2022 14:57:43 +0900 Subject: [PATCH 12/77] =?UTF-8?q?feat:=20Lambda=E9=96=A2=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=83=97=E3=83=AD=E3=82=A4=E3=81=BE=E3=81=A7=E3=81=AF?= =?UTF-8?q?=E5=AE=8C=E4=BA=86=E3=80=82=E9=96=A2=E6=95=B0=E3=81=AE=E4=B8=AD?= =?UTF-8?q?=E8=BA=AB=E3=81=AF=E3=81=BE=E3=81=A0=E7=A9=BA=E3=81=A3=E3=81=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- lambda/check-view-secutiry-option/Dockerfile | 15 ++ lambda/check-view-secutiry-option/Pipfile | 16 ++ .../check-view-secutiry-option/Pipfile.lock | 209 ++++++++++++++++++ lambda/check-view-secutiry-option/main.py | 5 + 5 files changed, 247 insertions(+), 1 deletion(-) create mode 100644 lambda/check-view-secutiry-option/Dockerfile create mode 100644 lambda/check-view-secutiry-option/Pipfile create mode 100644 lambda/check-view-secutiry-option/Pipfile.lock create mode 100644 lambda/check-view-secutiry-option/main.py diff --git a/.gitignore b/.gitignore index e4f6d9fb..65e6a105 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ lambda/mbj-newdwh2021-staging-NoticeToSlack/package-lock.json lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/* lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json -lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* \ No newline at end of file +lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* +__pycache__/ \ No newline at end of file diff --git a/lambda/check-view-secutiry-option/Dockerfile b/lambda/check-view-secutiry-option/Dockerfile new file mode 100644 index 00000000..637e1e0c --- /dev/null +++ b/lambda/check-view-secutiry-option/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.9 + +ENV WORKDIR /function/ +ENV TZ="Asia/Tokyo" +WORKDIR ${WORKDIR} + +COPY Pipfile Pipfile.lock ${WORKDIR} +RUN pip install pipenv --no-cache-dir && \ + pipenv install --system --deploy && \ + pip uninstall -y pipenv virtualenv-clone virtualenv +COPY ./src $WORKDIRsrc +COPY main.py $WORKDIR + +ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ] +CMD [ "main.handler" ] diff --git a/lambda/check-view-secutiry-option/Pipfile b/lambda/check-view-secutiry-option/Pipfile new file mode 100644 index 00000000..d6f3b1ee --- /dev/null +++ b/lambda/check-view-secutiry-option/Pipfile @@ -0,0 +1,16 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +awslambdaric = "*" +boto3 = "*" +pymysql = "*" + +[dev-packages] +autopep8 = "*" +flake8 = "*" + +[requires] +python_version = "3.9" diff --git a/lambda/check-view-secutiry-option/Pipfile.lock b/lambda/check-view-secutiry-option/Pipfile.lock new file mode 100644 index 00000000..a93003e7 --- /dev/null +++ b/lambda/check-view-secutiry-option/Pipfile.lock @@ -0,0 +1,209 @@ +{ + "_meta": { + "hash": { + "sha256": "9521eb0e33f733846811775b587cd94d7660f2e612b8efcbd622fd4d19122916" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.9" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "awslambdaric": { + "hashes": [ + "sha256:059c7a66d4470169e01620d93f07424b80d302e3736cd11e68373f293a41e396", + "sha256:0e90053614f0e5e5d6d6ae6d164412ce95b5d549c6fb0f6ff4290d77c5e9d3e5", + "sha256:11a365164efec105aa670259dfe473d9609da8f6f2e468790b2dfc24969bfff1", + "sha256:19da28e8c892b1c52a9db4d2b986af303932e3a4c4632eb0c5d5eb6a673c6022", + "sha256:2eb2fdb1ae0f84669d37f193f247fa115a282a7777e051ced3a33620d6280646", + "sha256:2efff2292fc8f8484eb094ffd77808a67815353be898a7f0b33ce51b841af691", + "sha256:387b94cb0358662ae2b203f0aa2af25e80c6a2019a6b569f733ecd993a4f53d2", + "sha256:38f8ae67ecb5b4e9f7fc42746ee39765dd7ddab359cb7e8ebfda1de0f0c0b059", + "sha256:3fd0e1b3891987fa7ebb0c08d24c76af5fc17466f6efdfa9a59848dfb23930ec", + "sha256:63a82d21d66146b3fde7eb6086abd058b75bdcab4a02b02afe0e8e4a45edfb5b", + "sha256:676a741ad8f3aa27d651bcf3a2b83d5cee815f99c8b2b9abef3cb22ca7b29698", + "sha256:9b0781bd41c20a2f2a0b018464a1daa376f663bd5eb7b0b6ba78f483681b1519", + "sha256:bad98f2f94cecc90b89ac4e1d4feed96eb664e13c29b7ce232444cc9358e0d36", + "sha256:d64dcba8da9dbea62644133a48c75376a37bfe0f84096ad73bf7fc5b2eb31fc7", + "sha256:d8f280b25d8a7ae6b6ff92a9bbc6567b984264be8ef3e0fcb0402a1247f6c75d", + "sha256:dad646f566aa7ec9b7179f16ca6741a2bea148abec6ed5947f86d00607e0a9a2", + "sha256:dc7072f642fdd215387d4921bbd5ac91b96a4a705bce5e7853622d09fe59f57d", + "sha256:fbbd24446ce2f876335b178f04aa4ec7ec480afc0f9621ebfdd5f55ad4b7c06e", + "sha256:fe76893a1b42bcee4c91c6456092d2a42455818756e8f62d50e8c5adb22fa9e7" + ], + "index": "pypi", + "version": "==2.0.4" + }, + "boto3": { + "hashes": [ + "sha256:4a7cf5fddb1626d25c5935c5a82afdff9c7fe2faac2a68d37edf0264b3a85127", + "sha256:bd0b94428ae7cc57904d3c903d9393bdf4dd2b1274d1c51749f27f5bd76953e1" + ], + "index": "pypi", + "version": "==1.24.18" + }, + "botocore": { + "hashes": [ + "sha256:20a866351f9f65cfe27edc21d755de60e17a1fbb1273d73fc0006ed0d6f8ef86", + "sha256:74426179c75debd77c6dcc2d66cfd506e52962e605d2b9f2dbca290474539c8b" + ], + "markers": "python_version >= '3.7'", + "version": "==1.27.18" + }, + "jmespath": { + "hashes": [ + "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", + "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" + ], + "markers": "python_version >= '3.7'", + "version": "==1.0.1" + }, + "pymysql": { + "hashes": [ + "sha256:41fc3a0c5013d5f039639442321185532e3e2c8924687abe6537de157d403641", + "sha256:816927a350f38d56072aeca5dfb10221fe1dc653745853d30a216637f5d7ad36" + ], + "index": "pypi", + "version": "==1.0.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.8.2" + }, + "s3transfer": { + "hashes": [ + "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd", + "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947" + ], + "markers": "python_version >= '3.7'", + "version": "==0.6.0" + }, + "simplejson": { + "hashes": [ + "sha256:034550078a11664d77bc1a8364c90bb7eef0e44c2dbb1fd0a4d92e3997088667", + "sha256:05b43d568300c1cd43f95ff4bfcff984bc658aa001be91efb3bb21df9d6288d3", + "sha256:0dd9d9c738cb008bfc0862c9b8fa6743495c03a0ed543884bf92fb7d30f8d043", + "sha256:10fc250c3edea4abc15d930d77274ddb8df4803453dde7ad50c2f5565a18a4bb", + "sha256:2862beabfb9097a745a961426fe7daf66e1714151da8bb9a0c430dde3d59c7c0", + "sha256:292c2e3f53be314cc59853bd20a35bf1f965f3bc121e007ab6fd526ed412a85d", + "sha256:2d3eab2c3fe52007d703a26f71cf649a8c771fcdd949a3ae73041ba6797cfcf8", + "sha256:2e7b57c2c146f8e4dadf84977a83f7ee50da17c8861fd7faf694d55e3274784f", + "sha256:311f5dc2af07361725033b13cc3d0351de3da8bede3397d45650784c3f21fbcf", + "sha256:344e2d920a7f27b4023c087ab539877a1e39ce8e3e90b867e0bfa97829824748", + "sha256:3fabde09af43e0cbdee407555383063f8b45bfb52c361bc5da83fcffdb4fd278", + "sha256:42b8b8dd0799f78e067e2aaae97e60d58a8f63582939af60abce4c48631a0aa4", + "sha256:4b3442249d5e3893b90cb9f72c7d6ce4d2ea144d2c0d9f75b9ae1e5460f3121a", + "sha256:55d65f9cc1b733d85ef95ab11f559cce55c7649a2160da2ac7a078534da676c8", + "sha256:5c659a0efc80aaaba57fcd878855c8534ecb655a28ac8508885c50648e6e659d", + "sha256:72d8a3ffca19a901002d6b068cf746be85747571c6a7ba12cbcf427bfb4ed971", + "sha256:75ecc79f26d99222a084fbdd1ce5aad3ac3a8bd535cd9059528452da38b68841", + "sha256:76ac9605bf2f6d9b56abf6f9da9047a8782574ad3531c82eae774947ae99cc3f", + "sha256:7d276f69bfc8c7ba6c717ba8deaf28f9d3c8450ff0aa8713f5a3280e232be16b", + "sha256:7f10f8ba9c1b1430addc7dd385fc322e221559d3ae49b812aebf57470ce8de45", + "sha256:8042040af86a494a23c189b5aa0ea9433769cc029707833f261a79c98e3375f9", + "sha256:813846738277729d7db71b82176204abc7fdae2f566e2d9fcf874f9b6472e3e6", + "sha256:845a14f6deb124a3bcb98a62def067a67462a000e0508f256f9c18eff5847efc", + "sha256:869a183c8e44bc03be1b2bbcc9ec4338e37fa8557fc506bf6115887c1d3bb956", + "sha256:8acf76443cfb5c949b6e781c154278c059b09ac717d2757a830c869ba000cf8d", + "sha256:8f713ea65958ef40049b6c45c40c206ab363db9591ff5a49d89b448933fa5746", + "sha256:934115642c8ba9659b402c8bdbdedb48651fb94b576e3b3efd1ccb079609b04a", + "sha256:9551f23e09300a9a528f7af20e35c9f79686d46d646152a0c8fc41d2d074d9b0", + "sha256:9a2b7543559f8a1c9ed72724b549d8cc3515da7daf3e79813a15bdc4a769de25", + "sha256:a55c76254d7cf8d4494bc508e7abb993a82a192d0db4552421e5139235604625", + "sha256:ad8f41c2357b73bc9e8606d2fa226233bf4d55d85a8982ecdfd55823a6959995", + "sha256:af4868da7dd53296cd7630687161d53a7ebe2e63814234631445697bd7c29f46", + "sha256:afebfc3dd3520d37056f641969ce320b071bc7a0800639c71877b90d053e087f", + "sha256:b59aa298137ca74a744c1e6e22cfc0bf9dca3a2f41f51bc92eb05695155d905a", + "sha256:bc00d1210567a4cdd215ac6e17dc00cb9893ee521cee701adfd0fa43f7c73139", + "sha256:c1cb29b1fced01f97e6d5631c3edc2dadb424d1f4421dad079cb13fc97acb42f", + "sha256:c94dc64b1a389a416fc4218cd4799aa3756f25940cae33530a4f7f2f54f166da", + "sha256:ceaa28a5bce8a46a130cd223e895080e258a88d51bf6e8de2fc54a6ef7e38c34", + "sha256:cff6453e25204d3369c47b97dd34783ca820611bd334779d22192da23784194b", + "sha256:d0b64409df09edb4c365d95004775c988259efe9be39697d7315c42b7a5e7e94", + "sha256:d4813b30cb62d3b63ccc60dd12f2121780c7a3068db692daeb90f989877aaf04", + "sha256:da3c55cdc66cfc3fffb607db49a42448785ea2732f055ac1549b69dcb392663b", + "sha256:e058c7656c44fb494a11443191e381355388443d543f6fc1a245d5d238544396", + "sha256:fed0f22bf1313ff79c7fc318f7199d6c2f96d4de3234b2f12a1eab350e597c06", + "sha256:ffd4e4877a78c84d693e491b223385e0271278f5f4e1476a4962dca6824ecfeb" + ], + "markers": "python_version >= '2.5' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==3.17.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "urllib3": { + "hashes": [ + "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", + "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", + "version": "==1.26.9" + } + }, + "develop": { + "autopep8": { + "hashes": [ + "sha256:44f0932855039d2c15c4510d6df665e4730f2b8582704fa48f9c55bd3e17d979", + "sha256:ed77137193bbac52d029a52c59bec1b0629b5a186c495f1eb21b126ac466083f" + ], + "index": "pypi", + "version": "==1.6.0" + }, + "flake8": { + "hashes": [ + "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d", + "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d" + ], + "index": "pypi", + "version": "==4.0.1" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", + "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.8.0" + }, + "pyflakes": { + "hashes": [ + "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c", + "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.4.0" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + } + } +} diff --git a/lambda/check-view-secutiry-option/main.py b/lambda/check-view-secutiry-option/main.py new file mode 100644 index 00000000..31ce8430 --- /dev/null +++ b/lambda/check-view-secutiry-option/main.py @@ -0,0 +1,5 @@ +def handler(event, context): + try: + print('lambda handle') + except Exception as e: + print('exception') From f5d6e6b5252e9464fe75d3d533de3d5cfe27bba4 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Jul 2022 14:57:43 +0900 Subject: [PATCH 13/77] =?UTF-8?q?feat:=20=E3=83=AD=E3=82=AC=E3=83=BC?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=A8=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-secutiry-option/main.py | 22 ++++++++++-- .../src/error/file_not_found_exception.py | 5 +++ .../src/error/madaca_exception.py | 7 ++++ .../src/logger/logger.py | 36 +++++++++++++++++++ .../src/system_vars/constants.py | 3 ++ .../src/system_vars/environments.py | 3 ++ 6 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 lambda/check-view-secutiry-option/src/error/file_not_found_exception.py create mode 100644 lambda/check-view-secutiry-option/src/error/madaca_exception.py create mode 100644 lambda/check-view-secutiry-option/src/logger/logger.py create mode 100644 lambda/check-view-secutiry-option/src/system_vars/constants.py create mode 100644 lambda/check-view-secutiry-option/src/system_vars/environments.py diff --git a/lambda/check-view-secutiry-option/main.py b/lambda/check-view-secutiry-option/main.py index 31ce8430..0ac8513b 100644 --- a/lambda/check-view-secutiry-option/main.py +++ b/lambda/check-view-secutiry-option/main.py @@ -1,5 +1,21 @@ +""" +Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント +""" + +from src.error.file_not_found_exception import FileNotFoundException +from src.error.madaca_exception import MeDaCaException +from src.logger.logger import MeDaCaLogger + + def handler(event, context): + logger = MeDaCaLogger.get_logger() try: - print('lambda handle') - except Exception as e: - print('exception') + logger.info('lambda handle') + raise FileNotFoundException('E-02-01', 'ファイル見つかりません') + except MeDaCaException as e: + logger.exception(f'exception: {e.error_id} {e}') + + +# ローカル実行用 +if __name__ == '__main__': + handler({}, {}) diff --git a/lambda/check-view-secutiry-option/src/error/file_not_found_exception.py b/lambda/check-view-secutiry-option/src/error/file_not_found_exception.py new file mode 100644 index 00000000..f3ea4438 --- /dev/null +++ b/lambda/check-view-secutiry-option/src/error/file_not_found_exception.py @@ -0,0 +1,5 @@ +from .madaca_exception import MeDaCaException + + +class FileNotFoundException(MeDaCaException): + pass diff --git a/lambda/check-view-secutiry-option/src/error/madaca_exception.py b/lambda/check-view-secutiry-option/src/error/madaca_exception.py new file mode 100644 index 00000000..b79129ae --- /dev/null +++ b/lambda/check-view-secutiry-option/src/error/madaca_exception.py @@ -0,0 +1,7 @@ +from abc import ABCMeta + + +class MeDaCaException(Exception, metaclass=ABCMeta): + def __init__(self, error_id: str, message) -> None: + super().__init__(message) + self.error_id = error_id diff --git a/lambda/check-view-secutiry-option/src/logger/logger.py b/lambda/check-view-secutiry-option/src/logger/logger.py new file mode 100644 index 00000000..4e71d919 --- /dev/null +++ b/lambda/check-view-secutiry-option/src/logger/logger.py @@ -0,0 +1,36 @@ +import datetime +import logging +from zoneinfo import ZoneInfo + +from ..system_vars.constants import (DEFAULT_TIMEZONE, LOG_DATE_FORMAT, + LOG_FORMAT) +from ..system_vars.environments import LOG_LEVEL + + +class SingletonLogger: + # インスタンス生成 + @staticmethod + def __internal_new__() -> logging.Logger: + # logger設定 + formatter = logging.Formatter( + LOG_FORMAT, + LOG_DATE_FORMAT + ) + formatter.converter = lambda: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple() + level = logging.getLevelName(LOG_LEVEL) + + logging.basicConfig(level=level, format=LOG_FORMAT, datefmt=LOG_DATE_FORMAT) + # logger.setLevel(level) + logger = logging.getLogger() + return logger + + +class MeDaCaLogger: + __unique_instance: logging.Logger = None + + @staticmethod + def get_logger(): + # インスタンス未生成の場合、唯一のインスタンスを生成する + if not MeDaCaLogger.__unique_instance: + MeDaCaLogger.__unique_instance = SingletonLogger.__internal_new__() + return MeDaCaLogger.__unique_instance diff --git a/lambda/check-view-secutiry-option/src/system_vars/constants.py b/lambda/check-view-secutiry-option/src/system_vars/constants.py new file mode 100644 index 00000000..23f2fbc7 --- /dev/null +++ b/lambda/check-view-secutiry-option/src/system_vars/constants.py @@ -0,0 +1,3 @@ +LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n' +LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' +DEFAULT_TIMEZONE = "Asia/Tokyo" diff --git a/lambda/check-view-secutiry-option/src/system_vars/environments.py b/lambda/check-view-secutiry-option/src/system_vars/environments.py new file mode 100644 index 00000000..c1d95246 --- /dev/null +++ b/lambda/check-view-secutiry-option/src/system_vars/environments.py @@ -0,0 +1,3 @@ +import os + +LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') From 77ad303506831a1d1435c2ed6fb1ca9d7cd60c49 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Jul 2022 14:57:43 +0900 Subject: [PATCH 14/77] =?UTF-8?q?feat:=20=E5=A4=96=E3=81=AE=E3=83=A2?= =?UTF-8?q?=E3=82=B8=E3=83=A5=E3=83=BC=E3=83=AB=E3=80=81=E5=90=8C=E9=9A=8E?= =?UTF-8?q?=E5=B1=A4=E3=81=AB=E7=84=A1=E3=81=84=E3=81=A8=E3=81=A0=E3=82=81?= =?UTF-8?q?=E3=81=A3=E3=81=BD=E3=81=84.=E3=81=BE=E3=81=A0=E5=8B=95?= =?UTF-8?q?=E3=81=8B=E3=81=AA=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-secutiry-option/Dockerfile | 3 +-- .../system_vars => check-view-option}/constants.py | 0 .../environments.py | 0 .../exceptions.py} | 4 ++++ .../{ => check-view-option}/main.py | 10 +++++----- .../medaca_logger.py} | 14 +++++++------- .../src/error/file_not_found_exception.py | 5 ----- 7 files changed, 17 insertions(+), 19 deletions(-) rename lambda/check-view-secutiry-option/{src/system_vars => check-view-option}/constants.py (100%) rename lambda/check-view-secutiry-option/{src/system_vars => check-view-option}/environments.py (100%) rename lambda/check-view-secutiry-option/{src/error/madaca_exception.py => check-view-option/exceptions.py} (77%) rename lambda/check-view-secutiry-option/{ => check-view-option}/main.py (57%) rename lambda/check-view-secutiry-option/{src/logger/logger.py => check-view-option/medaca_logger.py} (75%) delete mode 100644 lambda/check-view-secutiry-option/src/error/file_not_found_exception.py diff --git a/lambda/check-view-secutiry-option/Dockerfile b/lambda/check-view-secutiry-option/Dockerfile index 637e1e0c..681c462a 100644 --- a/lambda/check-view-secutiry-option/Dockerfile +++ b/lambda/check-view-secutiry-option/Dockerfile @@ -8,8 +8,7 @@ COPY Pipfile Pipfile.lock ${WORKDIR} RUN pip install pipenv --no-cache-dir && \ pipenv install --system --deploy && \ pip uninstall -y pipenv virtualenv-clone virtualenv -COPY ./src $WORKDIRsrc -COPY main.py $WORKDIR +COPY check-view-option ./ ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ] CMD [ "main.handler" ] diff --git a/lambda/check-view-secutiry-option/src/system_vars/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py similarity index 100% rename from lambda/check-view-secutiry-option/src/system_vars/constants.py rename to lambda/check-view-secutiry-option/check-view-option/constants.py diff --git a/lambda/check-view-secutiry-option/src/system_vars/environments.py b/lambda/check-view-secutiry-option/check-view-option/environments.py similarity index 100% rename from lambda/check-view-secutiry-option/src/system_vars/environments.py rename to lambda/check-view-secutiry-option/check-view-option/environments.py diff --git a/lambda/check-view-secutiry-option/src/error/madaca_exception.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py similarity index 77% rename from lambda/check-view-secutiry-option/src/error/madaca_exception.py rename to lambda/check-view-secutiry-option/check-view-option/exceptions.py index b79129ae..131a0126 100644 --- a/lambda/check-view-secutiry-option/src/error/madaca_exception.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -5,3 +5,7 @@ class MeDaCaException(Exception, metaclass=ABCMeta): def __init__(self, error_id: str, message) -> None: super().__init__(message) self.error_id = error_id + + +class FileNotFoundException(MeDaCaException): + pass diff --git a/lambda/check-view-secutiry-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py similarity index 57% rename from lambda/check-view-secutiry-option/main.py rename to lambda/check-view-secutiry-option/check-view-option/main.py index 0ac8513b..fa6e8156 100644 --- a/lambda/check-view-secutiry-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -2,9 +2,8 @@ Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント """ -from src.error.file_not_found_exception import FileNotFoundException -from src.error.madaca_exception import MeDaCaException -from src.logger.logger import MeDaCaLogger +from exceptions import FileNotFoundException, MeDaCaException +from medaca_logger import MeDaCaLogger def handler(event, context): @@ -12,8 +11,9 @@ def handler(event, context): try: logger.info('lambda handle') raise FileNotFoundException('E-02-01', 'ファイル見つかりません') - except MeDaCaException as e: - logger.exception(f'exception: {e.error_id} {e}') + except Exception as e: + logger.exception(f'exception: {e}') + # logger.exception(f'exception: {e.error_id} {e}') # ローカル実行用 diff --git a/lambda/check-view-secutiry-option/src/logger/logger.py b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py similarity index 75% rename from lambda/check-view-secutiry-option/src/logger/logger.py rename to lambda/check-view-secutiry-option/check-view-option/medaca_logger.py index 4e71d919..701ecb5e 100644 --- a/lambda/check-view-secutiry-option/src/logger/logger.py +++ b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py @@ -2,9 +2,8 @@ import datetime import logging from zoneinfo import ZoneInfo -from ..system_vars.constants import (DEFAULT_TIMEZONE, LOG_DATE_FORMAT, - LOG_FORMAT) -from ..system_vars.environments import LOG_LEVEL +from constants import DEFAULT_TIMEZONE, LOG_DATE_FORMAT, LOG_FORMAT +from environments import LOG_LEVEL class SingletonLogger: @@ -12,16 +11,17 @@ class SingletonLogger: @staticmethod def __internal_new__() -> logging.Logger: # logger設定 + logger = logging.getLogger() formatter = logging.Formatter( LOG_FORMAT, LOG_DATE_FORMAT ) formatter.converter = lambda: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple() + for handler in logger.handlers: + handler.setFormatter(formatter) level = logging.getLevelName(LOG_LEVEL) - - logging.basicConfig(level=level, format=LOG_FORMAT, datefmt=LOG_DATE_FORMAT) - # logger.setLevel(level) - logger = logging.getLogger() + print(level) + logger.setLevel(level) return logger diff --git a/lambda/check-view-secutiry-option/src/error/file_not_found_exception.py b/lambda/check-view-secutiry-option/src/error/file_not_found_exception.py deleted file mode 100644 index f3ea4438..00000000 --- a/lambda/check-view-secutiry-option/src/error/file_not_found_exception.py +++ /dev/null @@ -1,5 +0,0 @@ -from .madaca_exception import MeDaCaException - - -class FileNotFoundException(MeDaCaException): - pass From af34d6a3d5fba7766e03736489478e8037c472ab Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Jul 2022 14:57:43 +0900 Subject: [PATCH 15/77] =?UTF-8?q?fix:=20=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-secutiry-option/check-view-option/main.py | 5 ++--- .../check-view-option/medaca_logger.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index fa6e8156..d39b4ce4 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -11,9 +11,8 @@ def handler(event, context): try: logger.info('lambda handle') raise FileNotFoundException('E-02-01', 'ファイル見つかりません') - except Exception as e: - logger.exception(f'exception: {e}') - # logger.exception(f'exception: {e.error_id} {e}') + except MeDaCaException as e: + logger.exception(f'exception: {e.error_id} {e}') # ローカル実行用 diff --git a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py index 701ecb5e..5546d07a 100644 --- a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py +++ b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py @@ -16,7 +16,7 @@ class SingletonLogger: LOG_FORMAT, LOG_DATE_FORMAT ) - formatter.converter = lambda: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple() + formatter.converter = lambda *arg: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple() for handler in logger.handlers: handler.setFormatter(formatter) level = logging.getLevelName(LOG_LEVEL) From 3337a0abff2db606894301179dc36ca7ced6880b Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Jul 2022 14:57:43 +0900 Subject: [PATCH 16/77] =?UTF-8?q?feat:=20=E3=83=AD=E3=83=BC=E3=82=AB?= =?UTF-8?q?=E3=83=AB=E5=AE=9F=E8=A1=8C=E7=94=A8=E3=81=AE=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=83=8F=E3=83=B3=E3=83=89=E3=83=A9=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/medaca_logger.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py index 5546d07a..5ab4eb3e 100644 --- a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py +++ b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py @@ -1,5 +1,6 @@ import datetime import logging +import sys from zoneinfo import ZoneInfo from constants import DEFAULT_TIMEZONE, LOG_DATE_FORMAT, LOG_FORMAT @@ -17,10 +18,14 @@ class SingletonLogger: LOG_DATE_FORMAT ) formatter.converter = lambda *arg: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple() + # ローカル環境で動かす場合、標準出力ハンドラーを追加する + # AWS Lambda上では`LambdaLoggerHandler`がデフォルトでセットされている + if len(sys.argv) == 2 and sys.argv[1] == 'local': + localHandler = logging.StreamHandler() + logger.addHandler(localHandler) for handler in logger.handlers: handler.setFormatter(formatter) level = logging.getLevelName(LOG_LEVEL) - print(level) logger.setLevel(level) return logger From 3ca1a8d7b6e49805286debe90f1a08b8dacb6bd2 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Sat, 2 Jul 2022 16:48:33 +0900 Subject: [PATCH 17/77] =?UTF-8?q?feat:=20=E8=A8=AD=E5=AE=9A=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=83=90=E3=82=B1=E3=83=83=E3=83=88?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=81=AE=E5=8F=96=E5=BE=97=E5=87=A6=E7=90=86?= =?UTF-8?q?=E8=BF=BD=E8=A8=98=E3=80=82JSON=E3=81=AE=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=81=AF=E3=81=93=E3=82=8C=E3=81=8B=E3=82=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .../check-view-option/aws/s3.py | 31 +++++++++++++++++++ .../check-view-option/constants.py | 20 ++++++++++++ .../check-view-option/environments.py | 18 ++++++++++- .../check-view-option/main.py | 19 +++++++++--- .../check-view-option/medaca_logger.py | 31 +++++++++++++++---- lambda/sap-data-decrypt/datadecrypt/main.py | 23 +++++++++----- .../view_check/check_target_schemas.json | 3 ++ 8 files changed, 128 insertions(+), 20 deletions(-) create mode 100644 lambda/check-view-secutiry-option/check-view-option/aws/s3.py create mode 100644 s3/config/view_check/check_target_schemas.json diff --git a/.gitignore b/.gitignore index 65e6a105..a85e0c0b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ lambda/mbj-newdwh2021-staging-NoticeToSlack/package-lock.json lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/* lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* -__pycache__/ \ No newline at end of file +__pycache__/ +.env \ No newline at end of file diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py new file mode 100644 index 00000000..6ace3816 --- /dev/null +++ b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py @@ -0,0 +1,31 @@ +import boto3 +import environments +import exceptions +from botocore.exceptions import ClientError +from constants import AWS_RESOURCE_S3, S3_RESPONSE_BODY + + +class S3Resource: + + def __init__(self, bucket_name: str) -> None: + self.__s3_resource = boto3.resource(AWS_RESOURCE_S3) + self.__s3_bucket = self.__s3_resource.Bucket(bucket_name) + + def get_object(self, object_key: str): + s3_object = self.__s3_bucket.Object(object_key) + response = s3_object.get() + return response[S3_RESPONSE_BODY].read() + + +class ConfigBucket: + __s3_resource: S3Resource = None + + def __init__(self) -> None: + self.__s3_resource = S3Resource(environments.CONFIG_BUCKET_NAME) + + def read_check_target_schema_names(self): + try: + return self.__s3_resource.get_object(environments.CHECK_TARGET_SCHEMA_NAMES_PATH) + except ClientError as error: + if error.response['Error']['Code'] == 'NoSuchKey': + raise exceptions.FileNotFoundException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{error}') diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py index 23f2fbc7..1672c5a4 100644 --- a/lambda/check-view-secutiry-option/check-view-option/constants.py +++ b/lambda/check-view-secutiry-option/check-view-option/constants.py @@ -1,3 +1,23 @@ +# logger LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n' LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' DEFAULT_TIMEZONE = "Asia/Tokyo" +LOG_LEVEL = 'LOG_LEVEL' +LOG_LEVEL_INFO = 'INFO' + +# environments +CHECK_TARGET_SCHEMA_NAMES_PATH = 'CHECK_TARGET_SCHEMA_NAMES_PATH' +CONFIG_BUCKET_NAME = 'CONFIG_BUCKET_NAME' +LOG_LEVEL = 'LOG_LEVEL' +MBJ_NOTICE_TOPIC = 'MBJ_NOTICE_TOPIC' +NDS_NOTICE_TOPIC = 'NDS_NOTICE_TOPIC' +NOTICE_MAIL_BODY_TEMPLATE_PATH = 'NOTICE_MAIL_BODY_TEMPLATE_PATH' +NOTICE_MAIL_TITLE_TEMPLATE_PATH = 'NOTICE_MAIL_TITLE_TEMPLATE_PATH' +PARAM_NAME_DB_HOST = 'PARAM_NAME_DB_HOST' +PARAM_NAME_DB_USER_NAME = 'PARAM_NAME_DB_USER_NAME' +PARAM_NAME_DB_USER_PASSWORD = 'PARAM_NAME_DB_USER_PASSWORD' + +# system var +AWS_RESOURCE_S3 = 's3' +S3_RESPONSE_BODY = 'Body' +UTF8 = 'utf-8' diff --git a/lambda/check-view-secutiry-option/check-view-option/environments.py b/lambda/check-view-secutiry-option/check-view-option/environments.py index c1d95246..56edb18c 100644 --- a/lambda/check-view-secutiry-option/check-view-option/environments.py +++ b/lambda/check-view-secutiry-option/check-view-option/environments.py @@ -1,3 +1,19 @@ import os -LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') +from constants import (CHECK_TARGET_SCHEMA_NAMES_PATH, CONFIG_BUCKET_NAME, + LOG_LEVEL, LOG_LEVEL_INFO, MBJ_NOTICE_TOPIC, + NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH, + NOTICE_MAIL_TITLE_TEMPLATE_PATH, PARAM_NAME_DB_HOST, + PARAM_NAME_DB_USER_NAME, PARAM_NAME_DB_USER_PASSWORD) + +LOG_LEVEL = os.environ.get(LOG_LEVEL, LOG_LEVEL_INFO) +CHECK_TARGET_SCHEMA_NAMES_PATH = os.environ[CHECK_TARGET_SCHEMA_NAMES_PATH] +CONFIG_BUCKET_NAME = os.environ[CONFIG_BUCKET_NAME] +MBJ_NOTICE_TOPIC = os.environ[MBJ_NOTICE_TOPIC] +NDS_NOTICE_TOPIC = os.environ[NDS_NOTICE_TOPIC] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ[NOTICE_MAIL_BODY_TEMPLATE_PATH] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ[NOTICE_MAIL_TITLE_TEMPLATE_PATH] + +PARAM_NAME_DB_HOST = os.environ[PARAM_NAME_DB_HOST] +PARAM_NAME_DB_USER_NAME = os.environ[PARAM_NAME_DB_USER_NAME] +PARAM_NAME_DB_USER_PASSWORD = os.environ[PARAM_NAME_DB_USER_PASSWORD] diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index d39b4ce4..b870a3bf 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -2,17 +2,28 @@ Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント """ -from exceptions import FileNotFoundException, MeDaCaException +from aws.s3 import ConfigBucket +from exceptions import MeDaCaException from medaca_logger import MeDaCaLogger def handler(event, context): logger = MeDaCaLogger.get_logger() + try: - logger.info('lambda handle') - raise FileNotFoundException('E-02-01', 'ファイル見つかりません') + logger.info('I-01-01', '処理開始 Viewセキュリティオプション付与チェック') + logger.info('I-01-02', 'チェック対象スキーマ名ファイルを読み込み 開始') + config_bucket = ConfigBucket() + check_target_schema_names = config_bucket.read_check_target_schema_names() + print(check_target_schema_names) + except MeDaCaException as e: - logger.exception(f'exception: {e.error_id} {e}') + logger.exception(e.error_id, e) + raise e + except Exception as e: + logger.exception('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + finally: + logger.info('I-06-01', '処理終了 Viewセキュリティオプション付与チェック') # ローカル実行用 diff --git a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py index 5ab4eb3e..b46d893e 100644 --- a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py +++ b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py @@ -8,9 +8,9 @@ from environments import LOG_LEVEL class SingletonLogger: - # インスタンス生成 - @staticmethod - def __internal_new__() -> logging.Logger: + __logger: logging.Logger = None + + def __init__(self) -> None: # logger設定 logger = logging.getLogger() formatter = logging.Formatter( @@ -27,15 +27,34 @@ class SingletonLogger: handler.setFormatter(formatter) level = logging.getLevelName(LOG_LEVEL) logger.setLevel(level) - return logger + + self.__logger = logger + + def debug(self, log_id: str, msg: str): + self._log(logging.DEBUG, log_id, msg) + + def info(self, log_id: str, msg: str): + self._log(logging.INFO, log_id, msg) + + def warning(self, log_id: str, msg: str): + self._log(logging.WARNING, log_id, msg) + + def error(self, log_id: str, msg: str): + self._log(logging.ERROR, log_id, msg) + + def exception(self, log_id: str, msg: str): + self._log(logging.ERROR, log_id, msg, exc_info=True) + + def _log(self, log_level: int, log_id: str, msg: str, exc_info=False): + self.__logger.log(log_level, f'{log_id} {msg}', exc_info=exc_info) class MeDaCaLogger: __unique_instance: logging.Logger = None @staticmethod - def get_logger(): + def get_logger() -> SingletonLogger: # インスタンス未生成の場合、唯一のインスタンスを生成する if not MeDaCaLogger.__unique_instance: - MeDaCaLogger.__unique_instance = SingletonLogger.__internal_new__() + MeDaCaLogger.__unique_instance = SingletonLogger() return MeDaCaLogger.__unique_instance diff --git a/lambda/sap-data-decrypt/datadecrypt/main.py b/lambda/sap-data-decrypt/datadecrypt/main.py index ec4d24ae..f1f2de59 100644 --- a/lambda/sap-data-decrypt/datadecrypt/main.py +++ b/lambda/sap-data-decrypt/datadecrypt/main.py @@ -1,12 +1,12 @@ -import logging -import os -import boto3 -import gnupg import datetime import logging +import os +import traceback from abc import * from zoneinfo import ZoneInfo -import traceback + +import boto3 +import gnupg # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] @@ -42,8 +42,12 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() + + def custome_time(*arg): return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() + + formatter = logging.Formatter( '[%(levelname)s]\t%(asctime)s\t%(message)s\n', '%Y-%m-%d %H:%M:%S' @@ -136,7 +140,8 @@ def handler(event, context): 'Key': s3_event.file_path } backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}' - logger.info(f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + logger.info( + f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) backup_file_obj.copy(copy_source) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) @@ -172,7 +177,8 @@ def create_status_file(s3_event, extension) -> None: result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(s3_event.bucket_name, result_error_key) result_error_obj.put(Body='') - logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') + logger.error( + f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') except Exception as e: logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') traceback.print_exc() @@ -191,7 +197,8 @@ def move_encrypt_file(s3_event) -> None: error_obj = s3_resource.Object(s3_event.bucket_name, error_key) error_obj.copy(copy_source) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) - logger.error(f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') + logger.error( + f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') except Exception as e: logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') traceback.print_exc() diff --git a/s3/config/view_check/check_target_schemas.json b/s3/config/view_check/check_target_schemas.json new file mode 100644 index 00000000..4a7df05b --- /dev/null +++ b/s3/config/view_check/check_target_schemas.json @@ -0,0 +1,3 @@ +{ + "check_target_schemas": ["custom01", "custom02", "custom03"] +} From b33a3dae1928ec643c44dcd52e2d9c8611e8fb22 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Sat, 2 Jul 2022 16:51:07 +0900 Subject: [PATCH 18/77] =?UTF-8?q?style:=20=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=88=E3=81=8C=E9=81=A9=E7=94=A8=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=20?= =?UTF-8?q?=E6=9C=AC=E5=BD=93=E3=81=AF=E7=9B=B4=E3=81=97=E3=81=9F=E3=81=84?= =?UTF-8?q?=E3=81=91=E3=81=A9=E5=BD=B1=E9=9F=BF=E3=81=8C=E3=81=82=E3=82=8B?= =?UTF-8?q?=E3=81=A8=E3=81=84=E3=81=91=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E3=82=82=E3=81=A8=E3=81=AB=E6=88=BB=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/sap-data-decrypt/datadecrypt/main.py | 23 +++++++-------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/lambda/sap-data-decrypt/datadecrypt/main.py b/lambda/sap-data-decrypt/datadecrypt/main.py index f1f2de59..ec4d24ae 100644 --- a/lambda/sap-data-decrypt/datadecrypt/main.py +++ b/lambda/sap-data-decrypt/datadecrypt/main.py @@ -1,12 +1,12 @@ -import datetime import logging import os -import traceback -from abc import * -from zoneinfo import ZoneInfo - import boto3 import gnupg +import datetime +import logging +from abc import * +from zoneinfo import ZoneInfo +import traceback # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] @@ -42,12 +42,8 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() - - def custome_time(*arg): return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() - - formatter = logging.Formatter( '[%(levelname)s]\t%(asctime)s\t%(message)s\n', '%Y-%m-%d %H:%M:%S' @@ -140,8 +136,7 @@ def handler(event, context): 'Key': s3_event.file_path } backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}' - logger.info( - f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + logger.info(f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) backup_file_obj.copy(copy_source) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) @@ -177,8 +172,7 @@ def create_status_file(s3_event, extension) -> None: result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(s3_event.bucket_name, result_error_key) result_error_obj.put(Body='') - logger.error( - f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') + logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') except Exception as e: logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') traceback.print_exc() @@ -197,8 +191,7 @@ def move_encrypt_file(s3_event) -> None: error_obj = s3_resource.Object(s3_event.bucket_name, error_key) error_obj.copy(copy_source) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) - logger.error( - f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') + logger.error(f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') except Exception as e: logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') traceback.print_exc() From c19cf90a03bf9ca25b99e64417eb15ba0deaabd9 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Sat, 2 Jul 2022 16:58:29 +0900 Subject: [PATCH 19/77] =?UTF-8?q?refactor:=20=E3=83=AA=E3=83=86=E3=83=A9?= =?UTF-8?q?=E3=83=AB=E5=80=A4=E3=82=92=E5=AE=9A=E6=95=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/constants.py | 4 ++-- .../check-view-option/environments.py | 5 ++++- .../check-view-option/medaca_logger.py | 8 ++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py index 1672c5a4..2ef6a079 100644 --- a/lambda/check-view-secutiry-option/check-view-option/constants.py +++ b/lambda/check-view-secutiry-option/check-view-option/constants.py @@ -1,8 +1,6 @@ # logger LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n' LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' -DEFAULT_TIMEZONE = "Asia/Tokyo" -LOG_LEVEL = 'LOG_LEVEL' LOG_LEVEL_INFO = 'INFO' # environments @@ -16,8 +14,10 @@ NOTICE_MAIL_TITLE_TEMPLATE_PATH = 'NOTICE_MAIL_TITLE_TEMPLATE_PATH' PARAM_NAME_DB_HOST = 'PARAM_NAME_DB_HOST' PARAM_NAME_DB_USER_NAME = 'PARAM_NAME_DB_USER_NAME' PARAM_NAME_DB_USER_PASSWORD = 'PARAM_NAME_DB_USER_PASSWORD' +TZ = 'TZ' # system var AWS_RESOURCE_S3 = 's3' S3_RESPONSE_BODY = 'Body' UTF8 = 'utf-8' +LAUNCH_ON_LOCAL = 'local' diff --git a/lambda/check-view-secutiry-option/check-view-option/environments.py b/lambda/check-view-secutiry-option/check-view-option/environments.py index 56edb18c..87156c19 100644 --- a/lambda/check-view-secutiry-option/check-view-option/environments.py +++ b/lambda/check-view-secutiry-option/check-view-option/environments.py @@ -4,7 +4,8 @@ from constants import (CHECK_TARGET_SCHEMA_NAMES_PATH, CONFIG_BUCKET_NAME, LOG_LEVEL, LOG_LEVEL_INFO, MBJ_NOTICE_TOPIC, NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH, NOTICE_MAIL_TITLE_TEMPLATE_PATH, PARAM_NAME_DB_HOST, - PARAM_NAME_DB_USER_NAME, PARAM_NAME_DB_USER_PASSWORD) + PARAM_NAME_DB_USER_NAME, PARAM_NAME_DB_USER_PASSWORD, + TZ) LOG_LEVEL = os.environ.get(LOG_LEVEL, LOG_LEVEL_INFO) CHECK_TARGET_SCHEMA_NAMES_PATH = os.environ[CHECK_TARGET_SCHEMA_NAMES_PATH] @@ -17,3 +18,5 @@ NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ[NOTICE_MAIL_TITLE_TEMPLATE_PATH] PARAM_NAME_DB_HOST = os.environ[PARAM_NAME_DB_HOST] PARAM_NAME_DB_USER_NAME = os.environ[PARAM_NAME_DB_USER_NAME] PARAM_NAME_DB_USER_PASSWORD = os.environ[PARAM_NAME_DB_USER_PASSWORD] + +TZ = os.environ[TZ] diff --git a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py index b46d893e..fac70c1c 100644 --- a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py +++ b/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py @@ -3,8 +3,8 @@ import logging import sys from zoneinfo import ZoneInfo -from constants import DEFAULT_TIMEZONE, LOG_DATE_FORMAT, LOG_FORMAT -from environments import LOG_LEVEL +from constants import LAUNCH_ON_LOCAL, LOG_DATE_FORMAT, LOG_FORMAT +from environments import LOG_LEVEL, TZ class SingletonLogger: @@ -17,10 +17,10 @@ class SingletonLogger: LOG_FORMAT, LOG_DATE_FORMAT ) - formatter.converter = lambda *arg: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple() + formatter.converter = lambda *arg: datetime.datetime.now(ZoneInfo(TZ)).timetuple() # ローカル環境で動かす場合、標準出力ハンドラーを追加する # AWS Lambda上では`LambdaLoggerHandler`がデフォルトでセットされている - if len(sys.argv) == 2 and sys.argv[1] == 'local': + if len(sys.argv) == 2 and sys.argv[1] == LAUNCH_ON_LOCAL: localHandler = logging.StreamHandler() logger.addHandler(localHandler) for handler in logger.handlers: From 8c8314848c67a07e810ce521645a7cf4fec78aee Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 4 Jul 2022 10:46:53 +0900 Subject: [PATCH 20/77] =?UTF-8?q?feat:=20S3=E3=81=AE=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E3=82=92=E6=B1=8E=E7=94=A8=E7=9A=84=E3=81=AB=E3=80=81SSM?= =?UTF-8?q?=E3=81=AE=E5=8F=96=E5=BE=97=E5=87=A6=E7=90=86=E3=82=82=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/aws/s3.py | 10 +-- .../check-view-option/aws/ssm.py | 31 ++++++++ .../check-view-option/constants.py | 13 +++- .../check-view-option/exceptions.py | 6 ++ .../check-view-option/main.py | 70 +++++++++++++++++-- 5 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 lambda/check-view-secutiry-option/check-view-option/aws/ssm.py diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py index 6ace3816..8d512b71 100644 --- a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py +++ b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py @@ -1,7 +1,5 @@ import boto3 import environments -import exceptions -from botocore.exceptions import ClientError from constants import AWS_RESOURCE_S3, S3_RESPONSE_BODY @@ -23,9 +21,5 @@ class ConfigBucket: def __init__(self) -> None: self.__s3_resource = S3Resource(environments.CONFIG_BUCKET_NAME) - def read_check_target_schema_names(self): - try: - return self.__s3_resource.get_object(environments.CHECK_TARGET_SCHEMA_NAMES_PATH) - except ClientError as error: - if error.response['Error']['Code'] == 'NoSuchKey': - raise exceptions.FileNotFoundException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{error}') + def check_target_schema_names(self): + return self.__s3_resource.get_object(environments.CHECK_TARGET_SCHEMA_NAMES_PATH) diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py b/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py new file mode 100644 index 00000000..528b4516 --- /dev/null +++ b/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py @@ -0,0 +1,31 @@ +import boto3 +import environments +from constants import (AWS_RESOURCE_SSM, SSM_PARAMETER_RESPONSE, + SSM_PARAMETER_VALUE) + + +class SSMClient: + + def __init__(self) -> None: + self.__ssm_client = boto3.client(AWS_RESOURCE_SSM) + + def get_ssm_params(self, parameter_key: str, with_decryption: bool): + response = self.__ssm_client.get_parameter(Name=parameter_key, WithDecryption=with_decryption) + parameter_value = response[SSM_PARAMETER_RESPONSE][SSM_PARAMETER_VALUE] + return parameter_value + + +class SSMParameterStore: + __ssm_client: SSMClient = None + + def __init__(self) -> None: + self.__ssm_client = SSMClient() + + def db_host(self): + return self.__ssm_client.get_ssm_params(environments.PARAM_NAME_DB_HOST, True) + + def db_user_name(self): + return self.__ssm_client.get_ssm_params(environments.PARAM_NAME_DB_USER_NAME, True) + + def db_user_password(self): + return self.__ssm_client.get_ssm_params(environments.PARAM_NAME_DB_USER_PASSWORD, True) diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py index 2ef6a079..3336997b 100644 --- a/lambda/check-view-secutiry-option/check-view-option/constants.py +++ b/lambda/check-view-secutiry-option/check-view-option/constants.py @@ -16,8 +16,19 @@ PARAM_NAME_DB_USER_NAME = 'PARAM_NAME_DB_USER_NAME' PARAM_NAME_DB_USER_PASSWORD = 'PARAM_NAME_DB_USER_PASSWORD' TZ = 'TZ' -# system var +# aws AWS_RESOURCE_S3 = 's3' +AWS_RESOURCE_SSM = 'ssm' S3_RESPONSE_BODY = 'Body' +SSM_PARAMETER_RESPONSE = 'Parameter' +SSM_PARAMETER_NAME = 'Name' +SSM_PARAMETER_VALUE = 'Value' +RESPONSE_ERROR = 'Error' +RESPONSE_ERROR_CODE = 'Code' +RESPONSE_CODE_NO_SUCH_KEY = 'NoSuchKey' +RESPONSE_CODE_PARAMETER_NOT_FOUND = 'ParameterNotFound' + +# system var UTF8 = 'utf-8' LAUNCH_ON_LOCAL = 'local' +CHECK_TARGET_SCHEMAS = 'check_target_schemas' diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py index 131a0126..d3afb381 100644 --- a/lambda/check-view-secutiry-option/check-view-option/exceptions.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -8,4 +8,10 @@ class MeDaCaException(Exception, metaclass=ABCMeta): class FileNotFoundException(MeDaCaException): + """S3のファイルが見つからない場合の例外""" + pass + + +class ParameterNotFoundException(MeDaCaException): + """パラメータストアのキーが見つからない場合の例外""" pass diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index b870a3bf..51586e65 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -2,30 +2,88 @@ Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント """ +import json + +import botocore + from aws.s3 import ConfigBucket -from exceptions import MeDaCaException +from aws.ssm import SSMParameterStore +from constants import (CHECK_TARGET_SCHEMAS, RESPONSE_CODE_NO_SUCH_KEY, + RESPONSE_CODE_PARAMETER_NOT_FOUND, RESPONSE_ERROR, + RESPONSE_ERROR_CODE) +from exceptions import (FileNotFoundException, MeDaCaException, + ParameterNotFoundException) from medaca_logger import MeDaCaLogger def handler(event, context): logger = MeDaCaLogger.get_logger() - try: logger.info('I-01-01', '処理開始 Viewセキュリティオプション付与チェック') - logger.info('I-01-02', 'チェック対象スキーマ名ファイルを読み込み 開始') - config_bucket = ConfigBucket() - check_target_schema_names = config_bucket.read_check_target_schema_names() - print(check_target_schema_names) + logger.info('I-02-02', 'チェック対象スキーマ名ファイルを読み込み 開始') + check_target_schemas = read_check_target_schemas() + logger.info('I-02-02', f'チェック対象スキーマ名ファイルを読み込み 終了 チェック対象スキーマ名:{check_target_schemas}') + # print(check_target_schemas) + logger.info('I-03-01', 'データベースへの接続開始 開始') + # DB接続のためのパラメータ取得 + db_host, db_user_name, db_user_password = read_db_param_from_parameter_store() + # print(db_host, db_user_name, db_user_password) + logger.info('I-03-01', 'データベースへの接続開始 終了') except MeDaCaException as e: logger.exception(e.error_id, e) raise e except Exception as e: logger.exception('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + raise e finally: logger.info('I-06-01', '処理終了 Viewセキュリティオプション付与チェック') +def read_check_target_schemas() -> list: + """設定ファイル[チェック対象スキーマ名ファイル]を読み込む + + Raises: + exceptions.FileNotFoundException: ファイルが読み込めなかったエラー + Exception: 想定外のエラー + + Returns: + list: チェック対象のスキーマ名のリスト + """ + try: + config_bucket = ConfigBucket() + check_target_schema_names = config_bucket.check_target_schema_names() + return json.loads(check_target_schema_names)[CHECK_TARGET_SCHEMAS] + except botocore.exceptions.ClientError as e: + if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: + raise FileNotFoundException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{e}') + else: + raise Exception(e) + + +def read_db_param_from_parameter_store() -> tuple: + """パラメータストアからDB接続情報を取得する + + Raises: + FileNotFoundException: _description_ + Exception: 想定外のエラー + + Returns: + tuple: DB接続情報 + """ + try: + parameter_store = SSMParameterStore() + db_host = parameter_store.db_host() + db_user_name = parameter_store.db_user_name() + db_user_password = parameter_store.db_user_password() + return db_host, db_user_name, db_user_password + except botocore.exceptions.ClientError as e: + if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_PARAMETER_NOT_FOUND: + raise ParameterNotFoundException('E-03-02', f'パラメータストアの取得に失敗しました エラー内容:{e}') + else: + raise Exception(e) + + # ローカル実行用 if __name__ == '__main__': handler({}, {}) From 6ac21eee9e4a386eb4b567cf7f82c37c48873722 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 4 Jul 2022 10:48:32 +0900 Subject: [PATCH 21/77] =?UTF-8?q?style:=20=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-secutiry-option/check-view-option/exceptions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py index d3afb381..df870583 100644 --- a/lambda/check-view-secutiry-option/check-view-option/exceptions.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -2,6 +2,8 @@ from abc import ABCMeta class MeDaCaException(Exception, metaclass=ABCMeta): + """MeDaCaシステム固有のカスタムエラークラス""" + def __init__(self, error_id: str, message) -> None: super().__init__(message) self.error_id = error_id From 1cc37b071612656751d5b9b20ae291bf0c6599ca Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Tue, 5 Jul 2022 10:04:00 +0900 Subject: [PATCH 22/77] =?UTF-8?q?fix:=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E9=A0=85=E7=9B=AE=E3=81=8C=E6=9C=AA?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=AE=E5=A0=B4=E5=90=88=E3=81=AB=E7=A9=BA?= =?UTF-8?q?=E8=A1=8C=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=8C=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=81=A8=E7=99=BB=E9=8C=B2=E5=87=A6=E7=90=86=E3=81=8C=E8=A1=8C?= =?UTF-8?q?=E3=81=88=E3=81=AA=E3=81=84=E3=81=9F=E3=82=81=E3=80=81=E7=A9=BA?= =?UTF-8?q?=E8=A1=8C=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 1 + s3/data/SAP_fin/settings/IOReport.txt | 1 + s3/data/SAP_fin/settings/Invoice.txt | 1 + s3/data/SAP_fin/settings/WBSList.txt | 3 ++- s3/data/SAP_fin/settings/WBSReport.txt | 1 + s3/data/SAP_sup/settings/ConfReport.txt | 1 + s3/data/SAP_sup/settings/GMReport.txt | 3 ++- s3/data/SAP_sup/settings/GRReport.txt | 1 + s3/data/SAP_sup/settings/MLCReport.txt | 1 + s3/data/SAP_sup/settings/POReport.txt | 1 + s3/data/SAP_sup/settings/QAReport.txt | 1 + s3/data/SAP_sup/settings/StockList.txt | 2 +- 12 files changed, 14 insertions(+), 3 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index 28877767..98eb615b 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -9,3 +9,4 @@ VT,Fiscal Year,Fiscal Period,Cost Center,Cost element,Cost element name,Vbl.valu vt,fiscal_year,fiscal_period,cost_center,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev src03a.sapf_costreport org03a.sapf_costreport + diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 8c09e651..0157c6e9 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -9,3 +9,4 @@ Fiscal Year,Fiscal Period,Internal Order,Cost element,Cost element name,Vbl.valu fiscal_year,fiscal_period,internal_order,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number src03a.sapf_ioreport org03a.sapf_ioreport + diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 13430d0d..61488a51 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -9,3 +9,4 @@ Billing Type,Condition Type,Distribution channel,Invoiced number,Invoice item,In billing_type,condition_type,distribution_channel,invoiced_number,invoice_item,invoice_date,account_number_sold_to,customer_name,ship_to,ship_to_name,quantity_invoiced,extended_amount_invoiced_amount,accrual_value_rebate_1,accrual_percent_rebate_1,accrual_value_rebate_2,accrual_percent_rebate_2,unit_selling_price,item_code,item_name,tax,order_reason,reference_doc,sales_order_no,rejected_rsn,batch_number src03b.sapf_invoice org03b.sapf_invoice + diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index 9247ca7f..a64e1390 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -8,4 +8,5 @@ LF WBS element,Level,Profit center,Project Definition,Description,Control area,Responsibility,Basic finish date,Basic start date wbs_element,level,profit_center,project_definition,description,control_area,responsibility,basic_finish_date,basic_start_date src03a.sapf_wbslist -org03a.sapf_wbslist \ No newline at end of file +org03a.sapf_wbslist + diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 000959c5..91c75389 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -9,3 +9,4 @@ Fiscal Year,Fiscal Period,WBS element,Cost element,Cost element name,Vbl.value,O fiscal_year,fiscal_period,wbs_element,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number src03a.sapf_wbsreport org03a.sapf_wbsreport + diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index af59684d..15aa7b59 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -9,3 +9,4 @@ Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date, process_order,operation_activity,yield,uom,posting_date,finish_execution_date,material,material_description,confirmation,cofirm_counter,cancelled_conf src04.saps_gmreport org04.saps_gmreport + diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index fe4fec3d..c20b6aa9 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -8,4 +8,5 @@ LF Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty src04.saps_gmreport -org04.saps_gmreport \ No newline at end of file +org04.saps_gmreport + diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index 5b9de358..c16c4676 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -9,3 +9,4 @@ Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movem plant,material,material_description4,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_grreport org04.saps_grreport + diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index 0f67ad56..ed71a72f 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -9,3 +9,4 @@ Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movem plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_mlcreport org04.saps_mlcreport + diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index f6c0ca59..eb6de20d 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -9,3 +9,4 @@ Purchasing Document,Vendor,Item,Material,Short Text,Document Date,Order Quantity purchasing_document,vendor,item,material,short_text,document_date,order_quantity,order_unit,net_order_value,currency,order_price_unit,deletion_flag src04.saps_poreport org04.saps_poreport + diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index 794a23a0..ce9ced2c 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -9,3 +9,4 @@ Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movem plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_qareport org04.saps_qareport + diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt index 338898d8..8bc8985d 100644 --- a/s3/data/SAP_sup/settings/StockList.txt +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -9,4 +9,4 @@ SPL.stock Indic,Material Num.,Material Desc.,Storage Location,Batch Num.,Expired spl_stock_indic,material_num,material_desc,storage_location,batch_num,expired_date,unrestricted_stock,in_quality_stock,blocked_stock,consign_stock,total_stock_quantity,sold_to,name src04.saps_stocklist org04.saps_stocklist -StockList_ex.sql \ No newline at end of file +StockList_ex.sql From 91208ab50b6e55718e8e844be790daba4280d957 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 6 Jul 2022 09:42:41 +0900 Subject: [PATCH 23/77] =?UTF-8?q?feat:=20DB=E6=8E=A5=E7=B6=9A=E3=81=A8View?= =?UTF-8?q?=E3=81=AE=E5=8F=96=E5=BE=97=E5=87=A6=E7=90=86=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/constants.py | 6 +++ .../check-view-option/database.py | 40 +++++++++++++++ .../check-view-option/exceptions.py | 5 ++ .../check-view-option/main.py | 50 +++++++++++++++++-- 4 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 lambda/check-view-secutiry-option/check-view-option/database.py diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py index 3336997b..a0f93a3a 100644 --- a/lambda/check-view-secutiry-option/check-view-option/constants.py +++ b/lambda/check-view-secutiry-option/check-view-option/constants.py @@ -28,6 +28,12 @@ RESPONSE_ERROR_CODE = 'Code' RESPONSE_CODE_NO_SUCH_KEY = 'NoSuchKey' RESPONSE_CODE_PARAMETER_NOT_FOUND = 'ParameterNotFound' +# sql + +DEFAULT_SCHEMA = 'INFORMATION_SCHEMA' +INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER = 'INVOKER' +CONNECTION_TIMEOUT = 5 + # system var UTF8 = 'utf-8' LAUNCH_ON_LOCAL = 'local' diff --git a/lambda/check-view-secutiry-option/check-view-option/database.py b/lambda/check-view-secutiry-option/check-view-option/database.py new file mode 100644 index 00000000..133ebbb4 --- /dev/null +++ b/lambda/check-view-secutiry-option/check-view-option/database.py @@ -0,0 +1,40 @@ +import contextlib + +import pymysql +from pymysql.constants import CLIENT + +from constants import CONNECTION_TIMEOUT, DEFAULT_SCHEMA + + +class Database: + + __connection: pymysql.Connection = None + __host: str = None + __user: str = None + __password: str = None + __database: str = None + + def __init__(self, host: str, user: str, password: str) -> None: + self.__host = host + self.__user = user + self.__password = password + self.__database = DEFAULT_SCHEMA + + def connect(self): + connection = pymysql.connect(host=self.__host, user=self.__user, passwd=self.__password, + database=self.__database, connect_timeout=CONNECTION_TIMEOUT, + client_flag=CLIENT.MULTI_STATEMENTS) + self.__connection = connection + + @contextlib.contextmanager + def query(self, query: str): + if self.__connection is None: + raise Exception('データベースに接続されていません') + + with self.__connection.cursor() as cursor: + cursor.execute(query) + yield cursor + + def close(self): + self.__connection.close() + self.__connection = None diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py index df870583..fc00a279 100644 --- a/lambda/check-view-secutiry-option/check-view-option/exceptions.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -17,3 +17,8 @@ class FileNotFoundException(MeDaCaException): class ParameterNotFoundException(MeDaCaException): """パラメータストアのキーが見つからない場合の例外""" pass + + +class DatabaseConnectionException(MeDaCaException): + """データベース接続に失敗した場合の例外""" + pass diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index 51586e65..cd41aaa4 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -8,11 +8,14 @@ import botocore from aws.s3 import ConfigBucket from aws.ssm import SSMParameterStore -from constants import (CHECK_TARGET_SCHEMAS, RESPONSE_CODE_NO_SUCH_KEY, +from constants import (CHECK_TARGET_SCHEMAS, + INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER, + RESPONSE_CODE_NO_SUCH_KEY, RESPONSE_CODE_PARAMETER_NOT_FOUND, RESPONSE_ERROR, RESPONSE_ERROR_CODE) -from exceptions import (FileNotFoundException, MeDaCaException, - ParameterNotFoundException) +from database import Database +from exceptions import (DatabaseConnectionException, FileNotFoundException, + MeDaCaException, ParameterNotFoundException) from medaca_logger import MeDaCaLogger @@ -27,8 +30,16 @@ def handler(event, context): logger.info('I-03-01', 'データベースへの接続開始 開始') # DB接続のためのパラメータ取得 db_host, db_user_name, db_user_password = read_db_param_from_parameter_store() - # print(db_host, db_user_name, db_user_password) + connection = connection_database(db_host, db_user_name, db_user_password) logger.info('I-03-01', 'データベースへの接続開始 終了') + logger.info('I-04-01', 'Viewセキュリティオプション チェック開始') + check_result = check_view_security_option(connection, check_target_schemas) + + if len(check_result) == 0: + logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') + return + + logger.info('I-04-01', 'Viewセキュリティオプション 未設定のViewがあるため、メール送信処理を開始します。') except MeDaCaException as e: logger.exception(e.error_id, e) @@ -84,6 +95,37 @@ def read_db_param_from_parameter_store() -> tuple: raise Exception(e) +def connection_database(host: str, user_name: str, password: str) -> Database: + try: + database = Database(host, user_name, password) + database.connect() + return database + except Exception as e: + raise DatabaseConnectionException('E-03-02', f'データベースへの接続に失敗しました エラー内容:{e}') + + +def check_view_security_option(connection: Database, check_target_schemas: list) -> list: + select_view_security_option_sql = f""" + SELECT + TABLE_SCHEMA, + TABLE_NAME + FROM + INFORMATION_SCHEMA.VIEWS + WHERE + TABLE_SCHEMA IN ( + {','.join([f"'{schema_name}'" for schema_name in check_target_schemas])} + ) + AND SECURITY_TYPE <> '{INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER}' + """ + print(select_view_security_option_sql) + try: + with connection.query(select_view_security_option_sql) as cursor: + result = cursor.fetchall() + return result + except Exception as e: + raise DatabaseConnectionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') + + # ローカル実行用 if __name__ == '__main__': handler({}, {}) From 7d857c7142262aef822baf1e9f31b41df84d0ead Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Wed, 6 Jul 2022 10:33:37 +0900 Subject: [PATCH 24/77] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=8F=96=E8=BE=BCDB=E7=99=BB=E9=8C=B2=E5=87=A6=E7=90=86?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=8C=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E3=81=97=E3=80=81=E5=8E=9F=E5=9B=A0=E3=81=A8=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E4=BF=AE=E6=AD=A3=E3=82=92=E8=A1=8C=E3=81=A3?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_sup/settings/ConfReport.txt | 4 ++-- s3/data/SAP_sup/settings/GRReport.txt | 2 +- s3/data/SAP_sup/settings/QAReport.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 15aa7b59..299632cf 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -7,6 +7,6 @@ LF 11 Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,cofirm.counter,cancelled. conf process_order,operation_activity,yield,uom,posting_date,finish_execution_date,material,material_description,confirmation,cofirm_counter,cancelled_conf -src04.saps_gmreport -org04.saps_gmreport +src04.saps_confreport +org04.saps_confreport diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index c16c4676..3ed56da7 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -6,7 +6,7 @@ LF 1 24 Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text -plant,material,material_description4,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_grreport org04.saps_grreport diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index ce9ced2c..96b6f6aa 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -1,5 +1,5 @@ SAP_sup - + utf-8 LF From 7f6f4659dc80f07038845f7d129ba949a2365911 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 7 Jul 2022 13:28:49 +0900 Subject: [PATCH 25/77] =?UTF-8?q?feat:=20=E3=83=A1=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E6=9C=AC=E6=96=87=E7=94=9F=E6=88=90=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/aws/__init__.py | 0 .../check-view-option/aws/s3.py | 41 +++++++++++-- .../check-view-option/aws/ssm.py | 3 + .../check-view-option/constants.py | 3 +- .../check-view-option/dto/__init__.py | 0 .../dto/view_secutiry_option.py | 7 +++ .../check-view-option/main.py | 60 ++++++++++++++++--- ...heck_view_secutiry_option_mail_body.config | 6 ++ ...eck_view_secutiry_option_mail_title.config | 1 + 9 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 lambda/check-view-secutiry-option/check-view-option/aws/__init__.py create mode 100644 lambda/check-view-secutiry-option/check-view-option/dto/__init__.py create mode 100644 lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py create mode 100644 s3/config/view_check/check_view_secutiry_option_mail_body.config create mode 100644 s3/config/view_check/check_view_secutiry_option_mail_title.config diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/__init__.py b/lambda/check-view-secutiry-option/check-view-option/aws/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py index 8d512b71..d18b74e5 100644 --- a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py +++ b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py @@ -1,6 +1,6 @@ import boto3 import environments -from constants import AWS_RESOURCE_S3, S3_RESPONSE_BODY +from constants import AWS_RESOURCE_S3, S3_RESPONSE_BODY, UTF8 class S3Resource: @@ -12,14 +12,47 @@ class S3Resource: def get_object(self, object_key: str): s3_object = self.__s3_bucket.Object(object_key) response = s3_object.get() - return response[S3_RESPONSE_BODY].read() + return response[S3_RESPONSE_BODY].read().decode(UTF8) class ConfigBucket: __s3_resource: S3Resource = None + __bucket_name: str + __check_target_schema_names_file_path: str + __notice_mail_title_template_file_path: str + __notice_mail_body_template_file_path: str def __init__(self) -> None: - self.__s3_resource = S3Resource(environments.CONFIG_BUCKET_NAME) + self.__bucket_name = environments.CONFIG_BUCKET_NAME + self.__check_target_schema_names_file_path = environments.CHECK_TARGET_SCHEMA_NAMES_PATH + self.__notice_mail_title_template_file_path = environments.NOTICE_MAIL_TITLE_TEMPLATE_PATH + self.__notice_mail_body_template_file_path = environments.NOTICE_MAIL_BODY_TEMPLATE_PATH + self.__s3_resource = S3Resource(self.__bucket_name) + @property + def bucket_name(self): + return self.__bucket_name + + @property + def check_target_schema_names_file_path(self): + return self.__check_target_schema_names_file_path + + @property + def mail_body_file_path(self): + return self.__notice_mail_body_template_file_path + + @property + def mail_title_file_path(self): + return self.__notice_mail_title_template_file_path + + @property def check_target_schema_names(self): - return self.__s3_resource.get_object(environments.CHECK_TARGET_SCHEMA_NAMES_PATH) + return self.__s3_resource.get_object(self.__check_target_schema_names_file_path) + + @property + def notice_mail_title_template(self): + return self.__s3_resource.get_object(self.__notice_mail_title_template_file_path) + + @property + def notice_mail_body_template(self): + return self.__s3_resource.get_object(self.__notice_mail_body_template_file_path) diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py b/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py index 528b4516..7b618b59 100644 --- a/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py +++ b/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py @@ -21,11 +21,14 @@ class SSMParameterStore: def __init__(self) -> None: self.__ssm_client = SSMClient() + @property def db_host(self): return self.__ssm_client.get_ssm_params(environments.PARAM_NAME_DB_HOST, True) + @property def db_user_name(self): return self.__ssm_client.get_ssm_params(environments.PARAM_NAME_DB_USER_NAME, True) + @property def db_user_password(self): return self.__ssm_client.get_ssm_params(environments.PARAM_NAME_DB_USER_PASSWORD, True) diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py index a0f93a3a..9f6b0735 100644 --- a/lambda/check-view-secutiry-option/check-view-option/constants.py +++ b/lambda/check-view-secutiry-option/check-view-option/constants.py @@ -29,7 +29,6 @@ RESPONSE_CODE_NO_SUCH_KEY = 'NoSuchKey' RESPONSE_CODE_PARAMETER_NOT_FOUND = 'ParameterNotFound' # sql - DEFAULT_SCHEMA = 'INFORMATION_SCHEMA' INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER = 'INVOKER' CONNECTION_TIMEOUT = 5 @@ -38,3 +37,5 @@ CONNECTION_TIMEOUT = 5 UTF8 = 'utf-8' LAUNCH_ON_LOCAL = 'local' CHECK_TARGET_SCHEMAS = 'check_target_schemas' +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '\n  ' diff --git a/lambda/check-view-secutiry-option/check-view-option/dto/__init__.py b/lambda/check-view-secutiry-option/check-view-option/dto/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py b/lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py new file mode 100644 index 00000000..f5cdc3dc --- /dev/null +++ b/lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py @@ -0,0 +1,7 @@ +from dataclasses import dataclass + + +@dataclass +class ViewSecurityOption: + schema_name: str + table_name: str diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index cd41aaa4..81586cc3 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -9,18 +9,20 @@ import botocore from aws.s3 import ConfigBucket from aws.ssm import SSMParameterStore from constants import (CHECK_TARGET_SCHEMAS, - INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER, + INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER, MAIL_INDENT, RESPONSE_CODE_NO_SUCH_KEY, RESPONSE_CODE_PARAMETER_NOT_FOUND, RESPONSE_ERROR, RESPONSE_ERROR_CODE) from database import Database +from dto.view_secutiry_option import ViewSecurityOption from exceptions import (DatabaseConnectionException, FileNotFoundException, MeDaCaException, ParameterNotFoundException) from medaca_logger import MeDaCaLogger +logger = MeDaCaLogger.get_logger() + def handler(event, context): - logger = MeDaCaLogger.get_logger() try: logger.info('I-01-01', '処理開始 Viewセキュリティオプション付与チェック') logger.info('I-02-02', 'チェック対象スキーマ名ファイルを読み込み 開始') @@ -38,9 +40,13 @@ def handler(event, context): if len(check_result) == 0: logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') return - logger.info('I-04-01', 'Viewセキュリティオプション 未設定のViewがあるため、メール送信処理を開始します。') + view_security_options = [ViewSecurityOption(*row) for row in check_result] + + mail_title, mail_body = make_notice_mail(view_security_options) + print(mail_title, mail_body) + except MeDaCaException as e: logger.exception(e.error_id, e) raise e @@ -63,7 +69,7 @@ def read_check_target_schemas() -> list: """ try: config_bucket = ConfigBucket() - check_target_schema_names = config_bucket.check_target_schema_names() + check_target_schema_names = config_bucket.check_target_schema_names return json.loads(check_target_schema_names)[CHECK_TARGET_SCHEMAS] except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: @@ -84,9 +90,9 @@ def read_db_param_from_parameter_store() -> tuple: """ try: parameter_store = SSMParameterStore() - db_host = parameter_store.db_host() - db_user_name = parameter_store.db_user_name() - db_user_password = parameter_store.db_user_password() + db_host = parameter_store.db_host + db_user_name = parameter_store.db_user_name + db_user_password = parameter_store.db_user_password return db_host, db_user_name, db_user_password except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_PARAMETER_NOT_FOUND: @@ -126,6 +132,46 @@ def check_view_security_option(connection: Database, check_target_schemas: list) raise DatabaseConnectionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') +def make_notice_mail(view_security_options: list[ViewSecurityOption]): + config_bucket = ConfigBucket() + logger.info( + 'I-05-02', f'通知メール(タイトル)テンプレートファイル読込 読込元:{config_bucket.bucket_name}/{config_bucket.mail_title_file_path}') + mail_title_template = read_mail_title(config_bucket) + logger.info( + 'I-05-02', f'通知メール(本文)テンプレートファイル読込 読込元:{config_bucket.bucket_name}/{config_bucket.mail_body_file_path}') + mail_body_template = read_mail_body_template(config_bucket) + + mail_message = MAIL_INDENT.join([f'{option.schema_name}.{option.table_name}' for option in view_security_options]) + + mail_body = mail_body_template.format(no_option_views=mail_message) + + return mail_title_template, mail_body + + +def read_mail_title(config_bucket: ConfigBucket): + try: + mail_title = config_bucket.notice_mail_title_template + except botocore.exceptions.ClientError as e: + if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: + raise FileNotFoundException('E-02-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + else: + raise Exception(e) + + return mail_title + + +def read_mail_body_template(config_bucket: ConfigBucket): + try: + mail_body_template = config_bucket.notice_mail_body_template + except botocore.exceptions.ClientError as e: + if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: + raise FileNotFoundException('E-02-01', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + else: + raise Exception(e) + + return mail_body_template + + # ローカル実行用 if __name__ == '__main__': handler({}, {}) diff --git a/s3/config/view_check/check_view_secutiry_option_mail_body.config b/s3/config/view_check/check_view_secutiry_option_mail_body.config new file mode 100644 index 00000000..5457eafc --- /dev/null +++ b/s3/config/view_check/check_view_secutiry_option_mail_body.config @@ -0,0 +1,6 @@ +宛先各位 + customスキーマの以下のviewに「SQL SECURITY INVOKER」オプションが指定されておりません。viewを再作成しオプションを指定してください。 +  {no_option_views} + + 尚、本メールはシステム自動送信ですので、返信できません。 + 本件に関する問い合わせは、IT部門ゴザリ様にお願いいたします。 diff --git a/s3/config/view_check/check_view_secutiry_option_mail_title.config b/s3/config/view_check/check_view_secutiry_option_mail_title.config new file mode 100644 index 00000000..a85c0134 --- /dev/null +++ b/s3/config/view_check/check_view_secutiry_option_mail_title.config @@ -0,0 +1 @@ +【MeDaCaシステム通知】view参照制限オプション指定漏れを検出しました \ No newline at end of file From 4f57e1ecf428eee92e571038d417340aaf6ac5ac Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 7 Jul 2022 13:46:04 +0900 Subject: [PATCH 26/77] =?UTF-8?q?style:=20=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/exceptions.py | 5 ++ .../check-view-option/main.py | 65 +++++++++++++++++-- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py index fc00a279..90cd6efb 100644 --- a/lambda/check-view-secutiry-option/check-view-option/exceptions.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -22,3 +22,8 @@ class ParameterNotFoundException(MeDaCaException): class DatabaseConnectionException(MeDaCaException): """データベース接続に失敗した場合の例外""" pass + + +class QueryExecutionException(MeDaCaException): + """クエリ実行に失敗した場合の例外""" + pass diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index 81586cc3..f626b0b8 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -16,7 +16,8 @@ from constants import (CHECK_TARGET_SCHEMAS, from database import Database from dto.view_secutiry_option import ViewSecurityOption from exceptions import (DatabaseConnectionException, FileNotFoundException, - MeDaCaException, ParameterNotFoundException) + MeDaCaException, ParameterNotFoundException, + QueryExecutionException) from medaca_logger import MeDaCaLogger logger = MeDaCaLogger.get_logger() @@ -35,7 +36,7 @@ def handler(event, context): connection = connection_database(db_host, db_user_name, db_user_password) logger.info('I-03-01', 'データベースへの接続開始 終了') logger.info('I-04-01', 'Viewセキュリティオプション チェック開始') - check_result = check_view_security_option(connection, check_target_schemas) + check_result = fetch_view_security_options(connection, check_target_schemas) if len(check_result) == 0: logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') @@ -61,7 +62,7 @@ def read_check_target_schemas() -> list: """設定ファイル[チェック対象スキーマ名ファイル]を読み込む Raises: - exceptions.FileNotFoundException: ファイルが読み込めなかったエラー + FileNotFoundException: ファイルが読み込めなかったエラー Exception: 想定外のエラー Returns: @@ -82,7 +83,7 @@ def read_db_param_from_parameter_store() -> tuple: """パラメータストアからDB接続情報を取得する Raises: - FileNotFoundException: _description_ + ParameterNotFoundException: 指定されたパラメータが存在しないエラー Exception: 想定外のエラー Returns: @@ -102,6 +103,19 @@ def read_db_param_from_parameter_store() -> tuple: def connection_database(host: str, user_name: str, password: str) -> Database: + """データベース接続 + + Args: + host (str): DBホスト + user_name (str): DBユーザー名 + password (str): DBパスワード + + Raises: + DatabaseConnectionException: データベースへの接続に失敗したエラー + + Returns: + Database: データベース操作クラス + """ try: database = Database(host, user_name, password) database.connect() @@ -110,7 +124,20 @@ def connection_database(host: str, user_name: str, password: str) -> Database: raise DatabaseConnectionException('E-03-02', f'データベースへの接続に失敗しました エラー内容:{e}') -def check_view_security_option(connection: Database, check_target_schemas: list) -> list: +def fetch_view_security_options(connection: Database, check_target_schemas: list) -> tuple: + """SECURITY INVOKERのついていないViewの一覧を取得する + + Args: + connection (Database): 接続済みDB操作クラス + check_target_schemas (str): チェック対象のスキーマ一覧 + + Raises: + QueryExecutionException: クエリ実行エラー + + Returns: + tuple: クエリ実行結果 + """ + select_view_security_option_sql = f""" SELECT TABLE_SCHEMA, @@ -123,13 +150,12 @@ def check_view_security_option(connection: Database, check_target_schemas: list) ) AND SECURITY_TYPE <> '{INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER}' """ - print(select_view_security_option_sql) try: with connection.query(select_view_security_option_sql) as cursor: result = cursor.fetchall() return result except Exception as e: - raise DatabaseConnectionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') + raise QueryExecutionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') def make_notice_mail(view_security_options: list[ViewSecurityOption]): @@ -149,6 +175,19 @@ def make_notice_mail(view_security_options: list[ViewSecurityOption]): def read_mail_title(config_bucket: ConfigBucket): + """メールタイトルを読み込む + + Args: + config_bucket (ConfigBucket): 設定ファイル保管バケット操作クラス + + Raises: + FileNotFoundException: ファイルが読み込めなかったエラー + Exception: 想定外のエラー + + Returns: + str: メールタイトル + """ + try: mail_title = config_bucket.notice_mail_title_template except botocore.exceptions.ClientError as e: @@ -161,6 +200,18 @@ def read_mail_title(config_bucket: ConfigBucket): def read_mail_body_template(config_bucket: ConfigBucket): + """メール本文を読み込む + + Args: + config_bucket (ConfigBucket): 設定ファイル保管バケット操作クラス + + Raises: + FileNotFoundException: ファイルが読み込めなかったエラー + Exception: 想定外のエラー + + Returns: + str: メール本文 + """ try: mail_body_template = config_bucket.notice_mail_body_template except botocore.exceptions.ClientError as e: From 4f1c4ea86a26da94f08d9db8eae906f13f74f503 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 7 Jul 2022 14:29:41 +0900 Subject: [PATCH 27/77] =?UTF-8?q?feat:=20MBJ=E3=81=A8NDS=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=87=A6=E7=90=86=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/aws/sns.py | 31 ++++++++++++ .../check-view-option/constants.py | 2 + .../check-view-option/environments.py | 4 +- .../check-view-option/exceptions.py | 5 ++ .../check-view-option/main.py | 50 +++++++++++++++++-- 5 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 lambda/check-view-secutiry-option/check-view-option/aws/sns.py diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/sns.py b/lambda/check-view-secutiry-option/check-view-option/aws/sns.py new file mode 100644 index 00000000..d81e7307 --- /dev/null +++ b/lambda/check-view-secutiry-option/check-view-option/aws/sns.py @@ -0,0 +1,31 @@ +import boto3 +import environments +from constants import AWS_RESOURCE_SNS + + +class SNSClient: + + def __init__(self) -> None: + self.__sns_client = boto3.client(AWS_RESOURCE_SNS) + + def publish(self, sns_topic_arn: str, subject: str, message: str) -> None: + publish_params = { + 'TopicArn': sns_topic_arn, + 'Subject': subject.rstrip('\n'), + 'Message': message + } + self.__sns_client.publish(**publish_params) + + +class SNSNotifier: + __sns_client: SNSClient = None + + def __init__(self) -> None: + self.__sns_client = SNSClient() + + def publish_to_mbj(self, subject: str, message: str): + self.__sns_client.publish(environments.MBJ_NOTICE_TOPIC, subject, message) + + def publish_to_nds(self, error_id: str, exception: Exception): + error_message = f'{error_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + self.__sns_client.publish(environments.NDS_NOTICE_TOPIC, environments.NDS_NOTICE_TITLE, error_message) diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-secutiry-option/check-view-option/constants.py index 9f6b0735..ac6b2bfa 100644 --- a/lambda/check-view-secutiry-option/check-view-option/constants.py +++ b/lambda/check-view-secutiry-option/check-view-option/constants.py @@ -9,6 +9,7 @@ CONFIG_BUCKET_NAME = 'CONFIG_BUCKET_NAME' LOG_LEVEL = 'LOG_LEVEL' MBJ_NOTICE_TOPIC = 'MBJ_NOTICE_TOPIC' NDS_NOTICE_TOPIC = 'NDS_NOTICE_TOPIC' +NDS_NOTICE_TITLE = 'NDS_NOTICE_TITLE' NOTICE_MAIL_BODY_TEMPLATE_PATH = 'NOTICE_MAIL_BODY_TEMPLATE_PATH' NOTICE_MAIL_TITLE_TEMPLATE_PATH = 'NOTICE_MAIL_TITLE_TEMPLATE_PATH' PARAM_NAME_DB_HOST = 'PARAM_NAME_DB_HOST' @@ -19,6 +20,7 @@ TZ = 'TZ' # aws AWS_RESOURCE_S3 = 's3' AWS_RESOURCE_SSM = 'ssm' +AWS_RESOURCE_SNS = 'sns' S3_RESPONSE_BODY = 'Body' SSM_PARAMETER_RESPONSE = 'Parameter' SSM_PARAMETER_NAME = 'Name' diff --git a/lambda/check-view-secutiry-option/check-view-option/environments.py b/lambda/check-view-secutiry-option/check-view-option/environments.py index 87156c19..3a292a68 100644 --- a/lambda/check-view-secutiry-option/check-view-option/environments.py +++ b/lambda/check-view-secutiry-option/check-view-option/environments.py @@ -2,7 +2,8 @@ import os from constants import (CHECK_TARGET_SCHEMA_NAMES_PATH, CONFIG_BUCKET_NAME, LOG_LEVEL, LOG_LEVEL_INFO, MBJ_NOTICE_TOPIC, - NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH, + NDS_NOTICE_TITLE, NDS_NOTICE_TOPIC, + NOTICE_MAIL_BODY_TEMPLATE_PATH, NOTICE_MAIL_TITLE_TEMPLATE_PATH, PARAM_NAME_DB_HOST, PARAM_NAME_DB_USER_NAME, PARAM_NAME_DB_USER_PASSWORD, TZ) @@ -12,6 +13,7 @@ CHECK_TARGET_SCHEMA_NAMES_PATH = os.environ[CHECK_TARGET_SCHEMA_NAMES_PATH] CONFIG_BUCKET_NAME = os.environ[CONFIG_BUCKET_NAME] MBJ_NOTICE_TOPIC = os.environ[MBJ_NOTICE_TOPIC] NDS_NOTICE_TOPIC = os.environ[NDS_NOTICE_TOPIC] +NDS_NOTICE_TITLE = os.environ[NDS_NOTICE_TITLE] NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ[NOTICE_MAIL_BODY_TEMPLATE_PATH] NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ[NOTICE_MAIL_TITLE_TEMPLATE_PATH] diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py index 90cd6efb..aebd28c3 100644 --- a/lambda/check-view-secutiry-option/check-view-option/exceptions.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -27,3 +27,8 @@ class DatabaseConnectionException(MeDaCaException): class QueryExecutionException(MeDaCaException): """クエリ実行に失敗した場合の例外""" pass + + +class SNSPublishException(MeDaCaException): + """AmazonSNSへの通知に失敗した場合の例外""" + pass diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index f626b0b8..0226d3e3 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -7,6 +7,7 @@ import json import botocore from aws.s3 import ConfigBucket +from aws.sns import SNSNotifier from aws.ssm import SSMParameterStore from constants import (CHECK_TARGET_SCHEMAS, INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER, MAIL_INDENT, @@ -15,9 +16,10 @@ from constants import (CHECK_TARGET_SCHEMAS, RESPONSE_ERROR_CODE) from database import Database from dto.view_secutiry_option import ViewSecurityOption +from environments import MBJ_NOTICE_TOPIC from exceptions import (DatabaseConnectionException, FileNotFoundException, MeDaCaException, ParameterNotFoundException, - QueryExecutionException) + QueryExecutionException, SNSPublishException) from medaca_logger import MeDaCaLogger logger = MeDaCaLogger.get_logger() @@ -46,13 +48,18 @@ def handler(event, context): view_security_options = [ViewSecurityOption(*row) for row in check_result] mail_title, mail_body = make_notice_mail(view_security_options) - print(mail_title, mail_body) + + logger.info('I-05-06', f'メール送信指示をします 送信先トピック:{MBJ_NOTICE_TOPIC}') + notice_to_mbj(mail_title, mail_body) + logger.info('I-05-07', 'メール送信指示をしました') except MeDaCaException as e: logger.exception(e.error_id, e) + notice_to_nds(e.error_id, e) raise e except Exception as e: logger.exception('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + notice_to_nds('E-99', e) raise e finally: logger.info('I-06-01', '処理終了 Viewセキュリティオプション付与チェック') @@ -158,7 +165,7 @@ def fetch_view_security_options(connection: Database, check_target_schemas: list raise QueryExecutionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') -def make_notice_mail(view_security_options: list[ViewSecurityOption]): +def make_notice_mail(view_security_options: list[ViewSecurityOption]) -> tuple[str]: config_bucket = ConfigBucket() logger.info( 'I-05-02', f'通知メール(タイトル)テンプレートファイル読込 読込元:{config_bucket.bucket_name}/{config_bucket.mail_title_file_path}') @@ -174,7 +181,7 @@ def make_notice_mail(view_security_options: list[ViewSecurityOption]): return mail_title_template, mail_body -def read_mail_title(config_bucket: ConfigBucket): +def read_mail_title(config_bucket: ConfigBucket) -> str: """メールタイトルを読み込む Args: @@ -199,7 +206,7 @@ def read_mail_title(config_bucket: ConfigBucket): return mail_title -def read_mail_body_template(config_bucket: ConfigBucket): +def read_mail_body_template(config_bucket: ConfigBucket) -> str: """メール本文を読み込む Args: @@ -223,6 +230,39 @@ def read_mail_body_template(config_bucket: ConfigBucket): return mail_body_template +def notice_to_mbj(mail_title: str, mail_body: str) -> None: + """MBJへ通知を行います + + Args: + mail_title (str): メールタイトル + mail_body (str): メール本文 + + Raises: + SNSPublishException: SNSでの通知失敗した場合のエラー + """ + try: + notifier = SNSNotifier() + notifier.publish_to_mbj(mail_title, mail_body) + except Exception as e: + raise SNSPublishException('E-98', f'通知の送信指示に失敗しました エラー内容:{e}') + + +def notice_to_nds(error_id: str, error_message: str) -> None: + """NDSに処理以上通知を行う + + Args: + error_id (str): エラーID + error_message (str): エラーメッセージ + Raises: + SNSPublishException: SNSでの通知失敗した場合のエラー + """ + try: + notifier = SNSNotifier() + notifier.publish_to_nds(error_id, error_message) + except Exception as e: + raise SNSPublishException('E-98', f'通知の送信指示に失敗しました エラー内容:{e}') + + # ローカル実行用 if __name__ == '__main__': handler({}, {}) From 28d10dc054f5d8d6b36da92ce8da43626b342d70 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 7 Jul 2022 15:12:07 +0900 Subject: [PATCH 28/77] =?UTF-8?q?fix:=20=E3=83=AD=E3=82=B0=E3=81=AEID?= =?UTF-8?q?=E3=82=92=E8=A8=AD=E8=A8=88=E3=81=A8=E3=81=82=E3=82=8F=E3=81=9B?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/aws/s3.py | 31 +------- ...y_option.py => no_security_option_view.py} | 2 +- .../check-view-option/main.py | 77 +++++++++++-------- 3 files changed, 48 insertions(+), 62 deletions(-) rename lambda/check-view-secutiry-option/check-view-option/dto/{view_secutiry_option.py => no_security_option_view.py} (75%) diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py index d18b74e5..7074b663 100644 --- a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py +++ b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py @@ -18,41 +18,18 @@ class S3Resource: class ConfigBucket: __s3_resource: S3Resource = None __bucket_name: str - __check_target_schema_names_file_path: str - __notice_mail_title_template_file_path: str - __notice_mail_body_template_file_path: str def __init__(self) -> None: - self.__bucket_name = environments.CONFIG_BUCKET_NAME - self.__check_target_schema_names_file_path = environments.CHECK_TARGET_SCHEMA_NAMES_PATH - self.__notice_mail_title_template_file_path = environments.NOTICE_MAIL_TITLE_TEMPLATE_PATH - self.__notice_mail_body_template_file_path = environments.NOTICE_MAIL_BODY_TEMPLATE_PATH - self.__s3_resource = S3Resource(self.__bucket_name) - - @property - def bucket_name(self): - return self.__bucket_name - - @property - def check_target_schema_names_file_path(self): - return self.__check_target_schema_names_file_path - - @property - def mail_body_file_path(self): - return self.__notice_mail_body_template_file_path - - @property - def mail_title_file_path(self): - return self.__notice_mail_title_template_file_path + self.__s3_resource = S3Resource(environments.CONFIG_BUCKET_NAME) @property def check_target_schema_names(self): - return self.__s3_resource.get_object(self.__check_target_schema_names_file_path) + return self.__s3_resource.get_object(environments.CHECK_TARGET_SCHEMA_NAMES_PATH) @property def notice_mail_title_template(self): - return self.__s3_resource.get_object(self.__notice_mail_title_template_file_path) + return self.__s3_resource.get_object(environments.NOTICE_MAIL_TITLE_TEMPLATE_PATH) @property def notice_mail_body_template(self): - return self.__s3_resource.get_object(self.__notice_mail_body_template_file_path) + return self.__s3_resource.get_object(environments.NOTICE_MAIL_BODY_TEMPLATE_PATH) diff --git a/lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py b/lambda/check-view-secutiry-option/check-view-option/dto/no_security_option_view.py similarity index 75% rename from lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py rename to lambda/check-view-secutiry-option/check-view-option/dto/no_security_option_view.py index f5cdc3dc..3a58e873 100644 --- a/lambda/check-view-secutiry-option/check-view-option/dto/view_secutiry_option.py +++ b/lambda/check-view-secutiry-option/check-view-option/dto/no_security_option_view.py @@ -2,6 +2,6 @@ from dataclasses import dataclass @dataclass -class ViewSecurityOption: +class NoSecurityOptionView: schema_name: str table_name: str diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index 0226d3e3..ff2361d8 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -15,8 +15,10 @@ from constants import (CHECK_TARGET_SCHEMAS, RESPONSE_CODE_PARAMETER_NOT_FOUND, RESPONSE_ERROR, RESPONSE_ERROR_CODE) from database import Database -from dto.view_secutiry_option import ViewSecurityOption -from environments import MBJ_NOTICE_TOPIC +from dto.no_security_option_view import NoSecurityOptionView +from environments import (CONFIG_BUCKET_NAME, MBJ_NOTICE_TOPIC, + NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH, + NOTICE_MAIL_TITLE_TEMPLATE_PATH) from exceptions import (DatabaseConnectionException, FileNotFoundException, MeDaCaException, ParameterNotFoundException, QueryExecutionException, SNSPublishException) @@ -28,7 +30,7 @@ logger = MeDaCaLogger.get_logger() def handler(event, context): try: logger.info('I-01-01', '処理開始 Viewセキュリティオプション付与チェック') - logger.info('I-02-02', 'チェック対象スキーマ名ファイルを読み込み 開始') + logger.info('I-02-01', 'チェック対象スキーマ名ファイルを読み込み 開始') check_target_schemas = read_check_target_schemas() logger.info('I-02-02', f'チェック対象スキーマ名ファイルを読み込み 終了 チェック対象スキーマ名:{check_target_schemas}') # print(check_target_schemas) @@ -36,7 +38,7 @@ def handler(event, context): # DB接続のためのパラメータ取得 db_host, db_user_name, db_user_password = read_db_param_from_parameter_store() connection = connection_database(db_host, db_user_name, db_user_password) - logger.info('I-03-01', 'データベースへの接続開始 終了') + logger.info('I-03-02', 'データベースへの接続開始 成功') logger.info('I-04-01', 'Viewセキュリティオプション チェック開始') check_result = fetch_view_security_options(connection, check_target_schemas) @@ -45,9 +47,18 @@ def handler(event, context): return logger.info('I-04-01', 'Viewセキュリティオプション 未設定のViewがあるため、メール送信処理を開始します。') - view_security_options = [ViewSecurityOption(*row) for row in check_result] - - mail_title, mail_body = make_notice_mail(view_security_options) + no_security_option_views = [NoSecurityOptionView(*row) for row in check_result] + logger.info( + 'I-05-02', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title = read_mail_title() + logger.info( + 'I-05-03', '通知メール(タイトル)テンプレートファイルを読み込みました') + logger.info( + 'I-05-04', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_template = read_mail_body_template() + logger.info( + 'I-05-05', '通知メール(本文)テンプレートファイルを読み込みました') + mail_body = make_notice_mail_body(no_security_option_views, mail_body_template) logger.info('I-05-06', f'メール送信指示をします 送信先トピック:{MBJ_NOTICE_TOPIC}') notice_to_mbj(mail_title, mail_body) @@ -55,10 +66,12 @@ def handler(event, context): except MeDaCaException as e: logger.exception(e.error_id, e) + logger.error(f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') notice_to_nds(e.error_id, e) raise e except Exception as e: logger.exception('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + logger.error('E-ERR-01', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') notice_to_nds('E-99', e) raise e finally: @@ -104,7 +117,7 @@ def read_db_param_from_parameter_store() -> tuple: return db_host, db_user_name, db_user_password except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_PARAMETER_NOT_FOUND: - raise ParameterNotFoundException('E-03-02', f'パラメータストアの取得に失敗しました エラー内容:{e}') + raise ParameterNotFoundException('E-03-01', f'パラメータストアの取得に失敗しました エラー内容:{e}') else: raise Exception(e) @@ -162,30 +175,27 @@ def fetch_view_security_options(connection: Database, check_target_schemas: list result = cursor.fetchall() return result except Exception as e: - raise QueryExecutionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') + raise QueryExecutionException('E-04-01', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') -def make_notice_mail(view_security_options: list[ViewSecurityOption]) -> tuple[str]: - config_bucket = ConfigBucket() - logger.info( - 'I-05-02', f'通知メール(タイトル)テンプレートファイル読込 読込元:{config_bucket.bucket_name}/{config_bucket.mail_title_file_path}') - mail_title_template = read_mail_title(config_bucket) - logger.info( - 'I-05-02', f'通知メール(本文)テンプレートファイル読込 読込元:{config_bucket.bucket_name}/{config_bucket.mail_body_file_path}') - mail_body_template = read_mail_body_template(config_bucket) - - mail_message = MAIL_INDENT.join([f'{option.schema_name}.{option.table_name}' for option in view_security_options]) - - mail_body = mail_body_template.format(no_option_views=mail_message) - - return mail_title_template, mail_body - - -def read_mail_title(config_bucket: ConfigBucket) -> str: - """メールタイトルを読み込む +def make_notice_mail_body(no_security_option_views: list[NoSecurityOptionView], mail_body_template: str) -> tuple[str]: + """メール本文を生成します Args: - config_bucket (ConfigBucket): 設定ファイル保管バケット操作クラス + view_security_options (list[NoSecurityOptionView]): チェック対象のビュー一覧 + mail_body_template (str): メール本文のテンプレート + + Returns: + tuple[str]: メール本文 + """ + mail_message = MAIL_INDENT.join( + [f'{option.schema_name}.{option.table_name}' for option in no_security_option_views]) + mail_body = mail_body_template.format(no_option_views=mail_message) + return mail_body + + +def read_mail_title() -> str: + """メールタイトルを読み込む Raises: FileNotFoundException: ファイルが読み込めなかったエラー @@ -196,22 +206,20 @@ def read_mail_title(config_bucket: ConfigBucket) -> str: """ try: + config_bucket = ConfigBucket() mail_title = config_bucket.notice_mail_title_template except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: - raise FileNotFoundException('E-02-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileNotFoundException('E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') else: raise Exception(e) return mail_title -def read_mail_body_template(config_bucket: ConfigBucket) -> str: +def read_mail_body_template() -> str: """メール本文を読み込む - Args: - config_bucket (ConfigBucket): 設定ファイル保管バケット操作クラス - Raises: FileNotFoundException: ファイルが読み込めなかったエラー Exception: 想定外のエラー @@ -220,10 +228,11 @@ def read_mail_body_template(config_bucket: ConfigBucket) -> str: str: メール本文 """ try: + config_bucket = ConfigBucket() mail_body_template = config_bucket.notice_mail_body_template except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: - raise FileNotFoundException('E-02-01', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileNotFoundException('E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') else: raise Exception(e) From 2109e721be2991e1dabc1f0bec137fc5c8aa895d Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 7 Jul 2022 15:16:47 +0900 Subject: [PATCH 29/77] =?UTF-8?q?fix:=20=E3=83=AD=E3=82=B0=E3=81=AEID?= =?UTF-8?q?=E9=96=93=E9=81=95=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-secutiry-option/check-view-option/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index ff2361d8..504388fb 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -45,7 +45,7 @@ def handler(event, context): if len(check_result) == 0: logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') return - logger.info('I-04-01', 'Viewセキュリティオプション 未設定のViewがあるため、メール送信処理を開始します。') + logger.info('I-05-01', 'Viewセキュリティオプション 未設定のViewがあるため、メール送信処理を開始します。') no_security_option_views = [NoSecurityOptionView(*row) for row in check_result] logger.info( From 218215cb87ec4375379a9901d8caa4713c788065 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 7 Jul 2022 15:29:09 +0900 Subject: [PATCH 30/77] =?UTF-8?q?refactor:=E4=BD=BF=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=84=E5=A4=89=E6=95=B0=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-secutiry-option/check-view-option/aws/s3.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py index 7074b663..55c33c81 100644 --- a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py +++ b/lambda/check-view-secutiry-option/check-view-option/aws/s3.py @@ -17,7 +17,6 @@ class S3Resource: class ConfigBucket: __s3_resource: S3Resource = None - __bucket_name: str def __init__(self) -> None: self.__s3_resource = S3Resource(environments.CONFIG_BUCKET_NAME) From fc8ecccf2115e5f801cdc02db4b4162f59f57706 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 8 Jul 2022 15:12:52 +0900 Subject: [PATCH 31/77] =?UTF-8?q?refactor:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://nds-tyo.backlog.com/git/NEWDWH2021/newsdwh2021/pullRequests/37#comment-1247185 --- .../check-view-secutiry-option/check-view-option/main.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index 504388fb..c34dae43 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -29,24 +29,26 @@ logger = MeDaCaLogger.get_logger() def handler(event, context): try: + # ① 処理開始ログを出力する logger.info('I-01-01', '処理開始 Viewセキュリティオプション付与チェック') + # ② 設定ファイル[チェック対象スキーマ名ファイル]を読み込む logger.info('I-02-01', 'チェック対象スキーマ名ファイルを読み込み 開始') check_target_schemas = read_check_target_schemas() logger.info('I-02-02', f'チェック対象スキーマ名ファイルを読み込み 終了 チェック対象スキーマ名:{check_target_schemas}') - # print(check_target_schemas) + # ③ データベースに接続する logger.info('I-03-01', 'データベースへの接続開始 開始') # DB接続のためのパラメータ取得 db_host, db_user_name, db_user_password = read_db_param_from_parameter_store() connection = connection_database(db_host, db_user_name, db_user_password) logger.info('I-03-02', 'データベースへの接続開始 成功') + # ④ Viewのオプションを確認するため、データを取得する logger.info('I-04-01', 'Viewセキュリティオプション チェック開始') check_result = fetch_view_security_options(connection, check_target_schemas) - if len(check_result) == 0: logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') return logger.info('I-05-01', 'Viewセキュリティオプション 未設定のViewがあるため、メール送信処理を開始します。') - + # ⑤ 取得できたデータをもとに、メール通知する文言を作成する no_security_option_views = [NoSecurityOptionView(*row) for row in check_result] logger.info( 'I-05-02', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') @@ -75,6 +77,7 @@ def handler(event, context): notice_to_nds('E-99', e) raise e finally: + # ⑥ 処理終了ログを出力する logger.info('I-06-01', '処理終了 Viewセキュリティオプション付与チェック') From 5e1f737be983768b30a520694a450dcf382c81b8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 8 Jul 2022 18:00:26 +0900 Subject: [PATCH 32/77] =?UTF-8?q?fix:=20typo=E4=BF=AE=E6=AD=A3=20secutiry?= =?UTF-8?q?=E2=86=92security,=20NDS=E5=90=91=E3=81=91=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BCID?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E6=BC=8F=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-secutiry-option/check-view-option/main.py | 2 +- ..._body.config => check_view_security_option_mail_body.config} | 0 ...itle.config => check_view_security_option_mail_title.config} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename s3/config/view_check/{check_view_secutiry_option_mail_body.config => check_view_security_option_mail_body.config} (100%) rename s3/config/view_check/{check_view_secutiry_option_mail_title.config => check_view_security_option_mail_title.config} (100%) diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index c34dae43..90dad25f 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -68,7 +68,7 @@ def handler(event, context): except MeDaCaException as e: logger.exception(e.error_id, e) - logger.error(f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + logger.error('E-ERR-01', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') notice_to_nds(e.error_id, e) raise e except Exception as e: diff --git a/s3/config/view_check/check_view_secutiry_option_mail_body.config b/s3/config/view_check/check_view_security_option_mail_body.config similarity index 100% rename from s3/config/view_check/check_view_secutiry_option_mail_body.config rename to s3/config/view_check/check_view_security_option_mail_body.config diff --git a/s3/config/view_check/check_view_secutiry_option_mail_title.config b/s3/config/view_check/check_view_security_option_mail_title.config similarity index 100% rename from s3/config/view_check/check_view_secutiry_option_mail_title.config rename to s3/config/view_check/check_view_security_option_mail_title.config From bb77ae9368f2a03a2c6568c86ecf13fa73522418 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 11 Jul 2022 08:44:03 +0900 Subject: [PATCH 33/77] =?UTF-8?q?fix:=20typo=E4=BF=AE=E6=AD=A3=20secutiry?= =?UTF-8?q?=E2=86=92security?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dockerfile | 0 .../Pipfile | 0 .../Pipfile.lock | 0 .../check-view-option/aws/__init__.py | 0 .../check-view-option/aws/s3.py | 0 .../check-view-option/aws/sns.py | 0 .../check-view-option/aws/ssm.py | 0 .../check-view-option/constants.py | 0 .../check-view-option/database.py | 0 .../check-view-option/dto/__init__.py | 0 .../check-view-option/dto/no_security_option_view.py | 0 .../check-view-option/environments.py | 0 .../check-view-option/exceptions.py | 0 .../check-view-option/main.py | 0 .../check-view-option/medaca_logger.py | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename lambda/{check-view-secutiry-option => check-view-security-option}/Dockerfile (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/Pipfile (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/Pipfile.lock (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/aws/__init__.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/aws/s3.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/aws/sns.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/aws/ssm.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/constants.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/database.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/dto/__init__.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/dto/no_security_option_view.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/environments.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/exceptions.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/main.py (100%) rename lambda/{check-view-secutiry-option => check-view-security-option}/check-view-option/medaca_logger.py (100%) diff --git a/lambda/check-view-secutiry-option/Dockerfile b/lambda/check-view-security-option/Dockerfile similarity index 100% rename from lambda/check-view-secutiry-option/Dockerfile rename to lambda/check-view-security-option/Dockerfile diff --git a/lambda/check-view-secutiry-option/Pipfile b/lambda/check-view-security-option/Pipfile similarity index 100% rename from lambda/check-view-secutiry-option/Pipfile rename to lambda/check-view-security-option/Pipfile diff --git a/lambda/check-view-secutiry-option/Pipfile.lock b/lambda/check-view-security-option/Pipfile.lock similarity index 100% rename from lambda/check-view-secutiry-option/Pipfile.lock rename to lambda/check-view-security-option/Pipfile.lock diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/__init__.py b/lambda/check-view-security-option/check-view-option/aws/__init__.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/aws/__init__.py rename to lambda/check-view-security-option/check-view-option/aws/__init__.py diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/s3.py b/lambda/check-view-security-option/check-view-option/aws/s3.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/aws/s3.py rename to lambda/check-view-security-option/check-view-option/aws/s3.py diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/sns.py b/lambda/check-view-security-option/check-view-option/aws/sns.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/aws/sns.py rename to lambda/check-view-security-option/check-view-option/aws/sns.py diff --git a/lambda/check-view-secutiry-option/check-view-option/aws/ssm.py b/lambda/check-view-security-option/check-view-option/aws/ssm.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/aws/ssm.py rename to lambda/check-view-security-option/check-view-option/aws/ssm.py diff --git a/lambda/check-view-secutiry-option/check-view-option/constants.py b/lambda/check-view-security-option/check-view-option/constants.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/constants.py rename to lambda/check-view-security-option/check-view-option/constants.py diff --git a/lambda/check-view-secutiry-option/check-view-option/database.py b/lambda/check-view-security-option/check-view-option/database.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/database.py rename to lambda/check-view-security-option/check-view-option/database.py diff --git a/lambda/check-view-secutiry-option/check-view-option/dto/__init__.py b/lambda/check-view-security-option/check-view-option/dto/__init__.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/dto/__init__.py rename to lambda/check-view-security-option/check-view-option/dto/__init__.py diff --git a/lambda/check-view-secutiry-option/check-view-option/dto/no_security_option_view.py b/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/dto/no_security_option_view.py rename to lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py diff --git a/lambda/check-view-secutiry-option/check-view-option/environments.py b/lambda/check-view-security-option/check-view-option/environments.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/environments.py rename to lambda/check-view-security-option/check-view-option/environments.py diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-security-option/check-view-option/exceptions.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/exceptions.py rename to lambda/check-view-security-option/check-view-option/exceptions.py diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/main.py rename to lambda/check-view-security-option/check-view-option/main.py diff --git a/lambda/check-view-secutiry-option/check-view-option/medaca_logger.py b/lambda/check-view-security-option/check-view-option/medaca_logger.py similarity index 100% rename from lambda/check-view-secutiry-option/check-view-option/medaca_logger.py rename to lambda/check-view-security-option/check-view-option/medaca_logger.py From bd515960d9e97d957e0d0ddffce32dd911606929 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 11 Jul 2022 09:58:58 +0900 Subject: [PATCH 34/77] =?UTF-8?q?feat:=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E4=BA=8B=E9=A0=85=E4=BF=AE=E6=AD=A3=20https:?= =?UTF-8?q?//nds-tyo.backlog.com/git/NEWDWH2021/newsdwh2021/pullRequests/3?= =?UTF-8?q?7#comment-1247549=20https://nds-tyo.backlog.com/git/NEWDWH2021/?= =?UTF-8?q?newsdwh2021/pullRequests/37#comment-1247558?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/dto/no_security_option_view.py | 1 + lambda/check-view-security-option/check-view-option/main.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py b/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py index 3a58e873..a349cc80 100644 --- a/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py +++ b/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py @@ -5,3 +5,4 @@ from dataclasses import dataclass class NoSecurityOptionView: schema_name: str table_name: str + security_type: str diff --git a/lambda/check-view-security-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py index 90dad25f..9cfd19bb 100644 --- a/lambda/check-view-security-option/check-view-option/main.py +++ b/lambda/check-view-security-option/check-view-option/main.py @@ -44,6 +44,7 @@ def handler(event, context): # ④ Viewのオプションを確認するため、データを取得する logger.info('I-04-01', 'Viewセキュリティオプション チェック開始') check_result = fetch_view_security_options(connection, check_target_schemas) + logger.debug('D-04-01', f'取得データ:{check_result}') if len(check_result) == 0: logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') return @@ -164,7 +165,8 @@ def fetch_view_security_options(connection: Database, check_target_schemas: list select_view_security_option_sql = f""" SELECT TABLE_SCHEMA, - TABLE_NAME + TABLE_NAME, + SECURITY_TYPE FROM INFORMATION_SCHEMA.VIEWS WHERE From ee0ad723e4f2291c2a129b7872e1173a71f1fbaa Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 11 Jul 2022 11:20:38 +0900 Subject: [PATCH 35/77] =?UTF-8?q?refactor:=20=E5=8F=96=E5=BE=97=E3=82=AB?= =?UTF-8?q?=E3=83=A9=E3=83=A0=E3=81=ABDEFINER=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-security-option/check-view-option/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambda/check-view-security-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py index 9cfd19bb..c40d8c51 100644 --- a/lambda/check-view-security-option/check-view-option/main.py +++ b/lambda/check-view-security-option/check-view-option/main.py @@ -166,7 +166,7 @@ def fetch_view_security_options(connection: Database, check_target_schemas: list SELECT TABLE_SCHEMA, TABLE_NAME, - SECURITY_TYPE + DEFINER FROM INFORMATION_SCHEMA.VIEWS WHERE From 64b0f951fd109dbe95cc16ddf93332ff078d985b Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 11 Jul 2022 11:27:52 +0900 Subject: [PATCH 36/77] =?UTF-8?q?refactor:=E3=82=AF=E3=82=A8=E3=83=AA?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=AB=E3=81=A8=E3=82=82=E3=81=AA=E3=81=86?= =?UTF-8?q?DTO=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/dto/no_security_option_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py b/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py index a349cc80..5a5fb39c 100644 --- a/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py +++ b/lambda/check-view-security-option/check-view-option/dto/no_security_option_view.py @@ -5,4 +5,4 @@ from dataclasses import dataclass class NoSecurityOptionView: schema_name: str table_name: str - security_type: str + definer: str From 871c97b3c29547f4114fd967cc1257d462c5a70c Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 12 Jul 2022 15:32:18 +0900 Subject: [PATCH 37/77] =?UTF-8?q?feat(Pipfile):=20DB=E8=AA=8D=E8=A8=BC?= =?UTF-8?q?=E6=99=82=E3=81=AB=E9=96=93=E9=81=95=E3=81=A3=E3=81=9F=E3=83=A6?= =?UTF-8?q?=E3=83=BC=E3=82=B6=E3=83=BC=E3=82=92=E5=85=A5=E5=8A=9B=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=A8=E5=BE=A9=E5=8F=B7=E5=8C=96=E9=96=A2=E9=80=A3?= =?UTF-8?q?=E3=81=AE=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC=E3=82=B8=E3=81=8C?= =?UTF-8?q?=E8=B6=B3=E3=82=8A=E3=81=AA=E3=81=84=E3=82=88=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=81=AB=E6=88=90=E3=82=8B=E3=81=9F=E3=82=81=E3=80=81?= =?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 表示メッセージ:'cryptography' package is required for sha256_password or caching_sha2_password auth methods --- lambda/check-view-security-option/Pipfile | 1 + .../check-view-security-option/Pipfile.lock | 126 ++++++++++++++++-- 2 files changed, 116 insertions(+), 11 deletions(-) diff --git a/lambda/check-view-security-option/Pipfile b/lambda/check-view-security-option/Pipfile index d6f3b1ee..eacea852 100644 --- a/lambda/check-view-security-option/Pipfile +++ b/lambda/check-view-security-option/Pipfile @@ -7,6 +7,7 @@ name = "pypi" awslambdaric = "*" boto3 = "*" pymysql = "*" +cryptography = "*" [dev-packages] autopep8 = "*" diff --git a/lambda/check-view-security-option/Pipfile.lock b/lambda/check-view-security-option/Pipfile.lock index a93003e7..163f1553 100644 --- a/lambda/check-view-security-option/Pipfile.lock +++ b/lambda/check-view-security-option/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9521eb0e33f733846811775b587cd94d7660f2e612b8efcbd622fd4d19122916" + "sha256": "0bf055eba7a510de27e990db23f5203946ebbc02a6c678b89051dc0d1437444f" }, "pipfile-spec": 6, "requires": { @@ -43,19 +43,116 @@ }, "boto3": { "hashes": [ - "sha256:4a7cf5fddb1626d25c5935c5a82afdff9c7fe2faac2a68d37edf0264b3a85127", - "sha256:bd0b94428ae7cc57904d3c903d9393bdf4dd2b1274d1c51749f27f5bd76953e1" + "sha256:626bbec91ca2423e427636db207a03c854b52d22715c9b34a953ee8260817f6f", + "sha256:7e0a5c86059866d7f9e27d6574da9bfb4f8a03c4caf055724145f3cd44785b81" ], "index": "pypi", - "version": "==1.24.18" + "version": "==1.24.27" }, "botocore": { "hashes": [ - "sha256:20a866351f9f65cfe27edc21d755de60e17a1fbb1273d73fc0006ed0d6f8ef86", - "sha256:74426179c75debd77c6dcc2d66cfd506e52962e605d2b9f2dbca290474539c8b" + "sha256:524da451350c41e3136353183e7424c95952124163ea8ec03f57f29597bbcb4b", + "sha256:583b85f8a799fb89d1a762db041163b5848b08e79cee06b609bcaaeb69ea1fa6" ], "markers": "python_version >= '3.7'", - "version": "==1.27.18" + "version": "==1.27.27" + }, + "cffi": { + "hashes": [ + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" + }, + "cryptography": { + "hashes": [ + "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59", + "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596", + "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3", + "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5", + "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab", + "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884", + "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82", + "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b", + "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441", + "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa", + "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d", + "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b", + "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a", + "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6", + "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157", + "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280", + "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282", + "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67", + "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8", + "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046", + "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327", + "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9" + ], + "index": "pypi", + "version": "==37.0.4" }, "jmespath": { "hashes": [ @@ -65,6 +162,13 @@ "markers": "python_version >= '3.7'", "version": "==1.0.1" }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, "pymysql": { "hashes": [ "sha256:41fc3a0c5013d5f039639442321185532e3e2c8924687abe6537de157d403641", @@ -150,11 +254,11 @@ }, "urllib3": { "hashes": [ - "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", - "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" + "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec", + "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.9" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4'", + "version": "==1.26.10" } }, "develop": { From a8d377f7e14740f8f2dddc8e7c4751b7435f51e5 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 12 Jul 2022 15:32:18 +0900 Subject: [PATCH 38/77] =?UTF-8?q?feat(Dockerfile):=20=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E6=99=82=E3=81=AB=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=80=81?= =?UTF-8?q?=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-security-option/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lambda/check-view-security-option/Dockerfile b/lambda/check-view-security-option/Dockerfile index 681c462a..e3858a69 100644 --- a/lambda/check-view-security-option/Dockerfile +++ b/lambda/check-view-security-option/Dockerfile @@ -5,7 +5,8 @@ ENV TZ="Asia/Tokyo" WORKDIR ${WORKDIR} COPY Pipfile Pipfile.lock ${WORKDIR} -RUN pip install pipenv --no-cache-dir && \ +RUN apt update -y && apt upgrade -y && \ + pip install pipenv --no-cache-dir && \ pipenv install --system --deploy && \ pip uninstall -y pipenv virtualenv-clone virtualenv COPY check-view-option ./ From 2f0bbf53b7175f117d539ba1446e10ff1ed36ffd Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 12 Jul 2022 15:55:59 +0900 Subject: [PATCH 39/77] =?UTF-8?q?feat:=20JSON=E3=81=AE=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=8F?= =?UTF-8?q?=E3=83=91=E3=83=BC=E3=82=B5=E3=83=BC=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/constants.py | 4 ++++ .../check-view-option/exceptions.py | 5 +++++ .../check-view-option/json_perser.py | 17 +++++++++++++++++ .../check-view-option/main.py | 17 ++++++++++++----- 4 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 lambda/check-view-security-option/check-view-option/json_perser.py diff --git a/lambda/check-view-security-option/check-view-option/constants.py b/lambda/check-view-security-option/check-view-option/constants.py index ac6b2bfa..1b8affc6 100644 --- a/lambda/check-view-security-option/check-view-option/constants.py +++ b/lambda/check-view-security-option/check-view-option/constants.py @@ -41,3 +41,7 @@ LAUNCH_ON_LOCAL = 'local' CHECK_TARGET_SCHEMAS = 'check_target_schemas' # メール本文に出力する不足ファイル名一覧のインデント MAIL_INDENT = '\n  ' +# JSONファイル上のコメント業を表すシンボル +JSON_COMMENT_SYMBOL = '#' +# JSON内のコメントを置き換える正規表現 +REPLACE_COMMENT_REGEX = rf'\s(?!\"){JSON_COMMENT_SYMBOL}[\s\S]*?.*' diff --git a/lambda/check-view-security-option/check-view-option/exceptions.py b/lambda/check-view-security-option/check-view-option/exceptions.py index aebd28c3..32ed09cc 100644 --- a/lambda/check-view-security-option/check-view-option/exceptions.py +++ b/lambda/check-view-security-option/check-view-option/exceptions.py @@ -32,3 +32,8 @@ class QueryExecutionException(MeDaCaException): class SNSPublishException(MeDaCaException): """AmazonSNSへの通知に失敗した場合の例外""" pass + + +class JSONParseException(MeDaCaException): + """JSONのパースに失敗した場合の例外""" + pass diff --git a/lambda/check-view-security-option/check-view-option/json_perser.py b/lambda/check-view-security-option/check-view-option/json_perser.py new file mode 100644 index 00000000..d691b18c --- /dev/null +++ b/lambda/check-view-security-option/check-view-option/json_perser.py @@ -0,0 +1,17 @@ +import json +import re + +from constants import REPLACE_COMMENT_REGEX + + +class JSONParser: + + __json_str: str = None + + def __init__(self, json_str: str) -> None: + self.__json_str = json_str + + def parse(self): + # コメントを除去して辞書に変換する + without_comment = re.sub(REPLACE_COMMENT_REGEX, '', self.__json_str) + return json.loads(without_comment) diff --git a/lambda/check-view-security-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py index c40d8c51..252fc262 100644 --- a/lambda/check-view-security-option/check-view-option/main.py +++ b/lambda/check-view-security-option/check-view-option/main.py @@ -2,8 +2,6 @@ Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント """ -import json - import botocore from aws.s3 import ConfigBucket @@ -20,8 +18,10 @@ from environments import (CONFIG_BUCKET_NAME, MBJ_NOTICE_TOPIC, NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH, NOTICE_MAIL_TITLE_TEMPLATE_PATH) from exceptions import (DatabaseConnectionException, FileNotFoundException, - MeDaCaException, ParameterNotFoundException, - QueryExecutionException, SNSPublishException) + JSONParseException, MeDaCaException, + ParameterNotFoundException, QueryExecutionException, + SNSPublishException) +from json_perser import JSONParser from medaca_logger import MeDaCaLogger logger = MeDaCaLogger.get_logger() @@ -87,6 +87,7 @@ def read_check_target_schemas() -> list: Raises: FileNotFoundException: ファイルが読み込めなかったエラー + JSONParseException: JSONを辞書オブジェクトに変換できなかったエラー Exception: 想定外のエラー Returns: @@ -95,12 +96,18 @@ def read_check_target_schemas() -> list: try: config_bucket = ConfigBucket() check_target_schema_names = config_bucket.check_target_schema_names - return json.loads(check_target_schema_names)[CHECK_TARGET_SCHEMAS] except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: raise FileNotFoundException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{e}') else: raise Exception(e) + try: + json_parser = JSONParser(check_target_schema_names) + check_target_schemas = json_parser.parse()[CHECK_TARGET_SCHEMAS] + except Exception as e: + raise JSONParseException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{e}') + + return check_target_schemas def read_db_param_from_parameter_store() -> tuple: From 83d7e190e3d81ce3b8c76db26b7d60697a251857 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 13 Jul 2022 11:32:54 +0900 Subject: [PATCH 40/77] =?UTF-8?q?Revert=20"feat(Dockerfile):=20=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E6=99=82=E3=81=AB=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=82=92=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=80=81=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=9F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a8d377f7e14740f8f2dddc8e7c4751b7435f51e5. --- lambda/check-view-security-option/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lambda/check-view-security-option/Dockerfile b/lambda/check-view-security-option/Dockerfile index e3858a69..681c462a 100644 --- a/lambda/check-view-security-option/Dockerfile +++ b/lambda/check-view-security-option/Dockerfile @@ -5,8 +5,7 @@ ENV TZ="Asia/Tokyo" WORKDIR ${WORKDIR} COPY Pipfile Pipfile.lock ${WORKDIR} -RUN apt update -y && apt upgrade -y && \ - pip install pipenv --no-cache-dir && \ +RUN pip install pipenv --no-cache-dir && \ pipenv install --system --deploy && \ pip uninstall -y pipenv virtualenv-clone virtualenv COPY check-view-option ./ From fcdc50569be741d73f40de2e01a036987a41fe47 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 14 Jul 2022 16:38:25 +0900 Subject: [PATCH 41/77] =?UTF-8?q?feat:=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=AB=E3=83=B3=E3=83=9E=E9=99=A4=E5=8E=BB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=81=AE=E3=81=9F=E3=82=81=E6=95=B0=E5=80=A4?= =?UTF-8?q?=E5=9E=8B=E3=81=AEDB=E3=82=AB=E3=83=A9=E3=83=A0=E7=89=A9?= =?UTF-8?q?=E7=90=86=E5=90=8D=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 1 + s3/data/SAP_fin/settings/IOReport.txt | 1 + s3/data/SAP_fin/settings/Invoice.txt | 1 + s3/data/SAP_fin/settings/WBSList.txt | 3 +-- s3/data/SAP_fin/settings/WBSReport.txt | 1 + s3/data/SAP_sup/settings/ConfReport.txt | 1 + s3/data/SAP_sup/settings/GMReport.txt | 1 + s3/data/SAP_sup/settings/GRReport.txt | 1 + s3/data/SAP_sup/settings/MLCReport.txt | 1 + s3/data/SAP_sup/settings/POReport.txt | 1 + s3/data/SAP_sup/settings/QAReport.txt | 1 + s3/data/SAP_sup/settings/StockList.txt | 1 + 12 files changed, 12 insertions(+), 2 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index 98eb615b..a3b33f26 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -10,3 +10,4 @@ vt,fiscal_year,fiscal_period,cost_center,cost_element,cost_element_name,vbl_valu src03a.sapf_costreport org03a.sapf_costreport +vbl_value \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 0157c6e9..a2ab0774 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -10,3 +10,4 @@ fiscal_year,fiscal_period,internal_order,cost_element,cost_element_name,vbl_valu src03a.sapf_ioreport org03a.sapf_ioreport +vbl_value \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 61488a51..52ed7636 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -10,3 +10,4 @@ billing_type,condition_type,distribution_channel,invoiced_number,invoice_item,in src03b.sapf_invoice org03b.sapf_invoice +vbl_value \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index a64e1390..9247ca7f 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -8,5 +8,4 @@ LF WBS element,Level,Profit center,Project Definition,Description,Control area,Responsibility,Basic finish date,Basic start date wbs_element,level,profit_center,project_definition,description,control_area,responsibility,basic_finish_date,basic_start_date src03a.sapf_wbslist -org03a.sapf_wbslist - +org03a.sapf_wbslist \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 91c75389..2d29d606 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -10,3 +10,4 @@ fiscal_year,fiscal_period,wbs_element,cost_element,cost_element_name,vbl_value,o src03a.sapf_wbsreport org03a.sapf_wbsreport +vbl_value \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 299632cf..7c7ecefe 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -10,3 +10,4 @@ process_order,operation_activity,yield,uom,posting_date,finish_execution_date,ma src04.saps_confreport org04.saps_confreport +yield \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index c20b6aa9..c254e937 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -10,3 +10,4 @@ process_order,material_document,material_document_item,material,material_descrip src04.saps_gmreport org04.saps_gmreport +qty \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index 3ed56da7..aecae348 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -10,3 +10,4 @@ plant,material,material_description,batch,posting_date,qty_in_un_of_entry,moveme src04.saps_grreport org04.saps_grreport +qty_in_un_of_entry,total_valuated_stock_before_the_posting,quantity,amount \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index ed71a72f..db3af777 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -10,3 +10,4 @@ plant,material,material_description,batch,posting_date,qty_in_un_of_entry,moveme src04.saps_mlcreport org04.saps_mlcreport +qty_in_un_of_entry,total_valuated_stock_before_the_posting,quantity,amount \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index eb6de20d..5fe24ce6 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -10,3 +10,4 @@ purchasing_document,vendor,item,material,short_text,document_date,order_quantity src04.saps_poreport org04.saps_poreport +order_quantity,net_order_value \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index 96b6f6aa..fca0ca72 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -10,3 +10,4 @@ plant,material,material_description,batch,posting_date,qty_in_un_of_entry,moveme src04.saps_qareport org04.saps_qareport +qty_in_un_of_entry,total_valuated_stock_before_the_posting,quantity,amount \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt index 8bc8985d..f571083c 100644 --- a/s3/data/SAP_sup/settings/StockList.txt +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -10,3 +10,4 @@ spl_stock_indic,material_num,material_desc,storage_location,batch_num,expired_da src04.saps_stocklist org04.saps_stocklist StockList_ex.sql +unrestricted_stock,in_quality_stock,blocked_stock,consign_stock,total_stock_quantity \ No newline at end of file From 7a8700ac3e2aff3e7d5d5735e85b3995b30c6114 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 14 Jul 2022 18:49:32 +0900 Subject: [PATCH 42/77] =?UTF-8?q?feat:=E3=82=AB=E3=83=B3=E3=83=9E=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E5=87=A6=E7=90=86=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E4=BF=AE=E6=AD=A3=E3=81=AB=E4=BC=B4?= =?UTF-8?q?=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 8 ++++++ ecs/dataimport/dataimport/main.py | 41 ++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index a0bf2ced..ad1b9af7 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -23,6 +23,14 @@ SETTINGS_ITEM = { 'storageSchemaName': 9, 'loadSchemaName': 10, 'exSqlFileName': 11, + 'removeCommas': 12, + 'reserved0': 13, + 'reserved1': 14, + 'reserved2': 15, + 'reserved3': 16, + 'reserved4': 17, + 'reserved5': 18, + 'reserved6': 19 } LINE_FEED_CODE = { 'CR': '\r', diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index 730a7be8..0ffe224f 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -1,4 +1,5 @@ from datetime import datetime +import re import boto3 import pymysql from pymysql.constants import CLIENT @@ -23,6 +24,14 @@ SETTINGS_ITEM = { 'storageSchemaName': 9, 'loadSchemaName': 10, 'exSqlFileName': 11, + 'replaceCommas': 12, + 'reserved0': 13, + 'reserved1': 14, + 'reserved2': 15, + 'reserved3': 16, + 'reserved4': 17, + 'reserved5': 18, + 'reserved6': 19 } LINE_FEED_CODE = { 'CR': '\r', @@ -76,12 +85,18 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-MAIN-03 - タイムゾーンを変更しました') # ④ 個別設定ファイルのロードスキーマのテーブル名に記載されているテーブルをTRUNCATEする + # 個別設定ファイルの読み込み settings_obj = s3_resource.Object(bucket_name, settings_key) settings_response = settings_obj.get() settings_list = [] for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'): settings_list.append(line.rstrip('\n')) + # 予約行挿入のためsetting_listとSETTINGS_ITEMの要素数を揃える + for _ in range(len(SETTINGS_ITEM) - len(settings_list)): + settings_list.append('') + + # ロードスキーマのTRUNCATE with conn.cursor() as cur: sql_truncate = f'TRUNCATE table {settings_list[SETTINGS_ITEM["loadSchemaName"]]}' cur.execute(sql_truncate) @@ -100,6 +115,7 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf warning_info = '' # ワーニング情報 index = 0 # ループインデックス settings_db_columu_list = settings_list[SETTINGS_ITEM["dbColumuName"]].rstrip().split(',') + settings_replace_comma_list = settings_list[SETTINGS_ITEM["replaceCommas"]].rstrip().split(',') for line in csv.reader(work_data, quotechar=settings_list[SETTINGS_ITEM["quotechar"]], delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): try: @@ -125,13 +141,15 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf sql = f'{sql} VALUES (' for i in range(len(line)): # データ項目値が0桁より大きいかチェックする - if len(line[i]) > 0: - # 0桁より大きい場合 - replace_line = line[i].replace('\\', '\\\\') - sql = f'{sql} "{replace_line}",' - else: - # 上記以外の場合 + if len(line[i]) == 0: + # 0桁の場合 sql = f'{sql} NULL,' + continue + + # データ項目値の変換処理 + column_value = replace_column_value(line,settings_db_columu_list,settings_replace_comma_list,i) + sql = f'{sql} "{column_value}",' + sql = f'{sql} "{target_file_name}",' # システム項目:取込ファイル名 sql = f'{sql} "{index + 1}",' # システム項目:取込ファイル行番号 sql = f'{sql} "0",' # システム項目:論理削除フラグ @@ -272,3 +290,14 @@ def connection_close(conn, bucket_name, target_data_source, target_file_name, lo except Exception as e: print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-MAIN-99 - エラー内容:{e}') error(bucket_name, target_data_source, target_file_name, log_info) + +def replace_column_value(line,settings_db_columu_list,settings_replace_comma_list,i): + org_column_value = line[i] + + # 投入データのDB物理カラム名が設定ファイルの数値型のDBカラム物理名に含まれている場合 + if settings_db_columu_list[i] in settings_replace_comma_list: + org_column_value = org_column_value.replace(',', '') + + org_column_value = org_column_value.replace('\\', '\\\\') + return org_column_value + \ No newline at end of file From 9709ba1180a017bdfa59651a926555675bf17ded Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 15 Jul 2022 14:31:18 +0900 Subject: [PATCH 43/77] =?UTF-8?q?feat:=E4=B8=8B=E7=94=B0=E3=81=95=E3=82=93?= =?UTF-8?q?=E3=81=AE=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/main.py | 25 ++++++++++++++----------- s3/data/SAP_fin/settings/Invoice.txt | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index 0ffe224f..8d82789e 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -24,7 +24,7 @@ SETTINGS_ITEM = { 'storageSchemaName': 9, 'loadSchemaName': 10, 'exSqlFileName': 11, - 'replaceCommas': 12, + 'commaReplaceColumns': 12, 'reserved0': 13, 'reserved1': 14, 'reserved2': 15, @@ -92,7 +92,7 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'): settings_list.append(line.rstrip('\n')) - # 予約行挿入のためsetting_listとSETTINGS_ITEMの要素数を揃える + # 設定ファイルに記載のない行を空文字として扱い、予約行とする for _ in range(len(SETTINGS_ITEM) - len(settings_list)): settings_list.append('') @@ -115,7 +115,7 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf warning_info = '' # ワーニング情報 index = 0 # ループインデックス settings_db_columu_list = settings_list[SETTINGS_ITEM["dbColumuName"]].rstrip().split(',') - settings_replace_comma_list = settings_list[SETTINGS_ITEM["replaceCommas"]].rstrip().split(',') + settings_replace_comma_list = settings_list[SETTINGS_ITEM["commaReplaceColumns"]].rstrip().split(',') for line in csv.reader(work_data, quotechar=settings_list[SETTINGS_ITEM["quotechar"]], delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): try: @@ -147,7 +147,9 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf continue # データ項目値の変換処理 - column_value = replace_column_value(line,settings_db_columu_list,settings_replace_comma_list,i) + org_column_value = line[i] + current_settings_db_columu_name = settings_db_columu_list[i] + column_value = convert_column_value(org_column_value,current_settings_db_columu_name,settings_replace_comma_list) sql = f'{sql} "{column_value}",' sql = f'{sql} "{target_file_name}",' # システム項目:取込ファイル名 @@ -291,13 +293,14 @@ def connection_close(conn, bucket_name, target_data_source, target_file_name, lo print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-MAIN-99 - エラー内容:{e}') error(bucket_name, target_data_source, target_file_name, log_info) -def replace_column_value(line,settings_db_columu_list,settings_replace_comma_list,i): - org_column_value = line[i] +def convert_column_value(org_column_value,current_settings_db_columu_name,settings_replace_comma_list): - # 投入データのDB物理カラム名が設定ファイルの数値型のDBカラム物理名に含まれている場合 - if settings_db_columu_list[i] in settings_replace_comma_list: - org_column_value = org_column_value.replace(',', '') + # データ内の「\\」という文字がpythonで読んだ場合に「\\\\」となるため、「\\」に戻す + converted_column_value = org_column_value.replace('\\', '\\\\') + + # 投入データのDB物理カラム名が設定ファイルの数値型のDBカラム物理名に含まれている場合、データ項目値の「,」を取り除く + if current_settings_db_columu_name in settings_replace_comma_list: + converted_column_value = converted_column_value.replace(',', '') - org_column_value = org_column_value.replace('\\', '\\\\') - return org_column_value + return converted_column_value \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 52ed7636..6fcac702 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -10,4 +10,4 @@ billing_type,condition_type,distribution_channel,invoiced_number,invoice_item,in src03b.sapf_invoice org03b.sapf_invoice -vbl_value \ No newline at end of file +quantity_invoiced,extended_amount_invoiced_amount,accrual_value_rebate_1,accrual_percent_rebate_1,accrual_value_rebate_2,accrual_percent_rebate_2,unit_selling_price \ No newline at end of file From 13d55634dbc98f07b30276f45e7b25a8c59af38d Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Tue, 19 Jul 2022 09:33:28 +0900 Subject: [PATCH 44/77] =?UTF-8?q?feat:=E4=B8=8B=E7=94=B0=E3=81=95=E3=82=93?= =?UTF-8?q?=E3=81=AE=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98?= =?UTF-8?q?=E5=86=8D=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/main.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index 8d82789e..94379370 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -148,8 +148,8 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf # データ項目値の変換処理 org_column_value = line[i] - current_settings_db_columu_name = settings_db_columu_list[i] - column_value = convert_column_value(org_column_value,current_settings_db_columu_name,settings_replace_comma_list) + current_settings_db_column_name = settings_db_columu_list[i] + column_value = convert_column_value(org_column_value, current_settings_db_column_name, settings_replace_comma_list) sql = f'{sql} "{column_value}",' sql = f'{sql} "{target_file_name}",' # システム項目:取込ファイル名 @@ -293,13 +293,22 @@ def connection_close(conn, bucket_name, target_data_source, target_file_name, lo print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-MAIN-99 - エラー内容:{e}') error(bucket_name, target_data_source, target_file_name, log_info) -def convert_column_value(org_column_value,current_settings_db_columu_name,settings_replace_comma_list): - +def convert_column_value(org_column_value, current_settings_db_column_name, settings_replace_comma_list): + """データ項目値変換処理 + + Args: + org_column_value : 投入データの値 + current_settings_db_column_name : 投入データのDBカラム物理名 + settings_replace_comma_list : 投入データの数値型のDBカラム物理名のリスト + + Returns: + converted_column_value:変換処理を行った投入データの値 + """ # データ内の「\\」という文字がpythonで読んだ場合に「\\\\」となるため、「\\」に戻す converted_column_value = org_column_value.replace('\\', '\\\\') # 投入データのDB物理カラム名が設定ファイルの数値型のDBカラム物理名に含まれている場合、データ項目値の「,」を取り除く - if current_settings_db_columu_name in settings_replace_comma_list: + if current_settings_db_column_name in settings_replace_comma_list: converted_column_value = converted_column_value.replace(',', '') return converted_column_value From c233b90bd07e12e44a12060002af411547478b74 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Jul 2022 14:15:39 +0900 Subject: [PATCH 45/77] =?UTF-8?q?feat(view-secutiry-option):=20Docker?= =?UTF-8?q?=E3=82=A4=E3=83=A1=E3=83=BC=E3=82=B8=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E6=99=82=E3=81=AB=E3=82=BB=E3=82=AD=E3=83=A5=E3=83=AA=E3=83=86?= =?UTF-8?q?=E3=82=A3=E3=83=91=E3=83=83=E3=83=81=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=83=88=E3=82=92=E5=AE=9F=E8=A1=8C=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-security-option/Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lambda/check-view-security-option/Dockerfile b/lambda/check-view-security-option/Dockerfile index 681c462a..cb6dd9fb 100644 --- a/lambda/check-view-security-option/Dockerfile +++ b/lambda/check-view-security-option/Dockerfile @@ -5,7 +5,12 @@ ENV TZ="Asia/Tokyo" WORKDIR ${WORKDIR} COPY Pipfile Pipfile.lock ${WORKDIR} -RUN pip install pipenv --no-cache-dir && \ +RUN \ + apt update -y && \ + # パッケージのセキュリティアップデートのみを適用するコマンド + apt install -y unattended-upgrades && \ + unattended-upgrades && \ + pip install pipenv --no-cache-dir && \ pipenv install --system --deploy && \ pip uninstall -y pipenv virtualenv-clone virtualenv COPY check-view-option ./ From 1b0e342cc83f38ab7a886e2ffccff9e36cf21e4d Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Jul 2022 15:04:04 +0900 Subject: [PATCH 46/77] =?UTF-8?q?feat:=20=E5=87=A6=E7=90=86=E7=B5=82?= =?UTF-8?q?=E4=BA=86=E6=99=82=E3=81=AB=E3=82=B3=E3=83=8D=E3=82=AF=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E3=82=AF=E3=83=AD=E3=83=BC=E3=82=BA?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/check-view-security-option/check-view-option/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lambda/check-view-security-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py index 252fc262..c75862a0 100644 --- a/lambda/check-view-security-option/check-view-option/main.py +++ b/lambda/check-view-security-option/check-view-option/main.py @@ -185,6 +185,7 @@ def fetch_view_security_options(connection: Database, check_target_schemas: list try: with connection.query(select_view_security_option_sql) as cursor: result = cursor.fetchall() + connection.close() return result except Exception as e: raise QueryExecutionException('E-04-01', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') From 5f472f6bdc922aaf6adcecaa3dbe5854af111df8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 21 Jul 2022 18:47:15 +0900 Subject: [PATCH 47/77] =?UTF-8?q?feat:=20=E3=83=A1=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=99=82=E3=81=ABView=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E6=88=90=E8=80=85=E3=82=92=E6=9C=AC=E6=96=87=E3=81=AB=E6=89=93?= =?UTF-8?q?=E3=81=A1=E5=87=BA=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/main.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lambda/check-view-security-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py index c75862a0..fff880ff 100644 --- a/lambda/check-view-security-option/check-view-option/main.py +++ b/lambda/check-view-security-option/check-view-option/main.py @@ -201,8 +201,14 @@ def make_notice_mail_body(no_security_option_views: list[NoSecurityOptionView], Returns: tuple[str]: メール本文 """ - mail_message = MAIL_INDENT.join( - [f'{option.schema_name}.{option.table_name}' for option in no_security_option_views]) + # メール本文に埋め込むView名と作成ユーザー(DEFINER)をリストに格納 + schema_view_definers = [] + for option in no_security_option_views: + view_fullname = f'{option.schema_name}.{option.table_name}' + schema_view_definers.append(f'{view_fullname} View作成ユーザー:{option.definer}') + + # インデントした上でメール本文に打ち出し + mail_message = MAIL_INDENT.join(schema_view_definers) mail_body = mail_body_template.format(no_option_views=mail_message) return mail_body From 9fc92929163b3470642b63eaf4521dfd410034ca Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 29 Jul 2022 15:39:05 +0900 Subject: [PATCH 48/77] =?UTF-8?q?fix:=E3=82=AB=E3=83=B3=E3=83=9E=E9=99=A4?= =?UTF-8?q?=E5=8E=BB=E3=81=AE=E5=AF=BE=E5=BF=9C=E3=81=AE=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E4=BF=AE=E6=AD=A3=E6=BC=8F?= =?UTF-8?q?=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index ad1b9af7..263008cd 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -23,7 +23,7 @@ SETTINGS_ITEM = { 'storageSchemaName': 9, 'loadSchemaName': 10, 'exSqlFileName': 11, - 'removeCommas': 12, + 'commaReplaceColumns': 12, 'reserved0': 13, 'reserved1': 14, 'reserved2': 15, From fd4ab29fcd8a4e3ecfab97d6817c6f560f607d5d Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Tue, 2 Aug 2022 16:09:09 +0900 Subject: [PATCH 49/77] =?UTF-8?q?feat:feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E5=A4=89=E6=9B=B4=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/IOReport.txt | 6 +++--- s3/data/SAP_fin/settings/WBSReport.txt | 6 +++--- s3/data/SAP_sup/settings/POReport.txt | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index a2ab0774..f2e6fa36 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -4,9 +4,9 @@ utf-8 LF 1 -17 -Fiscal Year,Fiscal Period,Internal Order,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number -fiscal_year,fiscal_period,internal_order,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number +18 +Fiscal Year,Fiscal Period,Internal Order,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number,Rev +fiscal_year,fiscal_period,internal_order,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev src03a.sapf_ioreport org03a.sapf_ioreport diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 2d29d606..f258d9aa 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -4,9 +4,9 @@ utf-8 LF 1 -17 -Fiscal Year,Fiscal Period,WBS element,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number -fiscal_year,fiscal_period,wbs_element,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number +18 +Fiscal Year,Fiscal Period,WBS element,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number,Rev +fiscal_year,fiscal_period,wbs_element,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev src03a.sapf_wbsreport org03a.sapf_wbsreport diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index 5fe24ce6..4cf7f389 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 12 -Purchasing Document,Vendor,Item,Material,Short Text,Document Date,Order Quantity,Order Unit,Net Order Value,Currency,Order Price Unit,Deletion Flag -purchasing_document,vendor,item,material,short_text,document_date,order_quantity,order_unit,net_order_value,currency,order_price_unit,deletion_flag +Purchasing Document,Vendor,Item,Material,Short Text,Document Date,Order Quantity,Order Unit,Net Order Value,Currency,Price Unit,Del Indicator +purchasing_document,vendor,item,material,short_text,document_date,order_quantity,order_unit,net_order_value,currency,price_unit,del_indicator src04.saps_poreport org04.saps_poreport From 7c1852278c9dc35d6479bfac48df88a216bf0994 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 17 Aug 2022 18:01:55 +0900 Subject: [PATCH 50/77] =?UTF-8?q?fix:=20target=E3=83=95=E3=82=A9=E3=83=AB?= =?UTF-8?q?=E3=83=80=E3=81=B8=E5=BE=A9=E5=8F=B7=E5=8C=96=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=82=92=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AB?= =?UTF-8?q?=E3=80=81=E3=83=90=E3=82=B1=E3=83=83=E3=83=88=E5=90=8D=E3=81=8C?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=81=AB=E5=87=BA=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/sap-data-decrypt/datadecrypt/main.py | 23 ++++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lambda/sap-data-decrypt/datadecrypt/main.py b/lambda/sap-data-decrypt/datadecrypt/main.py index 49eb8db0..86eeb63f 100644 --- a/lambda/sap-data-decrypt/datadecrypt/main.py +++ b/lambda/sap-data-decrypt/datadecrypt/main.py @@ -1,12 +1,12 @@ -import logging -import os -import boto3 -import gnupg import datetime import logging +import os from abc import * from zoneinfo import ZoneInfo +import boto3 +import gnupg + # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] SECRET_KEY_FILE_PATH = os.environ["SECRET_KEY_FILE_PATH"] @@ -42,8 +42,12 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() + + def custome_time(*arg): return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() + + formatter = logging.Formatter( '[%(levelname)s]\t%(asctime)s\t%(message)s\n', '%Y-%m-%d %H:%M:%S' @@ -136,7 +140,8 @@ def handler(event, context): 'Key': s3_event.file_path } backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}' - logger.info(f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + logger.info( + f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) backup_file_obj.copy(copy_source) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) @@ -152,7 +157,7 @@ def handler(event, context): } import_file_folder = f'{s3_event.data_source_name}{DIRECTORY_TARGET}' import_file_key = f'{import_file_folder}{decrypt_file_name}' - logger.info(f'I-07-06 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{import_file_folder}') + logger.info(f'I-07-06 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{s3_event.bucket_name}/{import_file_folder}') import_file_obj = s3_resource.Object(s3_event.bucket_name, import_file_key) import_file_obj.copy(copy_source) logger.info(f'I-07-07 復号化ファイルをS3に出力しました') @@ -183,7 +188,8 @@ def create_status_file(s3_event, extension) -> None: result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(s3_event.bucket_name, result_error_key) result_error_obj.put(Body='') - logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') + logger.error( + f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') except Exception as e: logger.exception(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') return @@ -201,7 +207,8 @@ def move_encrypt_file(s3_event) -> None: error_obj = s3_resource.Object(s3_event.bucket_name, error_key) error_obj.copy(copy_source) s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) - logger.error(f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') + logger.error( + f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') except Exception as e: logger.exception(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') return From d9375af9e9ccf37f89127202cc80e270a0aad682 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 26 Aug 2022 09:55:50 +0900 Subject: [PATCH 51/77] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E5=A4=89=E6=9B=B4=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 6 +++--- s3/data/SAP_fin/settings/IOReport.txt | 6 +++--- s3/data/SAP_fin/settings/Invoice.txt | 6 +++--- s3/data/SAP_fin/settings/WBSList.txt | 6 +++--- s3/data/SAP_fin/settings/WBSReport.txt | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index a3b33f26..f991f3a1 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -5,9 +5,9 @@ utf-8 LF 1 18 -VT,Fiscal Year,Fiscal Period,Cost Center,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number,Rev -vt,fiscal_year,fiscal_period,cost_center,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev +Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Name,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed +value_type,fiscal_yr,period,cost_center,cost_elem,name,value_crcy,offsetting_acct,off_acc_nam_name,name,doc_text,posting_date,doc_date,purch_doc,documentno,post_row,refdocno,reversed src03a.sapf_costreport org03a.sapf_costreport -vbl_value \ No newline at end of file +value_crcy \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index f2e6fa36..5ccd3e3a 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -5,9 +5,9 @@ utf-8 LF 1 18 -Fiscal Year,Fiscal Period,Internal Order,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number,Rev -fiscal_year,fiscal_period,internal_order,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev +Fiscal Yr,Period,Order,Cost Elem.,Name,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed +fiscal_yr,period,order,cost_elem,name,value_crcy,offsetting_acct,offsetting_account_name,auxacctastmt_1,name2,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,refdocno,reversed src03a.sapf_ioreport org03a.sapf_ioreport -vbl_value \ No newline at end of file +value_crcy \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 6fcac702..09cf31bf 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -5,9 +5,9 @@ utf-8 LF 1 25 -Billing Type,Condition Type,Distribution channel,Invoiced number,Invoice item,Invoice date,Account number (Sold-to),Customer name,Ship-to,Ship-to(Name),Quantity invoiced,Extended amount (invoiced amount),Accrual value (rebate 1),Accrual % (rebate 1),Accrual value (rebate 2),Accrual % (rebate 2),Unit selling price,Item code,Item name,Tax,Order reason,Reference doc,Sales order No.,Rejected RSN,Batch number -billing_type,condition_type,distribution_channel,invoiced_number,invoice_item,invoice_date,account_number_sold_to,customer_name,ship_to,ship_to_name,quantity_invoiced,extended_amount_invoiced_amount,accrual_value_rebate_1,accrual_percent_rebate_1,accrual_value_rebate_2,accrual_percent_rebate_2,unit_selling_price,item_code,item_name,tax,order_reason,reference_doc,sales_order_no,rejected_rsn,batch_number +Billing Type,ConditionType,Distribution Channel,Invoiced Number,Item Number,Invoice Date,Account Number (Sold To),Customer Name,Ship-To,Ship-to (Name),Quantity Invoiced,Extended amount (Invoice Amount),Accural Value (Rebate 1),Accural % (Rebate 1),Accural Value (Rebate 2),Accural % (Rebate 2),Unit Selling Price,Item Code,Item Name,Tax,Order Reason,Reference doc,Sales Order No.,Rejected RSN,Batch Number +billing_type,conditiontype,distribution_channel,invoiced_number,item_number,invoice_date,account_number_sold_to,customer_name,ship_to,ship_to_name,quantity_invoiced,extended_amount_invoice_amount,accural_value_rebate_1,accural_percent_rebate_1,accural_value_rebate_2,accural_percent_rebate_2,unit_selling_price,item_code,item_name,tax,order_reason,reference_doc,sales_order_no,rejected_rsn,batch_number src03b.sapf_invoice org03b.sapf_invoice -quantity_invoiced,extended_amount_invoiced_amount,accrual_value_rebate_1,accrual_percent_rebate_1,accrual_value_rebate_2,accrual_percent_rebate_2,unit_selling_price \ No newline at end of file +quantity_invoiced,extended_amount_invoice_amount,accural_value_rebate_1,accural_percent_rebate_1,accural_value_rebate_2,accural_percent_rebate_2,unit_selling_price \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index 9247ca7f..ad66730e 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -4,8 +4,8 @@ utf-8 LF 1 -9 -WBS element,Level,Profit center,Project Definition,Description,Control area,Responsibility,Basic finish date,Basic start date -wbs_element,level,profit_center,project_definition,description,control_area,responsibility,basic_finish_date,basic_start_date +10 +WBS Element,Level,Obj.no.,Profit Ctr,Project Definition,Description,COAr,Respons.,Basic start,Basic finish +wbs_element,level,obj_no,profit_ctr,project_definition,description,coar,respons,basic_start,basic_finish src03a.sapf_wbslist org03a.sapf_wbslist \ No newline at end of file diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index f258d9aa..32dc2c86 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,13 +1,13 @@ SAP_fin - +, utf-8 LF 1 18 -Fiscal Year,Fiscal Period,WBS element,Cost element,Cost element name,Vbl.value,Offsetting account,Offsetting account name,AuxAccAs1,Name,Document header text,Posting date,Document date,Purchasing document,Document number,Posting row,Ref doc number,Rev -fiscal_year,fiscal_period,wbs_element,cost_element,cost_element_name,vbl_value,offsetting_account,offsetting_account_name,auxaccas1,name,document_header_text,posting_date,document_date,purchasing_document,document_number,posting_row,ref_doc_number,rev +Fiscal Yr,Period,WBS Element,Cost Elem.,Name,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed +fiscal_yr,period,wbs_element,cost_elem,name,value_crcy,offsetting_acct,off_acc_name,auxacctasmnt_1,name2,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,refdocno,reversed src03a.sapf_wbsreport org03a.sapf_wbsreport -vbl_value \ No newline at end of file +value_crcy \ No newline at end of file From afb47fb1fdd79c2a2078b064eb72fd313a980c92 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 26 Aug 2022 15:16:35 +0900 Subject: [PATCH 52/77] =?UTF-8?q?feat=E3=82=AD=E3=83=A3=E3=83=A1=E3=83=AB?= =?UTF-8?q?=E3=82=B1=E3=83=BC=E3=82=B9=E3=81=AE=E9=A0=85=E7=9B=AE=E3=82=92?= =?UTF-8?q?=E3=82=B9=E3=83=8D=E3=83=BC=E3=82=AF=E3=82=B1=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=8F=9B=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 2 +- s3/data/SAP_fin/settings/IOReport.txt | 2 +- s3/data/SAP_fin/settings/Invoice.txt | 2 +- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index f991f3a1..a84fb456 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -6,7 +6,7 @@ LF 1 18 Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Name,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed -value_type,fiscal_yr,period,cost_center,cost_elem,name,value_crcy,offsetting_acct,off_acc_nam_name,name,doc_text,posting_date,doc_date,purch_doc,documentno,post_row,refdocno,reversed +value_type,fiscal_yr,period,cost_center,cost_elem,name,value_crcyoffsetting_acct,off_acc_nam_name,name,doc_text,posting_datedoc_date,purch_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_costreport org03a.sapf_costreport diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 5ccd3e3a..90cf0958 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -6,7 +6,7 @@ LF 1 18 Fiscal Yr,Period,Order,Cost Elem.,Name,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed -fiscal_yr,period,order,cost_elem,name,value_crcy,offsetting_acct,offsetting_account_name,auxacctastmt_1,name2,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,refdocno,reversed +fiscal_yr,period,order,cost_elem,name,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_ioreport org03a.sapf_ioreport diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 09cf31bf..58e332b6 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -6,7 +6,7 @@ LF 1 25 Billing Type,ConditionType,Distribution Channel,Invoiced Number,Item Number,Invoice Date,Account Number (Sold To),Customer Name,Ship-To,Ship-to (Name),Quantity Invoiced,Extended amount (Invoice Amount),Accural Value (Rebate 1),Accural % (Rebate 1),Accural Value (Rebate 2),Accural % (Rebate 2),Unit Selling Price,Item Code,Item Name,Tax,Order Reason,Reference doc,Sales Order No.,Rejected RSN,Batch Number -billing_type,conditiontype,distribution_channel,invoiced_number,item_number,invoice_date,account_number_sold_to,customer_name,ship_to,ship_to_name,quantity_invoiced,extended_amount_invoice_amount,accural_value_rebate_1,accural_percent_rebate_1,accural_value_rebate_2,accural_percent_rebate_2,unit_selling_price,item_code,item_name,tax,order_reason,reference_doc,sales_order_no,rejected_rsn,batch_number +billing_type,condition_type,distribution_channel,invoiced_number,item_number,invoice_date,account_number_sold_to,customer_name,ship_to,ship_to_name,quantity_invoiced,extended_amount_invoice_amount,accural_value_rebate_1,accural_percent_rebate_1,accural_value_rebate_2,accural_percent_rebate_2,unit_selling_price,item_code,item_name,tax,order_reason,reference_doc,sales_order_no,rejected_rsn,batch_number src03b.sapf_invoice org03b.sapf_invoice diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 32dc2c86..46cafe3d 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -6,7 +6,7 @@ LF 1 18 Fiscal Yr,Period,WBS Element,Cost Elem.,Name,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed -fiscal_yr,period,wbs_element,cost_elem,name,value_crcy,offsetting_acct,off_acc_name,auxacctasmnt_1,name2,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,refdocno,reversed +fiscal_yr,period,wbs_element,cost_elem,name,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_wbsreport org03a.sapf_wbsreport From cdba76680a054c84eb63645ccc328821ada3f704 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 26 Aug 2022 15:40:51 +0900 Subject: [PATCH 53/77] =?UTF-8?q?feat:=E9=A0=85=E7=9B=AE=E5=8C=BA=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=96=87=E5=AD=97=E3=82=92=E3=82=AB=E3=83=B3=E3=83=9E?= =?UTF-8?q?=E2=86=92=E3=82=BF=E3=83=96=E6=96=87=E5=AD=97=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 46cafe3d..480a1398 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,5 +1,5 @@ SAP_fin -, + utf-8 LF From 3612ef3d26f1e7c0c2e1d172c4ba86ee0e8a2949 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 26 Aug 2022 17:21:26 +0900 Subject: [PATCH 54/77] =?UTF-8?q?feat:wbsreport=E9=A0=85=E7=9B=AE=E5=8C=BA?= =?UTF-8?q?=E5=88=87=E3=82=8A=E6=96=87=E5=AD=97=E3=82=BF=E3=83=96=E6=96=87?= =?UTF-8?q?=E5=AD=97=E8=A8=AD=E5=AE=9A=E3=83=9F=E3=82=B9=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 480a1398..657ea836 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,5 +1,5 @@ SAP_fin - + utf-8 LF From bd0da1b16edd8fad864690d45d9047eddab6794c Mon Sep 17 00:00:00 2001 From: "shibata.r" Date: Fri, 26 Aug 2022 17:42:50 +0900 Subject: [PATCH 55/77] =?UTF-8?q?style:=E6=94=B9=E8=A1=8C=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sap-fin-monthly-data-notice-daily.py | 373 +++++++------- .../sap-fin-receive-check-daily.py | 485 +++++++++--------- .../sap-fin-receive-check-monthly.py | 3 +- .../sap-sup-monthly-data-notice-daily.py | 373 +++++++------- .../sap-sup-receive-check-daily.py | 485 +++++++++--------- .../sap-sup-receive-check-monthly.py | 3 +- s3/config/SAP/monthly_check_day_list.config | 2 +- ...ap_fin_daily_receive_file_name_list.config | 2 +- ...nthly_data_notice_mail_body_monthly.config | 2 +- ...thly_data_notice_mail_title_monthly.config | 2 +- ..._fin_monthly_receive_file_name_list.config | 2 +- ...p_fin_receive_check_mail_body_daily.config | 2 +- ...fin_receive_check_mail_body_monthly.config | 2 +- ..._fin_receive_check_mail_title_daily.config | 2 +- ...in_receive_check_mail_title_monthly.config | 2 +- ...ap_sup_daily_receive_file_name_list.config | 2 +- ...nthly_data_notice_mail_body_monthly.config | 2 +- ...thly_data_notice_mail_title_monthly.config | 2 +- ..._sup_monthly_receive_file_name_list.config | 2 +- ...p_sup_receive_check_mail_body_daily.config | 2 +- ...sup_receive_check_mail_body_monthly.config | 2 +- ..._sup_receive_check_mail_title_daily.config | 2 +- ...up_receive_check_mail_title_monthly.config | 2 +- s3/config/non_business_day_list.config | 146 +++--- 24 files changed, 954 insertions(+), 948 deletions(-) diff --git a/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py b/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py index f5b59d26..ffc15e90 100644 --- a/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py +++ b/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py @@ -1,186 +1,187 @@ -import os -import datetime -import boto3 -import io -import re -import csv -import logging -from abc import * -from zoneinfo import ZoneInfo -import traceback - -# 環境変数 -CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] -RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] -NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] -NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] -MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] -NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] -NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] -LOG_LEVEL = os.environ["LOG_LEVEL"] - -# 定数 -INDEX_REGEX = 0 -INDEX_DATA_NAME = 1 - -# メール本文に出力する不足ファイル名一覧のインデント -MAIL_INDENT = '  ' - -# 変数 -s3_client = boto3.client('s3') -s3_resource = boto3.resource('s3') -sns_client = boto3.client('sns') - -# logger設定 -logger = logging.getLogger() -def custome_time(*arg): - return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() -formatter = logging.Formatter( - '[%(levelname)s]\t%(asctime)s\t%(message)s\n', - '%Y-%m-%d %H:%M:%S' -) -formatter.converter = custome_time -for handler in logger.handlers: - handler.setFormatter(formatter) - -level = logging.getLevelName(LOG_LEVEL) -if not isinstance(level, int): - level = logging.INFO -logger.setLevel(level) - - -def lambda_handler(event, context): - try: - # ① 処理開始ログを出力する - logger.info('I-01-01 処理開始 SAP_finデータ月次I/F受領通知処理') - execute_date = datetime.date.today().strftime('%Y/%m/%d') - logger.info(f'I-01-02 処理稼働日:{execute_date}') - mail_msg = '' - - # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - logger.info('I-02-01 イベント情報出力処理') - s3_event = event["Records"][0]["s3"] - event_bucket_name = s3_event["bucket"]["name"] - event_file_path = s3_event["object"]["key"] - event_file_name = os.path.basename(event_file_path) - logger.info(f'I-02-02 バケット名:{event_bucket_name}') - logger.info(f'I-02-03 ファイルパス:{event_file_path}') - - # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む - try: - logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') - receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) - receive_monthly_file_name_response = receive_monthly_file_name_obj.get() - logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') - except Exception as e: - logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-03-01', e) - - # ④ 月次I/Fファイル受領通知処理を行う - logger.info('I-04-01 月次I/Fファイル受領通知処理開始') - logger.info(f'I-04-02 受領したファイル名:{event_file_name}') - logger.info('I-04-03 受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - file_exists = False - receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') - for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): - match_result = re.fullmatch(row[INDEX_REGEX], event_file_name) - if match_result is not None: - file_exists = True - break - if file_exists == True: - logger.info(f'I-04-04 月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') - mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]} {event_file_name}\n' - else: - logger.info('I-04-05 受領したファイルは月次I/Fではありませんでした') - - # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - logger.info('I-05-01 メール送信処理開始') - if len(mail_msg) > 0: - # 1.存在した場合 - logger.info('I-05-02 月次I/Fファイルを受領したため、メール送信処理を開始します') - try: - logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') - mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) - mail_title = mail_title_obj['Body'].read().decode('utf-8') - logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-01', e) - - try: - logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') - mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) - mail_body_response = mail_body_obj['Body'].read().decode('utf-8') - # メール本文内のプレースホルダーを置き換える - mail_body = substitute_mail_body(mail_body_response, mail_msg) - logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-02', e) - - logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') - params = { - 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title.rstrip('\n'), - 'Message': mail_body - } - sns_client.publish(**params) - logger.info('I-05-08 メール送信指示をしました') - else: - # 2.存在しない場合 - logger.info('I-05-09 受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') - - # ⑥ 処理終了ログを出力する - logger.info('I-06-01 処理終了 SAP_finデータ月次I/F受領通知処理') - except CustomException as e: - traceback.print_exc() - error_notice(e.id, e.arg) - except Exception as e: - logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') - traceback.print_exc() - error_notice('E-99', e) - return - - -# 保守要員チーム通知 -def error_notice(error_log_id, exception) -> None: - try: - error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' - params = { - 'TopicArn': NDS_NOTICE_TOPIC, - 'Subject': NDS_NOTICE_TITLE, - 'Message': error_msg - } - sns_client.publish(**params) - logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') - except Exception as e: - logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') - traceback.print_exc() - return - - -def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: - """メール本文のプレースホルダーを置き換えます - - Args: - before_mail_body (str): 置き換え前のメール本文 - mail_msg (str): メール本文のプレースホルダーを置き換える文言 - - Returns: - str: 置き換え後のメール本文 - """ - substitute_dict = { - "notice_file_names": mail_msg - } - mail_body = before_mail_body.format_map(substitute_dict) - return mail_body - -# カスタムExceptionクラス -class CustomException(Exception, metaclass=ABCMeta): - def __init__(self, id, arg): - self.arg = arg - self.id = id - - -class FileReadException(CustomException): - pass +import os +import datetime +import boto3 +import io +import re +import csv +import logging +from abc import * +from zoneinfo import ZoneInfo +import traceback + +# 環境変数 +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] +MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] + +# 定数 +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 + +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') + +# logger設定 +logger = logging.getLogger() +def custome_time(*arg): + return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +formatter.converter = custome_time +for handler in logger.handlers: + handler.setFormatter(formatter) + +level = logging.getLevelName(LOG_LEVEL) +if not isinstance(level, int): + level = logging.INFO +logger.setLevel(level) + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + logger.info('I-01-01 処理開始 SAP_finデータ月次I/F受領通知処理') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + logger.info(f'I-01-02 処理稼働日:{execute_date}') + mail_msg = '' + + # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する + logger.info('I-02-01 イベント情報出力処理') + s3_event = event["Records"][0]["s3"] + event_bucket_name = s3_event["bucket"]["name"] + event_file_path = s3_event["object"]["key"] + event_file_name = os.path.basename(event_file_path) + logger.info(f'I-02-02 バケット名:{event_bucket_name}') + logger.info(f'I-02-03 ファイルパス:{event_file_path}') + + # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む + try: + logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) + receive_monthly_file_name_response = receive_monthly_file_name_obj.get() + logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) + + # ④ 月次I/Fファイル受領通知処理を行う + logger.info('I-04-01 月次I/Fファイル受領通知処理開始') + logger.info(f'I-04-02 受領したファイル名:{event_file_name}') + logger.info('I-04-03 受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + file_exists = False + receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') + for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): + match_result = re.fullmatch(row[INDEX_REGEX], event_file_name) + if match_result is not None: + file_exists = True + break + if file_exists == True: + logger.info(f'I-04-04 月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]} {event_file_name}\n' + else: + logger.info('I-04-05 受領したファイルは月次I/Fではありませんでした') + + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + logger.info('I-05-01 メール送信処理開始') + if len(mail_msg) > 0: + # 1.存在した場合 + logger.info('I-05-02 月次I/Fファイルを受領したため、メール送信処理を開始します') + try: + logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) + mail_title = mail_title_obj['Body'].read().decode('utf-8') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) + + try: + logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) + mail_body_response = mail_body_obj['Body'].read().decode('utf-8') + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) + + logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + mail_title_without_line_break = mail_title.splitlines()[0] + params = { + 'TopicArn': MBJ_SAP_NOTICE_TOPIC, + 'Subject': mail_title_without_line_break, + 'Message': mail_body + } + sns_client.publish(**params) + logger.info('I-05-08 メール送信指示をしました') + else: + # 2.存在しない場合 + logger.info('I-05-09 受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + logger.info('I-06-01 処理終了 SAP_finデータ月次I/F受領通知処理') + except CustomException as e: + traceback.print_exc() + error_notice(e.id, e.arg) + except Exception as e: + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() + error_notice('E-99', e) + return + + +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: + try: + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + except Exception as e: + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() + return + + +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass diff --git a/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py b/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py index 35fc666e..0e3379a6 100644 --- a/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py +++ b/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py @@ -1,242 +1,243 @@ -import os -import datetime -import boto3 -import io -import re -import csv -import logging -from abc import * -from zoneinfo import ZoneInfo -import traceback - -# 環境変数 -CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] -CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] -RECEIVE_DAILY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_DAILY_FILE_NAME_LIST_PATH"] -NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_LIST_PATH"] -NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] -NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] -MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] -NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] -NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] -LOG_LEVEL = os.environ["LOG_LEVEL"] - -# 定数 -ROW_COMMENT_SYMBOL = '#' -INDEX_REGEX = 0 -INDEX_DATA_NAME = 1 -INDEX_ROW_COMMENT_SYMBOL = 0 -INDEX_SPLIT_NUM = 1 -INDEX_LAST = -1 - -# メール本文に出力する不足ファイル名一覧のインデント -MAIL_INDENT = '  ' - -# 変数 -s3_client = boto3.client('s3') -s3_resource = boto3.resource('s3') -sns_client = boto3.client('sns') - -# logger設定 -logger = logging.getLogger() -def custome_time(*arg): - return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() -formatter = logging.Formatter( - '[%(levelname)s]\t%(asctime)s\t%(message)s\n', - '%Y-%m-%d %H:%M:%S' -) -formatter.converter = custome_time -for handler in logger.handlers: - handler.setFormatter(formatter) - -level = logging.getLevelName(LOG_LEVEL) -if not isinstance(level, int): - level = logging.INFO -logger.setLevel(level) - - -def lambda_handler(event, context): - try: - # ① 処理開始ログを出力する - logger.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(日次)') - execute_date = datetime.date.today().strftime('%Y/%m/%d') - logger.info(f'I-01-02 処理稼働日:{execute_date}') - mail_msg = '' - - # ② 営業日チェック処理を行う - logger.info('I-02-01 営業日チェック処理開始') - - # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む - try: - logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') - non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) - non_business_day_response = non_business_day_obj.get() - logger.info('I-02-03 非営業日設定ファイルを読み込みました') - except Exception as e: - logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-02-01', e) - - # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する - try: - logger.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') - none_business_day_list = [] - for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): - if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: - continue - non_date = row.rstrip('\n') - # 日付妥当性判定 - try: - datetime.datetime.strptime(non_date, "%Y/%m/%d") - except Exception as e: - raise e - none_business_day_list.append(non_date) - if execute_date in none_business_day_list: - logger.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') - return - else: - logger.info('I-02-06 本日は営業日のため、チェック処理を実施します') - except Exception as e: - logger.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') - raise NoneBusinessDayException('E-02-02', e) - - # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む - try: - logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') - receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) - receive_daily_file_name_response = receive_daily_file_name_obj.get() - logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') - except Exception as e: - logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-03-01', e) - - # ④ 日次チェック処理を行う - logger.info('I-04-01 日次チェック処理開始') - - # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') - object_prefix = f'{execute_date}/' - object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) - file_list = [] - for obj in object_list: - obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) - file_list.append(obj_key[INDEX_LAST]) - - # 2.日次I/Fファイルチェック処理 - logger.info('I-04-03 日次I/Fファイルチェック処理開始') - logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - match_count = 0 - row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) - for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): - file_exists = False - for file_name in file_list: - match_result = re.fullmatch(row[INDEX_REGEX], file_name) - if match_result is not None: - file_exists = True - break - if file_exists == True: - match_count += 1 - logger.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') - else: - logger.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') - mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' - if row_count == match_count: - logger.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') - - # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - logger.info('I-05-01 メール送信処理開始') - - if len(mail_msg) > 0: - # 1.存在した場合 - logger.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') - - try: - logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') - mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) - mail_title = mail_title_obj['Body'].read().decode('utf-8') - logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-01', e) - - try: - logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') - mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) - mail_body_response = mail_body_obj['Body'].read().decode('utf-8') - # メール本文内のプレースホルダーを置き換える - mail_body = substitute_mail_body(mail_body_response, mail_msg) - logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-02', e) - - logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') - params = { - 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title.rstrip('\n'), - 'Message': mail_body - } - sns_client.publish(**params) - logger.info('I-05-08 メール送信指示をしました') - else: - # 2.存在しない場合 - logger.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') - - # ⑥ 処理終了ログを出力する - logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(日次)') - except CustomException as e: - traceback.print_exc() - error_notice(e.id, e.arg) - except Exception as e: - logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') - traceback.print_exc() - error_notice('E-99', e) - return - - -# 保守要員チーム通知 -def error_notice(error_log_id, exception) -> None: - try: - error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' - params = { - 'TopicArn': NDS_NOTICE_TOPIC, - 'Subject': NDS_NOTICE_TITLE, - 'Message': error_msg - } - sns_client.publish(**params) - logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') - except Exception as e: - logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') - traceback.print_exc() - return - -def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: - """メール本文のプレースホルダーを置き換えます - - Args: - before_mail_body (str): 置き換え前のメール本文 - mail_msg (str): メール本文のプレースホルダーを置き換える文言 - - Returns: - str: 置き換え後のメール本文 - """ - substitute_dict = { - "notice_file_names": mail_msg - } - mail_body = before_mail_body.format_map(substitute_dict) - return mail_body - - -# カスタムExceptionクラス -class CustomException(Exception, metaclass=ABCMeta): - def __init__(self, id, arg): - self.arg = arg - self.id = id - - -class FileReadException(CustomException): - pass - - -class NoneBusinessDayException(CustomException): - pass +import os +import datetime +import boto3 +import io +import re +import csv +import logging +from abc import * +from zoneinfo import ZoneInfo +import traceback + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_DAILY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_DAILY_FILE_NAME_LIST_PATH"] +NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_LIST_PATH"] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] +MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] + +# 定数 +ROW_COMMENT_SYMBOL = '#' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 +INDEX_ROW_COMMENT_SYMBOL = 0 +INDEX_SPLIT_NUM = 1 +INDEX_LAST = -1 + +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') + +# logger設定 +logger = logging.getLogger() +def custome_time(*arg): + return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +formatter.converter = custome_time +for handler in logger.handlers: + handler.setFormatter(formatter) + +level = logging.getLevelName(LOG_LEVEL) +if not isinstance(level, int): + level = logging.INFO +logger.setLevel(level) + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + logger.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(日次)') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + logger.info(f'I-01-02 処理稼働日:{execute_date}') + mail_msg = '' + + # ② 営業日チェック処理を行う + logger.info('I-02-01 営業日チェック処理開始') + + # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む + try: + logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) + non_business_day_response = non_business_day_obj.get() + logger.info('I-02-03 非営業日設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-02-01', e) + + # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する + try: + logger.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') + none_business_day_list = [] + for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): + if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: + continue + non_date = row.rstrip('\n') + # 日付妥当性判定 + try: + datetime.datetime.strptime(non_date, "%Y/%m/%d") + except Exception as e: + raise e + none_business_day_list.append(non_date) + if execute_date in none_business_day_list: + logger.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') + return + else: + logger.info('I-02-06 本日は営業日のため、チェック処理を実施します') + except Exception as e: + logger.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') + raise NoneBusinessDayException('E-02-02', e) + + # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む + try: + logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) + receive_daily_file_name_response = receive_daily_file_name_obj.get() + logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) + + # ④ 日次チェック処理を行う + logger.info('I-04-01 日次チェック処理開始') + + # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する + logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + object_prefix = f'{execute_date}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + file_list = [] + for obj in object_list: + obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) + file_list.append(obj_key[INDEX_LAST]) + + # 2.日次I/Fファイルチェック処理 + logger.info('I-04-03 日次I/Fファイルチェック処理開始') + logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') + match_count = 0 + row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) + for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): + file_exists = False + for file_name in file_list: + match_result = re.fullmatch(row[INDEX_REGEX], file_name) + if match_result is not None: + file_exists = True + break + if file_exists == True: + match_count += 1 + logger.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + logger.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' + if row_count == match_count: + logger.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') + + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + logger.info('I-05-01 メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + logger.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + + try: + logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) + mail_title = mail_title_obj['Body'].read().decode('utf-8') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) + + try: + logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) + mail_body_response = mail_body_obj['Body'].read().decode('utf-8') + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) + + logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + mail_title_without_line_break = mail_title.splitlines()[0] + params = { + 'TopicArn': MBJ_SAP_NOTICE_TOPIC, + 'Subject': mail_title_without_line_break, + 'Message': mail_body + } + sns_client.publish(**params) + logger.info('I-05-08 メール送信指示をしました') + else: + # 2.存在しない場合 + logger.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(日次)') + except CustomException as e: + traceback.print_exc() + error_notice(e.id, e.arg) + except Exception as e: + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() + error_notice('E-99', e) + return + + +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: + try: + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + except Exception as e: + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() + return + +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass + + +class NoneBusinessDayException(CustomException): + pass diff --git a/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py b/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py index 57688ebb..e30858c5 100644 --- a/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py +++ b/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py @@ -173,9 +173,10 @@ def lambda_handler(event, context): raise FileReadException('E-05-02', e) logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + mail_title_without_line_break = mail_title.splitlines()[0] params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title.rstrip('\n'), + 'Subject': mail_title_without_line_break, 'Message': mail_body } sns_client.publish(**params) diff --git a/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py b/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py index a160cf94..d9c9ef24 100644 --- a/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py +++ b/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py @@ -1,186 +1,187 @@ -import os -import datetime -import boto3 -import io -import re -import csv -import logging -from abc import * -from zoneinfo import ZoneInfo -import traceback - -# 環境変数 -CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] -RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] -NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] -NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] -MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] -NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] -NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] -LOG_LEVEL = os.environ["LOG_LEVEL"] - -# 定数 -INDEX_REGEX = 0 -INDEX_DATA_NAME = 1 - -# メール本文に出力する不足ファイル名一覧のインデント -MAIL_INDENT = '  ' - -# 変数 -s3_client = boto3.client('s3') -s3_resource = boto3.resource('s3') -sns_client = boto3.client('sns') - -# logger設定 -logger = logging.getLogger() -def custome_time(*arg): - return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() -formatter = logging.Formatter( - '[%(levelname)s]\t%(asctime)s\t%(message)s\n', - '%Y-%m-%d %H:%M:%S' -) -formatter.converter = custome_time -for handler in logger.handlers: - handler.setFormatter(formatter) - -level = logging.getLevelName(LOG_LEVEL) -if not isinstance(level, int): - level = logging.INFO -logger.setLevel(level) - - -def lambda_handler(event, context): - try: - # ① 処理開始ログを出力する - logger.info('I-01-01 処理開始 SAP_supデータ月次I/F受領通知処理') - execute_date = datetime.date.today().strftime('%Y/%m/%d') - logger.info(f'I-01-02 処理稼働日:{execute_date}') - mail_msg = '' - - # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - logger.info('I-02-01 イベント情報出力処理') - s3_event = event["Records"][0]["s3"] - event_bucket_name = s3_event["bucket"]["name"] - event_file_path = s3_event["object"]["key"] - event_file_name = os.path.basename(event_file_path) - logger.info(f'I-02-02 バケット名:{event_bucket_name}') - logger.info(f'I-02-03 ファイルパス:{event_file_path}') - - # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む - try: - logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') - receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) - receive_monthly_file_name_response = receive_monthly_file_name_obj.get() - logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') - except Exception as e: - logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-03-01', e) - - # ④ 月次I/Fファイル受領通知処理を行う - logger.info('I-04-01 月次I/Fファイル受領通知処理開始') - logger.info(f'I-04-02 受領したファイル名:{event_file_name}') - logger.info('I-04-03 受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - file_exists = False - receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') - for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): - match_result = re.fullmatch(row[INDEX_REGEX], event_file_name) - if match_result is not None: - file_exists = True - break - if file_exists == True: - logger.info(f'I-04-04 月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') - mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]} {event_file_name}\n' - else: - logger.info('I-04-05 受領したファイルは月次I/Fではありませんでした') - - # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - logger.info('I-05-01 メール送信処理開始') - if len(mail_msg) > 0: - # 1.存在した場合 - logger.info('I-05-02 月次I/Fファイルを受領したため、メール送信処理を開始します') - try: - logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') - mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) - mail_title = mail_title_obj['Body'].read().decode('utf-8') - logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-01', e) - - try: - logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') - mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) - mail_body_response = mail_body_obj['Body'].read().decode('utf-8') - # メール本文内のプレースホルダーを置き換える - mail_body = substitute_mail_body(mail_body_response, mail_msg) - logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-02', e) - - logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') - params = { - 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title.rstrip('\n'), - 'Message': mail_body - } - sns_client.publish(**params) - logger.info('I-05-08 メール送信指示をしました') - else: - # 2.存在しない場合 - logger.info('I-05-09 受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') - - # ⑥ 処理終了ログを出力する - logger.info('I-06-01 処理終了 SAP_supデータ月次I/F受領通知処理') - except CustomException as e: - traceback.print_exc() - error_notice(e.id, e.arg) - except Exception as e: - logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') - traceback.print_exc() - error_notice('E-99', e) - return - - -# 保守要員チーム通知 -def error_notice(error_log_id, exception) -> None: - try: - error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' - params = { - 'TopicArn': NDS_NOTICE_TOPIC, - 'Subject': NDS_NOTICE_TITLE, - 'Message': error_msg - } - sns_client.publish(**params) - logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') - except Exception as e: - logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') - traceback.print_exc() - return - - -def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: - """メール本文のプレースホルダーを置き換えます - - Args: - before_mail_body (str): 置き換え前のメール本文 - mail_msg (str): メール本文のプレースホルダーを置き換える文言 - - Returns: - str: 置き換え後のメール本文 - """ - substitute_dict = { - "notice_file_names": mail_msg - } - mail_body = before_mail_body.format_map(substitute_dict) - return mail_body - -# カスタムExceptionクラス -class CustomException(Exception, metaclass=ABCMeta): - def __init__(self, id, arg): - self.arg = arg - self.id = id - - -class FileReadException(CustomException): - pass +import os +import datetime +import boto3 +import io +import re +import csv +import logging +from abc import * +from zoneinfo import ZoneInfo +import traceback + +# 環境変数 +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] +MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] + +# 定数 +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 + +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') + +# logger設定 +logger = logging.getLogger() +def custome_time(*arg): + return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +formatter.converter = custome_time +for handler in logger.handlers: + handler.setFormatter(formatter) + +level = logging.getLevelName(LOG_LEVEL) +if not isinstance(level, int): + level = logging.INFO +logger.setLevel(level) + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + logger.info('I-01-01 処理開始 SAP_supデータ月次I/F受領通知処理') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + logger.info(f'I-01-02 処理稼働日:{execute_date}') + mail_msg = '' + + # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する + logger.info('I-02-01 イベント情報出力処理') + s3_event = event["Records"][0]["s3"] + event_bucket_name = s3_event["bucket"]["name"] + event_file_path = s3_event["object"]["key"] + event_file_name = os.path.basename(event_file_path) + logger.info(f'I-02-02 バケット名:{event_bucket_name}') + logger.info(f'I-02-03 ファイルパス:{event_file_path}') + + # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む + try: + logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) + receive_monthly_file_name_response = receive_monthly_file_name_obj.get() + logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) + + # ④ 月次I/Fファイル受領通知処理を行う + logger.info('I-04-01 月次I/Fファイル受領通知処理開始') + logger.info(f'I-04-02 受領したファイル名:{event_file_name}') + logger.info('I-04-03 受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + file_exists = False + receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') + for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): + match_result = re.fullmatch(row[INDEX_REGEX], event_file_name) + if match_result is not None: + file_exists = True + break + if file_exists == True: + logger.info(f'I-04-04 月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]} {event_file_name}\n' + else: + logger.info('I-04-05 受領したファイルは月次I/Fではありませんでした') + + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + logger.info('I-05-01 メール送信処理開始') + if len(mail_msg) > 0: + # 1.存在した場合 + logger.info('I-05-02 月次I/Fファイルを受領したため、メール送信処理を開始します') + try: + logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) + mail_title = mail_title_obj['Body'].read().decode('utf-8') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) + + try: + logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) + mail_body_response = mail_body_obj['Body'].read().decode('utf-8') + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) + + logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + mail_title_without_line_break = mail_title.splitlines()[0] + params = { + 'TopicArn': MBJ_SAP_NOTICE_TOPIC, + 'Subject': mail_title_without_line_break, + 'Message': mail_body + } + sns_client.publish(**params) + logger.info('I-05-08 メール送信指示をしました') + else: + # 2.存在しない場合 + logger.info('I-05-09 受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + logger.info('I-06-01 処理終了 SAP_supデータ月次I/F受領通知処理') + except CustomException as e: + traceback.print_exc() + error_notice(e.id, e.arg) + except Exception as e: + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() + error_notice('E-99', e) + return + + +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: + try: + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + except Exception as e: + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() + return + + +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass diff --git a/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py b/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py index addb19b3..fc728d68 100644 --- a/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py +++ b/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py @@ -1,242 +1,243 @@ -import os -import datetime -import boto3 -import io -import re -import csv -import logging -from abc import * -from zoneinfo import ZoneInfo -import traceback - -# 環境変数 -CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] -CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] -RECEIVE_DAILY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_DAILY_FILE_NAME_LIST_PATH"] -NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_LIST_PATH"] -NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] -NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] -MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] -NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] -NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] -LOG_LEVEL = os.environ["LOG_LEVEL"] - -# 定数 -ROW_COMMENT_SYMBOL = '#' -INDEX_REGEX = 0 -INDEX_DATA_NAME = 1 -INDEX_ROW_COMMENT_SYMBOL = 0 -INDEX_SPLIT_NUM = 1 -INDEX_LAST = -1 - -# メール本文に出力する不足ファイル名一覧のインデント -MAIL_INDENT = '  ' - -# 変数 -s3_client = boto3.client('s3') -s3_resource = boto3.resource('s3') -sns_client = boto3.client('sns') - -# logger設定 -logger = logging.getLogger() -def custome_time(*arg): - return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() -formatter = logging.Formatter( - '[%(levelname)s]\t%(asctime)s\t%(message)s\n', - '%Y-%m-%d %H:%M:%S' -) -formatter.converter = custome_time -for handler in logger.handlers: - handler.setFormatter(formatter) - -level = logging.getLevelName(LOG_LEVEL) -if not isinstance(level, int): - level = logging.INFO -logger.setLevel(level) - - -def lambda_handler(event, context): - try: - # ① 処理開始ログを出力する - logger.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(日次)') - execute_date = datetime.date.today().strftime('%Y/%m/%d') - logger.info(f'I-01-02 処理稼働日:{execute_date}') - mail_msg = '' - - # ② 営業日チェック処理を行う - logger.info('I-02-01 営業日チェック処理開始') - - # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む - try: - logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') - non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) - non_business_day_response = non_business_day_obj.get() - logger.info('I-02-03 非営業日設定ファイルを読み込みました') - except Exception as e: - logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-02-01', e) - - # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する - try: - logger.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') - none_business_day_list = [] - for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): - if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: - continue - non_date = row.rstrip('\n') - # 日付妥当性判定 - try: - datetime.datetime.strptime(non_date, "%Y/%m/%d") - except Exception as e: - raise e - none_business_day_list.append(non_date) - if execute_date in none_business_day_list: - logger.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') - return - else: - logger.info('I-02-06 本日は営業日のため、チェック処理を実施します') - except Exception as e: - logger.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') - raise NoneBusinessDayException('E-02-02', e) - - # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む - try: - logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') - receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) - receive_daily_file_name_response = receive_daily_file_name_obj.get() - logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') - except Exception as e: - logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-03-01', e) - - # ④ 日次チェック処理を行う - logger.info('I-04-01 日次チェック処理開始') - - # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') - object_prefix = f'{execute_date}/' - object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) - file_list = [] - for obj in object_list: - obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) - file_list.append(obj_key[INDEX_LAST]) - - # 2.日次I/Fファイルチェック処理 - logger.info('I-04-03 日次I/Fファイルチェック処理開始') - logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - match_count = 0 - row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) - for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): - file_exists = False - for file_name in file_list: - match_result = re.fullmatch(row[INDEX_REGEX], file_name) - if match_result is not None: - file_exists = True - break - if file_exists == True: - match_count += 1 - logger.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') - else: - logger.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') - mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' - if row_count == match_count: - logger.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') - - # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - logger.info('I-05-01 メール送信処理開始') - - if len(mail_msg) > 0: - # 1.存在した場合 - logger.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') - - try: - logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') - mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) - mail_title = mail_title_obj['Body'].read().decode('utf-8') - logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-01', e) - - try: - logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') - mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) - mail_body_response = mail_body_obj['Body'].read().decode('utf-8') - # メール本文内のプレースホルダーを置き換える - mail_body = substitute_mail_body(mail_body_response, mail_msg) - logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') - except Exception as e: - logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - raise FileReadException('E-05-02', e) - - logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') - params = { - 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title.rstrip('\n'), - 'Message': mail_body - } - sns_client.publish(**params) - logger.info('I-05-08 メール送信指示をしました') - else: - # 2.存在しない場合 - logger.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') - - # ⑥ 処理終了ログを出力する - logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(日次)') - except CustomException as e: - traceback.print_exc() - error_notice(e.id, e.arg) - except Exception as e: - logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') - traceback.print_exc() - error_notice('E-99', e) - return - - -# 保守要員チーム通知 -def error_notice(error_log_id, exception) -> None: - try: - error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' - params = { - 'TopicArn': NDS_NOTICE_TOPIC, - 'Subject': NDS_NOTICE_TITLE, - 'Message': error_msg - } - sns_client.publish(**params) - logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') - except Exception as e: - logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') - traceback.print_exc() - return - -def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: - """メール本文のプレースホルダーを置き換えます - - Args: - before_mail_body (str): 置き換え前のメール本文 - mail_msg (str): メール本文のプレースホルダーを置き換える文言 - - Returns: - str: 置き換え後のメール本文 - """ - substitute_dict = { - "notice_file_names": mail_msg - } - mail_body = before_mail_body.format_map(substitute_dict) - return mail_body - - -# カスタムExceptionクラス -class CustomException(Exception, metaclass=ABCMeta): - def __init__(self, id, arg): - self.arg = arg - self.id = id - - -class FileReadException(CustomException): - pass - - -class NoneBusinessDayException(CustomException): - pass +import os +import datetime +import boto3 +import io +import re +import csv +import logging +from abc import * +from zoneinfo import ZoneInfo +import traceback + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_DAILY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_DAILY_FILE_NAME_LIST_PATH"] +NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_LIST_PATH"] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] +MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] + +# 定数 +ROW_COMMENT_SYMBOL = '#' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 +INDEX_ROW_COMMENT_SYMBOL = 0 +INDEX_SPLIT_NUM = 1 +INDEX_LAST = -1 + +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') + +# logger設定 +logger = logging.getLogger() +def custome_time(*arg): + return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +formatter.converter = custome_time +for handler in logger.handlers: + handler.setFormatter(formatter) + +level = logging.getLevelName(LOG_LEVEL) +if not isinstance(level, int): + level = logging.INFO +logger.setLevel(level) + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + logger.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(日次)') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + logger.info(f'I-01-02 処理稼働日:{execute_date}') + mail_msg = '' + + # ② 営業日チェック処理を行う + logger.info('I-02-01 営業日チェック処理開始') + + # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む + try: + logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) + non_business_day_response = non_business_day_obj.get() + logger.info('I-02-03 非営業日設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-02-01', e) + + # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する + try: + logger.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') + none_business_day_list = [] + for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): + if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: + continue + non_date = row.rstrip('\n') + # 日付妥当性判定 + try: + datetime.datetime.strptime(non_date, "%Y/%m/%d") + except Exception as e: + raise e + none_business_day_list.append(non_date) + if execute_date in none_business_day_list: + logger.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') + return + else: + logger.info('I-02-06 本日は営業日のため、チェック処理を実施します') + except Exception as e: + logger.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') + raise NoneBusinessDayException('E-02-02', e) + + # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む + try: + logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) + receive_daily_file_name_response = receive_daily_file_name_obj.get() + logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) + + # ④ 日次チェック処理を行う + logger.info('I-04-01 日次チェック処理開始') + + # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する + logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + object_prefix = f'{execute_date}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + file_list = [] + for obj in object_list: + obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) + file_list.append(obj_key[INDEX_LAST]) + + # 2.日次I/Fファイルチェック処理 + logger.info('I-04-03 日次I/Fファイルチェック処理開始') + logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') + match_count = 0 + row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) + for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): + file_exists = False + for file_name in file_list: + match_result = re.fullmatch(row[INDEX_REGEX], file_name) + if match_result is not None: + file_exists = True + break + if file_exists == True: + match_count += 1 + logger.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + logger.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' + if row_count == match_count: + logger.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') + + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + logger.info('I-05-01 メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + logger.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + + try: + logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) + mail_title = mail_title_obj['Body'].read().decode('utf-8') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) + + try: + logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) + mail_body_response = mail_body_obj['Body'].read().decode('utf-8') + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) + + logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + mail_title_without_line_break = mail_title.splitlines()[0] + params = { + 'TopicArn': MBJ_SAP_NOTICE_TOPIC, + 'Subject': mail_title_without_line_break, + 'Message': mail_body + } + sns_client.publish(**params) + logger.info('I-05-08 メール送信指示をしました') + else: + # 2.存在しない場合 + logger.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(日次)') + except CustomException as e: + traceback.print_exc() + error_notice(e.id, e.arg) + except Exception as e: + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() + error_notice('E-99', e) + return + + +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: + try: + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + except Exception as e: + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() + return + +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass + + +class NoneBusinessDayException(CustomException): + pass diff --git a/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py index 7d91326a..5c95d37f 100644 --- a/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py +++ b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py @@ -173,9 +173,10 @@ def lambda_handler(event, context): raise FileReadException('E-05-02', e) logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + mail_title_without_line_break = mail_title()[0] params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title.rstrip('\n'), + 'Subject': mail_title_without_line_break, 'Message': mail_body } sns_client.publish(**params) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index 900bcc9a..64a85001 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -4,4 +4,4 @@ 2022/09/15 2022/10/15 2022/11/15 -2022/12/15 +2022/12/15 \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_daily_receive_file_name_list.config b/s3/config/SAP/sap_fin_daily_receive_file_name_list.config index 10ee861a..50420347 100644 --- a/s3/config/SAP/sap_fin_daily_receive_file_name_list.config +++ b/s3/config/SAP/sap_fin_daily_receive_file_name_list.config @@ -1,4 +1,4 @@ CostReport_[0-9]{8}_[0-9]{6}\.tsv Cost Report IOReport_[0-9]{8}_[0-9]{6}\.tsv Internal Order Report WBSReport_[0-9]{8}_[0-9]{6}\.tsv WBS Report -Invoice_[0-9]{8}_[0-9]{6}\.tsv Invoice Data +Invoice_[0-9]{8}_[0-9]{6}\.tsv Invoice Data \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config index f5ee0569..df1e0143 100644 --- a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config @@ -3,4 +3,4 @@ {notice_file_names}  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config index a9dbb42f..1a3e3487 100644 --- a/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携通知】SAP Finance 月次I/Fファイルを受領しました +【MeDaCa連携通知】SAP Finance 月次I/Fファイルを受領しました \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config b/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config index ecc258fe..9f0aa255 100644 --- a/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config +++ b/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config @@ -1 +1 @@ -WBSList_[0-9]{8}_[0-9]{6}\.tsv WBS List +WBSList_[0-9]{8}_[0-9]{6}\.tsv WBS List \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config index f1b7410f..e4663e9c 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config index 17fd53d7..5c320f72 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config index f45971a0..8bc0207e 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP Finance 日次I/Fファイル未受領 +【MeDaCa連携エラー通知】SAP Finance 日次I/Fファイル未受領 \ No newline at end of file diff --git a/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config index a6ba208a..13566c41 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP Finance 月次I/Fファイル未受領 +【MeDaCa連携エラー通知】SAP Finance 月次I/Fファイル未受領 \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_daily_receive_file_name_list.config b/s3/config/SAP/sap_sup_daily_receive_file_name_list.config index 202d503f..a8711b6c 100644 --- a/s3/config/SAP/sap_sup_daily_receive_file_name_list.config +++ b/s3/config/SAP/sap_sup_daily_receive_file_name_list.config @@ -1 +1 @@ -StockList_[0-9]{8}_[0-9]{6}\.tsv Stock List +StockList_[0-9]{8}_[0-9]{6}\.tsv Stock List \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config index f5ee0569..df1e0143 100644 --- a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config @@ -3,4 +3,4 @@ {notice_file_names}  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config index adafc514..7fab3156 100644 --- a/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携通知】SAP SupplyChain 月次I/Fファイルを受領しました +【MeDaCa連携通知】SAP SupplyChain 月次I/Fファイルを受領しました \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config b/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config index cbc5ee68..854745d4 100644 --- a/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config +++ b/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config @@ -3,4 +3,4 @@ QAReport_[0-9]{8}_[0-9]{6}\.tsv QA release data MLCReport_[0-9]{8}_[0-9]{6}\.tsv MLC transfer data POReport_[0-9]{8}_[0-9]{6}\.tsv Purchase Order data ConfReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Confirmation data -GMReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Goods movement data +GMReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Goods movement data \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config index f1b7410f..e4663e9c 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config index 17fd53d7..5c320f72 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config index 10015ee3..0583b7d9 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP SupplyChain 日次I/Fファイル未受領 +【MeDaCa連携エラー通知】SAP SupplyChain 日次I/Fファイル未受領 \ No newline at end of file diff --git a/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config index a85319bb..dd6bb843 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP SupplyChain 月次I/Fファイル未受領 +【MeDaCa連携エラー通知】SAP SupplyChain 月次I/Fファイル未受領 \ No newline at end of file diff --git a/s3/config/non_business_day_list.config b/s3/config/non_business_day_list.config index b816fa34..577b247a 100644 --- a/s3/config/non_business_day_list.config +++ b/s3/config/non_business_day_list.config @@ -1,73 +1,73 @@ -2022/06/04 -2022/06/05 -2022/06/11 -2022/06/12 -2022/06/18 -2022/06/19 -2022/06/25 -2022/06/26 -2022/07/02 -2022/07/03 -2022/07/09 -2022/07/10 -2022/07/16 -2022/07/17 -2022/07/18 -2022/07/23 -2022/07/24 -2022/07/30 -2022/07/31 -2022/08/06 -2022/08/07 -2022/08/11 -2022/08/12 -2022/08/13 -2022/08/14 -2022/08/15 -2022/08/16 -2022/08/20 -2022/08/21 -2022/08/27 -2022/08/28 -2022/09/03 -2022/09/04 -2022/09/10 -2022/09/11 -2022/09/17 -2022/09/18 -2022/09/19 -2022/09/23 -2022/09/24 -2022/09/25 -2022/10/01 -2022/10/02 -2022/10/08 -2022/10/09 -2022/10/10 -2022/10/15 -2022/10/16 -2022/10/22 -2022/10/23 -2022/10/29 -2022/10/30 -2022/11/03 -2022/11/05 -2022/11/06 -2022/11/12 -2022/11/13 -2022/11/19 -2022/11/20 -2022/11/23 -2022/11/26 -2022/11/27 -2022/12/03 -2022/12/04 -2022/12/10 -2022/12/11 -2022/12/17 -2022/12/18 -2022/12/24 -2022/12/25 -2022/12/29 -2022/12/30 -2022/12/31 +2022/06/04 +2022/06/05 +2022/06/11 +2022/06/12 +2022/06/18 +2022/06/19 +2022/06/25 +2022/06/26 +2022/07/02 +2022/07/03 +2022/07/09 +2022/07/10 +2022/07/16 +2022/07/17 +2022/07/18 +2022/07/23 +2022/07/24 +2022/07/30 +2022/07/31 +2022/08/06 +2022/08/07 +2022/08/11 +2022/08/12 +2022/08/13 +2022/08/14 +2022/08/15 +2022/08/16 +2022/08/20 +2022/08/21 +2022/08/27 +2022/08/28 +2022/09/03 +2022/09/04 +2022/09/10 +2022/09/11 +2022/09/17 +2022/09/18 +2022/09/19 +2022/09/23 +2022/09/24 +2022/09/25 +2022/10/01 +2022/10/02 +2022/10/08 +2022/10/09 +2022/10/10 +2022/10/15 +2022/10/16 +2022/10/22 +2022/10/23 +2022/10/29 +2022/10/30 +2022/11/03 +2022/11/05 +2022/11/06 +2022/11/12 +2022/11/13 +2022/11/19 +2022/11/20 +2022/11/23 +2022/11/26 +2022/11/27 +2022/12/03 +2022/12/04 +2022/12/10 +2022/12/11 +2022/12/17 +2022/12/18 +2022/12/24 +2022/12/25 +2022/12/29 +2022/12/30 +2022/12/31 \ No newline at end of file From 585663c9a431cceb4adeb574714d722f820c8d65 Mon Sep 17 00:00:00 2001 From: "shibata.r" Date: Mon, 29 Aug 2022 13:03:36 +0900 Subject: [PATCH 56/77] =?UTF-8?q?style:=E6=94=B9=E8=A1=8C=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/SAP/monthly_check_day_list.config | 2 +- s3/config/SAP/sap_fin_daily_receive_file_name_list.config | 2 +- .../SAP/sap_fin_monthly_data_notice_mail_body_monthly.config | 2 +- .../SAP/sap_fin_monthly_data_notice_mail_title_monthly.config | 2 +- s3/config/SAP/sap_fin_monthly_receive_file_name_list.config | 2 +- s3/config/SAP/sap_fin_receive_check_mail_body_daily.config | 2 +- s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config | 2 +- s3/config/SAP/sap_fin_receive_check_mail_title_daily.config | 2 +- s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config | 2 +- s3/config/SAP/sap_sup_daily_receive_file_name_list.config | 2 +- .../SAP/sap_sup_monthly_data_notice_mail_body_monthly.config | 2 +- .../SAP/sap_sup_monthly_data_notice_mail_title_monthly.config | 2 +- s3/config/SAP/sap_sup_monthly_receive_file_name_list.config | 2 +- s3/config/SAP/sap_sup_receive_check_mail_body_daily.config | 2 +- s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config | 2 +- s3/config/SAP/sap_sup_receive_check_mail_title_daily.config | 2 +- s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index 64a85001..900bcc9a 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -4,4 +4,4 @@ 2022/09/15 2022/10/15 2022/11/15 -2022/12/15 \ No newline at end of file +2022/12/15 diff --git a/s3/config/SAP/sap_fin_daily_receive_file_name_list.config b/s3/config/SAP/sap_fin_daily_receive_file_name_list.config index 50420347..10ee861a 100644 --- a/s3/config/SAP/sap_fin_daily_receive_file_name_list.config +++ b/s3/config/SAP/sap_fin_daily_receive_file_name_list.config @@ -1,4 +1,4 @@ CostReport_[0-9]{8}_[0-9]{6}\.tsv Cost Report IOReport_[0-9]{8}_[0-9]{6}\.tsv Internal Order Report WBSReport_[0-9]{8}_[0-9]{6}\.tsv WBS Report -Invoice_[0-9]{8}_[0-9]{6}\.tsv Invoice Data \ No newline at end of file +Invoice_[0-9]{8}_[0-9]{6}\.tsv Invoice Data diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config index df1e0143..f5ee0569 100644 --- a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config @@ -3,4 +3,4 @@ {notice_file_names}  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config index 1a3e3487..a9dbb42f 100644 --- a/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携通知】SAP Finance 月次I/Fファイルを受領しました \ No newline at end of file +【MeDaCa連携通知】SAP Finance 月次I/Fファイルを受領しました diff --git a/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config b/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config index 9f0aa255..ecc258fe 100644 --- a/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config +++ b/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config @@ -1 +1 @@ -WBSList_[0-9]{8}_[0-9]{6}\.tsv WBS List \ No newline at end of file +WBSList_[0-9]{8}_[0-9]{6}\.tsv WBS List diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config index e4663e9c..f1b7410f 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config index 5c320f72..17fd53d7 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config index 8bc0207e..f45971a0 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP Finance 日次I/Fファイル未受領 \ No newline at end of file +【MeDaCa連携エラー通知】SAP Finance 日次I/Fファイル未受領 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config index 13566c41..a6ba208a 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP Finance 月次I/Fファイル未受領 \ No newline at end of file +【MeDaCa連携エラー通知】SAP Finance 月次I/Fファイル未受領 diff --git a/s3/config/SAP/sap_sup_daily_receive_file_name_list.config b/s3/config/SAP/sap_sup_daily_receive_file_name_list.config index a8711b6c..202d503f 100644 --- a/s3/config/SAP/sap_sup_daily_receive_file_name_list.config +++ b/s3/config/SAP/sap_sup_daily_receive_file_name_list.config @@ -1 +1 @@ -StockList_[0-9]{8}_[0-9]{6}\.tsv Stock List \ No newline at end of file +StockList_[0-9]{8}_[0-9]{6}\.tsv Stock List diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config index df1e0143..f5ee0569 100644 --- a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config @@ -3,4 +3,4 @@ {notice_file_names}  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config index 7fab3156..adafc514 100644 --- a/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携通知】SAP SupplyChain 月次I/Fファイルを受領しました \ No newline at end of file +【MeDaCa連携通知】SAP SupplyChain 月次I/Fファイルを受領しました diff --git a/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config b/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config index 854745d4..cbc5ee68 100644 --- a/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config +++ b/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config @@ -3,4 +3,4 @@ QAReport_[0-9]{8}_[0-9]{6}\.tsv QA release data MLCReport_[0-9]{8}_[0-9]{6}\.tsv MLC transfer data POReport_[0-9]{8}_[0-9]{6}\.tsv Purchase Order data ConfReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Confirmation data -GMReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Goods movement data \ No newline at end of file +GMReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Goods movement data diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config index e4663e9c..f1b7410f 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config index 5c320f72..17fd53d7 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config @@ -5,4 +5,4 @@  SAPシステム側のSFTP送信状況のご確認をお願いいたします。  尚、本メールはシステム自動送信のため、返信は出来ません。 - 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 \ No newline at end of file + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config index 0583b7d9..10015ee3 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP SupplyChain 日次I/Fファイル未受領 \ No newline at end of file +【MeDaCa連携エラー通知】SAP SupplyChain 日次I/Fファイル未受領 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config index dd6bb843..a85319bb 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config @@ -1 +1 @@ -【MeDaCa連携エラー通知】SAP SupplyChain 月次I/Fファイル未受領 \ No newline at end of file +【MeDaCa連携エラー通知】SAP SupplyChain 月次I/Fファイル未受領 From 109659756aea3bcfd9cbf3a965a4698511b7c52e Mon Sep 17 00:00:00 2001 From: "shibata.r" Date: Mon, 29 Aug 2022 14:42:59 +0900 Subject: [PATCH 57/77] =?UTF-8?q?style:=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sap-sup-receive-check-monthly.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py index 5c95d37f..07f391d6 100644 --- a/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py +++ b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py @@ -173,7 +173,7 @@ def lambda_handler(event, context): raise FileReadException('E-05-02', e) logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') - mail_title_without_line_break = mail_title()[0] + mail_title_without_line_break = mail_title.splitlines()[0] params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, 'Subject': mail_title_without_line_break, From 9c9fe7da37084468455aecb20c72e471d3acad71 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Wed, 31 Aug 2022 14:35:29 +0900 Subject: [PATCH 58/77] =?UTF-8?q?feat:2022=E5=B9=B48=E6=9C=8829=E6=97=A5?= =?UTF-8?q?=E6=96=87=E3=81=AESAP=E3=83=87=E3=83=BC=E3=82=BF=E5=AE=9A?= =?UTF-8?q?=E7=BE=A9=E5=A4=89=E6=9B=B4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 4 ++-- s3/data/SAP_fin/settings/IOReport.txt | 4 ++-- s3/data/SAP_fin/settings/WBSReport.txt | 4 ++-- s3/data/SAP_sup/settings/ConfReport.txt | 4 ++-- s3/data/SAP_sup/settings/GMReport.txt | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index a84fb456..980edf7b 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Name,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed -value_type,fiscal_yr,period,cost_center,cost_elem,name,value_crcyoffsetting_acct,off_acc_nam_name,name,doc_text,posting_datedoc_date,purch_doc,document_no,post_row,ref_doc_no,reversed +Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed +value_type,fiscal_yr,period,cost_center,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_nam_name,name,doc_text,posting_datedoc_date,purch_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_costreport org03a.sapf_costreport diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 90cf0958..5eb072df 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Fiscal Yr,Period,Order,Cost Elem.,Name,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed -fiscal_yr,period,order,cost_elem,name,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed +Fiscal Yr,Period,Order,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed +fiscal_yr,period,order,cost_elem,cost_elem_text,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_ioreport org03a.sapf_ioreport diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 657ea836..86b3d027 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Fiscal Yr,Period,WBS Element,Cost Elem.,Name,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed -fiscal_yr,period,wbs_element,cost_elem,name,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed +Fiscal Yr,Period,WBS Element,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed +fiscal_yr,period,wbs_element,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_wbsreport org03a.sapf_wbsreport diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 7c7ecefe..00e20927 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 11 -Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,cofirm.counter,cancelled. conf -process_order,operation_activity,yield,uom,posting_date,finish_execution_date,material,material_description,confirmation,cofirm_counter,cancelled_conf +Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,Conf. Counter,Cancelled Conf. +process_order,operation_activity,yield,uom,posting_date,finish_execution_date,material,material_description,confirmation,conf_counter,cancelled_conf src04.saps_confreport org04.saps_confreport diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index c254e937..31e6251e 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 12 -Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty -process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty +Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty,Base Unit of Measure +process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty,base_unit_of_measure src04.saps_gmreport org04.saps_gmreport From 7b1816723a255ea56e4647dc22ce839780964a32 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 1 Sep 2022 09:50:28 +0900 Subject: [PATCH 59/77] =?UTF-8?q?feat:2022/08/31=E3=80=81WBSReport?= =?UTF-8?q?=E9=A0=85=E7=9B=AE=E5=90=8D=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 2 +- s3/data/SAP_fin/settings/IOReport.txt | 2 +- s3/data/SAP_fin/settings/WBSReport.txt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index 980edf7b..0e4de2a5 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -6,7 +6,7 @@ LF 1 18 Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed -value_type,fiscal_yr,period,cost_center,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_nam_name,name,doc_text,posting_datedoc_date,purch_doc,document_no,post_row,ref_doc_no,reversed +value_type,fiscal_yr,period,cost_center,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_nam_name,name,doc_text,posting_date,doc_date,purch_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_costreport org03a.sapf_costreport diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 5eb072df..f55e6de6 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -6,7 +6,7 @@ LF 1 18 Fiscal Yr,Period,Order,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed -fiscal_yr,period,order,cost_elem,cost_elem_text,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed +fiscal_yr,period,`order`,cost_elem,cost_elem_text,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_ioreport org03a.sapf_ioreport diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 86b3d027..1d622c2e 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Fiscal Yr,Period,WBS Element,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed -fiscal_yr,period,wbs_element,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed +Fiscal Yr,Period,WBS Element,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Doc.Text,Posting Date,Doc.Date,Purchasing Doc.,DocumentNo,Post.Row,RefDocNo,Reversed +fiscal_yr,period,wbs_element,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,doc_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_wbsreport org03a.sapf_wbsreport From 2d6582265eea6d20659ca1f2aa4265b107e60d48 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Tue, 13 Sep 2022 15:24:01 +0900 Subject: [PATCH 60/77] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E5=A4=89=E6=9B=B4=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?DDL=E3=81=AE=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C(2022/9/12?= =?UTF-8?q?=E6=97=A5=E5=88=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 4 ++-- s3/data/SAP_fin/settings/IOReport.txt | 4 ++-- s3/data/SAP_fin/settings/WBSReport.txt | 4 ++-- s3/data/SAP_sup/settings/ConfReport.txt | 4 ++-- s3/data/SAP_sup/settings/GMReport.txt | 6 +++--- s3/data/SAP_sup/settings/GRReport.txt | 4 ++-- s3/data/SAP_sup/settings/MLCReport.txt | 4 ++-- s3/data/SAP_sup/settings/QAReport.txt | 4 ++-- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index a84fb456..82e3a04b 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Name,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed -value_type,fiscal_yr,period,cost_center,cost_elem,name,value_crcyoffsetting_acct,off_acc_nam_name,name,doc_text,posting_datedoc_date,purch_doc,document_no,post_row,ref_doc_no,reversed +Value Type,Fiscal Yr,Period,Cost Center,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct.,Off.acc.nam,Name,Doc.Text,Posting Date,Doc.Date,Purch.Doc,DocumentNo,Post.row,RefDocNo,Reversed +value_type,fiscal_yr,period,cost_center,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_nam_name,name,doc_text,posting_date,doc_date,purch_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_costreport org03a.sapf_costreport diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index 90cf0958..fb3dbda9 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Fiscal Yr,Period,Order,Cost Elem.,Name,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed -fiscal_yr,period,order,cost_elem,name,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed +Fiscal Yr,Period,OrderNo.,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Offsetting Account Name,AuxAcctAstmt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo.,Reversed +fiscal_yr,period,order_no,cost_elem,cost_elem_text,value_crcy,offsetting_acct,offsetting_account_name,aux_acct_astmt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_ioreport org03a.sapf_ioreport diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 657ea836..d315d01c 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 18 -Fiscal Yr,Period,WBS Element,Cost Elem.,Name,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Document Header Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed -fiscal_yr,period,wbs_element,cost_elem,name,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,document_header_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed +Fiscal Yr,Period,WBS Element,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Doc.Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed +fiscal_yr,period,wbs_element,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,doc_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_wbsreport org03a.sapf_wbsreport diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 7c7ecefe..8f61f3bd 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 11 -Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,cofirm.counter,cancelled. conf -process_order,operation_activity,yield,uom,posting_date,finish_execution_date,material,material_description,confirmation,cofirm_counter,cancelled_conf +Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,Conf. Counter,Cancelled Conf. +process_order,operation_activity,yield,uo_m,posting_date,finish_execution_date,material,material_description,confirmation,conf_counter,cancelled_conf src04.saps_confreport org04.saps_confreport diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index c254e937..920ee02c 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -4,9 +4,9 @@ utf-8 LF 1 -12 -Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty -process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty +13 +Process Order,Material document,Material document item,Material,Material description,Goods movement,Posting date,Movement type,D/C indicator,Storage location,Batch,Qty,Base Unit of Measure +process_order,material_document,material_document_item,material,material_description,goods_movement,posting_date,movement_type,d_c_indicator,storage_location,batch,qty,base_unit_of_measure src04.saps_gmreport org04.saps_gmreport diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index aecae348..5106ee26 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 24 -Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text -plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +Plant,Material,Material Description,Batch,Posting Date,Qty in Unit of Entry,Movement Type,Unit of Entry,Entry on,Material Document Year,Document Date,Total valuated stock,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text +plant,material,material_description,batch,posting_date,qty_in_unit_of_entry,movement_type,unit_of_entry,entry_on,material_document_year,document_date,total_valuated_stock,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_grreport org04.saps_grreport diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index db3af777..37cfc6d6 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 24 -Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text -plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +Plant,Material,Material Description,Batch,Posting Date,Qty in Unit of Entry,Movement Type,Unit of Entry,Entry on,Material Document Year,Document Date,Total valuated stock,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text +plant,material,material_description,batch,posting_date,qty_in_unit_of_entry,movement_type,unit_of_entry,entry_on,material_document_year,document_date,total_valuated_stock,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_mlcreport org04.saps_mlcreport diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index fca0ca72..dbb8c3dc 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 24 -Plant,Material,Material Description,Batch,Posting Date,Qty in Un. of Entry,Movement Type,Unit of Entry,Entry Date,Material Doc. Year,Document Date,Total valuated stock before the posting,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text -plant,material,material_description,batch,posting_date,qty_in_un_of_entry,movement_type,unit_of_entry,entry_date,material_doc_year,document_date,total_valuated_stock_before_the_posting,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text +Plant,Material,Material Description,Batch,Posting Date,Qty in Unit of Entry,Movement Type,Unit of Entry,Entry on,Material Document Year,Document Date,Total valuated stock,Base Unit of Measure,Quantity,Reference,Purchase Order,Customer,Amount,Amount in LC,Vendor,Item,Material Document,Storage Location,Movement Type Text +plant,material,material_description,batch,posting_date,qty_in_unit_of_entry,movement_type,unit_of_entry,entry_on,material_document_year,document_date,total_valuated_stock,base_unit_of_measure,quantity,reference,purchase_order,customer,amount,amount_in_lc,vendor,item,material_document,storage_location,movement_type_text src04.saps_qareport org04.saps_qareport From 98a28415a1c3fc1c8e640f70cc58f659ba4c31fb Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Wed, 14 Sep 2022 18:25:19 +0900 Subject: [PATCH 61/77] =?UTF-8?q?feat:=E5=AE=9A=E7=BE=A9=E6=9B=B8=E3=81=A8?= =?UTF-8?q?=E3=82=B5=E3=83=B3=E3=83=97=E3=83=AB=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=A7=E9=A0=85=E7=9B=AE=E5=90=8D=E3=81=8C=E7=95=B0?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=80=81=E9=A0=85=E7=9B=AE=E5=90=8D=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- s3/data/SAP_sup/settings/ConfReport.txt | 2 +- s3/data/SAP_sup/settings/POReport.txt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index d315d01c..1d622c2e 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -5,7 +5,7 @@ utf-8 LF 1 18 -Fiscal Yr,Period,WBS Element,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Doc.Text,Posting Date,Doc.Date,Purchasing Doc.,Document No,Post.Row,RefDocNo,Reversed +Fiscal Yr,Period,WBS Element,Cost Elem.,Cost Elem.text,Value.Crcy,Offsetting acct,Off.acc.name,AuxAcctAsmnt_1,Name,Doc.Text,Posting Date,Doc.Date,Purchasing Doc.,DocumentNo,Post.Row,RefDocNo,Reversed fiscal_yr,period,wbs_element,cost_elem,cost_elem_text,value_crcy,offsetting_acct,off_acc_name,aux_acct_asmnt_1,name,doc_text,posting_date,doc_date,purchasing_doc,document_no,post_row,ref_doc_no,reversed src03a.sapf_wbsreport org03a.sapf_wbsreport diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 8f61f3bd..706e64d7 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -5,7 +5,7 @@ utf-8 LF 1 11 -Process Order,Operation / activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,Conf. Counter,Cancelled Conf. +Process Order,Operation / Activity,Yield,UoM,Posting date,Finish execution date,Material,Material description,Confirmation,Conf. Counter,Cancelled Conf. process_order,operation_activity,yield,uo_m,posting_date,finish_execution_date,material,material_description,confirmation,conf_counter,cancelled_conf src04.saps_confreport org04.saps_confreport diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index 4cf7f389..27dfbc37 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -5,8 +5,8 @@ utf-8 LF 1 12 -Purchasing Document,Vendor,Item,Material,Short Text,Document Date,Order Quantity,Order Unit,Net Order Value,Currency,Price Unit,Del Indicator -purchasing_document,vendor,item,material,short_text,document_date,order_quantity,order_unit,net_order_value,currency,price_unit,del_indicator +Purchase Doc,Vendor,Item,Material,Short Text,Document Date,Order Quantity,Order Unit,Net Order Value,Currency,Price Unit,Del Indicator +purchase_doc,vendor,item,material,short_text,document_date,order_quantity,order_unit,net_order_value,currency,price_unit,del_indicator src04.saps_poreport org04.saps_poreport From 27b1ea304c06554fdc426d24851a6b89e60206f8 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Wed, 14 Sep 2022 18:27:02 +0900 Subject: [PATCH 62/77] =?UTF-8?q?feat2022/09/12SAP=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E5=AE=9A=E7=BE=A9=E3=81=AE=E5=A4=89=E6=9B=B4=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_sup/settings/GRReport.txt | 2 +- s3/data/SAP_sup/settings/MLCReport.txt | 2 +- s3/data/SAP_sup/settings/QAReport.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index 5106ee26..3ddaec9d 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -10,4 +10,4 @@ plant,material,material_description,batch,posting_date,qty_in_unit_of_entry,move src04.saps_grreport org04.saps_grreport -qty_in_un_of_entry,total_valuated_stock_before_the_posting,quantity,amount \ No newline at end of file +qty_in_unit_of_entry,total_valuated_stock,quantity,amount \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index 37cfc6d6..26953eac 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -10,4 +10,4 @@ plant,material,material_description,batch,posting_date,qty_in_unit_of_entry,move src04.saps_mlcreport org04.saps_mlcreport -qty_in_un_of_entry,total_valuated_stock_before_the_posting,quantity,amount \ No newline at end of file +qty_in_unit_of_entry,total_valuated_stock,quantity,amount \ No newline at end of file diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index dbb8c3dc..e9beb8ff 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -10,4 +10,4 @@ plant,material,material_description,batch,posting_date,qty_in_unit_of_entry,move src04.saps_qareport org04.saps_qareport -qty_in_un_of_entry,total_valuated_stock_before_the_posting,quantity,amount \ No newline at end of file +qty_in_unit_of_entry,total_valuated_stock,quantity,amount \ No newline at end of file From eb56901e949219ed63e291876ec9f8d7a8c193fd Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Wed, 14 Sep 2022 18:29:17 +0900 Subject: [PATCH 63/77] =?UTF-8?q?feat:2022/8/18=E3=81=AESAP=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E5=AE=9A=E7=BE=A9=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E6=99=82=E3=81=AE=E4=BF=AE=E6=AD=A3=E6=BC=8F?= =?UTF-8?q?=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/Invoice.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 58e332b6..582e8df1 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -10,4 +10,4 @@ billing_type,condition_type,distribution_channel,invoiced_number,item_number,inv src03b.sapf_invoice org03b.sapf_invoice -quantity_invoiced,extended_amount_invoice_amount,accural_value_rebate_1,accural_percent_rebate_1,accural_value_rebate_2,accural_percent_rebate_2,unit_selling_price \ No newline at end of file +quantity_invoiced,extended_amount_invoice_amount,accural_value_rebate_1,accural_percent_rebate_1,accural_value_rebate_2,accural_percent_rebate_2,unit_selling_price,tax \ No newline at end of file From 4431ca3e4224ba3673b926d96ade41e9ba95d054 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 15 Sep 2022 14:47:12 +0900 Subject: [PATCH 64/77] =?UTF-8?q?feat:setting=5Fdb=5Fcolumn=5Flist?= =?UTF-8?q?=E3=81=A8line=E3=81=A7=E4=BD=BF=E3=82=8F=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=82=8B=E5=A4=89=E6=95=B0=E3=80=8Ci=E3=80=8D?= =?UTF-8?q?=E3=81=AE=E9=87=8D=E8=A4=87=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index 94379370..221a7132 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -129,8 +129,8 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf # SQL文生成 sql = f'INSERT INTO {settings_list[SETTINGS_ITEM["loadSchemaName"]]} (' - for i in range(len(settings_db_columu_list)): - sql = f'{sql} {settings_db_columu_list[i]},' + for db_column in settings_db_columu_list: + sql = f'{sql} {db_column},' sql = f'{sql} file_name,' # システム項目:取込ファイル名 sql = f'{sql} file_row_cnt,' # システム項目:取込ファイル行番号 sql = f'{sql} delete_flg,' # システム項目:論理削除フラグ From e0a1f7365bf803f5283cd3b2afd6722717e9e0ef Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 15 Sep 2022 14:48:15 +0900 Subject: [PATCH 65/77] =?UTF-8?q?fix:=E3=82=BC=E3=83=AD=E3=83=90=E3=82=A4?= =?UTF-8?q?=E3=83=88=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=AE=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E6=96=B9=E6=B3=95=E3=81=AE=E4=B8=8D=E5=82=99=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index 263008cd..52e1cb4a 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -84,6 +84,9 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) work_header_list = [] for line in csv.reader(work_data, quotechar=settings_list[SETTINGS_ITEM["quotechar"]], delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): + if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True: + continue + work_header_list = line break From 6c2524fbe0d6a91922924a0b665270074c44e73a Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 15 Sep 2022 17:46:33 +0900 Subject: [PATCH 66/77] =?UTF-8?q?fix:=E5=9B=B2=E3=81=84=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=81=AE=E8=A8=AD=E5=AE=9A=E5=80=A4=E3=81=8C=E7=A9=BA=E6=96=87?= =?UTF-8?q?=E5=AD=97=E3=81=BE=E3=81=9F=E3=81=AF=E5=8D=8A=E8=A7=92=E3=82=B9?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B9=E3=81=AE=E5=A0=B4=E5=90=88=E3=80=8C?= =?UTF-8?q?None=E3=80=8D=E3=81=AB=E5=A4=89=E6=8F=9B=E3=81=99=E3=82=8B?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 9 +++++---- ecs/dataimport/dataimport/common.py | 16 ++++++++++++++++ ecs/dataimport/dataimport/main.py | 3 ++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index 52e1cb4a..d3d8801c 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -6,6 +6,7 @@ import sys from end import end from error import error from common import debug_log +from common import convert_quotechar # 定数 DIRECTORY_WORK = '/work/' @@ -82,12 +83,12 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i work_obj = s3_resource.Object(bucket_name, work_key) work_response = work_obj.get() work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) - work_header_list = [] - for line in csv.reader(work_data, quotechar=settings_list[SETTINGS_ITEM["quotechar"]], delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): - if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True: + work_header_list = [] + for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])): + if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True and i == 0: + work_header_list = line continue - work_header_list = line break # ② C-0のデータ件数チェックを開始する diff --git a/ecs/dataimport/dataimport/common.py b/ecs/dataimport/dataimport/common.py index 8b8eeed6..946defe4 100644 --- a/ecs/dataimport/dataimport/common.py +++ b/ecs/dataimport/dataimport/common.py @@ -1,5 +1,6 @@ from datetime import datetime + # 定数 LOG_LEVEL = {"d": 'Debug'} MODE_TYPE = { @@ -11,3 +12,18 @@ MODE_TYPE = { def debug_log(log, log_info, mode): if MODE_TYPE['d'] == mode: print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["d"]} {log}') + +def convert_quotechar(quotechar): + """csvモジュールの囲い文字を変換する + + Args: + quotechar : 項目囲い文字の設定値 + + Returns: + 空文字、空白文字の場合→None + それ以外→設定値をそのまま帰す + """ + if (quotechar.strip(' ') == ''): + return None + + return quotechar diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index 221a7132..c0894209 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -7,6 +7,7 @@ import io import csv from error import error from common import debug_log +from common import convert_quotechar # 定数 DIRECTORY_WORK = '/work/' @@ -117,7 +118,7 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf settings_db_columu_list = settings_list[SETTINGS_ITEM["dbColumuName"]].rstrip().split(',') settings_replace_comma_list = settings_list[SETTINGS_ITEM["commaReplaceColumns"]].rstrip().split(',') - for line in csv.reader(work_data, quotechar=settings_list[SETTINGS_ITEM["quotechar"]], delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): + for line in csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): try: if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True and index == 0: index += 1 From 23727bdf45a4713e8030a5eb5fad15c41549efbf Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Thu, 15 Sep 2022 17:52:41 +0900 Subject: [PATCH 67/77] =?UTF-8?q?fix:=E3=83=87=E3=83=BC=E3=82=BF=E5=8F=96?= =?UTF-8?q?=E8=BE=BC=E3=81=AE=E5=9B=B2=E3=81=84=E6=96=87=E5=AD=97=E3=81=AE?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E5=80=A4=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=81=AB=E3=82=88=E3=82=8B=E3=80=81=E8=A8=AD=E5=AE=9A=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/SAP_fin/settings/CostReport.txt | 2 +- s3/data/SAP_fin/settings/IOReport.txt | 2 +- s3/data/SAP_fin/settings/Invoice.txt | 2 +- s3/data/SAP_fin/settings/WBSList.txt | 2 +- s3/data/SAP_fin/settings/WBSReport.txt | 2 +- s3/data/SAP_sup/settings/ConfReport.txt | 2 +- s3/data/SAP_sup/settings/GMReport.txt | 2 +- s3/data/SAP_sup/settings/GRReport.txt | 2 +- s3/data/SAP_sup/settings/MLCReport.txt | 2 +- s3/data/SAP_sup/settings/POReport.txt | 2 +- s3/data/SAP_sup/settings/QAReport.txt | 2 +- s3/data/SAP_sup/settings/StockList.txt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/s3/data/SAP_fin/settings/CostReport.txt b/s3/data/SAP_fin/settings/CostReport.txt index 82e3a04b..be3dcc5e 100644 --- a/s3/data/SAP_fin/settings/CostReport.txt +++ b/s3/data/SAP_fin/settings/CostReport.txt @@ -1,7 +1,7 @@ SAP_fin utf-8 - + LF 1 18 diff --git a/s3/data/SAP_fin/settings/IOReport.txt b/s3/data/SAP_fin/settings/IOReport.txt index fb3dbda9..f7023c20 100644 --- a/s3/data/SAP_fin/settings/IOReport.txt +++ b/s3/data/SAP_fin/settings/IOReport.txt @@ -1,7 +1,7 @@ SAP_fin utf-8 - + LF 1 18 diff --git a/s3/data/SAP_fin/settings/Invoice.txt b/s3/data/SAP_fin/settings/Invoice.txt index 582e8df1..da1bb360 100644 --- a/s3/data/SAP_fin/settings/Invoice.txt +++ b/s3/data/SAP_fin/settings/Invoice.txt @@ -1,7 +1,7 @@ SAP_fin utf-8 - + LF 1 25 diff --git a/s3/data/SAP_fin/settings/WBSList.txt b/s3/data/SAP_fin/settings/WBSList.txt index ad66730e..1729a641 100644 --- a/s3/data/SAP_fin/settings/WBSList.txt +++ b/s3/data/SAP_fin/settings/WBSList.txt @@ -1,7 +1,7 @@ SAP_fin utf-8 - + LF 1 10 diff --git a/s3/data/SAP_fin/settings/WBSReport.txt b/s3/data/SAP_fin/settings/WBSReport.txt index 1d622c2e..1a899d2d 100644 --- a/s3/data/SAP_fin/settings/WBSReport.txt +++ b/s3/data/SAP_fin/settings/WBSReport.txt @@ -1,7 +1,7 @@ SAP_fin utf-8 - + LF 1 18 diff --git a/s3/data/SAP_sup/settings/ConfReport.txt b/s3/data/SAP_sup/settings/ConfReport.txt index 706e64d7..cd11e609 100644 --- a/s3/data/SAP_sup/settings/ConfReport.txt +++ b/s3/data/SAP_sup/settings/ConfReport.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 11 diff --git a/s3/data/SAP_sup/settings/GMReport.txt b/s3/data/SAP_sup/settings/GMReport.txt index 920ee02c..a9b15d1e 100644 --- a/s3/data/SAP_sup/settings/GMReport.txt +++ b/s3/data/SAP_sup/settings/GMReport.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 13 diff --git a/s3/data/SAP_sup/settings/GRReport.txt b/s3/data/SAP_sup/settings/GRReport.txt index 3ddaec9d..d43f139e 100644 --- a/s3/data/SAP_sup/settings/GRReport.txt +++ b/s3/data/SAP_sup/settings/GRReport.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 24 diff --git a/s3/data/SAP_sup/settings/MLCReport.txt b/s3/data/SAP_sup/settings/MLCReport.txt index 26953eac..bd2cbfd7 100644 --- a/s3/data/SAP_sup/settings/MLCReport.txt +++ b/s3/data/SAP_sup/settings/MLCReport.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 24 diff --git a/s3/data/SAP_sup/settings/POReport.txt b/s3/data/SAP_sup/settings/POReport.txt index 27dfbc37..ba46619b 100644 --- a/s3/data/SAP_sup/settings/POReport.txt +++ b/s3/data/SAP_sup/settings/POReport.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 12 diff --git a/s3/data/SAP_sup/settings/QAReport.txt b/s3/data/SAP_sup/settings/QAReport.txt index e9beb8ff..1cb09f0f 100644 --- a/s3/data/SAP_sup/settings/QAReport.txt +++ b/s3/data/SAP_sup/settings/QAReport.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 24 diff --git a/s3/data/SAP_sup/settings/StockList.txt b/s3/data/SAP_sup/settings/StockList.txt index f571083c..eb6cef3b 100644 --- a/s3/data/SAP_sup/settings/StockList.txt +++ b/s3/data/SAP_sup/settings/StockList.txt @@ -1,7 +1,7 @@ SAP_sup utf-8 - + LF 1 13 From 3a177ae18c5585bd54984f793cf8156811fc73f8 Mon Sep 17 00:00:00 2001 From: yuusuke_kanamura Date: Fri, 16 Sep 2022 09:26:33 +0900 Subject: [PATCH 68/77] =?UTF-8?q?feat:=E4=B8=8B=E7=94=B0=E3=81=95=E3=82=93?= =?UTF-8?q?=E3=81=AE=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 8 ++++---- ecs/dataimport/dataimport/common.py | 1 - ecs/dataimport/dataimport/main.py | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index d3d8801c..125dbb2a 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -5,8 +5,7 @@ import csv import sys from end import end from error import error -from common import debug_log -from common import convert_quotechar +from common import debug_log, convert_quotechar # 定数 DIRECTORY_WORK = '/work/' @@ -83,12 +82,13 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i work_obj = s3_resource.Object(bucket_name, work_key) work_response = work_obj.get() work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) - work_header_list = [] + work_header_list = [] + # ヘッダ行のみのファイルは、0バイトファイル同等とみなす for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])): if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True and i == 0: work_header_list = line continue - + break # ② C-0のデータ件数チェックを開始する diff --git a/ecs/dataimport/dataimport/common.py b/ecs/dataimport/dataimport/common.py index 946defe4..1361ff53 100644 --- a/ecs/dataimport/dataimport/common.py +++ b/ecs/dataimport/dataimport/common.py @@ -1,6 +1,5 @@ from datetime import datetime - # 定数 LOG_LEVEL = {"d": 'Debug'} MODE_TYPE = { diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index c0894209..23932c6f 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -6,8 +6,7 @@ from pymysql.constants import CLIENT import io import csv from error import error -from common import debug_log -from common import convert_quotechar +from common import debug_log, convert_quotechar # 定数 DIRECTORY_WORK = '/work/' From cda1a79e7ab0be67b8a776752a810a908ebdcc5e Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 16 Sep 2022 12:47:14 +0900 Subject: [PATCH 69/77] =?UTF-8?q?fix:=200=E3=83=90=E3=82=A4=E3=83=88?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82=E3=83=98?= =?UTF-8?q?=E3=83=83=E3=83=80=E8=A1=8C=E3=81=AF=E5=88=A5=E3=81=AE=E3=81=A8?= =?UTF-8?q?=E3=81=93=E3=82=8D=E3=81=A7=E3=82=82=E4=BD=BF=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=9F=E3=82=81=E3=80=81=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AE=E3=81=BF=E9=96=A2=E6=95=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (本当は他のも関数化したいけど我慢) --- ecs/dataimport/dataimport/chk.py | 37 +++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index 125dbb2a..9358db30 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -1,11 +1,13 @@ -from datetime import datetime -import boto3 -import io import csv +import io import sys +from datetime import datetime + +import boto3 + +from common import convert_quotechar, debug_log from end import end from error import error -from common import debug_log, convert_quotechar # 定数 DIRECTORY_WORK = '/work/' @@ -83,17 +85,13 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i work_response = work_obj.get() work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) work_header_list = [] - # ヘッダ行のみのファイルは、0バイトファイル同等とみなす for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])): - if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True and i == 0: - work_header_list = line - continue - + work_header_list = line break # ② C-0のデータ件数チェックを開始する print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-02 - C-0のチェックを開始します') - if not len(work_header_list): + if is_empty_file(work_header_list, settings_list): print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-03 - 投入ファイルが0バイトのため処理を終了します') end(bucket_name, target_data_source, target_file_name, '', log_info, mode) print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-04 - 終了処理完了') @@ -126,3 +124,22 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i except Exception as e: print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-CHK-99 - エラー内容:{e}') error(bucket_name, target_data_source, target_file_name, log_info) + + +def is_empty_file(work_header_list: list, settings_list: list): + """② C-0のデータ件数チェック + ヘッダ行がある場合は、1行目を読み飛ばして判定する + + Args: + work_header_list (list): CSVファイルの1行目 + settings_list (list): 個別設定ファイルのリスト + + Returns: + bool: CSVファイルの1行目が0件だった場合はTrue + """ + has_header = settings_list[SETTINGS_ITEM["headerFlag"]] + # ヘッダのみのファイルも0バイトファイルをみなす + if has_header: + return len(work_header_list[1:]) == 0 + + return len(work_header_list) == 0 From 89b5028919eab6fc6b43b8ce9fe47f185f6dd285 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 16 Sep 2022 12:48:35 +0900 Subject: [PATCH 70/77] =?UTF-8?q?refactor:=20=E6=B7=BB=E5=AD=97=E4=BD=BF?= =?UTF-8?q?=E3=82=8F=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index 9358db30..b8df1eb0 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -85,7 +85,7 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i work_response = work_obj.get() work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) work_header_list = [] - for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])): + for line in csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): work_header_list = line break From 22c68fa7a52ba77c1e6559a804e62b002bd39427 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 16 Sep 2022 13:37:59 +0900 Subject: [PATCH 71/77] =?UTF-8?q?fix:=20=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=82=92=E5=90=AB=E3=82=93=E3=81=A00Byte=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E3=81=AE=E8=AA=A4=E3=82=8A=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/chk.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/ecs/dataimport/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py index b8df1eb0..d90e2fb5 100644 --- a/ecs/dataimport/dataimport/chk.py +++ b/ecs/dataimport/dataimport/chk.py @@ -84,14 +84,18 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i work_obj = s3_resource.Object(bucket_name, work_key) work_response = work_obj.get() work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]]) - work_header_list = [] - for line in csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]]): - work_header_list = line + work_csv_row = [] + for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])): + # ヘッダあり、かつ、1行目の場合 + if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == 1 and i == 0: + work_csv_row.append(line) + continue + work_csv_row.append(line) break # ② C-0のデータ件数チェックを開始する print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-02 - C-0のチェックを開始します') - if is_empty_file(work_header_list, settings_list): + if is_empty_file(work_csv_row, settings_list): print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-03 - 投入ファイルが0バイトのため処理を終了します') end(bucket_name, target_data_source, target_file_name, '', log_info, mode) print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-04 - 終了処理完了') @@ -100,16 +104,17 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i # ③ C-1の項目数チェックを開始する print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-06 - C-1のチェックを開始します') - work_header_list_len = len(work_header_list) - if work_header_list_len == int(settings_list[SETTINGS_ITEM["csvNumItems"]]): + work_csv_row_item_len = len(work_csv_row[0]) + if work_csv_row_item_len == int(settings_list[SETTINGS_ITEM["csvNumItems"]]): print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-07 - C-1:正常終了') else: - raise CheckError(f'E-CHK-01 - 項目数が一致しません 個別設定ファイル項目数:{settings_list[SETTINGS_ITEM["csvNumItems"]]} 投入データ項目数:{work_header_list_len}') + raise CheckError(f'E-CHK-01 - 項目数が一致しません 個別設定ファイル項目数:{settings_list[SETTINGS_ITEM["csvNumItems"]]} 投入データ項目数:{work_csv_row_item_len}') # ④ C-2の項目並び順チェック開始する if int(settings_list[SETTINGS_ITEM["headerFlag"]]) == True: print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-08 - C-2のチェックを開始します') settings_header_list = settings_list[SETTINGS_ITEM["csvNameItems"]].rstrip().split(',') + work_header_list = work_csv_row[0] for i in range(len(settings_header_list)): if not settings_header_list[i] == work_header_list[i]: raise CheckError(f'E-CHK-02 - 項目順序が一致しません {i + 1}番目の項目 個別設定ファイル項目:{settings_header_list[i]} 投入データ項目:{work_header_list[i]}') @@ -126,20 +131,20 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i error(bucket_name, target_data_source, target_file_name, log_info) -def is_empty_file(work_header_list: list, settings_list: list): +def is_empty_file(work_csv_row: list, settings_list: list): """② C-0のデータ件数チェック ヘッダ行がある場合は、1行目を読み飛ばして判定する Args: - work_header_list (list): CSVファイルの1行目 + work_csv_row (list): CSVファイルの1行目(ヘッダを含む場合は2行目まで) settings_list (list): 個別設定ファイルのリスト Returns: bool: CSVファイルの1行目が0件だった場合はTrue """ - has_header = settings_list[SETTINGS_ITEM["headerFlag"]] + has_header = int(settings_list[SETTINGS_ITEM["headerFlag"]]) == 1 # ヘッダのみのファイルも0バイトファイルをみなす if has_header: - return len(work_header_list[1:]) == 0 + return len(work_csv_row[1:]) == 0 - return len(work_header_list) == 0 + return len(work_csv_row) == 0 From d8561fe3a3d018d9c7f1ad5235813e745399f8df Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Sep 2022 09:48:22 +0900 Subject: [PATCH 72/77] =?UTF-8?q?feat:=20=E6=9C=88=E6=AC=A1=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E8=A8=AD=E5=AE=9A=E3=82=92=E6=AF=8E=E6=9C=88?= =?UTF-8?q?3=E6=97=A5=E3=81=AB=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3=20=E3=81=A4?= =?UTF-8?q?=E3=81=84=E3=81=A7=E3=81=AB2024=E5=B9=B4=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/SAP/monthly_check_day_list.config | 38 +++++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index 900bcc9a..96b443ed 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -1,7 +1,31 @@ -2022/06/15 -2022/07/15 -2022/08/15 -2022/09/15 -2022/10/15 -2022/11/15 -2022/12/15 +2022/06/03 +2022/07/03 +2022/08/03 +2022/09/03 +2022/10/03 +2022/11/03 +2022/12/03 +2023/01/03 +2023/02/03 +2023/03/03 +2023/04/03 +2023/05/03 +2023/06/03 +2023/07/03 +2023/08/03 +2023/09/03 +2023/10/03 +2023/11/03 +2023/12/03 +2024/01/03 +2024/02/03 +2024/03/03 +2024/04/03 +2024/05/03 +2024/06/03 +2024/07/03 +2024/08/03 +2024/09/03 +2024/10/03 +2024/11/03 +2024/12/03 From aeab735c06ad4bff3f566c4b3e78cc6dc3964bd6 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Sep 2022 11:20:41 +0900 Subject: [PATCH 73/77] =?UTF-8?q?feat:=20=E5=B9=B4=EF=BC=91=E3=81=A7?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=86=E3=81=99=E3=82=8B=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E3=80=81=E6=9D=A5=E5=B9=B4=E5=BA=A6=E3=81=AE=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=A8=E3=81=8B=E4=BD=99=E8=A8=88=E3=81=AA=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=AF=E3=81=97=E3=81=AA=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/SAP/monthly_check_day_list.config | 26 +-------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index 96b443ed..c7e17da1 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -4,28 +4,4 @@ 2022/09/03 2022/10/03 2022/11/03 -2022/12/03 -2023/01/03 -2023/02/03 -2023/03/03 -2023/04/03 -2023/05/03 -2023/06/03 -2023/07/03 -2023/08/03 -2023/09/03 -2023/10/03 -2023/11/03 -2023/12/03 -2024/01/03 -2024/02/03 -2024/03/03 -2024/04/03 -2024/05/03 -2024/06/03 -2024/07/03 -2024/08/03 -2024/09/03 -2024/10/03 -2024/11/03 -2024/12/03 +2022/12/03 \ No newline at end of file From 285b8f174dc10b895d2d1f8489a4d5dedd2abcc4 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 25 Oct 2022 10:08:09 +0900 Subject: [PATCH 74/77] =?UTF-8?q?feat:=20=E6=9C=AC=E7=95=AA=E7=A8=BC?= =?UTF-8?q?=E5=83=8D=E6=97=A5=E3=81=AE11/7=E3=81=AB10=E6=9C=88=E5=BA=A6?= =?UTF-8?q?=E3=81=AE=E6=9C=88=E6=AC=A1I/F=E3=82=92=E5=8F=97=E9=A0=98?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=80=81=E5=8F=97=E9=A0=98?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=9211/7=E3=81=AB?= =?UTF-8?q?=E5=AE=9F=E6=96=BD=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/SAP/monthly_check_day_list.config | 1 + 1 file changed, 1 insertion(+) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index c7e17da1..de1668bb 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -4,4 +4,5 @@ 2022/09/03 2022/10/03 2022/11/03 +2022/11/17 2022/12/03 \ No newline at end of file From e54dfb1b6bc5601cc9b0acc693c11d142edb532b Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 25 Oct 2022 10:10:20 +0900 Subject: [PATCH 75/77] =?UTF-8?q?fix:=20=E6=97=A5=E4=BB=98=E3=83=9F?= =?UTF-8?q?=E3=82=B9=2011/17=E2=86=9211/07?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/SAP/monthly_check_day_list.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index de1668bb..2de9badc 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -4,5 +4,5 @@ 2022/09/03 2022/10/03 2022/11/03 -2022/11/17 +2022/11/07 2022/12/03 \ No newline at end of file From 7e02525d4d802bc699df1b833a051478bd8c1cfa Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 25 Oct 2022 10:25:46 +0900 Subject: [PATCH 76/77] =?UTF-8?q?fix:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/SAP/monthly_check_day_list.config | 1 - 1 file changed, 1 deletion(-) diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config index 2de9badc..f43c8513 100644 --- a/s3/config/SAP/monthly_check_day_list.config +++ b/s3/config/SAP/monthly_check_day_list.config @@ -3,6 +3,5 @@ 2022/08/03 2022/09/03 2022/10/03 -2022/11/03 2022/11/07 2022/12/03 \ No newline at end of file From 0566dfddf324abb0bea48e0ba7b4c117ab1e79ba Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 25 Oct 2022 10:30:50 +0900 Subject: [PATCH 77/77] =?UTF-8?q?feat:=20SAP=E6=97=A5=E6=AC=A1I/F=E3=81=AF?= =?UTF-8?q?365=E6=97=A5=E5=AE=9F=E6=96=BD=E3=81=A8=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=81=A7=E3=80=81=E9=9D=9E=E7=A8=BC=E5=83=8D?= =?UTF-8?q?=E6=97=A5=E3=82=AB=E3=83=AC=E3=83=B3=E3=83=80=E3=83=BC=E3=81=AF?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=82=A2=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/non_business_day_list.config | 73 -------------------------- 1 file changed, 73 deletions(-) diff --git a/s3/config/non_business_day_list.config b/s3/config/non_business_day_list.config index 577b247a..e69de29b 100644 --- a/s3/config/non_business_day_list.config +++ b/s3/config/non_business_day_list.config @@ -1,73 +0,0 @@ -2022/06/04 -2022/06/05 -2022/06/11 -2022/06/12 -2022/06/18 -2022/06/19 -2022/06/25 -2022/06/26 -2022/07/02 -2022/07/03 -2022/07/09 -2022/07/10 -2022/07/16 -2022/07/17 -2022/07/18 -2022/07/23 -2022/07/24 -2022/07/30 -2022/07/31 -2022/08/06 -2022/08/07 -2022/08/11 -2022/08/12 -2022/08/13 -2022/08/14 -2022/08/15 -2022/08/16 -2022/08/20 -2022/08/21 -2022/08/27 -2022/08/28 -2022/09/03 -2022/09/04 -2022/09/10 -2022/09/11 -2022/09/17 -2022/09/18 -2022/09/19 -2022/09/23 -2022/09/24 -2022/09/25 -2022/10/01 -2022/10/02 -2022/10/08 -2022/10/09 -2022/10/10 -2022/10/15 -2022/10/16 -2022/10/22 -2022/10/23 -2022/10/29 -2022/10/30 -2022/11/03 -2022/11/05 -2022/11/06 -2022/11/12 -2022/11/13 -2022/11/19 -2022/11/20 -2022/11/23 -2022/11/26 -2022/11/27 -2022/12/03 -2022/12/04 -2022/12/10 -2022/12/11 -2022/12/17 -2022/12/18 -2022/12/24 -2022/12/25 -2022/12/29 -2022/12/30 -2022/12/31 \ No newline at end of file