From 3620211434aef76acc1630b0dd4572cf8495035a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 27 Mar 2023 16:17:54 +0900 Subject: [PATCH 01/90] =?UTF-8?q?feat:=20CRM=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AB=E3=80=81Suggestion=E9=96=A2?= =?UTF-8?q?=E9=80=A3=E3=81=AE=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7=E3=82=AF?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../crm/object_info/crm_object_list_diff.json | 227 ++++++++++++++++++ 1 file changed, 227 insertions(+) diff --git a/s3/config/crm/object_info/crm_object_list_diff.json b/s3/config/crm/object_info/crm_object_list_diff.json index db145744..9667e48e 100644 --- a/s3/config/crm/object_info/crm_object_list_diff.json +++ b/s3/config/crm/object_info/crm_object_list_diff.json @@ -3002,6 +3002,233 @@ ], "is_skip": false, "is_update_last_fetch_datetime": true + }, + { + "object_name": "Suggestion_vod__c", + "columns": [ + "Id", + "OwnerId", + "IsDeleted", + "Name", + "RecordTypeId", + "CreatedDate", + "CreatedById", + "LastModifiedDate", + "LastModifiedById", + "SystemModstamp", + "MayEdit", + "IsLocked", + "Account_Priority_Score_vod__c", + "Account_vod__c", + "Action_Count_vod__c", + "Actioned_vod__c", + "Call_Objective_CLM_ID_vod__c", + "Call_Objective_From_Date_vod__c", + "Call_Objective_On_By_Default_vod__c", + "Call_Objective_Record_Type_vod__c", + "Call_Objective_To_Date_vod__c", + "Dismiss_Count_vod__c", + "Dismissed_vod__c", + "Display_Dismiss_vod__c", + "Display_Mark_As_Complete_vod__c", + "Display_Score_vod__c", + "Email_Template_ID_vod__c", + "Email_Template_Vault_ID_vod__c", + "Email_Template_vod__c", + "Expiration_Date_vod__c", + "Mark_Complete_Count_vod__c", + "Marked_As_Complete_vod__c", + "No_Homepage_vod__c", + "Planned_Call_Date_vod__c", + "Posted_Date_vod__c", + "Priority_vod__c", + "Reason_vod__c", + "Record_Type_Name_vod__c", + "Suggestion_External_Id_vod__c", + "Suppress_Reason_vod__c", + "Title_vod__c", + "MSJ_Reason_unformatted__c", + "MSJ_Data_Id__c", + "MSJ_reason_id__c" + ], + "is_skip": false, + "is_update_last_fetch_datetime": true + }, + { + "object_name": "Suggestion_Tag_vod__c", + "columns": [ + "Id", + "IsDeleted", + "Name", + "RecordTypeId", + "CreatedDate", + "CreatedById", + "LastModifiedDate", + "LastModifiedById", + "SystemModstamp", + "MayEdit", + "IsLocked", + "Suggestion_vod__c", + "Detail_Group_vod__c", + "Driver_vod__c", + "Email_Fragment_order_vod__c", + "Email_Fragment_vod__c", + "External_ID_vod__c", + "Product_vod__c", + "Record_Type_Name_vod__c" + ], + "is_skip": false, + "is_update_last_fetch_datetime": true + }, + { + "object_name": "Suggestion_Feedback_vod__c", + "columns": [ + "Id", + "IsDeleted", + "Name", + "RecordTypeId", + "CreatedDate", + "CreatedById", + "LastModifiedDate", + "LastModifiedById", + "SystemModstamp", + "MayEdit", + "IsLocked", + "Suggestion_vod__c", + "Account_vod__c", + "Activity_Execution_Type_vod__c", + "Call2_vod__c", + "Call_Objective_vod__c", + "DismissFeedback1_vod__c", + "DismissFeedback2_vod__c", + "DismissFeedback3_vod__c", + "DismissFeedback4_vod__c", + "Mobile_ID_vod__c", + "Sent_Email_vod__c" + ], + "is_skip": false, + "is_update_last_fetch_datetime": true + }, + { + "object_name": "Event", + "columns": [ + "Id", + "RecordTypeId", + "WhoId", + "WhatId", + "Subject", + "Location", + "IsAllDayEvent", + "ActivityDateTime", + "ActivityDate", + "DurationInMinutes", + "StartDateTime", + "EndDateTime", + "EndDate", + "Description", + "AccountId", + "OwnerId", + "IsPrivate", + "ShowAs", + "IsDeleted", + "IsChild", + "IsGroupEvent", + "GroupEventType", + "CreatedDate", + "CreatedById", + "LastModifiedDate", + "LastModifiedById", + "SystemModstamp", + "IsArchived", + "RecurrenceActivityId", + "IsRecurrence", + "RecurrenceStartDateTime", + "RecurrenceEndDateOnly", + "RecurrenceTimeZoneSidKey", + "RecurrenceType", + "RecurrenceInterval", + "RecurrenceDayOfWeekMask", + "RecurrenceDayOfMonth", + "RecurrenceInstance", + "RecurrenceMonthOfYear", + "ReminderDateTime", + "IsReminderSet", + "EventSubtype", + "IsRecurrence2Exclusion", + "Recurrence2PatternText", + "Recurrence2PatternVersion", + "IsRecurrence2", + "IsRecurrence2Exception", + "Recurrence2PatternStartDate", + "Recurrence2PatternTimeZone", + "Override_Lock_vod__c", + "Mobile_ID_vod__c", + "Color_vod__c", + "Event_Canceled_vod__c", + "Followup_Activity_Type_vod__c", + "MSJ_Data_ID__c", + "MSJ_Reason_ID__c", + "MSJ_Task_External_Id__c", + "MSJ_Task_Source__c" + ], + "is_skip": false, + "is_update_last_fetch_datetime": true + }, + { + "object_name": "Task", + "columns": [ + "Id", + "RecordTypeId", + "WhoId", + "WhatId", + "Subject", + "ActivityDate", + "Status", + "Priority", + "IsHighPriority", + "OwnerId", + "Description", + "IsDeleted", + "AccountId", + "IsClosed", + "CreatedDate", + "CreatedById", + "LastModifiedDate", + "LastModifiedById", + "SystemModstamp", + "IsArchived", + "CallDurationInSeconds", + "CallType", + "CallDisposition", + "CallObject", + "ReminderDateTime", + "IsReminderSet", + "RecurrenceActivityId", + "IsRecurrence", + "RecurrenceStartDateOnly", + "RecurrenceEndDateOnly", + "RecurrenceTimeZoneSidKey", + "RecurrenceType", + "RecurrenceInterval", + "RecurrenceDayOfWeekMask", + "RecurrenceDayOfMonth", + "RecurrenceInstance", + "RecurrenceMonthOfYear", + "RecurrenceRegeneratedType", + "TaskSubtype", + "CompletedDateTime", + "Override_Lock_vod__c", + "Mobile_ID_vod__c", + "Color_vod__c", + "Event_Canceled_vod__c", + "Followup_Activity_Type_vod__c", + "MSJ_Data_ID__c", + "MSJ_Reason_ID__c", + "MSJ_Task_External_Id__c", + "MSJ_Task_Source__c" + ], + "is_skip": false, + "is_update_last_fetch_datetime": true } ] } \ No newline at end of file From d75c2cae84faed91a2df381561f67002a356c42f Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 27 Mar 2023 16:39:38 +0900 Subject: [PATCH 02/90] =?UTF-8?q?feat:=20=E6=9C=80=E7=B5=82=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E6=97=A5=E6=99=82=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=82=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/crm/last_fetch_datetime/Event.json | 4 ++++ .../crm/last_fetch_datetime/Suggestion_Feedback_vod__c.json | 4 ++++ s3/config/crm/last_fetch_datetime/Suggestion_Tag_vod__c.json | 4 ++++ s3/config/crm/last_fetch_datetime/Suggestion_vod__c.json | 4 ++++ s3/config/crm/last_fetch_datetime/Task.json | 4 ++++ 5 files changed, 20 insertions(+) create mode 100644 s3/config/crm/last_fetch_datetime/Event.json create mode 100644 s3/config/crm/last_fetch_datetime/Suggestion_Feedback_vod__c.json create mode 100644 s3/config/crm/last_fetch_datetime/Suggestion_Tag_vod__c.json create mode 100644 s3/config/crm/last_fetch_datetime/Suggestion_vod__c.json create mode 100644 s3/config/crm/last_fetch_datetime/Task.json diff --git a/s3/config/crm/last_fetch_datetime/Event.json b/s3/config/crm/last_fetch_datetime/Event.json new file mode 100644 index 00000000..d1f26838 --- /dev/null +++ b/s3/config/crm/last_fetch_datetime/Event.json @@ -0,0 +1,4 @@ +{ + "last_fetch_datetime_from": "1900-01-01T00:00:00.000Z", + "last_fetch_datetime_to": "" +} \ No newline at end of file diff --git a/s3/config/crm/last_fetch_datetime/Suggestion_Feedback_vod__c.json b/s3/config/crm/last_fetch_datetime/Suggestion_Feedback_vod__c.json new file mode 100644 index 00000000..d1f26838 --- /dev/null +++ b/s3/config/crm/last_fetch_datetime/Suggestion_Feedback_vod__c.json @@ -0,0 +1,4 @@ +{ + "last_fetch_datetime_from": "1900-01-01T00:00:00.000Z", + "last_fetch_datetime_to": "" +} \ No newline at end of file diff --git a/s3/config/crm/last_fetch_datetime/Suggestion_Tag_vod__c.json b/s3/config/crm/last_fetch_datetime/Suggestion_Tag_vod__c.json new file mode 100644 index 00000000..d1f26838 --- /dev/null +++ b/s3/config/crm/last_fetch_datetime/Suggestion_Tag_vod__c.json @@ -0,0 +1,4 @@ +{ + "last_fetch_datetime_from": "1900-01-01T00:00:00.000Z", + "last_fetch_datetime_to": "" +} \ No newline at end of file diff --git a/s3/config/crm/last_fetch_datetime/Suggestion_vod__c.json b/s3/config/crm/last_fetch_datetime/Suggestion_vod__c.json new file mode 100644 index 00000000..d1f26838 --- /dev/null +++ b/s3/config/crm/last_fetch_datetime/Suggestion_vod__c.json @@ -0,0 +1,4 @@ +{ + "last_fetch_datetime_from": "1900-01-01T00:00:00.000Z", + "last_fetch_datetime_to": "" +} \ No newline at end of file diff --git a/s3/config/crm/last_fetch_datetime/Task.json b/s3/config/crm/last_fetch_datetime/Task.json new file mode 100644 index 00000000..d1f26838 --- /dev/null +++ b/s3/config/crm/last_fetch_datetime/Task.json @@ -0,0 +1,4 @@ +{ + "last_fetch_datetime_from": "1900-01-01T00:00:00.000Z", + "last_fetch_datetime_to": "" +} \ No newline at end of file From 68523938f4c1ce2f99f08421453fbe6b1dbc0752 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 27 Mar 2023 18:07:35 +0900 Subject: [PATCH 03/90] =?UTF-8?q?feat:=20=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E7=99=BB=E9=8C=B2=E3=81=AB=E5=88=A9=E7=94=A8=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=8F=96=E3=82=8A=E8=BE=BC=E3=81=BF=E8=A8=AD=E5=AE=9A=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/crm/settings/CRM_Event.txt | 13 +++++++++++++ .../crm/settings/CRM_Suggestion_Feedback_vod__c.txt | 13 +++++++++++++ s3/data/crm/settings/CRM_Suggestion_Tag_vod__c.txt | 13 +++++++++++++ s3/data/crm/settings/CRM_Suggestion_vod__c.txt | 13 +++++++++++++ s3/data/crm/settings/CRM_Task.txt | 13 +++++++++++++ s3/data/crm/settings/configmap.config | 5 +++++ 6 files changed, 70 insertions(+) create mode 100644 s3/data/crm/settings/CRM_Event.txt create mode 100644 s3/data/crm/settings/CRM_Suggestion_Feedback_vod__c.txt create mode 100644 s3/data/crm/settings/CRM_Suggestion_Tag_vod__c.txt create mode 100644 s3/data/crm/settings/CRM_Suggestion_vod__c.txt create mode 100644 s3/data/crm/settings/CRM_Task.txt diff --git a/s3/data/crm/settings/CRM_Event.txt b/s3/data/crm/settings/CRM_Event.txt new file mode 100644 index 00000000..2400c584 --- /dev/null +++ b/s3/data/crm/settings/CRM_Event.txt @@ -0,0 +1,13 @@ +CRM +, +utf-8 +" +CRLF +1 +58 +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c +src02.crm_Event +org02.crm_Event + + diff --git a/s3/data/crm/settings/CRM_Suggestion_Feedback_vod__c.txt b/s3/data/crm/settings/CRM_Suggestion_Feedback_vod__c.txt new file mode 100644 index 00000000..61aa8889 --- /dev/null +++ b/s3/data/crm/settings/CRM_Suggestion_Feedback_vod__c.txt @@ -0,0 +1,13 @@ +CRM +, +utf-8 +" +CRLF +1 +22 +Id,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Suggestion_vod__c,Account_vod__c,Activity_Execution_Type_vod__c,Call2_vod__c,Call_Objective_vod__c,DismissFeedback1_vod__c,DismissFeedback2_vod__c,DismissFeedback3_vod__c,DismissFeedback4_vod__c,Mobile_ID_vod__c,Sent_Email_vod__c +Id,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Suggestion_vod__c,Account_vod__c,Activity_Execution_Type_vod__c,Call2_vod__c,Call_Objective_vod__c,DismissFeedback1_vod__c,DismissFeedback2_vod__c,DismissFeedback3_vod__c,DismissFeedback4_vod__c,Mobile_ID_vod__c,Sent_Email_vod__c +src02.crm_Suggestion_Feedback_vod__c +org02.crm_Suggestion_Feedback_vod__c + + diff --git a/s3/data/crm/settings/CRM_Suggestion_Tag_vod__c.txt b/s3/data/crm/settings/CRM_Suggestion_Tag_vod__c.txt new file mode 100644 index 00000000..85c9e0df --- /dev/null +++ b/s3/data/crm/settings/CRM_Suggestion_Tag_vod__c.txt @@ -0,0 +1,13 @@ +CRM +, +utf-8 +" +CRLF +1 +19 +Id,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Suggestion_vod__c,Detail_Group_vod__c,Driver_vod__c,Email_Fragment_order_vod__c,Email_Fragment_vod__c,External_ID_vod__c,Product_vod__c,Record_Type_Name_vod__c +Id,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Suggestion_vod__c,Detail_Group_vod__c,Driver_vod__c,Email_Fragment_order_vod__c,Email_Fragment_vod__c,External_ID_vod__c,Product_vod__c,Record_Type_Name_vod__c +src02.crm_Suggestion_Tag_vod__c +org02.crm_Suggestion_Tag_vod__c + + diff --git a/s3/data/crm/settings/CRM_Suggestion_vod__c.txt b/s3/data/crm/settings/CRM_Suggestion_vod__c.txt new file mode 100644 index 00000000..0b819bda --- /dev/null +++ b/s3/data/crm/settings/CRM_Suggestion_vod__c.txt @@ -0,0 +1,13 @@ +CRM +, +utf-8 +" +CRLF +1 +44 +Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c +Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c +src02.crm_Suggestion_vod__c +org02.crm_Suggestion_vod__c + + diff --git a/s3/data/crm/settings/CRM_Task.txt b/s3/data/crm/settings/CRM_Task.txt new file mode 100644 index 00000000..6070f54e --- /dev/null +++ b/s3/data/crm/settings/CRM_Task.txt @@ -0,0 +1,13 @@ +CRM +, +utf-8 +" +CRLF +1 +49 +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c +src02.crm_Task +org02.crm_Task + + diff --git a/s3/data/crm/settings/configmap.config b/s3/data/crm/settings/configmap.config index 9b24ca55..83fdcb0f 100644 --- a/s3/data/crm/settings/configmap.config +++ b/s3/data/crm/settings/configmap.config @@ -53,6 +53,11 @@ CRM_Survey_Question_vod__c_[0-9]{14}\.(CSV|csv) CRM_Survey_Question_vod__c.txt CRM_Question_Response_vod__c_[0-9]{14}\.(CSV|csv) CRM_Question_Response_vod__c.txt CRM_Sent_Fragment_vod__c_[0-9]{14}\.(CSV|csv) CRM_Sent_Fragment_vod__c.txt CRM_Sent_Email_vod__c_[0-9]{14}\.(CSV|csv) CRM_Sent_Email_vod__c.txt +CRM_Suggestion_vod__c_[0-9]{14}\.(CSV|csv) CRM_Suggestion_vod__c.txt +CRM_Suggestion_Tag_vod__c_[0-9]{14}\.(CSV|csv) CRM_Suggestion_Tag_vod__c.txt +CRM_Suggestion_Feedback_vod__c_[0-9]{14}\.(CSV|csv) CRM_Suggestion_Feedback_vod__c.txt +CRM_Event_[0-9]{14}\.(CSV|csv) CRM_Event.txt +CRM_Task_[0-9]{14}\.(CSV|csv) CRM_Task.txt /* 【CRMデータ 全件連携】 */ CRM_Territory2_ALL_[0-9]{14}\.(CSV|csv) CRM_Territory2_ALL.txt CRM_UserTerritory2Association_ALL_[0-9]{14}\.(CSV|csv) CRM_UserTerritory2Association_ALL.txt From eb36ecb57f239adaf7c64d861bef6f63e72983fb Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 30 Mar 2023 17:12:36 +0900 Subject: [PATCH 04/90] =?UTF-8?q?feat:=20=E3=82=AA=E3=83=96=E3=82=B8?= =?UTF-8?q?=E3=82=A7=E3=82=AF=E3=83=88=E5=AE=9A=E7=BE=A9=E3=81=AE=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E5=8C=96=E3=81=AB=E4=BC=B4=E3=81=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/crm/settings/CRM_Event.txt | 6 +++--- s3/data/crm/settings/CRM_Task.txt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/s3/data/crm/settings/CRM_Event.txt b/s3/data/crm/settings/CRM_Event.txt index 2400c584..ed6c978e 100644 --- a/s3/data/crm/settings/CRM_Event.txt +++ b/s3/data/crm/settings/CRM_Event.txt @@ -4,9 +4,9 @@ utf-8 " CRLF 1 -58 -Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c -Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c +59 +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c src02.crm_Event org02.crm_Event diff --git a/s3/data/crm/settings/CRM_Task.txt b/s3/data/crm/settings/CRM_Task.txt index 6070f54e..45e1735b 100644 --- a/s3/data/crm/settings/CRM_Task.txt +++ b/s3/data/crm/settings/CRM_Task.txt @@ -4,9 +4,9 @@ utf-8 " CRLF 1 -49 -Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c -Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c +50 +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c src02.crm_Task org02.crm_Task From 886af02130e00e1b44b2bfbb9347b01f55f6beee Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 30 Mar 2023 17:13:48 +0900 Subject: [PATCH 05/90] =?UTF-8?q?feat:=20=E3=82=AA=E3=83=96=E3=82=B8?= =?UTF-8?q?=E3=82=A7=E3=82=AF=E3=83=88=E5=AE=9A=E7=BE=A9=E3=81=AE=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E5=8C=96=E3=81=AB=E4=BC=B4=E3=81=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/crm/object_info/crm_object_list_diff.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/s3/config/crm/object_info/crm_object_list_diff.json b/s3/config/crm/object_info/crm_object_list_diff.json index 9667e48e..9dd9f14a 100644 --- a/s3/config/crm/object_info/crm_object_list_diff.json +++ b/s3/config/crm/object_info/crm_object_list_diff.json @@ -3169,7 +3169,8 @@ "MSJ_Data_ID__c", "MSJ_Reason_ID__c", "MSJ_Task_External_Id__c", - "MSJ_Task_Source__c" + "MSJ_Task_Source__c", + "MSJ_Visit_Type__c" ], "is_skip": false, "is_update_last_fetch_datetime": true @@ -3225,7 +3226,8 @@ "MSJ_Data_ID__c", "MSJ_Reason_ID__c", "MSJ_Task_External_Id__c", - "MSJ_Task_Source__c" + "MSJ_Task_Source__c", + "MSJ_Visit_Type__c" ], "is_skip": false, "is_update_last_fetch_datetime": true From 16d0225068c57e8067c448b7ef51ed386540fac1 Mon Sep 17 00:00:00 2001 From: "x.azuma.m@nds-tyo.co.jp" Date: Thu, 20 Apr 2023 12:34:03 +0900 Subject: [PATCH 06/90] =?UTF-8?q?pipenv=20update=E5=AE=9F=E8=A1=8C?= =?UTF-8?q?=E7=B5=90=E6=9E=9C=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/Pipfile.lock | 224 +++++++++--------- .../check-view-security-option/Pipfile.lock | 62 +++-- 2 files changed, 135 insertions(+), 151 deletions(-) diff --git a/ecs/crm-datafetch/Pipfile.lock b/ecs/crm-datafetch/Pipfile.lock index 4ca22ac8..0e05bb05 100644 --- a/ecs/crm-datafetch/Pipfile.lock +++ b/ecs/crm-datafetch/Pipfile.lock @@ -18,27 +18,27 @@ "default": { "attrs": { "hashes": [ - "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", - "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" ], - "markers": "python_version >= '3.6'", - "version": "==22.2.0" + "markers": "python_version >= '3.7'", + "version": "==23.1.0" }, "boto3": { "hashes": [ - "sha256:19762b6a1adbe1963e26b8280211ca148017c970a2e1386312a9fc8a0a17dbd5", - "sha256:367a73c1ff04517849d8c4177fd775da2e258a3912ff6a497be258c30f509046" + "sha256:40d6fb099f7e6041ddcc72aadc37d2eaae6f32d1f7cf2ef5c02199a114be60a3", + "sha256:bfb16f1978be69fdee39b692fe639b5f9c430d33843d282889a59e61ae132051" ], "index": "pypi", - "version": "==1.26.97" + "version": "==1.26.116" }, "botocore": { "hashes": [ - "sha256:0df677eb2bef3ba18ac69e007633559b4426df310eee99df9882437b5faf498a", - "sha256:176740221714c0f031c2cd773879df096dbc0f977c63b3e2ed6a956205f02e82" + "sha256:907dec71437386867000912c2427845f482feef5327e7c659e3e81766aac3d34", + "sha256:c058baa1d374111ad2036e1f7d9fe715571b6d66d180a224208fc7fef9bc3c80" ], "markers": "python_version >= '3.7'", - "version": "==1.29.97" + "version": "==1.29.116" }, "certifi": { "hashes": [ @@ -237,11 +237,11 @@ }, "platformdirs": { "hashes": [ - "sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa", - "sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8" + "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08", + "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e" ], "markers": "python_version >= '3.7'", - "version": "==3.1.1" + "version": "==3.2.0" }, "pyjwt": { "hashes": [ @@ -261,10 +261,10 @@ }, "pytz": { "hashes": [ - "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", - "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" + "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", + "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" ], - "version": "==2022.7.1" + "version": "==2023.3" }, "requests": { "hashes": [ @@ -339,14 +339,6 @@ } }, "develop": { - "attrs": { - "hashes": [ - "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", - "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" - ], - "markers": "python_version >= '3.6'", - "version": "==22.2.0" - }, "autopep8": { "hashes": [ "sha256:86e9303b5e5c8160872b2f5ef611161b2893e9bfe8ccc7e2f76385947d57a2f1", @@ -357,19 +349,19 @@ }, "boto3": { "hashes": [ - "sha256:19762b6a1adbe1963e26b8280211ca148017c970a2e1386312a9fc8a0a17dbd5", - "sha256:367a73c1ff04517849d8c4177fd775da2e258a3912ff6a497be258c30f509046" + "sha256:40d6fb099f7e6041ddcc72aadc37d2eaae6f32d1f7cf2ef5c02199a114be60a3", + "sha256:bfb16f1978be69fdee39b692fe639b5f9c430d33843d282889a59e61ae132051" ], "index": "pypi", - "version": "==1.26.97" + "version": "==1.26.116" }, "botocore": { "hashes": [ - "sha256:0df677eb2bef3ba18ac69e007633559b4426df310eee99df9882437b5faf498a", - "sha256:176740221714c0f031c2cd773879df096dbc0f977c63b3e2ed6a956205f02e82" + "sha256:907dec71437386867000912c2427845f482feef5327e7c659e3e81766aac3d34", + "sha256:c058baa1d374111ad2036e1f7d9fe715571b6d66d180a224208fc7fef9bc3c80" ], "markers": "python_version >= '3.7'", - "version": "==1.29.97" + "version": "==1.29.116" }, "certifi": { "hashes": [ @@ -542,89 +534,85 @@ "toml" ], "hashes": [ - "sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d", - "sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4", - "sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e", - "sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab", - "sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90", - "sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6", - "sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731", - "sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540", - "sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2", - "sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292", - "sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5", - "sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b", - "sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2", - "sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0", - "sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57", - "sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3", - "sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140", - "sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84", - "sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988", - "sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67", - "sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d", - "sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2", - "sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5", - "sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9", - "sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8", - "sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd", - "sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6", - "sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be", - "sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88", - "sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25", - "sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137", - "sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968", - "sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9", - "sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef", - "sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54", - "sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512", - "sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005", - "sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f", - "sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149", - "sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d", - "sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8", - "sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7", - "sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5", - "sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016", - "sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69", - "sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212", - "sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc", - "sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8", - "sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d", - "sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd", - "sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169" + "sha256:06ddd9c0249a0546997fdda5a30fbcb40f23926df0a874a60a8a185bc3a87d93", + "sha256:0743b0035d4b0e32bc1df5de70fba3059662ace5b9a2a86a9f894cfe66569013", + "sha256:0f3736a5d34e091b0a611964c6262fd68ca4363df56185902528f0b75dbb9c1f", + "sha256:1127b16220f7bfb3f1049ed4a62d26d81970a723544e8252db0efde853268e21", + "sha256:172db976ae6327ed4728e2507daf8a4de73c7cc89796483e0a9198fd2e47b462", + "sha256:182eb9ac3f2b4874a1f41b78b87db20b66da6b9cdc32737fbbf4fea0c35b23fc", + "sha256:1bb1e77a9a311346294621be905ea8a2c30d3ad371fc15bb72e98bfcfae532df", + "sha256:1fd78b911aea9cec3b7e1e2622c8018d51c0d2bbcf8faaf53c2497eb114911c1", + "sha256:20d1a2a76bb4eb00e4d36b9699f9b7aba93271c9c29220ad4c6a9581a0320235", + "sha256:21b154aba06df42e4b96fc915512ab39595105f6c483991287021ed95776d934", + "sha256:2c2e58e45fe53fab81f85474e5d4d226eeab0f27b45aa062856c89389da2f0d9", + "sha256:2c3b2803e730dc2797a017335827e9da6da0e84c745ce0f552e66400abdfb9a1", + "sha256:3146b8e16fa60427e03884301bf8209221f5761ac754ee6b267642a2fd354c48", + "sha256:344e714bd0fe921fc72d97404ebbdbf9127bac0ca1ff66d7b79efc143cf7c0c4", + "sha256:387065e420aed3c71b61af7e82c7b6bc1c592f7e3c7a66e9f78dd178699da4fe", + "sha256:3f04becd4fcda03c0160d0da9c8f0c246bc78f2f7af0feea1ec0930e7c93fa4a", + "sha256:4a42e1eff0ca9a7cb7dc9ecda41dfc7cbc17cb1d02117214be0561bd1134772b", + "sha256:4ea748802cc0de4de92ef8244dd84ffd793bd2e7be784cd8394d557a3c751e21", + "sha256:55416d7385774285b6e2a5feca0af9652f7f444a4fa3d29d8ab052fafef9d00d", + "sha256:5d0391fb4cfc171ce40437f67eb050a340fdbd0f9f49d6353a387f1b7f9dd4fa", + "sha256:63cdeaac4ae85a179a8d6bc09b77b564c096250d759eed343a89d91bce8b6367", + "sha256:72fcae5bcac3333a4cf3b8f34eec99cea1187acd55af723bcbd559adfdcb5535", + "sha256:7c4ed4e9f3b123aa403ab424430b426a1992e6f4c8fd3cb56ea520446e04d152", + "sha256:83957d349838a636e768251c7e9979e899a569794b44c3728eaebd11d848e58e", + "sha256:87ecc7c9a1a9f912e306997ffee020297ccb5ea388421fe62a2a02747e4d5539", + "sha256:8f69770f5ca1994cb32c38965e95f57504d3aea96b6c024624fdd5bb1aa494a1", + "sha256:8f6c930fd70d91ddee53194e93029e3ef2aabe26725aa3c2753df057e296b925", + "sha256:965ee3e782c7892befc25575fa171b521d33798132692df428a09efacaffe8d0", + "sha256:974bc90d6f6c1e59ceb1516ab00cf1cdfbb2e555795d49fa9571d611f449bcb2", + "sha256:981b4df72c93e3bc04478153df516d385317628bd9c10be699c93c26ddcca8ab", + "sha256:aa784405f0c640940595fa0f14064d8e84aff0b0f762fa18393e2760a2cf5841", + "sha256:ae7863a1d8db6a014b6f2ff9c1582ab1aad55a6d25bac19710a8df68921b6e30", + "sha256:aeae2aa38395b18106e552833f2a50c27ea0000122bde421c31d11ed7e6f9c91", + "sha256:b2317d5ed777bf5a033e83d4f1389fd4ef045763141d8f10eb09a7035cee774c", + "sha256:be19931a8dcbe6ab464f3339966856996b12a00f9fe53f346ab3be872d03e257", + "sha256:be9824c1c874b73b96288c6d3de793bf7f3a597770205068c6163ea1f326e8b9", + "sha256:c0045f8f23a5fb30b2eb3b8a83664d8dc4fb58faddf8155d7109166adb9f2040", + "sha256:c86bd45d1659b1ae3d0ba1909326b03598affbc9ed71520e0ff8c31a993ad911", + "sha256:ca0f34363e2634deffd390a0fef1aa99168ae9ed2af01af4a1f5865e362f8623", + "sha256:d298c2815fa4891edd9abe5ad6e6cb4207104c7dd9fd13aea3fdebf6f9b91259", + "sha256:d2a3a6146fe9319926e1d477842ca2a63fe99af5ae690b1f5c11e6af074a6b5c", + "sha256:dfd393094cd82ceb9b40df4c77976015a314b267d498268a076e940fe7be6b79", + "sha256:e58c0d41d336569d63d1b113bd573db8363bc4146f39444125b7f8060e4e04f5", + "sha256:ea3f5bc91d7d457da7d48c7a732beaf79d0c8131df3ab278e6bba6297e23c6c4", + "sha256:ea53151d87c52e98133eb8ac78f1206498c015849662ca8dc246255265d9c3c4", + "sha256:eb0edc3ce9760d2f21637766c3aa04822030e7451981ce569a1b3456b7053f22", + "sha256:f649dd53833b495c3ebd04d6eec58479454a1784987af8afb77540d6c1767abd", + "sha256:f760073fcf8f3d6933178d67754f4f2d4e924e321f4bb0dcef0424ca0215eba1", + "sha256:fa546d66639d69aa967bf08156eb8c9d0cd6f6de84be9e8c9819f52ad499c910", + "sha256:fd214917cabdd6f673a29d708574e9fbdb892cb77eb426d0eae3490d95ca7859", + "sha256:fff5aaa6becf2c6a1699ae6a39e2e6fb0672c2d42eca8eb0cafa91cf2e9bd312" ], "markers": "python_version >= '3.7'", - "version": "==7.2.2" + "version": "==7.2.3" }, "cryptography": { "hashes": [ - "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1", - "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7", - "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06", - "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84", - "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915", - "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074", - "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5", - "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3", - "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9", - "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3", - "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011", - "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536", - "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a", - "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f", - "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480", - "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac", - "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0", - "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108", - "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828", - "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354", - "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612", - "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3", - "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97" + "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", + "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", + "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", + "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", + "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", + "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", + "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", + "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", + "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", + "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", + "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", + "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", + "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", + "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", + "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", + "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", + "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", + "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", + "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" ], "markers": "python_version >= '3.6'", - "version": "==39.0.2" + "version": "==40.0.2" }, "exceptiongroup": { "hashes": [ @@ -740,19 +728,19 @@ }, "moto": { "hashes": [ - "sha256:363577f7a0cdf639852420f6ba5caa9aa3c90a688feae6315f8ee4bf324b8c27", - "sha256:63542b7b9f307b00fae460b42d15cf9346de3ad3b1287fba38fc68f3c05e4da4" + "sha256:56de986179f79920f59243bc532e03a7039d24a5ee5aec2eb3b666dcd23d6262", + "sha256:fb9a7615f744da4ea7f154ff8e79782b19781344a6356ca4c0d6217c1237d379" ], "index": "pypi", - "version": "==4.1.5" + "version": "==4.1.7" }, "packaging": { "hashes": [ - "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", - "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" ], "markers": "python_version >= '3.7'", - "version": "==23.0" + "version": "==23.1" }, "pluggy": { "hashes": [ @@ -795,11 +783,11 @@ }, "pytest": { "hashes": [ - "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e", - "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4" + "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362", + "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3" ], "index": "pypi", - "version": "==7.2.2" + "version": "==7.3.1" }, "pytest-cov": { "hashes": [ @@ -921,10 +909,10 @@ }, "types-pyyaml": { "hashes": [ - "sha256:19304869a89d49af00be681e7b267414df213f4eb89634c4495fa62e8f942b9f", - "sha256:5314a4b2580999b2ea06b2e5f9a7763d860d6e09cdf21c0e9561daa9cbd60178" + "sha256:5aed5aa66bd2d2e158f75dda22b059570ede988559f030cf294871d3b647e3e8", + "sha256:c51b1bd6d99ddf0aa2884a7a328810ebf70a4262c292195d3f4f9a0005f9eeb6" ], - "version": "==6.0.12.8" + "version": "==6.0.12.9" }, "urllib3": { "hashes": [ diff --git a/lambda/check-view-security-option/Pipfile.lock b/lambda/check-view-security-option/Pipfile.lock index 91874a55..3aa17556 100644 --- a/lambda/check-view-security-option/Pipfile.lock +++ b/lambda/check-view-security-option/Pipfile.lock @@ -43,19 +43,19 @@ }, "boto3": { "hashes": [ - "sha256:19762b6a1adbe1963e26b8280211ca148017c970a2e1386312a9fc8a0a17dbd5", - "sha256:367a73c1ff04517849d8c4177fd775da2e258a3912ff6a497be258c30f509046" + "sha256:40d6fb099f7e6041ddcc72aadc37d2eaae6f32d1f7cf2ef5c02199a114be60a3", + "sha256:bfb16f1978be69fdee39b692fe639b5f9c430d33843d282889a59e61ae132051" ], "index": "pypi", - "version": "==1.26.97" + "version": "==1.26.116" }, "botocore": { "hashes": [ - "sha256:0df677eb2bef3ba18ac69e007633559b4426df310eee99df9882437b5faf498a", - "sha256:176740221714c0f031c2cd773879df096dbc0f977c63b3e2ed6a956205f02e82" + "sha256:907dec71437386867000912c2427845f482feef5327e7c659e3e81766aac3d34", + "sha256:c058baa1d374111ad2036e1f7d9fe715571b6d66d180a224208fc7fef9bc3c80" ], "markers": "python_version >= '3.7'", - "version": "==1.29.97" + "version": "==1.29.116" }, "cffi": { "hashes": [ @@ -128,32 +128,28 @@ }, "cryptography": { "hashes": [ - "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1", - "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7", - "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06", - "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84", - "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915", - "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074", - "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5", - "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3", - "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9", - "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3", - "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011", - "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536", - "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a", - "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f", - "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480", - "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac", - "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0", - "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108", - "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828", - "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354", - "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612", - "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3", - "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97" + "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", + "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", + "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", + "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", + "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", + "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", + "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", + "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", + "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", + "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", + "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", + "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", + "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", + "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", + "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", + "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", + "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", + "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", + "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" ], "index": "pypi", - "version": "==39.0.2" + "version": "==40.0.2" }, "jmespath": { "hashes": [ @@ -172,11 +168,11 @@ }, "pymysql": { "hashes": [ - "sha256:41fc3a0c5013d5f039639442321185532e3e2c8924687abe6537de157d403641", - "sha256:816927a350f38d56072aeca5dfb10221fe1dc653745853d30a216637f5d7ad36" + "sha256:3dda943ef3694068a75d69d071755dbecacee1adf9a1fc5b206830d2b67d25e8", + "sha256:89fc6ae41c0aeb6e1f7710cdd623702ea2c54d040565767a78b00a5ebb12f4e5" ], "index": "pypi", - "version": "==1.0.2" + "version": "==1.0.3" }, "python-dateutil": { "hashes": [ From e312b14269672768b2aaf59cff7f24d75a816f22 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 9 May 2023 14:01:40 +0900 Subject: [PATCH 07/90] =?UTF-8?q?feat:=20=E9=A0=85=E7=9B=AE=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/crm/object_info/crm_object_list_diff.json | 10 ++++++++-- s3/data/crm/settings/CRM_Event.txt | 4 ++-- s3/data/crm/settings/CRM_Suggestion_vod__c.txt | 4 ++-- s3/data/crm/settings/CRM_Task.txt | 4 ++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/s3/config/crm/object_info/crm_object_list_diff.json b/s3/config/crm/object_info/crm_object_list_diff.json index 9dd9f14a..f6a7d9c7 100644 --- a/s3/config/crm/object_info/crm_object_list_diff.json +++ b/s3/config/crm/object_info/crm_object_list_diff.json @@ -3018,6 +3018,8 @@ "SystemModstamp", "MayEdit", "IsLocked", + "LastViewedDate", + "LastReferencedDate", "Account_Priority_Score_vod__c", "Account_vod__c", "Action_Count_vod__c", @@ -3047,6 +3049,8 @@ "Suggestion_External_Id_vod__c", "Suppress_Reason_vod__c", "Title_vod__c", + "Suggestion_Survey_vod__c", + "Category_vod__c", "MSJ_Reason_unformatted__c", "MSJ_Data_Id__c", "MSJ_reason_id__c" @@ -3170,7 +3174,8 @@ "MSJ_Reason_ID__c", "MSJ_Task_External_Id__c", "MSJ_Task_Source__c", - "MSJ_Visit_Type__c" + "MSJ_Visit_Type__c", + "User_ID__c" ], "is_skip": false, "is_update_last_fetch_datetime": true @@ -3227,7 +3232,8 @@ "MSJ_Reason_ID__c", "MSJ_Task_External_Id__c", "MSJ_Task_Source__c", - "MSJ_Visit_Type__c" + "MSJ_Visit_Type__c", + "User_ID__c" ], "is_skip": false, "is_update_last_fetch_datetime": true diff --git a/s3/data/crm/settings/CRM_Event.txt b/s3/data/crm/settings/CRM_Event.txt index ed6c978e..eab91799 100644 --- a/s3/data/crm/settings/CRM_Event.txt +++ b/s3/data/crm/settings/CRM_Event.txt @@ -5,8 +5,8 @@ utf-8 CRLF 1 59 -Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c -Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c src02.crm_Event org02.crm_Event diff --git a/s3/data/crm/settings/CRM_Suggestion_vod__c.txt b/s3/data/crm/settings/CRM_Suggestion_vod__c.txt index 0b819bda..29bd67a6 100644 --- a/s3/data/crm/settings/CRM_Suggestion_vod__c.txt +++ b/s3/data/crm/settings/CRM_Suggestion_vod__c.txt @@ -5,8 +5,8 @@ utf-8 CRLF 1 44 -Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c -Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c +Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,Suggestion_Survey_vod__c,Category_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c +Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,Suggestion_Survey_vod__c,Category_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c src02.crm_Suggestion_vod__c org02.crm_Suggestion_vod__c diff --git a/s3/data/crm/settings/CRM_Task.txt b/s3/data/crm/settings/CRM_Task.txt index 45e1735b..7802e65f 100644 --- a/s3/data/crm/settings/CRM_Task.txt +++ b/s3/data/crm/settings/CRM_Task.txt @@ -5,8 +5,8 @@ utf-8 CRLF 1 50 -Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c -Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c src02.crm_Task org02.crm_Task From daede1cb617dce353207c0a6a582a41433842c22 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 9 May 2023 15:48:56 +0900 Subject: [PATCH 08/90] =?UTF-8?q?fix:=20=E9=A0=85=E7=9B=AE=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3=E6=BC=8F=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/crm/settings/CRM_Event.txt | 2 +- s3/data/crm/settings/CRM_Task.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/s3/data/crm/settings/CRM_Event.txt b/s3/data/crm/settings/CRM_Event.txt index eab91799..dc25267f 100644 --- a/s3/data/crm/settings/CRM_Event.txt +++ b/s3/data/crm/settings/CRM_Event.txt @@ -4,7 +4,7 @@ utf-8 " CRLF 1 -59 +60 Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c src02.crm_Event diff --git a/s3/data/crm/settings/CRM_Task.txt b/s3/data/crm/settings/CRM_Task.txt index 7802e65f..29aa0f0a 100644 --- a/s3/data/crm/settings/CRM_Task.txt +++ b/s3/data/crm/settings/CRM_Task.txt @@ -4,7 +4,7 @@ utf-8 " CRLF 1 -50 +51 Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c src02.crm_Task From aed483161aeeb9653d1dee0a3ce19363afcede38 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 9 May 2023 16:04:48 +0900 Subject: [PATCH 09/90] =?UTF-8?q?fix:=20Suggestion=E3=81=AE=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=82=82=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/data/crm/settings/CRM_Suggestion_vod__c.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3/data/crm/settings/CRM_Suggestion_vod__c.txt b/s3/data/crm/settings/CRM_Suggestion_vod__c.txt index 29bd67a6..96ab5c78 100644 --- a/s3/data/crm/settings/CRM_Suggestion_vod__c.txt +++ b/s3/data/crm/settings/CRM_Suggestion_vod__c.txt @@ -4,7 +4,7 @@ utf-8 " CRLF 1 -44 +48 Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,Suggestion_Survey_vod__c,Category_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Priority_Score_vod__c,Account_vod__c,Action_Count_vod__c,Actioned_vod__c,Call_Objective_CLM_ID_vod__c,Call_Objective_From_Date_vod__c,Call_Objective_On_By_Default_vod__c,Call_Objective_Record_Type_vod__c,Call_Objective_To_Date_vod__c,Dismiss_Count_vod__c,Dismissed_vod__c,Display_Dismiss_vod__c,Display_Mark_As_Complete_vod__c,Display_Score_vod__c,Email_Template_ID_vod__c,Email_Template_Vault_ID_vod__c,Email_Template_vod__c,Expiration_Date_vod__c,Mark_Complete_Count_vod__c,Marked_As_Complete_vod__c,No_Homepage_vod__c,Planned_Call_Date_vod__c,Posted_Date_vod__c,Priority_vod__c,Reason_vod__c,Record_Type_Name_vod__c,Suggestion_External_Id_vod__c,Suppress_Reason_vod__c,Title_vod__c,Suggestion_Survey_vod__c,Category_vod__c,MSJ_Reason_unformatted__c,MSJ_Data_Id__c,MSJ_reason_id__c src02.crm_Suggestion_vod__c From f2657409c23e8846c09d392dd497cacd6924b089 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 18 May 2023 10:34:55 +0900 Subject: [PATCH 10/90] =?UTF-8?q?feat:=202023=E5=B9=B45=E6=9C=88=E3=81=AE?= =?UTF-8?q?=E8=84=86=E5=BC=B1=E6=80=A7=E3=82=B9=E3=82=AD=E3=83=A3=E3=83=B3?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/Pipfile.lock | 899 ++++++++++-------- .../check-view-security-option/Pipfile.lock | 18 +- 2 files changed, 505 insertions(+), 412 deletions(-) diff --git a/ecs/crm-datafetch/Pipfile.lock b/ecs/crm-datafetch/Pipfile.lock index 0e05bb05..53cba0b7 100644 --- a/ecs/crm-datafetch/Pipfile.lock +++ b/ecs/crm-datafetch/Pipfile.lock @@ -26,350 +26,27 @@ }, "boto3": { "hashes": [ - "sha256:40d6fb099f7e6041ddcc72aadc37d2eaae6f32d1f7cf2ef5c02199a114be60a3", - "sha256:bfb16f1978be69fdee39b692fe639b5f9c430d33843d282889a59e61ae132051" + "sha256:23523d5d6aa51bba2461d67f6eb458d83b6a52d18e3d953b1ce71209b66462ec", + "sha256:ba7ca9215a1026620741273da10d0d3cceb9f7649f7c101e616a287071826f9d" ], "index": "pypi", - "version": "==1.26.116" + "version": "==1.26.135" }, "botocore": { "hashes": [ - "sha256:907dec71437386867000912c2427845f482feef5327e7c659e3e81766aac3d34", - "sha256:c058baa1d374111ad2036e1f7d9fe715571b6d66d180a224208fc7fef9bc3c80" + "sha256:06502a4473924ef60ac0de908385a5afab9caee6c5b49cf6a330fab0d76ddf5f", + "sha256:0c61d4e5e04fe5329fa65da6b31492ef9d0d5174d72fc2af69de2ed0f87804ca" ], "markers": "python_version >= '3.7'", - "version": "==1.29.116" + "version": "==1.29.135" }, "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", + "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" - }, - "charset-normalizer": { - "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" - }, - "idna": { - "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - ], - "markers": "python_version >= '3.5'", - "version": "==3.4" - }, - "isodate": { - "hashes": [ - "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96", - "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9" - ], - "version": "==0.6.1" - }, - "jmespath": { - "hashes": [ - "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", - "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" - ], - "markers": "python_version >= '3.7'", - "version": "==1.0.1" - }, - "lxml": { - "hashes": [ - "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7", - "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726", - "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03", - "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140", - "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a", - "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05", - "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03", - "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419", - "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4", - "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e", - "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67", - "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50", - "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894", - "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf", - "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947", - "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1", - "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd", - "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3", - "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92", - "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3", - "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457", - "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74", - "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf", - "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1", - "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4", - "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975", - "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5", - "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe", - "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7", - "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1", - "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2", - "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409", - "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f", - "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f", - "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5", - "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24", - "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e", - "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4", - "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a", - "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c", - "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de", - "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f", - "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b", - "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5", - "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7", - "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a", - "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c", - "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9", - "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e", - "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab", - "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941", - "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5", - "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45", - "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7", - "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892", - "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746", - "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c", - "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53", - "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe", - "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184", - "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38", - "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df", - "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9", - "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b", - "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2", - "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0", - "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda", - "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b", - "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5", - "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380", - "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33", - "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8", - "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1", - "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889", - "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9", - "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f", - "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==4.9.2" - }, - "platformdirs": { - "hashes": [ - "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08", - "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e" - ], - "markers": "python_version >= '3.7'", - "version": "==3.2.0" - }, - "pyjwt": { - "hashes": [ - "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd", - "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14" - ], - "markers": "python_version >= '3.7'", - "version": "==2.6.0" - }, - "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" - }, - "pytz": { - "hashes": [ - "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", - "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" - ], - "version": "==2023.3" - }, - "requests": { - "hashes": [ - "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", - "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.28.2" - }, - "requests-file": { - "hashes": [ - "sha256:07d74208d3389d01c38ab89ef403af0cfec63957d53a0081d8eca738d0247d8e", - "sha256:dfe5dae75c12481f68ba353183c53a65e6044c923e64c24b2209f6c7570ca953" - ], - "version": "==1.5.1" - }, - "requests-toolbelt": { - "hashes": [ - "sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7", - "sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.1" - }, - "s3transfer": { - "hashes": [ - "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd", - "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947" - ], - "markers": "python_version >= '3.7'", - "version": "==0.6.0" - }, - "simple-salesforce": { - "hashes": [ - "sha256:e46306bb9820fe3036c8873a6ee6b806be9471cca1b454ae24c585784a64b20b", - "sha256:ff4ca9ae31d1f378fb0dce6e222b91ab6254d3dd5b0062c137822a822517e189" - ], - "index": "pypi", - "version": "==1.12.3" - }, - "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" - }, - "tenacity": { - "hashes": [ - "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0", - "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0" - ], - "index": "pypi", - "version": "==8.2.2" - }, - "urllib3": { - "hashes": [ - "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", - "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.15" - }, - "zeep": { - "hashes": [ - "sha256:6754feb4c34a4b6d65fbc359252bf6654dcce3937bf1d95aae4402a60a8f5939", - "sha256:72093acfdb1d8360ed400869b73fbf1882b95c4287f798084c42ee0c1ff0e425" - ], - "markers": "python_version >= '3.7'", - "version": "==4.2.1" - } - }, - "develop": { - "autopep8": { - "hashes": [ - "sha256:86e9303b5e5c8160872b2f5ef611161b2893e9bfe8ccc7e2f76385947d57a2f1", - "sha256:f9849cdd62108cb739dbcdbfb7fdcc9a30d1b63c4cc3e1c1f893b5360941b61c" - ], - "index": "pypi", - "version": "==2.0.2" - }, - "boto3": { - "hashes": [ - "sha256:40d6fb099f7e6041ddcc72aadc37d2eaae6f32d1f7cf2ef5c02199a114be60a3", - "sha256:bfb16f1978be69fdee39b692fe639b5f9c430d33843d282889a59e61ae132051" - ], - "index": "pypi", - "version": "==1.26.116" - }, - "botocore": { - "hashes": [ - "sha256:907dec71437386867000912c2427845f482feef5327e7c659e3e81766aac3d34", - "sha256:c058baa1d374111ad2036e1f7d9fe715571b6d66d180a224208fc7fef9bc3c80" - ], - "markers": "python_version >= '3.7'", - "version": "==1.29.116" - }, - "certifi": { - "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" - ], - "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2023.5.7" }, "cffi": { "hashes": [ @@ -521,73 +198,489 @@ "markers": "python_full_version >= '3.7.0'", "version": "==3.1.0" }, - "colorama": { + "cryptography": { "hashes": [ - "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", - "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", + "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", + "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", + "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", + "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", + "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", + "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", + "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", + "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", + "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", + "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", + "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", + "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", + "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", + "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", + "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", + "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", + "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", + "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" ], - "markers": "sys_platform == 'win32'", - "version": "==0.4.6" + "markers": "python_version >= '3.6'", + "version": "==40.0.2" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "isodate": { + "hashes": [ + "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96", + "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9" + ], + "version": "==0.6.1" + }, + "jmespath": { + "hashes": [ + "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", + "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" + ], + "markers": "python_version >= '3.7'", + "version": "==1.0.1" + }, + "lxml": { + "hashes": [ + "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7", + "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726", + "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03", + "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140", + "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a", + "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05", + "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03", + "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419", + "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4", + "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e", + "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67", + "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50", + "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894", + "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf", + "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947", + "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1", + "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd", + "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3", + "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92", + "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3", + "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457", + "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74", + "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf", + "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1", + "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4", + "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975", + "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5", + "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe", + "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7", + "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1", + "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2", + "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409", + "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f", + "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f", + "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5", + "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24", + "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e", + "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4", + "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a", + "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c", + "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de", + "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f", + "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b", + "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5", + "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7", + "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a", + "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c", + "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9", + "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e", + "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab", + "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941", + "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5", + "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45", + "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7", + "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892", + "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746", + "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c", + "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53", + "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe", + "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184", + "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38", + "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df", + "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9", + "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b", + "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2", + "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0", + "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda", + "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b", + "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5", + "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380", + "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33", + "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8", + "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1", + "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889", + "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9", + "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f", + "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==4.9.2" + }, + "platformdirs": { + "hashes": [ + "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f", + "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5" + ], + "markers": "python_version >= '3.7'", + "version": "==3.5.1" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, + "pyjwt": { + "hashes": [ + "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1", + "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074" + ], + "markers": "python_version >= '3.7'", + "version": "==2.7.0" + }, + "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" + }, + "pytz": { + "hashes": [ + "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", + "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" + ], + "version": "==2023.3" + }, + "requests": { + "hashes": [ + "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294", + "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4" + ], + "markers": "python_version >= '3.7'", + "version": "==2.30.0" + }, + "requests-file": { + "hashes": [ + "sha256:07d74208d3389d01c38ab89ef403af0cfec63957d53a0081d8eca738d0247d8e", + "sha256:dfe5dae75c12481f68ba353183c53a65e6044c923e64c24b2209f6c7570ca953" + ], + "version": "==1.5.1" + }, + "requests-toolbelt": { + "hashes": [ + "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.0.0" + }, + "s3transfer": { + "hashes": [ + "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346", + "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9" + ], + "markers": "python_version >= '3.7'", + "version": "==0.6.1" + }, + "simple-salesforce": { + "hashes": [ + "sha256:87f1ac1363987ebf9b7a66ac9e7395534ec3f5a9545e08b664cb695dc085b1ac", + "sha256:e9205f8041226c8273f020448c7fbd37999d481d25edd67f9bf86dc159cd3939" + ], + "index": "pypi", + "version": "==1.12.4" + }, + "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" + }, + "tenacity": { + "hashes": [ + "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0", + "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0" + ], + "index": "pypi", + "version": "==8.2.2" + }, + "urllib3": { + "hashes": [ + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.15" + }, + "zeep": { + "hashes": [ + "sha256:6754feb4c34a4b6d65fbc359252bf6654dcce3937bf1d95aae4402a60a8f5939", + "sha256:72093acfdb1d8360ed400869b73fbf1882b95c4287f798084c42ee0c1ff0e425" + ], + "markers": "python_version >= '3.7'", + "version": "==4.2.1" + } + }, + "develop": { + "autopep8": { + "hashes": [ + "sha256:86e9303b5e5c8160872b2f5ef611161b2893e9bfe8ccc7e2f76385947d57a2f1", + "sha256:f9849cdd62108cb739dbcdbfb7fdcc9a30d1b63c4cc3e1c1f893b5360941b61c" + ], + "index": "pypi", + "version": "==2.0.2" + }, + "boto3": { + "hashes": [ + "sha256:23523d5d6aa51bba2461d67f6eb458d83b6a52d18e3d953b1ce71209b66462ec", + "sha256:ba7ca9215a1026620741273da10d0d3cceb9f7649f7c101e616a287071826f9d" + ], + "index": "pypi", + "version": "==1.26.135" + }, + "botocore": { + "hashes": [ + "sha256:06502a4473924ef60ac0de908385a5afab9caee6c5b49cf6a330fab0d76ddf5f", + "sha256:0c61d4e5e04fe5329fa65da6b31492ef9d0d5174d72fc2af69de2ed0f87804ca" + ], + "markers": "python_version >= '3.7'", + "version": "==1.29.135" + }, + "certifi": { + "hashes": [ + "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", + "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.5.7" + }, + "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" + }, + "charset-normalizer": { + "hashes": [ + "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", + "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", + "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", + "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", + "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", + "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", + "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", + "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", + "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", + "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", + "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", + "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", + "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", + "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", + "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", + "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", + "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", + "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", + "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", + "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", + "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", + "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", + "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", + "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", + "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", + "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", + "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", + "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", + "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", + "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", + "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", + "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", + "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", + "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", + "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", + "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", + "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", + "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", + "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", + "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", + "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", + "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", + "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", + "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", + "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", + "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", + "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", + "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", + "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", + "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", + "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", + "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", + "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", + "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", + "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", + "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", + "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", + "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", + "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", + "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", + "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", + "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", + "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", + "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", + "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", + "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", + "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", + "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", + "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", + "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", + "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", + "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", + "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", + "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", + "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.1.0" }, "coverage": { "extras": [ "toml" ], "hashes": [ - "sha256:06ddd9c0249a0546997fdda5a30fbcb40f23926df0a874a60a8a185bc3a87d93", - "sha256:0743b0035d4b0e32bc1df5de70fba3059662ace5b9a2a86a9f894cfe66569013", - "sha256:0f3736a5d34e091b0a611964c6262fd68ca4363df56185902528f0b75dbb9c1f", - "sha256:1127b16220f7bfb3f1049ed4a62d26d81970a723544e8252db0efde853268e21", - "sha256:172db976ae6327ed4728e2507daf8a4de73c7cc89796483e0a9198fd2e47b462", - "sha256:182eb9ac3f2b4874a1f41b78b87db20b66da6b9cdc32737fbbf4fea0c35b23fc", - "sha256:1bb1e77a9a311346294621be905ea8a2c30d3ad371fc15bb72e98bfcfae532df", - "sha256:1fd78b911aea9cec3b7e1e2622c8018d51c0d2bbcf8faaf53c2497eb114911c1", - "sha256:20d1a2a76bb4eb00e4d36b9699f9b7aba93271c9c29220ad4c6a9581a0320235", - "sha256:21b154aba06df42e4b96fc915512ab39595105f6c483991287021ed95776d934", - "sha256:2c2e58e45fe53fab81f85474e5d4d226eeab0f27b45aa062856c89389da2f0d9", - "sha256:2c3b2803e730dc2797a017335827e9da6da0e84c745ce0f552e66400abdfb9a1", - "sha256:3146b8e16fa60427e03884301bf8209221f5761ac754ee6b267642a2fd354c48", - "sha256:344e714bd0fe921fc72d97404ebbdbf9127bac0ca1ff66d7b79efc143cf7c0c4", - "sha256:387065e420aed3c71b61af7e82c7b6bc1c592f7e3c7a66e9f78dd178699da4fe", - "sha256:3f04becd4fcda03c0160d0da9c8f0c246bc78f2f7af0feea1ec0930e7c93fa4a", - "sha256:4a42e1eff0ca9a7cb7dc9ecda41dfc7cbc17cb1d02117214be0561bd1134772b", - "sha256:4ea748802cc0de4de92ef8244dd84ffd793bd2e7be784cd8394d557a3c751e21", - "sha256:55416d7385774285b6e2a5feca0af9652f7f444a4fa3d29d8ab052fafef9d00d", - "sha256:5d0391fb4cfc171ce40437f67eb050a340fdbd0f9f49d6353a387f1b7f9dd4fa", - "sha256:63cdeaac4ae85a179a8d6bc09b77b564c096250d759eed343a89d91bce8b6367", - "sha256:72fcae5bcac3333a4cf3b8f34eec99cea1187acd55af723bcbd559adfdcb5535", - "sha256:7c4ed4e9f3b123aa403ab424430b426a1992e6f4c8fd3cb56ea520446e04d152", - "sha256:83957d349838a636e768251c7e9979e899a569794b44c3728eaebd11d848e58e", - "sha256:87ecc7c9a1a9f912e306997ffee020297ccb5ea388421fe62a2a02747e4d5539", - "sha256:8f69770f5ca1994cb32c38965e95f57504d3aea96b6c024624fdd5bb1aa494a1", - "sha256:8f6c930fd70d91ddee53194e93029e3ef2aabe26725aa3c2753df057e296b925", - "sha256:965ee3e782c7892befc25575fa171b521d33798132692df428a09efacaffe8d0", - "sha256:974bc90d6f6c1e59ceb1516ab00cf1cdfbb2e555795d49fa9571d611f449bcb2", - "sha256:981b4df72c93e3bc04478153df516d385317628bd9c10be699c93c26ddcca8ab", - "sha256:aa784405f0c640940595fa0f14064d8e84aff0b0f762fa18393e2760a2cf5841", - "sha256:ae7863a1d8db6a014b6f2ff9c1582ab1aad55a6d25bac19710a8df68921b6e30", - "sha256:aeae2aa38395b18106e552833f2a50c27ea0000122bde421c31d11ed7e6f9c91", - "sha256:b2317d5ed777bf5a033e83d4f1389fd4ef045763141d8f10eb09a7035cee774c", - "sha256:be19931a8dcbe6ab464f3339966856996b12a00f9fe53f346ab3be872d03e257", - "sha256:be9824c1c874b73b96288c6d3de793bf7f3a597770205068c6163ea1f326e8b9", - "sha256:c0045f8f23a5fb30b2eb3b8a83664d8dc4fb58faddf8155d7109166adb9f2040", - "sha256:c86bd45d1659b1ae3d0ba1909326b03598affbc9ed71520e0ff8c31a993ad911", - "sha256:ca0f34363e2634deffd390a0fef1aa99168ae9ed2af01af4a1f5865e362f8623", - "sha256:d298c2815fa4891edd9abe5ad6e6cb4207104c7dd9fd13aea3fdebf6f9b91259", - "sha256:d2a3a6146fe9319926e1d477842ca2a63fe99af5ae690b1f5c11e6af074a6b5c", - "sha256:dfd393094cd82ceb9b40df4c77976015a314b267d498268a076e940fe7be6b79", - "sha256:e58c0d41d336569d63d1b113bd573db8363bc4146f39444125b7f8060e4e04f5", - "sha256:ea3f5bc91d7d457da7d48c7a732beaf79d0c8131df3ab278e6bba6297e23c6c4", - "sha256:ea53151d87c52e98133eb8ac78f1206498c015849662ca8dc246255265d9c3c4", - "sha256:eb0edc3ce9760d2f21637766c3aa04822030e7451981ce569a1b3456b7053f22", - "sha256:f649dd53833b495c3ebd04d6eec58479454a1784987af8afb77540d6c1767abd", - "sha256:f760073fcf8f3d6933178d67754f4f2d4e924e321f4bb0dcef0424ca0215eba1", - "sha256:fa546d66639d69aa967bf08156eb8c9d0cd6f6de84be9e8c9819f52ad499c910", - "sha256:fd214917cabdd6f673a29d708574e9fbdb892cb77eb426d0eae3490d95ca7859", - "sha256:fff5aaa6becf2c6a1699ae6a39e2e6fb0672c2d42eca8eb0cafa91cf2e9bd312" + "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3", + "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a", + "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813", + "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0", + "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a", + "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd", + "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139", + "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b", + "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252", + "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790", + "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045", + "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce", + "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200", + "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718", + "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b", + "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f", + "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5", + "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade", + "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5", + "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a", + "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8", + "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33", + "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e", + "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c", + "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3", + "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969", + "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068", + "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2", + "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771", + "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed", + "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212", + "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614", + "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88", + "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3", + "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c", + "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84", + "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11", + "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1", + "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1", + "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e", + "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1", + "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd", + "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47", + "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a", + "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c", + "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31", + "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5", + "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6", + "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303", + "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5", + "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47" ], "markers": "python_version >= '3.7'", - "version": "==7.2.3" + "version": "==7.2.5" }, "cryptography": { "hashes": [ @@ -728,11 +821,11 @@ }, "moto": { "hashes": [ - "sha256:56de986179f79920f59243bc532e03a7039d24a5ee5aec2eb3b666dcd23d6262", - "sha256:fb9a7615f744da4ea7f154ff8e79782b19781344a6356ca4c0d6217c1237d379" + "sha256:d4bb629686b8b92e480f9784316bd0f379b148a5caee7c07aecbde6033a885e1", + "sha256:d9f5d0e3d027df350ff3552da851644ce192cbf7e7a9e8766fca4b5b6b550df0" ], "index": "pypi", - "version": "==4.1.7" + "version": "==4.1.9" }, "packaging": { "hashes": [ @@ -869,11 +962,11 @@ }, "requests": { "hashes": [ - "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", - "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294", + "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.28.2" + "markers": "python_version >= '3.7'", + "version": "==2.30.0" }, "responses": { "hashes": [ @@ -885,11 +978,11 @@ }, "s3transfer": { "hashes": [ - "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd", - "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947" + "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346", + "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9" ], "markers": "python_version >= '3.7'", - "version": "==0.6.0" + "version": "==0.6.1" }, "six": { "hashes": [ @@ -924,11 +1017,11 @@ }, "werkzeug": { "hashes": [ - "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe", - "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612" + "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", + "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" ], - "markers": "python_version >= '3.7'", - "version": "==2.2.3" + "markers": "python_version >= '3.8'", + "version": "==2.3.4" }, "xmltodict": { "hashes": [ diff --git a/lambda/check-view-security-option/Pipfile.lock b/lambda/check-view-security-option/Pipfile.lock index 3aa17556..0b63764e 100644 --- a/lambda/check-view-security-option/Pipfile.lock +++ b/lambda/check-view-security-option/Pipfile.lock @@ -43,19 +43,19 @@ }, "boto3": { "hashes": [ - "sha256:40d6fb099f7e6041ddcc72aadc37d2eaae6f32d1f7cf2ef5c02199a114be60a3", - "sha256:bfb16f1978be69fdee39b692fe639b5f9c430d33843d282889a59e61ae132051" + "sha256:23523d5d6aa51bba2461d67f6eb458d83b6a52d18e3d953b1ce71209b66462ec", + "sha256:ba7ca9215a1026620741273da10d0d3cceb9f7649f7c101e616a287071826f9d" ], "index": "pypi", - "version": "==1.26.116" + "version": "==1.26.135" }, "botocore": { "hashes": [ - "sha256:907dec71437386867000912c2427845f482feef5327e7c659e3e81766aac3d34", - "sha256:c058baa1d374111ad2036e1f7d9fe715571b6d66d180a224208fc7fef9bc3c80" + "sha256:06502a4473924ef60ac0de908385a5afab9caee6c5b49cf6a330fab0d76ddf5f", + "sha256:0c61d4e5e04fe5329fa65da6b31492ef9d0d5174d72fc2af69de2ed0f87804ca" ], "markers": "python_version >= '3.7'", - "version": "==1.29.116" + "version": "==1.29.135" }, "cffi": { "hashes": [ @@ -184,11 +184,11 @@ }, "s3transfer": { "hashes": [ - "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd", - "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947" + "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346", + "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9" ], "markers": "python_version >= '3.7'", - "version": "==0.6.0" + "version": "==0.6.1" }, "simplejson": { "hashes": [ From 94016f513d9eb9004f9883dbf3db52fac76a8a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 18 May 2023 18:04:16 +0900 Subject: [PATCH 11/90] =?UTF-8?q?feat:=20DCF=E6=96=BD=E8=A8=AD=E7=B5=B1?= =?UTF-8?q?=E5=90=88=E3=83=9E=E3=82=B9=E3=82=BF=E6=97=A5=E6=AC=A1=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=83=90=E3=83=83=E3=83=81(=E9=80=94=E4=B8=AD?= =?UTF-8?q?=E3=81=BE=E3=81=A7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrate_dcf_inst_merge.py | 547 ++++++++++++++++++ 1 file changed, 547 insertions(+) create mode 100644 ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py new file mode 100644 index 00000000..fa6ce77a --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py @@ -0,0 +1,547 @@ +from datetime import datetime, timedelta +from sqlalchemy import CursorResult +from src.batch.batch_functions import logging_sql +from src.batch.common.batch_context import BatchContext +from src.db.database import Database +from src.error.exceptions import BatchOperationException +from src.logging.get_logger import get_logger +from src.time.elapsed_time import ElapsedTime + +logger = get_logger('DCF施設統合マスタ日次更新バッチ') +batch_context = BatchContext.get_instance() + + +def exec(): + db = Database.get_instance() + try: + db.connect() + db.begin() + # + enabled_dst_inst_merge_records = _laundering_enabled_dct_inst_merge(db) + # + _laundering_disabled_dct_inst_merge(db) + # + if len(enabled_dst_inst_merge_records) > 0: + logger.info('') + _add_emp_chg_inst(db, enabled_dst_inst_merge_records) + logger.info('') + _add_ult_ident_presc(db, enabled_dst_inst_merge_records) + db.commit() + # + logger.info('') + except Exception as e: + db.rollback() + raise BatchOperationException(e) + finally: + db.disconnect() + + +def _laundering_enabled_dct_inst_merge(db: Database) -> list[dict]: + # データ取得(無効フラグが『0(有効)』) + valid_dst_inst_merge_records = _select_dct_inst_merge(db, 0, True) + # 移行先DCF施設コードの更新(無効フラグが『0(有効)』) + _update_dcf_inst_merge(db, 0) + # DCF施設統合マスタの過去分の洗い替え + if len(valid_dst_inst_merge_records) == 0: + return + for row in valid_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) + + return valid_dst_inst_merge_records + + +def _laundering_disabled_dct_inst_merge(db: Database): + # データ取得(無効フラグが『1(無効)』) + disabled_dst_inst_merge_records = _select_dct_inst_merge(db, 1, False) + # 移行先DCF施設コードの更新(無効フラグが『1(無効)』) + _update_dcf_inst_merge(db, 1) + # DCF施設統合マスタの過去分の洗い替え + if len(disabled_dst_inst_merge_records) == 0: + return + for row in disabled_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) + + +def _add_ult_ident_presc(db: Database, valid_dst_inst_merge_records: list[dict]): + # + for data_inst_cnt, row in enumerate(valid_dst_inst_merge_records, start=1): + tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) + + ult_ident_presc_records = _select_ult_ident_presc(db, row['dcf_inst_cd'], row['dup_opp_cd']) + for data_cnt, ult_row in enumerate(ult_ident_presc_records, start=1): + logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') + # 処方元コード=重複時相手先コードが発生した場合 + if ult_row['opp_count'] > 0: + break + + start_date = _str_to_date_time(ult_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day + set_start_date = _date_time_to_str(set_start_date) + is_delete_duplicate_key = False + if _count_duplicate_ult_ident_presc(db, set_start_date, ult_row): + _delete_ult_ident_presc(db, set_start_date, ult_row) + is_delete_duplicate_key = True + else: + logger.info('納入先処方元マスタの重複予定データなし') + _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_row) + + if _str_to_date_time(ult_row['end_date']) < start_date: + _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + continue + if not is_delete_duplicate_key: + last_end_date = tekiyo_month_first_day - timedelta(days=1) + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_row) + if start_date > last_end_date: + _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + + +def _delete_ult_ident_presc(db: Database, start_date: str, ult_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + DELETE FROM + src05.ult_ident_presc + WHERE + ta_cd = :ta_cd + AND ult_ident_cd = :ult_ident_cd + AND ratio = :ratio + AND start_date = :set_start_date + """ + params = { + 'ta_cd': ult_row['ta_cd'], + 'ult_ident_cd': ult_row['ult_ident_cd'], + 'ratio': ult_row['ratio'], + 'start_date': start_date + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + + +def _add_emp_chg_inst(db: Database, valid_dst_inst_merge_records: list[dict]): + # + for row in valid_dst_inst_merge_records: + tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) + emp_chg_inst_records = _select_emp_chg_inst(db, row['dcf_inst_cd'], row['dup_opp_cd']) + for emp_row in emp_chg_inst_records: + # 重複時相手先コードが存在したかのチェック + if emp_row['opp_count'] > 0: + break + + start_date = _str_to_date_time(emp_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day + + _insert_emp_chg_inst(db, row['dup_opp_cd'], _date_time_to_str(set_start_date), emp_row) + + if start_date < tekiyo_month_first_day: + last_end_date = tekiyo_month_first_day - timedelta(days=1) + _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_row) + if start_date <= last_end_date: + continue + _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], emp_row['start_date']) + + # if start_date >= tekiyo_month_first_day: + # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) + # continue + # last_end_date = tekiyo_month_first_day - timedelta(days=1) + # _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], last_end_date, emp_row) + # if start_date > last_end_date: + # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) + + +def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.emp_chg_inst + SET + enabled_flg = 'N', + updater = CURRENT_USER(), + update_date = SYSDATE() + WHERE + inst_cd = :dcf_inst_cd + AND ta_cd = :ta_cd + AND start_date = :start_date + """ + params = {'dcf_inst_cd': dcf_inst_cd, 'ta_cd': ta_cd, 'start_date': start_date} + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, emp_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.emp_chg_inst + SET end_date = :end_date, + updater = CURRENT_USER(), + update_date= SYSDATE() + WHERE + inst_cd = :dcf_inst_cd + AND ta_cd = :ta_cd + AND emp_cd = :emp_cd + AND bu_cd = :bu_cd + AND start_date = :start_date + """ + params = { + 'end_date': last_end_date, + 'dcf_inst_cd': dcf_inst_cd, + 'ta_cd': emp_row['ta_cd'], + 'emp_cd': emp_row['emp_cd'], + 'bu_cd': emp_row['bu_cd'], + 'start_date': emp_row['start_date'] + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, emp_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + INSERT INTO + src05.emp_chg_inst( + inst_cd, + ta_cd, + emp_cd, + bu_cd, + start_date, + end_date, + main_chg_flg, + enabled_flg, + creater, + create_date, + updater, + update_date + ) + VALUES( + :dup_opp_cd, + :ta_cd, + :emp_cd, + :bu_cd, + :start_date, + :end_date, + :main_chg_flg, + 'Y', + CURRENT_USER(), + SYSDATE(), + CURRENT_USER(), + SYSDATE() + ) + """ + params = { + 'dup_opp_cd': dup_opp_cd, + 'ta_cd': emp_row['ta_cd'], + 'emp_cd': emp_row['emp_cd'], + 'bu_cd': emp_row['bu_cd'], + 'start_date': set_start_date, + 'end_date': emp_row['end_date'], + 'main_chg_flg': emp_row['main_chg_flg'] if emp_row['main_chg_flg'] is None else None + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'従業員担当施設マスタの追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _select_dct_inst_merge(db: Database, muko_flg: int, is_null_dcf_inst_cd_new: bool): + # + try: + sql = """ + SELECT + dim.dcf_inst_cd, + dim.dup_opp_cd, + dim.tekiyo_month + FROM + src05.dcf_inst_merge AS dim + INNER JOIN + src05.hdke_tbl AS ht + ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') + WHERE + dim.muko_flg =: muko_flg + AND dim.enabled_flg = 'Y' + AND dim.dcf_inst_cd_new <= >: is_null_dcf_inst_cd_new + """ + params = { + 'muko_flg': muko_flg, + 'is_null_dcf_inst_cd_new': None + } + dst_inst_merge_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + + return dst_inst_merge_records + + +def _update_dcf_inst_merge(db: Database, muko_flg: int): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.dcf_inst_merge AS updim + INNER JOIN( + SELECT + dim.dcf_inst_cd AS base_dcf_inst_cd, + dim.dup_opp_cd AS base_dup_opp_cd, + dim.tekiyo_month AS base_tekiyo_month, + dim.muko_flg AS base_muko_flg, + dim.enabled_flg AS base_enabled_flg + FROM + src05.dcf_inst_merge AS dim + INNER JOIN + src05.hdke_tbl AS ht + ON dim.tekiyo_month=DATE_FORMAT(ht.syor_date, '%Y%m') + WHERE + dim.muko_flg= :muko_flg + AND dim.enabled_flg='Y' + AND dim.dcf_inst_cd_new IS {$dcfInstCdNew}NULL + ) AS bf_dim + SET + updim.dcf_inst_cd_new = {column}, + updim.updater = CURRENT_USER(), + updim.update_date = SYSDATE() + WHERE + updim.dcf_inst_cd = base_dcf_inst_cd + AND updim.dup_opp_cd = base_dup_opp_cd + AND updim.tekiyo_month = base_tekiyo_month + AND updim.muko_flg =base_muko_flg + AND updim.enabled_flg =base_enabled_flg + """ + params = { + 'muko_flg': muko_flg + } + res = db.execute(sql.format( + column='base_dup_opp_cd' if muko_flg == 1 else 'NULL' + ), params) + logging_sql(logger, sql) + logger.info(f'DCF施設統合マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.dcf_inst_merge + SET + dcf_inst_cd_new = :dcf_inst_cd_new_after, + updater = CURRENT_USER(), + update_date = SYSDATE() + WHERE + dcf_inst_cd_new = :dcf_inst_cd_new_before + AND enabled_flg = 'Y' + AND muko_flg = 0 + """ + params = {'dcf_inst_cd_new_after': dcf_inst_cd_new_after, 'dcf_inst_cd_new_before': dcf_inst_cd_new_before} + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'移行先DCF施設コードの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_record: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.ult_ident_presc + SET end_date = :end_date, + updater = CURRENT_USER(), + update_date= SYSDATE() + WHERE + ta_cd = :ta_cd + AND ult_ident_cd = :ult_ident_cd + AND ratio = :ratio + AND start_date = :start_date + """ + params = { + 'end_date': last_end_date, + 'ta_cd': ult_ident_presc_record['ta_cd'], + 'ult_ident_cd': ult_ident_presc_record['ult_ident_cd'], + 'ratio': ult_ident_presc_record['ratio'], + 'start_date': ult_ident_presc_record['start_date'] + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'終了日 > 開始月のため適用終了日を更新, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, ult_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + INSERT INTO + src05.ult_ident_presc( + ta_cd, + ult_ident_cd, + ratio, + start_date, + presc_cd, + end_date, + creater, + create_date, + update_date, + updater + ) + VALUES( + :ta_cd, + :ult_ident_cd, + :ratio, + :start_date, + :presc_cd, + :end_date, + CURRENT_USER(), + SYSDATE(), + SYSDATE(), + CURRENT_USER() + ) + """ + params = { + 'ta_cd': ult_row['ta_cd'], + 'ult_ident_cd': ult_row['ult_ident_cd'], + 'ratio': ult_row['ratio'], + 'start_date': set_Start_Date, + 'presc_cd': dup_opp_cd, + 'end_date': ult_row['end_date'] + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'納入先処方元マスタに追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('納入先処方元マスタに追加に失敗') + raise e + + +def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: + # + try: + sql = """ + SELECT + eci.inst_cd, + eci.ta_cd, + eci.emp_cd, + eci.bu_cd, + eci.start_date, + eci.end_date, + eci.main_chg_flg, + eci.enabled_flg, + (SELECT COUNT(eciopp.inst_cd) FROM src05.emp_chg_inst AS eciopp WHERE eciopp.inst_cd = :dup_opp_cd) AS opp_count + FROM + src05.emp_chg_inst AS eci + WHERE + eci.inst_cd = :dcf_inst_cd + AND eci.enabled_flg = 'Y' + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < eci.end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + emp_chg_inst_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + return emp_chg_inst_records + + +def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: + # + try: + sql = """ + SELECT + uip.ta_cd, + uip.ult_ident_cd, + uip.ratio, + uip.start_date, + uip.end_date, + (SELECT COUNT(uipopp.ta_cd) FROM ult_ident_presc AS uipopp WHERE uipopp.presc_cd = :dup_opp_cd) AS opp_count + FROM + src05.ult_ident_presc AS uip + WHERE + uip.presc_cd = '{$dcfInstCd}' + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + ult_ident_presc_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + return ult_ident_presc_records + + +def _count_duplicate_ult_ident_presc(db: Database, set_Start_Date: str, ult_row: CursorResult): + # + try: + sql = """ + SELECT + COUNT(ta_cd) AS cnt + FROM + src05.ult_ident_presc + WHERE + ta_cd = :ta_cd + AND ult_ident_cd = :ult_ident_cd + AND ratio = :ratio + AND start_date = :set_Start_Date + """ + params = { + 'ta_cd': ult_row['ta_cd'], + 'ult_ident_cd': ult_row['ult_ident_cd'], + 'ratio': ult_row['ratio'], + 'start_date': set_Start_Date + } + result = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + return result[0]['cnt'] + + +def _get_first_day_of_month(month_day: str): + return datetime.datetime.strptime(month_day, '%Y%m01') + + +def _str_to_date_time(str_date_time: str): + return datetime.datetime.strptime(str_date_time, '%Y%m%d') + + +def _date_time_to_str(date_time: datetime): + return date_time.strptime('%Y%m%d') From d9be5544335274832f54d003c104d76b771a378e Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 19 May 2023 12:11:30 +0900 Subject: [PATCH 12/90] =?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=81=8B=E3=82=89User=5FID=5F=5Fc?= =?UTF-8?q?=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/crm/object_info/crm_object_list_diff.json | 6 ++---- s3/data/crm/settings/CRM_Event.txt | 6 +++--- s3/data/crm/settings/CRM_Task.txt | 6 +++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/s3/config/crm/object_info/crm_object_list_diff.json b/s3/config/crm/object_info/crm_object_list_diff.json index f6a7d9c7..6b9ad63e 100644 --- a/s3/config/crm/object_info/crm_object_list_diff.json +++ b/s3/config/crm/object_info/crm_object_list_diff.json @@ -3174,8 +3174,7 @@ "MSJ_Reason_ID__c", "MSJ_Task_External_Id__c", "MSJ_Task_Source__c", - "MSJ_Visit_Type__c", - "User_ID__c" + "MSJ_Visit_Type__c" ], "is_skip": false, "is_update_last_fetch_datetime": true @@ -3232,8 +3231,7 @@ "MSJ_Reason_ID__c", "MSJ_Task_External_Id__c", "MSJ_Task_Source__c", - "MSJ_Visit_Type__c", - "User_ID__c" + "MSJ_Visit_Type__c" ], "is_skip": false, "is_update_last_fetch_datetime": true diff --git a/s3/data/crm/settings/CRM_Event.txt b/s3/data/crm/settings/CRM_Event.txt index dc25267f..ed6c978e 100644 --- a/s3/data/crm/settings/CRM_Event.txt +++ b/s3/data/crm/settings/CRM_Event.txt @@ -4,9 +4,9 @@ utf-8 " CRLF 1 -60 -Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c -Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c +59 +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c +Id,RecordTypeId,WhoId,WhatId,Subject,Location,IsAllDayEvent,ActivityDateTime,ActivityDate,DurationInMinutes,StartDateTime,EndDateTime,EndDate,Description,AccountId,OwnerId,IsPrivate,ShowAs,IsDeleted,IsChild,IsGroupEvent,GroupEventType,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateTime,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,ReminderDateTime,IsReminderSet,EventSubtype,IsRecurrence2Exclusion,Recurrence2PatternText,Recurrence2PatternVersion,IsRecurrence2,IsRecurrence2Exception,Recurrence2PatternStartDate,Recurrence2PatternTimeZone,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c src02.crm_Event org02.crm_Event diff --git a/s3/data/crm/settings/CRM_Task.txt b/s3/data/crm/settings/CRM_Task.txt index 29aa0f0a..45e1735b 100644 --- a/s3/data/crm/settings/CRM_Task.txt +++ b/s3/data/crm/settings/CRM_Task.txt @@ -4,9 +4,9 @@ utf-8 " CRLF 1 -51 -Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c -Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c,User_ID__c +50 +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c +Id,RecordTypeId,WhoId,WhatId,Subject,ActivityDate,Status,Priority,IsHighPriority,OwnerId,Description,IsDeleted,AccountId,IsClosed,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,IsArchived,CallDurationInSeconds,CallType,CallDisposition,CallObject,ReminderDateTime,IsReminderSet,RecurrenceActivityId,IsRecurrence,RecurrenceStartDateOnly,RecurrenceEndDateOnly,RecurrenceTimeZoneSidKey,RecurrenceType,RecurrenceInterval,RecurrenceDayOfWeekMask,RecurrenceDayOfMonth,RecurrenceInstance,RecurrenceMonthOfYear,RecurrenceRegeneratedType,TaskSubtype,CompletedDateTime,Override_Lock_vod__c,Mobile_ID_vod__c,Color_vod__c,Event_Canceled_vod__c,Followup_Activity_Type_vod__c,MSJ_Data_ID__c,MSJ_Reason_ID__c,MSJ_Task_External_Id__c,MSJ_Task_Source__c,MSJ_Visit_Type__c src02.crm_Task org02.crm_Task From 75db3d2251968850ce4d1834d83ed39bef0d4461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 19 May 2023 16:37:03 +0900 Subject: [PATCH 13/90] =?UTF-8?q?feat:=20DCF=E6=96=BD=E8=A8=AD=E7=B5=B1?= =?UTF-8?q?=E5=90=88=E3=83=9E=E3=82=B9=E3=82=BF=E6=97=A5=E6=AC=A1=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=83=90=E3=83=83=E3=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrate_dcf_inst_merge.py | 358 ++++++++++-------- 1 file changed, 193 insertions(+), 165 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py index fa6ce77a..c37a3a30 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py @@ -7,8 +7,8 @@ from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger from src.time.elapsed_time import ElapsedTime -logger = get_logger('DCF施設統合マスタ日次更新バッチ') batch_context = BatchContext.get_instance() +logger = get_logger('DCF施設統合マスタ日次更新バッチ') def exec(): @@ -16,19 +16,17 @@ def exec(): try: db.connect() db.begin() - # - enabled_dst_inst_merge_records = _laundering_enabled_dct_inst_merge(db) - # - _laundering_disabled_dct_inst_merge(db) - # + logger.debug('DCF施設統合マスタ日次更新バッチ処理開始') + # DCF施設統合マスタ移行先コードのセット(無効フラグが『0(有効)』) + enabled_dst_inst_merge_records = _set_enabled_dct_inst_merge(db) + # DCF施設統合マスタ移行先コードのセット(無効フラグが『1(無効)』) + _set_disabled_dct_inst_merge(db) + # DCF施設統合マスタに無効フラグが『0(有効)』データが存在する場合 if len(enabled_dst_inst_merge_records) > 0: - logger.info('') _add_emp_chg_inst(db, enabled_dst_inst_merge_records) - logger.info('') _add_ult_ident_presc(db, enabled_dst_inst_merge_records) db.commit() - # - logger.info('') + logger.info('DCF施設統合マスタ日次更新バッチ処理終了') except Exception as e: db.rollback() raise BatchOperationException(e) @@ -36,68 +34,101 @@ def exec(): db.disconnect() -def _laundering_enabled_dct_inst_merge(db: Database) -> list[dict]: +def _set_enabled_dct_inst_merge(db: Database) -> list[dict]: # データ取得(無効フラグが『0(有効)』) - valid_dst_inst_merge_records = _select_dct_inst_merge(db, 0, True) + enabled_dst_inst_merge_records = _select_dct_inst_merge(db, 0) # 移行先DCF施設コードの更新(無効フラグが『0(有効)』) - _update_dcf_inst_merge(db, 0) - # DCF施設統合マスタの過去分の洗い替え - if len(valid_dst_inst_merge_records) == 0: - return - for row in valid_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) + if _update_dcf_inst_merge(db, 0) > 0: + # DCF施設統合マスタの過去分の洗い替え + for row in enabled_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) - return valid_dst_inst_merge_records + return enabled_dst_inst_merge_records -def _laundering_disabled_dct_inst_merge(db: Database): +def _set_disabled_dct_inst_merge(db: Database): # データ取得(無効フラグが『1(無効)』) - disabled_dst_inst_merge_records = _select_dct_inst_merge(db, 1, False) + disabled_dst_inst_merge_records = _select_dct_inst_merge(db, 1) # 移行先DCF施設コードの更新(無効フラグが『1(無効)』) - _update_dcf_inst_merge(db, 1) - # DCF施設統合マスタの過去分の洗い替え - if len(disabled_dst_inst_merge_records) == 0: - return - for row in disabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) + if _update_dcf_inst_merge(db, 1) > 0: + # DCF施設統合マスタの過去分の洗い替え + for row in disabled_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) -def _add_ult_ident_presc(db: Database, valid_dst_inst_merge_records: list[dict]): - # - for data_inst_cnt, row in enumerate(valid_dst_inst_merge_records, start=1): +def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): + # 納入先処方元マスタの追加 + logger.info('納入先処方元マスタの登録 開始') + for data_inst_cnt, row in enumerate(enabled_dst_inst_merge_records, start=1): tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) ult_ident_presc_records = _select_ult_ident_presc(db, row['dcf_inst_cd'], row['dup_opp_cd']) - for data_cnt, ult_row in enumerate(ult_ident_presc_records, start=1): + for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') # 処方元コード=重複時相手先コードが発生した場合 - if ult_row['opp_count'] > 0: + if ult_ident_presc_row['opp_count'] > 0: break - start_date = _str_to_date_time(ult_row['start_date']) + start_date = _str_to_date_time(ult_ident_presc_row['start_date']) set_start_date = start_date \ if start_date > tekiyo_month_first_day else tekiyo_month_first_day set_start_date = _date_time_to_str(set_start_date) - is_delete_duplicate_key = False - if _count_duplicate_ult_ident_presc(db, set_start_date, ult_row): - _delete_ult_ident_presc(db, set_start_date, ult_row) - is_delete_duplicate_key = True + is_exists_duplicate_key = False + if _count_duplicate_ult_ident_presc(db, set_start_date, ult_ident_presc_row) > 0: + _delete_ult_ident_presc(db, set_start_date, ult_ident_presc_row, + '納入先処方元マスタの重複予定データの削除') + is_exists_duplicate_key = True else: logger.info('納入先処方元マスタの重複予定データなし') - _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_row) + _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_ident_presc_row) - if _str_to_date_time(ult_row['end_date']) < start_date: - _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + if _str_to_date_time(ult_ident_presc_row['end_date']) < start_date: + _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, + '開始月>適用開始日のため物理削除') continue - if not is_delete_duplicate_key: + if not is_exists_duplicate_key: last_end_date = tekiyo_month_first_day - timedelta(days=1) - _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_row) - if start_date > last_end_date: - _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) + if start_date > last_end_date: + _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, + '適用終了日更新後 開始日>終了日のため物理削除') + + logger.info('納入先処方元マスタの登録 終了') -def _delete_ult_ident_presc(db: Database, start_date: str, ult_row: CursorResult): - # +def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): + # 従業員担当施設マスタの登録 + logger.info('従業員担当施設マスタの登録 開始') + for row in enabled_dst_inst_merge_records: + tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) + emp_chg_inst_records = _select_emp_chg_inst(db, row['dcf_inst_cd'], row['dup_opp_cd']) + for emp_chg_inst_row in emp_chg_inst_records: + # 重複時相手先コードが存在したかのチェック + if emp_chg_inst_row['opp_count'] > 0: + break + + start_date = _str_to_date_time(emp_chg_inst_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day + + _insert_emp_chg_inst(db, row['dup_opp_cd'], _date_time_to_str(set_start_date), + emp_chg_inst_row) + + if start_date < tekiyo_month_first_day: + last_end_date = tekiyo_month_first_day - timedelta(days=1) + _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], _date_time_to_str(last_end_date), + emp_chg_inst_row) + if start_date <= last_end_date: + continue + _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], + emp_chg_inst_row['start_date']) + + logger.info('従業員担当施設マスタの登録 終了') + + +def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: CursorResult, + log_message: str): + # ult_ident_prescのDelete try: elapsed_time = ElapsedTime() sql = """ @@ -107,56 +138,24 @@ def _delete_ult_ident_presc(db: Database, start_date: str, ult_row: CursorResult ta_cd = :ta_cd AND ult_ident_cd = :ult_ident_cd AND ratio = :ratio - AND start_date = :set_start_date + AND start_date = :start_date """ params = { - 'ta_cd': ult_row['ta_cd'], - 'ult_ident_cd': ult_row['ult_ident_cd'], - 'ratio': ult_row['ratio'], + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], 'start_date': start_date } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info(f'{log_message} 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug(f'{log_message} 失敗') raise e -def _add_emp_chg_inst(db: Database, valid_dst_inst_merge_records: list[dict]): - # - for row in valid_dst_inst_merge_records: - tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) - emp_chg_inst_records = _select_emp_chg_inst(db, row['dcf_inst_cd'], row['dup_opp_cd']) - for emp_row in emp_chg_inst_records: - # 重複時相手先コードが存在したかのチェック - if emp_row['opp_count'] > 0: - break - - start_date = _str_to_date_time(emp_row['start_date']) - set_start_date = start_date \ - if start_date > tekiyo_month_first_day else tekiyo_month_first_day - - _insert_emp_chg_inst(db, row['dup_opp_cd'], _date_time_to_str(set_start_date), emp_row) - - if start_date < tekiyo_month_first_day: - last_end_date = tekiyo_month_first_day - timedelta(days=1) - _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_row) - if start_date <= last_end_date: - continue - _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], emp_row['start_date']) - - # if start_date >= tekiyo_month_first_day: - # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) - # continue - # last_end_date = tekiyo_month_first_day - timedelta(days=1) - # _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], last_end_date, emp_row) - # if start_date > last_end_date: - # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) - - def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): - # + # emp_chg_instを更新 try: elapsed_time = ElapsedTime() sql = """ @@ -174,14 +173,15 @@ def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, params = {'dcf_inst_cd': dcf_inst_cd, 'ta_cd': ta_cd, 'start_date': start_date} res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'従業員担当施設マスタのYorNフラグ更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタのYorNフラグ更新に失敗') raise e -def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, emp_row: CursorResult): - # +def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, + emp_chg_inst_row: CursorResult): + # emp_chg_instを更新 try: elapsed_time = ElapsedTime() sql = """ @@ -200,21 +200,22 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: params = { 'end_date': last_end_date, 'dcf_inst_cd': dcf_inst_cd, - 'ta_cd': emp_row['ta_cd'], - 'emp_cd': emp_row['emp_cd'], - 'bu_cd': emp_row['bu_cd'], - 'start_date': emp_row['start_date'] + 'ta_cd': emp_chg_inst_row['ta_cd'], + 'emp_cd': emp_chg_inst_row['emp_cd'], + 'bu_cd': emp_chg_inst_row['bu_cd'], + 'start_date': emp_chg_inst_row['start_date'] } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'従業員担当施設マスタの適用終了日更新 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタの適用終了日更新 失敗') raise e -def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, emp_row: CursorResult): - # +def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, + emp_chg_inst_row: CursorResult): + # emp_chg_instにInsert try: elapsed_time = ElapsedTime() sql = """ @@ -250,23 +251,24 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, emp """ params = { 'dup_opp_cd': dup_opp_cd, - 'ta_cd': emp_row['ta_cd'], - 'emp_cd': emp_row['emp_cd'], - 'bu_cd': emp_row['bu_cd'], + 'ta_cd': emp_chg_inst_row['ta_cd'], + 'emp_cd': emp_chg_inst_row['emp_cd'], + 'bu_cd': emp_chg_inst_row['bu_cd'], 'start_date': set_start_date, - 'end_date': emp_row['end_date'], - 'main_chg_flg': emp_row['main_chg_flg'] if emp_row['main_chg_flg'] is None else None + 'end_date': emp_chg_inst_row['end_date'], + 'main_chg_flg': None + if emp_chg_inst_row['main_chg_flg'] is None else emp_chg_inst_row['main_chg_flg'] } res = db.execute(sql, params) logging_sql(logger, sql) logger.info(f'従業員担当施設マスタの追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタの追加に失敗') raise e -def _select_dct_inst_merge(db: Database, muko_flg: int, is_null_dcf_inst_cd_new: bool): - # +def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: + # dcf_inst_mergeからSelect try: sql = """ SELECT @@ -279,25 +281,26 @@ def _select_dct_inst_merge(db: Database, muko_flg: int, is_null_dcf_inst_cd_new: src05.hdke_tbl AS ht ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') WHERE - dim.muko_flg =: muko_flg + dim.muko_flg = :muko_flg AND dim.enabled_flg = 'Y' - AND dim.dcf_inst_cd_new <= >: is_null_dcf_inst_cd_new - """ + AND dim.dcf_inst_cd_new IS {not_null}NULL + """.format( + not_null='' if muko_flg == 0 else 'NOT ' + ) params = { - 'muko_flg': muko_flg, - 'is_null_dcf_inst_cd_new': None + 'muko_flg': muko_flg } dst_inst_merge_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('DCF施設統合マスタの取得に成功') except Exception as e: - logger.debug('') + logger.debug('DCF施設統合マスタの取得に失敗') raise e return dst_inst_merge_records -def _update_dcf_inst_merge(db: Database, muko_flg: int): +def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: # try: elapsed_time = ElapsedTime() @@ -319,7 +322,7 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int): WHERE dim.muko_flg= :muko_flg AND dim.enabled_flg='Y' - AND dim.dcf_inst_cd_new IS {$dcfInstCdNew}NULL + AND dim.dcf_inst_cd_new IS {not_null}NULL ) AS bf_dim SET updim.dcf_inst_cd_new = {column}, @@ -329,24 +332,27 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int): updim.dcf_inst_cd = base_dcf_inst_cd AND updim.dup_opp_cd = base_dup_opp_cd AND updim.tekiyo_month = base_tekiyo_month - AND updim.muko_flg =base_muko_flg - AND updim.enabled_flg =base_enabled_flg - """ + AND updim.muko_flg = base_muko_flg + AND updim.enabled_flg = base_enabled_flg + """.format( + not_null='' if muko_flg == 0 else 'NOT ', + column='base_dup_opp_cd' if muko_flg == 0 else 'NULL' + ) params = { 'muko_flg': muko_flg } - res = db.execute(sql.format( - column='base_dup_opp_cd' if muko_flg == 1 else 'NULL' - ), params) + res = db.execute(sql, params) logging_sql(logger, sql) logger.info(f'DCF施設統合マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('DCF施設統合マスタの更新に失敗') raise e + return res.rowcount + def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str): - # + # dcf_inst_mergeをUpdate try: elapsed_time = ElapsedTime() sql = """ @@ -361,17 +367,20 @@ def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_c AND enabled_flg = 'Y' AND muko_flg = 0 """ - params = {'dcf_inst_cd_new_after': dcf_inst_cd_new_after, 'dcf_inst_cd_new_before': dcf_inst_cd_new_before} + params = { + 'dcf_inst_cd_new_after': dcf_inst_cd_new_after, + 'dcf_inst_cd_new_before': dcf_inst_cd_new_before + } res = db.execute(sql, params) logging_sql(logger, sql) logger.info(f'移行先DCF施設コードの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('移行先DCF施設コードの更新に失敗') raise e -def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_record: CursorResult): - # +def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_row: CursorResult): + # ult_ident_presc_endをUpdate try: elapsed_time = ElapsedTime() sql = """ @@ -388,21 +397,22 @@ def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident """ params = { 'end_date': last_end_date, - 'ta_cd': ult_ident_presc_record['ta_cd'], - 'ult_ident_cd': ult_ident_presc_record['ult_ident_cd'], - 'ratio': ult_ident_presc_record['ratio'], - 'start_date': ult_ident_presc_record['start_date'] + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], + 'start_date': ult_ident_presc_row['start_date'] } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'終了日 > 開始月のため適用終了日を更新, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'終了日 > 開始月のため適用終了日を更新 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('終了日 > 開始月のため適用終了日を更新 失敗') raise e -def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, ult_row: CursorResult): - # +def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, + ult_ident_presc_row: CursorResult): + # ult_ident_prescにInsert try: elapsed_time = ElapsedTime() sql = """ @@ -419,7 +429,7 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, update_date, updater ) - VALUES( + VALUES( :ta_cd, :ult_ident_cd, :ratio, @@ -433,23 +443,23 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, ) """ params = { - 'ta_cd': ult_row['ta_cd'], - 'ult_ident_cd': ult_row['ult_ident_cd'], - 'ratio': ult_row['ratio'], + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], 'start_date': set_Start_Date, 'presc_cd': dup_opp_cd, - 'end_date': ult_row['end_date'] + 'end_date': ult_ident_presc_row['end_date'] } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'納入先処方元マスタに追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'納入先処方元マスタに追加 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('納入先処方元マスタに追加に失敗') + logger.debug('納入先処方元マスタに追加 失敗') raise e def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # + # emp_chg_instから取得 try: sql = """ SELECT @@ -461,7 +471,14 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis eci.end_date, eci.main_chg_flg, eci.enabled_flg, - (SELECT COUNT(eciopp.inst_cd) FROM src05.emp_chg_inst AS eciopp WHERE eciopp.inst_cd = :dup_opp_cd) AS opp_count + ( + SELECT + COUNT(eciopp.inst_cd) + FROM + src05.emp_chg_inst AS eciopp + WHERE + eciopp.inst_cd = :dup_opp_cd + ) AS opp_count FROM src05.emp_chg_inst AS eci WHERE @@ -472,15 +489,15 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} emp_chg_inst_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('従業員担当施設マスタの取得 成功') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタの取得 失敗') raise e return emp_chg_inst_records def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # + # ult_ident_prescから取得 try: sql = """ SELECT @@ -489,25 +506,33 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> uip.ratio, uip.start_date, uip.end_date, - (SELECT COUNT(uipopp.ta_cd) FROM ult_ident_presc AS uipopp WHERE uipopp.presc_cd = :dup_opp_cd) AS opp_count + ( + SELECT + COUNT(uipopp.ta_cd) + FROM + ult_ident_presc AS uipopp + WHERE + uipopp.presc_cd = :dup_opp_cd + ) AS opp_count FROM src05.ult_ident_presc AS uip WHERE - uip.presc_cd = '{$dcfInstCd}' + uip.presc_cd = :dcf_inst_cd AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date """ params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} ult_ident_presc_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('納入先処方元マスタの取得 成功') except Exception as e: - logger.debug('') + logger.debug('納入先処方元マスタの取得 失敗') raise e return ult_ident_presc_records -def _count_duplicate_ult_ident_presc(db: Database, set_Start_Date: str, ult_row: CursorResult): - # +def _count_duplicate_ult_ident_presc(db: Database, set_start_date: str, + ult_ident_presc_row: CursorResult) -> int: + # ult_ident_prescの重複時相手先コードの件数取得 try: sql = """ SELECT @@ -518,30 +543,33 @@ def _count_duplicate_ult_ident_presc(db: Database, set_Start_Date: str, ult_row: ta_cd = :ta_cd AND ult_ident_cd = :ult_ident_cd AND ratio = :ratio - AND start_date = :set_Start_Date + AND start_date = :start_date """ params = { - 'ta_cd': ult_row['ta_cd'], - 'ult_ident_cd': ult_row['ult_ident_cd'], - 'ratio': ult_row['ratio'], - 'start_date': set_Start_Date + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], + 'start_date': set_start_date } result = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('納入先処方元マスタの重複予定データの存在チェック 成功') except Exception as e: - logger.debug('') + logger.debug('納入先処方元マスタの重複予定データの存在チェック 失敗') raise e return result[0]['cnt'] -def _get_first_day_of_month(month_day: str): - return datetime.datetime.strptime(month_day, '%Y%m01') +def _get_first_day_of_month(year_month: str) -> datetime: + # year_monthの初日の日付を日付型に変換し返却する + return datetime.strptime(year_month + '01', '%Y%m%d') -def _str_to_date_time(str_date_time: str): - return datetime.datetime.strptime(str_date_time, '%Y%m%d') +def _str_to_date_time(str_date_time: str) -> datetime: + # str_date_timeを日付型に変換して返却する + return datetime.strptime(str_date_time, '%Y%m%d') -def _date_time_to_str(date_time: datetime): - return date_time.strptime('%Y%m%d') +def _date_time_to_str(date_time: datetime) -> str: + # date_timeをYmd型に変換して返却する + return date_time.strftime('%Y%m%d') From 3b369b8fc40b258792455aa647e4007f99708398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 19 May 2023 16:48:11 +0900 Subject: [PATCH 14/90] =?UTF-8?q?feat:=20=E8=B5=B7=E5=8B=95=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch-daily/src/jobctrl_daily.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecs/jskult-batch-daily/src/jobctrl_daily.py b/ecs/jskult-batch-daily/src/jobctrl_daily.py index 1a82f226..71fbea90 100644 --- a/ecs/jskult-batch-daily/src/jobctrl_daily.py +++ b/ecs/jskult-batch-daily/src/jobctrl_daily.py @@ -7,6 +7,7 @@ from src.batch.batch_functions import ( update_batch_processing_flag_in_processing) from src.batch.common.batch_context import BatchContext from src.batch.common.calendar_file import CalendarFile +from src.batch.dcf_inst_merge import Integrate_dcf_inst_merge from src.batch.laundering import create_dcf_inst_merge, mst_inst_laundering from src.batch.ultmarc import ultmarc_process from src.error.exceptions import BatchOperationException @@ -114,6 +115,14 @@ def exec(): logger.exception(f'DCF施設統合マスタ作成エラー(異常終了){e}') return constants.BATCH_EXIT_CODE_SUCCESS + try: + logger.info('DCF施設統合マスタ日次更新バッチ:起動') + Integrate_dcf_inst_merge.exec() + logger.info('DCF施設統合マスタ日次更新バッチ:終了') + except BatchOperationException as e: + logger.exception(f'DCF施設統合マスタ日次更新バッチエラー(異常終了){e}') + return constants.BATCH_EXIT_CODE_SUCCESS + # バッチ処理完了とし、処理日、バッチ処置中フラグ、dump取得状態区分を更新 logger.info('業務日付更新・バッチステータスリフレッシュ:起動') try: From 71fcc76ade81e04f6a378ea1baca51b275462107 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 24 May 2023 10:34:58 +0900 Subject: [PATCH 15/90] =?UTF-8?q?feat:=20Survey=5FTarget=5Fvod=5F=5Fc?= =?UTF-8?q?=E3=81=AB=E9=A0=85=E7=9B=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- s3/config/crm/object_info/crm_object_list_diff.json | 1 + s3/data/crm/settings/CRM_Survey_Target_vod__c.txt | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/s3/config/crm/object_info/crm_object_list_diff.json b/s3/config/crm/object_info/crm_object_list_diff.json index 6b9ad63e..2840932f 100644 --- a/s3/config/crm/object_info/crm_object_list_diff.json +++ b/s3/config/crm/object_info/crm_object_list_diff.json @@ -2870,6 +2870,7 @@ "zvod_Specialty_vod__c", "Score_vod__c", "User_vod__c", + "Suggestion_vod__c", "Child_Account_vod__c", "Location_Entity_Reference_Id_vod__c", "Location_vod__c", diff --git a/s3/data/crm/settings/CRM_Survey_Target_vod__c.txt b/s3/data/crm/settings/CRM_Survey_Target_vod__c.txt index 78520f18..a13619b4 100644 --- a/s3/data/crm/settings/CRM_Survey_Target_vod__c.txt +++ b/s3/data/crm/settings/CRM_Survey_Target_vod__c.txt @@ -4,9 +4,9 @@ utf-8 " CRLF 1 -39 -Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Display_Name_vod__c,Account_vod__c,Channels_vod__c,End_Date_vod__c,Entity_Reference_Id_vod__c,External_ID_vod__c,Language_vod__c,Lock_vod__c,Mobile_ID_vod__c,No_Autoassign_vod__c,Not_Completed_vod__c,Region_vod__c,Segment_vod__c,Start_Date_vod__c,Status_vod__c,Survey_vod__c,Territory_vod__c,zvod_Address_vod__c,zvod_Specialty_vod__c,Score_vod__c,User_vod__c,Child_Account_vod__c,Location_Entity_Reference_Id_vod__c,Location_vod__c,Target_Type_vod__c -Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Display_Name_vod__c,Account_vod__c,Channels_vod__c,End_Date_vod__c,Entity_Reference_Id_vod__c,External_ID_vod__c,Language_vod__c,Lock_vod__c,Mobile_ID_vod__c,No_Autoassign_vod__c,Not_Completed_vod__c,Region_vod__c,Segment_vod__c,Start_Date_vod__c,Status_vod__c,Survey_vod__c,Territory_vod__c,zvod_Address_vod__c,zvod_Specialty_vod__c,Score_vod__c,User_vod__c,Child_Account_vod__c,Location_Entity_Reference_Id_vod__c,Location_vod__c,Target_Type_vod__c +40 +Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Display_Name_vod__c,Account_vod__c,Channels_vod__c,End_Date_vod__c,Entity_Reference_Id_vod__c,External_ID_vod__c,Language_vod__c,Lock_vod__c,Mobile_ID_vod__c,No_Autoassign_vod__c,Not_Completed_vod__c,Region_vod__c,Segment_vod__c,Start_Date_vod__c,Status_vod__c,Survey_vod__c,Territory_vod__c,zvod_Address_vod__c,zvod_Specialty_vod__c,Score_vod__c,User_vod__c,Suggestion_vod__c,Child_Account_vod__c,Location_Entity_Reference_Id_vod__c,Location_vod__c,Target_Type_vod__c +Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,MayEdit,IsLocked,LastViewedDate,LastReferencedDate,Account_Display_Name_vod__c,Account_vod__c,Channels_vod__c,End_Date_vod__c,Entity_Reference_Id_vod__c,External_ID_vod__c,Language_vod__c,Lock_vod__c,Mobile_ID_vod__c,No_Autoassign_vod__c,Not_Completed_vod__c,Region_vod__c,Segment_vod__c,Start_Date_vod__c,Status_vod__c,Survey_vod__c,Territory_vod__c,zvod_Address_vod__c,zvod_Specialty_vod__c,Score_vod__c,User_vod__c,Suggestion_vod__c,Child_Account_vod__c,Location_Entity_Reference_Id_vod__c,Location_vod__c,Target_Type_vod__c src02.crm_Survey_Target_vod__c org02.crm_Survey_Target_vod__c From 7da4be471c97a1eba6b3fe86e6342c8272ff9021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 25 May 2023 15:30:51 +0900 Subject: [PATCH 16/90] =?UTF-8?q?feat:=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 --- ...t_merge.py => integrate_dcf_inst_merge.py} | 87 ++++++++++--------- .../src/batch/laundering/sales_laundering.py | 3 + ecs/jskult-batch-daily/src/jobctrl_daily.py | 9 -- 3 files changed, 51 insertions(+), 48 deletions(-) rename ecs/jskult-batch-daily/src/batch/dcf_inst_merge/{Integrate_dcf_inst_merge.py => integrate_dcf_inst_merge.py} (83%) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py similarity index 83% rename from ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py rename to ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index c37a3a30..ffb2ba06 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -1,5 +1,4 @@ from datetime import datetime, timedelta -from sqlalchemy import CursorResult from src.batch.batch_functions import logging_sql from src.batch.common.batch_context import BatchContext from src.db.database import Database @@ -8,7 +7,7 @@ from src.logging.get_logger import get_logger from src.time.elapsed_time import ElapsedTime batch_context = BatchContext.get_instance() -logger = get_logger('DCF施設統合マスタ日次更新バッチ') +logger = get_logger('DCF施設統合マスタ日次更新') def exec(): @@ -16,7 +15,7 @@ def exec(): try: db.connect() db.begin() - logger.debug('DCF施設統合マスタ日次更新バッチ処理開始') + logger.debug('DCF施設統合マスタ日次更新処理開始') # DCF施設統合マスタ移行先コードのセット(無効フラグが『0(有効)』) enabled_dst_inst_merge_records = _set_enabled_dct_inst_merge(db) # DCF施設統合マスタ移行先コードのセット(無効フラグが『1(無効)』) @@ -26,7 +25,7 @@ def exec(): _add_emp_chg_inst(db, enabled_dst_inst_merge_records) _add_ult_ident_presc(db, enabled_dst_inst_merge_records) db.commit() - logger.info('DCF施設統合マスタ日次更新バッチ処理終了') + logger.debug('DCF施設統合マスタ日次更新処理終了') except Exception as e: db.rollback() raise BatchOperationException(e) @@ -59,10 +58,11 @@ def _set_disabled_dct_inst_merge(db: Database): def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): # 納入先処方元マスタの追加 logger.info('納入先処方元マスタの登録 開始') - for data_inst_cnt, row in enumerate(enabled_dst_inst_merge_records, start=1): - tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) + for data_inst_cnt, enabled_merge_record in enumerate(enabled_dst_inst_merge_records, start=1): + tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) - ult_ident_presc_records = _select_ult_ident_presc(db, row['dcf_inst_cd'], row['dup_opp_cd']) + ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], + enabled_merge_record['dup_opp_cd']) for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') # 処方元コード=重複時相手先コードが発生した場合 @@ -80,13 +80,17 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict is_exists_duplicate_key = True else: logger.info('納入先処方元マスタの重複予定データなし') - _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_ident_presc_row) + _insert_ult_ident_presc(db, set_start_date, enabled_merge_record['dup_opp_cd'], ult_ident_presc_row) + # 適用終了日 < 適用開始日の場合 if _str_to_date_time(ult_ident_presc_row['end_date']) < start_date: + # 対象レコードを物理削除する _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, '開始月>適用開始日のため物理削除') continue + # 重複予定データが存在しない、且つ、適用終了日 ≧ 適用開始日の場合 if not is_exists_duplicate_key: + # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 last_end_date = tekiyo_month_first_day - timedelta(days=1) _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) if start_date > last_end_date: @@ -99,9 +103,9 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): # 従業員担当施設マスタの登録 logger.info('従業員担当施設マスタの登録 開始') - for row in enabled_dst_inst_merge_records: - tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) - emp_chg_inst_records = _select_emp_chg_inst(db, row['dcf_inst_cd'], row['dup_opp_cd']) + for enabled_merge_record in enabled_dst_inst_merge_records: + tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) + emp_chg_inst_records = _select_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd']) for emp_chg_inst_row in emp_chg_inst_records: # 重複時相手先コードが存在したかのチェック if emp_chg_inst_row['opp_count'] > 0: @@ -111,22 +115,24 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): set_start_date = start_date \ if start_date > tekiyo_month_first_day else tekiyo_month_first_day - _insert_emp_chg_inst(db, row['dup_opp_cd'], _date_time_to_str(set_start_date), + _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), emp_chg_inst_row) + # 適用開始日 < DCF施設統合マスタの適用月度の1日の場合 if start_date < tekiyo_month_first_day: + # DCF施設統合マスタの適用月度の前月末日で、適用終了日を更新する last_end_date = tekiyo_month_first_day - timedelta(days=1) - _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], _date_time_to_str(last_end_date), + _update_emp_chg_inst_end_date(db, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_chg_inst_row) - if start_date <= last_end_date: - continue - _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], - emp_chg_inst_row['start_date']) + continue + # 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する + _update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], + emp_chg_inst_row['start_date']) logger.info('従業員担当施設マスタの登録 終了') -def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: CursorResult, +def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: dict, log_message: str): # ult_ident_prescのDelete try: @@ -154,8 +160,8 @@ def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: raise e -def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): - # emp_chg_instを更新 +def _update_emp_chg_inst_disabled(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): + # emp_chg_instをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -180,8 +186,8 @@ def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, - emp_chg_inst_row: CursorResult): - # emp_chg_instを更新 + emp_chg_inst_row: dict): + # emp_chg_instをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -214,8 +220,8 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, - emp_chg_inst_row: CursorResult): - # emp_chg_instにInsert + emp_chg_inst_row: dict): + # emp_chg_instにINSERT try: elapsed_time = ElapsedTime() sql = """ @@ -268,7 +274,8 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: - # dcf_inst_mergeからSelect + # dcf_inst_mergeからSELECT + # muko_flgの値によって、SQLのWHERE条件を変更 try: sql = """ SELECT @@ -301,9 +308,11 @@ def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: - # - try: + # dcf_inst_mergeをUPDATE + # muko_flgの値によって、SQLのWHERE条件とSET句を変更 + try: elapsed_time = ElapsedTime() + log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' sql = """ UPDATE src05.dcf_inst_merge AS updim @@ -318,9 +327,9 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: src05.dcf_inst_merge AS dim INNER JOIN src05.hdke_tbl AS ht - ON dim.tekiyo_month=DATE_FORMAT(ht.syor_date, '%Y%m') + ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') WHERE - dim.muko_flg= :muko_flg + dim.muko_flg = :muko_flg AND dim.enabled_flg='Y' AND dim.dcf_inst_cd_new IS {not_null}NULL ) AS bf_dim @@ -343,16 +352,16 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'DCF施設統合マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'DCF施設統合マスタの有効データを{log_message} 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('DCF施設統合マスタの更新に失敗') + logger.debug(f'DCF施設統合マスタの{log_message} 失敗') raise e return res.rowcount def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str): - # dcf_inst_mergeをUpdate + # dcf_inst_mergeをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -379,8 +388,8 @@ def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_c raise e -def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_row: CursorResult): - # ult_ident_presc_endをUpdate +def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_row: dict): + # ult_ident_presc_endをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -411,8 +420,8 @@ def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, - ult_ident_presc_row: CursorResult): - # ult_ident_prescにInsert + ult_ident_presc_row: dict): + # ult_ident_prescにINSERT try: elapsed_time = ElapsedTime() sql = """ @@ -459,7 +468,7 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # emp_chg_instから取得 + # emp_chg_instからSELECT try: sql = """ SELECT @@ -497,7 +506,7 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # ult_ident_prescから取得 + # ult_ident_prescからSELECT try: sql = """ SELECT @@ -531,7 +540,7 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> def _count_duplicate_ult_ident_presc(db: Database, set_start_date: str, - ult_ident_presc_row: CursorResult) -> int: + ult_ident_presc_row: dict) -> int: # ult_ident_prescの重複時相手先コードの件数取得 try: sql = """ diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py index f6d682b4..019f8c29 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py @@ -1,5 +1,6 @@ from src.batch.common.batch_context import BatchContext from src.batch.laundering import create_inst_merge_for_laundering, emp_chg_inst_laundering, ult_ident_presc_laundering +from src.batch.dcf_inst_merge import integrate_dcf_inst_merge from src.logging.get_logger import get_logger batch_context = BatchContext.get_instance() @@ -16,6 +17,8 @@ def exec(): return # 洗替用マスタ作成 create_inst_merge_for_laundering.exec() + # DCF施設統合マスタ日次更新 + integrate_dcf_inst_merge.exec() # 施設担当者洗替 emp_chg_inst_laundering.exec() # 納入先処方元マスタ洗替 diff --git a/ecs/jskult-batch-daily/src/jobctrl_daily.py b/ecs/jskult-batch-daily/src/jobctrl_daily.py index 71fbea90..1a82f226 100644 --- a/ecs/jskult-batch-daily/src/jobctrl_daily.py +++ b/ecs/jskult-batch-daily/src/jobctrl_daily.py @@ -7,7 +7,6 @@ from src.batch.batch_functions import ( update_batch_processing_flag_in_processing) from src.batch.common.batch_context import BatchContext from src.batch.common.calendar_file import CalendarFile -from src.batch.dcf_inst_merge import Integrate_dcf_inst_merge from src.batch.laundering import create_dcf_inst_merge, mst_inst_laundering from src.batch.ultmarc import ultmarc_process from src.error.exceptions import BatchOperationException @@ -115,14 +114,6 @@ def exec(): logger.exception(f'DCF施設統合マスタ作成エラー(異常終了){e}') return constants.BATCH_EXIT_CODE_SUCCESS - try: - logger.info('DCF施設統合マスタ日次更新バッチ:起動') - Integrate_dcf_inst_merge.exec() - logger.info('DCF施設統合マスタ日次更新バッチ:終了') - except BatchOperationException as e: - logger.exception(f'DCF施設統合マスタ日次更新バッチエラー(異常終了){e}') - return constants.BATCH_EXIT_CODE_SUCCESS - # バッチ処理完了とし、処理日、バッチ処置中フラグ、dump取得状態区分を更新 logger.info('業務日付更新・バッチステータスリフレッシュ:起動') try: From 5d16bceec95f4bd064d18246f55fc32dd5736e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 25 May 2023 16:22:05 +0900 Subject: [PATCH 17/90] =?UTF-8?q?feat:=20SQL=E4=BF=AE=E6=AD=A3=E3=80=81?= =?UTF-8?q?=E5=8D=98=E4=BD=93=E8=A9=A6=E9=A8=93=E6=9B=B8=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E6=99=82=E3=81=AE=E6=8C=87=E6=91=98=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrate_dcf_inst_merge.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index ffb2ba06..6e9bf5e4 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -90,12 +90,15 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict continue # 重複予定データが存在しない、且つ、適用終了日 ≧ 適用開始日の場合 if not is_exists_duplicate_key: - # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 last_end_date = tekiyo_month_first_day - timedelta(days=1) - _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) + # 適用開始日 > DCF施設統合マスタの適用月度の前月末日の場合 if start_date > last_end_date: + # 対象レコードを物理削除する _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, '適用終了日更新後 開始日>終了日のため物理削除') + continue + # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) logger.info('納入先処方元マスタの登録 終了') @@ -195,7 +198,7 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: src05.emp_chg_inst SET end_date = :end_date, updater = CURRENT_USER(), - update_date= SYSDATE() + update_date = SYSDATE() WHERE inst_cd = :dcf_inst_cd AND ta_cd = :ta_cd @@ -310,9 +313,9 @@ def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: # dcf_inst_mergeをUPDATE # muko_flgの値によって、SQLのWHERE条件とSET句を変更 - try: + try: elapsed_time = ElapsedTime() - log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' + log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' sql = """ UPDATE src05.dcf_inst_merge AS updim @@ -330,7 +333,7 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') WHERE dim.muko_flg = :muko_flg - AND dim.enabled_flg='Y' + AND dim.enabled_flg ='Y' AND dim.dcf_inst_cd_new IS {not_null}NULL ) AS bf_dim SET @@ -397,7 +400,7 @@ def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident src05.ult_ident_presc SET end_date = :end_date, updater = CURRENT_USER(), - update_date= SYSDATE() + update_date = SYSDATE() WHERE ta_cd = :ta_cd AND ult_ident_cd = :ult_ident_cd @@ -519,7 +522,7 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> SELECT COUNT(uipopp.ta_cd) FROM - ult_ident_presc AS uipopp + src05.ult_ident_presc AS uipopp WHERE uipopp.presc_cd = :dup_opp_cd ) AS opp_count From 0f8fb0026f88accd75207484ad115213360a99c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 25 May 2023 18:16:09 +0900 Subject: [PATCH 18/90] =?UTF-8?q?feat:=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 --- .../src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index 6e9bf5e4..182b7232 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -278,7 +278,8 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: # dcf_inst_mergeからSELECT - # muko_flgの値によって、SQLのWHERE条件を変更 + # 無効フラグがOFFのときは、移行先DCF施設コードが設定されてないデータを抽出する。 + # ONのときは、移行先DCF施設コードが設定されているデータを抽出する。 try: sql = """ SELECT @@ -312,7 +313,10 @@ def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: # dcf_inst_mergeをUPDATE - # muko_flgの値によって、SQLのWHERE条件とSET句を変更 + # 無効フラグがOFFのときは、 + # 移行先DCF施設コードが設定されていないデータを抽出し、移行先DCF施設コードに重複時相手先コードを上書きする + # 無効フラグがONのときは、 + # 移行先DCF施設コードが設定されているデータを抽出し、移行先DCF施設コードにNULLを上書きする。 try: elapsed_time = ElapsedTime() log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' From 87364d7e83248c2ebae1b7b93b7210492b821499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Tue, 30 May 2023 14:34:50 +0900 Subject: [PATCH 19/90] =?UTF-8?q?=E5=8C=BB=E5=B8=AB=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=AE=E5=81=B4=E3=81=A0=E3=81=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 90 +++ ecs/jskult-webapp/src/main.py | 4 +- ecs/jskult-webapp/src/static/css/ultStyle.css | 671 ++++++++++++++++ .../static/function/businessLogicScript.js | 60 ++ .../src/templates/docSearch.html | 744 ++++++++++++++++++ ecs/jskult-webapp/src/templates/menu.html | 2 +- 6 files changed, 1569 insertions(+), 2 deletions(-) create mode 100644 ecs/jskult-webapp/src/controller/ultmarc.py create mode 100644 ecs/jskult-webapp/src/static/css/ultStyle.css create mode 100644 ecs/jskult-webapp/src/templates/docSearch.html diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py new file mode 100644 index 00000000..2f1bd5eb --- /dev/null +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -0,0 +1,90 @@ +from typing import Optional + +from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi.exceptions import HTTPException +from starlette import status + +from src.depends.services import get_service +from src.model.internal.session import UserSession +from src.model.request.bio import BioModel +from src.model.view.bio_view_model import BioViewModel +from src.router.session_router import AuthenticatedRoute +from src.services.batch_status_service import BatchStatusService +from src.services.bio_view_service import BioViewService +from src.services.session_service import set_session +from src.system_var import constants +from src.templates import templates + +router = APIRouter() +router.route_class = AuthenticatedRoute + +######################### +# Views # +######################### + + +@router.get('/docSearch') +def ultmarc_view( + request: Request, + # batch_status_service:BatchStatusService=Depends(get_service(BatchStatusService)), + # bio_service: BioViewService=Depends(get_service(BioViewService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + # if batch_status_service.is_batch_processing(): + # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + # # 検索項目の取得 + # bio = bio_service.prepare_bio_view(session) + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'docSearch.html', { + 'request': request, + # 'bio': bio, + }, + headers={'session_key': session_key} + ) + return templates_response + + +@router.post('/BioSearchList') +def search_bio( + request: Request, + bio_form: Optional[BioModel] = Depends(BioModel.as_form), + bio_service: BioViewService = Depends(get_service(BioViewService)), + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + # error_log(date("Y/m/d H:i:s") . " [INFO] UserId:" . $UserId . "\r\n", 3, "$execLog"); + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + + # 生物由来データを検索 + bio_sales_view_data = bio_service.search_bio_data(bio_form) + # 検索項目などのデータを取得 + bio: BioViewModel = bio_service.prepare_bio_view(session) + bio.bio_data = bio_sales_view_data + bio.form_data = bio_form + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'bioSearchList.html', { + 'request': request, + 'bio': bio + }, + headers={'session_key': session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index f00f5ac3..a15344dc 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -5,7 +5,7 @@ from fastapi.staticfiles import StaticFiles from starlette import status import src.static as static -from src.controller import bio, bio_download, healthcheck, login, logout, menu +from src.controller import bio, bio_download, healthcheck, ultmarc, login, logout, menu from src.core import tasks from src.error.exception_handler import http_exception_handler from src.error.exceptions import UnexpectedException @@ -22,6 +22,8 @@ app.include_router(logout.router, prefix='/logout') app.include_router(menu.router, prefix='/menu') # 生物由来関連のルーター app.include_router(bio.router, prefix='/bio') +# アルトマークデータ照会のルーター +app.include_router(ultmarc.router, prefix='/ultmarc') # 生物由来のダウンロード用APIルーター。 # クライアントから非同期呼出しされるため、共通ルーターとは異なる扱いとする。 app.include_router(bio_download.router, prefix='/bio') diff --git a/ecs/jskult-webapp/src/static/css/ultStyle.css b/ecs/jskult-webapp/src/static/css/ultStyle.css new file mode 100644 index 00000000..936cef77 --- /dev/null +++ b/ecs/jskult-webapp/src/static/css/ultStyle.css @@ -0,0 +1,671 @@ +body { + background-color: LightCyan; + font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; +} + +h1 { + font-size: 150%; + margin-left: 2%; + margin-top: 0%; + margin-bottom: 0%; +} + +table{ + border-collapse : collapse; +} + +.header_bt{ + width: 8%; + margin-bottom: 0.8%; + margin-left: 78.5%; +} + +.search_textbox{ + width: 100%; +} + +.search_dropdown{ + width: 100%; +} + +.search_longtextbox{ + width: 100% +} + +.instSearchResult { + width: 100%; +} + +.scroll_table{ + overflow: auto; + white-space: nowrap; + margin-bottom: 2%; + /*スクロール時カラムが動く問題の修正 width: 100%;をコメントアウト*/ + width: 100%; + height: 250px; +} + +.scroll_table::-webkit-scrollbar { + height: 5px; + width: 10px; +} + +.scroll_table::-webkit-scrollbar-track { + border-radius: 5px; + background: #eee; +} + +.scroll_table::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #666; +} + +.ult_bt { + width: 20%; + height: 80%; +} + +.info_bt{ + width: 10% +} + +.search_bt{ + margin-left: 3%; + margin-top: 0.8%; + margin-bottom: 0.8%; +} + +.notFind{ + margin-top: 5%; + text-align: center; + font-size: 150%; +} + +.search_table { + margin-bottom: 1%; + padding-bottom: 1%; + border-bottom: solid 1px gray; + width: 100%; +} + +.search_tb { + padding-right: 2%; + padding-top: 0.2%; + padding-bottom: 0.2%; +} + +.leftSearch_tb{ + width: 35%; +} + +.batchMsg{ + color: red; + font-size: 120%; + text-align: center; + +} + +._form { + width: 95%; + margin-left: 3%; +} + +.result_info { + text-align: right; +} + +/*施設検索一覧ヘッダー*/ +.instSearchHeaderTable{ + width: 100%; +} + +.instSearchHeaderTd{ + width: 24%; +} + +.instSearchHeaderTdCenter{ + text-align: center; + width: 50%; +} + +.instSearchHeaderTdRight{ + text-align: right; + padding-right: 2%; +} + +.instSearchButchMsg{ + font-size: 80%; + color: red; +} + +.instSearchHeader_bt{ + width: 40%; +} + + +/*施設詳細*/ +.instInfoTable{ + margin-top: 1%; + margin-left: 5%; + margin-right: 2%; + margin-bottom: 2%; + width: 93%; +} + +.instInfoTableHalf1{ + margin-top: 1%; + margin-left: 5%; + margin-right: 2%; + width: 93%; +} + +.instInfoTableHalf2{ + margin-top: -0.05%; + margin-left: 5%; + margin-right: 2%; + margin-bottom: 2%; + width: 93%; +} + +.instInfoColumn { + width : 9%; + height: 40px; + background : rgb(225, 233, 250); + border : solid 1px; +} + +.instData { + background : rgb(244, 244, 244); + border : solid 1px; + padding-left : 0.5%; + padding-right : 0.5%; + padding-top: 0.25%; + padding-bottom: 0.25%; +} + +.instDataMid{ + /*NO5修正前 width: 51%;*/ + width: 20%; +} + +/*NO5にて追加 START*/ +.instDataLarge{ + width: 85%; +} + +.instDataLeft{ + width: 20%; +} + +.instDataCenter{ + width: 7%; +} + +.instDataRight{ + width: 25%; +} +/*NO5にて追加 END*/ + +.instDataSmallTextbox{ + width: 45%; +} + +/*NO5にて追加 START*/ +.instDataCenterTextbox{ + width: 80%; +} +/*NO5にて追加 END*/ + +.instInfoTextbox{ + width: 98%; + padding-right: 1%; + padding-left: 1%; +} + +.instCdTextbox{ + /*NO5修正前 width: 13%;*/ + width: 35%; + margin-left: 0.5%; + margin-right: 2%; +} + +.delReasonCdTextbox{ + /*NO5修正前 width: 2%;*/ + width: 5%; + margin-left: 0.5%; + margin-right: 1%; +} + +.delReasonTextbox{ + /*NO5修正前 width: 43%;*/ + width: 88%; + margin-left: 0.5%; + margin-right: 2%; +} + +.manageTextbox{ + width: 40%; +} + +.textboxMargin { + margin-left : 0.1%; +} + +.transitionBt{ + width: 98%; + height: 30px; +} + +.instHeaderTable{ + margin-left: 40%; +} + +.instHeaderTd{ + width: 10%; + font-size: 140%; + text-align: center; + padding-right: 2%; +} + +.trtCourseTextbox{ + width: 6%; +} + +.bedTd{ + width: 46%; +} + +.bedTextbox{ + width: 70%; +} + +.xSmallTd{ + width: 9%; +} + +.xSmallTextbox{ + width: 75%; +} + +.reExamTd{ + width: 13%; +} + +.repreTd{ + width: 50%; +} + +.repreTextbox{ + width: 95%; +} + +.trtTextbox{ + width: 5%; + margin-right: 1.2%; +} + +.parentCdTextBox{ + width: 15%; +} + +.parentNameTextBox{ + width: 75%; +} + +.hpInfoColumn{ + width : 12%; + height: 40px; + background : rgb(225, 233, 250); + border : solid 1px; +} + +.hpAssrtTd{ + width: 12%; +} + +.hpAssrtTextbox{ + width: 85%; +} + +.border_bottom_none { + border-bottom-style:none; +} + +.numberBox{ + text-align: right; +} + +/*医師検索*/ +/*ヘッダー*/ +.docHeaderTable{ + width: 100%; +} + +.docHeaderTd{ + width: 24%; +} + +.docHeaderTdCenter{ + text-align: center; + width: 50%; +} + +.docHeaderTdRight{ + text-align: right; + padding-right: 2%; +} + +.docButchMsg{ + /* font-size: 80%; */ + color: red; +} + +.docHeader_bt{ + width: 40%;s +} + +/* アルトマーク課題管理表No.2の修正 8% → 10% */ +/* アルトマーク課題管理表No.8の修正 10% → 14% */ +.docSearchColumnTd{ + width: 14%; +} + +.docSearchTextboxTd{ + width: 18%; +} + +.docSearchTextbox_td{ + width: 94%; +} + +.docSearchTextbox{ + width: 90%; + margin-right: 5%; + margin-top: 0.8%; + margin-bottom: 0.8%; +} + +.docSearchTableDivOne{ + width: 100%; +} + +.docSearchTableDivTwo{ + margin-bottom: 1%; + padding-bottom: 1%; + border-bottom: solid 1px gray; + width: 100%; +} + +.docSearchScroll{ + overflow: auto; + white-space: nowrap; + margin-bottom: 2%; + width: 100%; + height: 270px; +} + +.docSearchScroll::-webkit-scrollbar { + height: 5px; + width: 10px; +} + +.docSearchScroll::-webkit-scrollbar-track { + border-radius: 5px; + background: #eee; +} + +.docSearchScroll::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #666; +} + +.allOnOffButton{ + width: 6%; +} + +/*医師情報*/ +.docInfoTable{ + margin-top: 1%; + margin-left: 5%; + margin-right: 2%; + margin-bottom: 1%; + width: 93%; + border-bottom: solid 1px gray; +} + +.docInfoTd{ + padding-bottom: 0.5%; +} + +.docInfoTextBox{ + margin-left: 0.5%; + margin-right: 2%; + width: 8%; +} + +.docInfoTrtTextBox{ + margin-left: 0.5%; +} + +.docBelongTable{ + margin-left: 1%; + width: 98%; + border-bottom: solid 1px gray; +} + +.docBelongTd{ + width: 49%; + height: 150px; +} + +.docSocietyTable{ + width: 100%; +} + +.scroll{ + overflow: auto; + height: 120px; + width: 90%; + margin-left: 7%; + margin-bottom: 4%; +} + +.scroll::-webkit-scrollbar { + height: 5px; + width: 10px; +} + +.scroll::-webkit-scrollbar-track { + border-radius: 5px; + background: #eee; +} + +.scroll::-webkit-scrollbar-thumb { + border-radius: 5px; + background: #666; +} + +.rightBoderLine{ + border-right: solid 1px gray; +} + +.wrkplaceH1{ + margin-top: 0.3%; +} + +.wrkplaceTable{ + width: 100%; +} + + + + + + + +/* 生物由来検索、施設検索共通*/ + + + +.clear_bt{ + margin-left: 120px; + width: 60px +} + +.back_bt{ + margin-left: 1042px; + width: 80px +} + +.noLine{ + text-decoration: none; +} + + +/*アルトマーク施設検索*/ + + +/*共通:アルトマーク施設検索,医師検索,施設詳細*/ +.maxWidth_tb { + width: 100%; +} + +/*アルトマーク施設検索,医師検索共通*/ + +.search_btTd { + text-align: right; +} + +.selection { + display: none; +} + +#page-1 { + display: block; +} + + +/*医師検索*/ +.search_middleTd { + padding-right: 25px; + width : 450px; +} + +.docSearchScroll_div { + overflow: auto; + height: 200px; + width: 1132px; +} + +/*共通:施設詳細、医師詳細*/ +.transition{ + text-align: right; + margin-right: 60px; +} + + + + + +.data_width_middle { + width : 300px; +} + + +.border_top_none { + border-top-style:none; +} + + + +.textbox_margin_short { + margin-left : 5px; +} + +.label_margin { + margin-left: 10px; + margin-right: 10px; +} + + +/*医師詳細*/ +.docInfo_table{ + margin-bottom: 30px; + border-bottom: solid 1px gray; + width: 1132px; +} + +.small_tb{ + width: 100px; +} + +.docBelongScroll_div { + overflow: auto; + height: 100px; + width: 500px; + margin: 0px 30px 0px 30px; +} + +.rightPadding_table{ + padding-right: 50px; +} + + +.docPlaceScroll_div { + overflow: auto; + height: 150px; + width: 700px; + margin: 0px 30px 0px 30px; +} + +.result_tr{ + overflow-y: scroll; + overflow-x: scroll; +} + +.result_data{ + overflow-y: scroll; + overflow-x: scroll; + width: 50px; +} + +/* tablesoter */ +table.tablesorter { + font-family:arial; + background-color: #CDCDCD; + font-size: 8pt; + text-align: left; +} + +table.tablesorter thead tr th, table.tablesorter tfoot tr th { + background-color: #e6EEEE; + border: 0.1px solid silver; + font-size: 8pt; + padding: 4px; + padding-right: 20px; +} +table.tablesorter thead tr .header { + background-image: url(bg.gif); + background-repeat: no-repeat; + background-position: center right; + cursor: pointer; +} +table.tablesorter tbody td { + color: #3D3D3D; + padding: 4px; + background-color: #FFF; + border: 0.1px solid silver; + vertical-align: top; +} +table.tablesorter tbody tr.odd td { + background-color:#F0F0F6; +} +table.tablesorter thead tr .headerSortUp { + background-image: url(asc.gif); +} +table.tablesorter thead tr .headerSortDown { + background-image: url(desc.gif); +} +table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { + background-color: #8dbdd8; +} diff --git a/ecs/jskult-webapp/src/static/function/businessLogicScript.js b/ecs/jskult-webapp/src/static/function/businessLogicScript.js index 90ecc18b..f55e7858 100644 --- a/ecs/jskult-webapp/src/static/function/businessLogicScript.js +++ b/ecs/jskult-webapp/src/static/function/businessLogicScript.js @@ -211,3 +211,63 @@ function DisplayErrorDialog(strMesssage) { $("#errorTxt").html(strMesssage); $("#error").dialog("open"); } + +/* ult.jsから移植 */ +// チェックボックス全選択関数 +// 条件:チェックボックスのクラス名に"selected"というのがついていること +// 条件:ボタンにクラス名 send がついていること +function allOn(){ + $(".selected").prop("checked", true); + $(".send").prop('disabled',false); +} + +// チェックボックス全解除関数 +// 条件:チェックボックスのクラス名に"selectedページ数"というのがついていること +// 条件:ボタンにクラス名 send がついていること +function allOff(){ + $(".selected").prop("checked", false); + $(".send").prop('disabled',true); +} + +// 検索結果のところのボタンをチェックが1個でも付いたら押せるようにして、チェックがなければ押せないようにする関数 +// 条件:チェックボックスのクラス名に"selected"というのがついていること +// 条件:ボタンにクラス名 send がついていること +function resultBtDisablead(){ + var cnt1 = $('.checkNum input:checkbox:checked').length; + console.log(cnt1); + if(cnt1 == 0) { + $(".send").prop('disabled',true); + } + else { + $(".send").prop('disabled',false); + } +} + +// Enter押下時にsubmitさせなくする +$(function() { + $(document).on("keypress", "input:not(.allow_submit)", function(event) { + return event.which !== 13; + }); +}); + +// 数字-以外を許さない入力チェック +function checkNumberForm($this) +{ + var str=$this.value; + while(str.match(/[^\d\-]/)) + { + str=str.replace(/[^\d\-]/,""); + } + $this.value=str; +} + +// 数字以外を許さない入力チェック +function checkNumberOnlyForm($this) +{ + var str=$this.value; + while(str.match(/[^\d]/)) + { + str=str.replace(/[^\d]/,""); + } + $this.value=str; +} \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html new file mode 100644 index 00000000..214ea399 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -0,0 +1,744 @@ + + + + + + {% with subtitle = '医師検索一覧' %} + {% include '_header.html' %} + {% endwith %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

医師検索一覧

+ +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
医師コード: + + + 氏名(漢字): + + + 氏名(かな・カナ): + + +
勤務先コード: + + + 勤務先名(漢字): + + + 勤務先名(かな・カナ): + + +
勤務先都道府県: + + + 所属部科(漢字): + + + 診療科目(漢字): + + +
出身大学(漢字): + + + 卒年: + + +
+
+ + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
医師コード氏名勤務先名所属部科診療科目役職名出身大学卒年
+ + +
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index beda056b..58f05375 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -11,7 +11,7 @@

MeDaCA
機能メニュー



{% if menu.is_available_ult_doctor_menu() %} - Ultmarc照会(医師)

+ Ultmarc照会(医師)

{% endif %} {% if menu.is_available_ult_inst_menu() %} Ultmarc照会(施設)

From f6050ee47170ef7a1eeba919165bfbbfff0d464d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Tue, 30 May 2023 16:19:32 +0900 Subject: [PATCH 20/90] =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=AF=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 7 +- .../src/model/db/prefc_master.py | 8 ++ .../model/view/ultmarc_doctor_view_model.py | 113 ++++++++++++++++++ .../repositories/prefc_master_repository.py | 31 +++++ .../src/services/ultmarc_view_service.py | 111 +++++++++++++++++ .../src/templates/docSearch.html | 8 +- 6 files changed, 274 insertions(+), 4 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/prefc_master.py create mode 100644 ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py create mode 100644 ecs/jskult-webapp/src/repositories/prefc_master_repository.py create mode 100644 ecs/jskult-webapp/src/services/ultmarc_view_service.py diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 2f1bd5eb..ed966685 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -11,6 +11,7 @@ from src.model.view.bio_view_model import BioViewModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.bio_view_service import BioViewService +from src.services.ultmarc_view_service import UltmarcViewService from src.services.session_service import set_session from src.system_var import constants from src.templates import templates @@ -27,14 +28,14 @@ router.route_class = AuthenticatedRoute def ultmarc_view( request: Request, # batch_status_service:BatchStatusService=Depends(get_service(BatchStatusService)), - # bio_service: BioViewService=Depends(get_service(BioViewService)) + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)) ): session: UserSession = request.session # バッチ処理中の場合、機能を利用させない # if batch_status_service.is_batch_processing(): # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) # # 検索項目の取得 - # bio = bio_service.prepare_bio_view(session) + ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) # セッション書き換え session.update( actions=[ @@ -46,7 +47,7 @@ def ultmarc_view( templates_response = templates.TemplateResponse( 'docSearch.html', { 'request': request, - # 'bio': bio, + 'ultmarc': ultmarc, }, headers={'session_key': session_key} ) diff --git a/ecs/jskult-webapp/src/model/db/prefc_master.py b/ecs/jskult-webapp/src/model/db/prefc_master.py new file mode 100644 index 00000000..5010149e --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/prefc_master.py @@ -0,0 +1,8 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel + + +class PrefcMasterModel(BaseDBModel): + prefc_cd: Optional[str] + prefc_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py new file mode 100644 index 00000000..1e3cf236 --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py @@ -0,0 +1,113 @@ +import json +from collections import OrderedDict +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + +from src.model.db.prefc_master import PrefcMasterModel +from src.model.db.wholesaler_master import WholesalerMasterModel +from src.model.request.bio import BioModel +from src.model.view.bio_disp_model import BisDisplayModel +from src.system_var import environment + + +class UltmarcDoctorViewModel(BaseModel): + subtitle: str = '医師検索一覧' + batch_status: Optional[str] + prefc_models: list[PrefcMasterModel] + doctor_data: Optional[list[BisDisplayModel]] = [] + form_data: Optional[BioModel] + + def display_wholesaler_names(self): + display_names = [ + f'{whs_model.rec_whs_cd}-{whs_model.rec_whs_sub_cd}:{whs_model.nm}' + for whs_model in self.whs_models + ] + return display_names + + def ultmarc_data_json_str(self): + def date_handler(obj): + return obj.isoformat() if hasattr(obj, 'isoformat') else obj + return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) + + # def is_selected_whs_name(self, selected_wholesaler): + # if not self.is_form_submitted(): + # return '' + + # form_wholesaler_full_name = f'{self.form_data.wholesaler_code}-{self.form_data.wholesaler_sub_code}:{self.form_data.wholesaler_name}' + # return self._selected_value(form_wholesaler_full_name, selected_wholesaler) + + # def is_selected_org_kbn(self, selected_org_kbn): + # if not self.is_form_submitted(): + # return '' + # return self._selected_value(self.form_data.org_kbn, selected_org_kbn) + + # def is_input_rec_ymd_from(self): + # if not self.is_form_submitted(): + # return '' + + # return self._format_date_string(self.form_data.rec_ymd_from) + + # def is_input_rec_ymd_to(self): + # if not self.is_form_submitted(): + # return '' + + # return self._format_date_string(self.form_data.rec_ymd_to) + + # def is_input_lot_num(self): + # if not self.is_form_submitted(): + # return '' + + # return self.form_data.rec_lot_num or '' + + # def is_selected_data_kbn(self, selected_data_kbn): + # if not self.is_form_submitted(): + # return '' + + # return self._selected_value(self.form_data.data_kbn, selected_data_kbn) + + def is_selected_prefc_cd(self, selected_prefc_cd): + if not self.is_form_submitted(): + return '' + return '' + # return self._selected_value(self.form_data.maker_cd, selected_prefc_cd) + + # def is_input_rev_hsdnymd_srk_from(self): + # if not self.is_form_submitted(): + # return '' + + # return self._format_date_string(self.form_data.rev_hsdnymd_srk_from) + + # def is_input_rev_hsdnymd_srk_to(self): + # if not self.is_form_submitted(): + # return '' + + # return self._format_date_string(self.form_data.rev_hsdnymd_srk_to) + + # def is_checked_iko_flg(self): + # if not self.is_form_submitted(): + # return '' + + # return 'checked' if self.form_data.ikoFlg else '' + + def disabled_button(self): + return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' + + def is_form_submitted(self): + return self.form_data is not None + + def is_data_empty(self): + return len(self.doctor_data) == 0 + + def is_data_overflow_max_length(self): + return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + + def _format_date_string(self, date_string): + if date_string is None: + return '' + date = datetime.strptime(date_string, '%Y%m%d') + return date.strftime('%Y/%m/%d') + + def _selected_value(self, form_value: str, current_value: str): + return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/repositories/prefc_master_repository.py b/ecs/jskult-webapp/src/repositories/prefc_master_repository.py new file mode 100644 index 00000000..a8cf288f --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/prefc_master_repository.py @@ -0,0 +1,31 @@ +from src.model.db.prefc_master import PrefcMasterModel +from src.repositories.base_repository import BaseRepository + + +class PrefcMasterRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT DISTINCT + com_inst.prefc_cd AS prefc_cd, + mst_prefc.prefc_name AS prefc_name + FROM + src05.com_inst + JOIN src05.mst_prefc ON com_inst.prefc_cd = mst_prefc.prefc_cd + ORDER BY + mst_prefc.prefc_cd + """ + + def fetch_all(self) -> list[PrefcMasterModel]: + try: + self._database.connect() + result = self._database.execute_select(self.FETCH_SQL) + result_data = [res for res in result] + models = [PrefcMasterModel(**r) for r in result_data] + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] getOroshiData DB Error. ") + print(f"[ERROR] ErrorMessage: {e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py new file mode 100644 index 00000000..6d296f74 --- /dev/null +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -0,0 +1,111 @@ +import os.path as path +import shutil +from datetime import datetime + +import pandas as pd + +from src.aws.aws_api_client import AWSAPIClient +from src.aws.s3 import S3Client +from src.model.internal.session import UserSession +from src.model.request.bio import BioModel +from src.model.view.bio_disp_model import BisDisplayModel +from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel +from src.repositories.base_repository import BaseRepository +from src.repositories.bio_sales_view_repository import BioSalesViewRepository +from src.repositories.prefc_master_repository import PrefcMasterRepository +from src.repositories.pharmacy_product_master_repository import \ + PharmacyProductMasterRepository +from src.repositories.wholesaler_master_repository import \ + WholesalerMasterRepository +from src.services.base_service import BaseService +from src.system_var import constants, environment + + +class UltmarcViewService(BaseService): + REPOSITORIES = { + 'ultmarc_doctor_repository': WholesalerMasterRepository, + 'prefc_repository': PrefcMasterRepository + } + + ultmarc_doctor_repository: WholesalerMasterRepository + prefc_repository: PrefcMasterRepository + + def __init__(self, repositories: dict[str, BaseRepository], clients: dict[str, AWSAPIClient]) -> None: + super().__init__(repositories, clients) + self.ultmarc_doctor_repository = repositories['ultmarc_doctor_repository'] + self.prefc_repository = repositories['prefc_repository'] + + def prepare_ultmarc_doctor_view( + self, + session: UserSession + ) -> UltmarcDoctorViewModel: + # # 都道府県リストを取得 + prefcs = self.prefc_repository.fetch_all() + + ultmarc = UltmarcDoctorViewModel( + prefc_models=prefcs + ) + return ultmarc + + def search_bio_data(self, search_params: BioModel): + # 生物由来データを検索 + bio_sales_view_data = self.bio_sales_repository.fetch_many(parameter=search_params) + # 画面表示用に加工 + display_bio_data: list[BisDisplayModel] = [BisDisplayModel(data) for data in bio_sales_view_data] + + return display_bio_data + + def search_download_bio_data(self, search_params: BioModel): + # 生物由来データをダウンロードするために、DBから検索した結果をデータフレームに変換 + bio_sales_data_frame = self.bio_sales_repository.fetch_as_data_frame(parameter=search_params) + return bio_sales_data_frame + + def write_excel_file(self, data_frame: pd.DataFrame, user_id: str, timestamp: datetime): + # Excelに書き込み + output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, + f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.xlsx') + + # テンプレートファイルをコピーして出力ファイルの枠だけを作る + shutil.copyfile( + src=constants.BIO_EXCEL_TEMPLATE_FILE_PATH, + dst=output_file_path + ) + # ExcelWriterの追記モード(`mode`='a')でファイルを開く + # `engine``='openpyxlは、追記モードでExcelを開くためのおまじない(xlsxしか動作しないが、こちらが出すものなので問題ナシ) + # 既存シートへの書き込みは、`if_sheet_exists='overlay'を指定する + with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer: + # `sheet_name`引数を省略した場合は、「Sheet1」に書き込む。 + # DF内のヘッダと連番を書き込みたくない場合、`header`と`index`をFalseに指定する。 + # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。 + data_frame.to_excel(writer, header=False, index=False, startrow=1, startcol=0) + + return output_file_path + + def write_csv_file(self, data_frame: pd.DataFrame, user_id: str, header: list[str], timestamp: datetime): + # csvに書き込み + output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, + f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.csv') + # 横長のDataFrameとするため、ヘッダーの加工処理 + header_data = {} + for df_column, header_column in zip(data_frame.columns, header): + header_data[df_column] = header_column + + header_df = pd.DataFrame([header_data], index=None) + output_df = pd.concat([header_df, data_frame]) + # ヘッダー行としてではなく、1レコードとして出力する + output_df.to_csv(output_file_path, index=False, header=False) + + return output_file_path + + def upload_bio_data_file(self, local_file_path: str) -> None: + bucket_name = environment.BIO_ACCESS_LOG_BUCKET + # TODO: フォルダを変える + file_key = f'bio/{path.basename(local_file_path)}' + self.s3_client.upload_file(local_file_path, bucket_name, file_key) + + def generate_download_file_url(self, local_file_path: str, user_id: str, kind: str) -> str: + bucket_name = environment.BIO_ACCESS_LOG_BUCKET + # TODO: フォルダを変える + file_key = f'bio/{path.basename(local_file_path)}' + download_filename = f'{user_id}_生物由来卸販売データ.{kind}' + return self.s3_client.generate_presigned_url(bucket_name, file_key, download_filename) diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 214ea399..45189de3 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -11,7 +11,7 @@ require_once('/home/nds_dwh/webroot/common/function/getDateBatchJSString.php'); - {% with subtitle = '医師検索一覧' %} + {% with subtitle = ultmarc.subtitle %} {% include '_header.html' %} {% endwith %} @@ -231,6 +231,12 @@ if (!isset($isDBSuccess)) { + 氏名(漢字): - + @@ -196,7 +195,7 @@ if (!isset($isDBSuccess)) { 氏名(かな・カナ): - + @@ -205,14 +204,14 @@ if (!isset($isDBSuccess)) { 勤務先コード: - + 勤務先名(漢字): - + @@ -220,7 +219,7 @@ if (!isset($isDBSuccess)) { 勤務先名(かな・カナ): - + @@ -231,7 +230,7 @@ if (!isset($isDBSuccess)) { 勤務先都道府県: - {% for prefc in ultmarc.prefc_models %} @@ -253,14 +252,14 @@ if (!isset($isDBSuccess)) { 所属部科(漢字): - + 診療科目(漢字): - + @@ -269,18 +268,18 @@ if (!isset($isDBSuccess)) { 出身大学(漢字): - + 卒年: - + - + From 65ccc61f13fb3ba46df5b430941258c909c9b904 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 1 Jun 2023 15:54:15 +0900 Subject: [PATCH 24/90] =?UTF-8?q?feat:=20=E7=94=9F=E7=89=A9=E7=94=B1?= =?UTF-8?q?=E6=9D=A5=E3=83=AD=E3=83=83=E3=83=88=E5=88=86=E8=A7=A3=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=AE=E9=9B=9B=E5=BD=A2=E3=82=92=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E3=80=82=E3=82=AF=E3=82=A8=E3=83=AA=E5=AE=9F=E8=A3=85=E3=81=AF?= =?UTF-8?q?=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 --- .../batch/bio_sales/create_bio_sales_lot.py | 57 ++++++++++++++++--- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py index 509d7300..5e7d0233 100644 --- a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py +++ b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py @@ -1,4 +1,6 @@ from src.batch.common.batch_context import BatchContext +from src.db.database import Database +from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger batch_context = BatchContext.get_instance() @@ -7,19 +9,56 @@ logger = get_logger('生物由来卸販売ロット分解') def exec(): """生物由来卸販売ロット分解""" - logger.debug('生物由来卸販売ロット分解:起動') + logger.debug('生物由来卸販売ロット分解処理開始') + # 営業日ではない場合、処理をスキップする if batch_context.is_not_business_day: logger.info('営業日ではないため、生物由来卸販売ロット分解処理をスキップします。') return + db = Database.get_instance() + try: + db.connect() + db.begin() + # 生物由来ロット分解データの未確定データを削除する + _delete_not_confirm_data_in_bio_sales_lot(db) + # 生物由来ロット分解データを作成する + _insert_bio_sales_lot(db) + # 生物由来ロット分解データの不要レコードを削除する + _delete_empty_lot_record(db) + # 製造ロット管理番号マスタから有効期限を生物由来ロット分解データにセットする + _set_expr_dt_from_lot_num_mst(db) + # Veeva取引区分が返品(2)の場合、数量をマイナスに反転する + _reverse_qty_if_returns(db) + db.commit() + logger.debug('生物由来卸販売ロット分解処理終了') + return + except Exception as e: + db.rollback() + raise BatchOperationException(e) + finally: + db.disconnect() - # # 非同期処理のサンプル - # import time - # for _ in range(50): - # logger.info('処理中') - # time.sleep(0.5) - # TODO: ここに処理を追記していく +def _delete_not_confirm_data_in_bio_sales_lot(db: Database): + # 生物由来ロット分解データの未確定データ削除 + pass - logger.debug('生物由来卸販売ロット分解:終了') - return + +def _insert_bio_sales_lot(db: Database): + # 生物由来ロット分解データを作成 + pass + + +def _delete_empty_lot_record(db: Database): + # 生物由来ロット分解データの製造番号が空のレコードを削除 + pass + + +def _set_expr_dt_from_lot_num_mst(db: Database): + # 製造ロット管理番号マスタから有効期限をセット + pass + + +def _reverse_qty_if_returns(db: Database): + # Veeva取引区分が返品(2)の場合、数量をマイナスに反転する + pass From 0a7664ac3a9041c067bfb0e4769e1bb1303bf3e1 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 1 Jun 2023 15:55:09 +0900 Subject: [PATCH 25/90] =?UTF-8?q?fix:=20DCF=E6=96=BD=E8=A8=AD=E7=B5=B1?= =?UTF-8?q?=E5=90=88=E3=83=9E=E3=82=B9=E3=82=BF=E4=BD=9C=E6=88=90=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=AE=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=9F=E3=83=B3=E3=82=B0=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=80=82=EF=BC=88exec=E3=81=A7=E3=83=88=E3=83=A9?= =?UTF-8?q?=E3=83=B3=E3=82=B6=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8C?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E6=96=B9=E3=81=8C=E8=A6=8B=E3=82=84=E3=81=99=E3=81=84=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge/create_dcf_inst_merge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py index 0dad2288..96d66ad7 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py @@ -24,6 +24,7 @@ def exec(): logger.debug('DCF施設統合マスタ作成処理開始') # COM施設からDCF施設統合マスタに登録 (is_add_dcf_inst_merge, duplication_inst_records) = _insert_dcf_inst_merge_from_com_inst(db) + db.commit() # DCF施設統合マスタ追加のログを出力する if is_add_dcf_inst_merge: logger.info('[NOTICE]DCF施設統合マスタが追加されました。') @@ -131,7 +132,6 @@ def _insert_dcf_inst_merge_from_com_inst(db: Database) -> tuple[bool, list[dict] elapsed_time = ElapsedTime() res = db.execute(insert_sql, params) logging_sql(logger, insert_sql) - db.commit() logger.info(f'COM施設からDCF施設統合マスタに登録成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: logger.debug('COM施設からDCF施設統合マスタの登録に失敗') From 9ae92789678fad933360267f7f675b50b5074348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 1 Jun 2023 15:58:52 +0900 Subject: [PATCH 26/90] =?UTF-8?q?feat:=20=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dcf_inst_merge/integrate_dcf_inst_merge.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index 20ac5fcc..832cc20c 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -40,7 +40,7 @@ def _set_enabled_dct_inst_merge(db: Database) -> list[dict]: if _update_dcf_inst_merge(db, 0) > 0: # DCF施設統合マスタの過去分の洗い替え for row in enabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd'], 0) return enabled_dst_inst_merge_records @@ -52,7 +52,7 @@ def _set_disabled_dct_inst_merge(db: Database): if _update_dcf_inst_merge(db, 1) > 0: # DCF施設統合マスタの過去分の洗い替え for row in disabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], 1) def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): @@ -356,15 +356,16 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: logging_sql(logger, sql) logger.info(f'DCF施設統合マスタの有効データを{log_message} 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug(f'DCF施設統合マスタの{log_message} 失敗') + logger.debug(f'DCF施設統合マスタの有効データを{log_message} 失敗') raise e return res.rowcount -def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str): +def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str, muko_flg: int): # dcf_inst_mergeをUPDATE try: + log_message = '' if muko_flg == 0 else '戻し' elapsed_time = ElapsedTime() sql = """ UPDATE @@ -384,9 +385,9 @@ def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_c } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'移行先DCF施設コードの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'移行先DCF施設コードの{log_message}更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('移行先DCF施設コードの更新に失敗') + logger.debug(f'移行先DCF施設コードの{log_message}更新に失敗') raise e From b9e4a73b941909476e503768647abc7fa57bd3d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 2 Jun 2023 09:51:16 +0900 Subject: [PATCH 27/90] =?UTF-8?q?feat:=20=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E9=83=A8=E5=88=86=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index 832cc20c..b4b6e4e7 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -40,7 +40,7 @@ def _set_enabled_dct_inst_merge(db: Database) -> list[dict]: if _update_dcf_inst_merge(db, 0) > 0: # DCF施設統合マスタの過去分の洗い替え for row in enabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd'], 0) + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd'], '') return enabled_dst_inst_merge_records @@ -52,7 +52,7 @@ def _set_disabled_dct_inst_merge(db: Database): if _update_dcf_inst_merge(db, 1) > 0: # DCF施設統合マスタの過去分の洗い替え for row in disabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], 1) + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], '戻し') def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): @@ -362,10 +362,9 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: return res.rowcount -def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str, muko_flg: int): +def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str, log_message: str): # dcf_inst_mergeをUPDATE try: - log_message = '' if muko_flg == 0 else '戻し' elapsed_time = ElapsedTime() sql = """ UPDATE From 45c6af090c7832b14dc6e4475b0bcc7a8f2d4f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Fri, 2 Jun 2023 10:33:16 +0900 Subject: [PATCH 28/90] =?UTF-8?q?SQL=E3=82=A8=E3=83=A9=E3=83=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 7 +- ecs/jskult-webapp/src/db/sql_condition.py | 13 +- .../src/model/db/ultmarc_doctor.py | 19 +++ .../model/view/ultmarc_doctor_view_model.py | 86 ++++++++++--- .../repositories/ultmarc_doctor_repository.py | 120 ++++++++++++++++++ .../src/services/ultmarc_view_service.py | 110 ++++++++-------- ecs/jskult-webapp/src/templates/_header.html | 3 + .../src/templates/bioSearchList.html | 5 +- .../src/templates/docSearch.html | 83 +++++------- 9 files changed, 314 insertions(+), 132 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 19d43e5e..a42d1ccc 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -73,16 +73,19 @@ def search_doc( # if batch_status_service.is_batch_processing(): # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 生物由来データを検索 - ultmarc_doctor_data = [] + # 医師データを検索 + ultmarc_doctor_data = ultmarc_service.search_doctor_data(ultmarc_doctor_form) + # 検索項目などのデータを取得 ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) ultmarc.is_batch_processing = batch_status_service.is_batch_processing() ultmarc.doctor_data = ultmarc_doctor_data + ultmarc.form_data = ultmarc_doctor_form # bio: BioViewModel = bio_service.prepare_bio_view(session) # bio.bio_data = ultmarc_doctor_data # bio.form_data = bio_form + # セッション書き換え session.update( actions=[ diff --git a/ecs/jskult-webapp/src/db/sql_condition.py b/ecs/jskult-webapp/src/db/sql_condition.py index dfd73858..f0f929a3 100644 --- a/ecs/jskult-webapp/src/db/sql_condition.py +++ b/ecs/jskult-webapp/src/db/sql_condition.py @@ -4,7 +4,7 @@ class SQLCondition: param: str literal: bool - def __init__(self, column: str, operator: str, param: str, literal=False) -> None: + def __init__(self, column: str, operator: str, param: str, literal=False, like_wildcard=False) -> None: """ Args: column (str): カラム名 @@ -12,17 +12,22 @@ class SQLCondition: param (str): パラメータ(プレースホルダーかリテラル値か) literal (bool, optional): リテラル値を埋め込むかどうか。 画面から渡ってきた値を使うとSQLインジェクションの危険性があるため、固定値で使用すること。 + like_wildcard (bool, optional): like検索で部分一致検索にするかどうか。 """ self.column = column self.operator = operator self.param = param - self.literal=literal - + self.literal = literal + self.like_wildcard = like_wildcard + def apply(self): # literalがFalseならプレースホルダー。Trueだったならは固定値。 param = f':{self.param}' if self.literal is False else self.param + # like_wildcardがTrueならLike検索にする + param = f'%{param}%' if self.like_wildcard is False else param return f' {self.column} {self.operator} {param}' + # 定数 EQ = '=' NE = '<>' @@ -32,4 +37,4 @@ GE = '>=' LE = '<=' LIKE = 'LIKE' IS = 'IS' -IS_NOT = 'IS NOT' \ No newline at end of file +IS_NOT = 'IS NOT' diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor.py new file mode 100644 index 00000000..f5576a02 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor.py @@ -0,0 +1,19 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorDBModel(BaseDBModel): + dcf_pcf_dr_cd: Optional[str] + dr_name: Optional[str] + form_inst_name_kanji: Optional[str] + dcf_dsf_inst_cd: Optional[str] + blng_sec_name: Optional[str] + trt_course_name: Optional[str] + form_post_name: Optional[str] + alma: Optional[str] + grad_y: Optional[str] + prefc_name: Optional[str] + blng_sec_cd: Optional[str] diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py index 894573e4..02ac88a0 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py @@ -6,8 +6,8 @@ from typing import Optional from pydantic import BaseModel from src.model.db.prefc_master import PrefcMasterModel -from src.model.db.wholesaler_master import WholesalerMasterModel -from src.model.request.bio import BioModel +# from src.model.db.doctor_view import DoctorViewModel +from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.view.bio_disp_model import BisDisplayModel from src.system_var import environment @@ -16,13 +16,14 @@ class UltmarcDoctorViewModel(BaseModel): subtitle: str = '医師検索一覧' is_batch_processing: Optional[bool] prefc_models: list[PrefcMasterModel] + # doctor_models: list[DoctorViewModel] doctor_data: Optional[list[BisDisplayModel]] = [] - form_data: Optional[BioModel] + form_data: Optional[UltmarcDoctorModel] def display_wholesaler_names(self): display_names = [ f'{whs_model.rec_whs_cd}-{whs_model.rec_whs_sub_cd}:{whs_model.nm}' - for whs_model in self.whs_models + for whs_model in self.doctor_models ] return display_names @@ -30,13 +31,74 @@ class UltmarcDoctorViewModel(BaseModel): def date_handler(obj): return obj.isoformat() if hasattr(obj, 'isoformat') else obj return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) +# ************************** のま作 ************************** - # def is_selected_whs_name(self, selected_wholesaler): - # if not self.is_form_submitted(): - # return '' + # 医師コード + def is_input_dcf_pcf_dr_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.dcf_pcf_dr_cd - # form_wholesaler_full_name = f'{self.form_data.wholesaler_code}-{self.form_data.wholesaler_sub_code}:{self.form_data.wholesaler_name}' - # return self._selected_value(form_wholesaler_full_name, selected_wholesaler) + # 氏名(漢字) + def is_input_dr_name(self): + if not self.is_form_submitted(): + return '' + return self.form_data.dr_name + + # 氏名(かな・カナ) + def is_input_dr_name_kana(self): + if not self.is_form_submitted(): + return '' + return self.form_data.dr_name_kana + + # 勤務先コード + def is_input_dcf_dsf_inst_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.dcf_dsf_inst_cd + + # 勤務先名(漢字) + def is_input_form_inst_name_kanji(self): + if not self.is_form_submitted(): + return '' + return self.form_data.form_inst_name_kanji + + # 勤務先名(かな・カナ) + def is_input_form_inst_name_kana(self): + if not self.is_form_submitted(): + return '' + return self.form_data.form_inst_name_kana + + # 勤務先都道府県 + def is_selected_prefc_cd(self, selected_prefc_cd): + if not self.is_form_submitted(): + return '' + return self._selected_value(self.form_data.prefc_cd, selected_prefc_cd) + + # 所属部科(漢字) + def is_input_blng_sec_name(self): + if not self.is_form_submitted(): + return '' + return self.form_data.blng_sec_name + + # 診療科目(漢字) + def is_input_trt_course_name(self): + if not self.is_form_submitted(): + return '' + return self.form_data.trt_course_name + + # 出身大学(漢字) + def is_input_alma(self): + if not self.is_form_submitted(): + return '' + return self.form_data.alma + + # 卒年 + def is_grad_y(self): + if not self.is_form_submitted(): + return '' + return self.form_data.grad_y +# ************************** のま作 ************************** # def is_selected_org_kbn(self, selected_org_kbn): # if not self.is_form_submitted(): @@ -67,12 +129,6 @@ class UltmarcDoctorViewModel(BaseModel): # return self._selected_value(self.form_data.data_kbn, selected_data_kbn) - def is_selected_prefc_cd(self, selected_prefc_cd): - if not self.is_form_submitted(): - return '' - return '' - # return self._selected_value(self.form_data.maker_cd, selected_prefc_cd) - # def is_input_rev_hsdnymd_srk_from(self): # if not self.is_form_submitted(): # return '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py new file mode 100644 index 00000000..5321ba46 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -0,0 +1,120 @@ +from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel +from src.repositories.base_repository import BaseRepository +from src.db import sql_condition as condition +from src.db.sql_condition import SQLCondition +from src.model.request.ultmarc_doctor import UltmarcDoctorModel +from src.repositories.base_repository import BaseRepository +from src.util.string_util import is_not_empty + + +class UltmarcDoctorRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_dr.dcf_pcf_dr_cd, + com_dr.dr_name, + com_inst.form_inst_name_kanji, + com_inst.dcf_dsf_inst_cd, + com_blng_sec.blng_sec_name, + com_trt_course.trt_course_name, + com_post.form_post_name, + com_alma.alma, + com_dr.grad_y, + mst_prefc.prefc_name, + com_dr_wrkplace.blng_sec_cd + FROM + src05.com_dr + LEFT JOIN src05.mst_prefc ON com_dr.prefc_cd = mst_prefc.prefc_cd + LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd + LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN src05.com_dr_trt_course ON com_dr.dcf_pcf_dr_cd = com_dr_trt_course.dcf_pcf_dr_cd + LEFT JOIN src05.com_trt_course ON com_dr_trt_course.trt_course_cd = com_trt_course.trt_course_cd + LEFT JOIN src05.com_post ON com_dr_wrkplace.post_cd = com_post.post_cd + LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd + WHERE + {where_clause} + ORDER BY + com_dr.dcf_pcf_dr_cd, + com_dr_wrkplace.dcf_dsf_inst_cd, + com_dr_wrkplace.blng_sec_cd, + com_dr_trt_course.trt_course_cd + \ + """ + + def fetch_many(self, parameter: UltmarcDoctorModel) -> list[UltmarcDoctorDBModel]: + try: + self._database.connect() + where_clause = self.__build_condition(parameter) + query = self.FETCH_SQL.format(where_clause=where_clause) + result = self._database.execute_select(query, parameter.dict()) + models = [UltmarcDoctorDBModel(**r) for r in result] + + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() + + def __build_condition(self, parameter: UltmarcDoctorModel): + where_clauses: list[SQLCondition] = [] + + # 医師コード + if is_not_empty(parameter.dcf_pcf_dr_cd): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('com_dr.dcf_pcf_dr_cd', condition.LIKE, + 'dcf_pcf_dr_cd', like_wildcard=True)) + # 氏名(漢字) + if is_not_empty(parameter.dr_name): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('dr_name', condition.LIKE, 'dr_name', like_wildcard=True)) + # 氏名(かな・カナ) + if is_not_empty(parameter.dr_name_kana): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('dr_name_kana', condition.LIKE, 'dr_name_kana', like_wildcard=True)) + # 勤務先コード + if is_not_empty(parameter.dcf_dsf_inst_cd): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('com_inst.dcf_dsf_inst_cd', + condition.LIKE, 'dcf_dsf_inst_cd', like_wildcard=True)) + # 勤務先名(漢字) + if is_not_empty(parameter.form_inst_name_kanji): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('form_inst_name_kanji', condition.LIKE, + 'form_inst_name_kanji', like_wildcard=True)) + # 勤務先名(かな・カナ) + if is_not_empty(parameter.form_inst_name_kana): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('form_inst_name_kana', condition.LIKE, + 'form_inst_name_kana', like_wildcard=True)) + + # 勤務先都道府県 + if is_not_empty(parameter.prefc_cd): + where_clauses.append(SQLCondition('com_inst.prefc_cd', condition.EQ, 'prefc_cd')) + + # 所属部科(漢字) + if is_not_empty(parameter.blng_sec_name): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('com_blng_sec.blng_sec_name', + condition.LIKE, 'blng_sec_name', like_wildcard=True)) + + # 診療科目(漢字) + if is_not_empty(parameter.trt_course_name): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('trt_course_name', condition.LIKE, 'trt_course_name', like_wildcard=True)) + + # 出身大学(漢字) + if is_not_empty(parameter.alma): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('alma', condition.LIKE, 'alma', like_wildcard=True)) + + # 卒年 + if is_not_empty(parameter.grad_y): + # 必ず部分一致で検索 + where_clauses.append(SQLCondition('grad_y', condition.LIKE, 'grad_y', like_wildcard=True)) + + where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) + + return where_clauses_str diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 6d296f74..0fd38f18 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -7,12 +7,13 @@ import pandas as pd from src.aws.aws_api_client import AWSAPIClient from src.aws.s3 import S3Client from src.model.internal.session import UserSession -from src.model.request.bio import BioModel +from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.view.bio_disp_model import BisDisplayModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel from src.repositories.base_repository import BaseRepository from src.repositories.bio_sales_view_repository import BioSalesViewRepository from src.repositories.prefc_master_repository import PrefcMasterRepository +from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository from src.repositories.pharmacy_product_master_repository import \ PharmacyProductMasterRepository from src.repositories.wholesaler_master_repository import \ @@ -23,11 +24,11 @@ from src.system_var import constants, environment class UltmarcViewService(BaseService): REPOSITORIES = { - 'ultmarc_doctor_repository': WholesalerMasterRepository, + 'ultmarc_doctor_repository': UltmarcDoctorRepository, 'prefc_repository': PrefcMasterRepository } - ultmarc_doctor_repository: WholesalerMasterRepository + ultmarc_doctor_repository: UltmarcDoctorRepository prefc_repository: PrefcMasterRepository def __init__(self, repositories: dict[str, BaseRepository], clients: dict[str, AWSAPIClient]) -> None: @@ -47,65 +48,62 @@ class UltmarcViewService(BaseService): ) return ultmarc - def search_bio_data(self, search_params: BioModel): - # 生物由来データを検索 - bio_sales_view_data = self.bio_sales_repository.fetch_many(parameter=search_params) - # 画面表示用に加工 - display_bio_data: list[BisDisplayModel] = [BisDisplayModel(data) for data in bio_sales_view_data] + def search_doctor_data(self, search_params: UltmarcDoctorModel): + # 医師データを検索 + ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) + return ultmarc_doctor_data - return display_bio_data + # def search_download_bio_data(self, search_params: BioModel): + # # 生物由来データをダウンロードするために、DBから検索した結果をデータフレームに変換 + # bio_sales_data_frame = self.bio_sales_repository.fetch_as_data_frame(parameter=search_params) + # return bio_sales_data_frame - def search_download_bio_data(self, search_params: BioModel): - # 生物由来データをダウンロードするために、DBから検索した結果をデータフレームに変換 - bio_sales_data_frame = self.bio_sales_repository.fetch_as_data_frame(parameter=search_params) - return bio_sales_data_frame + # def write_excel_file(self, data_frame: pd.DataFrame, user_id: str, timestamp: datetime): + # # Excelに書き込み + # output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, + # f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.xlsx') - def write_excel_file(self, data_frame: pd.DataFrame, user_id: str, timestamp: datetime): - # Excelに書き込み - output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, - f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.xlsx') + # # テンプレートファイルをコピーして出力ファイルの枠だけを作る + # shutil.copyfile( + # src=constants.BIO_EXCEL_TEMPLATE_FILE_PATH, + # dst=output_file_path + # ) + # # ExcelWriterの追記モード(`mode`='a')でファイルを開く + # # `engine``='openpyxlは、追記モードでExcelを開くためのおまじない(xlsxしか動作しないが、こちらが出すものなので問題ナシ) + # # 既存シートへの書き込みは、`if_sheet_exists='overlay'を指定する + # with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer: + # # `sheet_name`引数を省略した場合は、「Sheet1」に書き込む。 + # # DF内のヘッダと連番を書き込みたくない場合、`header`と`index`をFalseに指定する。 + # # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。 + # data_frame.to_excel(writer, header=False, index=False, startrow=1, startcol=0) - # テンプレートファイルをコピーして出力ファイルの枠だけを作る - shutil.copyfile( - src=constants.BIO_EXCEL_TEMPLATE_FILE_PATH, - dst=output_file_path - ) - # ExcelWriterの追記モード(`mode`='a')でファイルを開く - # `engine``='openpyxlは、追記モードでExcelを開くためのおまじない(xlsxしか動作しないが、こちらが出すものなので問題ナシ) - # 既存シートへの書き込みは、`if_sheet_exists='overlay'を指定する - with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer: - # `sheet_name`引数を省略した場合は、「Sheet1」に書き込む。 - # DF内のヘッダと連番を書き込みたくない場合、`header`と`index`をFalseに指定する。 - # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。 - data_frame.to_excel(writer, header=False, index=False, startrow=1, startcol=0) + # return output_file_path - return output_file_path + # def write_csv_file(self, data_frame: pd.DataFrame, user_id: str, header: list[str], timestamp: datetime): + # # csvに書き込み + # output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, + # f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.csv') + # # 横長のDataFrameとするため、ヘッダーの加工処理 + # header_data = {} + # for df_column, header_column in zip(data_frame.columns, header): + # header_data[df_column] = header_column - def write_csv_file(self, data_frame: pd.DataFrame, user_id: str, header: list[str], timestamp: datetime): - # csvに書き込み - output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, - f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.csv') - # 横長のDataFrameとするため、ヘッダーの加工処理 - header_data = {} - for df_column, header_column in zip(data_frame.columns, header): - header_data[df_column] = header_column + # header_df = pd.DataFrame([header_data], index=None) + # output_df = pd.concat([header_df, data_frame]) + # # ヘッダー行としてではなく、1レコードとして出力する + # output_df.to_csv(output_file_path, index=False, header=False) - header_df = pd.DataFrame([header_data], index=None) - output_df = pd.concat([header_df, data_frame]) - # ヘッダー行としてではなく、1レコードとして出力する - output_df.to_csv(output_file_path, index=False, header=False) + # return output_file_path - return output_file_path + # def upload_bio_data_file(self, local_file_path: str) -> None: + # bucket_name = environment.BIO_ACCESS_LOG_BUCKET + # # TODO: フォルダを変える + # file_key = f'bio/{path.basename(local_file_path)}' + # self.s3_client.upload_file(local_file_path, bucket_name, file_key) - def upload_bio_data_file(self, local_file_path: str) -> None: - bucket_name = environment.BIO_ACCESS_LOG_BUCKET - # TODO: フォルダを変える - file_key = f'bio/{path.basename(local_file_path)}' - self.s3_client.upload_file(local_file_path, bucket_name, file_key) - - def generate_download_file_url(self, local_file_path: str, user_id: str, kind: str) -> str: - bucket_name = environment.BIO_ACCESS_LOG_BUCKET - # TODO: フォルダを変える - file_key = f'bio/{path.basename(local_file_path)}' - download_filename = f'{user_id}_生物由来卸販売データ.{kind}' - return self.s3_client.generate_presigned_url(bucket_name, file_key, download_filename) + # def generate_download_file_url(self, local_file_path: str, user_id: str, kind: str) -> str: + # bucket_name = environment.BIO_ACCESS_LOG_BUCKET + # # TODO: フォルダを変える + # file_key = f'bio/{path.basename(local_file_path)}' + # download_filename = f'{user_id}_生物由来卸販売データ.{kind}' + # return self.s3_client.generate_presigned_url(bucket_name, file_key, download_filename) diff --git a/ecs/jskult-webapp/src/templates/_header.html b/ecs/jskult-webapp/src/templates/_header.html index ae41e99c..01a1521a 100644 --- a/ecs/jskult-webapp/src/templates/_header.html +++ b/ecs/jskult-webapp/src/templates/_header.html @@ -6,9 +6,12 @@ + + + diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index cc208efd..d44247c1 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -5,10 +5,7 @@ {% include '_header.html' %} {% endwith %} - - - - + @@ -180,14 +177,16 @@ if (!isset($isDBSuccess)) { 医師コード: - + 氏名(漢字): - + @@ -195,7 +194,8 @@ if (!isset($isDBSuccess)) { 氏名(かな・カナ): - + @@ -204,14 +204,16 @@ if (!isset($isDBSuccess)) { 勤務先コード: - + 勤務先名(漢字): - + @@ -219,7 +221,8 @@ if (!isset($isDBSuccess)) { 勤務先名(かな・カナ): - + @@ -252,14 +255,16 @@ if (!isset($isDBSuccess)) { 所属部科(漢字): - + 診療科目(漢字): - + @@ -268,13 +273,15 @@ if (!isset($isDBSuccess)) { 出身大学(漢字): - + 卒年: - + @@ -672,7 +679,7 @@ if (!isset($isDBSuccess)) { $(function() { // スピナー出さない場合は以下、エスケープせず埋め込む // {% autoescape False%} - let searchResultString = '{}' + let searchResultString = '{{ultmarc.ultmarc_data_json_str()}}' // {% endautoescape%} const searchResultData = JSON.parse(searchResultString) if (searchResultData.length == 0) { @@ -699,43 +706,17 @@ if (!isset($isDBSuccess)) { function pagination_content(datas) { const display_keys = [ - 'slip_org_kbn', - 'slip_mgt_no', - 'rec_ymd', - 'rec_whs_cd', - 'rec_whs_sub_cd', - 'whs_nm', - 'rec_whs_org_cd', - 'rec_urag_no', - 'rev_hsdnymd_srk', - 'rec_tran_kbn', - 'tran_kbn_nm', - 'mkr_cd', - 'rec_comm_cd', - 'comm_nm', - 'whs_rep_comm_nm', - 'nnsk_cd', - 'rec_nnskfcl_nm', - 'whs_rep_nnskfcl_nm', - 'rec_nnsk_fcl_addr', - 'whs_rep_nnsk_fcl_addr', - 'rec_lot_num', - 'amt_fugo', - 'expr_dt', - 'data_kbn', - 'lot_no_err_flg', - 'bef_slip_mgt_no', - 'ins_usr', - 'ins_dt', - 'inst_cd', - 'inst_name_form', - 'address', - 'tel_no', - 'v_whs_cd', - 'v_whsorg_cd', - 'whs_org_nm', - 'v_tran_cd', - 'iko_flg', + 'dcf_pcf_dr_cd', + 'dr_name', + 'form_inst_name_kanji', + 'dcf_dsf_inst_cd', + 'blng_sec_name', + 'trt_course_name', + 'form_post_name', + 'alma', + 'grad_y', + 'prefc_name', + 'blng_sec_cd' ]; const tableRow = document.createElement('tr') return datas.map(function (data) { From 79d241aa18cf304c135a56042ebf8f862b3378fb Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 2 Jun 2023 11:45:50 +0900 Subject: [PATCH 29/90] =?UTF-8?q?feat:=20=E5=8C=BB=E5=B8=AB=E3=81=AE?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=B8=80=E8=87=B4=E6=A4=9C=E7=B4=A2=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/db/sql_condition.py | 6 +-- .../repositories/ultmarc_doctor_repository.py | 44 ++++++++++++------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/ecs/jskult-webapp/src/db/sql_condition.py b/ecs/jskult-webapp/src/db/sql_condition.py index f0f929a3..d0d645c7 100644 --- a/ecs/jskult-webapp/src/db/sql_condition.py +++ b/ecs/jskult-webapp/src/db/sql_condition.py @@ -4,7 +4,7 @@ class SQLCondition: param: str literal: bool - def __init__(self, column: str, operator: str, param: str, literal=False, like_wildcard=False) -> None: + def __init__(self, column: str, operator: str, param: str, literal=False) -> None: """ Args: column (str): カラム名 @@ -12,19 +12,15 @@ class SQLCondition: param (str): パラメータ(プレースホルダーかリテラル値か) literal (bool, optional): リテラル値を埋め込むかどうか。 画面から渡ってきた値を使うとSQLインジェクションの危険性があるため、固定値で使用すること。 - like_wildcard (bool, optional): like検索で部分一致検索にするかどうか。 """ self.column = column self.operator = operator self.param = param self.literal = literal - self.like_wildcard = like_wildcard def apply(self): # literalがFalseならプレースホルダー。Trueだったならは固定値。 param = f':{self.param}' if self.literal is False else self.param - # like_wildcardがTrueならLike検索にする - param = f'%{param}%' if self.like_wildcard is False else param return f' {self.column} {self.operator} {param}' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index 5321ba46..f9651d98 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -1,7 +1,6 @@ -from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel -from src.repositories.base_repository import BaseRepository from src.db import sql_condition as condition from src.db.sql_condition import SQLCondition +from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.repositories.base_repository import BaseRepository from src.util.string_util import is_not_empty @@ -35,8 +34,8 @@ class UltmarcDoctorRepository(BaseRepository): WHERE {where_clause} ORDER BY - com_dr.dcf_pcf_dr_cd, - com_dr_wrkplace.dcf_dsf_inst_cd, + com_dr.dcf_pcf_dr_cd, + com_dr_wrkplace.dcf_dsf_inst_cd, com_dr_wrkplace.blng_sec_cd, com_dr_trt_course.trt_course_cd \ @@ -45,9 +44,11 @@ class UltmarcDoctorRepository(BaseRepository): def fetch_many(self, parameter: UltmarcDoctorModel) -> list[UltmarcDoctorDBModel]: try: self._database.connect() - where_clause = self.__build_condition(parameter) + # 文字列の検索を部分一致にするため、モデルをコピー。以降はこのコピーを使用する。 + clone_parameter = UltmarcDoctorModel(**parameter.dict()) + where_clause = self.__build_condition(clone_parameter) query = self.FETCH_SQL.format(where_clause=where_clause) - result = self._database.execute_select(query, parameter.dict()) + result = self._database.execute_select(query, clone_parameter.dict()) models = [UltmarcDoctorDBModel(**r) for r in result] return models @@ -64,31 +65,36 @@ class UltmarcDoctorRepository(BaseRepository): # 医師コード if is_not_empty(parameter.dcf_pcf_dr_cd): # 必ず部分一致で検索 - where_clauses.append(SQLCondition('com_dr.dcf_pcf_dr_cd', condition.LIKE, - 'dcf_pcf_dr_cd', like_wildcard=True)) + parameter.dcf_pcf_dr_cd = f'%{parameter.dcf_pcf_dr_cd}%' + where_clauses.append(SQLCondition('com_dr.dcf_pcf_dr_cd', condition.LIKE, 'dcf_pcf_dr_cd')) # 氏名(漢字) if is_not_empty(parameter.dr_name): # 必ず部分一致で検索 - where_clauses.append(SQLCondition('dr_name', condition.LIKE, 'dr_name', like_wildcard=True)) + parameter.dr_name = f'%{parameter.dr_name}%' + where_clauses.append(SQLCondition('dr_name', condition.LIKE, 'dr_name')) # 氏名(かな・カナ) if is_not_empty(parameter.dr_name_kana): # 必ず部分一致で検索 - where_clauses.append(SQLCondition('dr_name_kana', condition.LIKE, 'dr_name_kana', like_wildcard=True)) + parameter.dr_name_kana = f'%{parameter.dr_name_kana}%' + where_clauses.append(SQLCondition('dr_name_kana', condition.LIKE, 'dr_name_kana')) # 勤務先コード if is_not_empty(parameter.dcf_dsf_inst_cd): # 必ず部分一致で検索 + parameter.dcf_dsf_inst_cd = f'%{parameter.dcf_dsf_inst_cd}%' where_clauses.append(SQLCondition('com_inst.dcf_dsf_inst_cd', - condition.LIKE, 'dcf_dsf_inst_cd', like_wildcard=True)) + condition.LIKE, 'dcf_dsf_inst_cd')) # 勤務先名(漢字) if is_not_empty(parameter.form_inst_name_kanji): # 必ず部分一致で検索 + parameter.form_inst_name_kanji = f'%{parameter.form_inst_name_kanji}%' where_clauses.append(SQLCondition('form_inst_name_kanji', condition.LIKE, - 'form_inst_name_kanji', like_wildcard=True)) + 'form_inst_name_kanji')) # 勤務先名(かな・カナ) if is_not_empty(parameter.form_inst_name_kana): # 必ず部分一致で検索 + parameter.form_inst_name_kana = f'%{parameter.form_inst_name_kana}%' where_clauses.append(SQLCondition('form_inst_name_kana', condition.LIKE, - 'form_inst_name_kana', like_wildcard=True)) + 'form_inst_name_kana')) # 勤務先都道府県 if is_not_empty(parameter.prefc_cd): @@ -97,23 +103,27 @@ class UltmarcDoctorRepository(BaseRepository): # 所属部科(漢字) if is_not_empty(parameter.blng_sec_name): # 必ず部分一致で検索 + parameter.blng_sec_name = f'%{parameter.blng_sec_name}%' where_clauses.append(SQLCondition('com_blng_sec.blng_sec_name', - condition.LIKE, 'blng_sec_name', like_wildcard=True)) + condition.LIKE, 'blng_sec_name')) # 診療科目(漢字) if is_not_empty(parameter.trt_course_name): # 必ず部分一致で検索 - where_clauses.append(SQLCondition('trt_course_name', condition.LIKE, 'trt_course_name', like_wildcard=True)) + parameter.trt_course_name = f'%{parameter.trt_course_name}%' + where_clauses.append(SQLCondition('trt_course_name', condition.LIKE, 'trt_course_name')) # 出身大学(漢字) if is_not_empty(parameter.alma): # 必ず部分一致で検索 - where_clauses.append(SQLCondition('alma', condition.LIKE, 'alma', like_wildcard=True)) + parameter.alma = f'%{parameter.alma}%' + where_clauses.append(SQLCondition('alma', condition.LIKE, 'alma')) # 卒年 if is_not_empty(parameter.grad_y): # 必ず部分一致で検索 - where_clauses.append(SQLCondition('grad_y', condition.LIKE, 'grad_y', like_wildcard=True)) + parameter.grad_y = f'%{parameter.grad_y}%' + where_clauses.append(SQLCondition('grad_y', condition.LIKE, 'grad_y')) where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) From 90944307ae85e361e85888bcab245c39fb16bea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Fri, 2 Jun 2023 16:27:12 +0900 Subject: [PATCH 30/90] =?UTF-8?q?=E5=8C=BB=E5=B8=AB=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=EF=BC=BF=E6=A4=9C=E7=B4=A2=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=AF=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 5 - .../model/view/ultmarc_doctor_view_model.py | 80 +-- .../repositories/ultmarc_doctor_repository.py | 16 +- .../src/services/ultmarc_view_service.py | 61 -- ecs/jskult-webapp/src/static/css/ultStyle.css | 38 +- .../src/templates/docSearch.html | 574 +----------------- 6 files changed, 65 insertions(+), 709 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index a42d1ccc..133f6c64 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -66,7 +66,6 @@ def search_doc( ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)), batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): - # error_log(date("Y/m/d H:i:s") . " [INFO] UserId:" . $UserId . "\r\n", 3, "$execLog"); session: UserSession = request.session # バッチ処理中の場合、機能を利用させない # is_batch_processing = batch_status_service.is_batch_processing() @@ -82,10 +81,6 @@ def search_doc( ultmarc.doctor_data = ultmarc_doctor_data ultmarc.form_data = ultmarc_doctor_form - # bio: BioViewModel = bio_service.prepare_bio_view(session) - # bio.bio_data = ultmarc_doctor_data - # bio.form_data = bio_form - # セッション書き換え session.update( actions=[ diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py index 02ac88a0..ea2afe48 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py @@ -6,7 +6,6 @@ from typing import Optional from pydantic import BaseModel from src.model.db.prefc_master import PrefcMasterModel -# from src.model.db.doctor_view import DoctorViewModel from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.view.bio_disp_model import BisDisplayModel from src.system_var import environment @@ -16,58 +15,49 @@ class UltmarcDoctorViewModel(BaseModel): subtitle: str = '医師検索一覧' is_batch_processing: Optional[bool] prefc_models: list[PrefcMasterModel] - # doctor_models: list[DoctorViewModel] doctor_data: Optional[list[BisDisplayModel]] = [] form_data: Optional[UltmarcDoctorModel] - def display_wholesaler_names(self): - display_names = [ - f'{whs_model.rec_whs_cd}-{whs_model.rec_whs_sub_cd}:{whs_model.nm}' - for whs_model in self.doctor_models - ] - return display_names - def ultmarc_data_json_str(self): def date_handler(obj): return obj.isoformat() if hasattr(obj, 'isoformat') else obj return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) -# ************************** のま作 ************************** # 医師コード def is_input_dcf_pcf_dr_cd(self): if not self.is_form_submitted(): return '' - return self.form_data.dcf_pcf_dr_cd + return self.form_data.dcf_pcf_dr_cd or '' # 氏名(漢字) def is_input_dr_name(self): if not self.is_form_submitted(): return '' - return self.form_data.dr_name + return self.form_data.dr_name or '' # 氏名(かな・カナ) def is_input_dr_name_kana(self): if not self.is_form_submitted(): return '' - return self.form_data.dr_name_kana + return self.form_data.dr_name_kana or '' # 勤務先コード def is_input_dcf_dsf_inst_cd(self): if not self.is_form_submitted(): return '' - return self.form_data.dcf_dsf_inst_cd + return self.form_data.dcf_dsf_inst_cd or '' # 勤務先名(漢字) def is_input_form_inst_name_kanji(self): if not self.is_form_submitted(): return '' - return self.form_data.form_inst_name_kanji + return self.form_data.form_inst_name_kanji or '' # 勤務先名(かな・カナ) def is_input_form_inst_name_kana(self): if not self.is_form_submitted(): return '' - return self.form_data.form_inst_name_kana + return self.form_data.form_inst_name_kana or '' # 勤務先都道府県 def is_selected_prefc_cd(self, selected_prefc_cd): @@ -79,73 +69,25 @@ class UltmarcDoctorViewModel(BaseModel): def is_input_blng_sec_name(self): if not self.is_form_submitted(): return '' - return self.form_data.blng_sec_name + return self.form_data.blng_sec_name or '' # 診療科目(漢字) def is_input_trt_course_name(self): if not self.is_form_submitted(): return '' - return self.form_data.trt_course_name + return self.form_data.trt_course_name or '' # 出身大学(漢字) def is_input_alma(self): if not self.is_form_submitted(): return '' - return self.form_data.alma + return self.form_data.alma or '' # 卒年 - def is_grad_y(self): + def is_input_grad_y(self): if not self.is_form_submitted(): return '' - return self.form_data.grad_y -# ************************** のま作 ************************** - - # def is_selected_org_kbn(self, selected_org_kbn): - # if not self.is_form_submitted(): - # return '' - # return self._selected_value(self.form_data.org_kbn, selected_org_kbn) - - # def is_input_rec_ymd_from(self): - # if not self.is_form_submitted(): - # return '' - - # return self._format_date_string(self.form_data.rec_ymd_from) - - # def is_input_rec_ymd_to(self): - # if not self.is_form_submitted(): - # return '' - - # return self._format_date_string(self.form_data.rec_ymd_to) - - # def is_input_lot_num(self): - # if not self.is_form_submitted(): - # return '' - - # return self.form_data.rec_lot_num or '' - - # def is_selected_data_kbn(self, selected_data_kbn): - # if not self.is_form_submitted(): - # return '' - - # return self._selected_value(self.form_data.data_kbn, selected_data_kbn) - - # def is_input_rev_hsdnymd_srk_from(self): - # if not self.is_form_submitted(): - # return '' - - # return self._format_date_string(self.form_data.rev_hsdnymd_srk_from) - - # def is_input_rev_hsdnymd_srk_to(self): - # if not self.is_form_submitted(): - # return '' - - # return self._format_date_string(self.form_data.rev_hsdnymd_srk_to) - - # def is_checked_iko_flg(self): - # if not self.is_form_submitted(): - # return '' - - # return 'checked' if self.form_data.ikoFlg else '' + return self.form_data.grad_y or '' def disabled_button(self): return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index f9651d98..f9293893 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -81,20 +81,20 @@ class UltmarcDoctorRepository(BaseRepository): if is_not_empty(parameter.dcf_dsf_inst_cd): # 必ず部分一致で検索 parameter.dcf_dsf_inst_cd = f'%{parameter.dcf_dsf_inst_cd}%' - where_clauses.append(SQLCondition('com_inst.dcf_dsf_inst_cd', - condition.LIKE, 'dcf_dsf_inst_cd')) + where_clauses.append(SQLCondition( + 'com_inst.dcf_dsf_inst_cd', condition.LIKE, 'dcf_dsf_inst_cd')) # 勤務先名(漢字) if is_not_empty(parameter.form_inst_name_kanji): # 必ず部分一致で検索 parameter.form_inst_name_kanji = f'%{parameter.form_inst_name_kanji}%' - where_clauses.append(SQLCondition('form_inst_name_kanji', condition.LIKE, - 'form_inst_name_kanji')) + where_clauses.append(SQLCondition( + 'form_inst_name_kanji', condition.LIKE, 'form_inst_name_kanji')) # 勤務先名(かな・カナ) if is_not_empty(parameter.form_inst_name_kana): # 必ず部分一致で検索 parameter.form_inst_name_kana = f'%{parameter.form_inst_name_kana}%' - where_clauses.append(SQLCondition('form_inst_name_kana', condition.LIKE, - 'form_inst_name_kana')) + where_clauses.append(SQLCondition( + 'form_inst_name_kana', condition.LIKE, 'form_inst_name_kana')) # 勤務先都道府県 if is_not_empty(parameter.prefc_cd): @@ -104,8 +104,8 @@ class UltmarcDoctorRepository(BaseRepository): if is_not_empty(parameter.blng_sec_name): # 必ず部分一致で検索 parameter.blng_sec_name = f'%{parameter.blng_sec_name}%' - where_clauses.append(SQLCondition('com_blng_sec.blng_sec_name', - condition.LIKE, 'blng_sec_name')) + where_clauses.append(SQLCondition( + 'com_blng_sec.blng_sec_name', condition.LIKE, 'blng_sec_name')) # 診療科目(漢字) if is_not_empty(parameter.trt_course_name): diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 0fd38f18..140863e7 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -8,16 +8,10 @@ from src.aws.aws_api_client import AWSAPIClient from src.aws.s3 import S3Client from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel -from src.model.view.bio_disp_model import BisDisplayModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel from src.repositories.base_repository import BaseRepository -from src.repositories.bio_sales_view_repository import BioSalesViewRepository from src.repositories.prefc_master_repository import PrefcMasterRepository from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository -from src.repositories.pharmacy_product_master_repository import \ - PharmacyProductMasterRepository -from src.repositories.wholesaler_master_repository import \ - WholesalerMasterRepository from src.services.base_service import BaseService from src.system_var import constants, environment @@ -52,58 +46,3 @@ class UltmarcViewService(BaseService): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) return ultmarc_doctor_data - - # def search_download_bio_data(self, search_params: BioModel): - # # 生物由来データをダウンロードするために、DBから検索した結果をデータフレームに変換 - # bio_sales_data_frame = self.bio_sales_repository.fetch_as_data_frame(parameter=search_params) - # return bio_sales_data_frame - - # def write_excel_file(self, data_frame: pd.DataFrame, user_id: str, timestamp: datetime): - # # Excelに書き込み - # output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, - # f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.xlsx') - - # # テンプレートファイルをコピーして出力ファイルの枠だけを作る - # shutil.copyfile( - # src=constants.BIO_EXCEL_TEMPLATE_FILE_PATH, - # dst=output_file_path - # ) - # # ExcelWriterの追記モード(`mode`='a')でファイルを開く - # # `engine``='openpyxlは、追記モードでExcelを開くためのおまじない(xlsxしか動作しないが、こちらが出すものなので問題ナシ) - # # 既存シートへの書き込みは、`if_sheet_exists='overlay'を指定する - # with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer: - # # `sheet_name`引数を省略した場合は、「Sheet1」に書き込む。 - # # DF内のヘッダと連番を書き込みたくない場合、`header`と`index`をFalseに指定する。 - # # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。 - # data_frame.to_excel(writer, header=False, index=False, startrow=1, startcol=0) - - # return output_file_path - - # def write_csv_file(self, data_frame: pd.DataFrame, user_id: str, header: list[str], timestamp: datetime): - # # csvに書き込み - # output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH, - # f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.csv') - # # 横長のDataFrameとするため、ヘッダーの加工処理 - # header_data = {} - # for df_column, header_column in zip(data_frame.columns, header): - # header_data[df_column] = header_column - - # header_df = pd.DataFrame([header_data], index=None) - # output_df = pd.concat([header_df, data_frame]) - # # ヘッダー行としてではなく、1レコードとして出力する - # output_df.to_csv(output_file_path, index=False, header=False) - - # return output_file_path - - # def upload_bio_data_file(self, local_file_path: str) -> None: - # bucket_name = environment.BIO_ACCESS_LOG_BUCKET - # # TODO: フォルダを変える - # file_key = f'bio/{path.basename(local_file_path)}' - # self.s3_client.upload_file(local_file_path, bucket_name, file_key) - - # def generate_download_file_url(self, local_file_path: str, user_id: str, kind: str) -> str: - # bucket_name = environment.BIO_ACCESS_LOG_BUCKET - # # TODO: フォルダを変える - # file_key = f'bio/{path.basename(local_file_path)}' - # download_filename = f'{user_id}_生物由来卸販売データ.{kind}' - # return self.s3_client.generate_presigned_url(bucket_name, file_key, download_filename) diff --git a/ecs/jskult-webapp/src/static/css/ultStyle.css b/ecs/jskult-webapp/src/static/css/ultStyle.css index 936cef77..3f1850d0 100644 --- a/ecs/jskult-webapp/src/static/css/ultStyle.css +++ b/ecs/jskult-webapp/src/static/css/ultStyle.css @@ -46,18 +46,18 @@ table{ } .scroll_table::-webkit-scrollbar { - height: 5px; - width: 10px; + height: 5px; + width: 10px; } .scroll_table::-webkit-scrollbar-track { - border-radius: 5px; - background: #eee; + border-radius: 5px; + background: #eee; } .scroll_table::-webkit-scrollbar-thumb { - border-radius: 5px; - background: #666; + border-radius: 5px; + background: #666; } .ult_bt { @@ -361,7 +361,7 @@ table{ } .docHeader_bt{ - width: 40%;s + width: 40%; } /* アルトマーク課題管理表No.2の修正 8% → 10% */ @@ -405,18 +405,18 @@ table{ } .docSearchScroll::-webkit-scrollbar { - height: 5px; - width: 10px; + height: 5px; + width: 10px; } .docSearchScroll::-webkit-scrollbar-track { - border-radius: 5px; - background: #eee; + border-radius: 5px; + background: #eee; } .docSearchScroll::-webkit-scrollbar-thumb { - border-radius: 5px; - background: #666; + border-radius: 5px; + background: #666; } .allOnOffButton{ @@ -471,18 +471,18 @@ table{ } .scroll::-webkit-scrollbar { - height: 5px; - width: 10px; + height: 5px; + width: 10px; } .scroll::-webkit-scrollbar-track { - border-radius: 5px; - background: #eee; + border-radius: 5px; + background: #eee; } .scroll::-webkit-scrollbar-thumb { - border-radius: 5px; - background: #666; + border-radius: 5px; + background: #666; } .rightBoderLine{ diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index dc187eb4..475578fa 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -1,13 +1,3 @@ - - @@ -16,137 +6,17 @@ require_once('/home/nds_dwh/webroot/common/function/getDateBatchJSString.php'); {% endwith %} - - - - - - - - - - - - - - @@ -155,17 +25,9 @@ if (!isset($isDBSuccess)) {

医師検索一覧

- {% if ultmarc.is_batch_processing %}
日次バッチ処理中のため、データが正しく表示されない可能性があります
{% endif %} - - - @@ -179,26 +41,16 @@ if (!isset($isDBSuccess)) { - 氏名(漢字): - - 氏名(かな・カナ): - @@ -206,35 +58,24 @@ if (!isset($isDBSuccess)) { - 勤務先名(漢字): - - 勤務先名(かな・カナ): - - 勤務先都道府県: - 所属部科(漢字): - 診療科目(漢字): - @@ -275,16 +101,10 @@ if (!isset($isDBSuccess)) { - 卒年: - + value="{{ultmarc.is_input_grad_y()}}" maxlength='4' oninput="formBtDisabled()"> @@ -293,223 +113,13 @@ if (!isset($isDBSuccess)) { - +
- - + - @@ -528,152 +138,15 @@ if (!isset($isDBSuccess)) { 卒年 - - - - - - - - - - - - -
- - - - - - - \ No newline at end of file From fdf90338af2f7da8d7867ddfc2c03e1b39b409ac Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 5 Jun 2023 16:29:56 +0900 Subject: [PATCH 31/90] =?UTF-8?q?feat:=20=E8=A8=AD=E8=A8=88=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/bio_sales/create_bio_sales_lot.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py index 5e7d0233..55c5311b 100644 --- a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py +++ b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py @@ -25,10 +25,12 @@ def exec(): _insert_bio_sales_lot(db) # 生物由来ロット分解データの不要レコードを削除する _delete_empty_lot_record(db) + # MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットする + _set_inst_info_from_mdb_or_mst_inst(db) + # V製品マスタから製品情報を生物由来ロット分解データにセットする + _set_prd_info_from_v_prd_mst(db) # 製造ロット管理番号マスタから有効期限を生物由来ロット分解データにセットする _set_expr_dt_from_lot_num_mst(db) - # Veeva取引区分が返品(2)の場合、数量をマイナスに反転する - _reverse_qty_if_returns(db) db.commit() logger.debug('生物由来卸販売ロット分解処理終了') return @@ -54,11 +56,16 @@ def _delete_empty_lot_record(db: Database): pass +def _set_inst_info_from_mdb_or_mst_inst(db: Database): + # MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセット + pass + + +def _set_prd_info_from_v_prd_mst(db: Database): + # V製品マスタから製品情報を生物由来ロット分解データにセットする + pass + + def _set_expr_dt_from_lot_num_mst(db: Database): # 製造ロット管理番号マスタから有効期限をセット pass - - -def _reverse_qty_if_returns(db: Database): - # Veeva取引区分が返品(2)の場合、数量をマイナスに反転する - pass From 6c51f8d0a61a8698054fb9e6616f70c13be69929 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 6 Jun 2023 09:39:53 +0900 Subject: [PATCH 32/90] =?UTF-8?q?feat:=20=E7=94=9F=E7=89=A9=E7=94=B1?= =?UTF-8?q?=E6=9D=A5=E3=83=AD=E3=83=83=E3=83=88=E5=88=86=E8=A7=A3=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=AESQL=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/bio_sales/create_bio_sales_lot.py | 355 +++++++++++++++++- 1 file changed, 344 insertions(+), 11 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py index 55c5311b..298c77c9 100644 --- a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py +++ b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py @@ -1,7 +1,9 @@ +from src.batch.batch_functions import logging_sql from src.batch.common.batch_context import BatchContext from src.db.database import Database from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger +from src.time.elapsed_time import ElapsedTime batch_context = BatchContext.get_instance() logger = get_logger('生物由来卸販売ロット分解') @@ -42,30 +44,361 @@ def exec(): def _delete_not_confirm_data_in_bio_sales_lot(db: Database): - # 生物由来ロット分解データの未確定データ削除 - pass + logger.debug('生物由来ロット分解データの未確定データ削除開始') + try: + elapsed_time = ElapsedTime() + sql = """\ + DELETE FROM src05.bio_sales_lot AS lot + INNER JOIN src05.bio_sales AS bio + ON bio.slip_mgt_num = lot.slip_mgt_num + AND bio.dwh_upd_dt = src05.get_syor_date() + """ + res = db.execute(sql) + logging_sql(logger, sql) + logger.info(f'Query OK, {res.rowcount} rows affected ({elapsed_time.of})') + except Exception as e: + logger.debug('生物由来ロット分解データの未確定データ削除に失敗') + raise e + logger.debug('生物由来ロット分解データの未確定データ削除に成功') def _insert_bio_sales_lot(db: Database): - # 生物由来ロット分解データを作成 - pass + logger.debug('生物由来ロット分解データの作成開始') + try: + elapsed_time = ElapsedTime() + sql = """\ + INSERT INTO src05.bio_sales_lot + SELECT + bio.slip_mgt_num AS slip_mgt_num, + conv.conv_cd AS conv_cd, + bio.rec_whs_cd AS rec_whs_cd, + bio.rec_whs_sub_cd AS rec_whs_sub_cd, + bio.rec_whs_org_cd AS rec_whs_org_cd, + bio.rec_comm_cd AS rec_comm_cd, + bio.rec_tran_kbn AS rec_tran_kbn, + bio.rev_hsdnymd_srk AS rev_hsdnymd_srk, + bio.rec_urag_num AS rec_urag_num, + bio.rec_comm_name AS rec_comm_name, + bio.rec_nonyu_fcl_name AS rec_nonyu_fcl_name, + bio.rec_nonyu_fcl_addr AS rec_nonyu_fcl_addr, + -- 3レコードに分解する + CASE conv.conv_cd + WHEN 1 THEN bio.rec_lot_num1 + WHEN 2 THEN bio.rec_lot_num2 + WHEN 3 THEN bio.rec_lot_num3 + END AS rec_lot_num, + bio.rec_ymd AS rec_ymd, + bio.v_tran_cd AS v_tran_cd, + bio.tran_kbn_name AS tran_kbn_name, + bio.whs_org_cd AS whs_org_cd, + bio.v_whsorg_cd AS v_whsorg_cd, + bio.whs_org_name AS whs_org_name, + bio.v_whs_cd AS v_whs_cd, + bio.whs_name AS whs_name, + bio.nonyu_fcl_cd AS nonyu_fcl_cd, + bio.v_inst_cd AS v_inst_cd, + bio.v_inst_kn AS v_inst_kn, + bio.v_inst_name AS v_inst_name, + bio.v_inst_addr AS v_inst_addr, + bio.comm_cd AS comm_cd, + bio.product_name AS product_name, + bio.whs_rep_comm_name AS whs_rep_comm_name, + bio.whs_rep_nonyu_fcl_name AS whs_rep_nonyu_fcl_name, + bio.whs_rep_nonyu_fcl_addr AS whs_rep_nonyu_fcl_addr, + /* 製品名と製品コードは後ほどV製品マスタからセットする */ + -- 製品名 + NULL AS mkr_inf_1, + -- 製品コード + NULL AS mkr_cd, + -- 数量 + -- Veeva取引区分の先頭が「2」の場合、マイナス表示にする + CASE conv.conv_cd + WHEN 1 THEN + CASE + WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty1 >= 1) THEN -bio.qty1 + ELSE bio.qty1 + END + WHEN 2 THEN + CASE + WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty2 >= 1) THEN -bio.qty2 + ELSE bio.qty2 + END + WHEN 3 THEN + CASE + WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty3 >= 1) THEN -bio.qty3 + ELSE bio.qty3 + END + END AS qty, + bio.slip_org_kbn AS slip_org_kbn, + bio.bef_slip_mgt_num AS bef_slip_mgt_num, + CASE conv.conv_cd + WHEN 1 THEN bio.err_flg11 + WHEN 2 THEN bio.err_flg12 + WHEN 3 THEN bio.err_flg13 + END AS lot_no_err_flg, + CASE bio.err_flg20 + WHEN 'M' THEN '*' + ELSE NULL + END AS iko_flg, + CASE bio.rec_sts_kbn + WHEN '0' THEN bio.rec_sts_kbn + /* 以下、抽出条件で弾かれているので取れない + WHEN '99' THEN bio.rec_sts_kbn + */ + WHEN '1' THEN + CASE conv.conv_cd + WHEN 1 THEN bio.err_flg11 + WHEN 2 THEN bio.err_flg12 + WHEN 3 THEN bio.err_flg13 + END + END AS rec_sts_kbn, + CASE bio.bef_slip_mgt_num + WHEN NULL THEN bio.ins_dt + ELSE NULL + END AS ins_dt, + CASE bio.bef_slip_mgt_num + WHEN NULL THEN bio.ins_usr + ELSE NULL + END AS ins_usr, + bio.dwh_upd_dt AS dwh_upd_dt, + /* 施設情報は後ほどセットする */ + -- 施設コード + NULL AS inst_cd, + -- 正式施設名(漢字) + NULL AS inst_name_form, + -- 施設住所 + NULL AS address, + -- 施設電話番号 + NULL AS tel_num, + CASE conv.conv_cd + WHEN 1 THEN + CASE bio.err_flg11 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN 'ロットエラー' + WHEN '3' THEN 'エラー(解消済み)' + WHEN '4' THEN 'ロット不明' + WHEN '5' THEN 'エラー(解消済み)' + WHEN '6' THEN 'ロット不明' + WHEN '8' THEN '除外' + WHEN '9' THEN '除外' + WHEN 'Z' THEN '除外' + END + WHEN 2 THEN + CASE bio.err_flg12 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN 'ロットエラー' + WHEN '3' THEN 'エラー(解消済み)' + WHEN '4' THEN 'ロット不明' + WHEN '5' THEN 'エラー(解消済み)' + WHEN '6' THEN 'ロット不明' + WHEN '8' THEN '除外' + WHEN '9' THEN '除外' + WHEN 'Z' THEN '除外' + END + WHEN 3 THEN + CASE bio.err_flg13 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN 'ロットエラー' + WHEN '3' THEN 'エラー(解消済み)' + WHEN '4' THEN 'ロット不明' + WHEN '5' THEN 'エラー(解消済み)' + WHEN '6' THEN 'ロット不明' + WHEN '8' THEN '除外' + WHEN '9' THEN '除外' + WHEN 'Z' THEN '除外' + END + END AS data_kbn, + CASE bio.slip_org_kbn + WHEN 'J' THEN 'JD-NET' + WHEN 'N' THEN 'NHI' + WHEN 'H' THEN '手入力' + END AS data_kind, + CASE conv.conv_cd + WHEN 1 THEN + CASE bio.err_flg11 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN '日付エラー' + WHEN '3' THEN 'ロットエラー(解消済)' + WHEN '4' THEN 'ロットエラー(調査不能)' + WHEN '5' THEN '日付エラー(解消済)' + WHEN '6' THEN '日付エラー(調査不能)' + WHEN '7' THEN '除外(卸都合)' + WHEN '8' THEN '除外(再送信)' + WHEN 'Z' THEN '過去データ' + END + WHEN 2 THEN + CASE bio.err_flg12 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN '日付エラー' + WHEN '3' THEN 'ロットエラー(解消済)' + WHEN '4' THEN 'ロットエラー(調査不能)' + WHEN '5' THEN '日付エラー(解消済)' + WHEN '6' THEN '日付エラー(調査不能)' + WHEN '7' THEN '除外(卸都合)' + WHEN '8' THEN '除外(再送信)' + WHEN 'Z' THEN '過去データ' + END + WHEN 3 THEN + CASE bio.err_flg13 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN '日付エラー' + WHEN '3' THEN 'ロットエラー(解消済)' + WHEN '4' THEN 'ロットエラー(調査不能)' + WHEN '5' THEN '日付エラー(解消済)' + WHEN '6' THEN '日付エラー(調査不能)' + WHEN '7' THEN '除外(卸都合)' + WHEN '8' THEN '除外(再送信)' + WHEN 'Z' THEN '過去データ' + END + END AS err_dtl_kind, + NULL AS expr_dt + FROM + src05.bio_sales bio + -- 生物由来変換マスタ + CROSS JOIN src05.bio_conv conv + WHERE + bio.err_flg1 = '0' + AND bio.err_flg2 = '0' + AND bio.err_flg3 = '0' + AND bio.err_flg4 = '0' + AND bio.err_flg5 = '0' + AND bio.err_flg6 = '0' + AND bio.err_flg7 = '0' + AND bio.err_flg8 = '0' + AND bio.err_flg9 = '0' + AND bio.err_flg10 = '0' + AND bio.rec_sts_kbn <> '99' + AND bio.dwh_upd_dt = src05.get_syor_date() + """ + res = db.execute(sql) + logging_sql(logger, sql) + logger.info(f'Query OK, {res.rowcount} rows affected ({elapsed_time.of})') + except Exception as e: + logger.debug('生物由来ロット分解データの作成に失敗') + raise e + logger.debug('生物由来ロット分解データの作成に成功') def _delete_empty_lot_record(db: Database): - # 生物由来ロット分解データの製造番号が空のレコードを削除 - pass + logger.debug('生物由来ロット分解データの製造番号が空のレコードを削除開始') + try: + elapsed_time = ElapsedTime() + sql = """\ + DELETE FROM src05.bio_sales_lot lot + WHERE + lot.rec_lot_num = REPEAT(' ', 15) OR lot.rec_lot_num IS NULL + """ + res = db.execute(sql) + logging_sql(logger, sql) + logger.info(f'Query OK, {res.rowcount} rows affected ({elapsed_time.of})') + except Exception as e: + logger.debug('生物由来ロット分解データの製造番号が空のレコードを削除に失敗') + raise e + logger.debug('生物由来ロット分解データの製造番号が空のレコードを削除に成功') def _set_inst_info_from_mdb_or_mst_inst(db: Database): - # MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセット - pass + logger.debug('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセット開始') + try: + elapsed_time = ElapsedTime() + sql = """\ + UPDATE + src05.bio_sales_lot bio, + internal05.view_mdb_cnv_mst mdb, + src05.mst_inst inst + SET + -- 施設コード + bio.inst_cd = ( + CASE mdb.mdb_cd + WHEN NULL THEN mdb.mdb_cd + ELSE bio.v_inst_cd + END + ), + -- 正式施設名(漢字) + bio.inst_name_form = ( + CASE mdb.mdb_cd + WHEN NULL THEN mdb.inst_name_form + ELSE inst.inst_name_form + END + ) + -- 施設住所 + bio.address = ( + CASE mdb.mdb_cd + WHEN NULL THEN mdb.address + ELSE inst.address + END + ), + -- 施設電話番号 + bio.tel_num = ( + CASE mdb.mdb_cd + WHEN NULL THEN mdb.tel_num + ELSE inst.tel_num + END + ) + WHERE + bio.v_inst_cd = mdb.hco_vid_v + AND bio.v_inst_cd = inst.inst_cd + """ + res = db.execute(sql) + logging_sql(logger, sql) + logger.info(f'Query OK, {res.rowcount} rows affected ({elapsed_time.of})') + except Exception as e: + logger.debug('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに失敗') + raise e + logger.debug('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに成功') def _set_prd_info_from_v_prd_mst(db: Database): - # V製品マスタから製品情報を生物由来ロット分解データにセットする - pass + logger.debug('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセット開始') + try: + elapsed_time = ElapsedTime() + sql = """\ + UPDATE + src05.bio_sales_lot bio, + src05.phm_prd_mst_v prd + SET + bio.mkr_inf_1 = prd.mkr_inf_1, + bio.mkr_cd = prd.mkr_cd + WHERE + bio.comm_cd = prd.prd_cd + AND STR_TO_DATE(bio.rev_hsdnymd_srk,'%Y%m%d') BETWEEN prd.start_date AND prd.end_date + AND prd.rec_sts_kbn <> '9' + + """ + res = db.execute(sql) + logging_sql(logger, sql) + logger.info(f'Query OK, {res.rowcount} rows affected ({elapsed_time.of})') + except Exception as e: + logger.debug('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに失敗') + raise e + logger.debug('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに成功') def _set_expr_dt_from_lot_num_mst(db: Database): # 製造ロット管理番号マスタから有効期限をセット - pass + logger.debug('製造ロット管理番号マスタから有効期限をセット開始') + try: + elapsed_time = ElapsedTime() + sql = """\ + UPDATE + src05.bio_sales_lot bio, + src05.lot_num_mst lot + SET + bio.expr_dt = lot.expr_dt + WHERE + bio.mkr_cd = lot.ser_num + AND bio.rec_lot_num = lot.lot_num + """ + res = db.execute(sql) + logging_sql(logger, sql) + logger.info(f'Query OK, {res.rowcount} rows affected ({elapsed_time.of})') + except Exception as e: + logger.debug('製造ロット管理番号マスタから有効期限をセットに失敗') + raise e + logger.debug('製造ロット管理番号マスタから有効期限をセットに成功') From c9babbee11b73be5ff038bc13c2eb727575175b9 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 6 Jun 2023 09:41:27 +0900 Subject: [PATCH 33/90] =?UTF-8?q?feat:=20rec=5Fsts=5Fkbn=E3=81=AECASE?= =?UTF-8?q?=E6=96=87=E3=81=8B=E3=82=89=E3=80=8199=E3=81=AE=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E3=82=92=E5=89=8A=E9=99=A4=E3=80=82=E6=8A=BD?= =?UTF-8?q?=E5=87=BA=E6=9D=A1=E4=BB=B6=E3=81=A7=E5=BC=BE=E3=81=8B=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E3=81=9F=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/bio_sales/create_bio_sales_lot.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py index 298c77c9..4e23cc44 100644 --- a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py +++ b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py @@ -142,9 +142,6 @@ def _insert_bio_sales_lot(db: Database): END AS iko_flg, CASE bio.rec_sts_kbn WHEN '0' THEN bio.rec_sts_kbn - /* 以下、抽出条件で弾かれているので取れない - WHEN '99' THEN bio.rec_sts_kbn - */ WHEN '1' THEN CASE conv.conv_cd WHEN 1 THEN bio.err_flg11 From 9f7caa14dc95bc704dd022e5cb419e7725ab3584 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 6 Jun 2023 10:16:39 +0900 Subject: [PATCH 34/90] =?UTF-8?q?feat:=20=20=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E4=BB=95=E6=A7=98=E6=9B=B8=E4=BD=9C=E6=88=90=E4=B8=AD=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=BC=E3=83=89=E3=83=90=E3=83=83=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/bio_sales/create_bio_sales_lot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py index 4e23cc44..bbfedb64 100644 --- a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py +++ b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py @@ -51,7 +51,7 @@ def _delete_not_confirm_data_in_bio_sales_lot(db: Database): DELETE FROM src05.bio_sales_lot AS lot INNER JOIN src05.bio_sales AS bio ON bio.slip_mgt_num = lot.slip_mgt_num - AND bio.dwh_upd_dt = src05.get_syor_date() + AND DATE(bio.dwh_upd_dt) = src05.get_syor_date() """ res = db.execute(sql) logging_sql(logger, sql) @@ -271,7 +271,7 @@ def _insert_bio_sales_lot(db: Database): AND bio.err_flg9 = '0' AND bio.err_flg10 = '0' AND bio.rec_sts_kbn <> '99' - AND bio.dwh_upd_dt = src05.get_syor_date() + AND DATE(bio.dwh_upd_dt) = src05.get_syor_date() """ res = db.execute(sql) logging_sql(logger, sql) @@ -289,6 +289,7 @@ def _delete_empty_lot_record(db: Database): sql = """\ DELETE FROM src05.bio_sales_lot lot WHERE + -- 空白15桁のデータはロット情報が空とみなして削除する lot.rec_lot_num = REPEAT(' ', 15) OR lot.rec_lot_num IS NULL """ res = db.execute(sql) From 16a62a9cfc431c6c309580ed56d0d47e1b948e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Tue, 6 Jun 2023 11:43:18 +0900 Subject: [PATCH 35/90] =?UTF-8?q?=E5=8C=BB=E5=B8=AB=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E7=B5=90=E6=9E=9C=EF=BC=91=E4=BB=B6=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 39 +- .../src/model/db/ultmarc_doctor_info.py | 18 + .../src/model/db/ultmarc_doctor_wrkplace.py | 15 + .../model/db/ultmarc_doctor_wrkplace_his.py | 16 + .../src/model/db/ultmarc_sosiety.py | 10 + .../model/db/ultmarc_specialist_license.py | 10 + .../src/model/db/ultmarc_trt_course.py | 9 + .../view/ultmarc_doctor_info_view_model.py | 97 ++++ .../repositories/ultmarc_doctor_repository.py | 39 +- .../ultmarc_dr_wrkplace_his_repository.py | 39 ++ .../ultmarc_dr_wrkplace_repository.py | 39 ++ .../ultmarc_sosiety_repository.py | 30 ++ .../ultmarc_specialist_license_repository.py | 31 ++ .../ultmarc_trt_course_repository.py | 31 ++ .../src/services/ultmarc_view_service.py | 53 +- ecs/jskult-webapp/src/templates/docInfo.html | 486 ++++++++++++++++++ .../src/templates/docSearch.html | 24 +- 17 files changed, 969 insertions(+), 17 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py create mode 100644 ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py create mode 100644 ecs/jskult-webapp/src/templates/docInfo.html diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 133f6c64..399ca6e4 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -7,10 +7,8 @@ from starlette import status from src.depends.services import get_service from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel -from src.model.view.bio_view_model import BioViewModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService -from src.services.bio_view_service import BioViewService from src.services.ultmarc_view_service import UltmarcViewService from src.services.session_service import set_session from src.system_var import constants @@ -97,3 +95,40 @@ def search_doc( headers={'session_key': session_key} ) return templates_response + + +@router.get('/docInfo') +def ultmarc_doctor_info_view( + request: Request, + id: str, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + # if batch_status_service.is_batch_processing(): + # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + + # 医師情報の取得 + ultmarc = ultmarc_service.info_ultmarc_doctor_view(id, session) + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'docInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py new file mode 100644 index 00000000..6f20dfb9 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py @@ -0,0 +1,18 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorInfoDBModel(BaseDBModel): + dcf_pcf_dr_cd: Optional[str] + dr_name: Optional[str] + dr_name_kana: Optional[str] + sex: Optional[str] + birthday: Optional[str] + alma: Optional[str] + hometown: Optional[str] + grad_y: Optional[str] + drday_y: Optional[str] + estab_y: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py new file mode 100644 index 00000000..c8f555cc --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py @@ -0,0 +1,15 @@ +from typing import Optional +from datetime import date + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorWrkplaceDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + inst_name_kanji: Optional[str] + blng_sec_name: Optional[str] + univ_post_name: Optional[str] + post_name: Optional[str] + aply_start_ymd: Optional[date] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py new file mode 100644 index 00000000..3fe3de38 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py @@ -0,0 +1,16 @@ +from typing import Optional +from datetime import date + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorWrkplaceHisDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + inst_name_kanji: Optional[str] + blng_sec_name: Optional[str] + univ_post_name: Optional[str] + post_name: Optional[str] + aply_start_ymd: Optional[date] + aply_end_ymd: Optional[date] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py b/ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py new file mode 100644 index 00000000..ab76e4db --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py @@ -0,0 +1,10 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcSosietyDBModel(BaseDBModel): + sosiety_cd: Optional[str] + sosiety_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py b/ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py new file mode 100644 index 00000000..8cccb4eb --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py @@ -0,0 +1,10 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcSpecialistLicenseDBModel(BaseDBModel): + specialist_cd: Optional[str] + specialist_license_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py new file mode 100644 index 00000000..23908fce --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py @@ -0,0 +1,9 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcTrtCoursedbmodel(BaseDBModel): + trt_course_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py new file mode 100644 index 00000000..1cfbcf5f --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py @@ -0,0 +1,97 @@ +import json +from collections import OrderedDict +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + +from src.model.db.ultmarc_doctor_info import UltmarcDoctorInfoDBModel +from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.model.db.ultmarc_sosiety import UltmarcSosietyDBModel +from src.model.db.ultmarc_specialist_license import UltmarcSpecialistLicenseDBModel +from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel +from src.model.db.ultmarc_doctor_wrkplace_his import UltmarcDoctorWrkplaceHisDBModel + +from src.system_var import environment + + +class UltmarcDoctorInfoViewModel(BaseModel): + subtitle: str = '医師情報' + is_batch_processing: Optional[bool] + doctor_info_data: Optional[UltmarcDoctorInfoDBModel] + trt_coursed_data: Optional[list[UltmarcTrtCoursedbmodel]] + sosiety_data: Optional[list[UltmarcSosietyDBModel]] + specialist_license_data: Optional[list[UltmarcSpecialistLicenseDBModel]] + doctor_wrkplace_data: Optional[list[UltmarcDoctorWrkplaceDBModel]] + doctor_wrkplace_his_data: Optional[list[UltmarcDoctorWrkplaceHisDBModel]] + + def ultmarc_data_json_str(self): + def date_handler(obj): + return obj.isoformat() if hasattr(obj, 'isoformat') else obj + return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) + + # 医師コード + def is_input_dcf_pcf_dr_cd(self): + return self.doctor_info_data.dcf_pcf_dr_cd or '' + + # 氏名(漢字) + def is_input_dr_name(self): + return self.doctor_info_data.dr_name or '' + + # 氏名(かな・カナ) + def is_input_dr_name_kana(self): + return self.doctor_info_data.dr_name_kana or '' + + # 性別 + def is_input_sex(self): + return self.doctor_info_data.sex or '' + + # 出身大学 + def is_input_alma(self): + return self.doctor_info_data.alma or '' + + # 出身県 + def is_input_hometown(self): + return self.doctor_info_data.hometown or '' + + # 卒年 + def is_input_grad_y(self): + return self.doctor_info_data.grad_y or '' + + # 登録年 + def is_input_drday_y(self): + return self.doctor_info_data.drday_y or '' + + # 開業年 + def is_input_estab_y(self): + return self.doctor_info_data.estab_y or '' + + def is_input_birthday_fromat(self): + return self._format_date_string(self.doctor_info_data.birthday) + + def is_input_trt_course_data_size(self): + return len(self.trt_coursed_data) + + def is_data_string_empty_fromat(self, data_string): + return data_string or '' + + def disabled_button(self): + return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' + + def is_form_submitted(self): + return self.form_data is not None + + def is_data_empty(self): + return len(self.doctor_data) == 0 + + def is_data_overflow_max_length(self): + return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + + def _format_date_string(self, date_string): + if date_string is None: + return '' + date = datetime.strptime(date_string, '%Y%m%d') + return date.strftime('%Y/%m/%d') + + def _selected_value(self, form_value: str, current_value: str): + return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index f9293893..60f1543d 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -2,6 +2,7 @@ from src.db import sql_condition as condition from src.db.sql_condition import SQLCondition from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel from src.model.request.ultmarc_doctor import UltmarcDoctorModel +from src.model.db.ultmarc_doctor_info import UltmarcDoctorInfoDBModel from src.repositories.base_repository import BaseRepository from src.util.string_util import is_not_empty @@ -15,7 +16,7 @@ class UltmarcDoctorRepository(BaseRepository): com_inst.form_inst_name_kanji, com_inst.dcf_dsf_inst_cd, com_blng_sec.blng_sec_name, - com_trt_course.trt_course_name, + GROUP_CONCAT(com_trt_course.trt_course_name separator ' / ') AS trt_course_name, com_post.form_post_name, com_alma.alma, com_dr.grad_y, @@ -33,6 +34,7 @@ class UltmarcDoctorRepository(BaseRepository): LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd WHERE {where_clause} + GROUP BY com_dr.dcf_pcf_dr_cd ORDER BY com_dr.dcf_pcf_dr_cd, com_dr_wrkplace.dcf_dsf_inst_cd, @@ -128,3 +130,38 @@ class UltmarcDoctorRepository(BaseRepository): where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str + + FETCH_ONE_SQL = """\ + SELECT + com_dr.dcf_pcf_dr_cd, + com_dr.dr_name, + com_dr.dr_name_kana, + com_sex.sex, + com_dr.birthday, + com_alma.alma, + com_hometown.hometown, + com_dr.grad_y, + com_dr.drday_y, + com_dr.estab_y + FROM src05.com_dr + LEFT JOIN src05.com_sex ON com_dr.sex_cd = com_sex.sex_cd + LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd + LEFT JOIN src05.com_hometown ON com_dr.hometown_cd = com_hometown.hometown_cd + WHERE dcf_pcf_dr_cd = :id + """ + + def fetch_one(self, id) -> UltmarcDoctorInfoDBModel: + try: + self._database.connect() + query = self.FETCH_ONE_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorInfoDBModel(**r) for r in result] + if len(models) == 0: + return None + return models[0] + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py new file mode 100644 index 00000000..14f0de45 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py @@ -0,0 +1,39 @@ +from src.model.db.ultmarc_doctor_wrkplace_his import UltmarcDoctorWrkplaceHisDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcDoctorWrkplaceHisRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.inst_name_kanji, + com_blng_sec.blng_sec_name, + univ_post.form_post_name AS univ_post_name, + post.form_post_name AS post_name, + com_dr_wrkplace.aply_start_ymd + FROM src05.com_dr + LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd + LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN src05.com_post as univ_post ON com_dr_wrkplace.identity_cd = univ_post.post_cd + LEFT JOIN src05.com_post as post ON com_dr_wrkplace.post_cd = post.post_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_dr_wrkplace.aply_start_ymd DESC + """ + + def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceHisDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorWrkplaceHisDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py new file mode 100644 index 00000000..fd1295d7 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py @@ -0,0 +1,39 @@ +from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcDoctorWrkplaceRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.inst_name_kanji, + com_blng_sec.blng_sec_name, + univ_post.form_post_name AS univ_post_name, + post.form_post_name AS post_name, + com_dr_wrkplace.aply_start_ymd + FROM src05.com_dr + LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd + LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN src05.com_post as univ_post ON com_dr_wrkplace.identity_cd = univ_post.post_cd + LEFT JOIN src05.com_post as post ON com_dr_wrkplace.post_cd = post.post_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_dr_wrkplace.aply_start_ymd DESC + """ + + def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorWrkplaceDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py new file mode 100644 index 00000000..e3c9ac13 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py @@ -0,0 +1,30 @@ +from src.model.db.ultmarc_sosiety import UltmarcSosietyDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcSosietyRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT com_sosiety.sosiety_cd, com_sosiety.sosiety_name + FROM src05.com_dr + LEFT JOIN src05.com_dr_sosiety ON com_dr.dcf_pcf_dr_cd = com_dr_sosiety.dcf_pcf_dr_cd + LEFT JOIN src05.com_sosiety ON com_dr_sosiety.sosiety_cd = com_sosiety.sosiety_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_sosiety.sosiety_cd + """ + + def fetch_many(self, id) -> list[UltmarcSosietyDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcSosietyDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py new file mode 100644 index 00000000..35632081 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py @@ -0,0 +1,31 @@ +from src.model.db.ultmarc_specialist_license import UltmarcSpecialistLicenseDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcSpecialistLicenseRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_specialist_license.specialist_cd, com_specialist_license.specialist_license_name + FROM src05.com_dr + LEFT JOIN src05.com_sp_field ON com_dr.dcf_pcf_dr_cd = com_sp_field.dcf_pcf_dr_cd + LEFT JOIN src05.com_specialist_license ON com_sp_field.specialist_cd = com_specialist_license.specialist_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_specialist_license.specialist_cd + """ + + def fetch_many(self, id) -> UltmarcSpecialistLicenseDBModel: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcSpecialistLicenseDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py new file mode 100644 index 00000000..f50fc02a --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py @@ -0,0 +1,31 @@ +from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.repositories.base_repository import BaseRepository + + +class UltmarcTrtCourseRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT trt_course_name + FROM src05.com_dr + LEFT JOIN src05.com_dr_trt_course ON com_dr.dcf_pcf_dr_cd = com_dr_trt_course.dcf_pcf_dr_cd + LEFT JOIN src05.com_trt_course ON com_dr_trt_course.trt_course_cd = com_trt_course.trt_course_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_trt_course.trt_course_cd + """ + + def fetch_many(self, id) -> list[UltmarcTrtCoursedbmodel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + + models = [UltmarcTrtCoursedbmodel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 140863e7..1b207c5e 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -9,9 +9,15 @@ from src.aws.s3 import S3Client from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel +from src.model.view.ultmarc_doctor_info_view_model import UltmarcDoctorInfoViewModel from src.repositories.base_repository import BaseRepository from src.repositories.prefc_master_repository import PrefcMasterRepository from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository +from src.repositories.ultmarc_trt_course_repository import UltmarcTrtCourseRepository +from src.repositories.ultmarc_sosiety_repository import UltmarcSosietyRepository +from src.repositories.ultmarc_dr_wrkplace_repository import UltmarcDoctorWrkplaceRepository +from src.repositories.ultmarc_dr_wrkplace_his_repository import UltmarcDoctorWrkplaceHisRepository +from src.repositories.ultmarc_specialist_license_repository import UltmarcSpecialistLicenseRepository from src.services.base_service import BaseService from src.system_var import constants, environment @@ -19,16 +25,31 @@ from src.system_var import constants, environment class UltmarcViewService(BaseService): REPOSITORIES = { 'ultmarc_doctor_repository': UltmarcDoctorRepository, - 'prefc_repository': PrefcMasterRepository + 'prefc_repository': PrefcMasterRepository, + 'ultmarc_trt_course_repository': UltmarcTrtCourseRepository, + 'ultmarc_sosiety_repository': UltmarcSosietyRepository, + 'ultmarc_doctor_wrkplace_repository': UltmarcDoctorWrkplaceRepository, + 'ultmarc_doctor_wrkplace_his_repository': UltmarcDoctorWrkplaceHisRepository, + 'ultmarc_specialist_license_repository': UltmarcSpecialistLicenseRepository } ultmarc_doctor_repository: UltmarcDoctorRepository prefc_repository: PrefcMasterRepository + ultmarc_trt_course_repository: UltmarcTrtCourseRepository + ultmarc_sosiety_repository: UltmarcSosietyRepository + ultmarc_doctor_wrkplace_repository: UltmarcDoctorWrkplaceRepository + ultmarc_doctor_wrkplace_his_repository: UltmarcDoctorWrkplaceHisRepository + ultmarc_specialist_license_repository: UltmarcSpecialistLicenseRepository def __init__(self, repositories: dict[str, BaseRepository], clients: dict[str, AWSAPIClient]) -> None: super().__init__(repositories, clients) self.ultmarc_doctor_repository = repositories['ultmarc_doctor_repository'] self.prefc_repository = repositories['prefc_repository'] + self.ultmarc_trt_course_repository = repositories['ultmarc_trt_course_repository'] + self.ultmarc_sosiety_repository = repositories['ultmarc_sosiety_repository'] + self.ultmarc_doctor_wrkplace_repository = repositories['ultmarc_doctor_wrkplace_repository'] + self.ultmarc_doctor_wrkplace_his_repository = repositories['ultmarc_doctor_wrkplace_his_repository'] + self.ultmarc_specialist_license_repository = repositories['ultmarc_specialist_license_repository'] def prepare_ultmarc_doctor_view( self, @@ -46,3 +67,33 @@ class UltmarcViewService(BaseService): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) return ultmarc_doctor_data + + def info_ultmarc_doctor_view( + self, + id, + session: UserSession + ) -> UltmarcDoctorInfoViewModel: + + # 医師情報画面の表示データ取得 + # 医師情報を取得 + doctor_info = self.ultmarc_doctor_repository.fetch_one(id) + # 診療科目情報を取得 + trt_course = self.ultmarc_trt_course_repository.fetch_many(id) + # 所属学会情報を取得 + sosiety = self.ultmarc_sosiety_repository.fetch_many(id) + # 所属学会専門医情報を取得 + specialist_license = self.ultmarc_specialist_license_repository.fetch_many(id) + # 勤務先情報を取得 + wrkplace = self.ultmarc_doctor_wrkplace_repository.fetch_many(id) + # 勤務先履歴情報を取得 + wrkplace_his = self.ultmarc_doctor_wrkplace_his_repository.fetch_many(id) + + ultmarc = UltmarcDoctorInfoViewModel( + doctor_info_data=doctor_info, + trt_coursed_data=trt_course, + sosiety_data=sosiety, + specialist_license_data=specialist_license, + doctor_wrkplace_data=wrkplace, + doctor_wrkplace_his_data=wrkplace_his + ) + return ultmarc diff --git a/ecs/jskult-webapp/src/templates/docInfo.html b/ecs/jskult-webapp/src/templates/docInfo.html new file mode 100644 index 00000000..e9214447 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/docInfo.html @@ -0,0 +1,486 @@ + + + + {% with subtitle = ultmarc.subtitle %} + {% include '_header.html' %} + {% endwith %} + 医師情報 + + + + + + + + + + + + + + + + + + +

医師情報

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
医師コード:氏名(漢字):氏名(カナ):
性別:生年月日:
+ 出身大学: + + 出身県: + + 卒年: + + 登録年: + + 開業年: + +
+ 診療科目: + + {% for trt_coursed_data in ultmarc.trt_coursed_data %} + + {% endfor %} + + + + {% for i in range(5-ultmarc.is_input_trt_course_data_size())%} + + {% endfor %} + +
+ + + + + + + + +
+

所属学会

+
+ + + + + + + + + + {% for sosiety_data in ultmarc.sosiety_data %} + + + + + {% endfor %} + +
コード所属学会
{{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_cd)}}{{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_name)}}
+
+
+

所属学会専門医

+
+ + + + + + + + + {% for specialist_license_data in ultmarc.specialist_license_data %} + + + + + {% endfor %} + + +
コード専門医資格名
{{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_cd)}}{{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_license_name)}}
+
+
+ +

勤務先履歴

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} + {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} + + + + + + + + + + {% endif %} + {% endfor %} + + + {% for doctor_wrkplace_his_data in ultmarc.doctor_wrkplace_his_data %} + {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd) != ''%} + + + + + + + + + + {% endif %} + {% endfor %} + + + + + + + + + + + +
ULT施設コード勤務先略名所属部科名役職名職位開始年月日終了年月日
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.aply_start_ymd)}}9999/99/99
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_end_ymd)}}
+
+ + + + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 475578fa..2168aa3e 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -20,19 +20,17 @@ - - - - - - - -

医師検索一覧

- {% if ultmarc.is_batch_processing %} -
日次バッチ処理中のため、データが正しく表示されない可能性があります
- {% endif %} -
- + + + + + + +

医師検索一覧

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} +
From 607784bc50a8597647e145b74812d175f578460d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 6 Jun 2023 17:55:47 +0900 Subject: [PATCH 36/90] =?UTF-8?q?feat:=20=E5=BE=93=E6=A5=AD=E5=93=A1?= =?UTF-8?q?=E6=8B=85=E5=BD=93=E6=96=BD=E8=A8=AD=E3=83=9E=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E7=8F=BE=E8=A1=8CMINE=E3=81=AE?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AB=E3=83=AD=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index b4b6e4e7..e325d7a4 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -115,15 +115,14 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), emp_chg_inst_row) - # 適用終了日 ≧ 適用開始日の場合 - if _str_to_date_time(emp_chg_inst_row['end_date']) >= start_date: + # 適用開始日 < DCF施設統合マスタの適用月度の1日の場合 + if start_date < tekiyo_month_first_day: # DCF施設統合マスタの適用月度の前月末日で、適用終了日を更新する last_end_date = tekiyo_month_first_day - timedelta(days=1) _update_emp_chg_inst_end_date(db, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_chg_inst_row) - if last_end_date >= start_date: - continue - # DCF施設統合マスタの適用月度の前月末日 < 適用開始日、または適用終了日 < 適用開始日の場合、N(論理削除レコード)に設定する + continue + # 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する _update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], emp_chg_inst_row['start_date']) From 91f47d4fa450cbc6bc614b49bc1010161c16f7e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Wed, 7 Jun 2023 09:42:31 +0900 Subject: [PATCH 37/90] =?UTF-8?q?=E5=8C=BB=E5=B8=AB=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=AF=E5=A4=A7=E4=BD=93=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 53 ++- .../src/model/request/ultmarc_doctor.py | 17 + .../view/ultmarc_doctor_info_view_model.py | 17 + ecs/jskult-webapp/src/templates/docInfo.html | 320 ++---------------- .../src/templates/docSearch.html | 21 +- 5 files changed, 125 insertions(+), 303 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 399ca6e4..3037971f 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -6,7 +6,7 @@ from starlette import status from src.depends.services import get_service from src.model.internal.session import UserSession -from src.model.request.ultmarc_doctor import UltmarcDoctorModel +from src.model.request.ultmarc_doctor import UltmarcDoctorModel, UltmarcDoctorInfoModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.ultmarc_view_service import UltmarcViewService @@ -115,6 +115,57 @@ def ultmarc_doctor_info_view( ultmarc = ultmarc_service.info_ultmarc_doctor_view(id, session) # バッチ起動判定の取得 ultmarc.is_batch_processing = is_batch_processing + # DocId + ultmarc.DocId = id + # ページ総数(件数) + ultmarc.postCnt = 1 + # ページ数(表示するページNo) + ultmarc.pageNum = 0 + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'docInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + +@router.post('/docInfo') +def ultmarc_doctor_info_search( + request: Request, + ultmarc_doctor_form: Optional[UltmarcDoctorInfoModel] = Depends(UltmarcDoctorInfoModel.as_form), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)), + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + # if batch_status_service.is_batch_processing(): + # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + + docId = ultmarc_doctor_form.docId.split(',') + + # 医師情報の取得 + ultmarc = ultmarc_service.info_ultmarc_doctor_view(docId[ultmarc_doctor_form.pageNum], session) + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + # DocId + ultmarc.DocId = ultmarc_doctor_form.docId + # ページ総数(件数) + ultmarc.postCnt = len(docId) + # ページ数(表示するページNo) + ultmarc.pageNum = ultmarc_doctor_form.pageNum # セッション書き換え session.update( diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py b/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py index 5935c076..0633624e 100644 --- a/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py +++ b/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py @@ -49,3 +49,20 @@ class UltmarcDoctorModel(BaseModel): alma=ctrl_alma, grad_y=ctrl_grad_y ) + + +class UltmarcDoctorInfoModel(BaseModel): + docId: Optional[str] + pageNum: Optional[int] + + @classmethod + def as_form( + cls, + docId: str = Form(None), + pageNum: str = Form(None) + ): + + return cls( + docId=docId, + pageNum=int(pageNum) + ) diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py index 1cfbcf5f..993bea14 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py @@ -24,6 +24,9 @@ class UltmarcDoctorInfoViewModel(BaseModel): specialist_license_data: Optional[list[UltmarcSpecialistLicenseDBModel]] doctor_wrkplace_data: Optional[list[UltmarcDoctorWrkplaceDBModel]] doctor_wrkplace_his_data: Optional[list[UltmarcDoctorWrkplaceHisDBModel]] + DocId: Optional[str] + postCnt: Optional[int] + pageNum: Optional[int] def ultmarc_data_json_str(self): def date_handler(obj): @@ -66,6 +69,20 @@ class UltmarcDoctorInfoViewModel(BaseModel): def is_input_estab_y(self): return self.doctor_info_data.estab_y or '' + # 現在のページ(表示用) + def is_pageNum_view(self): + return self.pageNum + 1 + + # 前ボタン + def is_disabled_prev(self): + return 'disabled' if self.pageNum == 0 else '' + + # 次ボタン + def is_disabled_next(self): + if self.pageNum == self.postCnt - 1: + return 'disabled' + return '' + def is_input_birthday_fromat(self): return self._format_date_string(self.doctor_info_data.birthday) diff --git a/ecs/jskult-webapp/src/templates/docInfo.html b/ecs/jskult-webapp/src/templates/docInfo.html index e9214447..1202faee 100644 --- a/ecs/jskult-webapp/src/templates/docInfo.html +++ b/ecs/jskult-webapp/src/templates/docInfo.html @@ -14,169 +14,22 @@ formBtDisabled(); } + - - - - - - -
@@ -193,30 +46,17 @@ if (!isset($isDBSuccess)) {
- - - - - - - - + + + @@ -226,9 +66,7 @@ if (!isset($isDBSuccess)) {
- - + - + {{ultmarc.is_pageNum_view()}}/{{ultmarc.postCnt}} - - +
- + @@ -259,37 +97,16 @@ if (!isset($isDBSuccess)) { - @@ -309,18 +126,6 @@ if (!isset($isDBSuccess)) { - {% for sosiety_data in ultmarc.sosiety_data %} @@ -348,16 +153,6 @@ if (!isset($isDBSuccess)) { {% endfor %} -
診療科目: - {% for trt_coursed_data in ultmarc.trt_coursed_data %} - + {% endfor %} - - - {% for i in range(5-ultmarc.is_input_trt_course_data_size())%} {% endfor %} -
{{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_cd)}}{{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_license_name)}}
@@ -371,42 +166,16 @@ if (!isset($isDBSuccess)) { - - - - - - - - - - - - {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} @@ -421,16 +190,6 @@ if (!isset($isDBSuccess)) { {% endif %} {% endfor %} - {% for doctor_wrkplace_his_data in ultmarc.doctor_wrkplace_his_data %} {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd) != ''%} @@ -444,43 +203,10 @@ if (!isset($isDBSuccess)) { {% endif %} {% endfor %} - - - - - - - - - -
ULT施設コード 勤務先略名 所属部科名 役職名 職位 開始年月日 終了年月日
- - + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 2168aa3e..c3168212 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -31,7 +31,7 @@ -
+ @@ -113,10 +113,11 @@ - + - + + @@ -142,7 +143,7 @@ - + \ No newline at end of file From 0bdcc1fc4afe44302f6d94f37d2ae4db8cf649b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 7 Jun 2023 15:49:20 +0900 Subject: [PATCH 38/90] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=E4=B8=AD?= =?UTF-8?q?=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/laundering/sales_laundering.py | 2 + .../laundering/sales_results_laundering.py | 139 +++++ .../src05/hco_to_mdb_laundering.sql | 98 +++ .../src05/inst_merge_laundering.sql | 52 ++ .../src05/sales_lau_delete.sql | 37 ++ .../src05/sales_lau_upsert.sql | 568 ++++++++++++++++++ .../src05/v_inst_merge_laundering.sql | 71 +++ .../src05/whs_org_laundering.sql | 118 ++++ 8 files changed, 1085 insertions(+) create mode 100644 ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py create mode 100644 rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/inst_merge_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/sales_lau_delete.sql create mode 100644 rds_mysql/stored_procedure/src05/sales_lau_upsert.sql create mode 100644 rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/whs_org_laundering.sql diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py index f6d682b4..3862177e 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py @@ -20,6 +20,8 @@ def exec(): emp_chg_inst_laundering.exec() # 納入先処方元マスタ洗替 ult_ident_presc_laundering.exec() + # 卸販売洗替 + # # 並列処理のテスト用コード # import time diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py new file mode 100644 index 00000000..979f1042 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -0,0 +1,139 @@ +from src.db.database import Database +from src.error.exceptions import BatchOperationException +from src.logging.get_logger import get_logger +from src.batch.batch_functions import logging_sql + +logger = get_logger('卸実績洗替') + + +def exec(): + db = Database.get_instance() + try: + db.connect() + logger.debug('処理開始') + # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 + _call_sales_lau_delete(db, 'sales_lau', 5) + # 卸販売実績テーブル(洗替後)作成 + _call_sales_lau_upsert(db, 'sales_lau', '', '') + # 1:卸組織洗替 + _call_whs_org_laundering(db, 'sales_lau') + # 3:HCO施設コードの洗替 + _update_sales_lau_from_vop_hco_merge_v(db, 'sales_lau') + # 4:メルク施設コードの洗替 + _update_mst_inst_laundering(db, 'sales_lau') + logger.debug('処理終了') + except Exception as e: + raise BatchOperationException(e) + finally: + db.disconnect() + + +def _call_sales_lau_delete(db: Database, target_table: str, set_year: int): + # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 + logger.info('sales_lau_delete(プロシージャ―) 開始') + db.execute(f'CALL src05.sales_lau_delete("{target_table}", {set_year})') + logger.info('sales_lau_delete(プロシージャ―) 終了') + return + + +def _call_sales_lau_upsert(db: Database, target_table: str, extract_from_date: str, + extract_to_date: str): + # 卸販売実績テーブル(洗替後)作成 + logger.info('sales_lau_delete(プロシージャ―) 開始') + db.execute(f'CALL src05.sales_lau_delete("{target_table}", "{extract_from_date}", "{extract_to_date}")') + logger.info('sales_lau_delete(プロシージャ―) 終了') + return + + +def _call_whs_org_laundering(db: Database, target_table: str): + # 卸組織洗替 + logger.info('whs_org_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.whs_org_laundering("{target_table}")') + logger.info('whs_org_laundering(プロシージャ―) 終了') + return + + +def _update_sales_lau_from_vop_hco_merge_v(db: Database, target_table: str): + # HCO施設コードの洗替 + if _count_vop_hco_merge_v(db) >= 1: + _call_v_inst_merge_laundering(db, target_table) + return + logger.info('V施設統合マスタにデータは存在しません') + return + + +def _count_vop_hco_merge_v(db: Database) -> int: + # V施設統合マスタのデータ件数の取得 + try: + sql = """ + SELECT + COUNT(v_inst_cd) AS cnt + FROM + src05.vop_hco_merge_v + """ + result = db.execute_select(sql) + logging_sql(logger, sql) + logger.info('V施設統合マスタのデータ件数の取得 成功') + except Exception as e: + logger.debug('V施設統合マスタのデータ件数の取得 失敗') + raise e + + return result[0]['cnt'] + + +def _call_v_inst_merge_laundering(db: Database, target_table: str): + # HCO施設コードの洗替(テーブル更新) + logger.info('v_inst_merge_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.v_inst_merge_laundering("{target_table}")') + logger.info('v_inst_merge_laundering(プロシージャ―) 終了') + return + + +def _update_mst_inst_laundering(db: Database, target_table: str): + # メルク施設コードの洗替 + _call_hco_to_mdb_laundering(db, target_table) + _update_sales_lau_from_dcf_inst_merge(db, target_table) + + +def _call_hco_to_mdb_laundering(db: Database, target_table: str): + # A:医療機関のデータはMDB変換表からHCO⇒DCFへ変換 + logger.info('hco_to_mdb_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.hco_to_mdb_laundering("{target_table}")') + logger.info('hco_to_mdb_laundering(プロシージャ―) 終了') + return + + +def _update_sales_lau_from_dcf_inst_merge(db: Database, target_table: str): + # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする + if _count_dcf_inst_merge(db) >= 1: + _call_inst_merge_laundering(db, target_table) + return + logger.info('DCF施設統合マスタにデータは存在しません') + return + + +def _count_dcf_inst_merge(db: Database) -> int: + # DCF施設統合マスタのデータ件数の取得 + try: + sql = """ + SELECT + COUNT(dcf_inst_cd) AS cnt + FROM + src05.dcf_inst_merge + """ + result = db.execute_select(sql) + logging_sql(logger, sql) + logger.info('DCF施設統合マスタのデータ件数の取得 成功') + except Exception as e: + logger.debug('DCF施設統合マスタのデータ件数の取得 失敗') + raise e + + return result[0]['cnt'] + + +def _call_inst_merge_laundering(db: Database, target_table: str): + # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(テーブル更新) + logger.info('inst_merge_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.inst_merge_laundering("{target_table}")') + logger.info('inst_merge_laundering(プロシージャ―) 終了') + return diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql new file mode 100644 index 00000000..03402001 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -0,0 +1,98 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.hco_to_mdb_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A① 開始'); + + TRUNCATE TABLE internal05.hco_cnv_mdb_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A① 終了'); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A② 開始'); + + INSERT INTO + internal05.hco_cnv_mdb_t ( + hco_vod_v, + mdb_cd, + form_inst_name_kana, + form_inst_name_kanji, + inst_addr, + prefc_cd, + delete_flg, + abolish_ymd, + start_date + ) + SELECT + mcmv.hco_vid_v, + mcmv.mdb_cd, + ci.form_inst_name_kana, + ci.form_inst_name_kanji, + ci.inst_addr, + ci.prefc_cd, + ci.delete_flg, + ci.abolish_ymd, + mcmv.start_date + FROM + src05.mdb_cnv_mst_v AS mcmv + INNER JOIN ( + SELECT + hco_vid_v,MAX(sub_num) AS sno + FROM + src05.mdb_cnv_mst_v + WHERE + rec_sts_kbn != '9' + AND src05.get_syor_date() >= START_DATE + GROUP BY hco_vid_v + ) AS mcmv2 + ON mcmv.hco_vid_v = mcmv2.hco_vid_v + AND mcmv.sub_num = mcmv2.sno + LEFT OUTER JOIN src05.com_inst AS ci + ON mcmv.mdb_cd = ci.dcf_dsf_inst_cd + AND ci.delete_flg = '0' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A② 終了'); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A③ 開始'); + + UPDATE src05.@target_table AS tt, internal05.hco_cnv_mdb_t AS hcmt + SET + tt.inst_cd = hcmt.mdb_cd, + tt.inst_name_kana = hcmt.form_inst_name_kana, + tt.inst_name = hcmt.form_inst_name_kanji, + tt.address = hcmt.inst_addr, + tt.pref_cd = hcmt.prefc_cd + WHERE + tt.v_inst_cd = hcmt.hco_vid_v + AND tt.inst_clas_cd = '1' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A③ 終了'); + +END diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql new file mode 100644 index 00000000..92ff79a9 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -0,0 +1,52 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.inst_merge_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_B① 開始'); + + UPDATE ( + SELECT + dcf_dsf_inst_cd, + dup_opp_cd, + form_inst_name_kanji, + form_inst_name_kana, + inst_addr, + prefc_cd + FROM + internal05.inst_merge_t + ) AS imt, + src05.@target_table AS tt + SET + tt.inst_cd = imt.dup_opp_cd, + tt.inst_name = imt.form_inst_name_kanji, + tt.inst_name_kana = imt.form_inst_name_kana, + tt.address = imt.inst_addr, + tt.prefc_cd = imt.prefc_cd + WHERE + tt.inst_cd = imt.dcf_dsf_inst_cd + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_B① 終了'); + diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql new file mode 100644 index 00000000..652db718 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -0,0 +1,37 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.sales_lau_delete(@target_table VARCHAR(64), @laundering_period_year INT) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始'); + + DELETE FROM + src05.@target_table + WHERE + kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL @laundering_period_year YEAR), '%Y%m') + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql new file mode 100644 index 00000000..270495e7 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -0,0 +1,568 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.sales_lau_upsert(@target_table VARCHAR(64), @extract_from_date DATETIME, + @extract_to_date DATETIME) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'sales_lau_upsertでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成① 開始' + ); + + TRUNCATE TABLE internal05.bu_prd_name_contrast_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成① 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成② 開始' + ); + + INSERT INTO + internal05.bu_prd_name_contrast_t ( + prd_cd, + bu_cd, + phm_itm_cd, + pp_start_date, + pp_end_date, + update_date, + bp_start_date, + bp_end_date + ) + SELECT + ppmv.prd_cd, + bpnc.bu_cd, + ppmv.phm_itm_cd, + ppmv.start_date AS pp_start_date, + ppmv.end_date AS pp_end_date, + bpnc.update_date AS update_date + bpnc.start_date AS bp_start_date, + bpnc.end_date AS bp_end_date + FROM + src05.phm_prd_mst_v AS ppmv + LEFT OUTER JOIN src05.bu_prd_name_contrast AS bpnc + ON ppmv.phm_itm_cd = bpnc.phm_itm_cd + WHERE + ppmv.rec_sts_kbn != '9' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成② 終了' + ); + + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成③ 開始' + ); + + TRUNCATE TABLE internal05.fcl_mst_v_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成③ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成④ 開始' + ); + + INSERT INTO + internal05.internal05.fcl_mst_v_t + SELECT + v_inst_cd, + sub_num, + start_date, + end_date, + closed_dt, + fcl_name, + fcl_kn_name, + fcl_abb_name, + mkr_cd, + jsk_proc_kbn, + fmt_addr, + fmt_kn_addr, + postal_cd, + prft_cd, + prft_name, + city_name, + addr_line_1, + tel_num, + admin_kbn, + fcl_type, + rec_sts_kbn, + ins_dt, + upd_dt, + dwh_upd_dt + FROM + src05.fcl_mst_v AS fmv1 + INNER JOIN ( + SELECT + fmv.v_inst_cd, + MAX(fmv.sub_num) AS sno + FROM + src05.fcl_mst_v AS fmv + GROUP BY + fmv.v_inst_cd + ) AS fmv2 + ON fmv1.v_inst_cd = fmv2.v_inst_cd + AND fmv1.sub_num = fmv2.sno + WHERE + fmv1.rec_sts_kbn != '9' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成④ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑤ 開始' + ); + + INSERT INTO + src05.@target_table ( + rec_whs_cd, + rec_whs_sub_cd, + rec_whs_org_cd, + rec_cust_cd, + rec_comm_cd, + rec_tran_kbn, + rev_hsdnymd_wrk, + rev_hsdnymd_srk, + rec_urag_num, + rec_qty, + rec_nonyu_price, + rec_nonyu_amt, + rec_comm_name, + rec_nonyu_fcl_name, + free_item, + rec_nonyu_fcl_addr, + rec_nonyu_fcl_post, + rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd, + rec_bef_slip_num, + rec_ymd, + sale_data_cat, + slip_file_name, + slip_mgt_num, + row_num, + hsdn_ymd, + exec_dt, + v_tran_cd, + tran_kbn_name, + whs_org_cd, + v_whsorg_cd, + whs_org_name, + whs_org_kn, + v_whs_cd, + whs_name, + nonyu_fcl_cd, + inst_name, + inst_name_kana, + address, + comm_cd, + comm_name, + nonyu_qty, + nonyu_price, + nonyu_amt, + shikiri_price, + shikiri_amt, + nhi_price, + nhi_amt, + v_inst_cd, + inst_clas_cd, + bu_cd, + item_cd, + item_name, + item_english_name, + pref_cd, + whspos_err_kbn, + htdnymd_err_kbn, + prd_exis_kbn, + fcl_exis_kbn, + bef_hsdn_ymd, + bef_slip_num, + slip_org_kbn, + kjyo_ym, + tksnbk_kbn, + fcl_exec_kbn, + rec_sts_kbn, + ins_dt, + ins_usr, + dwh_upd_dt + ) + SELECT + s.rec_whs_cd, + s.rec_whs_sub_cd, + s.rec_whs_org_cd, + s.rec_cust_cd, + s.rec_comm_cd, + s.rec_tran_kbn, + s.rev_hsdnymd_wrk, + s.rev_hsdnymd_srk, + s.rec_urag_num, + s.rec_qty, + s.rec_nonyu_price, + s.rec_nonyu_amt, + s.rec_comm_name, + s.rec_nonyu_fcl_name, + s.free_item, + s.rec_nonyu_fcl_addr, + s.rec_nonyu_fcl_post, + s.rec_nonyu_fcl_tel, + s.rec_bef_hsdn_ymd, + s.rec_bef_slip_num, + s.rec_ymd, + s.sale_data_cat, + s.slip_file_name, + s.slip_mgt_num, + s.row_num, + s.hsdn_ymd, + s.exec_dt, + s.v_tran_cd, + s.tran_kbn_name, + s.whs_org_cd, + s.v_whsorg_cd, + s.whs_org_name, + s.whs_org_kn, + s.v_whs_cd, + s.whs_name, + s.nonyu_fcl_cd, + s.v_inst_name, + s.v_inst_kn, + s.v_inst_addr, + s.comm_cd, + s.comm_name, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END AS nonyu_qty, + s.nonyu_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END AS nonyu_amt, + s.shikiri_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END AS shikiri_amt, + s.nhi_price, + CASE + WHEN + (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END AS nhi_amt, + s.v_inst_cd, + CASE + WHEN + (fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' THEN '2' + ELSE + '1' + END AS inst_clas_cd, + bpnct.bu_cd, + ppmv.mkr_cd, + ppmv.mkr_inf_1, + ppmv.mkr_inf_2, + CASE + WHEN + s.v_inst_cd LIKE '00%' + THEN + ci.prefc_cd + ELSE + fmvt.prft_cd + END AS prft_cd, + s.whspos_err_kbn, + s.htdnymd_err_kbn, + s.prd_exis_kbn, + s.fcl_exis_kbn, + s.bef_hsdn_ymd, + s.bef_slip_num, + s.slip_org_kbn, + s.kjyo_ym, + s.tksnbk_kbn, + s.fcl_exec_kbn, + s.rec_sts_kbn, + s.ins_dt, + s.ins_usr, + SYSDATE() + FROM ( + SELECT + CAST(SYSDATE() AS DATE) AS today + ) AS sub + INNER JOIN src05.sales AS s + ON sub.today = CAST(s.dwh_upd_dt AS DATE) + LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv + ON s.comm_cd = ppmv.prd_cd + AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date + AND ppmv.rec_sts_kbn != '9' + LEFT OUTER JOIN src05.fcl_mst_v_t AS fmvt + ON s.v_inst_cd = fmvt.v_inst_cd + LEFT OUTER JOIN src05.bu_prd_name_contrast_t AS bpnct + ON s.comm_cd = bpnct.prd_cd + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date + LEFT OUTER JOIN src05.com_inst AS ci + ON s.v_inst_cd = ci.dcf_dsf_inst_cd + WHERE + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + OR ( + s.rec_sts_kbn = '0' + AND s.err_flg20 != 'M' + AND s.v_tran_cd IN (110, 120, 210, 220) + AND ( + ( + s.fcl_exec_kbn NOT IN ('2', '5') + AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) + ) + OR s.fcl_exec_kbn IS NULL + ) + ) + + ON DUPLICATE KEY UPDATE + rec_whs_cd = s.rec_whs_cd, + rec_whs_sub_cd = s.rec_whs_sub_cd, + rec_whs_org_cd = s.rec_whs_org_cd, + rec_cust_cd = s.rec_cust_cd, + rec_comm_cd = s.rec_comm_cd, + rec_tran_kbn = s.rec_tran_kbn, + rev_hsdnymd_wrk = s.rev_hsdnymd_wrk, + rev_hsdnymd_srk = s.rev_hsdnymd_srk, + rec_urag_num = s.rec_urag_num, + rec_qty = s.rec_qty, + rec_nonyu_price = s.rec_nonyu_price, + rec_nonyu_amt = s.rec_nonyu_amt, + rec_comm_name = s.rec_comm_name, + rec_nonyu_fcl_name = s.rec_nonyu_fcl_name, + free_item = s.free_item, + rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr, + rec_nonyu_fcl_post = s.rec_nonyu_fcl_post, + rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd, + rec_bef_slip_num = s.rec_bef_slip_num, + rec_ymd = s.rec_ymd, + sale_data_cat = s.sale_data_cat, + slip_file_name = s.slip_file_name, + row_num = s.row_num, + hsdn_ymd = s.hsdn_ymd, + exec_dt = s.exec_dt, + v_tran_cd = s.v_tran_cd, + tran_kbn_name = s.tran_kbn_name, + whs_org_cd = s.whs_org_cd, + v_whsorg_cd = s.v_whsorg_cd, + whs_org_name = s.whs_org_name, + whs_org_kn = s.whs_org_kn, + v_whs_cd = s.v_whs_cd, + whs_name = s.whs_name, + nonyu_fcl_cd = s.nonyu_fcl_cd, + inst_name = s.v_inst_name, + inst_name_kana = s.v_inst_kn, + address = s.v_inst_addr, + comm_cd = s.comm_cd, + comm_name = s.comm_name, + nonyu_qty = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END + ), + nonyu_price = s.nonyu_price, + nonyu_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END + ), + shikiri_price = s.shikiri_price, + shikiri_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END + ), + nhi_price = s.nhi_price, + nhi_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END + ), + v_inst_cd = s.v_inst_cd, + inst_clas_cd = ( + CASE + WHEN + (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') + THEN + '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' + THEN + '2' + ELSE + '1' + END + ), + bu_cd = bpnct.bu_cd, + item_cd = ppmv.mkr_cd, + item_name = ppmv.mkr_inf_1, + item_english_name = ppmv.mkr_inf_2, + pref_cd = ( + CASE + WHEN + s.v_inst_cd LIKE '00%' + THEN + ci.prefc_cd + ELSE + fmvt.prft_cd + END + ), + whspos_err_kbn = s.whspos_err_kbn, + htdnymd_err_kbn = s.htdnymd_err_kbn, + prd_exis_kbn = s.prd_exis_kbn, + fcl_exis_kbn = s.fcl_exis_kbn, + bef_hsdn_ymd = s.bef_hsdn_ymd, + bef_slip_num = s.bef_slip_num, + slip_org_kbn = s.slip_org_kbn, + kjyo_ym = s.kjyo_ym, + tksnbk_kbn = s.tksnbk_kbn, + fcl_exec_kbn = s.fcl_exec_kbn, + rec_sts_kbn = s.rec_sts_kbn, + ins_dt = s.ins_dt, + ins_usr = s.ins_usr, + dwh_upd_dt = SYSDATE() + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑤ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑥ 開始' + ); + + UPDATE ( + SELECT + fmvt.v_inst_cd AS v_inst_cd, + fmvt.fcl_type AS fcl_type, + fmvt.prft_cd AS prft_cd, + ci.prefc_cd AS prefc_cd + FROM + (SELECT CAST(SYSDATE() AS DATE) AS today) AS sub + INNER JOIN src05.fcl_mst_v_t AS fmvt + ON sub.today = CAST(fmvt.dwh_upd_dt AS DATE) + LEFT OUTER JOIN src05.com_inst AS ci + ON fmvt.v_inst_cd = ci.dcf_dsf_inst_cd + ) AS t3t5, + src05.sales_lau AS sl + SET + sl.inst_clas_cd = ( + CASE + WHEN + (t3t5.fcl_type = 'A1' OR t3t5.fcl_type = 'A0') + THEN + '3' + WHEN + t3t5.fcl_type BETWEEN '20' AND '29' + THEN + '2' + ELSE + '1' + END + ), + sl.pref_cd = ( + CASE + WHEN + sl.v_inst_cd LIKE '00%' + THEN + t3t5.prefc_cd + ELSE + t3t5.prft_cd + END + ) + WHERE sl.v_inst_cd = t3t5.v_inst_cd + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑥ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑦ 開始' + ); + + UPDATE + ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, + src05.sales_lau AS sl, + src05.sales AS s + SET + sl.inst_cd = ( + CASE + WHEN + (s.err_flg20 != 'M' AND sl.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M') + THEN + s.v_inst_cd + ELSE + NULL + END + ) + WHERE + sub.today = CAST(s.dwh_upd_dt AS DATE) + AND sl.slip_mgt_num = s.slip_mgt_num + AND sl.row_num = s.row_num + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑦ 終了' + ); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql new file mode 100644 index 00000000..4ef2075e --- /dev/null +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -0,0 +1,71 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.v_inst_merge_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】3:HCO施設コードの洗替① 開始' + ); + + UPDATE ( + SELECT + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd + FROM + internal05.v_inst_merge_t + WHERE + (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' + ) AS vimt, + src05.@target_table AS tt + SET + tt.inst_cd = ( + CASE + WHEN + tt.inst_clas_cd = '1' + THEN + tt.inst_cd + WHEN + (tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3') + THEN + vimt.v_inst_cd_merge + END + ) + tt.v_inst_cd = vimt.v_inst_cd_merge, + tt.inst_name = vimt.fcl_name, + tt.inst_name_kana = vimt.fcl_kn_name, + tt.address = vimt.fmt_addr, + tt.prefc_cd = vimt.prft_cd, + tt.dwh_upd_dt = SYSDATE() + WHERE + tt.v_inst_cd = vimt.v_inst_cd + AND (tt.inst_clas_cd IN ('1', '2', '3')) + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】3:HCO施設コードの洗替① 終了' + ); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql new file mode 100644 index 00000000..e3ce53c7 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -0,0 +1,118 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.whs_org_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'whs_org_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替① 開始' + ); + + TRUNCATE TABLE internal05.whs_customer_org_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替① 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替② 開始' + ); + + INSERT INTO + internal05.whs_customer_org_t ( + whs_cd, + whs_sub_cd, + customer_cd, + whs_org_cd, + v_org_cd, + nm_2 + ) + SELECT + wcmv.whs_cd, + wcmv.whs_sub_cd, + wcmv.customer_cd, + wcmv.whs_org_cd, + ocmv.v_org_cd, + mohv2.name_2 + FROM + src05.whs_customer_mst_v AS wcmv + LEFT OUTER JOIN src05.org_cnv_mst_v AS ocmv + ON wcmv.whs_cd = ocmv.whs_cd + AND wcmv.whs_sub_cd = ocmv.whs_sub_cd + AND wcmv.whs_org_cd = ocmv.org_cd + AND src05.get_syor_date() BETWEEN ocmv.start_date AND ocmv.end_date + AND ocmv.rec_sts_kbn != '9' + LEFT OUTER JOIN ( + SELECT + mohv.v_cd_2, + mohv.name_2 + FROM src05.mkr_org_horizon_v AS mohv + INNER JOIN ( + SELECT + count(1) AS c, + v_cd_2, + MAX(dwh_upd_dt) AS dwh_upd_dt_latest + FROM + src05.mkr_org_horizon_v + WHERE + rec_sts_kbn != '9' + AND src05.get_syor_date() BETWEEN start_date AND end_date + GROUP BY + v_cd_2 + ORDER BY + MAX(start_date) DESC + ) AS m_latest + ON mohv.v_cd_2 = m_latest.v_cd_2 + AND mohv.dwh_upd_dt = m_latest.dwh_upd_dt_latest + WHERE + mohv.rec_sts_kbn != '9' + AND src05.get_syor_date() BETWEEN mohv.start_date AND mohv.end_date + ) AS mohv2 + ON ocmv.v_org_cd = mohv2.v_cd_2 + WHERE + wcmv.rec_sts_kbn != '9' + AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替② 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 開始' + ); + + UPDATE + src05.sales_lau AS sl, src05.@target_table AS tt + SET + sl.whs_org_cd = tt.whs_org_cd, + sl.v_whsorg_cd = tt.v_org_cd, + sl.whs_org_name = tt.nm_2 + WHERE + st.whs_cd = tt.whs_cd + AND st.whs_sub_cd = tt.whs_sub_cd + AND st.customer_cd = tt.customer_cd + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 終了' + ); + +END \ No newline at end of file From 227f79932c8a66a82ea5286d33a7291733e174da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Thu, 8 Jun 2023 10:21:24 +0900 Subject: [PATCH 39/90] =?UTF-8?q?=E6=96=BD=E8=A8=AD=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=EF=BC=88=E5=AE=9F=E8=A3=85=E5=AE=8C=E4=BA=86?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 78 ++++++- .../src/model/db/inst_div_master.py | 8 + .../src/model/db/ultmarc_inst.py | 18 ++ .../src/model/request/ultmarc_inst.py | 61 +++++ .../src/model/view/ultmarc_inst_view_model.py | 103 +++++++++ .../repositories/inst_master_repository.py | 29 +++ .../repositories/ultmarc_inst_repository.py | 108 +++++++++ .../src/services/ultmarc_view_service.py | 32 ++- ecs/jskult-webapp/src/static/css/ultStyle.css | 2 +- .../src/templates/instSearch.html | 212 ++++++++++++++++++ ecs/jskult-webapp/src/templates/menu.html | 2 +- 11 files changed, 649 insertions(+), 4 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/inst_div_master.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_inst.py create mode 100644 ecs/jskult-webapp/src/model/request/ultmarc_inst.py create mode 100644 ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py create mode 100644 ecs/jskult-webapp/src/repositories/inst_master_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py create mode 100644 ecs/jskult-webapp/src/templates/instSearch.html diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 3037971f..f4747bc8 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -7,6 +7,7 @@ from starlette import status from src.depends.services import get_service from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel, UltmarcDoctorInfoModel +from src.model.request.ultmarc_inst import UltmarcInstModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.ultmarc_view_service import UltmarcViewService @@ -22,6 +23,81 @@ router.route_class = AuthenticatedRoute ######################### +@router.get('/instSearch') +def ultmarc_inst_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + # if batch_status_service.is_batch_processing(): + # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + + # 検索項目の取得(都道府県・施設区分) + ultmarc = ultmarc_service.ultmarc_inst_view(session) + ultmarc.is_batch_processing = is_batch_processing + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'instSearch.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + +@router.post('/instSearch') +def search_inst( + request: Request, + ultmarc_inst_form: Optional[UltmarcInstModel] = Depends(UltmarcInstModel.as_form), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)), + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + # is_batch_processing = batch_status_service.is_batch_processing() + # if batch_status_service.is_batch_processing(): + # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + + # 施設データを検索 + ultmarc_inst_data = ultmarc_service.search_inst_data(ultmarc_inst_form) + + # 検索項目の取得(都道府県・施設区分) + ultmarc = ultmarc_service.ultmarc_inst_view(session) + ultmarc.is_batch_processing = batch_status_service.is_batch_processing() + ultmarc.inst_data = ultmarc_inst_data + ultmarc.form_data = ultmarc_inst_form + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'instSearch.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + @router.get('/docSearch') def ultmarc_doctor_view( request: Request, @@ -35,7 +111,7 @@ def ultmarc_doctor_view( # if batch_status_service.is_batch_processing(): # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # # 検索項目の取得 + # 検索項目の取得(都道府県) ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) ultmarc.is_batch_processing = is_batch_processing diff --git a/ecs/jskult-webapp/src/model/db/inst_div_master.py b/ecs/jskult-webapp/src/model/db/inst_div_master.py new file mode 100644 index 00000000..38ec7b70 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/inst_div_master.py @@ -0,0 +1,8 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel + + +class InstDivMasterModel(BaseDBModel): + inst_div_cd: Optional[str] + inst_div_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_inst.py b/ecs/jskult-webapp/src/model/db/ultmarc_inst.py new file mode 100644 index 00000000..14830582 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_inst.py @@ -0,0 +1,18 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcInstDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + abolish_ymd: Optional[str] + delete_sche_reason_cd: Optional[str] + form_inst_name_kanji: Optional[str] + inst_addr: Optional[str] + postal_number: Optional[str] + inst_phone_number: Optional[str] + inst_div_name: Optional[str] + hp_assrt_name: Optional[str] + prefc_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py new file mode 100644 index 00000000..f7919612 --- /dev/null +++ b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py @@ -0,0 +1,61 @@ +from typing import Optional + +from fastapi import Form +from pydantic import BaseModel + +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcInstModel(BaseModel): + dcf_dsf_inst_cd: Optional[str] + inst_div_cd: Optional[str] + form_inst_name_kanji: Optional[str] + form_inst_name_kana: Optional[str] + postal_number: Optional[str] + inst_phone_number: Optional[str] + prefc_cd: Optional[str] + delFlg: Optional[str] + inst_addr: Optional[str] + + @classmethod + def as_form( + cls, + ctrl_dcf_dsf_inst_cd: str = Form(None), + ctrl_inst_div_cd: str = Form(None), + ctrl_form_inst_name_kanji: str = Form(None), + ctrl_form_inst_name_kana: str = Form(None), + ctrl_postal_number: str = Form(None), + ctrl_inst_phone_number: str = Form(None), + ctrl_prefc_cd: str = Form(None), + ctrl_delFlg: str = Form(None), + ctrl_inst_addr: str = Form(None) + ): + return cls( + dcf_dsf_inst_cd=ctrl_dcf_dsf_inst_cd, + inst_div_cd=ctrl_inst_div_cd, + form_inst_name_kanji=ctrl_form_inst_name_kanji, + form_inst_name_kana=ctrl_form_inst_name_kana, + postal_number=ctrl_postal_number, + inst_phone_number=ctrl_inst_phone_number, + prefc_cd=ctrl_prefc_cd, + delFlg=ctrl_delFlg, + inst_addr=ctrl_inst_addr + ) + + +class UltmarcInstInfoModel(BaseModel): + docId: Optional[str] + pageNum: Optional[int] + + @classmethod + def as_form( + cls, + docId: str = Form(None), + pageNum: str = Form(None) + ): + + return cls( + docId=docId, + pageNum=int(pageNum) + ) diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py new file mode 100644 index 00000000..a0b5107c --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py @@ -0,0 +1,103 @@ +import json +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + +from src.model.db.prefc_master import PrefcMasterModel +from src.model.db.inst_div_master import InstDivMasterModel +from src.model.request.ultmarc_inst import UltmarcInstModel +from src.model.view.bio_disp_model import BisDisplayModel +from src.system_var import environment + + +class UltmarcInstViewModel(BaseModel): + subtitle: str = '施設検索一覧' + is_batch_processing: Optional[bool] + prefc_models: list[PrefcMasterModel] + inst_div_models: list[InstDivMasterModel] + inst_data: Optional[list[BisDisplayModel]] = [] + form_data: Optional[UltmarcInstModel] + + def ultmarc_data_json_str(self): + def date_handler(obj): + return obj.isoformat() if hasattr(obj, 'isoformat') else obj + return json.dumps([model.dict() for model in self.inst_data], ensure_ascii=False, default=date_handler) + + # ULT施設コード + def is_input_dcf_dsf_inst_cdd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.dcf_dsf_inst_cd or '' + + # 施設区分 + def is_selected_inst_div_cd(self, selected_inst_div_cd): + if not self.is_form_submitted(): + return '' + return self._selected_value(self.form_data.inst_div_cd, selected_inst_div_cd) + + # ULT施設名(漢字) + def is_input_form_inst_name_kanji(self): + if not self.is_form_submitted(): + return '' + return self.form_data.form_inst_name_kanji or '' + + # ULT施設名(かな・カナ) + def is_input_form_inst_name_kana(self): + if not self.is_form_submitted(): + return '' + return self.form_data.form_inst_name_kana or '' + + # 郵便番号 + def is_input_postal_number(self): + if not self.is_form_submitted(): + return '' + return self.form_data.postal_number or '' + + # 電話番号 + def is_input_inst_phone_number(self): + if not self.is_form_submitted(): + return '' + return self.form_data.inst_phone_number or '' + + # 削除施設表示 + def is_checked_delFlg(self): + if not self.is_form_submitted(): + return '' + return self._checked_value(self.form_data.delFlg) + + # ULT施設住所 + def is_input_inst_addr(self): + if not self.is_form_submitted(): + return '' + return self.form_data.inst_addr or '' + + # 勤務先都道府県 + def is_selected_prefc_cd(self, selected_prefc_cd): + if not self.is_form_submitted(): + return '' + return self._selected_value(self.form_data.prefc_cd, selected_prefc_cd) + + def disabled_button(self): + return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' + + def is_form_submitted(self): + return self.form_data is not None + + def is_data_empty(self): + return len(self.doctor_data) == 0 + + def is_data_overflow_max_length(self): + return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + + def _format_date_string(self, date_string): + if date_string is None: + return '' + date = datetime.strptime(date_string, '%Y%m%d') + return date.strftime('%Y/%m/%d') + + def _selected_value(self, form_value: str, current_value: str): + return 'selected' if form_value == current_value else '' + + def _checked_value(self, form_value: str): + return 'checked' if form_value else '' diff --git a/ecs/jskult-webapp/src/repositories/inst_master_repository.py b/ecs/jskult-webapp/src/repositories/inst_master_repository.py new file mode 100644 index 00000000..d4b18505 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/inst_master_repository.py @@ -0,0 +1,29 @@ +from src.model.db.inst_div_master import InstDivMasterModel +from src.repositories.base_repository import BaseRepository + + +class InstDivMasterRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + DISTINCT com_inst_div.inst_div_cd AS inst_div_cd, + com_inst_div.inst_div_name AS inst_div_name + FROM src05.com_inst + JOIN src05.com_inst_div on com_inst.inst_div_cd = com_inst_div.inst_div_cd + ORDER BY com_inst_div.inst_div_cd + """ + + def fetch_all(self) -> list[InstDivMasterModel]: + try: + self._database.connect() + result = self._database.execute_select(self.FETCH_SQL) + result_data = [res for res in result] + models = [InstDivMasterModel(**r) for r in result_data] + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] getOroshiData DB Error. ") + print(f"[ERROR] ErrorMessage: {e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py new file mode 100644 index 00000000..438c429d --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py @@ -0,0 +1,108 @@ +from src.db import sql_condition as condition +from src.db.sql_condition import SQLCondition +from src.model.db.ultmarc_inst import UltmarcInstDBModel +from src.model.request.ultmarc_inst import UltmarcInstModel +from src.repositories.base_repository import BaseRepository +from src.util.string_util import is_not_empty + + +class UltmarcInstRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + dcf_dsf_inst_cd, + abolish_ymd, + delete_sche_reason_cd, + form_inst_name_kanji, + inst_addr, + postal_number, + inst_phone_number, + inst_div_name, + hp_assrt_name, + prefc_name + FROM src05.com_inst + LEFT JOIN src05.mst_prefc ON com_inst.prefc_cd = mst_prefc.prefc_cd + LEFT JOIN src05.com_inst_div ON com_inst.inst_div_cd = com_inst_div.inst_div_cd + LEFT JOIN src05.com_hp_assrt ON com_inst.hp_assrt_cd = com_hp_assrt.hp_assrt_cd + WHERE {where_clause} + ORDER BY dcf_dsf_inst_cd + \ + """ + + def fetch_many(self, parameter: UltmarcInstModel) -> list[UltmarcInstDBModel]: + try: + self._database.connect() + # 文字列の検索を部分一致にするため、モデルをコピー。以降はこのコピーを使用する。 + clone_parameter = UltmarcInstModel(**parameter.dict()) + where_clause = self.__build_condition(clone_parameter) + query = self.FETCH_SQL.format(where_clause=where_clause) + result = self._database.execute_select(query, clone_parameter.dict()) + models = [UltmarcInstDBModel(**r) for r in result] + + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() + + def __build_condition(self, parameter: UltmarcInstModel): + where_clauses: list[SQLCondition] = [] + + # ULT施設コード + if is_not_empty(parameter.dcf_dsf_inst_cd): + # 部分一致検索 + parameter.dcf_dsf_inst_cd = f'%{parameter.dcf_dsf_inst_cd}%' + where_clauses.append(SQLCondition('com_inst.dcf_dsf_inst_cd', condition.LIKE, 'dcf_dsf_inst_cd')) + + # 施設区分 + if is_not_empty(parameter.inst_div_cd): + where_clauses.append(SQLCondition('com_inst.inst_div_cd', condition.EQ, 'inst_div_cd')) + + # ULT施設名(漢字) + if is_not_empty(parameter.form_inst_name_kanji): + # 部分一致検索 + parameter.form_inst_name_kanji = f'%{parameter.form_inst_name_kanji}%' + where_clauses.append(SQLCondition('form_inst_name_kanji', condition.LIKE, 'form_inst_name_kanji')) + + # ULT施設名(カナ) + if is_not_empty(parameter.form_inst_name_kana): + # 部分一致検索 + parameter.form_inst_name_kana = f'%{parameter.form_inst_name_kana}%' + where_clauses.append(SQLCondition('form_inst_name_kana', condition.LIKE, 'form_inst_name_kana')) + + # 郵便番号 + if is_not_empty(parameter.postal_number): + # 前方一致検索 + parameter.postal_number = f'{parameter.postal_number}%' + where_clauses.append(SQLCondition('postal_number', condition.LIKE, 'postal_number')) + + # 電話番号 + if is_not_empty(parameter.inst_phone_number): + # 前方一致検索 + parameter.inst_phone_number = f'{parameter.inst_phone_number}%' + where_clauses.append(SQLCondition('inst_phone_number', condition.LIKE, 'inst_phone_number')) + + # 勤務先都道府県 + if is_not_empty(parameter.prefc_cd): + where_clauses.append(SQLCondition('com_inst.prefc_cd', condition.EQ, 'prefc_cd')) + + # ULT施設住所 + if is_not_empty(parameter.inst_addr): + # 部分一致検索 + parameter.inst_addr = f'%{parameter.inst_addr}%' + where_clauses.append(SQLCondition('inst_addr', condition.LIKE, 'inst_addr')) + + # 削除表示フラグ + if is_not_empty(parameter.delFlg): + # 論理和での検索 + where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) + + # 検索条件が入力されていない場合 + if not where_clauses: + where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) + + where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) + + return where_clauses_str diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 1b207c5e..65cc57a0 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -8,10 +8,14 @@ from src.aws.aws_api_client import AWSAPIClient from src.aws.s3 import S3Client from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel +from src.model.request.ultmarc_inst import UltmarcInstModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel +from src.model.view.ultmarc_inst_view_model import UltmarcInstViewModel from src.model.view.ultmarc_doctor_info_view_model import UltmarcDoctorInfoViewModel from src.repositories.base_repository import BaseRepository from src.repositories.prefc_master_repository import PrefcMasterRepository +from src.repositories.inst_master_repository import InstDivMasterRepository +from src.repositories.ultmarc_inst_repository import UltmarcInstRepository from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository from src.repositories.ultmarc_trt_course_repository import UltmarcTrtCourseRepository from src.repositories.ultmarc_sosiety_repository import UltmarcSosietyRepository @@ -26,6 +30,8 @@ class UltmarcViewService(BaseService): REPOSITORIES = { 'ultmarc_doctor_repository': UltmarcDoctorRepository, 'prefc_repository': PrefcMasterRepository, + 'inst_div_repository': InstDivMasterRepository, + 'ultmarc_inst_repository': UltmarcInstRepository, 'ultmarc_trt_course_repository': UltmarcTrtCourseRepository, 'ultmarc_sosiety_repository': UltmarcSosietyRepository, 'ultmarc_doctor_wrkplace_repository': UltmarcDoctorWrkplaceRepository, @@ -35,6 +41,8 @@ class UltmarcViewService(BaseService): ultmarc_doctor_repository: UltmarcDoctorRepository prefc_repository: PrefcMasterRepository + inst_div_repository: InstDivMasterRepository + ultmarc_inst_repository: UltmarcInstRepository ultmarc_trt_course_repository: UltmarcTrtCourseRepository ultmarc_sosiety_repository: UltmarcSosietyRepository ultmarc_doctor_wrkplace_repository: UltmarcDoctorWrkplaceRepository @@ -45,6 +53,8 @@ class UltmarcViewService(BaseService): super().__init__(repositories, clients) self.ultmarc_doctor_repository = repositories['ultmarc_doctor_repository'] self.prefc_repository = repositories['prefc_repository'] + self.inst_div_repository = repositories['inst_div_repository'] + self.ultmarc_inst_repository = repositories['ultmarc_inst_repository'] self.ultmarc_trt_course_repository = repositories['ultmarc_trt_course_repository'] self.ultmarc_sosiety_repository = repositories['ultmarc_sosiety_repository'] self.ultmarc_doctor_wrkplace_repository = repositories['ultmarc_doctor_wrkplace_repository'] @@ -55,7 +65,7 @@ class UltmarcViewService(BaseService): self, session: UserSession ) -> UltmarcDoctorViewModel: - # # 都道府県リストを取得 + # 都道府県リストを取得 prefcs = self.prefc_repository.fetch_all() ultmarc = UltmarcDoctorViewModel( @@ -63,6 +73,26 @@ class UltmarcViewService(BaseService): ) return ultmarc + def ultmarc_inst_view( + self, + session: UserSession + ) -> UltmarcInstViewModel: + # 都道府県リストを取得 + prefcs = self.prefc_repository.fetch_all() + # 施設区分リストを取得 + inst_div = self.inst_div_repository.fetch_all() + + ultmarc = UltmarcInstViewModel( + prefc_models=prefcs, + inst_div_models=inst_div + ) + return ultmarc + + def search_inst_data(self, search_params: UltmarcInstModel): + # 施設データを検索 + ultmarc_inst_data = self.ultmarc_inst_repository.fetch_many(parameter=search_params) + return ultmarc_inst_data + def search_doctor_data(self, search_params: UltmarcDoctorModel): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) diff --git a/ecs/jskult-webapp/src/static/css/ultStyle.css b/ecs/jskult-webapp/src/static/css/ultStyle.css index 3f1850d0..8d018b01 100644 --- a/ecs/jskult-webapp/src/static/css/ultStyle.css +++ b/ecs/jskult-webapp/src/static/css/ultStyle.css @@ -134,7 +134,7 @@ table{ } .instSearchButchMsg{ - font-size: 80%; + /* font-size: 80%; */ color: red; } diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html new file mode 100644 index 00000000..92db85ae --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -0,0 +1,212 @@ + + + + {% with subtitle = ultmarc.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + + + + + +
+ + + + + +

施設検索一覧

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ULT施設コード: + + 施設区分: + + +
ULT施設名(漢字): + + ULT施設名(かな・カナ): + +
郵便番号: + 電話番号: +
都道府県: + + + + 削除施設表示 +
ULT施設住所: + + + + +
+
+ + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + +
ULT施設コード削除ULT施設名(漢字)ULT施設住所(漢字)郵便番号施設電話番号施設区分名病院種別都道府県
+
+ + +
+ + + + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index 58f05375..db36bf61 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -14,7 +14,7 @@ Ultmarc照会(医師)

{% endif %} {% if menu.is_available_ult_inst_menu() %} - Ultmarc照会(施設)

+ Ultmarc照会(施設)

{% endif %} {% if menu.is_available_bio_menu() %} {% if not menu.is_batch_processing() %} From 5f4efd451def5911198a8826a117cec361e6ee87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Mon, 12 Jun 2023 10:30:52 +0900 Subject: [PATCH 40/90] =?UTF-8?q?feat:=2048-1.=E5=8D=B8=E5=AE=9F=E7=B8=BE?= =?UTF-8?q?=E6=B4=97=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch-daily/.env.example | 6 + .../src/batch/laundering/sales_laundering.py | 6 +- .../laundering/sales_results_laundering.py | 85 +- .../src/system_var/environment.py | 7 + .../src05/hco_to_mdb_laundering.sql | 40 +- .../src05/inst_merge_laundering.sql | 57 +- .../src05/sales_lau_delete.sql | 20 +- .../src05/sales_lau_upsert.sql | 864 +++++++++--------- .../src05/v_inst_merge_laundering.sql | 86 +- .../src05/whs_org_laundering.sql | 59 +- 10 files changed, 629 insertions(+), 601 deletions(-) diff --git a/ecs/jskult-batch-daily/.env.example b/ecs/jskult-batch-daily/.env.example index 95aef7fe..7463e0d2 100644 --- a/ecs/jskult-batch-daily/.env.example +++ b/ecs/jskult-batch-daily/.env.example @@ -11,3 +11,9 @@ ULTMARC_BACKUP_FOLDER=ultmarc JSKULT_CONFIG_BUCKET=********************** JSKULT_CONFIG_CALENDAR_FOLDER=jskult/calendar JSKULT_CONFIG_CALENDAR_HOLIDAY_LIST_FILE_NAME=jskult_holiday_list.txt +# 連携データ抽出期間 +SALES_LAUNDERING_EXTRACT_DATE_PERIOD=0 +# 洗替対象テーブル名 +SALES_LAUNDERING_TARGET_TABLE_NAME=src05.sales_lau +# 卸実績洗替で作成するデータの期間(年単位) +SALES_LAUNDERING_TARGET_YEAR_OFFSET=5 \ No newline at end of file diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py index 3862177e..8264f4bd 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py @@ -1,5 +1,7 @@ from src.batch.common.batch_context import BatchContext -from src.batch.laundering import create_inst_merge_for_laundering, emp_chg_inst_laundering, ult_ident_presc_laundering +from src.batch.laundering import ( + create_inst_merge_for_laundering, emp_chg_inst_laundering, + ult_ident_presc_laundering, sales_results_laundering) from src.logging.get_logger import get_logger batch_context = BatchContext.get_instance() @@ -21,7 +23,7 @@ def exec(): # 納入先処方元マスタ洗替 ult_ident_presc_laundering.exec() # 卸販売洗替 - + sales_results_laundering.exec() # # 並列処理のテスト用コード # import time diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 979f1042..4fe4126a 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -2,6 +2,7 @@ from src.db.database import Database from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger from src.batch.batch_functions import logging_sql +from src.system_var import environment logger = get_logger('卸実績洗替') @@ -12,15 +13,15 @@ def exec(): db.connect() logger.debug('処理開始') # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 - _call_sales_lau_delete(db, 'sales_lau', 5) + _call_sales_lau_delete(db) # 卸販売実績テーブル(洗替後)作成 - _call_sales_lau_upsert(db, 'sales_lau', '', '') + _call_sales_lau_upsert(db) # 1:卸組織洗替 - _call_whs_org_laundering(db, 'sales_lau') + _call_whs_org_laundering(db) # 3:HCO施設コードの洗替 - _update_sales_lau_from_vop_hco_merge_v(db, 'sales_lau') + _update_sales_lau_from_vop_hco_merge_v(db) # 4:メルク施設コードの洗替 - _update_mst_inst_laundering(db, 'sales_lau') + _update_mst_inst_laundering(db) logger.debug('処理終了') except Exception as e: raise BatchOperationException(e) @@ -28,35 +29,49 @@ def exec(): db.disconnect() -def _call_sales_lau_delete(db: Database, target_table: str, set_year: int): +def _call_sales_lau_delete(db: Database): # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 logger.info('sales_lau_delete(プロシージャ―) 開始') - db.execute(f'CALL src05.sales_lau_delete("{target_table}", {set_year})') + db.execute(f""" + CALL src05.sales_lau_delete( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}', + {environment.SALES_LAUNDERING_TARGET_YEAR_OFFSET} + ) + """) logger.info('sales_lau_delete(プロシージャ―) 終了') return -def _call_sales_lau_upsert(db: Database, target_table: str, extract_from_date: str, - extract_to_date: str): +def _call_sales_lau_upsert(db: Database): # 卸販売実績テーブル(洗替後)作成 - logger.info('sales_lau_delete(プロシージャ―) 開始') - db.execute(f'CALL src05.sales_lau_delete("{target_table}", "{extract_from_date}", "{extract_to_date}")') - logger.info('sales_lau_delete(プロシージャ―) 終了') + logger.info('sales_lau_upsert(プロシージャ―) 開始') + db.execute(f""" + CALL src05.sales_lau_upsert( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}', + (src05.get_syor_date() - {environment.SALES_LAUNDERING_EXTRACT_DATE_PERIOD}), + src05.get_syor_date() + ) + """) + logger.info('sales_lau_upsert(プロシージャ―) 終了') return -def _call_whs_org_laundering(db: Database, target_table: str): +def _call_whs_org_laundering(db: Database): # 卸組織洗替 logger.info('whs_org_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.whs_org_laundering("{target_table}")') + db.execute(f""" + CALL src05.whs_org_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('whs_org_laundering(プロシージャ―) 終了') return -def _update_sales_lau_from_vop_hco_merge_v(db: Database, target_table: str): +def _update_sales_lau_from_vop_hco_merge_v(db: Database): # HCO施設コードの洗替 if _count_vop_hco_merge_v(db) >= 1: - _call_v_inst_merge_laundering(db, target_table) + _call_v_inst_merge_laundering(db) return logger.info('V施設統合マスタにデータは存在しません') return @@ -81,32 +96,40 @@ def _count_vop_hco_merge_v(db: Database) -> int: return result[0]['cnt'] -def _call_v_inst_merge_laundering(db: Database, target_table: str): - # HCO施設コードの洗替(テーブル更新) +def _call_v_inst_merge_laundering(db: Database): + # HCO施設コードの洗替(プロシージャ―の呼び出し) logger.info('v_inst_merge_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.v_inst_merge_laundering("{target_table}")') + db.execute(f""" + CALL src05.v_inst_merge_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('v_inst_merge_laundering(プロシージャ―) 終了') return -def _update_mst_inst_laundering(db: Database, target_table: str): +def _update_mst_inst_laundering(db: Database): # メルク施設コードの洗替 - _call_hco_to_mdb_laundering(db, target_table) - _update_sales_lau_from_dcf_inst_merge(db, target_table) + _call_hco_to_mdb_laundering(db) + _update_sales_lau_from_dcf_inst_merge(db) -def _call_hco_to_mdb_laundering(db: Database, target_table: str): +def _call_hco_to_mdb_laundering(db: Database): # A:医療機関のデータはMDB変換表からHCO⇒DCFへ変換 logger.info('hco_to_mdb_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.hco_to_mdb_laundering("{target_table}")') + db.execute(f""" + CALL src05.hco_to_mdb_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('hco_to_mdb_laundering(プロシージャ―) 終了') return -def _update_sales_lau_from_dcf_inst_merge(db: Database, target_table: str): +def _update_sales_lau_from_dcf_inst_merge(db: Database): # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする if _count_dcf_inst_merge(db) >= 1: - _call_inst_merge_laundering(db, target_table) + _call_inst_merge_laundering(db) return logger.info('DCF施設統合マスタにデータは存在しません') return @@ -131,9 +154,13 @@ def _count_dcf_inst_merge(db: Database) -> int: return result[0]['cnt'] -def _call_inst_merge_laundering(db: Database, target_table: str): - # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(テーブル更新) +def _call_inst_merge_laundering(db: Database): + # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(プロシージャ―の呼び出し) logger.info('inst_merge_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.inst_merge_laundering("{target_table}")') + db.execute(f""" + CALL src05.inst_merge_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('inst_merge_laundering(プロシージャ―) 終了') return diff --git a/ecs/jskult-batch-daily/src/system_var/environment.py b/ecs/jskult-batch-daily/src/system_var/environment.py index b1730224..a51ab519 100644 --- a/ecs/jskult-batch-daily/src/system_var/environment.py +++ b/ecs/jskult-batch-daily/src/system_var/environment.py @@ -22,3 +22,10 @@ DB_CONNECTION_MAX_RETRY_ATTEMPT = int(os.environ.get('DB_CONNECTION_MAX_RETRY_AT DB_CONNECTION_RETRY_INTERVAL_INIT = int(os.environ.get('DB_CONNECTION_RETRY_INTERVAL', 5)) DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS = int(os.environ.get('DB_CONNECTION_RETRY_MIN_SECONDS', 5)) DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS = int(os.environ.get('DB_CONNECTION_RETRY_MAX_SECONDS', 50)) + +# 連携データ抽出期間 +SALES_LAUNDERING_EXTRACT_DATE_PERIOD = int(os.environ['SALES_LAUNDERING_EXTRACT_DATE_PERIOD']) +# 洗替対象テーブル名 +SALES_LAUNDERING_TARGET_TABLE_NAME = os.environ['SALES_LAUNDERING_TARGET_TABLE_NAME'] +# 卸実績洗替で作成するデータの期間(年単位) +SALES_LAUNDERING_TARGET_YEAR_OFFSET = os.environ['SALES_LAUNDERING_TARGET_YEAR_OFFSET'] diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql index 03402001..b3cbfc6e 100644 --- a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.hco_to_mdb_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.hco_to_mdb_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -23,7 +23,7 @@ BEGIN SET @error_state = NULL, @error_msg = NULL; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_A① 開始'); + '【洗替】4:メルク施設コードの洗替_A① 開始'); TRUNCATE TABLE internal05.hco_cnv_mdb_t; @@ -31,11 +31,11 @@ BEGIN '【洗替】4:メルク施設コードの洗替_A① 終了'); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_A② 開始'); + '【洗替】4:メルク施設コードの洗替_A② 開始'); INSERT INTO internal05.hco_cnv_mdb_t ( - hco_vod_v, + hco_vid_v, mdb_cd, form_inst_name_kana, form_inst_name_kanji, @@ -78,19 +78,23 @@ BEGIN '【洗替】4:メルク施設コードの洗替_A② 終了'); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_A③ 開始'); + '【洗替】4:メルク施設コードの洗替_A③ 開始'); - UPDATE src05.@target_table AS tt, internal05.hco_cnv_mdb_t AS hcmt - SET - tt.inst_cd = hcmt.mdb_cd, - tt.inst_name_kana = hcmt.form_inst_name_kana, - tt.inst_name = hcmt.form_inst_name_kanji, - tt.address = hcmt.inst_addr, - tt.pref_cd = hcmt.prefc_cd - WHERE - tt.v_inst_cd = hcmt.hco_vid_v - AND tt.inst_clas_cd = '1' - ; + SET @update_institution = " + UPDATE $$target_table$$ AS tt, internal05.hco_cnv_mdb_t AS hcmt + SET + tt.inst_cd = hcmt.mdb_cd, + tt.inst_name_kana = hcmt.form_inst_name_kana, + tt.inst_name = hcmt.form_inst_name_kanji, + tt.address = hcmt.inst_addr, + tt.pref_cd = hcmt.prefc_cd + WHERE + tt.v_inst_cd = hcmt.hco_vid_v + AND tt.inst_clas_cd = '1' + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A③ 終了'); diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql index 92ff79a9..6a0642a9 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.inst_merge_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.inst_merge_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -25,28 +25,35 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_B① 開始'); - UPDATE ( - SELECT - dcf_dsf_inst_cd, - dup_opp_cd, - form_inst_name_kanji, - form_inst_name_kana, - inst_addr, - prefc_cd - FROM - internal05.inst_merge_t - ) AS imt, - src05.@target_table AS tt - SET - tt.inst_cd = imt.dup_opp_cd, - tt.inst_name = imt.form_inst_name_kanji, - tt.inst_name_kana = imt.form_inst_name_kana, - tt.address = imt.inst_addr, - tt.prefc_cd = imt.prefc_cd - WHERE - tt.inst_cd = imt.dcf_dsf_inst_cd - ; + SET @update_institution = " + UPDATE ( + SELECT + dcf_dsf_inst_cd, + dup_opp_cd, + form_inst_name_kanji, + form_inst_name_kana, + inst_addr, + prefc_cd + FROM + internal05.inst_merge_t + ) AS imt, + $$target_table$$ AS tt + SET + tt.inst_cd = imt.dup_opp_cd, + tt.inst_name = imt.form_inst_name_kanji, + tt.inst_name_kana = imt.form_inst_name_kana, + tt.address = imt.inst_addr, + tt.pref_cd = imt.prefc_cd, + tt.dwh_upd_dt = SYSDATE() + WHERE + tt.inst_cd = imt.dcf_dsf_inst_cd + AND tt.inst_clas_cd = '1' + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_B① 終了'); + '【洗替】4:メルク施設コードの洗替_B① 終了'); +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql index 652db718..c1610435 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.sales_lau_delete(@target_table VARCHAR(64), @laundering_period_year INT) +CREATE PROCEDURE src05.sales_lau_delete(target_table VARCHAR(255), laundering_period_year INT) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -25,11 +25,15 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始'); - DELETE FROM - src05.@target_table - WHERE - kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL @laundering_period_year YEAR), '%Y%m') - ; + SET @delete_data = " + DELETE FROM + $$target_table$$ + WHERE + kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL ? YEAR), '%Y%m') + "; + SET @delete_data = REPLACE(@delete_data, "$$target_table$$", target_table); + PREPARE delete_data_stmt from @delete_data; + EXECUTE delete_data_stmt USING @laundering_period_year; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 270495e7..ecb2b671 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -1,6 +1,6 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.sales_lau_upsert(@target_table VARCHAR(64), @extract_from_date DATETIME, - @extract_to_date DATETIME) +CREATE PROCEDURE src05.sales_lau_upsert(target_table VARCHAR(255), extract_from_date date, + extract_to_date date) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -8,10 +8,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -24,7 +24,7 @@ BEGIN SET @error_state = NULL, @error_msg = NULL; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成① 開始' + '卸販売実績テーブル(洗替後)作成① 開始' ); TRUNCATE TABLE internal05.bu_prd_name_contrast_t; @@ -36,7 +36,7 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 開始' ); - + INSERT INTO internal05.bu_prd_name_contrast_t ( prd_cd, @@ -46,15 +46,15 @@ BEGIN pp_end_date, update_date, bp_start_date, - bp_end_date - ) + bp_end_date + ) SELECT ppmv.prd_cd, bpnc.bu_cd, ppmv.phm_itm_cd, ppmv.start_date AS pp_start_date, ppmv.end_date AS pp_end_date, - bpnc.update_date AS update_date + bpnc.update_date AS update_date, bpnc.start_date AS bp_start_date, bpnc.end_date AS bp_end_date FROM @@ -63,7 +63,7 @@ BEGIN ON ppmv.phm_itm_cd = bpnc.phm_itm_cd WHERE ppmv.rec_sts_kbn != '9' - ; + ; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 終了' @@ -71,46 +71,47 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成③ 開始' + '卸販売実績テーブル(洗替後)作成③ 開始' ); TRUNCATE TABLE internal05.fcl_mst_v_t; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成③ 終了' - ); + '卸販売実績テーブル(洗替後)作成③ 終了' + ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成④ 開始' + '卸販売実績テーブル(洗替後)作成④ 開始' ); INSERT INTO - internal05.internal05.fcl_mst_v_t + internal05.fcl_mst_v_t SELECT - v_inst_cd, - sub_num, - start_date, - end_date, - closed_dt, - fcl_name, - fcl_kn_name, - fcl_abb_name, - mkr_cd, - jsk_proc_kbn, - fmt_addr, - fmt_kn_addr, - postal_cd, - prft_cd, - prft_name, - city_name, - addr_line_1, - tel_num, - admin_kbn, - fcl_type, - rec_sts_kbn, - ins_dt, - upd_dt, - dwh_upd_dt + fmv1.v_inst_cd, + fmv1.sub_num, + fmv1.start_date, + fmv1.end_date, + fmv1.closed_dt, + fmv1.fcl_name, + fmv1.fcl_kn_name, + fmv1.fcl_abb_name, + fmv1.fcl_abb_kn_name, + fmv1.mkr_cd, + fmv1.jsk_proc_kbn, + fmv1.fmt_addr, + fmv1.fmt_kn_addr, + fmv1.postal_cd, + fmv1.prft_cd, + fmv1.prft_name, + fmv1.city_name, + fmv1.addr_line_1, + fmv1.tel_num, + fmv1.admin_kbn, + fmv1.fcl_type, + fmv1.rec_sts_kbn, + fmv1.ins_dt, + fmv1.upd_dt, + fmv1.dwh_upd_dt FROM src05.fcl_mst_v AS fmv1 INNER JOIN ( @@ -129,334 +130,176 @@ BEGIN ; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成④ 終了' + '卸販売実績テーブル(洗替後)作成④ 終了' ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑤ 開始' - ); + '卸販売実績テーブル(洗替後)作成⑤ 開始' + ); - INSERT INTO - src05.@target_table ( - rec_whs_cd, - rec_whs_sub_cd, - rec_whs_org_cd, - rec_cust_cd, - rec_comm_cd, - rec_tran_kbn, - rev_hsdnymd_wrk, - rev_hsdnymd_srk, - rec_urag_num, - rec_qty, - rec_nonyu_price, - rec_nonyu_amt, - rec_comm_name, - rec_nonyu_fcl_name, - free_item, - rec_nonyu_fcl_addr, - rec_nonyu_fcl_post, - rec_nonyu_fcl_tel, - rec_bef_hsdn_ymd, - rec_bef_slip_num, - rec_ymd, - sale_data_cat, - slip_file_name, - slip_mgt_num, - row_num, - hsdn_ymd, - exec_dt, - v_tran_cd, - tran_kbn_name, - whs_org_cd, - v_whsorg_cd, - whs_org_name, - whs_org_kn, - v_whs_cd, - whs_name, - nonyu_fcl_cd, - inst_name, - inst_name_kana, - address, - comm_cd, - comm_name, - nonyu_qty, - nonyu_price, - nonyu_amt, - shikiri_price, - shikiri_amt, - nhi_price, - nhi_amt, - v_inst_cd, - inst_clas_cd, - bu_cd, - item_cd, - item_name, - item_english_name, - pref_cd, - whspos_err_kbn, - htdnymd_err_kbn, - prd_exis_kbn, - fcl_exis_kbn, - bef_hsdn_ymd, - bef_slip_num, - slip_org_kbn, - kjyo_ym, - tksnbk_kbn, - fcl_exec_kbn, - rec_sts_kbn, - ins_dt, - ins_usr, - dwh_upd_dt - ) - SELECT - s.rec_whs_cd, - s.rec_whs_sub_cd, - s.rec_whs_org_cd, - s.rec_cust_cd, - s.rec_comm_cd, - s.rec_tran_kbn, - s.rev_hsdnymd_wrk, - s.rev_hsdnymd_srk, - s.rec_urag_num, - s.rec_qty, - s.rec_nonyu_price, - s.rec_nonyu_amt, - s.rec_comm_name, - s.rec_nonyu_fcl_name, - s.free_item, - s.rec_nonyu_fcl_addr, - s.rec_nonyu_fcl_post, - s.rec_nonyu_fcl_tel, - s.rec_bef_hsdn_ymd, - s.rec_bef_slip_num, - s.rec_ymd, - s.sale_data_cat, - s.slip_file_name, - s.slip_mgt_num, - s.row_num, - s.hsdn_ymd, - s.exec_dt, - s.v_tran_cd, - s.tran_kbn_name, - s.whs_org_cd, - s.v_whsorg_cd, - s.whs_org_name, - s.whs_org_kn, - s.v_whs_cd, - s.whs_name, - s.nonyu_fcl_cd, - s.v_inst_name, - s.v_inst_kn, - s.v_inst_addr, - s.comm_cd, - s.comm_name, - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_qty * -1) - ELSE - s.nonyu_qty - END AS nonyu_qty, - s.nonyu_price, - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_amt * -1) - ELSE - s.nonyu_amt - END AS nonyu_amt, - s.shikiri_price, - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.shikiri_amt * -1) - ELSE - s.shikiri_amt - END AS shikiri_amt, - s.nhi_price, - CASE - WHEN - (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nhi_amt * -1) - ELSE - s.nhi_amt - END AS nhi_amt, - s.v_inst_cd, - CASE - WHEN - (fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3' - WHEN - fmvt.fcl_type BETWEEN '20' AND '29' THEN '2' - ELSE - '1' - END AS inst_clas_cd, - bpnct.bu_cd, - ppmv.mkr_cd, - ppmv.mkr_inf_1, - ppmv.mkr_inf_2, - CASE - WHEN - s.v_inst_cd LIKE '00%' - THEN - ci.prefc_cd - ELSE - fmvt.prft_cd - END AS prft_cd, - s.whspos_err_kbn, - s.htdnymd_err_kbn, - s.prd_exis_kbn, - s.fcl_exis_kbn, - s.bef_hsdn_ymd, - s.bef_slip_num, - s.slip_org_kbn, - s.kjyo_ym, - s.tksnbk_kbn, - s.fcl_exec_kbn, - s.rec_sts_kbn, - s.ins_dt, - s.ins_usr, - SYSDATE() - FROM ( + SET @insert_sales_laundering = " + INSERT INTO + $$target_table$$ ( + rec_whs_cd, + rec_whs_sub_cd, + rec_whs_org_cd, + rec_cust_cd, + rec_comm_cd, + rec_tran_kbn, + rev_hsdnymd_wrk, + rev_hsdnymd_srk, + rec_urag_num, + rec_qty, + rec_nonyu_price, + rec_nonyu_amt, + rec_comm_name, + rec_nonyu_fcl_name, + free_item, + rec_nonyu_fcl_addr, + rec_nonyu_fcl_post, + rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd, + rec_bef_slip_num, + rec_ymd, + sale_data_cat, + slip_file_name, + slip_mgt_num, + row_num, + hsdn_ymd, + exec_dt, + v_tran_cd, + tran_kbn_name, + whs_org_cd, + v_whsorg_cd, + whs_org_name, + whs_org_kn, + v_whs_cd, + whs_name, + nonyu_fcl_cd, + inst_name, + inst_name_kana, + address, + comm_cd, + comm_name, + nonyu_qty, + nonyu_price, + nonyu_amt, + shikiri_price, + shikiri_amt, + nhi_price, + nhi_amt, + v_inst_cd, + inst_clas_cd, + bu_cd, + item_cd, + item_name, + item_english_name, + pref_cd, + whspos_err_kbn, + htdnymd_err_kbn, + prd_exis_kbn, + fcl_exis_kbn, + bef_hsdn_ymd, + bef_slip_num, + slip_org_kbn, + kjyo_ym, + tksnbk_kbn, + fcl_exec_kbn, + rec_sts_kbn, + ins_dt, + ins_usr, + dwh_upd_dt + ) SELECT - CAST(SYSDATE() AS DATE) AS today - ) AS sub - INNER JOIN src05.sales AS s - ON sub.today = CAST(s.dwh_upd_dt AS DATE) - LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv - ON s.comm_cd = ppmv.prd_cd - AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date - AND ppmv.rec_sts_kbn != '9' - LEFT OUTER JOIN src05.fcl_mst_v_t AS fmvt - ON s.v_inst_cd = fmvt.v_inst_cd - LEFT OUTER JOIN src05.bu_prd_name_contrast_t AS bpnct - ON s.comm_cd = bpnct.prd_cd - AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date - AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date - LEFT OUTER JOIN src05.com_inst AS ci - ON s.v_inst_cd = ci.dcf_dsf_inst_cd - WHERE - (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') - OR ( - s.rec_sts_kbn = '0' - AND s.err_flg20 != 'M' - AND s.v_tran_cd IN (110, 120, 210, 220) - AND ( - ( - s.fcl_exec_kbn NOT IN ('2', '5') - AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) - ) - OR s.fcl_exec_kbn IS NULL - ) - ) - - ON DUPLICATE KEY UPDATE - rec_whs_cd = s.rec_whs_cd, - rec_whs_sub_cd = s.rec_whs_sub_cd, - rec_whs_org_cd = s.rec_whs_org_cd, - rec_cust_cd = s.rec_cust_cd, - rec_comm_cd = s.rec_comm_cd, - rec_tran_kbn = s.rec_tran_kbn, - rev_hsdnymd_wrk = s.rev_hsdnymd_wrk, - rev_hsdnymd_srk = s.rev_hsdnymd_srk, - rec_urag_num = s.rec_urag_num, - rec_qty = s.rec_qty, - rec_nonyu_price = s.rec_nonyu_price, - rec_nonyu_amt = s.rec_nonyu_amt, - rec_comm_name = s.rec_comm_name, - rec_nonyu_fcl_name = s.rec_nonyu_fcl_name, - free_item = s.free_item, - rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr, - rec_nonyu_fcl_post = s.rec_nonyu_fcl_post, - rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel, - rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd, - rec_bef_slip_num = s.rec_bef_slip_num, - rec_ymd = s.rec_ymd, - sale_data_cat = s.sale_data_cat, - slip_file_name = s.slip_file_name, - row_num = s.row_num, - hsdn_ymd = s.hsdn_ymd, - exec_dt = s.exec_dt, - v_tran_cd = s.v_tran_cd, - tran_kbn_name = s.tran_kbn_name, - whs_org_cd = s.whs_org_cd, - v_whsorg_cd = s.v_whsorg_cd, - whs_org_name = s.whs_org_name, - whs_org_kn = s.whs_org_kn, - v_whs_cd = s.v_whs_cd, - whs_name = s.whs_name, - nonyu_fcl_cd = s.nonyu_fcl_cd, - inst_name = s.v_inst_name, - inst_name_kana = s.v_inst_kn, - address = s.v_inst_addr, - comm_cd = s.comm_cd, - comm_name = s.comm_name, - nonyu_qty = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_qty * -1) - ELSE - s.nonyu_qty - END - ), - nonyu_price = s.nonyu_price, - nonyu_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_amt * -1) - ELSE - s.nonyu_amt - END - ), - shikiri_price = s.shikiri_price, - shikiri_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.shikiri_amt * -1) - ELSE - s.shikiri_amt - END - ), - nhi_price = s.nhi_price, - nhi_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nhi_amt * -1) - ELSE - s.nhi_amt - END - ), - v_inst_cd = s.v_inst_cd, - inst_clas_cd = ( - CASE - WHEN - (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') - THEN - '3' - WHEN - fmvt.fcl_type BETWEEN '20' AND '29' - THEN - '2' - ELSE - '1' - END - ), - bu_cd = bpnct.bu_cd, - item_cd = ppmv.mkr_cd, - item_name = ppmv.mkr_inf_1, - item_english_name = ppmv.mkr_inf_2, - pref_cd = ( + s.rec_whs_cd, + s.rec_whs_sub_cd, + s.rec_whs_org_cd, + s.rec_cust_cd, + s.rec_comm_cd, + s.rec_tran_kbn, + s.rev_hsdnymd_wrk, + s.rev_hsdnymd_srk, + s.rec_urag_num, + s.rec_qty, + s.rec_nonyu_price, + s.rec_nonyu_amt, + s.rec_comm_name, + s.rec_nonyu_fcl_name, + s.free_item, + s.rec_nonyu_fcl_addr, + s.rec_nonyu_fcl_post, + s.rec_nonyu_fcl_tel, + s.rec_bef_hsdn_ymd, + s.rec_bef_slip_num, + s.rec_ymd, + s.sale_data_cat, + s.slip_file_name, + s.slip_mgt_num, + s.row_num, + s.hsdn_ymd, + s.exec_dt, + s.v_tran_cd, + s.tran_kbn_name, + s.whs_org_cd, + s.v_whsorg_cd, + s.whs_org_name, + s.whs_org_kn, + s.v_whs_cd, + s.whs_name, + s.nonyu_fcl_cd, + s.v_inst_name, + s.v_inst_kn, + s.v_inst_addr, + s.comm_cd, + s.comm_name, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END AS nonyu_qty, + s.nonyu_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END AS nonyu_amt, + s.shikiri_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END AS shikiri_amt, + s.nhi_price, + CASE + WHEN + (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END AS nhi_amt, + s.v_inst_cd, + CASE + WHEN + (fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' THEN '2' + ELSE + '1' + END AS inst_clas_cd, + bpnct.bu_cd, + ppmv.mkr_cd, + ppmv.mkr_inf_1, + ppmv.mkr_inf_2, CASE WHEN s.v_inst_cd LIKE '00%' @@ -464,105 +307,224 @@ BEGIN ci.prefc_cd ELSE fmvt.prft_cd - END - ), - whspos_err_kbn = s.whspos_err_kbn, - htdnymd_err_kbn = s.htdnymd_err_kbn, - prd_exis_kbn = s.prd_exis_kbn, - fcl_exis_kbn = s.fcl_exis_kbn, - bef_hsdn_ymd = s.bef_hsdn_ymd, - bef_slip_num = s.bef_slip_num, - slip_org_kbn = s.slip_org_kbn, - kjyo_ym = s.kjyo_ym, - tksnbk_kbn = s.tksnbk_kbn, - fcl_exec_kbn = s.fcl_exec_kbn, - rec_sts_kbn = s.rec_sts_kbn, - ins_dt = s.ins_dt, - ins_usr = s.ins_usr, - dwh_upd_dt = SYSDATE() - ; - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑤ 終了' - ); - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑥ 開始' - ); - - UPDATE ( + END AS prft_cd, + s.whspos_err_kbn, + s.htdnymd_err_kbn, + s.prd_exis_kbn, + s.fcl_exis_kbn, + s.bef_hsdn_ymd, + s.bef_slip_num, + s.slip_org_kbn, + s.kjyo_ym, + s.tksnbk_kbn, + s.fcl_exec_kbn, + s.rec_sts_kbn, + s.ins_dt, + s.ins_usr, + SYSDATE() + FROM ( SELECT - fmvt.v_inst_cd AS v_inst_cd, - fmvt.fcl_type AS fcl_type, - fmvt.prft_cd AS prft_cd, - ci.prefc_cd AS prefc_cd - FROM - (SELECT CAST(SYSDATE() AS DATE) AS today) AS sub - INNER JOIN src05.fcl_mst_v_t AS fmvt - ON sub.today = CAST(fmvt.dwh_upd_dt AS DATE) - LEFT OUTER JOIN src05.com_inst AS ci - ON fmvt.v_inst_cd = ci.dcf_dsf_inst_cd - ) AS t3t5, - src05.sales_lau AS sl - SET - sl.inst_clas_cd = ( - CASE - WHEN - (t3t5.fcl_type = 'A1' OR t3t5.fcl_type = 'A0') - THEN - '3' - WHEN - t3t5.fcl_type BETWEEN '20' AND '29' - THEN - '2' - ELSE - '1' - END - ), - sl.pref_cd = ( - CASE - WHEN - sl.v_inst_cd LIKE '00%' - THEN - t3t5.prefc_cd - ELSE - t3t5.prft_cd - END - ) - WHERE sl.v_inst_cd = t3t5.v_inst_cd - ; + CAST(SYSDATE() AS DATE) AS today + ) AS sub + INNER JOIN src05.sales AS s + ON sub.today = CAST(s.dwh_upd_dt AS DATE) + LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv + ON s.comm_cd = ppmv.prd_cd + AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date + AND ppmv.rec_sts_kbn != '9' + LEFT OUTER JOIN internal05.fcl_mst_v_t AS fmvt + ON s.v_inst_cd = fmvt.v_inst_cd + LEFT OUTER JOIN internal05.bu_prd_name_contrast_t AS bpnct + ON s.comm_cd = bpnct.prd_cd + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date + LEFT OUTER JOIN src05.com_inst AS ci + ON s.v_inst_cd = ci.dcf_dsf_inst_cd + WHERE + (? <= s.dwh_upd_dt AND s.dwh_upd_dt <= ?) + AND ( + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + OR ( + s.rec_sts_kbn = '0' + AND s.err_flg20 != 'M' + AND s.v_tran_cd IN (110, 120, 210, 220) + AND ( + ( + s.fcl_exec_kbn NOT IN ('2', '5') + AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) + ) + OR s.fcl_exec_kbn IS NULL + ) + ) + ) + + ON DUPLICATE KEY UPDATE + rec_whs_cd = s.rec_whs_cd, + rec_whs_sub_cd = s.rec_whs_sub_cd, + rec_whs_org_cd = s.rec_whs_org_cd, + rec_cust_cd = s.rec_cust_cd, + rec_comm_cd = s.rec_comm_cd, + rec_tran_kbn = s.rec_tran_kbn, + rev_hsdnymd_wrk = s.rev_hsdnymd_wrk, + rev_hsdnymd_srk = s.rev_hsdnymd_srk, + rec_urag_num = s.rec_urag_num, + rec_qty = s.rec_qty, + rec_nonyu_price = s.rec_nonyu_price, + rec_nonyu_amt = s.rec_nonyu_amt, + rec_comm_name = s.rec_comm_name, + rec_nonyu_fcl_name = s.rec_nonyu_fcl_name, + free_item = s.free_item, + rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr, + rec_nonyu_fcl_post = s.rec_nonyu_fcl_post, + rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd, + rec_bef_slip_num = s.rec_bef_slip_num, + rec_ymd = s.rec_ymd, + sale_data_cat = s.sale_data_cat, + slip_file_name = s.slip_file_name, + row_num = s.row_num, + hsdn_ymd = s.hsdn_ymd, + exec_dt = s.exec_dt, + v_tran_cd = s.v_tran_cd, + tran_kbn_name = s.tran_kbn_name, + whs_org_cd = s.whs_org_cd, + v_whsorg_cd = s.v_whsorg_cd, + whs_org_name = s.whs_org_name, + whs_org_kn = s.whs_org_kn, + v_whs_cd = s.v_whs_cd, + whs_name = s.whs_name, + nonyu_fcl_cd = s.nonyu_fcl_cd, + inst_name = s.v_inst_name, + inst_name_kana = s.v_inst_kn, + address = s.v_inst_addr, + comm_cd = s.comm_cd, + comm_name = s.comm_name, + nonyu_qty = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END + ), + nonyu_price = s.nonyu_price, + nonyu_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END + ), + shikiri_price = s.shikiri_price, + shikiri_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END + ), + nhi_price = s.nhi_price, + nhi_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END + ), + v_inst_cd = s.v_inst_cd, + inst_clas_cd = ( + CASE + WHEN + (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') + THEN + '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' + THEN + '2' + ELSE + '1' + END + ), + bu_cd = bpnct.bu_cd, + item_cd = ppmv.mkr_cd, + item_name = ppmv.mkr_inf_1, + item_english_name = ppmv.mkr_inf_2, + pref_cd = ( + CASE + WHEN + s.v_inst_cd LIKE '00%' + THEN + ci.prefc_cd + ELSE + fmvt.prft_cd + END + ), + whspos_err_kbn = s.whspos_err_kbn, + htdnymd_err_kbn = s.htdnymd_err_kbn, + prd_exis_kbn = s.prd_exis_kbn, + fcl_exis_kbn = s.fcl_exis_kbn, + bef_hsdn_ymd = s.bef_hsdn_ymd, + bef_slip_num = s.bef_slip_num, + slip_org_kbn = s.slip_org_kbn, + kjyo_ym = s.kjyo_ym, + tksnbk_kbn = s.tksnbk_kbn, + fcl_exec_kbn = s.fcl_exec_kbn, + rec_sts_kbn = s.rec_sts_kbn, + ins_dt = s.ins_dt, + ins_usr = s.ins_usr, + dwh_upd_dt = SYSDATE() + "; + SET @insert_sales_laundering = REPLACE(@insert_sales_laundering, "$$target_table$$", target_table); + PREPARE insert_sales_laundering_stmt from @insert_sales_laundering; + EXECUTE insert_sales_laundering_stmt USING @extract_from_date, @extract_to_date; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑥ 終了' + '卸販売実績テーブル(洗替後)作成⑤ 終了' ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑦ 開始' + '卸販売実績テーブル(洗替後)作成⑥ 開始' ); - UPDATE - ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, - src05.sales_lau AS sl, - src05.sales AS s - SET - sl.inst_cd = ( - CASE - WHEN - (s.err_flg20 != 'M' AND sl.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M') - THEN - s.v_inst_cd - ELSE - NULL - END - ) - WHERE - sub.today = CAST(s.dwh_upd_dt AS DATE) - AND sl.slip_mgt_num = s.slip_mgt_num - AND sl.row_num = s.row_num - ; + SET @update_institution_code = " + UPDATE + ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, + $$target_table$$ AS tt, + src05.sales AS s + SET + tt.inst_cd = ( + CASE + WHEN + (s.err_flg20 != 'M' AND tt.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M') + THEN + s.v_inst_cd + ELSE + NULL + END + ) + WHERE + sub.today = CAST(s.dwh_upd_dt AS DATE) + AND tt.slip_mgt_num = s.slip_mgt_num + AND tt.row_num = s.row_num + "; + SET @update_institution_code = REPLACE(@update_institution_code, "$$target_table$$", target_table); + PREPARE update_institution_code_stmt from @update_institution_code; + EXECUTE update_institution_code_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑦ 終了' + '卸販売実績テーブル(洗替後)作成⑥ 終了' ); END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 4ef2075e..35c4a700 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.v_inst_merge_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.v_inst_merge_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -23,46 +23,50 @@ BEGIN SET @error_state = NULL, @error_msg = NULL; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】3:HCO施設コードの洗替① 開始' + '【洗替】3:HCO施設コードの洗替① 開始' ); - UPDATE ( - SELECT - v_inst_cd, - v_inst_cd_merge, - fcl_name, - fcl_kn_name, - fmt_addr, - prft_cd - FROM - internal05.v_inst_merge_t - WHERE - (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' - ) AS vimt, - src05.@target_table AS tt - SET - tt.inst_cd = ( - CASE - WHEN - tt.inst_clas_cd = '1' - THEN - tt.inst_cd - WHEN - (tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3') - THEN - vimt.v_inst_cd_merge - END - ) - tt.v_inst_cd = vimt.v_inst_cd_merge, - tt.inst_name = vimt.fcl_name, - tt.inst_name_kana = vimt.fcl_kn_name, - tt.address = vimt.fmt_addr, - tt.prefc_cd = vimt.prft_cd, - tt.dwh_upd_dt = SYSDATE() - WHERE - tt.v_inst_cd = vimt.v_inst_cd - AND (tt.inst_clas_cd IN ('1', '2', '3')) - ; + SET @update_institution = " + UPDATE ( + SELECT + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd + FROM + internal05.v_inst_merge_t + WHERE + (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' + ) AS vimt, + $$target_table$$ AS tt + SET + tt.inst_cd = ( + CASE + WHEN + tt.inst_clas_cd = '1' + THEN + tt.inst_cd + WHEN + (tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3') + THEN + vimt.v_inst_cd_merge + END + ), + tt.v_inst_cd = vimt.v_inst_cd_merge, + tt.inst_name = vimt.fcl_name, + tt.inst_name_kana = vimt.fcl_kn_name, + tt.address = vimt.fmt_addr, + tt.pref_cd = vimt.prft_cd, + tt.dwh_upd_dt = SYSDATE() + WHERE + tt.v_inst_cd = vimt.v_inst_cd + AND (tt.inst_clas_cd IN ('1', '2', '3')) + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 終了' diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index e3ce53c7..4b5835ee 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.whs_org_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.whs_org_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -29,11 +29,11 @@ BEGIN TRUNCATE TABLE internal05.whs_customer_org_t; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替① 終了' + '【洗替】1.卸組織洗替① 終了' ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替② 開始' + '【洗替】1.卸組織洗替② 開始' ); INSERT INTO @@ -43,7 +43,7 @@ BEGIN customer_cd, whs_org_cd, v_org_cd, - nm_2 + name_2 ) SELECT wcmv.whs_cd, @@ -89,30 +89,35 @@ BEGIN ON ocmv.v_org_cd = mohv2.v_cd_2 WHERE wcmv.rec_sts_kbn != '9' - AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date; - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替② 終了' - ); - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替③ 開始' - ); - - UPDATE - src05.sales_lau AS sl, src05.@target_table AS tt - SET - sl.whs_org_cd = tt.whs_org_cd, - sl.v_whsorg_cd = tt.v_org_cd, - sl.whs_org_name = tt.nm_2 - WHERE - st.whs_cd = tt.whs_cd - AND st.whs_sub_cd = tt.whs_sub_cd - AND st.customer_cd = tt.customer_cd + AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date ; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替③ 終了' + '【洗替】1.卸組織洗替② 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 開始' + ); + + SET @update_organization = " + UPDATE + $$target_table$$ AS tt, internal05.whs_customer_org_t AS wcot + SET + tt.whs_org_cd = wcot.whs_org_cd, + tt.v_whsorg_cd = wcot.v_org_cd, + tt.whs_org_name = wcot.name_2 + WHERE + wcot.whs_cd = tt.rec_whs_cd + AND wcot.whs_sub_cd = tt.rec_whs_sub_cd + AND wcot.customer_cd = tt.rec_cust_cd + "; + SET @update_organization = REPLACE(@update_organization, "$$target_table$$", target_table); + PREPARE update_organization_stmt from @update_organization; + EXECUTE update_organization_stmt; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 終了' ); END \ No newline at end of file From 4e529493634e22f54bff1de26fe10fe6f976909f Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 12 Jun 2023 11:00:25 +0900 Subject: [PATCH 41/90] =?UTF-8?q?fix:=20=E7=94=9F=E7=89=A9=E7=94=B1?= =?UTF-8?q?=E6=9D=A5=E6=A4=9C=E7=B4=A2=E3=81=8C=E3=81=86=E3=81=BE=E3=81=8F?= =?UTF-8?q?=E5=8B=95=E3=81=84=E3=81=A6=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=82=92=E3=81=A4=E3=81=84=E3=81=A7=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 --- ecs/jskult-webapp/src/templates/bioSearchList.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index 5ede3802..0e1ed683 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -290,6 +290,7 @@ showNavigator: true, formatNavigator: '件数: <%= totalNumber %>件 ページ数: <%= totalPage %>', callback: function(data, pagination) { + console.log(pagination.pageNumber) $('#result_data').html(pagination_content(data)) } }) @@ -335,7 +336,6 @@ 'v_tran_cd', 'iko_flg', ]; - const tableRow = documen.sendt.createElement('tr') return datas.map(function (data) { return ` @@ -343,7 +343,6 @@ ` }) - return tableRow } From ce883d8ad7d0c910e88cfe1a35f932ae38e8678e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Wed, 14 Jun 2023 09:41:07 +0900 Subject: [PATCH 42/90] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E5=89=8D=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/.env.example | 1 + ecs/jskult-webapp/src/controller/ultmarc.py | 108 +++++-- .../model/db/ultmarc_doctor_wrkplace_count.py | 9 + .../src/model/db/ultmarc_inst_info.py | 57 ++++ .../src/model/db/ultmarc_inst_trt_course.py | 9 + .../src/model/db/ultmarc_trt_course.py | 2 +- .../src/model/request/ultmarc_inst.py | 6 +- .../view/ultmarc_doctor_info_view_model.py | 29 +- .../model/view/ultmarc_doctor_view_model.py | 15 +- .../view/ultmarc_inst_info_view_model.py | 264 ++++++++++++++++ .../src/model/view/ultmarc_inst_view_model.py | 31 +- .../repositories/ultmarc_doctor_repository.py | 9 +- .../ultmarc_dr_wrkplace_his_repository.py | 30 +- .../ultmarc_dr_wrkplace_repository.py | 24 ++ .../repositories/ultmarc_inst_repository.py | 87 +++++- .../ultmarc_inst_trt_course_repository.py | 31 ++ .../ultmarc_trt_course_repository.py | 6 +- .../src/services/ultmarc_view_service.py | 26 ++ .../src/system_var/environment.py | 3 +- ecs/jskult-webapp/src/templates/docInfo.html | 68 +++-- .../src/templates/docSearch.html | 43 ++- ecs/jskult-webapp/src/templates/instInfo.html | 285 ++++++++++++++++++ .../src/templates/instSearch.html | 62 +++- .../task_settings/web_task_settings.env | 1 + 24 files changed, 1089 insertions(+), 117 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py create mode 100644 ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py create mode 100644 ecs/jskult-webapp/src/templates/instInfo.html diff --git a/ecs/jskult-webapp/.env.example b/ecs/jskult-webapp/.env.example index f330f3d5..c604e43e 100644 --- a/ecs/jskult-webapp/.env.example +++ b/ecs/jskult-webapp/.env.example @@ -22,4 +22,5 @@ AWS_REGION=ap-northeast-1 AUTHORIZE_ENDPOINT=oauth2/authorize TOKEN_ENDPOINT=oauth2/token BIO_SEARCH_RESULT_MAX_COUNT=35000 +SEARCH_RESULT_MAX_COUNT=500 SESSION_EXPIRE_MINUTE=20 diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index f4747bc8..914826c9 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -1,18 +1,15 @@ from typing import Optional -from fastapi import APIRouter, Depends, HTTPException, Request -from fastapi.exceptions import HTTPException -from starlette import status +from fastapi import APIRouter, Depends, Request from src.depends.services import get_service from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel, UltmarcDoctorInfoModel -from src.model.request.ultmarc_inst import UltmarcInstModel +from src.model.request.ultmarc_inst import UltmarcInstModel, UltmarcInstInfoModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.ultmarc_view_service import UltmarcViewService from src.services.session_service import set_session -from src.system_var import constants from src.templates import templates router = APIRouter() @@ -33,9 +30,6 @@ def ultmarc_inst_view( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 検索項目の取得(都道府県・施設区分) ultmarc = ultmarc_service.ultmarc_inst_view(session) ultmarc.is_batch_processing = is_batch_processing @@ -66,10 +60,9 @@ def search_inst( batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない # is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) # 施設データを検索 ultmarc_inst_data = ultmarc_service.search_inst_data(ultmarc_inst_form) @@ -98,6 +91,89 @@ def search_inst( return templates_response +@router.get('/instInfo') +def ultmarc_inst_info_view( + request: Request, + id: str, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + # 施設情報の取得 + ultmarc = ultmarc_service.info_ultmarc_inst_view(id, session) + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + # instId + ultmarc.instId = id + # ページ総数(件数) + ultmarc.postCnt = 1 + # ページ数(表示するページNo) + ultmarc.pageNum = 0 + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'instInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + +@router.post('/instInfo') +def ultmarc_inst_info_search( + request: Request, + ultmarc_inst_form: Optional[UltmarcInstInfoModel] = Depends(UltmarcInstInfoModel.as_form), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)), + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + instId = ultmarc_inst_form.instId.split(',') + + # 施設情報の取得 + ultmarc = ultmarc_service.info_ultmarc_inst_view(instId[ultmarc_inst_form.pageNum], session) + + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + # InstId + ultmarc.instId = ultmarc_inst_form.instId + # ページ総数(件数) + ultmarc.postCnt = len(instId) + # ページ数(表示するページNo) + ultmarc.pageNum = ultmarc_inst_form.pageNum + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'instInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + @router.get('/docSearch') def ultmarc_doctor_view( request: Request, @@ -108,9 +184,6 @@ def ultmarc_doctor_view( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 検索項目の取得(都道府県) ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) ultmarc.is_batch_processing = is_batch_processing @@ -141,10 +214,9 @@ def search_doc( batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない # is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) # 医師データを検索 ultmarc_doctor_data = ultmarc_service.search_doctor_data(ultmarc_doctor_form) @@ -184,9 +256,6 @@ def ultmarc_doctor_info_view( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 医師情報の取得 ultmarc = ultmarc_service.info_ultmarc_doctor_view(id, session) # バッチ起動判定の取得 @@ -227,9 +296,6 @@ def ultmarc_doctor_info_search( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - docId = ultmarc_doctor_form.docId.split(',') # 医師情報の取得 diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py new file mode 100644 index 00000000..4482eab9 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py @@ -0,0 +1,9 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorWrkplaceCountDBModel(BaseDBModel): + count: Optional[int] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py b/ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py new file mode 100644 index 00000000..a72b38a9 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py @@ -0,0 +1,57 @@ +from typing import Optional +from datetime import datetime +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcInstInfoDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + unconf_flg: Optional[str] + dup_opp_cd: Optional[str] + close_start_ym: Optional[str] + close_flg: Optional[str] + delete_sche_reason_cd: Optional[str] + abolish_ymd: Optional[str] + estab_sche_ym: Optional[str] + estab_sche_flg: Optional[str] + form_inst_name_kana: Optional[str] + form_inst_name_kanji: Optional[str] + inst_name_kana: Optional[str] + inst_name_kanji: Optional[str] + manage_cd: Optional[str] + postal_number: Optional[str] + inst_phone_number: Optional[str] + addr_unknown_reason_cd: Optional[str] + phone_number_non_flg: Optional[str] + inst_addr_kana: Optional[str] + inst_addr: Optional[str] + re_exam_cd: Optional[str] + rltd_univ_prnt_cd: Optional[str] + insp_item_micrb: Optional[str] + insp_item_serum: Optional[str] + insp_item_blood: Optional[str] + insp_item_patho: Optional[str] + insp_item_paras: Optional[str] + insp_item_biochem: Optional[str] + insp_item_ri: Optional[str] + prmit_bed_num_gen: Optional[str] + prmit_bed_num_rcup: Optional[str] + prmit_bed_num_mental: Optional[str] + prmit_bed_num_infection: Optional[str] + prmit_bed_num_tuber: Optional[str] + prmit_bed_num_other: Optional[str] + prmit_bed_num_sum: Optional[str] + ward_abolish_flg: Optional[str] + bed_num: Optional[str] + prmit_bed_maint_ymd: Optional[str] + inst_repre_cd: Optional[str] + inst_repre_kana: Optional[str] + inst_repre: Optional[str] + sys_update_date: Optional[datetime] + delete_sche_reason: Optional[str] + inst_div_name: Optional[str] + manage_name: Optional[str] + hp_assrt_name: Optional[str] + parent_name: Optional[str] + dcf_prnt_inst_cd: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py b/ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py new file mode 100644 index 00000000..7c2ef6de --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py @@ -0,0 +1,9 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcInstTrtCourseDBModel(BaseDBModel): + trt_course_name_abb: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py index 23908fce..788d9748 100644 --- a/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py +++ b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py @@ -5,5 +5,5 @@ from src.util.sanitize import sanitize @sanitize -class UltmarcTrtCoursedbmodel(BaseDBModel): +class UltmarcTrtCourseDBModel(BaseDBModel): trt_course_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py index f7919612..8b9a52c6 100644 --- a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py +++ b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py @@ -45,17 +45,17 @@ class UltmarcInstModel(BaseModel): class UltmarcInstInfoModel(BaseModel): - docId: Optional[str] + instId: Optional[str] pageNum: Optional[int] @classmethod def as_form( cls, - docId: str = Form(None), + instId: str = Form(None), pageNum: str = Form(None) ): return cls( - docId=docId, + instId=instId, pageNum=int(pageNum) ) diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py index 993bea14..0af599d4 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py @@ -1,17 +1,13 @@ -import json -from collections import OrderedDict -from datetime import datetime +from datetime import datetime, date from typing import Optional - from pydantic import BaseModel from src.model.db.ultmarc_doctor_info import UltmarcDoctorInfoDBModel -from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.model.db.ultmarc_trt_course import UltmarcTrtCourseDBModel from src.model.db.ultmarc_sosiety import UltmarcSosietyDBModel from src.model.db.ultmarc_specialist_license import UltmarcSpecialistLicenseDBModel from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel from src.model.db.ultmarc_doctor_wrkplace_his import UltmarcDoctorWrkplaceHisDBModel - from src.system_var import environment @@ -19,7 +15,7 @@ class UltmarcDoctorInfoViewModel(BaseModel): subtitle: str = '医師情報' is_batch_processing: Optional[bool] doctor_info_data: Optional[UltmarcDoctorInfoDBModel] - trt_coursed_data: Optional[list[UltmarcTrtCoursedbmodel]] + trt_coursed_data: Optional[list[UltmarcTrtCourseDBModel]] sosiety_data: Optional[list[UltmarcSosietyDBModel]] specialist_license_data: Optional[list[UltmarcSpecialistLicenseDBModel]] doctor_wrkplace_data: Optional[list[UltmarcDoctorWrkplaceDBModel]] @@ -28,11 +24,6 @@ class UltmarcDoctorInfoViewModel(BaseModel): postCnt: Optional[int] pageNum: Optional[int] - def ultmarc_data_json_str(self): - def date_handler(obj): - return obj.isoformat() if hasattr(obj, 'isoformat') else obj - return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) - # 医師コード def is_input_dcf_pcf_dr_cd(self): return self.doctor_info_data.dcf_pcf_dr_cd or '' @@ -86,6 +77,11 @@ class UltmarcDoctorInfoViewModel(BaseModel): def is_input_birthday_fromat(self): return self._format_date_string(self.doctor_info_data.birthday) + def is_input_ymd_fromat(self, ymd): + if ymd is None: + return '' + return ymd.strftime('%Y/%m/%d') + def is_input_trt_course_data_size(self): return len(self.trt_coursed_data) @@ -102,13 +98,16 @@ class UltmarcDoctorInfoViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) >= environment.SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: return '' - date = datetime.strptime(date_string, '%Y%m%d') - return date.strftime('%Y/%m/%d') + date_str = datetime.strptime(date_string, '%Y%m%d') + return date_str.strftime('%Y/%m/%d') def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' + + def is_octor_wrkplace_data_count(self): + return len(self.doctor_wrkplace_data) diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py index ea2afe48..47f55454 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py @@ -7,7 +7,7 @@ from pydantic import BaseModel from src.model.db.prefc_master import PrefcMasterModel from src.model.request.ultmarc_doctor import UltmarcDoctorModel -from src.model.view.bio_disp_model import BisDisplayModel +from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel from src.system_var import environment @@ -15,7 +15,7 @@ class UltmarcDoctorViewModel(BaseModel): subtitle: str = '医師検索一覧' is_batch_processing: Optional[bool] prefc_models: list[PrefcMasterModel] - doctor_data: Optional[list[BisDisplayModel]] = [] + doctor_data: Optional[list[UltmarcDoctorDBModel]] = [] form_data: Optional[UltmarcDoctorModel] def ultmarc_data_json_str(self): @@ -65,6 +65,11 @@ class UltmarcDoctorViewModel(BaseModel): return '' return self._selected_value(self.form_data.prefc_cd, selected_prefc_cd) + def is_input_form_prefc_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.prefc_cd or '' + # 所属部科(漢字) def is_input_blng_sec_name(self): if not self.is_form_submitted(): @@ -99,13 +104,13 @@ class UltmarcDoctorViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) >= environment.SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: return '' - date = datetime.strptime(date_string, '%Y%m%d') - return date.strftime('%Y/%m/%d') + date_str = datetime.strptime(date_string, '%Y%m%d') + return date_str.strftime('%Y/%m/%d') def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py new file mode 100644 index 00000000..6d64e04f --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py @@ -0,0 +1,264 @@ +import json +from collections import OrderedDict +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + +from src.model.db.ultmarc_inst_info import UltmarcInstInfoDBModel +from src.model.db.ultmarc_inst_trt_course import UltmarcInstTrtCourseDBModel + +from src.system_var import environment + + +class UltmarcInstInfoViewModel(BaseModel): + subtitle: str = '施設情報' + is_batch_processing: Optional[bool] + inst_info_data: Optional[UltmarcInstInfoDBModel] + inst_trt_coursed_data: Optional[list[UltmarcInstTrtCourseDBModel]] + doctor_wrkplace_count: Optional[int] + instId: Optional[str] + postCnt: Optional[int] + pageNum: Optional[int] + + # def ultmarc_data_json_str(self): + # def date_handler(obj): + # return obj.isoformat() if hasattr(obj, 'isoformat') else obj + # return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) + + # 施設コード + def is_input_dcf_dsf_inst_cd(self): + return self.inst_info_data.dcf_dsf_inst_cd or '' + + # 未確認 + def is_checked_unconf_flg(self): + return 'checked' if self.inst_info_data.unconf_flg == '1' else '' + + # 施設コード変換先 + def is_input_dup_opp_cd(self): + return self.inst_info_data.dup_opp_cd or '' + + # 休院店開始年月 + def is_input_close_start_ym(self): + return self.inst_info_data.close_start_ym or '' + + # 休院店 + def is_checked_close_flg(self): + return 'checked' if self.inst_info_data.close_flg == '1' else '' + + # 削除予定理由 + def is_input_delete_sche_reason_cd(self): + return self.inst_info_data.delete_sche_reason_cd or '' + + def is_input_delete_sche_reason(self): + return self.inst_info_data.delete_sche_reason or '' + + # 削除日 + def is_input_abolish_ymd(self): + return self.inst_info_data.abolish_ymd or '' + + # 開業予定年月 + def is_input_estab_sche_ym(self): + return self.inst_info_data.estab_sche_ym or '' + + # 開業 + def is_checked_estab_sche_flg(self): + return 'checked' if self.inst_info_data.estab_sche_flg == '1' else '' + + # 正式施設名(カナ) + def is_input_form_inst_name_kana(self): + return self.inst_info_data.form_inst_name_kana or '' + + # 正式施設名(漢字) + def is_input_form_inst_name_kanji(self): + return self.inst_info_data.form_inst_name_kanji or '' + + # 略式施設名(カナ) + def is_input_inst_name_kana(self): + return self.inst_info_data.inst_name_kana or '' + + # 施設区分名 + def is_input_inst_div_name(self): + return self.inst_info_data.inst_div_name or '' + + # 略式施設名(漢字) + def is_input_inst_name_kanji(self): + return self.inst_info_data.inst_name_kanji or '' + + # 経営体 + def is_input_manage_cd(self): + return self.inst_info_data.manage_cd or '' + + def is_input_manage_name(self): + return self.inst_info_data.manage_name or '' + + # 郵便番号 + def is_input_postal_number(self): + return self.inst_info_data.postal_number or '' + + # 住所不明 + def is_checked_addr_unknown_reason_cd(self): + return 'checked' if self.inst_info_data.addr_unknown_reason_cd else '' + + # 施設電話番号 + def is_input_inst_phone_number(self): + return self.inst_info_data.inst_phone_number or '' + + # 開業 + def is_checked_phone_number_non_flg(self): + return 'checked' if self.inst_info_data.phone_number_non_flg == '1' else '' + + # 住所(カナ) + def is_input_inst_addr_kana(self): + return self.inst_info_data.inst_addr_kana or '' + + # 住所(漢字) + def is_input_inst_addr(self): + return self.inst_info_data.inst_addr or '' + + # 病院種別 + def is_input_hp_assrt_name(self): + return self.inst_info_data.hp_assrt_name or '' + + # 再審査区分 + def is_checked_re_exam_cd(self): + return 'checked' if self.inst_info_data.re_exam_cd else '' + + # 関連大学親名 + def is_input_rltd_univ_prnt_cd(self): + return self.inst_info_data.rltd_univ_prnt_cd or '' + + def is_input_parent_name(self): + return self.inst_info_data.parent_name or '' + + # 微生物 + def is_input_insp_item_micrb(self): + return self.inst_info_data.insp_item_micrb or '' + + # 血清 + def is_input_insp_item_serum(self): + return self.inst_info_data.insp_item_serum or '' + + # 血液 + def is_input_insp_item_blood(self): + return self.inst_info_data.insp_item_blood or '' + + # 病理 + def is_input_insp_item_patho(self): + return self.inst_info_data.insp_item_patho or '' + + # 寄生虫 + def is_input_insp_item_paras(self): + return self.inst_info_data.insp_item_paras or '' + + # 生化 + def is_input_insp_item_biochem(self): + return self.inst_info_data.insp_item_biochem or '' + + # RI + def is_input_insp_item_ri(self): + return self.inst_info_data.insp_item_ri or '' + + # 特務医務室 + def is_input_dcf_prnt_inst_cd(self): + return self.inst_info_data.dcf_prnt_inst_cd or '' + + # 一般 + def is_input_prmit_bed_num_gen(self): + return self.inst_info_data.prmit_bed_num_gen or '' + + # 療養 + def is_input_prmit_bed_num_rcup(self): + return self.inst_info_data.prmit_bed_num_rcup or '' + + # 精神 + def is_input_prmit_bed_num_mental(self): + return self.inst_info_data.prmit_bed_num_mental or '' + + # 感染症 + def is_input_prmit_bed_num_infection(self): + return self.inst_info_data.prmit_bed_num_infection or '' + + # 結核 + def is_input_prmit_bed_num_tuber(self): + return self.inst_info_data.prmit_bed_num_tuber or '' + + # その他 + def is_input_prmit_bed_num_other(self): + return self.inst_info_data.prmit_bed_num_other or '' + + # 合計 + def is_input_prmit_bed_num_sum(self): + return self.inst_info_data.prmit_bed_num_sum or '' + + # 病棟閉鎖   + def is_checked_ward_abolish_flg(self): + return 'checked' if self.inst_info_data.ward_abolish_flg == '1' else '' + + # 一部病棟閉鎖 + def is_checked_ward_abolish_flg_part(self): + return 'checked' if self.inst_info_data.ward_abolish_flg == '2' else '' + + # 病床数(定員) + def is_input_bed_num(self): + return self.inst_info_data.bed_num or '' + + # メンテ年月日 + def is_input_prmit_bed_maint_ymd(self): + return self.inst_info_data.prmit_bed_maint_ymd or '' + + # 代表者個人コード + def is_input_inst_repre_cd(self): + return self.inst_info_data.inst_repre_cd or '' + + # 施設代表者(カナ) + def is_input_inst_repre_kana(self): + return self.inst_info_data.inst_repre_kana or '' + + # 施設代表者(漢字) + def is_input_inst_repre(self): + return self.inst_info_data.inst_repre or '' + + # 修正年月日 + def is_input_sys_update_date(self): + sys_update_date = str(self.inst_info_data.sys_update_date) + return sys_update_date[:10] + + # 勤務医師ボタン表示 + def is_disabled_doctor_wrkplace(self): + return 'disabled' if self.doctor_wrkplace_count == 0 else '' + + # 現在のページ(表示用) + def is_pageNum_view(self): + return self.pageNum + 1 + + # 前ボタン + def is_disabled_prev(self): + return 'disabled' if self.pageNum == 0 else '' + + # 次ボタン + def is_disabled_next(self): + if self.pageNum == self.postCnt - 1: + return 'disabled' + return '' + + # 診療科目のデータ件数 + def is_input_inst_trt_course_data_size(self): + if self.inst_trt_coursed_data is None: + return 0 + return len(self.inst_trt_coursed_data) + + def is_data_string_empty_fromat(self, data_string): + return data_string or '' + + def disabled_button(self): + return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' + + def is_form_submitted(self): + return self.form_data is not None + + def is_data_empty(self): + return len(self.doctor_data) == 0 + + def is_data_overflow_max_length(self): + return len(self.doctor_data) >= environment.SEARCH_RESULT_MAX_COUNT diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py index a0b5107c..e728945a 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py @@ -7,7 +7,7 @@ from pydantic import BaseModel from src.model.db.prefc_master import PrefcMasterModel from src.model.db.inst_div_master import InstDivMasterModel from src.model.request.ultmarc_inst import UltmarcInstModel -from src.model.view.bio_disp_model import BisDisplayModel +from src.model.db.ultmarc_inst import UltmarcInstDBModel from src.system_var import environment @@ -16,7 +16,7 @@ class UltmarcInstViewModel(BaseModel): is_batch_processing: Optional[bool] prefc_models: list[PrefcMasterModel] inst_div_models: list[InstDivMasterModel] - inst_data: Optional[list[BisDisplayModel]] = [] + inst_data: Optional[list[UltmarcInstDBModel]] = [] form_data: Optional[UltmarcInstModel] def ultmarc_data_json_str(self): @@ -25,7 +25,7 @@ class UltmarcInstViewModel(BaseModel): return json.dumps([model.dict() for model in self.inst_data], ensure_ascii=False, default=date_handler) # ULT施設コード - def is_input_dcf_dsf_inst_cdd(self): + def is_input_dcf_dsf_inst_cd(self): if not self.is_form_submitted(): return '' return self.form_data.dcf_dsf_inst_cd or '' @@ -36,6 +36,11 @@ class UltmarcInstViewModel(BaseModel): return '' return self._selected_value(self.form_data.inst_div_cd, selected_inst_div_cd) + def is_input_form_inst_div_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.inst_div_cd or '' + # ULT施設名(漢字) def is_input_form_inst_name_kanji(self): if not self.is_form_submitted(): @@ -63,9 +68,14 @@ class UltmarcInstViewModel(BaseModel): # 削除施設表示 def is_checked_delFlg(self): if not self.is_form_submitted(): - return '' + return 'checked' return self._checked_value(self.form_data.delFlg) + def is_input_delFlg(self): + if not self.is_form_submitted(): + return '' + return self.form_data.delFlg or '' + # ULT施設住所 def is_input_inst_addr(self): if not self.is_form_submitted(): @@ -78,6 +88,11 @@ class UltmarcInstViewModel(BaseModel): return '' return self._selected_value(self.form_data.prefc_cd, selected_prefc_cd) + def is_input_form_prefc_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.prefc_cd or '' + def disabled_button(self): return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' @@ -85,16 +100,16 @@ class UltmarcInstViewModel(BaseModel): return self.form_data is not None def is_data_empty(self): - return len(self.doctor_data) == 0 + return len(self.inst_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.inst_data) >= environment.SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: return '' - date = datetime.strptime(date_string, '%Y%m%d') - return date.strftime('%Y/%m/%d') + date_str = datetime.strptime(date_string, '%Y%m%d') + return date_str.strftime('%Y/%m/%d') def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index 60f1543d..5860148c 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -34,7 +34,7 @@ class UltmarcDoctorRepository(BaseRepository): LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd WHERE {where_clause} - GROUP BY com_dr.dcf_pcf_dr_cd + GROUP BY com_dr.dcf_pcf_dr_cd, com_inst.dcf_dsf_inst_cd, com_blng_sec.blng_sec_cd ORDER BY com_dr.dcf_pcf_dr_cd, com_dr_wrkplace.dcf_dsf_inst_cd, @@ -127,6 +127,13 @@ class UltmarcDoctorRepository(BaseRepository): parameter.grad_y = f'%{parameter.grad_y}%' where_clauses.append(SQLCondition('grad_y', condition.LIKE, 'grad_y')) + # 検索条件が入力されていない場合 + # if not where_clauses: + # where_clauses.append(SQLCondition( + # '', '', '(LENGTH(com_inst.abolish_ymd) = 0 OR com_inst.abolish_ymd IS NULL)', literal=True)) + # where_clauses.append(SQLCondition( + # '', '', '(LENGTH(com_dr.abolish_ymd) = 0 OR com_dr.abolish_ymd IS NULL)', literal=True)) + where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py index 14f0de45..67ab328d 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py @@ -5,21 +5,23 @@ from src.repositories.base_repository import BaseRepository class UltmarcDoctorWrkplaceHisRepository(BaseRepository): FETCH_SQL = """\ - SELECT - com_inst.dcf_dsf_inst_cd, - com_inst.inst_name_kanji, - com_blng_sec.blng_sec_name, - univ_post.form_post_name AS univ_post_name, - post.form_post_name AS post_name, - com_dr_wrkplace.aply_start_ymd - FROM src05.com_dr - LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd - LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd - LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd - LEFT JOIN src05.com_post as univ_post ON com_dr_wrkplace.identity_cd = univ_post.post_cd - LEFT JOIN src05.com_post as post ON com_dr_wrkplace.post_cd = post.post_cd + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.inst_name_kanji, + com_blng_sec.blng_sec_name, + univ_post.form_post_name as univ_post_name, + post.form_post_name as post_name, + com_dr_wrkplace_his.aply_start_ymd, + com_dr_wrkplace_his.aply_end_ymd + FROM com_dr + LEFT JOIN com_dr_wrkplace_his ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace_his.dcf_pcf_dr_cd + LEFT JOIN com_inst ON com_dr_wrkplace_his.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN com_blng_sec ON com_dr_wrkplace_his.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN com_post as univ_post ON com_dr_wrkplace_his.identity_cd = univ_post.post_cd + LEFT JOIN com_post as post ON com_dr_wrkplace_his.post_cd = post.post_cd WHERE com_dr.dcf_pcf_dr_cd = :id - ORDER BY com_dr_wrkplace.aply_start_ymd DESC + ORDER BY com_dr_wrkplace_his.aply_end_ymd DESC, + com_dr_wrkplace_his.aply_start_ymd DESC """ def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceHisDBModel]: diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py index fd1295d7..cc6a9dc3 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py @@ -1,4 +1,6 @@ from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel +from src.model.db.ultmarc_doctor_wrkplace_count import UltmarcDoctorWrkplaceCountDBModel + from src.repositories.base_repository import BaseRepository @@ -37,3 +39,25 @@ class UltmarcDoctorWrkplaceRepository(BaseRepository): raise e finally: self._database.disconnect() + + FETCH_COUNT_SQL = """\ + SELECT COUNT(*) AS count + FROM src05.com_dr_wrkplace + WHERE dcf_dsf_inst_cd = :id + """ + + def fetch_count(self, id) -> UltmarcDoctorWrkplaceCountDBModel: + try: + self._database.connect() + query = self.FETCH_COUNT_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorWrkplaceCountDBModel(**r) for r in result] + if len(models) == 0: + return 0 + return models[0].count + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py index 438c429d..2cf08f77 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py @@ -1,6 +1,7 @@ from src.db import sql_condition as condition from src.db.sql_condition import SQLCondition from src.model.db.ultmarc_inst import UltmarcInstDBModel +from src.model.db.ultmarc_inst_info import UltmarcInstInfoDBModel from src.model.request.ultmarc_inst import UltmarcInstModel from src.repositories.base_repository import BaseRepository from src.util.string_util import is_not_empty @@ -95,14 +96,94 @@ class UltmarcInstRepository(BaseRepository): where_clauses.append(SQLCondition('inst_addr', condition.LIKE, 'inst_addr')) # 削除表示フラグ - if is_not_empty(parameter.delFlg): + if is_not_empty(parameter.delFlg) == False: # 論理和での検索 where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) # 検索条件が入力されていない場合 - if not where_clauses: - where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) + # if not where_clauses: + # where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str + + FETCH_ONE_SQL = """\ + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.unconf_flg, + com_inst.dup_opp_cd, + com_inst.close_start_ym, + com_inst.close_flg, + com_inst.delete_sche_reason_cd, + com_inst.abolish_ymd, + com_inst.estab_sche_ym, + com_inst.estab_sche_flg, + com_inst.form_inst_name_kana, + com_inst.form_inst_name_kanji, + com_inst.inst_name_kana, + com_inst.inst_name_kanji, + com_inst.manage_cd, + com_inst.postal_number, + com_inst.inst_phone_number, + com_inst.addr_unknown_reason_cd, + com_inst.phone_number_non_flg, + com_inst.inst_addr_kana, + com_inst.inst_addr, + com_inst.re_exam_cd, + com_inst.rltd_univ_prnt_cd, + com_inst.insp_item_micrb, + com_inst.insp_item_serum, + com_inst.insp_item_blood, + com_inst.insp_item_patho, + com_inst.insp_item_paras, + com_inst.insp_item_biochem, + com_inst.insp_item_ri, + com_inst.prmit_bed_num_gen, + com_inst.prmit_bed_num_rcup, + com_inst.prmit_bed_num_mental, + com_inst.prmit_bed_num_infection, + com_inst.prmit_bed_num_tuber, + com_inst.prmit_bed_num_other, + com_inst.prmit_bed_num_sum, + com_inst.ward_abolish_flg, + com_inst.bed_num, + com_inst.prmit_bed_maint_ymd, + com_inst.inst_repre_cd, + com_inst.inst_repre_kana, + com_inst.inst_repre, + com_inst.sys_update_date, + com_inst_delete_sche_reason.delete_sche_reason, + com_inst_div.inst_div_name, + com_manage.manage_name, + com_hp_assrt.hp_assrt_name, + parent_inst.form_inst_name_kanji as parent_name, + com_spcare_med_office_dat.dcf_prnt_inst_cd + FROM src05.com_inst + LEFT JOIN src05.com_inst_div ON com_inst.inst_div_cd = com_inst_div.inst_div_cd + LEFT JOIN src05.com_inst_delete_sche_reason ON com_inst.delete_sche_reason_cd = com_inst_delete_sche_reason.delete_sche_reason_cd + LEFT JOIN src05.com_manage ON com_inst.manage_cd = com_manage.manage_cd + LEFT JOIN src05.com_inst_addr_unknown_reason ON com_inst.addr_unknown_reason_cd = com_inst_addr_unknown_reason.addr_unknown_reason_cd + LEFT JOIN src05.com_hp_assrt ON com_hp_assrt.hp_assrt_cd = com_inst.hp_assrt_cd + LEFT JOIN src05.com_re_exam ON com_inst.re_exam_cd = com_re_exam.re_exam_cd + LEFT JOIN src05.com_spcare_med_office_dat ON com_inst.dcf_dsf_inst_cd = com_spcare_med_office_dat.dcf_chld_inst_cd + LEFT JOIN src05.com_inst as parent_inst ON com_inst.rltd_univ_prnt_cd = parent_inst.dcf_dsf_inst_cd + WHERE com_inst.dcf_dsf_inst_cd = :id + \ + """ + + def fetch_one(self, id) -> UltmarcInstInfoDBModel: + try: + self._database.connect() + query = self.FETCH_ONE_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcInstInfoDBModel(**r) for r in result] + if len(models) == 0: + return None + return models[0] + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py new file mode 100644 index 00000000..eaee391a --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py @@ -0,0 +1,31 @@ +from src.model.db.ultmarc_inst_trt_course import UltmarcInstTrtCourseDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcInstTrtCourseRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT trt_course_name_abb + FROM src05.com_inst + JOIN src05.com_inst_trt_course ON com_inst.dcf_dsf_inst_cd = com_inst_trt_course.dcf_dsf_inst_cd + LEFT JOIN src05.com_trt_course ON com_inst_trt_course.trt_course_cd = com_trt_course.trt_course_cd + WHERE com_inst.dcf_dsf_inst_cd = :id + ORDER BY com_trt_course.trt_course_cd + """ + + def fetch_many(self, id) -> list[UltmarcInstTrtCourseDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + + models = [UltmarcInstTrtCourseDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py index f50fc02a..c76032a3 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py @@ -1,4 +1,4 @@ -from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.model.db.ultmarc_trt_course import UltmarcTrtCourseDBModel from src.repositories.base_repository import BaseRepository @@ -13,13 +13,13 @@ class UltmarcTrtCourseRepository(BaseRepository): ORDER BY com_trt_course.trt_course_cd """ - def fetch_many(self, id) -> list[UltmarcTrtCoursedbmodel]: + def fetch_many(self, id) -> list[UltmarcTrtCourseDBModel]: try: self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) - models = [UltmarcTrtCoursedbmodel(**r) for r in result] + models = [UltmarcTrtCourseDBModel(**r) for r in result] if len(models) == 0: return None return models diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 65cc57a0..d8103c93 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -11,6 +11,7 @@ from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.request.ultmarc_inst import UltmarcInstModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel from src.model.view.ultmarc_inst_view_model import UltmarcInstViewModel +from src.model.view.ultmarc_inst_info_view_model import UltmarcInstInfoViewModel from src.model.view.ultmarc_doctor_info_view_model import UltmarcDoctorInfoViewModel from src.repositories.base_repository import BaseRepository from src.repositories.prefc_master_repository import PrefcMasterRepository @@ -18,6 +19,7 @@ from src.repositories.inst_master_repository import InstDivMasterRepository from src.repositories.ultmarc_inst_repository import UltmarcInstRepository from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository from src.repositories.ultmarc_trt_course_repository import UltmarcTrtCourseRepository +from src.repositories.ultmarc_inst_trt_course_repository import UltmarcInstTrtCourseRepository from src.repositories.ultmarc_sosiety_repository import UltmarcSosietyRepository from src.repositories.ultmarc_dr_wrkplace_repository import UltmarcDoctorWrkplaceRepository from src.repositories.ultmarc_dr_wrkplace_his_repository import UltmarcDoctorWrkplaceHisRepository @@ -33,6 +35,7 @@ class UltmarcViewService(BaseService): 'inst_div_repository': InstDivMasterRepository, 'ultmarc_inst_repository': UltmarcInstRepository, 'ultmarc_trt_course_repository': UltmarcTrtCourseRepository, + 'ultmarc_inst_trt_course_repository': UltmarcInstTrtCourseRepository, 'ultmarc_sosiety_repository': UltmarcSosietyRepository, 'ultmarc_doctor_wrkplace_repository': UltmarcDoctorWrkplaceRepository, 'ultmarc_doctor_wrkplace_his_repository': UltmarcDoctorWrkplaceHisRepository, @@ -44,6 +47,7 @@ class UltmarcViewService(BaseService): inst_div_repository: InstDivMasterRepository ultmarc_inst_repository: UltmarcInstRepository ultmarc_trt_course_repository: UltmarcTrtCourseRepository + ultmarc_inst_trt_course_repository: UltmarcInstTrtCourseRepository ultmarc_sosiety_repository: UltmarcSosietyRepository ultmarc_doctor_wrkplace_repository: UltmarcDoctorWrkplaceRepository ultmarc_doctor_wrkplace_his_repository: UltmarcDoctorWrkplaceHisRepository @@ -56,6 +60,7 @@ class UltmarcViewService(BaseService): self.inst_div_repository = repositories['inst_div_repository'] self.ultmarc_inst_repository = repositories['ultmarc_inst_repository'] self.ultmarc_trt_course_repository = repositories['ultmarc_trt_course_repository'] + self.ultmarc_inst_trt_course_repository = repositories['ultmarc_inst_trt_course_repository'] self.ultmarc_sosiety_repository = repositories['ultmarc_sosiety_repository'] self.ultmarc_doctor_wrkplace_repository = repositories['ultmarc_doctor_wrkplace_repository'] self.ultmarc_doctor_wrkplace_his_repository = repositories['ultmarc_doctor_wrkplace_his_repository'] @@ -93,6 +98,27 @@ class UltmarcViewService(BaseService): ultmarc_inst_data = self.ultmarc_inst_repository.fetch_many(parameter=search_params) return ultmarc_inst_data + def info_ultmarc_inst_view( + self, + id, + session: UserSession + ) -> UltmarcInstInfoViewModel: + + # 施設情報画面の表示データ取得 + # 施設情報を取得 + inst_info = self.ultmarc_inst_repository.fetch_one(id) + # 診療科目情報を取得 + inst_trt_course = self.ultmarc_inst_trt_course_repository.fetch_many(id) + # 医師件数を取得 + doctor_count = self.ultmarc_doctor_wrkplace_repository.fetch_count(id) + + ultmarc = UltmarcInstInfoViewModel( + inst_info_data=inst_info, + inst_trt_coursed_data=inst_trt_course, + doctor_wrkplace_count=doctor_count + ) + return ultmarc + def search_doctor_data(self, search_params: UltmarcDoctorModel): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) diff --git a/ecs/jskult-webapp/src/system_var/environment.py b/ecs/jskult-webapp/src/system_var/environment.py index aed9916c..cd54d35d 100644 --- a/ecs/jskult-webapp/src/system_var/environment.py +++ b/ecs/jskult-webapp/src/system_var/environment.py @@ -19,4 +19,5 @@ DB_PASSWORD = os.environ['DB_PASSWORD'] DB_SCHEMA = os.environ['DB_SCHEMA'] BIO_SEARCH_RESULT_MAX_COUNT = int(os.environ['BIO_SEARCH_RESULT_MAX_COUNT']) -SESSION_EXPIRE_MINUTE=int(os.environ['SESSION_EXPIRE_MINUTE']) \ No newline at end of file +SEARCH_RESULT_MAX_COUNT = int(os.environ['SEARCH_RESULT_MAX_COUNT']) +SESSION_EXPIRE_MINUTE = int(os.environ['SESSION_EXPIRE_MINUTE']) diff --git a/ecs/jskult-webapp/src/templates/docInfo.html b/ecs/jskult-webapp/src/templates/docInfo.html index 1202faee..7e807303 100644 --- a/ecs/jskult-webapp/src/templates/docInfo.html +++ b/ecs/jskult-webapp/src/templates/docInfo.html @@ -33,7 +33,7 @@ - + - + + @@ -175,35 +188,44 @@ + - {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} - {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} - - - - - - - - - - {% endif %} - {% endfor %} - + {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} + {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} + + + + + + + + + + {% endif %} + {% endfor %} + {% for doctor_wrkplace_his_data in ultmarc.doctor_wrkplace_his_data %} {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd) != ''%} - - + + - - + + {% endif %} {% endfor %} - +

医師情報

{{ultmarc.subtitle}}

{% if ultmarc.is_batch_processing %}
日次バッチ処理中のため、データが正しく表示されない可能性があります
@@ -50,16 +50,29 @@
- + {{ultmarc.is_pageNum_view()}}/{{ultmarc.postCnt}} - +
終了年月日
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.aply_start_ymd)}}9999/99/99
+ {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_data.aply_start_ymd)}}9999/99/99
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}}
+ {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}} + {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.inst_name_kanji)}} {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.blng_sec_name)}} {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.univ_post_name)}} {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_end_ymd)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_his_data.aply_end_ymd)}}
diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index c3168212..403b7f33 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -22,7 +22,7 @@ - +

医師検索一覧

{{ultmarc.subtitle}}

{% if ultmarc.is_batch_processing %}
日次バッチ処理中のため、データが正しく表示されない可能性があります
@@ -140,7 +140,17 @@
- + {% if ultmarc.is_form_submitted() and ultmarc.is_data_overflow_max_length() %} +
+ 検索結果が最大件数を超えました。検索条件を見直しして下さい。 +
+ {% endif %} + {% if ultmarc.is_form_submitted() and ultmarc.is_data_empty() %} +
+ 対象のデータが存在しません。 +
+ {% endif %} + @@ -156,8 +166,24 @@ const searchResultData = JSON.parse(searchResultString) if (searchResultData.length == 0) { return - } - $(".pagination").pagination({ + }else if(searchResultData.length > 500){ + return + } + // 検索条件をセッションに入れる + sessionStorage.clear(); + sessionStorage.setItem('ctrl_dcf_pcf_dr_cd','{{ultmarc.is_input_dcf_pcf_dr_cd()}}'); + sessionStorage.setItem('ctrl_dr_name','{{ultmarc.is_input_dr_name()}}'); + sessionStorage.setItem('ctrl_dr_name_kana','{{ultmarc.is_input_dr_name_kana()}}'); + sessionStorage.setItem('ctrl_dcf_dsf_inst_cd','{{ultmarc.is_input_dcf_dsf_inst_cd()}}'); + sessionStorage.setItem('ctrl_form_inst_name_kanji','{{ultmarc.is_input_form_inst_name_kanji()}}'); + sessionStorage.setItem('ctrl_form_inst_name_kana','{{ultmarc.is_input_form_inst_name_kana()}}'); + sessionStorage.setItem('ctrl_prefc_cd','{{ultmarc.is_input_form_prefc_cd()}}'); + sessionStorage.setItem('ctrl_blng_sec_name','{{ultmarc.is_input_blng_sec_name()}}'); + sessionStorage.setItem('ctrl_trt_course_name','{{ultmarc.is_input_trt_course_name()}}'); + sessionStorage.setItem('ctrl_alma','{{ultmarc.is_input_alma()}}'); + sessionStorage.setItem('ctrl_grad_y','{{ultmarc.is_input_grad_y()}}'); + + $(".pagination").pagination({ dataSource: function(done) { done(searchResultData) }, @@ -175,6 +201,11 @@ }) }); + function OnLinkClick(){ + sessionStorage.clear(); + return true; + } + function pagination_content(datas) { const display_keys = [ 'dcf_pcf_dr_cd', @@ -192,7 +223,7 @@ if(key=='dcf_pcf_dr_cd') inner_content = `${data['dcf_pcf_dr_cd'] || ''}`; if(key=='dcf_dsf_inst_cd') - inner_content = `${data['form_inst_name_kanji'] || ''}`; + inner_content = `${data['form_inst_name_kanji'] || ''}`; return `${inner_content || ''}` }); return ` @@ -208,7 +239,7 @@ }) } - // 配列パラメータを加工にする + 配列パラメータを加工にする function CheckBoxListPocessing() { var vals = []; // 配列を定義 diff --git a/ecs/jskult-webapp/src/templates/instInfo.html b/ecs/jskult-webapp/src/templates/instInfo.html new file mode 100644 index 00000000..2ce03d2b --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instInfo.html @@ -0,0 +1,285 @@ + + + + {% with subtitle = ultmarc.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + + + + +

+ {{ultmarc.subtitle}} +

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + {{ultmarc.is_pageNum_view()}}/{{ultmarc.postCnt}} + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
施設コード + + 未確認 + 施設コード変換先 + + 休院店開始年月 + + 休院店 +
削除予定理由削除日 + + 開業予定年月 + + 開業 +
正式施設名(カナ)
正式施設名(漢字)
略式施設名(カナ)施設区分名
略式施設名(漢字)経営体 + + +
郵便番号 + + 住所不明 + 施設電話番号 + + 電話なし +
住所(カナ)
住所(漢字)
+ +
+ + + + + + + + + + + + + + + + + + + + +
病院種別再審査区分関連大学親名 + + +
診療科目 + {% if ultmarc.inst_trt_coursed_data != None %} + {% for inst_trt_course_data in ultmarc.inst_trt_coursed_data %} + + {% endfor %} + {% endif %} + {% for i in range(60-ultmarc.is_input_inst_trt_course_data_size()) %} + + {% endfor %} + +
検査工程 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
特務医務室許可病床数 + + + + + + + + + + + + + + + + + + + + + +
一般療養精神感染症結核その他合計
+
病棟閉鎖  一部病棟閉鎖
病床数(定員)メンテ年月日
+ + + + + + + + + + + + + + + + + + + + +
代表者個人コード
施設代表者(カナ)
施設代表者(漢字)
修正年月日
+ + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html index 92db85ae..15988f05 100644 --- a/ecs/jskult-webapp/src/templates/instSearch.html +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -7,7 +7,7 @@ \ No newline at end of file diff --git a/s3/config/jskult/task_settings/web_task_settings.env b/s3/config/jskult/task_settings/web_task_settings.env index 9cd4ecf8..b10c9342 100644 --- a/s3/config/jskult/task_settings/web_task_settings.env +++ b/s3/config/jskult/task_settings/web_task_settings.env @@ -4,3 +4,4 @@ AUTHORIZE_ENDPOINT=oauth2/authorize TOKEN_ENDPOINT=oauth2/token BIO_SEARCH_RESULT_MAX_COUNT=35000 SESSION_EXPIRE_MINUTE=20 +SEARCH_RESULT_MAX_COUNT=500 From 0421aa8ccd44f1bb4463c7c08a2ae07cb181da24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 14 Jun 2023 11:56:44 +0900 Subject: [PATCH 43/90] =?UTF-8?q?feat:=20=E4=BB=95=E6=A7=98=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrate_dcf_inst_merge.py | 170 ++++++++++++------ 1 file changed, 113 insertions(+), 57 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index e325d7a4..2e4f9ca7 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -55,76 +55,128 @@ def _set_disabled_dct_inst_merge(db: Database): _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], '戻し') +def _select_ult_ident_presc_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: + # 納入先処方元マスタから、DCF施設コードに対応した領域コードの取得 + try: + sql = """ + SELECT + ta_cd + FROM + src05.ult_ident_presc + WHERE + presc_cd = :dcf_inst_cd + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd} + ult_ident_presc_ta_cd_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('納入先処方元マスタから領域コードの取得に成功') + except Exception as e: + logger.debug('納入先処方元マスタから領域コードの取得に失敗') + raise e + + return ult_ident_presc_ta_cd_records + + def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): # 納入先処方元マスタの追加 logger.info('納入先処方元マスタの登録 開始') for data_inst_cnt, enabled_merge_record in enumerate(enabled_dst_inst_merge_records, start=1): tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) + ult_ident_presc_ta_cd_records = _select_ult_ident_presc_ta_cd(db, enabled_merge_record['dcf_inst_cd']) + for ult_ident_presc_ta_cd_record in ult_ident_presc_ta_cd_records: + ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], + enabled_merge_record['dup_opp_cd'], + ult_ident_presc_ta_cd_record['ta_cd']) + for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): + logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') + # 処方元コード=重複時相手先コードが発生した場合 + if ult_ident_presc_row['opp_count'] > 0: + continue - ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], - enabled_merge_record['dup_opp_cd']) - for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): - logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') - # 処方元コード=重複時相手先コードが発生した場合 - if ult_ident_presc_row['opp_count'] > 0: - break + start_date = _str_to_date_time(ult_ident_presc_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day + set_start_date = _date_time_to_str(set_start_date) + is_exists_duplicate_key = False + if _count_duplicate_ult_ident_presc(db, set_start_date, ult_ident_presc_row) > 0: + _delete_ult_ident_presc(db, set_start_date, ult_ident_presc_row, + '納入先処方元マスタの重複予定データの削除') + is_exists_duplicate_key = True + else: + logger.info('納入先処方元マスタの重複予定データなし') + _insert_ult_ident_presc(db, set_start_date, enabled_merge_record['dup_opp_cd'], ult_ident_presc_row) - start_date = _str_to_date_time(ult_ident_presc_row['start_date']) - set_start_date = start_date \ - if start_date > tekiyo_month_first_day else tekiyo_month_first_day - set_start_date = _date_time_to_str(set_start_date) - is_exists_duplicate_key = False - if _count_duplicate_ult_ident_presc(db, set_start_date, ult_ident_presc_row) > 0: - _delete_ult_ident_presc(db, set_start_date, ult_ident_presc_row, - '納入先処方元マスタの重複予定データの削除') - is_exists_duplicate_key = True - else: - logger.info('納入先処方元マスタの重複予定データなし') - _insert_ult_ident_presc(db, set_start_date, enabled_merge_record['dup_opp_cd'], ult_ident_presc_row) - - # 適用終了日 < 適用開始日の場合 - if _str_to_date_time(ult_ident_presc_row['end_date']) < start_date: - # 対象レコードを物理削除する - _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, - '開始月>適用開始日のため物理削除') - continue - # 重複予定データが存在しない、且つ、適用終了日 ≧ 適用開始日の場合 - if not is_exists_duplicate_key: - last_end_date = tekiyo_month_first_day - timedelta(days=1) - # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 - _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) + # 適用終了日 < 適用開始日の場合 + if _str_to_date_time(ult_ident_presc_row['end_date']) < start_date: + # 対象レコードを物理削除する + _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, + '開始月>適用開始日のため物理削除') + continue + # 重複予定データが存在しない、且つ、適用終了日 ≧ 適用開始日の場合 + if not is_exists_duplicate_key: + last_end_date = tekiyo_month_first_day - timedelta(days=1) + # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) logger.info('納入先処方元マスタの登録 終了') +def _select_emp_chg_inst_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: + # 従業員担当施設マスタから、DCF施設コードに対応した領域コードの取得 + try: + sql = """ + SELECT + ta_cd + FROM + src05.emp_chg_inst + WHERE + inst_cd = :dcf_inst_cd + AND enabled_flg = 'Y' + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd} + emp_chg_inst_ta_cd_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('従業員担当施設マスタから領域コードの取得に成功') + except Exception as e: + logger.debug('従業員担当施設マスタから領域コードの取得に失敗') + raise e + + return emp_chg_inst_ta_cd_records + + def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): # 従業員担当施設マスタの登録 logger.info('従業員担当施設マスタの登録 開始') for enabled_merge_record in enabled_dst_inst_merge_records: tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) - emp_chg_inst_records = _select_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd']) - for emp_chg_inst_row in emp_chg_inst_records: - # 重複時相手先コードが存在したかのチェック - if emp_chg_inst_row['opp_count'] > 0: - break + emp_chg_inst_ta_cd_records = _select_emp_chg_inst_ta_cd(db, enabled_merge_record['dcf_inst_cd']) + for emp_chg_inst_ta_cd_record in emp_chg_inst_ta_cd_records: + emp_chg_inst_records = _select_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd'], + emp_chg_inst_ta_cd_record['ta_cd']) + for emp_chg_inst_row in emp_chg_inst_records: + # 重複時相手先コードが存在したかのチェック + if emp_chg_inst_row['opp_count'] > 0: + continue - start_date = _str_to_date_time(emp_chg_inst_row['start_date']) - set_start_date = start_date \ - if start_date > tekiyo_month_first_day else tekiyo_month_first_day + start_date = _str_to_date_time(emp_chg_inst_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day - _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), - emp_chg_inst_row) + _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), + emp_chg_inst_row) - # 適用開始日 < DCF施設統合マスタの適用月度の1日の場合 - if start_date < tekiyo_month_first_day: - # DCF施設統合マスタの適用月度の前月末日で、適用終了日を更新する - last_end_date = tekiyo_month_first_day - timedelta(days=1) - _update_emp_chg_inst_end_date(db, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), - emp_chg_inst_row) - continue - # 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する - _update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], - emp_chg_inst_row['start_date']) + # 適用開始日 < DCF施設統合マスタの適用月度の1日の場合 + if start_date < tekiyo_month_first_day: + # DCF施設統合マスタの適用月度の前月末日で、適用終了日を更新する + last_end_date = tekiyo_month_first_day - timedelta(days=1) + _update_emp_chg_inst_end_date(db, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), + emp_chg_inst_row) + continue + # 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する + _update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], + emp_chg_inst_row['start_date']) logger.info('従業員担当施設マスタの登録 終了') @@ -468,7 +520,7 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, raise e -def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: +def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]: # emp_chg_instからSELECT try: sql = """ @@ -487,16 +539,18 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis FROM src05.emp_chg_inst AS eciopp WHERE - eciopp.inst_cd = :dup_opp_cd + eciopp.inst_cd = :dup_opp_cd + AND eciopp.ta_cd = :ta_cd ) AS opp_count FROM src05.emp_chg_inst AS eci WHERE eci.inst_cd = :dcf_inst_cd + AND eci.ta_cd = :ta_cd AND eci.enabled_flg = 'Y' AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < eci.end_date """ - params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd} emp_chg_inst_records = db.execute_select(sql, params) logging_sql(logger, sql) logger.info('従業員担当施設マスタの取得 成功') @@ -506,7 +560,7 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis return emp_chg_inst_records -def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: +def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]: # ult_ident_prescからSELECT try: sql = """ @@ -522,15 +576,17 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> FROM src05.ult_ident_presc AS uipopp WHERE - uipopp.presc_cd = :dup_opp_cd + uipopp.presc_cd = :dup_opp_cd + AND uipopp.ta_cd = :ta_cd ) AS opp_count FROM src05.ult_ident_presc AS uip WHERE uip.presc_cd = :dcf_inst_cd + AND uip.ta_cd = :ta_cd AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date """ - params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd} ult_ident_presc_records = db.execute_select(sql, params) logging_sql(logger, sql) logger.info('納入先処方元マスタの取得 成功') From 5359486197fa214974a56888d1ec0b2cb498e84a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Wed, 14 Jun 2023 15:35:55 +0900 Subject: [PATCH 44/90] =?UTF-8?q?delFlg=5Fctrl=20=E8=8B=A6=E8=82=89?= =?UTF-8?q?=E3=81=AE=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/model/request/ultmarc_inst.py | 4 ++-- .../repositories/ultmarc_doctor_repository.py | 9 ++------- .../src/templates/bioSearchList.html | 4 ++-- .../src/templates/docSearch.html | 2 -- .../src/templates/instSearch.html | 20 +++++++++---------- 5 files changed, 15 insertions(+), 24 deletions(-) diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py index 8b9a52c6..ba06a443 100644 --- a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py +++ b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py @@ -28,7 +28,7 @@ class UltmarcInstModel(BaseModel): ctrl_postal_number: str = Form(None), ctrl_inst_phone_number: str = Form(None), ctrl_prefc_cd: str = Form(None), - ctrl_delFlg: str = Form(None), + delFlg_ctrl: str = Form(None), ctrl_inst_addr: str = Form(None) ): return cls( @@ -39,7 +39,7 @@ class UltmarcInstModel(BaseModel): postal_number=ctrl_postal_number, inst_phone_number=ctrl_inst_phone_number, prefc_cd=ctrl_prefc_cd, - delFlg=ctrl_delFlg, + delFlg=delFlg_ctrl, inst_addr=ctrl_inst_addr ) diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index 5860148c..bd89db0b 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -34,6 +34,8 @@ class UltmarcDoctorRepository(BaseRepository): LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd WHERE {where_clause} + AND (length(com_inst.abolish_ymd) = 0 OR com_inst.abolish_ymd IS NULL) + AND (length(com_dr.abolish_ymd) = 0 OR com_dr.abolish_ymd IS NULL) GROUP BY com_dr.dcf_pcf_dr_cd, com_inst.dcf_dsf_inst_cd, com_blng_sec.blng_sec_cd ORDER BY com_dr.dcf_pcf_dr_cd, @@ -127,13 +129,6 @@ class UltmarcDoctorRepository(BaseRepository): parameter.grad_y = f'%{parameter.grad_y}%' where_clauses.append(SQLCondition('grad_y', condition.LIKE, 'grad_y')) - # 検索条件が入力されていない場合 - # if not where_clauses: - # where_clauses.append(SQLCondition( - # '', '', '(LENGTH(com_inst.abolish_ymd) = 0 OR com_inst.abolish_ymd IS NULL)', literal=True)) - # where_clauses.append(SQLCondition( - # '', '', '(LENGTH(com_dr.abolish_ymd) = 0 OR com_dr.abolish_ymd IS NULL)', literal=True)) - where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index d44247c1..09f1a718 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -176,12 +176,12 @@ {% if bio.is_form_submitted() and bio.is_data_overflow_max_length() %}
- 検索結果が最大件数を超えました。検索条件を見直しして下さい。 + 検索件数が500件を超えています 検索項目を見直してください
{% endif %} {% if bio.is_form_submitted() and bio.is_data_empty() %}
- 対象のデータが存在しません。 + 対象のデータが存在しません
{% endif %} diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 403b7f33..0b86e837 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -7,8 +7,6 @@ diff --git a/ecs/jskult-webapp/src/templates/instInfo.html b/ecs/jskult-webapp/src/templates/instInfo.html index 2ce03d2b..b582b54d 100644 --- a/ecs/jskult-webapp/src/templates/instInfo.html +++ b/ecs/jskult-webapp/src/templates/instInfo.html @@ -18,12 +18,12 @@ $(function(){ // 前ページ遷移処理 $('#prev').click(function(){ - $('#pageNum').val(Number($('#pageNum').val()) - 1); + $('#page_num').val(Number($('#page_num').val()) - 1); $('#instInfo').submit(); }); // 次ページ遷移処理 $('#next').click(function(){ - $('#pageNum').val(Number($('#pageNum').val()) + 1); + $('#page_num').val(Number($('#page_num').val()) + 1); $('#instInfo').submit(); }); }); @@ -48,13 +48,13 @@
- - + + - {{ultmarc.is_pageNum_view()}}/{{ultmarc.postCnt}} + {{ultmarc.is_page_num_view()}}/{{ultmarc.post_cnt}} diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html index 8cb92402..25e55ed8 100644 --- a/ecs/jskult-webapp/src/templates/instSearch.html +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -114,8 +114,8 @@ - - + + @@ -236,7 +236,7 @@ $('input[name="data"]:checked').each(function() { vals.push( $(this).val() ); // 配列に値を追加 }); - $("#instId").val(vals.join(',')); + $("#inst_id").val(vals.join(',')); } diff --git a/s3/config/jskult/task_settings/web_task_settings.env b/s3/config/jskult/task_settings/web_task_settings.env index b10c9342..9336383d 100644 --- a/s3/config/jskult/task_settings/web_task_settings.env +++ b/s3/config/jskult/task_settings/web_task_settings.env @@ -4,4 +4,4 @@ AUTHORIZE_ENDPOINT=oauth2/authorize TOKEN_ENDPOINT=oauth2/token BIO_SEARCH_RESULT_MAX_COUNT=35000 SESSION_EXPIRE_MINUTE=20 -SEARCH_RESULT_MAX_COUNT=500 +UTL_SEARCH_RESULT_MAX_COUNT=500 From f261cda65befba0433db776b0f1b30a22aeacf83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Fri, 16 Jun 2023 18:12:28 +0900 Subject: [PATCH 52/90] =?UTF-8?q?=E6=8C=87=E6=91=98=E4=BA=8B=E9=A0=85?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/.env.example | 2 +- ecs/jskult-webapp/src/controller/ultmarc.py | 48 +++-- .../src/model/request/ultmarc_doctor.py | 7 +- .../src/model/request/ultmarc_inst.py | 9 +- .../src/model/view/bio_view_model.py | 2 +- .../view/ultmarc_doctor_info_view_model.py | 42 +---- .../model/view/ultmarc_doctor_view_model.py | 8 +- .../view/ultmarc_inst_info_view_model.py | 166 +----------------- .../src/model/view/ultmarc_inst_view_model.py | 12 +- .../repositories/ultmarc_inst_repository.py | 8 +- .../src/services/ultmarc_view_service.py | 101 +++++------ .../src/system_var/environment.py | 2 +- .../src/templates/bioSearchList.html | 2 +- ecs/jskult-webapp/src/templates/docInfo.html | 63 ++++--- .../src/templates/docSearch.html | 40 +++-- ecs/jskult-webapp/src/templates/instInfo.html | 84 ++++----- .../src/templates/instSearch.html | 32 ++-- .../task_settings/web_task_settings.env | 2 +- 18 files changed, 239 insertions(+), 391 deletions(-) diff --git a/ecs/jskult-webapp/.env.example b/ecs/jskult-webapp/.env.example index d6fcbdcc..0630afe4 100644 --- a/ecs/jskult-webapp/.env.example +++ b/ecs/jskult-webapp/.env.example @@ -22,6 +22,6 @@ AWS_REGION=ap-northeast-1 AUTHORIZE_ENDPOINT=oauth2/authorize TOKEN_ENDPOINT=oauth2/token BIO_SEARCH_RESULT_MAX_COUNT=35000 -UTL_SEARCH_RESULT_MAX_COUNT=500 +ULTMARC_SEARCH_RESULT_MAX_COUNT=500 SESSION_EXPIRE_MINUTE=20 LOG_LEVEL=DEBUG \ No newline at end of file diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 00678cb0..5e9c046f 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -4,10 +4,10 @@ from fastapi import APIRouter, Depends, Request from src.depends.services import get_service from src.model.internal.session import UserSession -from src.model.request.ultmarc_doctor import (UltmarcDoctorInfoModel, - UltmarcDoctorSearchModel) +from src.model.request.ultmarc_doctor import ( + UltmarcDoctorInfoModel, UltmarcDoctorSearchModel) from src.model.request.ultmarc_inst import (UltmarcInstInfoModel, - UltmarcInstModel) + UltmarcInstSearchModel) from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.session_service import set_session @@ -21,6 +21,10 @@ router.route_class = AuthenticatedRoute # Views # ######################### +######################### +# アルトマーク施設検索 # +######################### + @router.get('/instSearch') def ultmarc_inst_view( @@ -33,7 +37,7 @@ def ultmarc_inst_view( is_batch_processing = batch_status_service.is_batch_processing() # 検索項目の取得(都道府県・施設区分) - ultmarc = ultmarc_service.ultmarc_inst_view(session) + ultmarc = ultmarc_service.prepare_ultmarc_inst_search_view() ultmarc.is_batch_processing = is_batch_processing # セッション書き換え @@ -57,7 +61,7 @@ def ultmarc_inst_view( @router.post('/instSearch') def search_inst( request: Request, - ultmarc_inst_form: Optional[UltmarcInstModel] = Depends(UltmarcInstModel.as_form), + ultmarc_inst_form: Optional[UltmarcInstSearchModel] = Depends(UltmarcInstSearchModel.as_form), ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)), batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): @@ -70,7 +74,7 @@ def search_inst( ultmarc_inst_data = ultmarc_service.search_inst_data(ultmarc_inst_form) # 検索項目の取得(都道府県・施設区分) - ultmarc = ultmarc_service.ultmarc_inst_view(session) + ultmarc = ultmarc_service.prepare_ultmarc_inst_search_view() ultmarc.is_batch_processing = is_batch_processing ultmarc.inst_data = ultmarc_inst_data ultmarc.form_data = ultmarc_inst_form @@ -92,6 +96,10 @@ def search_inst( ) return templates_response +######################### +# アルトマーク施設詳細 # +######################### + @router.get('/instInfo') def ultmarc_inst_info_view( @@ -105,8 +113,8 @@ def ultmarc_inst_info_view( is_batch_processing = batch_status_service.is_batch_processing() # 施設情報の取得 - ultmarc = ultmarc_service.info_ultmarc_inst_view(id, session) - # バッチ起動判定の取得 + ultmarc = ultmarc_service.prepare_ultmarc_inst_info_view(id) + # バッチ起動判定 ultmarc.is_batch_processing = is_batch_processing # inst_id ultmarc.inst_id = id @@ -133,7 +141,7 @@ def ultmarc_inst_info_view( return templates_response -@router.post('/instInfo') +@ router.post('/instInfo') def ultmarc_inst_info_search( request: Request, ultmarc_inst_form: Optional[UltmarcInstInfoModel] = Depends(UltmarcInstInfoModel.as_form), @@ -147,7 +155,7 @@ def ultmarc_inst_info_search( inst_id = ultmarc_inst_form.inst_id.split(',') # 施設情報の取得 - ultmarc = ultmarc_service.info_ultmarc_inst_view(inst_id[ultmarc_inst_form.page_num], session) + ultmarc = ultmarc_service.prepare_ultmarc_inst_info_view(inst_id[ultmarc_inst_form.page_num]) # バッチ起動判定の取得 ultmarc.is_batch_processing = is_batch_processing @@ -175,6 +183,10 @@ def ultmarc_inst_info_search( ) return templates_response +######################### +# アルトマーク医師検索 # +######################### + @router.get('/docSearch') def ultmarc_doctor_view( @@ -187,7 +199,7 @@ def ultmarc_doctor_view( is_batch_processing = batch_status_service.is_batch_processing() # 検索項目の取得(都道府県) - ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) + ultmarc = ultmarc_service.prepare_ultmarc_doctor_search_view() ultmarc.is_batch_processing = is_batch_processing # セッション書き換え @@ -218,14 +230,14 @@ def search_doc( session: UserSession = request.session # バッチ処理中ステータスを取得 - # is_batch_processing = batch_status_service.is_batch_processing() + is_batch_processing = batch_status_service.is_batch_processing() # 医師データを検索 ultmarc_doctor_data = ultmarc_service.search_doctor_data(ultmarc_doctor_form) # 検索項目などのデータを取得 - ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) - ultmarc.is_batch_processing = batch_status_service.is_batch_processing() + ultmarc = ultmarc_service.prepare_ultmarc_doctor_search_view() + ultmarc.is_batch_processing = is_batch_processing ultmarc.doctor_data = ultmarc_doctor_data ultmarc.form_data = ultmarc_doctor_form @@ -246,6 +258,10 @@ def search_doc( ) return templates_response +######################### +# アルトマーク医師詳細 # +######################### + @router.get('/docInfo') def ultmarc_doctor_info_view( @@ -259,7 +275,7 @@ def ultmarc_doctor_info_view( is_batch_processing = batch_status_service.is_batch_processing() # 医師情報の取得 - ultmarc = ultmarc_service.info_ultmarc_doctor_view(id, session) + ultmarc = ultmarc_service.prepare_ultmarc_doctor_info_view(id) # バッチ起動判定の取得 ultmarc.is_batch_processing = is_batch_processing # doc_id @@ -301,7 +317,7 @@ def ultmarc_doctor_info_search( doc_id = ultmarc_doctor_form.doc_id.split(',') # 医師情報の取得 - ultmarc = ultmarc_service.info_ultmarc_doctor_view(doc_id[ultmarc_doctor_form.page_num], session) + ultmarc = ultmarc_service.prepare_ultmarc_doctor_info_view(doc_id[ultmarc_doctor_form.page_num]) # バッチ起動判定の取得 ultmarc.is_batch_processing = is_batch_processing # doc_id diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py b/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py index 135869b9..e1fd6224 100644 --- a/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py +++ b/ecs/jskult-webapp/src/model/request/ultmarc_doctor.py @@ -19,6 +19,7 @@ class UltmarcDoctorSearchModel(BaseModel): trt_course_name: Optional[str] alma: Optional[str] grad_y: Optional[str] + pagination_pageNumber: Optional[int] @classmethod def as_form( @@ -33,7 +34,8 @@ class UltmarcDoctorSearchModel(BaseModel): ctrl_blng_sec_name: str = Form(None), ctrl_trt_course_name: str = Form(None), ctrl_alma: str = Form(None), - ctrl_grad_y: str = Form(None) + ctrl_grad_y: str = Form(None), + pagination_pageNumber: str = Form(None) ): return cls( @@ -47,7 +49,8 @@ class UltmarcDoctorSearchModel(BaseModel): blng_sec_name=ctrl_blng_sec_name, trt_course_name=ctrl_trt_course_name, alma=ctrl_alma, - grad_y=ctrl_grad_y + grad_y=ctrl_grad_y, + pagination_pageNumber=pagination_pageNumber ) diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py index 1b5972ff..8f28df30 100644 --- a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py +++ b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py @@ -7,7 +7,7 @@ from src.util.sanitize import sanitize @sanitize -class UltmarcInstModel(BaseModel): +class UltmarcInstSearchModel(BaseModel): dcf_dsf_inst_cd: Optional[str] inst_div_cd: Optional[str] form_inst_name_kanji: Optional[str] @@ -17,6 +17,7 @@ class UltmarcInstModel(BaseModel): prefc_cd: Optional[str] delFlg: Optional[str] inst_addr: Optional[str] + pagination_pageNumber: Optional[int] @classmethod def as_form( @@ -29,7 +30,8 @@ class UltmarcInstModel(BaseModel): ctrl_inst_phone_number: str = Form(None), ctrl_prefc_cd: str = Form(None), delFlg_ctrl: str = Form(None), - ctrl_inst_addr: str = Form(None) + ctrl_inst_addr: str = Form(None), + pagination_pageNumber: str = Form(None) ): return cls( dcf_dsf_inst_cd=ctrl_dcf_dsf_inst_cd, @@ -40,7 +42,8 @@ class UltmarcInstModel(BaseModel): inst_phone_number=ctrl_inst_phone_number, prefc_cd=ctrl_prefc_cd, delFlg=delFlg_ctrl, - inst_addr=ctrl_inst_addr + inst_addr=ctrl_inst_addr, + pagination_pageNumber=pagination_pageNumber ) diff --git a/ecs/jskult-webapp/src/model/view/bio_view_model.py b/ecs/jskult-webapp/src/model/view/bio_view_model.py index 70017932..8f5e4875 100644 --- a/ecs/jskult-webapp/src/model/view/bio_view_model.py +++ b/ecs/jskult-webapp/src/model/view/bio_view_model.py @@ -127,7 +127,7 @@ class BioViewModel(BaseModel): return len(self.bio_data) == 0 def is_data_overflow_max_length(self): - return len(self.bio_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.bio_data) > environment.BIO_SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py index ddbd5542..e84a3f3f 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py @@ -27,42 +27,6 @@ class UltmarcDoctorInfoViewModel(BaseModel): post_cnt: Optional[int] page_num: Optional[int] - # 医師コード - def is_input_dcf_pcf_dr_cd(self): - return self.doctor_info_data.dcf_pcf_dr_cd or '' - - # 氏名(漢字) - def is_input_dr_name(self): - return self.doctor_info_data.dr_name or '' - - # 氏名(かな・カナ) - def is_input_dr_name_kana(self): - return self.doctor_info_data.dr_name_kana or '' - - # 性別 - def is_input_sex(self): - return self.doctor_info_data.sex or '' - - # 出身大学 - def is_input_alma(self): - return self.doctor_info_data.alma or '' - - # 出身県 - def is_input_hometown(self): - return self.doctor_info_data.hometown or '' - - # 卒年 - def is_input_grad_y(self): - return self.doctor_info_data.grad_y or '' - - # 登録年 - def is_input_drday_y(self): - return self.doctor_info_data.drday_y or '' - - # 開業年 - def is_input_estab_y(self): - return self.doctor_info_data.estab_y or '' - # 現在のページ(表示用) def is_page_num_view(self): return self.page_num + 1 @@ -77,6 +41,7 @@ class UltmarcDoctorInfoViewModel(BaseModel): return 'disabled' return '' + # 生年月日 def is_input_birthday_fromat(self): return self._format_date_string(self.doctor_info_data.birthday) @@ -88,9 +53,6 @@ class UltmarcDoctorInfoViewModel(BaseModel): def is_input_trt_course_data_size(self): return len(self.trt_coursed_data) - def is_data_string_empty_fromat(self, data_string): - return data_string or '' - def disabled_button(self): return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' @@ -101,7 +63,7 @@ class UltmarcDoctorInfoViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.UTL_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) > environment.ULTMARC_SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py index a97956fd..0cb0123d 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py @@ -21,6 +21,12 @@ class UltmarcDoctorViewModel(BaseModel): return obj.isoformat() if hasattr(obj, 'isoformat') else obj return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) + # ページネーションのページ番号 + def is_input_pagination_pageNumber(self): + if not self.is_form_submitted(): + return 1 + return self.form_data.pagination_pageNumber or 1 + # 医師コード def is_input_dcf_pcf_dr_cd(self): if not self.is_form_submitted(): @@ -102,7 +108,7 @@ class UltmarcDoctorViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.UTL_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) > environment.ULTMARC_SEARCH_RESULT_MAX_COUNT def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py index 7caad57b..4244bef4 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py @@ -17,171 +17,30 @@ class UltmarcInstInfoViewModel(BaseModel): post_cnt: Optional[int] page_num: Optional[int] - # 施設コード - def is_input_dcf_dsf_inst_cd(self): - return self.inst_info_data.dcf_dsf_inst_cd or '' - # 未確認 def is_checked_unconf_flg(self): return 'checked' if self.inst_info_data.unconf_flg == '1' else '' - # 施設コード変換先 - def is_input_dup_opp_cd(self): - return self.inst_info_data.dup_opp_cd or '' - - # 休院店開始年月 - def is_input_close_start_ym(self): - return self.inst_info_data.close_start_ym or '' - # 休院店 def is_checked_close_flg(self): return 'checked' if self.inst_info_data.close_flg == '1' else '' - # 削除予定理由 - def is_input_delete_sche_reason_cd(self): - return self.inst_info_data.delete_sche_reason_cd or '' - - def is_input_delete_sche_reason(self): - return self.inst_info_data.delete_sche_reason or '' - - # 削除日 - def is_input_abolish_ymd(self): - return self.inst_info_data.abolish_ymd or '' - - # 開業予定年月 - def is_input_estab_sche_ym(self): - return self.inst_info_data.estab_sche_ym or '' - # 開業 def is_checked_estab_sche_flg(self): return 'checked' if self.inst_info_data.estab_sche_flg == '1' else '' - # 正式施設名(カナ) - def is_input_form_inst_name_kana(self): - return self.inst_info_data.form_inst_name_kana or '' - - # 正式施設名(漢字) - def is_input_form_inst_name_kanji(self): - return self.inst_info_data.form_inst_name_kanji or '' - - # 略式施設名(カナ) - def is_input_inst_name_kana(self): - return self.inst_info_data.inst_name_kana or '' - - # 施設区分名 - def is_input_inst_div_name(self): - return self.inst_info_data.inst_div_name or '' - - # 略式施設名(漢字) - def is_input_inst_name_kanji(self): - return self.inst_info_data.inst_name_kanji or '' - - # 経営体 - def is_input_manage_cd(self): - return self.inst_info_data.manage_cd or '' - - def is_input_manage_name(self): - return self.inst_info_data.manage_name or '' - - # 郵便番号 - def is_input_postal_number(self): - return self.inst_info_data.postal_number or '' - # 住所不明 def is_checked_addr_unknown_reason_cd(self): return 'checked' if self.inst_info_data.addr_unknown_reason_cd else '' - # 施設電話番号 - def is_input_inst_phone_number(self): - return self.inst_info_data.inst_phone_number or '' - # 開業 def is_checked_phone_number_non_flg(self): return 'checked' if self.inst_info_data.phone_number_non_flg == '1' else '' - # 住所(カナ) - def is_input_inst_addr_kana(self): - return self.inst_info_data.inst_addr_kana or '' - - # 住所(漢字) - def is_input_inst_addr(self): - return self.inst_info_data.inst_addr or '' - - # 病院種別 - def is_input_hp_assrt_name(self): - return self.inst_info_data.hp_assrt_name or '' - # 再審査区分 def is_checked_re_exam_cd(self): return 'checked' if self.inst_info_data.re_exam_cd else '' - # 関連大学親名 - def is_input_rltd_univ_prnt_cd(self): - return self.inst_info_data.rltd_univ_prnt_cd or '' - - def is_input_parent_name(self): - return self.inst_info_data.parent_name or '' - - # 微生物 - def is_input_insp_item_micrb(self): - return self.inst_info_data.insp_item_micrb or '' - - # 血清 - def is_input_insp_item_serum(self): - return self.inst_info_data.insp_item_serum or '' - - # 血液 - def is_input_insp_item_blood(self): - return self.inst_info_data.insp_item_blood or '' - - # 病理 - def is_input_insp_item_patho(self): - return self.inst_info_data.insp_item_patho or '' - - # 寄生虫 - def is_input_insp_item_paras(self): - return self.inst_info_data.insp_item_paras or '' - - # 生化 - def is_input_insp_item_biochem(self): - return self.inst_info_data.insp_item_biochem or '' - - # RI - def is_input_insp_item_ri(self): - return self.inst_info_data.insp_item_ri or '' - - # 特務医務室 - def is_input_dcf_prnt_inst_cd(self): - return self.inst_info_data.dcf_prnt_inst_cd or '' - - # 一般 - def is_input_prmit_bed_num_gen(self): - return self.inst_info_data.prmit_bed_num_gen or '' - - # 療養 - def is_input_prmit_bed_num_rcup(self): - return self.inst_info_data.prmit_bed_num_rcup or '' - - # 精神 - def is_input_prmit_bed_num_mental(self): - return self.inst_info_data.prmit_bed_num_mental or '' - - # 感染症 - def is_input_prmit_bed_num_infection(self): - return self.inst_info_data.prmit_bed_num_infection or '' - - # 結核 - def is_input_prmit_bed_num_tuber(self): - return self.inst_info_data.prmit_bed_num_tuber or '' - - # その他 - def is_input_prmit_bed_num_other(self): - return self.inst_info_data.prmit_bed_num_other or '' - - # 合計 - def is_input_prmit_bed_num_sum(self): - return self.inst_info_data.prmit_bed_num_sum or '' - # 病棟閉鎖   def is_checked_ward_abolish_flg(self): return 'checked' if self.inst_info_data.ward_abolish_flg == '1' else '' @@ -190,26 +49,6 @@ class UltmarcInstInfoViewModel(BaseModel): def is_checked_ward_abolish_flg_part(self): return 'checked' if self.inst_info_data.ward_abolish_flg == '2' else '' - # 病床数(定員) - def is_input_bed_num(self): - return self.inst_info_data.bed_num or '' - - # メンテ年月日 - def is_input_prmit_bed_maint_ymd(self): - return self.inst_info_data.prmit_bed_maint_ymd or '' - - # 代表者個人コード - def is_input_inst_repre_cd(self): - return self.inst_info_data.inst_repre_cd or '' - - # 施設代表者(カナ) - def is_input_inst_repre_kana(self): - return self.inst_info_data.inst_repre_kana or '' - - # 施設代表者(漢字) - def is_input_inst_repre(self): - return self.inst_info_data.inst_repre or '' - # 修正年月日 def is_input_sys_update_date(self): sys_update_date = str(self.inst_info_data.sys_update_date) @@ -239,9 +78,6 @@ class UltmarcInstInfoViewModel(BaseModel): return 0 return len(self.inst_trt_coursed_data) - def is_data_string_empty_fromat(self, data_string): - return data_string or '' - def disabled_button(self): return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' @@ -252,4 +88,4 @@ class UltmarcInstInfoViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.UTL_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) > environment.ULTMARC_SEARCH_RESULT_MAX_COUNT diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py index f98794d3..6215f8bf 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py @@ -6,7 +6,7 @@ from pydantic import BaseModel from src.model.db.inst_div_master import InstDivMasterModel from src.model.db.prefc_master import PrefcMasterModel from src.model.db.ultmarc_inst import UltmarcInstDBModel -from src.model.request.ultmarc_inst import UltmarcInstModel +from src.model.request.ultmarc_inst import UltmarcInstSearchModel from src.system_var import environment @@ -16,13 +16,19 @@ class UltmarcInstViewModel(BaseModel): prefc_models: list[PrefcMasterModel] inst_div_models: list[InstDivMasterModel] inst_data: Optional[list[UltmarcInstDBModel]] = [] - form_data: Optional[UltmarcInstModel] + form_data: Optional[UltmarcInstSearchModel] def ultmarc_data_json_str(self): def date_handler(obj): return obj.isoformat() if hasattr(obj, 'isoformat') else obj return json.dumps([model.dict() for model in self.inst_data], ensure_ascii=False, default=date_handler) + # ページネーションのページ番号 + def is_input_pagination_pageNumber(self): + if not self.is_form_submitted(): + return 1 + return self.form_data.pagination_pageNumber or 1 + # ULT施設コード def is_input_dcf_dsf_inst_cd(self): if not self.is_form_submitted(): @@ -102,7 +108,7 @@ class UltmarcInstViewModel(BaseModel): return len(self.inst_data) == 0 def is_data_overflow_max_length(self): - return len(self.inst_data) >= environment.UTL_SEARCH_RESULT_MAX_COUNT + return len(self.inst_data) >= environment.ULTMARC_SEARCH_RESULT_MAX_COUNT def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py index 2ceebd0a..95e8605c 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py @@ -2,7 +2,7 @@ from src.db import sql_condition as condition from src.db.sql_condition import SQLCondition from src.model.db.ultmarc_inst import UltmarcInstDBModel from src.model.db.ultmarc_inst_info import UltmarcInstInfoDBModel -from src.model.request.ultmarc_inst import UltmarcInstModel +from src.model.request.ultmarc_inst import UltmarcInstSearchModel from src.repositories.base_repository import BaseRepository from src.util.string_util import is_not_empty @@ -30,11 +30,11 @@ class UltmarcInstRepository(BaseRepository): \ """ - def fetch_many(self, parameter: UltmarcInstModel) -> list[UltmarcInstDBModel]: + def fetch_many(self, parameter: UltmarcInstSearchModel) -> list[UltmarcInstDBModel]: try: self._database.connect() # 文字列の検索を部分一致にするため、モデルをコピー。以降はこのコピーを使用する。 - clone_parameter = UltmarcInstModel(**parameter.dict()) + clone_parameter = UltmarcInstSearchModel(**parameter.dict()) where_clause = self.__build_condition(clone_parameter) query = self.FETCH_SQL.format(where_clause=where_clause) result = self._database.execute_select(query, clone_parameter.dict()) @@ -48,7 +48,7 @@ class UltmarcInstRepository(BaseRepository): finally: self._database.disconnect() - def __build_condition(self, parameter: UltmarcInstModel): + def __build_condition(self, parameter: UltmarcInstSearchModel): where_clauses: list[SQLCondition] = [] # ULT施設コード diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 44f99cda..5c441421 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -1,7 +1,6 @@ from src.aws.aws_api_client import AWSAPIClient -from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorSearchModel -from src.model.request.ultmarc_inst import UltmarcInstModel +from src.model.request.ultmarc_inst import UltmarcInstSearchModel from src.model.view.ultmarc_doctor_info_view_model import \ UltmarcDoctorInfoViewModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel @@ -66,10 +65,13 @@ class UltmarcViewService(BaseService): self.ultmarc_doctor_wrkplace_his_repository = repositories['ultmarc_doctor_wrkplace_his_repository'] self.ultmarc_specialist_license_repository = repositories['ultmarc_specialist_license_repository'] - def prepare_ultmarc_doctor_view( - self, - session: UserSession + ######################### + # アルトマーク医師 # + ######################### + def prepare_ultmarc_doctor_search_view( + self ) -> UltmarcDoctorViewModel: + # 医師一覧画面の表示データ取得 # 都道府県リストを取得 prefcs = self.prefc_repository.fetch_all() @@ -78,58 +80,15 @@ class UltmarcViewService(BaseService): ) return ultmarc - def ultmarc_inst_view( - self, - session: UserSession - ) -> UltmarcInstViewModel: - # 都道府県リストを取得 - prefcs = self.prefc_repository.fetch_all() - # 施設区分リストを取得 - inst_div = self.inst_div_repository.fetch_all() - - ultmarc = UltmarcInstViewModel( - prefc_models=prefcs, - inst_div_models=inst_div - ) - return ultmarc - - def search_inst_data(self, search_params: UltmarcInstModel): - # 施設データを検索 - ultmarc_inst_data = self.ultmarc_inst_repository.fetch_many(parameter=search_params) - return ultmarc_inst_data - - def info_ultmarc_inst_view( - self, - id, - session: UserSession - ) -> UltmarcInstInfoViewModel: - - # 施設情報画面の表示データ取得 - # 施設情報を取得 - inst_info = self.ultmarc_inst_repository.fetch_one(id) - # 診療科目情報を取得 - inst_trt_course = self.ultmarc_inst_trt_course_repository.fetch_many(id) - # 医師件数を取得 - doctor_count = self.ultmarc_doctor_wrkplace_repository.fetch_count(id) - - ultmarc = UltmarcInstInfoViewModel( - inst_info_data=inst_info, - inst_trt_coursed_data=inst_trt_course, - doctor_wrkplace_count=doctor_count - ) - return ultmarc - def search_doctor_data(self, search_params: UltmarcDoctorSearchModel): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) return ultmarc_doctor_data - def info_ultmarc_doctor_view( + def prepare_ultmarc_doctor_info_view( self, - id, - session: UserSession + id ) -> UltmarcDoctorInfoViewModel: - # 医師情報画面の表示データ取得 # 医師情報を取得 doctor_info = self.ultmarc_doctor_repository.fetch_one(id) @@ -153,3 +112,45 @@ class UltmarcViewService(BaseService): doctor_wrkplace_his_data=wrkplace_his ) return ultmarc + + ######################### + # アルトマーク施設 # + ######################### + def prepare_ultmarc_inst_search_view( + self + ) -> UltmarcInstViewModel: + # 施設一覧画面の表示データ取得 + # 都道府県リストを取得 + prefcs = self.prefc_repository.fetch_all() + # 施設区分リストを取得 + inst_div = self.inst_div_repository.fetch_all() + + ultmarc = UltmarcInstViewModel( + prefc_models=prefcs, + inst_div_models=inst_div + ) + return ultmarc + + def search_inst_data(self, search_params: UltmarcInstSearchModel): + # 施設データを検索 + ultmarc_inst_data = self.ultmarc_inst_repository.fetch_many(parameter=search_params) + return ultmarc_inst_data + + def prepare_ultmarc_inst_info_view( + self, + id + ) -> UltmarcInstInfoViewModel: + # 施設情報画面の表示データ取得 + # 施設情報を取得 + inst_info = self.ultmarc_inst_repository.fetch_one(id) + # 診療科目情報を取得 + inst_trt_course = self.ultmarc_inst_trt_course_repository.fetch_many(id) + # 医師件数を取得 + doctor_count = self.ultmarc_doctor_wrkplace_repository.fetch_count(id) + + ultmarc = UltmarcInstInfoViewModel( + inst_info_data=inst_info, + inst_trt_coursed_data=inst_trt_course, + doctor_wrkplace_count=doctor_count + ) + return ultmarc diff --git a/ecs/jskult-webapp/src/system_var/environment.py b/ecs/jskult-webapp/src/system_var/environment.py index 91b661b3..c5bf66ef 100644 --- a/ecs/jskult-webapp/src/system_var/environment.py +++ b/ecs/jskult-webapp/src/system_var/environment.py @@ -19,7 +19,7 @@ DB_PASSWORD = os.environ['DB_PASSWORD'] DB_SCHEMA = os.environ['DB_SCHEMA'] BIO_SEARCH_RESULT_MAX_COUNT = int(os.environ['BIO_SEARCH_RESULT_MAX_COUNT']) -UTL_SEARCH_RESULT_MAX_COUNT = int(os.environ['UTL_SEARCH_RESULT_MAX_COUNT']) +ULTMARC_SEARCH_RESULT_MAX_COUNT = int(os.environ['ULTMARC_SEARCH_RESULT_MAX_COUNT']) SESSION_EXPIRE_MINUTE = int(os.environ['SESSION_EXPIRE_MINUTE']) LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index 2ab9b7cb..32ca883a 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -176,7 +176,7 @@ {% if bio.is_form_submitted() and bio.is_data_overflow_max_length() %}
- 検索件数が500件を超えています 検索項目を見直してください + 検索結果が最大件数を超えました。検索条件を見直しして下さい。
{% endif %} {% if bio.is_form_submitted() and bio.is_data_empty() %} diff --git a/ecs/jskult-webapp/src/templates/docInfo.html b/ecs/jskult-webapp/src/templates/docInfo.html index 1a40192b..ca70b292 100644 --- a/ecs/jskult-webapp/src/templates/docInfo.html +++ b/ecs/jskult-webapp/src/templates/docInfo.html @@ -84,30 +84,30 @@ 医師コード: - + 氏名(漢字): - + 氏名(カナ): - + 性別: - + 生年月日: 出身大学: - + 出身県: - + 卒年: - + 登録年: - + 開業年: - + @@ -141,8 +141,8 @@ {% for sosiety_data in ultmarc.sosiety_data %} - {{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_cd)}} - {{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_name)}} + {{sosiety_data.sosiety_cd or ''}} + {{sosiety_data.sosiety_name or ''}} {% endfor %} @@ -162,8 +162,8 @@ {% for specialist_license_data in ultmarc.specialist_license_data %} - {{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_cd)}} - {{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_license_name)}} + {{specialist_license_data.specialist_cd or ''}} + {{specialist_license_data.specialist_license_name or ''}} {% endfor %} @@ -176,7 +176,7 @@

勤務先履歴

- +
@@ -196,31 +196,30 @@ {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} - {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} + {% if doctor_wrkplace_data.dcf_dsf_inst_cd %} - - - - - - + + + + + + {% endif %} {% endfor %} {% for doctor_wrkplace_his_data in ultmarc.doctor_wrkplace_his_data %} - {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd) != ''%} + {% if doctor_wrkplace_his_data.dcf_dsf_inst_cd %} - - - - - - - + + + + + + + {% endif %} {% endfor %} diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 3d532374..1654f1eb 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -111,11 +111,12 @@ - + + @@ -140,7 +141,7 @@
ULT施設コード
- {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_data.aply_start_ymd)}} + {{doctor_wrkplace_data.dcf_dsf_inst_cd or ''}}{{doctor_wrkplace_data.inst_name_kanji or ''}}{{doctor_wrkplace_data.blng_sec_name or ''}}{{doctor_wrkplace_data.univ_post_name or ''}}{{doctor_wrkplace_data.post_name or ''}}{{doctor_wrkplace_data.aply_start_ymd or ''}} 9999/99/99
- {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}} - {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.post_name)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_his_data.aply_end_ymd)}} + {{doctor_wrkplace_his_data.dcf_dsf_inst_cd or ''}}{{doctor_wrkplace_his_data.inst_name_kanji or ''}}{{doctor_wrkplace_his_data.blng_sec_name or ''}}{{doctor_wrkplace_his_data.univ_post_name or ''}}{{doctor_wrkplace_his_data.post_name or ''}}{{doctor_wrkplace_his_data.aply_start_ymd or ''}}{{doctor_wrkplace_his_data.aply_end_ymd or ''}}
{% if ultmarc.is_form_submitted() and ultmarc.is_data_overflow_max_length() %}
- 検索結果が最大件数を超えました。検索条件を見直しして下さい。 + 検索件数が500件を超えています 検索項目を見直してください
{% endif %} {% if ultmarc.is_form_submitted() and ultmarc.is_data_empty() %} @@ -157,14 +158,15 @@ - + diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html index e630b9d8..5ac6c003 100644 --- a/ecs/jskult-webapp/src/templates/instSearch.html +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -15,7 +15,7 @@ } - + @@ -37,7 +37,7 @@ ULT施設コード: - 施設区分: @@ -56,22 +56,22 @@ ULT施設名(漢字): - ULT施設名(かな・カナ): - 郵便番号: - 電話番号: - @@ -83,7 +83,7 @@ {% for prefc in ultmarc.prefc_models %} - @@ -91,14 +91,14 @@ - ULT施設住所: - @@ -116,7 +116,7 @@ - + @@ -152,7 +152,7 @@
- + \ No newline at end of file From 3b2362442d130853af51cbda8c1d5cf876262310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 22 Jun 2023 10:34:14 +0900 Subject: [PATCH 68/90] =?UTF-8?q?feat:=20=E5=8D=98=E4=BD=93=E8=A9=A6?= =?UTF-8?q?=E9=A8=93NG=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/laundering/sales_results_laundering.py | 2 +- rds_mysql/stored_procedure/src05/sales_lau_upsert.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 04d0dcaa..530fd9b9 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -141,7 +141,7 @@ def _count_inst_merge_t(db: Database) -> int: try: sql = """ SELECT - COUNT(dcf_inst_cd) AS cnt + COUNT(dcf_dsf_inst_cd) AS cnt FROM internal05.inst_merge_t """ diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 182c3b3a..63049f09 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -138,7 +138,7 @@ BEGIN ); SET @extract_from_datetime = CAST(extract_from_date AS DATETIME); - SET @extract_to_datetime = CAST(extract_to_date AS DATETIME); + SET @extract_to_datetime = ADDTIME(CAST(extract_to_date AS DATETIME), '23:59:59'); SET @upsert_sales_launderning = " INSERT INTO From 9cea113944fc455af73d87e3a019a4c131154e0a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 23 Jun 2023 17:03:43 +0900 Subject: [PATCH 69/90] =?UTF-8?q?fix:=20=E5=8D=98=E4=BD=93=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=AE=E4=B8=8D=E5=85=B7=E5=90=88=E5=AE=9F?= =?UTF-8?q?=E8=A3=85=E3=80=82=E6=97=A2=E5=AD=98=E3=81=AE=E3=83=AC=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=82=82=E3=80=81=E8=A3=BD=E5=93=81=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=80=81=E3=83=AD=E3=83=83=E3=83=88=E6=9C=89=E5=8A=B9?= =?UTF-8?q?=E6=9C=9F=E9=99=90=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/bio_sales/create_bio_sales_lot.py | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py index ede7939b..032a6a02 100644 --- a/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py +++ b/ecs/jskult-batch-daily/src/batch/bio_sales/create_bio_sales_lot.py @@ -357,16 +357,14 @@ def _set_prd_info_from_v_prd_mst(db: Database): elapsed_time = ElapsedTime() sql = """ UPDATE - src05.bio_sales_lot bio, - src05.phm_prd_mst_v prd + src05.bio_sales_lot bio + LEFT OUTER JOIN src05.phm_prd_mst_v prd + ON bio.comm_cd = prd.prd_cd + AND STR_TO_DATE(bio.rev_hsdnymd_srk,'%Y%m%d') BETWEEN prd.start_date AND prd.end_date + AND prd.rec_sts_kbn <> '9' SET bio.mkr_inf_1 = prd.mkr_inf_1, bio.mkr_cd = prd.mkr_cd - WHERE - bio.comm_cd = prd.prd_cd - AND STR_TO_DATE(bio.rev_hsdnymd_srk,'%Y%m%d') BETWEEN prd.start_date AND prd.end_date - AND prd.rec_sts_kbn <> '9' - """ res = db.execute(sql) logging_sql(logger, sql) @@ -384,13 +382,12 @@ def _set_expr_dt_from_lot_num_mst(db: Database): elapsed_time = ElapsedTime() sql = """ UPDATE - src05.bio_sales_lot bio, - src05.lot_num_mst lot + src05.bio_sales_lot bio + LEFT OUTER JOIN src05.lot_num_mst lot + ON bio.mkr_cd = lot.ser_num + AND bio.rec_lot_num = lot.lot_num SET bio.expr_dt = lot.expr_dt - WHERE - bio.mkr_cd = lot.ser_num - AND bio.rec_lot_num = lot.lot_num """ res = db.execute(sql) logging_sql(logger, sql) From 8534e6d66bcd53ced315251ceec3a198384ded4a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 26 Jun 2023 13:38:23 +0900 Subject: [PATCH 70/90] =?UTF-8?q?feat:=20=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=83=99=E3=83=BC=E3=82=B9=E6=93=8D=E4=BD=9C=E9=83=A8=E5=93=81?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82=E3=83=91=E3=83=A9=E3=83=A1?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E6=8C=87=E5=AE=9A=E3=81=AB=E3=82=88=E3=82=8A?= =?UTF-8?q?=E3=80=81AUTOCOMMIT=E3=81=A7=E6=8E=A5=E7=B6=9A=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=8B=E3=81=A9=E3=81=86=E3=81=8B=E3=82=92=E5=88=86?= =?UTF-8?q?=E5=B2=90=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=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 --- .../laundering/sales_results_laundering.py | 4 +-- ecs/jskult-batch-daily/src/db/database.py | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 530fd9b9..87958e5c 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -1,14 +1,14 @@ +from src.batch.batch_functions import logging_sql from src.db.database import Database from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger -from src.batch.batch_functions import logging_sql from src.system_var import environment logger = get_logger('卸卸販売洗替') def exec(): - db = Database.get_instance() + db = Database.get_instance(autocommit=True) try: db.connect() logger.debug('処理開始') diff --git a/ecs/jskult-batch-daily/src/db/database.py b/ecs/jskult-batch-daily/src/db/database.py index f67a21b9..b9a745be 100644 --- a/ecs/jskult-batch-daily/src/db/database.py +++ b/ecs/jskult-batch-daily/src/db/database.py @@ -13,15 +13,17 @@ logger = get_logger(__name__) class Database: """データベース操作クラス""" __connection: Connection = None - __engine: Engine = None + __transactional_engine: Engine = None + __autocommit_engine: Engine = None __host: str = None __port: str = None __username: str = None __password: str = None __schema: str = None + __autocommit: bool = None __connection_string: str = None - def __init__(self, username: str, password: str, host: str, port: int, schema: str) -> None: + def __init__(self, username: str, password: str, host: str, port: int, schema: str, autocommit: bool = False) -> None: """このクラスの新たなインスタンスを初期化します Args: @@ -30,12 +32,14 @@ class Database: host (str): DBホスト名 port (int): DBポート schema (str): DBスキーマ名 + autocommit(bool): 自動コミットモードで接続するかどうか(Trueの場合、トランザクションの有無に限らず即座にコミットされる). Defaults to False. """ self.__username = username self.__password = password self.__host = host self.__port = int(port) self.__schema = schema + self.__autocommit = autocommit self.__connection_string = URL.create( drivername='mysql+pymysql', @@ -47,16 +51,20 @@ class Database: query={"charset": "utf8mb4"} ) - self.__engine = create_engine( + self.__transactional_engine = create_engine( self.__connection_string, pool_timeout=5, poolclass=QueuePool ) + self.__autocommit_engine = self.__transactional_engine.execution_options(isolation_level='AUTOCOMMIT') + @classmethod - def get_instance(cls): + def get_instance(cls, autocommit=False): """インスタンスを取得します + Args: + autocommit (bool, optional): 自動コミットモードで接続するかどうか(Trueの場合、トランザクションの有無に限らず即座にコミットされる). Defaults to False. Returns: Database: DB操作クラスインスタンス """ @@ -65,7 +73,8 @@ class Database: password=environment.DB_PASSWORD, host=environment.DB_HOST, port=environment.DB_PORT, - schema=environment.DB_SCHEMA + schema=environment.DB_SCHEMA, + autocommit=autocommit ) @retry( @@ -77,12 +86,15 @@ class Database: stop=stop_after_attempt(environment.DB_CONNECTION_MAX_RETRY_ATTEMPT)) def connect(self): """ - DBに接続します。接続に失敗した場合、リトライします。 + DBに接続します。接続に失敗した場合、リトライします。\n + インスタンスのautocommitがTrueの場合、自動コミットモードで接続する。(明示的なトランザクションも無視される) Raises: DBException: 接続失敗 """ try: - self.__connection = self.__engine.connect() + self.__connection = ( + self.__autocommit_engine.connect() if self.__autocommit is True + else self.__transactional_engine.connect()) except Exception as e: raise DBException(e) From 00175d26f7213d912aadecd164898de913736633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Mon, 26 Jun 2023 14:20:17 +0900 Subject: [PATCH 71/90] =?UTF-8?q?feat:=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 --- .../src/batch/laundering/sales_results_laundering.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 530fd9b9..05086e4a 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -4,7 +4,7 @@ from src.logging.get_logger import get_logger from src.batch.batch_functions import logging_sql from src.system_var import environment -logger = get_logger('卸卸販売洗替') +logger = get_logger('卸販売洗替') def exec(): From 07d9f3785353ef33b1e118d9424878df59d45ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 27 Jun 2023 09:33:00 +0900 Subject: [PATCH 72/90] =?UTF-8?q?feat:=20=E4=B8=8D=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9=E7=AD=89=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stored_procedure/src05/sales_lau_upsert.sql | 16 ++++++++-------- .../src05/v_inst_merge_laundering.sql | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 63049f09..5f26b9c8 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -41,7 +41,7 @@ BEGIN internal05.bu_prd_name_contrast_t ( prd_cd, bu_cd, - phm_itm_cd, + phm_itm_cd, pp_start_date, pp_end_date, update_date, @@ -344,14 +344,14 @@ BEGIN AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date LEFT OUTER JOIN src05.com_inst AS ci ON s.v_inst_cd = ci.dcf_dsf_inst_cd - WHERE - (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + WHERE + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') OR ( s.rec_sts_kbn = '0' AND s.err_flg20 != 'M' AND s.v_tran_cd IN (110, 120, 210, 220) AND ( - (s.fcl_exec_kbn NOT IN ('2', '5') AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn != 1)) + (s.fcl_exec_kbn NOT IN ('2', '5') AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn != 1)) OR s.fcl_exec_kbn IS NULL ) ) @@ -427,8 +427,8 @@ BEGIN dwh_upd_dt = SYSDATE() "; SET @upsert_sales_launderning = REPLACE(@upsert_sales_launderning, "$$target_table$$", target_table); - PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; - EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; + PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; + EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 終了' @@ -463,8 +463,8 @@ BEGIN AND tt.row_num = s.row_num "; SET @update_institution_code = REPLACE(@update_institution_code, "$$target_table$$", target_table); - PREPARE update_institution_code_stmt from @update_institution_code; - EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; + PREPARE update_institution_code_stmt from @update_institution_code; + EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 終了' diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 35c4a700..7c1dee91 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -63,10 +63,10 @@ BEGIN WHERE tt.v_inst_cd = vimt.v_inst_cd AND (tt.inst_clas_cd IN ('1', '2', '3')) - "; - SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); - PREPARE update_institution_stmt from @update_institution; - EXECUTE update_institution_stmt; + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 終了' From 6239ef783a21edde213c4c753f8f0fcd40c144b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 27 Jun 2023 14:02:47 +0900 Subject: [PATCH 73/90] =?UTF-8?q?feat:=20=E4=BE=8B=E5=A4=96=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=AE=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=82=AA=E3=83=90=E3=83=BC=E3=83=95=E3=83=AD=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E5=87=A6=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src05/hco_to_mdb_laundering.sql | 20 ++++++++---- .../src05/inst_merge_laundering.sql | 12 +++++-- .../src05/sales_lau_delete.sql | 12 +++++-- .../src05/sales_lau_upsert.sql | 32 +++++++++++-------- .../src05/v_inst_merge_laundering.sql | 12 +++++-- .../src05/whs_org_laundering.sql | 20 ++++++++---- 6 files changed, 72 insertions(+), 36 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql index b3cbfc6e..8201f3bc 100644 --- a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -14,23 +14,29 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A① 開始'); TRUNCATE TABLE internal05.hco_cnv_mdb_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A① 終了'); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A② 開始'); INSERT INTO @@ -74,10 +80,10 @@ BEGIN AND ci.delete_flg = '0' ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A② 終了'); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A③ 開始'); SET @update_institution = " @@ -96,7 +102,7 @@ BEGIN PREPARE update_institution_stmt from @update_institution; EXECUTE update_institution_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A③ 終了'); END diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql index 6a0642a9..05908ca1 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -14,15 +14,21 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_B① 開始'); SET @update_institution = " @@ -53,7 +59,7 @@ BEGIN PREPARE update_institution_stmt from @update_institution; EXECUTE update_institution_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_B① 終了'); END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql index c1610435..8b312d6f 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -14,15 +14,21 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始'); SET @delete_data = " @@ -35,7 +41,7 @@ BEGIN PREPARE delete_data_stmt from @delete_data; EXECUTE delete_data_stmt USING @laundering_period_year; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 5f26b9c8..72a86310 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -15,25 +15,31 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'sales_lau_upsertでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成① 開始' ); TRUNCATE TABLE internal05.bu_prd_name_contrast_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成① 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 開始' ); @@ -65,22 +71,22 @@ BEGIN ppmv.rec_sts_kbn != '9' ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成③ 開始' ); TRUNCATE TABLE internal05.fcl_mst_v_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成③ 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成④ 開始' ); @@ -129,11 +135,11 @@ BEGIN fmv1.rec_sts_kbn != '9' ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成④ 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 開始' ); @@ -430,11 +436,11 @@ BEGIN PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 開始' ); @@ -466,7 +472,7 @@ BEGIN PREPARE update_institution_code_stmt from @update_institution_code; EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 終了' ); diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 7c1dee91..06af3867 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -14,15 +14,21 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 開始' ); @@ -68,7 +74,7 @@ BEGIN PREPARE update_institution_stmt from @update_institution; EXECUTE update_institution_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 終了' ); diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index 65dc9e30..e183d0c8 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -14,25 +14,31 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'whs_org_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替① 開始' ); TRUNCATE TABLE internal05.whs_customer_org_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替① 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替② 開始' ); @@ -91,11 +97,11 @@ BEGIN AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替② 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替③ 開始' ); @@ -115,7 +121,7 @@ BEGIN PREPARE update_organization_stmt from @update_organization; EXECUTE update_organization_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替③ 終了' ); From 3d54ec82599378e1f26793a90aea29237ae7a45f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Tue, 27 Jun 2023 16:21:13 +0900 Subject: [PATCH 74/90] =?UTF-8?q?allon=E3=81=A8alloff=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/function/businessLogicScript.js | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/ecs/jskult-webapp/src/static/function/businessLogicScript.js b/ecs/jskult-webapp/src/static/function/businessLogicScript.js index ee4beb0c..36171aad 100644 --- a/ecs/jskult-webapp/src/static/function/businessLogicScript.js +++ b/ecs/jskult-webapp/src/static/function/businessLogicScript.js @@ -135,26 +135,6 @@ $(function(){ $(".send").prop('disabled',true); }); -// チェックボックス全選択関数 -// 条件:チェックボックスのクラス名に"selectedページ数"というのがついていること -// 条件:ボタンにクラス名 send がついていること -function allOn(){ - var selected = ".selected" + tableCurrentPage + " input.checkbox"; - $(selected).prop("checked", true); - $(".send").prop('disabled',false); -} - -// チェックボックス全解除関数 -// 条件:チェックボックスのクラス名に"selectedページ数"というのがついていること -// 条件:ボタンにクラス名 send がついていること -function allOff(pageCount){ - for (var i = 1; i <= pageCount; i++) { - var selected = ".selected" + i + " input.checkbox"; - $(selected).prop("checked", false); - } - $(".send").prop('disabled',true); -} - // 検索結果のところのボタンをチェックが1個でも付いたら押せるようにして、チェックがなければ押せないようにする関数 // 条件:チェックボックスのクラス名に"selectedページ数"というのがついていること // 条件:ボタンにクラス名 send がついていること From 2d56d8242013621b95dc6f86484e313bf42370a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 29 Jun 2023 10:53:04 +0900 Subject: [PATCH 75/90] =?UTF-8?q?feat:=20=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=80=81=E5=BC=95=E6=95=B0=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=80=81=E4=BE=8B=E5=A4=96=E5=87=A6=E7=90=86?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stored_procedure/src05/hco_to_mdb_laundering.sql | 4 ++-- .../stored_procedure/src05/inst_merge_laundering.sql | 4 ++-- rds_mysql/stored_procedure/src05/sales_lau_delete.sql | 8 +++++--- rds_mysql/stored_procedure/src05/sales_lau_upsert.sql | 9 +++++---- .../stored_procedure/src05/v_inst_merge_laundering.sql | 6 ++---- rds_mysql/stored_procedure/src05/whs_org_laundering.sql | 4 ++-- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql index 8201f3bc..eacd56e9 100644 --- a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql index 05908ca1..39f6e431 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'inst_merge_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql index 8b312d6f..39e8f065 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -7,7 +7,8 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table, + 'laundering_period_year', laundering_period_year); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +19,7 @@ BEGIN 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); @@ -39,7 +40,8 @@ BEGIN "; SET @delete_data = REPLACE(@delete_data, "$$target_table$$", target_table); PREPARE delete_data_stmt from @delete_data; - EXECUTE delete_data_stmt USING @laundering_period_year; + SET @interval_year = laundering_period_year; + EXECUTE delete_data_stmt USING @interval_year; CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 72a86310..56758f18 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -1,6 +1,6 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.sales_lau_upsert(target_table VARCHAR(255), extract_from_date date, - extract_to_date date) +CREATE PROCEDURE src05.sales_lau_upsert(target_table VARCHAR(255), extract_from_date DATE, + extract_to_date DATE) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -8,7 +8,8 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table, 'extract_from_date', + extract_from_date, 'extract_to_date', extract_to_date); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -19,7 +20,7 @@ BEGIN 'sales_lau_upsertでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 06af3867..db50980a 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); @@ -43,8 +43,6 @@ BEGIN prft_cd FROM internal05.v_inst_merge_t - WHERE - (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' ) AS vimt, $$target_table$$ AS tt SET diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index e183d0c8..aad11100 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'whs_org_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); From 901e6e9cd9d238675da904e7fc069e20da0ae4f9 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 14:56:40 +0900 Subject: [PATCH 76/90] =?UTF-8?q?feat:=20=E3=83=A1=E3=83=8B=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E7=94=BB=E9=9D=A2=E3=81=AEdump=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E7=8A=B6=E6=85=8B=E5=8C=BA=E5=88=86=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E5=88=B6=E5=BE=A1=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/menu.py | 2 ++ ecs/jskult-webapp/src/model/db/hdke_tbl.py | 1 + ecs/jskult-webapp/src/model/view/menu_view_model.py | 7 ++++++- ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py | 2 +- ecs/jskult-webapp/src/static/css/menuStyle.css | 2 +- ecs/jskult-webapp/src/system_var/constants.py | 3 +++ ecs/jskult-webapp/src/templates/menu.html | 8 +++++--- 7 files changed, 19 insertions(+), 6 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/menu.py b/ecs/jskult-webapp/src/controller/menu.py index 61a1a3a0..96826fce 100644 --- a/ecs/jskult-webapp/src/controller/menu.py +++ b/ecs/jskult-webapp/src/controller/menu.py @@ -32,6 +32,7 @@ def menu_view( hdke_tbl_record = batch_status_service.hdke_table_record batch_status = hdke_tbl_record.bch_actf + dump_status = hdke_tbl_record.dump_sts_kbn user = UserViewModel( doc_flg=session.doc_flg, inst_flg=session.inst_flg, @@ -40,6 +41,7 @@ def menu_view( ) menu = MenuViewModel( batch_status=batch_status, + dump_status=dump_status, user_model=user ) # セッション書き換え diff --git a/ecs/jskult-webapp/src/model/db/hdke_tbl.py b/ecs/jskult-webapp/src/model/db/hdke_tbl.py index 944581d5..9655c6c1 100644 --- a/ecs/jskult-webapp/src/model/db/hdke_tbl.py +++ b/ecs/jskult-webapp/src/model/db/hdke_tbl.py @@ -5,3 +5,4 @@ from src.model.db.base_db_model import BaseDBModel class HdkeTblModel(BaseDBModel): bch_actf: Optional[str] + dump_sts_kbn: Optional[str] diff --git a/ecs/jskult-webapp/src/model/view/menu_view_model.py b/ecs/jskult-webapp/src/model/view/menu_view_model.py index 647bdec9..7a7970d2 100644 --- a/ecs/jskult-webapp/src/model/view/menu_view_model.py +++ b/ecs/jskult-webapp/src/model/view/menu_view_model.py @@ -3,15 +3,20 @@ from typing import Optional from pydantic import BaseModel from src.model.view.user_view_model import UserViewModel +from src.system_var import constants class MenuViewModel(BaseModel): subtitle: str = 'MeDaCA 機能メニュー' batch_status: Optional[str] + dump_status: Optional[str] user_model: UserViewModel def is_batch_processing(self): - return self.batch_status == '1' + return self.batch_status == constants.BATCH_STATUS_PROCESSING + + def is_backup_processing(self): + return self.dump_status != constants.DUMP_STATUS_UNPROCESSED def is_available_ult_doctor_menu(self): return self.user_model.has_ult_doctor_permission() diff --git a/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py b/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py index 46f5bfcc..967fbbe1 100644 --- a/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py +++ b/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py @@ -6,7 +6,7 @@ logger = get_logger('日付テーブル取得') class HdkeTblRepository(BaseRepository): - FETCH_SQL = "SELECT bch_actf FROM src05.hdke_tbl" + FETCH_SQL = "SELECT bch_actf, dump_sts_kbn FROM src05.hdke_tbl" def fetch_all(self) -> list[HdkeTblModel]: try: diff --git a/ecs/jskult-webapp/src/static/css/menuStyle.css b/ecs/jskult-webapp/src/static/css/menuStyle.css index b1920070..3a07d9fc 100644 --- a/ecs/jskult-webapp/src/static/css/menuStyle.css +++ b/ecs/jskult-webapp/src/static/css/menuStyle.css @@ -37,7 +37,7 @@ body{ font-size: 160%; } -.notUseBioMsg{ +.notUseBioMsg,.notUseMainteMsg{ font-size: 143%; color: red; } diff --git a/ecs/jskult-webapp/src/system_var/constants.py b/ecs/jskult-webapp/src/system_var/constants.py index 899c19e5..b7ffa0e2 100644 --- a/ecs/jskult-webapp/src/system_var/constants.py +++ b/ecs/jskult-webapp/src/system_var/constants.py @@ -1,5 +1,8 @@ import os.path as path +BATCH_STATUS_PROCESSING = '1' +DUMP_STATUS_UNPROCESSED = '0' + BIO_TEMPORARY_FILE_DIR_PATH = path.join(path.curdir, 'src', 'data') BIO_EXCEL_TEMPLATE_FILE_PATH = path.join(BIO_TEMPORARY_FILE_DIR_PATH, 'BioData_template.xlsx') diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index b8026593..bbfca152 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -24,10 +24,12 @@ {% endif %} {% endif %} {% if menu.is_available_master_maintenance_menu() %} - {% if not menu.is_batch_processing() %} - マスターメンテメニュー

+ {% if menu.is_batch_processing() %} +
マスターメンテメニューは
日次バッチ処理中のため利用出来ません
+ {% elif menu.is_backup_processing() %} +
バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテメニューは利用できません
{% else %} -
マスターメンテメニューは
日次バッチ処理中のため利用出来ません
+ マスターメンテメニュー

{% endif %} {% endif %}

Logout From dbe7b3e007f4f89ff962e2e9871029cdd61fab0a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 15:34:33 +0900 Subject: [PATCH 77/90] =?UTF-8?q?feat:=20=E3=83=9E=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=86=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controller/master_mainte.py | 60 +++++++++++++++++++ ecs/jskult-webapp/src/main.py | 4 +- .../view/master_mainte_menu_view_model.py | 5 ++ .../src/services/batch_status_service.py | 16 ++++- ecs/jskult-webapp/src/system_var/constants.py | 4 ++ .../src/templates/masterMainteMenu.html | 25 ++++++++ ecs/jskult-webapp/src/templates/menu.html | 2 +- 7 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 ecs/jskult-webapp/src/controller/master_mainte.py create mode 100644 ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py create mode 100644 ecs/jskult-webapp/src/templates/masterMainteMenu.html diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py new file mode 100644 index 00000000..ad5eb3e1 --- /dev/null +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -0,0 +1,60 @@ +from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi.responses import HTMLResponse +from starlette import status + +from src.depends.services import get_service +from src.model.internal.session import UserSession +from src.model.view.master_mainte_menu_view_model import \ + MasterMainteMenuViewModel +from src.router.session_router import AuthenticatedRoute +from src.services.batch_status_service import BatchStatusService +from src.services.session_service import set_session +from src.system_var import constants +from src.templates import templates + +router = APIRouter() +router.route_class = AuthenticatedRoute + +######################### +# Views # +######################### + + +@router.get('/masterMainteMenu', response_class=HTMLResponse) +def menu_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + menu = MasterMainteMenuViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'masterMainteMenu.html', + { + 'request': request, + 'menu': menu + }, + headers={'session_key': session.session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index 2aca351c..8717c7cb 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -6,7 +6,7 @@ from starlette import status import src.static as static from src.controller import (bio, bio_download, healthcheck, login, logout, - menu, root, ultmarc) + master_mainte, menu, root, ultmarc) from src.controller.sample_send_file import router as sample_router from src.core import tasks from src.error.exception_handler import http_exception_handler @@ -31,6 +31,8 @@ app.include_router(ultmarc.router, prefix='/ultmarc') # 生物由来のダウンロード用APIルーター。 # クライアントから非同期呼出しされるため、共通ルーターとは異なる扱いとする。 app.include_router(bio_download.router, prefix='/bio') +# マスタメンテ +app.include_router(master_mainte.router, prefix='/masterMainte') # ヘルスチェック用のルーター app.include_router(healthcheck.router, prefix='/healthcheck') diff --git a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py new file mode 100644 index 00000000..c8ff644a --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class MasterMainteMenuViewModel(BaseModel): + subtitle: str = 'MeDaCA 機能メニュー' diff --git a/ecs/jskult-webapp/src/services/batch_status_service.py b/ecs/jskult-webapp/src/services/batch_status_service.py index c9f6c6a7..ffb57af0 100644 --- a/ecs/jskult-webapp/src/services/batch_status_service.py +++ b/ecs/jskult-webapp/src/services/batch_status_service.py @@ -4,6 +4,7 @@ from src.model.db.hdke_tbl import HdkeTblModel from src.repositories.base_repository import BaseRepository from src.repositories.hdke_tbl_repository import HdkeTblRepository from src.services.base_service import BaseService +from src.system_var import constants class BatchStatusService(BaseService): @@ -25,17 +26,30 @@ class BatchStatusService(BaseService): @property def hdke_table_record(self) -> HdkeTblModel: + """日付テーブルを取得する""" + # 日付マスタのレコードがあることを確認 self.__assert_record_exists() # 日付テーブルのレコードは必ず1件 return self.__hdke_table_record[0] def is_batch_processing(self): + """バッチ処理中かどうかを判定する""" + # 日付マスタのレコードがあることを確認 self.__assert_record_exists() - return self.hdke_table_record.bch_actf == '1' # TODO: 定数化する + return self.hdke_table_record.bch_actf == constants.BATCH_STATUS_PROCESSING + + def is_dump_processing(self): + """dump処理処理中かどうかを判定する""" + + # 日付マスタのレコードがあることを確認 + self.__assert_record_exists() + return self.hdke_table_record.dump_sts_kbn != constants.DUMP_STATUS_UNPROCESSED def __assert_record_exists(self): + """日付テーブルが有ることを保証する""" + # 日付マスタのレコードがない場合は例外とする if len(self.__hdke_table_record) == 0: raise DBException('日付テーブルのレコードが存在しません') diff --git a/ecs/jskult-webapp/src/system_var/constants.py b/ecs/jskult-webapp/src/system_var/constants.py index b7ffa0e2..604acfe5 100644 --- a/ecs/jskult-webapp/src/system_var/constants.py +++ b/ecs/jskult-webapp/src/system_var/constants.py @@ -1,6 +1,8 @@ import os.path as path +# 日付テーブル.バッチ処理ステータス:未処理 BATCH_STATUS_PROCESSING = '1' +# 日付テーブル.dump取得状態区分:未処理 DUMP_STATUS_UNPROCESSED = '0' BIO_TEMPORARY_FILE_DIR_PATH = path.join(path.curdir, 'src', 'data') @@ -115,6 +117,7 @@ LOGOUT_REASON_DO_LOGOUT = 'do_logout' LOGOUT_REASON_LOGIN_ERROR = 'login_error' LOGOUT_REASON_BATCH_PROCESSING = 'batch_processing' LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE = 'batch_processing_ult' +LOGOUT_REASON_BACKUP_PROCESSING = 'dump_processing' LOGOUT_REASON_NOT_LOGIN = 'not_login' LOGOUT_REASON_SESSION_EXPIRED = 'session_expired' LOGOUT_REASON_DB_ERROR = 'db_error' @@ -125,6 +128,7 @@ LOGOUT_REASON_MESSAGE_MAP = { LOGOUT_REASON_LOGIN_ERROR: '存在しないユーザー、
またはパスワードが違います。', LOGOUT_REASON_BATCH_PROCESSING: '日次バッチ処理中なので、
生物由来データ参照は使用出来ません。', LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE: '日次バッチ処理中のため、
マスタ-メンテは使用出来ません。', + LOGOUT_REASON_BACKUP_PROCESSING: 'バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテは使用できません', LOGOUT_REASON_NOT_LOGIN: 'Loginしてからページにアクセスしてください。', LOGOUT_REASON_SESSION_EXPIRED: 'セッションが切れています。
再度Loginしてください。', LOGOUT_REASON_DB_ERROR: 'DB接続に失敗しました。
再度Loginするか、
管理者にお問い合わせください。', diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html new file mode 100644 index 00000000..147ab2da --- /dev/null +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -0,0 +1,25 @@ + + + + {% with subtitle = menu.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + + diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index bbfca152..59eb8a74 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -29,7 +29,7 @@ {% elif menu.is_backup_processing() %}
バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテメニューは利用できません
{% else %} - マスターメンテメニュー

+ マスターメンテメニュー

{% endif %} {% endif %}

Logout From af13fa66553ac49d53448a8176b03a7ccbf3e223 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:13:04 +0900 Subject: [PATCH 78/90] =?UTF-8?q?fix:=20=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E9=80=9A=E7=9F=A5=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?SSO=E3=81=AF=E9=80=9A=E7=9F=A5=E3=81=95=E3=81=9B=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 09032af5..6d867645 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,10 +69,10 @@ def login( try: jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) except JWTTokenVerifyException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) verified_token = jwt_token.verify_token() @@ -126,7 +126,7 @@ def sso_authorize( # トークン検証 verified_token = jwt_token.verify_token() except JWTTokenVerifyException as e: - logger.exception(e) + logger.exception(f'SSOログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) # トークンからユーザーIDを取得 From cb1db32d2dfc05e8cf1fb57865018a250a38468d Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:39:12 +0900 Subject: [PATCH 79/90] =?UTF-8?q?fix:=20=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=81=AB=E3=83=AC=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=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 --- ecs/jskult-webapp/src/controller/login.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 6d867645..00e5cb75 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -79,6 +79,10 @@ def login( # 普通の認証だと、`cognito:username`に入る。 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') @@ -132,6 +136,11 @@ def sso_authorize( # トークンからユーザーIDを取得 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') From ccd4ff79a9eb8033abd0aefe59dda2b727a1f9ed Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:13:04 +0900 Subject: [PATCH 80/90] =?UTF-8?q?fix:=20=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E9=80=9A=E7=9F=A5=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?SSO=E3=81=AF=E9=80=9A=E7=9F=A5=E3=81=95=E3=81=9B=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 09032af5..6d867645 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,10 +69,10 @@ def login( try: jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) except JWTTokenVerifyException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) verified_token = jwt_token.verify_token() @@ -126,7 +126,7 @@ def sso_authorize( # トークン検証 verified_token = jwt_token.verify_token() except JWTTokenVerifyException as e: - logger.exception(e) + logger.exception(f'SSOログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) # トークンからユーザーIDを取得 From d76b8d1c9332550239effe6e0c6d5c88b0aed986 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:39:12 +0900 Subject: [PATCH 81/90] =?UTF-8?q?fix:=20=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=81=AB=E3=83=AC=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=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 --- ecs/jskult-webapp/src/controller/login.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 6d867645..00e5cb75 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -79,6 +79,10 @@ def login( # 普通の認証だと、`cognito:username`に入る。 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') @@ -132,6 +136,11 @@ def sso_authorize( # トークンからユーザーIDを取得 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') From d18b12a0f62f87dcfafaf2c397b00f6f8a986e97 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 17:13:35 +0900 Subject: [PATCH 82/90] =?UTF-8?q?Revert=20"fix:=20=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=86=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E9=80=9A=E7=9F=A5=E3=81=8C=E5=87=BA=E3=81=A6?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=80=82SSO=E3=81=AF=E9=80=9A=E7=9F=A5=E3=81=95=E3=81=9B?= =?UTF-8?q?=E3=82=8B=E3=80=82"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit af13fa66553ac49d53448a8176b03a7ccbf3e223. --- ecs/jskult-webapp/src/controller/login.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 00e5cb75..d8e7d569 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,10 +69,10 @@ def login( try: jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: - logger.info(f'ログイン失敗:{e}') + logger.exception(e) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) except JWTTokenVerifyException as e: - logger.info(f'ログイン失敗:{e}') + logger.exception(e) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) verified_token = jwt_token.verify_token() @@ -130,7 +130,7 @@ def sso_authorize( # トークン検証 verified_token = jwt_token.verify_token() except JWTTokenVerifyException as e: - logger.exception(f'SSOログイン失敗:{e}') + logger.exception(e) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) # トークンからユーザーIDを取得 From 4c3339fc24c68c707e4539efd60b0ec56eb811f8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 17:13:41 +0900 Subject: [PATCH 83/90] =?UTF-8?q?Revert=20"fix:=20=E3=83=A6=E3=83=BC?= =?UTF-8?q?=E3=82=B6=E3=83=9E=E3=82=B9=E3=82=BF=E3=81=AB=E3=83=AC=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cb1db32d2dfc05e8cf1fb57865018a250a38468d. --- ecs/jskult-webapp/src/controller/login.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index d8e7d569..09032af5 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -79,10 +79,6 @@ def login( # 普通の認証だと、`cognito:username`に入る。 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) - # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする - if user_record is None: - logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') @@ -136,11 +132,6 @@ def sso_authorize( # トークンからユーザーIDを取得 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) - - # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする - if user_record is None: - logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') From c5d66c6d25e99463ba7f01a2a1259557cbb2d2ab Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Jun 2023 10:44:00 +0900 Subject: [PATCH 84/90] =?UTF-8?q?fix:=20=E7=94=BB=E9=9D=A2=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E5=8F=AF=E5=90=A6=E3=83=95=E3=83=A9=E3=82=B0=E3=81=AF?= =?UTF-8?q?NULL=E3=81=8C=E8=A8=B1=E5=AE=B9=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=80=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/model/view/user_view_model.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ecs/jskult-webapp/src/model/view/user_view_model.py b/ecs/jskult-webapp/src/model/view/user_view_model.py index 55f1528a..5b523b4c 100644 --- a/ecs/jskult-webapp/src/model/view/user_view_model.py +++ b/ecs/jskult-webapp/src/model/view/user_view_model.py @@ -4,10 +4,10 @@ from pydantic import BaseModel class UserViewModel(BaseModel): - bio_flg: str # AUTH_FLG1 - doc_flg: str # AUTH_FLG2 - inst_flg: str # AUTH_FLG3 - master_mainte_flg: str # AUTH_FLG4 + bio_flg: Optional[str] # AUTH_FLG1 + doc_flg: Optional[str] # AUTH_FLG2 + inst_flg: Optional[str] # AUTH_FLG3 + master_mainte_flg: Optional[str] # AUTH_FLG4 user_flg: Optional[str] # MNTUSER_FLG def has_ult_doctor_permission(self): From 646dd4f7d9b1f606b5c423dd0e5aef9a9bc1dba3 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Jun 2023 14:57:34 +0900 Subject: [PATCH 85/90] =?UTF-8?q?fix:=20=E6=96=87=E8=A8=80=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/model/view/master_mainte_menu_view_model.py | 2 +- ecs/jskult-webapp/src/templates/masterMainteMenu.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py index c8ff644a..2b1629b1 100644 --- a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py +++ b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py @@ -2,4 +2,4 @@ from pydantic import BaseModel class MasterMainteMenuViewModel(BaseModel): - subtitle: str = 'MeDaCA 機能メニュー' + subtitle: str = 'MeDaCA マスターメンテメニュー' diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html index 147ab2da..987615bf 100644 --- a/ecs/jskult-webapp/src/templates/masterMainteMenu.html +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -7,7 +7,7 @@
-

MeDaCA
マスタメンテメニュー

+

MeDaCA
マスターメンテメニュー



施設担当者データCSVアップロード

From 535ae8fa482d601da6d7e6154edecc2aeda37d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 30 Jun 2023 15:15:55 +0900 Subject: [PATCH 86/90] =?UTF-8?q?feat:=20=E4=BB=95=E6=A7=98=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrate_dcf_inst_merge.py | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index ab4d107a..816a0545 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -55,12 +55,14 @@ def _set_disabled_dct_inst_merge(db: Database): _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], '戻し') -def _select_ult_ident_presc_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: - # 納入先処方元マスタから、DCF施設コードに対応した領域コードの取得 +def _select_ult_ident_presc_dcf_inst_cd(db: Database, dcf_inst_cd: str) -> list[dict]: + # 納入先処方元マスタから、DCF施設コードに対応したレコードの取得 try: sql = """ SELECT - ta_cd + ta_cd, + ult_ident_cd, + ratio FROM src05.ult_ident_presc WHERE @@ -70,9 +72,9 @@ def _select_ult_ident_presc_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: params = {'dcf_inst_cd': dcf_inst_cd} ult_ident_presc_ta_cd_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('納入先処方元マスタから領域コードの取得に成功') + logger.info('納入先処方元マスタからDCF施設コードに対応したレコードの取得に成功') except Exception as e: - logger.debug('納入先処方元マスタから領域コードの取得に失敗') + logger.debug('納入先処方元マスタからDCF施設コードに対応したレコードの取得に失敗') raise e return ult_ident_presc_ta_cd_records @@ -83,11 +85,12 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict logger.info('納入先処方元マスタの登録 開始') for data_inst_cnt, enabled_merge_record in enumerate(enabled_dst_inst_merge_records, start=1): tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) - ult_ident_presc_ta_cd_records = _select_ult_ident_presc_ta_cd(db, enabled_merge_record['dcf_inst_cd']) - for ult_ident_presc_ta_cd_record in ult_ident_presc_ta_cd_records: - ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], + ult_ident_presc_source_records = _select_ult_ident_presc_dcf_inst_cd(db, enabled_merge_record['dcf_inst_cd']) + for ult_ident_presc_source_record in ult_ident_presc_source_records: + ult_ident_presc_records = _select_ult_ident_presc(db, + enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd'], - ult_ident_presc_ta_cd_record['ta_cd']) + ult_ident_presc_source_record) for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') # 処方元コード=重複時相手先コードが発生した場合 @@ -554,7 +557,8 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: return emp_chg_inst_records -def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]: +def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, + ult_ident_presc_row: dict) -> list[dict]: # ult_ident_prescからSELECT try: sql = """ @@ -572,6 +576,8 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_ WHERE uipopp.presc_cd = :dup_opp_cd AND uipopp.ta_cd = :ta_cd + AND uipopp.ult_ident_cd = :ult_ident_cd + AND uipopp.ratio = :ratio ) AS opp_count FROM src05.ult_ident_presc AS uip @@ -580,7 +586,13 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_ AND uip.ta_cd = :ta_cd AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date """ - params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd} + params = { + 'dcf_inst_cd': dcf_inst_cd, + 'dup_opp_cd': dup_opp_cd, + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'] + } ult_ident_presc_records = db.execute_select(sql, params) logging_sql(logger, sql) logger.info('納入先処方元マスタの取得 成功') From ae6aa29994fa8f5b14f6e272c8c4c56c81760231 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Jun 2023 15:26:24 +0900 Subject: [PATCH 87/90] =?UTF-8?q?feat:=20=E5=90=84=E3=83=9E=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=A1=E3=83=B3=E3=83=86=E7=94=BB=E9=9D=A2=E3=81=AE?= =?UTF-8?q?=E5=81=B4=E3=81=A0=E3=81=91=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controller/master_mainte.py | 125 ++++++++++++++++++ .../view/inst_emp_csv_download_view_model.py | 5 + .../view/inst_emp_csv_upload_view_model.py | 5 + .../model/view/table_override_view_model.py | 5 + .../src/templates/instEmpCsvDL.html | 13 ++ .../src/templates/instEmpCsvUL.html | 13 ++ .../src/templates/masterMainteMenu.html | 2 +- .../src/templates/tableOverride.html | 13 ++ 8 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py create mode 100644 ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py create mode 100644 ecs/jskult-webapp/src/model/view/table_override_view_model.py create mode 100644 ecs/jskult-webapp/src/templates/instEmpCsvDL.html create mode 100644 ecs/jskult-webapp/src/templates/instEmpCsvUL.html create mode 100644 ecs/jskult-webapp/src/templates/tableOverride.html diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py index ad5eb3e1..b8b8e087 100644 --- a/ecs/jskult-webapp/src/controller/master_mainte.py +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -4,8 +4,13 @@ from starlette import status from src.depends.services import get_service from src.model.internal.session import UserSession +from src.model.view.inst_emp_csv_download_view_model import \ + InstEmpCsvDownloadViewModel +from src.model.view.inst_emp_csv_upload_view_model import \ + InstEmpCsvUploadViewModel from src.model.view.master_mainte_menu_view_model import \ MasterMainteMenuViewModel +from src.model.view.table_override_view_model import TableOverrideViewModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.session_service import set_session @@ -58,3 +63,123 @@ def menu_view( headers={'session_key': session.session_key} ) return templates_response + + +@router.get('/instEmpCsvUL', response_class=HTMLResponse) +def inst_emp_csv_upload_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + view_model = InstEmpCsvUploadViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'instEmpCsvUL.html', + { + 'request': request, + 'view': view_model + }, + headers={'session_key': session.session_key} + ) + return templates_response + + +@router.get('/instEmpCsvDL', response_class=HTMLResponse) +def new_inst_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + view_model = InstEmpCsvDownloadViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'instEmpCsvDL.html', + { + 'request': request, + 'view': view_model + }, + headers={'session_key': session.session_key} + ) + return templates_response + + +@router.get('/tableOverride', response_class=HTMLResponse) +def table_override_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + view_model = TableOverrideViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'tableOverride.html', + { + 'request': request, + 'view': view_model + }, + headers={'session_key': session.session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py b/ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py new file mode 100644 index 00000000..220294ba --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class InstEmpCsvDownloadViewModel(BaseModel): + subtitle: str = '施設担当者データCSVダウンロード' diff --git a/ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py b/ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py new file mode 100644 index 00000000..64bde407 --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class InstEmpCsvUploadViewModel(BaseModel): + subtitle: str = '施設担当者データCSVアップロード' diff --git a/ecs/jskult-webapp/src/model/view/table_override_view_model.py b/ecs/jskult-webapp/src/model/view/table_override_view_model.py new file mode 100644 index 00000000..e03b1fd0 --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/table_override_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class TableOverrideViewModel(BaseModel): + subtitle: str = 'テーブル上書きコピー' diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvDL.html b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html new file mode 100644 index 00000000..07712d73 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html @@ -0,0 +1,13 @@ + + + + {% with subtitle = view.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + +

施設担当者データCSVダウンロード

+ + diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvUL.html b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html new file mode 100644 index 00000000..bdd305d8 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html @@ -0,0 +1,13 @@ + + + + {% with subtitle = view.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + +

施設担当者データCSVアップロード

+ + diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html index 987615bf..957279fa 100644 --- a/ecs/jskult-webapp/src/templates/masterMainteMenu.html +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -10,7 +10,7 @@

MeDaCA
マスターメンテメニュー



- 施設担当者データCSVアップロード

+ 施設担当者データCSVアップロード

施設担当者データCSVダウンロード

diff --git a/ecs/jskult-webapp/src/templates/tableOverride.html b/ecs/jskult-webapp/src/templates/tableOverride.html new file mode 100644 index 00000000..272cd0cd --- /dev/null +++ b/ecs/jskult-webapp/src/templates/tableOverride.html @@ -0,0 +1,13 @@ + + + + {% with subtitle = view.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + +

テーブル上書きコピー

+ + From 3bf951c632da508bbfdf8435bf5cf71c2cc6e137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 30 Jun 2023 16:55:31 +0900 Subject: [PATCH 88/90] =?UTF-8?q?feat:=20=E4=BE=8B=E5=A4=96=E5=87=A6?= =?UTF-8?q?=E7=90=86=E4=BF=AE=E6=AD=A3=E3=81=AE=E6=A8=AA=E5=B1=95=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src05/inst_merge_t_create.sql | 118 ++++++++-------- .../src05/v_inst_merge_t_create.sql | 130 +++++++++--------- 2 files changed, 130 insertions(+), 118 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql b/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql index 74472fcc..b825ac53 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql @@ -2,69 +2,75 @@ CREATE PROCEDURE src05.inst_merge_t_create() SQL SECURITY INVOKER BEGIN - -- スキーマ名 - DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); - -- プロシージャ名 - DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_t_create'; - -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_t_create'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); - -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION - BEGIN - GET DIAGNOSTICS CONDITION 1 - @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, - 'inst_merge_t_createでエラーが発生', @error_state, @error_msg); - SIGNAL SQLSTATE '45000' - SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; - END; + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'inst_merge_t_createでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') + ELSE @error_msg + END + ); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; - SET @error_state = NULL, @error_msg = NULL; + SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 開始' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 開始' + ); - TRUNCATE TABLE internal05.inst_merge_t; + TRUNCATE TABLE internal05.inst_merge_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 終了' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 終了' + ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 開始' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 開始' + ); - INSERT INTO - internal05.inst_merge_t ( - dcf_dsf_inst_cd, - dup_opp_cd, - form_inst_name_kanji, - form_inst_name_kana, - inst_addr, - prefc_cd - ) - SELECT - dim.dcf_inst_cd, - dim.dcf_inst_cd_new, - ci.form_inst_name_kanji, - ci.form_inst_name_kana, - ci.inst_addr, - ci.prefc_cd - FROM - src05.dcf_inst_merge dim - LEFT OUTER JOIN src05.com_inst ci - ON dim.dcf_inst_cd_new = ci.dcf_dsf_inst_cd - AND ci.delete_flg = '0' - WHERE - dim.muko_flg = '0' - AND dim.dcf_inst_cd_new IS NOT NULL - AND dim.enabled_flg = 'Y' - AND src05.to_date_yyyymm01(dim.tekiyo_month) <= src05.get_syor_date(); + INSERT INTO + internal05.inst_merge_t ( + dcf_dsf_inst_cd, + dup_opp_cd, + form_inst_name_kanji, + form_inst_name_kana, + inst_addr, + prefc_cd + ) + SELECT + dim.dcf_inst_cd, + dim.dcf_inst_cd_new, + ci.form_inst_name_kanji, + ci.form_inst_name_kana, + ci.inst_addr, + ci.prefc_cd + FROM + src05.dcf_inst_merge AS dim + LEFT OUTER JOIN src05.com_inst AS ci + ON dim.dcf_inst_cd_new = ci.dcf_dsf_inst_cd + AND ci.delete_flg = '0' + WHERE + dim.muko_flg = '0' + AND dim.dcf_inst_cd_new IS NOT NULL + AND dim.enabled_flg = 'Y' + AND src05.to_date_yyyymm01(dim.tekiyo_month) <= src05.get_syor_date(); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 終了' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 終了' + ); END diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql index 6a6f9dd7..1c75c4ea 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql @@ -2,75 +2,81 @@ CREATE PROCEDURE src05.v_inst_merge_t_create() SQL SECURITY INVOKER BEGIN - -- スキーマ名 - DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); - -- プロシージャ名 - DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_t_create'; - -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_t_create'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); - -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION - BEGIN - GET DIAGNOSTICS CONDITION 1 - @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, - 'v_inst_merge_t_createでエラーが発生', @error_state, @error_msg); - SIGNAL SQLSTATE '45000' - SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; - END; + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'v_inst_merge_t_createでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') + ELSE @error_msg + END + ); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; - SET @error_state = NULL, @error_msg = NULL; + SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成① 開始'); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成① 開始'); - TRUNCATE TABLE internal05.v_inst_merge_t; + TRUNCATE TABLE internal05.v_inst_merge_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成① 終了'); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成① 終了'); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成② 開始'); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成② 開始'); - INSERT INTO - internal05.v_inst_merge_t ( - v_inst_cd, - v_inst_cd_merge, - fcl_name, - fcl_kn_name, - fmt_addr, - prft_cd, - fcl_type - ) - SELECT - vhmv.v_inst_cd, - vhmv.v_inst_cd_merg, - fmv.fcl_name, - fmv.fcl_kn_name, - fmv.fmt_addr, - fmv.prft_cd, - fmv.fcl_type - FROM - src05.vop_hco_merge_v vhmv, - src05.fcl_mst_v fmv - INNER JOIN ( - SELECT - v_inst_cd, - MAX(sub_num) AS sno - FROM - src05.fcl_mst_v - GROUP BY - v_inst_cd - ) max_sno_fmv - ON fmv.v_inst_cd = max_sno_fmv.v_inst_cd - AND fmv.sub_num = max_sno_fmv.sno - WHERE - vhmv.v_inst_cd_merg = fmv.v_inst_cd - AND STR_TO_DATE(vhmv.apply_dt, '%Y-%m-%d') <= src05.get_syor_date() - AND fmv.rec_sts_kbn != '9'; + INSERT INTO + internal05.v_inst_merge_t ( + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd, + fcl_type + ) + SELECT + vhmv.v_inst_cd, + vhmv.v_inst_cd_merg, + fmv.fcl_name, + fmv.fcl_kn_name, + fmv.fmt_addr, + fmv.prft_cd, + fmv.fcl_type + FROM + src05.vop_hco_merge_v AS vhmv, + src05.fcl_mst_v AS fmv + INNER JOIN ( + SELECT + v_inst_cd, + MAX(sub_num) AS sno + FROM + src05.fcl_mst_v + GROUP BY + v_inst_cd + ) AS max_sno_fmv + ON fmv.v_inst_cd = max_sno_fmv.v_inst_cd + AND fmv.sub_num = max_sno_fmv.sno + WHERE + vhmv.v_inst_cd_merg = fmv.v_inst_cd + AND STR_TO_DATE(vhmv.apply_dt, '%Y-%m-%d') <= src05.get_syor_date() + AND fmv.rec_sts_kbn != '9'; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成② 終了' ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成② 終了' ); END From 788e13f1da8d60dbfeefffadaed2f758e96ed785 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 3 Jul 2023 10:31:14 +0900 Subject: [PATCH 89/90] =?UTF-8?q?refactor:=20=E9=96=A2=E6=95=B0=E5=90=8D?= =?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/jskult-webapp/src/controller/master_mainte.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py index b8b8e087..ea972ad6 100644 --- a/ecs/jskult-webapp/src/controller/master_mainte.py +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -106,7 +106,7 @@ def inst_emp_csv_upload_view( @router.get('/instEmpCsvDL', response_class=HTMLResponse) -def new_inst_view( +def inst_emp_csv_download_view( request: Request, batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): From 3573bf08618362c6e2e5192424a9180a6c7e06e3 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 3 Jul 2023 10:54:06 +0900 Subject: [PATCH 90/90] =?UTF-8?q?style:=20CSS=E7=A7=BB=E6=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/static/css/masterMainte.css | 164 ++++++++++++++++++ .../src/templates/instEmpCsvDL.html | 3 +- .../src/templates/instEmpCsvUL.html | 2 +- .../src/templates/tableOverride.html | 3 +- 4 files changed, 167 insertions(+), 5 deletions(-) create mode 100644 ecs/jskult-webapp/src/static/css/masterMainte.css diff --git a/ecs/jskult-webapp/src/static/css/masterMainte.css b/ecs/jskult-webapp/src/static/css/masterMainte.css new file mode 100644 index 00000000..a59c1681 --- /dev/null +++ b/ecs/jskult-webapp/src/static/css/masterMainte.css @@ -0,0 +1,164 @@ +body{ + background-color: LightCyan; + font-family : "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; +} + +h1{ + margin-left : 1%; +} + + +/*ヘッダー*/ +.headerTable{ + width: 100%; +} + +.headerTdLeft{ + width: 80%; +} + +.headerTdRight{ + text-align: right; + padding-right: 2%; + width: 20%; +} + +.buttonSize{ + width: 85px; +} + +/*////////////////////////*/ +/*施設担当者データCSVダウンロード*/ +/*////////////////////////*/ +.searchColumnTd{ + width: 14%; +} + +.searchTextboxTd{ + width: 18%; +} + +.searchTable{ + margin-left: 3%; + margin-right: 3%; + margin-bottom: 1%; + padding-bottom: 1%; + border-bottom: solid 1px gray; + width: 94%; +} + +.searchLabelTd{ + text-align: right; + width: 10%; + +} + +.searchInputTd{ + width: 19%; +} + +.searchTextbox{ + width: 90%; + margin-left: 2.5%; + margin-right: 2.5%; + margin-top: 0.8%; + margin-bottom: 0.8%; +} + +.searchDateTextbox{ + width: 37%; + margin-left: 2.5%; + margin-right: 2.5%; + margin-top: 0.8%; + margin-bottom: 0.8%; +} + +.searchButtonTd{ + text-align: right; + padding-top: 1%; +} + + +.csvOutputMessage{ + margin-left: 3%; +} + +.errorColor{ + color: red; +} + +/*//////////////////////////*/ +/*施設担当者データExcelアップロード*/ +/*//////////////////////////*/ +.inputTable{ + margin-left: 3%; + margin-right: 3%; + margin-bottom: 1%; + padding-bottom: 1%; + border-bottom: solid 1px gray; + width: 94%; +} + +.inputLabelTd{ + width: 10%; +} + +.inputTd{ + width:20%; +} + +.inputButtonTd{ + width: 50%; + text-align: right; +} + +.dataCntDisp{ + text-align: right; + margin-right: 3%; +} + +table.inputData { + font-family:arial; + background-color: #CDCDCD; + font-size: 12pt; + text-align: left; + white-space: nowrap; + border: 0.1px solid silver; + padding: 4px; + padding-right: 20px; + border-collapse: collapse; + margin-left: 3%; + width: 94%; +} +table.inputData tbody th { + color: #3D3D3D; + padding: 4px; + background-color: #e6EEEE; + border: 0.1px solid silver; + vertical-align: top; +} + +table.inputData tbody td { + color: #3D3D3D; + padding: 4px; + background-color: #FFF; + border: 0.1px solid silver; + vertical-align: top; +} + +.footerMsg{ + margin-left: 3%; +} + + +/*//////////////////////////*/ +/*データ上書きコピー */ +/*//////////////////////////*/ +.tableOverRide{ + margin-right: 3%; + margin-left: 3%; + margin-bottom: 2%; + border-bottom: solid 1px gray; + width: 94%; +} + diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvDL.html b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html index 07712d73..7e84fd4c 100644 --- a/ecs/jskult-webapp/src/templates/instEmpCsvDL.html +++ b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html @@ -4,8 +4,7 @@ {% with subtitle = view.subtitle %} {% include '_header.html' %} {% endwith %} - - +

施設担当者データCSVダウンロード

diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvUL.html b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html index bdd305d8..9ec84207 100644 --- a/ecs/jskult-webapp/src/templates/instEmpCsvUL.html +++ b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html @@ -5,7 +5,7 @@ {% include '_header.html' %} {% endwith %} - +

施設担当者データCSVアップロード

diff --git a/ecs/jskult-webapp/src/templates/tableOverride.html b/ecs/jskult-webapp/src/templates/tableOverride.html index 272cd0cd..e473b469 100644 --- a/ecs/jskult-webapp/src/templates/tableOverride.html +++ b/ecs/jskult-webapp/src/templates/tableOverride.html @@ -4,8 +4,7 @@ {% with subtitle = view.subtitle %} {% include '_header.html' %} {% endwith %} - - +

テーブル上書きコピー