14.07.2014 БД и программа просмотра "Фотоархив". - Спецификация не закончена. Смысл работы: - организовать централизованное хранение архива первичных документов участков УУ в электронном виде; - упростить процедуру передачи их в суд; - упростить поиск документов. Пользователи, сценарии работы: ТЕХ: Техник на участке УУ, хочет: - вести и иметь доступ к архиву документов по физ и юр лицам РЭС; - нафоткать и насканить документов, упихнуть их в базу: - фоткает, подключает фотик по usb; - сканит, складывает результаты в каталог; - в программе выбирает участок, месяц, юр(физ) лицо, ном. дог (нас. пункт), нажимает "закачать файл"; - ждёт, долго ждёт, пока всё закачается в базу. - найти обходной на нас. пункт: - выбирает населённый пункт, просматривает все документы меняя месяц. - найти юр лицо: - выбирает номер договора, просматривает все документы меняя месяц. - а ещё ему придётся редактировать "названия нас. пунктов", номера и названия договоров. ПО: Товарищи в ПО хотят: - иметь доступ и искать в архиве документов по физ и юр лицам РЭС; - вести и иметь доступ к архиву документов юр лица на прямых фидерах; - видеть реестр документов; - пошустрее упихнуть сканы в занесённую в базу структуру; - найти все документы по одному юр лицу. они на самом деле этого хотят? Сканить ежемесячно по 200+200 бумажек... ТЛН: начальник УУ, хочет: - видеть реестр документов; - выгрузить архив документов для суда: - выбирает месяц, жмёт "Сохранить всё", получает кучу каталогов и файлов вида: янв 2014/РЭС/Юр/12 СНТ Солнышко/Акты снятия/файл 1.jpg янв 2014/РЭС/Юр/12 СНТ Солнышко/Акты снятия/муть 2.pdf янв 2014/РЭС/Юр/12 СНТ Солнышко/Другие документы/акт замены 1.jpg янв 2014/РЭС/Юр/12 СНТ Солнышко/Другие документы/DCIM 1-10_8723.jpg янв 2014/РЭС/Физ/Коммунар Зелёная/Обходные листы/файл 1.jpg янв 2014/РЭС/Физ/Коммунар Зелёная/Обходные листы/муть 2.pdf янв 2014/РЭС/Физ/Коммунар Зелёная/Другие документы/акт замены 1.jpg янв 2014/РЭС/Физ/Коммунар Зелёная/Другие документы/DCIM 1-10_8723.jpg янв 2014/РЭС/Юр/732 ДНТ Слонёнок/Акты снятия/ <пусто> янв 2014/РЭС/Юр/732 ДНТ Слонёнок/Другие документы/ <пусто> АВМ: администратор БД, хочет: - что бы всё занимало поменьше места, ибо даже архив за 1 год не влезет в базу, и придётся его хранить в виде файлов отдельно. (уже без доступа через эту программу) Технически: убираем из фотографий и сканов цвета, уменьшаем разрешение (PS: и всё равно не влезет) - когда база станет > 500 Gb (6 месяцев?) через эту же программу выгружает в виде файлов, сохраняет себе на комп., руками чистит таблицу - ежемесячно(?) следит за размером базы, добавляет datafiles - что бы файлы имели вменяемые названия (а зачем он это хочет? Он это хочет для красоты. И как сделать автоматически?) -------------------------------------------------------------------- Программа: Чего не будет: - файлы в базе будут называться как попало (как фотик или принтер назовёт), или как технику приспичит; - поддерживаем только форматы jpg и pdf; - истории договоров (сейчас нафиг не нужна, хватит даты удаления); - истории населённых пунктов; - юр. лица на прямых фидерах будут позже, если вообще будут. До технической части можно не читать (сделали чуть иначе). Основное окно: 1ая часть, ввод документов: --------------------------------------------------------------------------------- Боголюбовский уч. июль 2014 --------------------------------------------------------------------------------- Физ лица [отредактировать нас. пункты...] --------------------------------------------------------------------------------- Каталог с файлами, || выводим только || отсутствующие в БД || ---------------------------------------------------------------------------------- имя-размер-создан-нал в БД || {степень сжатия} (приблизить) (удалить) | .0202.jpg || (зажав мышь - двигается)| .0103.jpg || PREVIEW | . || | ------------------------------------------------------------------------------------ [кнопка: закачать в] [кнопка: закачать в] [опросные листы ] [другие документы ] Юзер выбирает "каталог на диске" - видит файлы с фотика или сканера. Видит только jpg и pdf файлы!! Колонка наличие в БД заполняется постепенно: - "есть" = совпала md5 с одним из файлов в базе - "нет" = файла нет в БД - "пусто" = пока не определили есть или нет. Можно выбрать любой файл и нажать на кнопку, появится: поле с вводом названия файла (курсор сразу там), нередактируемое поле "название файла при экспорте" и список нас. пунктов: нас пункт / привязан В поле привязан стоит да или нет. Файл в основном окне помечается зелёным (и меняется название), в углу вылезает прогресс бар, показывает что качаем, когда закачает файл ставится "есть". Может добавить сюда по правой кнопке меню: "удалить файл с диска навсегда"? Т.е. создаётся список заданий, запускается на выполнение, пользователь работает с программой дальше. Если задание сломалось (вытащили usb, кончилось место в базе и т.п.), спрашивать: "повторить", "пропустить текущее" или "отменить это и все последующие". Preview: умеет приближать - удалять, поворачивать, перемещать. Умеет пережимать jpg при записи в базу: показываем степень: 0. Без пережатия. 1. компрессия 25. 2. компрессия 25 + разрешение умножаем на 0.5. По умолчанию всегда ставим 2, т.е. заставляем пользователя смотреть в Preview: если там ничего не видать, пусть выбирает другой тип сжатия. 2ая часть, редактирование и просмотр базы: --------------------------------------------------------------------------------- Боголюбовский уч. [посмотреть реестр по всему участку...] июль 2014 [сохранить весь участок в каталог...] --------------------------------------------------------------------------------- Физ лица [отредактировать нас. пункты...] --------------------------------------------------------------------------------- Список документов в БД | с насел. пунктами | ------------------------------------------------------------------------------------ Олёнино - <опросные листы> - <нет файлов> | | Слонино - <опросные листы> - 121.jpg | PREVIEW | Слонино - <опросные листы> - 724.pdf | | Без привязки - <другие документы> - test.jpg | | Без привязки - <опросные листы> - Весь РЭС.pdf | | ------------------------------------------------------------------------------------ Тут можно: - увидеть где в базе есть документы, где нет; - просмотреть документы; - отредактировать названия; - удалить документ из базы (отвязать от нас. пункта, если документ не привязан не к чему - удаляется из базы); - скачать документ из базы. Экспорт тоже тут (сделаем отдельно когда поймём что же нужно экспортировать): - выгрузить реестр в excel; - сохранить весь участок в каталог; Тут нельзя: - добавить файл в базу. Когда открывает - видит "опросные листы" красные, где <нет файлов>. Если ткнёт 2 раза - открывается стороннее приложение (что бы просмотреть содержимое, сохранить отдельный файл на диск). Если нужно удалить файл из БД - жмём на него правой кнопкой - там пункт "Удалить". В "списке файлов из БД" отдельное выделение для "нас. пунктов" и файлов: - тыкаем файл: сбрасывается выделение любых других файлов, обновляется preview; - тыкаем "нас. пункт": обновляется название на кнопе. 3ая часть: тоже самое, 3 окна, что и 1-я, но для юр лиц: - вместо "Нас. пункты" - "Номер дог. / Название". - вместо "Обходные листы" - "Акты снятия" + "Рапорта". Нажимаем "отредактировать нас. пункты..." --------------------------------------------------------------------- Боголюбовский уч. [добавить новый ins] [полностью удалить выбранный del] --------------------------------------------------------------------- Уникальный код | Название | Дата удаления . | | . | | Тут населённый пункт можно: - Добавить - Переименовать - Удалить полностью (если к нему не привязаны фото) - Поставить/изменить/убрать дату удаления ("нас. пункты" с датой не будут отображаться в основной программе если учётный период позже этой даты) - Истории тут нет => что то изменили, меняется во всех месяцах/годах Нажимаем "отредактировать дог.+назв..." - тоже самое, но для юр лиц. ======================================================== Техническая часть: файлы храним в BLOB, datafiles добавляем вручную, таблица range partitioning, глубина месяц вместе с файлами в базе храним md5 => не будет дубликатов (локально, внутри одного месяца) Схема БД: byt.photo (файлы) ph_period_date | учётный период (part, PK) ph_source_md5 | md5 исходного (несжатого) файла (local PK) ph_name | название файла (без расширения) ph_date | дата создания исх. файла (из файловой системы) ph_size | размер в байтах ph_type | код типа файла ph_photo | БЛОБ c файлом (уник.) byt.photo_types (типы файлов) pt_id | код типа (PK) pt_name | название типа [1 -- jpg] [2 -- pdf] byt.jur_docs (документы юр лиц) jd_id | код документа (PK) + SEQ_JUR_DOCS jd_contract | код договора из byt.jur_contracts jd_month | код учётного периода из byt.photo jd_photo | код фото из byt.photo jd_type | код типа из byt.jur_doc_types byt.jur_doc_types (типы документов юр лиц) jdt_id | код типа (PK) jdt_name | название типа [0 -- Другой документ] [1 -- Акт снятия показаний] [2 -- Рапорт] byt.jur_contracts (договора юр лиц) jc_id | код договора (PK) + SEQ_JUR_CONTRACTS jс_branch | код участка из byt.branches (может быть NULL если будем делать для ПО) jc_num | номер договора (уник. в пределах jс_branch) jc_name | название юр. лица (!!!) jc_ud_date | дата удаления byt.priv_docs (документы физ лиц) pd_id | код документа (PK) + SEQ_PRIV_DOCS pd_town | код нас. пункта из byt.priv_towns pd_month | код учётного периода из byt.photo pd_photo | код фото из byt.photo pd_type | код типа из byt.priv_doc_types byt.priv_doc_types (типы документов физ лиц) pdt_id | код типа (PK) pdt_name | название типа [0 -- Другой документ] [1 -- Обходной лист] byt.priv_towns (населённые пункты физ лиц) pt_id | код нас. пункта (PK) + SEQ_PRIV_TOWNS pt_branch | код участка из byt.branches pt_name | название нас. пункта pt_ud_date | дата удаления