Диплом: Автоматизация процесса введения документации и отчетности в ООО "Аэрофильтр"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
81
СПИСОК ЛИТЕРАТУРЫ
1. ГОСТ 34.602-89 «Техническое задание на создание автоматизированной
системы»
2. Белов Е.Б, Лось В.П. и др. Основы информационной безопасности. - М.:
Горячая линя - Телеком, 2010. – 544 с.
3. Вигерс К. Разработка требований к программному обеспечению, пер, с
англ. - Москва.: «Русская Редакция», 2010. – 576 с.
4. Гвоздева Т.В. Проектирование информационных систем. – Ростов-на-
Дону: Феникс, 2009. – 512 с.
5. Грекул В.И. Проектирование информационных систем. – Москва.:
Интуит, 2008. – 304 с.
6. Диго С.М. Базы данных: проектирование и использование: Учебник. –
Москва.: Финансы и статистика, 2007. – 592 с.
7. Додонова И.В., Кабанова О.В. Автоматизированная обработка банковской
информации. – Москва.: КноРус, 2008. – 176 с.
8. Елиферов В.Г., Репин В.В. Бизнес-процессы. Регламентация и управление.
– Москва.: Инфра-М, 2009. – 320 с.
9. Емельянова Н.З. Проектирование информационных систем. – Москва.:
Форум, 2009. – 432 с.
10. Козлов А.С. Проектирование и исследование бизнес-процессов. –
Москва.: Флинта, 2007. – 272 с.
11. Меняев М.Ф, Информационные технологии управления: Книга 3:
Системы управления организацией, Москва.: Омега-Л, 2008. - 464 с.
12. Мещеряков С.В., Иванов В.М. Эффективные технологии создания
информационных систем. – Москва.: Политехника, 2009. – 309 с.
82
13. Мишенин А.И. Теория экономических информационных систем. –
Москва.: Финансы и статистика, 2010. – 240 с.
14. Овчинников В.Г. Методология проектирования автоматизированных
информационных систем. Основы системного подхода. – Москва.: Компания
Спутник+, 2009. – 286 с.
15. Дронов В. А. Django: Практика создания Web-сайтов на Python. БХВ-
Петербург, 2018. – 528 с.
16. Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация
данных, веб-приложения, 2018. – 496 с.
17. Репин В.В. Бизнес-процессы компании. Построение, анализ,
регламентация. – ДМК Пресс, 2017. 288 с.
18. Димитрий Айвалиотис. Администрирование сервера NGINX. Подробное
руководство по настройке NGINX в любой ситуации, с многочисленными
примерами и справочными таблицами для всех директив. Москва.: ЮНИТИ,
2009. – 399с.
19. О компании [Электронный ресурс]: - Режим доступа:
http://aerofiltr.ru/company (дата обращения: 22.08.2018).
20. Новости о СЭД [Электронный ресурс]: - Режим доступа: http://www.doc-
online.ru (дата обращения: 01.09.2018).
21. Ubuntu SystemRequirements [Электронный ресурс]: - Режим доступа:
https://help.ubuntu.com/community/Installation/SystemRequirements (дата
обращения: 01.09.2018).
22. Цены и лицензирование для Windows Server 2016 [Электронный ресурс]: -
Режим доступа: https://www.microsoft.com/ru-ru/cloud-platform/windows-server-
pricing (дата обращения 05.09.2018).
83
ПРИЛОЖЕНИЕ
import logging
import asyncio
import hashlib
import jinja2
import aiohttp_jinja2
from aiohttp import web
from os import path, environ
from motor import motor_asyncio
from aiohttp_session import session_middleware
from logging.handlers import RotatingFileHandler
from aiohttp_session.cookie_storage import EncryptedCookieStorage
from routes import routes
from settings import config
from middlewares import authorize
from utils.jinjia_utils import init_jinja
if __name__ == '__main__':
environ['EDM'] = environ.get('EDM') or path.dirname(path.abspath(__file__))
middlewares = [session_middleware(
84
EncryptedCookieStorage(hashlib.sha256(bytes(config.app.secret_key, 'utf-
8')).digest(), cookie_name='SESSION')),
authorize, ]
loop = asyncio.get_event_loop()
app = web.Application(debug=config.app.debug or False,
middlewares=middlewares)
tpl_dir = path.join(path.dirname(__file__), 'resources/templates')
aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(tpl_dir))
init_jinja(app['aiohttp_jinja2_environment'])
app.router.add_static('/static', path.join(environ.get('EDM'), 'resources/static'),
name='static')
for r in routes:
app.router.add_route(r[0], r[1], r[2], name=r[3])
log_level = logging.getLevelName(config.app.get('logging.level') or 'INFO')
log_handler = RotatingFileHandler(config.app.get('logging.filename') or 'log.log',
mode='a',
maxBytes=1024 * 1024 * 5,
backupCount=20, encoding="utf-8")
log_handler.setLevel(log_level)
85
logging.basicConfig(level=log_level,
format=config.app.get('logging.format') or '%(asctime)s %(levelname)s
%(name)s %(message)s',
handlers=[log_handler])
app.client = motor_asyncio.AsyncIOMotorClient(config.mongodb.host)
app.db = app.client[config.mongodb.dbname]
web.run_app(app, host=config.app.host, port=config.app.port)
from aiohttp import web
from aiohttp.web import middleware
from aiohttp_session import get_session
@middleware
async def authorize(request, handler):
def check_path(path):
for r in ('/login', '/static/', '/signin', '/signout', '/_debugtoolbar/', '/favicon.ico'):
if path.startswith(r):
return False
return True
86
session = await get_session(request)
if session.get("user"):
return await handler(request)
elif check_path(request.path):
raise web.HTTPFound(request.app.router['employees.login']._path)
else:
return await handler(request)
async def db_handler(app, handler):
async def middleware(request):
if request.path.startswith('/static/') or request.path.startswith('/_debugtoolbar'):
response = await handler(request)
return response
request.db = app.db
response = await handler(request)
return response
return middleware
from components.employees.views import Login, Logout, EmployeesMain,
AddEmployee
from components.documents.views import AddNew, Download
87
from components.clients.views import AddClient, ClientsMain
from components.contractors.views import AddContractors, ContractorsMain
from components.departments.views import AddDepartment, DepartmentsMain
from components.document_categories.views import AddDocumentCategory,
DocumentCategoriesMain
from components.document_types.views import AddDocumentType,
DocumentTypesMain
from components.positions.views import AddPosition, PositionsMain
from views import main_view
routes = [
('*', '/', main_view.MainView, 'main'),
('*', '/login', Login, 'employees.login'),
('*', '/logout', Logout, 'employees.logout'),
('*', '/employees', EmployeesMain, 'employees.main'),
('*', '/employees/new', AddEmployee, 'employees.add_new'),
('*', '/clients', ClientsMain, 'clients.main'),
('*', '/clients/new', AddClient, 'clients.add_new'),
('*', '/contractors', ContractorsMain, 'contractors.main'),
('*', '/contractors/new', AddContractors, 'contractors.add_new'),
('*', '/departments', DepartmentsMain, 'departments.main'),
('*', '/departments/new', AddDepartment, 'departments.add_new'),
88
('*', '/document_categories', DocumentCategoriesMain, 'document_categories.main'),
('*', '/document_categories/new', AddDocumentCategory,
'document_categories.add_new'),
('*', '/document_types', DocumentTypesMain, 'document_types.main'),
('*', '/document_types/new', AddDocumentType, 'document_types.add_new'),
('*', '/positions', PositionsMain, 'positions.main'),
('*', '/positions/new', AddPosition, 'positions.add_new'),
('*', '/documents/new', AddNew, 'documents.add_new'),
('*', '/documents/{id:(\w+)}/download', Download, 'documents.download'),
]
from bson.objectid import ObjectId
from motor.motor_asyncio import AsyncIOMotorGridFS
from utils.document_utils import detect_mime, get_words_from_xlsx,
get_words_from_docx, get_words
class Document():
def __init__(self, db, **kwargs):
self.collection = db['documents']
89
self.gridfs = AsyncIOMotorGridFS(db)
async def get_latest_documents(self, access_level, count=20, offset=0, query=''):
q = {
'$or': [
{'access_level': {'$gte': access_level}},
{'access_level': -1}
]
}
if query:
q.update({'$text': {'$search': query}})
result = await self.collection.find(q).sort(
[('created', 1)]).to_list(
length=count)
return result
async def insert_new(self, doc):
await self.collection.insert(doc)
async def process_document(self, doc):
90
filepath = doc.pop('filepath')
mime = detect_mime(filepath)
if not mime:
return
if 'officedocument.spreadsheetml' in mime:
doc['words'] = get_words_from_xlsx(filepath)
elif 'officedocument.wordprocessingml' in mime:
doc['words'] = get_words_from_docx(filepath)
elif 'zip' in mime:
doc['words'] = get_words(filepath)
else:
return
with open(filepath, 'b+r') as f:
doc['fileid'] = await self.gridfs.put(f, filename=doc['filename'],
content_type=mime)
await self.insert_new(doc)
return True
async def download(self, doc_id):
doc = await self.collection.find_one({'_id': ObjectId(doc_id)})

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)