# coding: utf-8
import json
from logger.halulogger import HaluLogger
[ドキュメント]
class BatchKeyControll():
"""
以下のテーブルの更新を行う
・バッチキー管理
"""
def __init__(self, bdlog, bdlogname, database):
self.bdlog = bdlog
self.bdlogname = bdlogname
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル init start')
# インスタンス変数を設定
self.database = database
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル init end')
[ドキュメント]
def batchkey_insert(self, dbname, sql_info, controll_id):
"""
バッチキー管理 テーブル登録
json.dumps(keys_record) ・・・ jsonオブジェクト(dict型)を文字列に変換する
"""
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル insert start')
if sql_info['output']:
keys_record = sql_info['output']['record']
else:
keys_record = sql_info['input']['record']
str_sql1 = "INSERT INTO バッチキー管理"
str_sql2 = " (バッチ管理ID, JSONデータ)"
str_sql3 = f" VALUES ({controll_id}, '{json.dumps(keys_record, ensure_ascii=False)}')"
str_sql = str_sql1 + str_sql2 + str_sql3
self.database.execute(dbname, str_sql)
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル insert end')
[ドキュメント]
def batchkey_select(self, dbname, controll_id):
"""
バッチキー管理 テーブルのJSONデータを取得する
dbnam : データベース名
controll_id : バッチ管理ID
json.loads(value) ・・・ 文字列をjsonオブジェクト(dict型)に変換する
"""
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル batchkey_select start')
str_sql = "SELECT JSONデータ FROM バッチキー管理"
str_sql += f" WHERE バッチ管理ID = {controll_id}"
result = self.database.execute(dbname, str_sql)
key_string = ""
for row in result:
for key, value in row.items():
key_string = value
break
self.bdlog.debug(self.bdlogname, f'バッチキー管理テーブル batchkey_select end key : {key_string}')
self.bdlog.debug(self.bdlogname, f'バッチキー管理テーブル batchkey_select key_string type : {type(key_string)}')
self.bdlog.debug(self.bdlogname, f'バッチキー管理テーブル batchkey_select 受注番号 : {key_string["受注番号"]}')
#return json.loads(key_string)
return key_string
[ドキュメント]
def batchkey_maxrow(self, dbname, controll_id):
"""
キー項目の最大行数を求める
dbnam : データベース名
controll_id : バッチ管理ID
"""
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル batchkey_maxrow start')
key_dict = self.batchkey_select(dbname, controll_id)
maxrow = 0
for val in key_dict.values():
length = len(val["value"])
if length > maxrow:
maxrow = length
self.bdlog.debug(self.bdlogname, f'バッチキー管理テーブル batchkey_maxrow end maxrow : {maxrow}')
return maxrow
[ドキュメント]
def batchkey_start_end_row(self, dbname, controll_id, cur_division, division_number):
"""
処理開始行と終了行を求める
dbnam : データベース名
controll_id : バッチ管理ID
cur_division : カレント分割数
division_number : 分割数
"""
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル batchkey_start_end_row start')
maxrow = self.batchkey_maxrow(dbname, controll_id)
syou = maxrow // division_number
start_row = (cur_division - 1) * syou + 1
if cur_division == division_number:
end_row = maxrow
else:
end_row = cur_division * syou
self.bdlog.debug(self.bdlogname, f'バッチキー管理テーブル start_row : {start_row}')
self.bdlog.debug(self.bdlogname, f'バッチキー管理テーブル end_row : {end_row}')
self.bdlog.debug(self.bdlogname, 'バッチキー管理テーブル batchkey_start_end_row end')
return start_row, end_row