Sơ đồ
flowchart TD
Start([Người dùng click CSVインポート]) --> SelectFile[Chọn file CSV]
SelectFile --> Upload[Upload file lên server]
Upload --> ReadHeader[Đọc header dòng đầu tiên]
ReadHeader --> CheckID{Header có cột ID}
CheckID -->|Có| UpdateMode[Update Mode]
CheckID -->|Không| InsertMode[Insert Mode]
UpdateMode --> ValidateHeaderUpdate[Kiểm tra header khớp mẫu có ID]
InsertMode --> ValidateHeaderInsert[Kiểm tra header khớp mẫu không ID]
ValidateHeaderUpdate -->|Không khớp| ErrorHeader[Lỗi Header không khớp]
ValidateHeaderInsert -->|Không khớp| ErrorHeader
ValidateHeaderUpdate -->|Khớp| ValidateFile[Kiểm tra file CSV]
ValidateHeaderInsert -->|Khớp| ValidateFile
ValidateFile --> CheckDelimiter{CSV phân cách bằng dấu phẩy}
CheckDelimiter -->|Không| ErrorDelimiter[Lỗi CSVファイルはカンマ区切りで作成してください]
CheckDelimiter -->|Có| CheckRecordSize{Số dòng <= giới hạn}
CheckRecordSize -->|Vượt quá| ErrorSize[Lỗi データ数が importLimit 件を超えています]
CheckRecordSize -->|OK| CreateTask[Tạo batch task]
CreateTask --> SaveFile[Lưu file tạm thời PlaceCalendar_taskId.csv]
SaveFile --> CheckRunningTask{Có task import đang chạy}
CheckRunningTask -->|Có| WaitTask[Chờ task hiện tại xong]
CheckRunningTask -->|Không| ProcessImport[Bắt đầu import]
WaitTask --> ProcessImport
ProcessImport --> ReadRecords[Đọc từng dòng dữ liệu]
ReadRecords --> ValidateRecord{Validate từng record}
ValidateRecord -->|Có lỗi| WriteErrorFile[Ghi vào file lỗi]
ValidateRecord -->|Không lỗi| CheckMode{Loại import}
CheckMode -->|Insert| InsertDB[Thêm mới vào DB]
CheckMode -->|Update| UpdateDB[Cập nhật DB]
InsertDB --> NextRecord{Còn dòng}
UpdateDB --> NextRecord
WriteErrorFile --> NextRecord
NextRecord -->|Có| ReadRecords
NextRecord -->|Không| CheckError{Có lỗi không}
CheckError -->|Có| ShowError[Hiển thị lỗi và download file lỗi]
CheckError -->|Không| ShowSuccess[インポート結果はCSV実行履歴画面でご確認ください]
ErrorHeader --> End([Kết thúc])
ErrorDelimiter --> End
ErrorSize --> End
ShowError --> End
ShowSuccess --> End
style Start fill:#e1f5ff
style End fill:#e1f5ff
style UpdateMode fill:#fff4e1
style InsertMode fill:#e1ffe1
style ErrorHeader fill:#ffe1e1
style ErrorDelimiter fill:#ffe1e1
style ErrorSize fill:#ffe1e1
style ShowError fill:#ffe1e1
style ShowSuccess fill:#e1ffe1
style InsertDB fill:#e1ffe1
style UpdateDB fill:#fff4e1