Работа с часовыми поясами

Все сервера должны быть в одном часовом поясе и настроить их можно по инструкциям ниже:

Далее в nodejs нужно добавить код для преобразования даты:

var moment = require('moment');
...
Date.prototype.toJSON = function () { return moment(this).format('YYYY-MM-DDTHH:mm:ss.SSSZZ'); }

Настройка временной зоны на Ubuntu 18

В systemd есть своя утилита для настройки даты и часового пояса. Чтобы узнать текущее состояние выполните:

timedatectl status

Для просмотра всех доступных временных зон выполните такую команду:

Читать далее «Настройка временной зоны на Ubuntu 18»

Автоматическое документирование базы данных

Для документирование базы данных применяется открытое решение Autodoc.

Инструкция по установке и настройке на сайте appcode.pw

Основной скрипт для запуска генерации документации.

cd autodoc
postgresql_autodoc -d cic-dev-db -h 192.168.17.111 -u postgres --password=<pw> -t html -s "core|dbo" -f /var/www/html/cic-dev-db

Демонстрационный вариант документации можно посмотреть на сайте http://cic.it-serv.ru/cic-dev-db.html

Autodoc для postgresql

Ставим приложение autodoc

$ sudo apt install libdbi-perl libhtml-template-perl libterm-readkey-perl libdbd-pg-perl
$ git clone https://github.com/cbbrowne/autodoc.git
$ cd autodoc
$ sudo make install

Дальше запускаем скрипт

postgresql_autodoc -d cic-dev-db -h 192.168.17.111 -u postgres --password -t html -s core -f cic-dev-db-core

Примечание: схемы можно передать как

-s "core|dbo"

Исходный код: https://github.com/cbbrowne/autodoc

Обновление строки в postgresql

UPDATE dummy 
SET customer=subquery.customer, 
address=subquery.address, 
partn=subquery.partn 
FROM (SELECT address_id, customer, address, partn FROM /* big hairy SQL */ ...) AS subquery 
WHERE dummy.address_id=subquery.address_id;
UPDATE table T1 
SET column1 = T2.column1 
FROM 
table T2 
INNER JOIN table T3 USING (column2) 
WHERE T1.column2 = T2.column2;

https://stackoverflow.com/questions/6256610/updating-table-rows-in-postgres-using-subquery

Интеграция

Информация актуальна для пилотной версии МРСК ЦиП на 08.10.2020

В пилотной версии МРСК ЦиП информация может быть импортирована в следующие таблицы:

  • dbo.ed_input_meter_readings — текущие контрольные показания
  • dbo.ed_registr_pts — точки учета
  • dbo.ed_device_types — типы прибора учета

Примечание: информацию по таблицам можно посмотреть тут

Точка учета

Информация о точках учета должна храниться в таблице dbo.ed_registr_pts. Здесь может храниться любая информация, но при этом должны быть заполнены следующие поля:

  • c_address: text — полный адрес
  • n_longitude: numeric — долгота
  • n_latitude: numeric — широта
  • f_division: integer — филиал/отделение
  • f_subdivision: integer — участок

Показания

Информация о показаниях храниться в двух таблица:

  • dbo.ed_input_meter_readings — входящие показания. Первоначальные показания в нашей системе. Если показания и дата неизвестны, то можно указать null. При этом информация о тарифной зоне и разрядности должна быть указана обязательно.
  • dbo.ed_output_meter_readings — исходящие показания, результат обхода.

Первичные показания должны быть загружены в систему в обе таблицы, так как генерация показания для новых обходов производится на основе предыдущих данных.

-- пример наличия первичных показаний
INSERT INTO dbo.ed_input_meter_readings(f_point, n_value_prev, d_date_prev, n_digit, f_time_zone, f_registr_pts, n_tariff)
VALUES ('b17c5973-615c-49c6-976f-7a491a41a160', null, null, 5.0, 2, '028d65a4-3621-408b-af0a-230242f41702', 1); -- создано показание с тарифом 1 и показанием "Сутки"

INSERT INTO dbo.ed_output_meter_readings(fn_meter_reading, fn_point, fn_route, fn_user_point, n_value, d_date)
VALUES ('394fb071-7d9f-4c13-ada6-3c45b0f1643b', 'b17c5973-615c-49c6-976f-7a491a41a160', 'c68b1a77-0a13-4c05-bc3e-c2504868f0ac', '547c39bd-d171-4cae-bf64-c30fae16210a', null, '2020-05-01');

Алгоритм обработки показаний тут.