Файл: Проектирование информационной системы по управлению.pdf
Добавлен: 28.03.2023
Просмотров: 263
Скачиваний: 5
СОДЕРЖАНИЕ
Глава 1. Теоретические основы информационной системы управления документооборотом
Сущность автоматизации документооборота
Глава 2. Анализ информационной системы управления документооборотом в ООО "Технопарк-центр"
Общая характеристика предприятия
Предложения по совершенствованию системы документооборота на предприятии
На сегодняшний день любая организация нуждается в документообороте. Информация в современном мире очень важна, а документооборот является системой оформления, использования и движения расчетных документов и денежных средств.
Целью курсовой работы была автоматизация документооборота организации ООО "Технопарк-центр".
Внедрение системы документооборота позволит сократить площади, на которых хранится информация, ведь отпадет необходимость ведения бумажных журналов регистрации документов. А если учесть, что с каждым годом объем обрабатываемой информации будет только возрастать, становится очевидным, что внедрение автоматизированной системы является ключом к эффективной работе и в будущем. Кроме всего прочего, для руководителя или ответственного лица система автоматизации документации позволяет производить всю работу удалённо, с того места, из которого это необходимо в данную минуту. Такие возможности стали реальностью с внедрением специальных портативных программных обеспечений и приложений для телефона, планшета, компьютера. Все, что нужно для начала работы – это ввести данные, произвести контроль и выполнить необходимые мероприятия.
Современная система автоматизации документооборота позволяет не только проводить все манипуляции максимально быстро и эффективно, но и делать это абсолютно конфиденциально. К примеру, вся важная информация по финансам, количеству контактов партнеров, клиентов, сотрудников имеется только в доступе у нескольких сотрудников (единый реестр): руководитель, отдела безопасности, отдела кадров. Ранее реализовывать такую задачу было крайне сложно.
Список литературы
Автоматизированные информационные технологии в экономике / Под ред. Г.А. Титоренко. – М.:ЮНИТИ, 2017. – 125с. (1).
Аглицкий И. Автоматизация управления предприятием, 2016. – 310с. (3).
Алистер Коберн, Современные методы описания функциональных требований к системам, М.: издательство "Лори", 2017. – 288 с
Вендров, А. М. Практикум по проектированию программного обеспечения экономических информационных систем / А.М. Вендров. - М.: Финансы и статистика, 2017. - 192 c.
Зегжда, Д.П. Основы безопасности информационных систем / Д.П. Зегжда, А.М. Ивашко. - М.: Горячая линия - Телеком, 2017. - 452 c.
Исаев Г.А.: Проектирование информационных систем. Учебное пособие, - М., Омега-Л, 2015 г. - 424 с.
Коваленко, В.В. Проектирование информационных систем: Учебное пособие / В.В. Коваленко. - М.: Форум, 2015. - 976 c.
Курлов А.А, Петров Е.А.: Методология информационной аналитики, - М.,Проспект, 2014 г. - 384 с.
Смоленцева Л.В. Анализ подходов к созданию информационных систем для экономистов // Экономика и социум. – 2014г. - №4-6 (13). - С. 69-74.
Современные методы и средства проектирования информационных систем, Вендров А.М., 2017г. – 400с.
Приложение 1
Скрипт создания базы данных
CREATE TABLE Comment
( id AUTOINCREMENT INTEGER NOT NULL,
commentext VARCHAR(255) NOT NULL,
createdat DATETIME NOT NULL,
authorid INTEGER NOT NULL,
documentid INTEGER NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Department
( id AUTOINCREMENT INTEGER NOT NULL,
caption VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Departments_types
( typeid INTEGER NOT NULL,
staffid INTEGER NOT NULL,
PRIMARY KEY (typeid,staffid)
);
CREATE TABLE Document
( id AUTOINCREMENT INTEGER NOT NULL,
caption VARCHAR(255) NOT NULL,
description VARCHAR(255) NULL,
authorid INTEGER NOT NULL,
recipientid INTEGER NOT NULL,
statusid INTEGER NOT NULL,
createdAt DATETIME NOT NULL,
deadline DATETIME NOT NULL,
typeid CHAR(18) NOT NULL, PRIMARY KEY (id)
);
CREATE TABLE Role
( id INTEGER AUTOINCREMENT NOT NULL,
caption VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Staff
( id INTEGER AUTOINCREMENT NOT NULL,
caption VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Staffs_types
( typeid INTEGER NOT NULL,
staffid INTEGER NOT NULL,
PRIMARY KEY (typeid, staffid)
);
CREATE TABLE Status
( id INTEGER AUTOINCREMENT NOT NULL,
caption VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE TypeDoc
( id INTEGER AUTOINCREMENT NOT NULL,
caption VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE UploadFile
( id AUTOINCREMENT INTEGER NOT NULL,
createdat DATETIME NOT NULL,
pathfile VARCHAR(255) NOT NULL,
docid INTEGER NOT NULL,
authorid INTEGER NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE User
( id AUTOINCREMENT INTEGER NOT NULL,
fio VARCHAR(255) NOT NULL,
login VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
departmentid INTEGER NOT NULL,
staffid INTEGER NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Users_role
( userid INTEGER NOT NULL,
roleid INTEGER NOT NULL,
PRIMARY KEY (roleid, userid)
);
Приложение 2
<?php
namespace AppBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Class User
* @package AppBundle\Entity
* @ORM\Entity
* @ORM\Table(name = "users")
*/
class User extends AbstractEntity implements UserInterface, \Serializable
{ /**
* @var string
* @ORM\Column(name = "password", type = "string")
*/
protected $password;
/**
* @var ArrayCollection|Role[]
* @ORM\ManyToMany(targetEntity = "AppBundle\Entity\Role", inversedBy = "users")
* @ORM\JoinTable(name = "user_roles", * joinColumns = {@ORM\JoinColumn(name = "userid", referencedColumnName = "id")},
* inverseJoinColumns = {@ORM\JoinColumn(name = "roleid", referencedColumnName = "id")}
* )
*/
protected $roles;
/**
* @var string
* @ORM\Column(name = "salt", type = "string")
*/
protected $salt;
/**
* @var string
* @ORM\Column(name = "username", type = "string", unique = true)
*/
protected $username;
/**
* @var string
* @ORM\Column(name = "userfio", type = "string")
*/
protected $userfio;
/**
* @var string
* @ORM\Column(name = "email", type = "string")
*/ protected $email;
/**
* @var string
* @ORM\Column(name = "phone", type = "string")
*/
protected $phone;
/**
* @var boolean
* @ORM\Column(name = "deleted", type = "boolean")
*/
protected $deleted;
/**
* @var ArrayCollection|Movement[]
* @ORM\OneToMany(targetEntity = "AppBundle\Entity\Movement", mappedBy = "user", cascade = {"persist", "remove"})
*/
protected $movements;
public function __construct()
{
parent::__construct();
$this->roles = new ArrayCollection();
$this->movements = new ArrayCollection();
$this->salt = self::generateSalt();
$this->deleted = false;
}
public function eraseCredentials()
{
return $this;
}
/**
* @return string
*/
public static function generateSalt()
{
$symbols = '0123456789abcdef';
$salt = '';
foreach (range(1, 32) as $i) $salt .= $symbols[mt_rand(0, 15)];
return $salt;
// return openssl_random_pseudo_bytes(32);
}
/**
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* @return array|Role[]
*/
public function getRoles()
{
return $this->roles->toArray();
}
/**
* @return ArrayCollection|Role[]
*/
public function getRolesCollection()
{ return $this->roles;
}
/**
* @return string
*/ public function getSalt()
{
return $this->salt;
}
/**
* @return string
*/ public function getUsername()
{
return $this->username;
}
public function serialize()
{
return serialize(array(
'id' => $this->id,
'username' => $this->username,
'password' => $this->password,
'salt' => $this->salt
));
}
/**
* @param string $password
* @return $this
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
public function setRoles($roles)
{
$this->roles->clear();
foreach ($roles as $role) $this->roles->add($role);
return $this;
}
/**
* @param string $salt
* @return $this
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
/**
* @param string $username
* @return $this
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
public function unserialize($serialized)
{
$unserialized = unserialize($serialized);
$this->id = $unserialized['id'];
$this->username = $unserialized['username'];
$this->password = $unserialized['password'];
$this->salt = $unserialized['salt'];
return $this;
}
/**
* @return boolean
*/ public function isDeleted()
{ return $this->deleted;
}
/**
* @param boolean $deleted
*/ public function setDeleted($deleted)
{
$this->deleted = $deleted;
}
/**
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* @param string $email
*/
public function setEmail($email)
{
$this->email = $email;
}
/**
* @return string
*/ public function getPhone()
{
return $this->phone;
}
/**
* @param string $phone
*/
public function setPhone($phone)
{
$this->phone = $phone;
}
/**
* @return string
*/ public function getUserfio()
{
return $this->userfio;
}
/**
* @param string $userfio
*/
public function setUserfio($userfio)
{ $this->userfio = $userfio;
}
/**
* @return Movement[]|ArrayCollection
*/ public function getMovements()
{
return $this->movements;
}
/**
* @param Movement[]|ArrayCollection $movements
*/
public function setMovements($movements)
{
$this->movements = $movements;
}
}
<?php
namespace AppBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Class Department
* @package AppBundle\Entity
* @ORM\Entity * @ORM\Table(name = "department")
*/ class Department extends AbstractEntity
{
/**
* @var string
* @ORM\Column(name = "caption", type = "string")
*/
protected $caption;
/**
* @var boolean
* @ORM\Column(name = "main", type = "boolean")
*/
protected $deleted;
/**
* @var ArrayCollection|Worker[]
* @ORM\OneToMany(targetEntity = "AppBundle\Entity\Worker", mappedBy = "department", cascade = {"persist", "remove"})
*/
protected $workers;
public function __construct()
{
parent::__construct();
$this->deleted = false;
$this->workers = new ArrayCollection();
}
/**
* @return string
*/
public function getCaption()
{
return $this->caption;
}
/**
* @param string $caption
*/
public function setCaption($caption)
{
$this->caption = $caption;
}
/**
* @return boolean
*/ public function isDeleted()
{
return $this->deleted;
}
/**
* @param boolean $deleted
*/
public function setDeleted($deleted)
{
$this->deleted = $deleted;
}
/**
* @return Worker[]|ArrayCollection
*/
public function getWorkers()
{
$workers= array();
foreach ($this->workers as $worker)
{
if (!($worker->isDismis())){
array_push($workers,$worker);
}
}
return $workers;
}
/**
* @param Worker[]|ArrayCollection $workers
*/
public function setWorkers($workers)
{
$this->workers = $workers;
}
}
<?php
namespace AppBundle\Controller;
use AppBundle\Form\Type\UserFormType;
use AppBundle\Form\Type\UserFilterFormType;
use AppBundle\Entity\Role;
use AppBundle\Entity\User;
use Sensio\Bundle\FrameworkExtraBundle\Configuration as Config;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoder;
use Symfony\Component\Security\Core\Security;
class UsersController extends InitializableController
{
/**
* @return RedirectResponse|Response
* @Config\Route("/users", name = "site_users_index")
*/ public function indexAction()
{
if (!($this->authChecker->isGranted(Role::ADMIN))) {
return $this->redirectToRoute('homepage');
}
else {
$form=$this->createForm(new UserFilterFormType());
$username = null;
$email=null;
$phone=null;
$role=null;
$form->handleRequest($this->request);
$usersquery = $this->getRepository('User')->createQueryBuilder('u')
->leftJoin('u.roles', 'r')
->where('u.deleted <> 1')
->orderBy('u.id', 'DESC');
if ($form->isSubmitted() && $form->isValid()) {
$username = $form->get('username')->getData();
$email = $form->get('email')->getData();
$phone = $form->get('phone')->getData();
$role = $form->get('role')->getData();
}
if (!empty($username)) {
$usersquery->andWhere('LOWER(u.username) LIKE LOWER(:username) ')->setParameter('username', '%' . trim($username) . '%');
}
if (!empty($email)) {
$usersquery->andWhere('LOWER(u.email) LIKE LOWER(:email) ')>setParameter('email', '%' . trim($username) . '%');
}
if (!empty($phone)) {
$usersquery->andWhere('LOWER(u.phone) LIKE LOWER(:phone) ')>setParameter('phone', '%' . trim($username) . '%');
}
if (!empty($role)) {
$usersquery->andWhere('r.id = :role')->setParameter('role', $role);
}
$users=$usersquery->getQuery()->getResult();
$this->view['users'] = $users;
$this->view['form'] = $form->createView();
$this->navigation = array('active' => 'users');
return $this->render('AppBundle:Users:index.html.twig');
}
}
/**
* @return RedirectResponse|Response
* @Config\Route("/users/add", name = "site_users_add")
*/
public function addAction()
{
if (!($this->authChecker->isGranted(Role::ADMIN))) {
return $this->redirectToRoute('homepage');
}
else {
$user = new User();
$user->getRolesCollection()->add($this->getRepository('Role')>findOneByRole(Role::USER));
$form = $this->createForm(new UserFormType(), $user);
$form->handleRequest($this->request);
if ($form->isSubmitted() && $form->isValid()) {
$valid = true;
$sames = $this->getRepository('User')->createQueryBuilder('u')
->select('COUNT(u.id) AS id')
->where('u.username = :username') -
>setParameters(array('username' => $user->getUsername())) -
>getQuery()->getSingleScalarResult();
if ($sames > 0) {
$form->get('username')->addError(new FormError('Пользователь с таким логином уже существует.'));
$valid = false;
}
if (is_null($form->get('password')->getData())) {
$form->get('password')->addError(new FormError('Пожалуйста, укажите пароль пользователя.'));
$valid = false;
}
if ($valid) {
/** @var UserPasswordEncoder $encoder */
$encoder = $this->get('security.password_encoder');
$user->setSalt(User::generateSalt())
->setPassword($encoder->encodePassword($user, $user>getPassword()));
$this->manager->persist($user);
$this->manager->flush();
$this->addNotice('success',
'users.html.twig',
array('notice' => 'user_added', 'username' => $user->getUsername())
);
return $this->redirectToRoute('site_users_index');
}
}
$this->forms['user'] = $form->createView();
$this->navigation = array('active' => 'users');
return $this->render('AppBundle:Users:add.html.twig');
}
}
/**
* @param User $user
* @return RedirectResponse|Response
* @Config\Route("/users/{user}/edit", name = "site_users_edit")
* @Config\ParamConverter("user", options = {"mapping": {"user": "id"}})
*/
public function editAction(User $user)
{
if (!($this->authChecker->isGranted(Role::ADMIN))) {
return $this->redirectToRoute('homepage');
}
else {
$password = $user->getPassword();
$form = $this->createForm(new UserFormType(), $user);
$form->handleRequest($this->request);
if ($form->isSubmitted() && $form->isValid()) {
$valid = true;
$sames = $this->getRepository('User')->createQueryBuilder('u')
->select('COUNT(u.id) AS id')
->where('u.username = :username')
->andWhere('u.id <> :id')
->setParameters(array('username' => $user->getUsername(), 'id' => $user>getId()))
->getQuery()->getSingleScalarResult();
if ($sames > 0) {
$form->get('username')->addError(new FormError('Пользователь с таким логином уже существует.'));
$valid = false;
}
if ($valid) {
if (!is_null($form->get('password')->getData())) {
/** @var UserPasswordEncoder $encoder */
$encoder = $this->get('security.password_encoder');
$user->setSalt(User::generateSalt()) -
>setPassword($encoder->encodePassword($user, $user>getPassword()));
} else {
$user->setPassword($password);
}
$this->manager->persist($user);
$this->manager->flush();
$this->addNotice('success',
'users.html.twig',
array('notice' => 'user_changed', 'username' => $user->getUsername())
);