Сегодня расскажу вам о том, чем занимаюсь на работе)
Пару недель назад мне поставили внеплановую и очень срочную задачу - сделать контроль работы удаленных сотрудников на предприятии. Ну как контроль работы... скорее, контроль присутствия сотрудника на рабочем месте 🙂 В этом удаленном месте у человека настроено подключение в компьютере к корпоративной сети предприятия, через которое он может читать корпоративную почту и заходить на внутренние сайты. И проверять присутствие человека решили именно так - на почту несколько раз в день приходит письмо с кодом и ссылкой, а человек должен быстренько ввести этот код на странице по ссылке. Ссылка не меняется, а вот код всегда разный. Письмо приходит внезапно, но обязательно в рабочее время, а география сотрудников довольно обширная - 5 часовых поясов.
От меня требовалось реализовать такой вот вебсервис, который бы рассылал эти письма, принимал коды, а потом формировал отчеты по сотрудникам, которые не вовремя ввели код или вообще не вводили их на протяжении нескольких дней (типа прогуливали). Базу сотрудников с подразделениями требовалось загрузить из 1С, но адрес электронной почты каждого из них сверить с Active Directory. Также необходимо было предусмотреть, что часть работников может работать не полный день, другие могут быть отправлены в командировки, третьи временно на больничном или в отпуске.
Так как этот сервис никак не связан с нашим основным сметным проектом, я решил заодно освоить новый для меня .Net Core. К слову, основной проект мы пилим в Visual Studio (о ужас!) 2010, т.к. более свежие студии отказываются его билдить, а тут я смог наконец-то оценить новые прекрасные возможности VS2019.
Так как сроки поджимали, в качестве БД взял MS SQLServer с Entity Framework и подходом Database-First, позволяющим четко и ожидаемо спроектировать структуру. Получилось четыре таблицы сущностей: подразделения, работники, время их работы за каждый день с учетом часовых поясов и собственно сами проверки, которые планируются на грядущий день, а рассылаются уже в заданное время. Каждый контролируемый сотрудник получит в день от 1 до 4 проверочных писем (с разной вероятностью). Кстати, был интересный вопрос - нужно ли при вводе сотрудником более нового кода проставлять все еще не введенные старые автоматически? Исходя из логики - введя код, сотрудник как бы появился на рабочем месте, а значит все прошлые проверки можно тоже закрыть.
Таблично-древовидный интерфейс для отдела кадров очень быстро собрал на ExtJS. Два типа отчетов выгружаются в Excel по кнопке.
В итоге весь проект был собран и развернут на сервере за неделю, еще неделя ушла на мелкие доработки и тестирование.
Наибольшие сложности для меня в этом проекте были связаны с использованием .Net Core в условиях нехватки времени на чтение литературы и его развертыванием на сервере: настройка windows-авторизации и доступ к Active Directory для синхронизации. Но этот опыт уже позволил мне решить проблему на другом проекте (тоже в Core), буду дальше погружаться в него (и больше уже в .Net 5) более планомерно и основательно.
А вы еще работаете на удалёнке или давно вышли в офис? И как вы относитесь к такому способу контроля сотрудников?)