Skip to content

Commit

Permalink
Fix #6 - transliterate yo to e everywhere
Browse files Browse the repository at this point in the history
  • Loading branch information
uralm1 committed Apr 18, 2022
1 parent d6e749f commit 01708f1
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 36 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
All notable changes to this project will be documented in this file.

## [Unreleased]

## [1.22] - 2022-04-18
- Исправление проблем с буквами 'Ёё' в именах сотрудников и наименованиях подразделений.
- Исправление ошибки с дедубликацией сотрудников.
- Более подробные ошибки при загрузке из 1С ЗУП для диагностики проблем на стороне 1С.
- Более подробные ошибки в логе при загрузке из 1С ЗУП для диагностики проблем на стороне 1С.

## [1.21] - 2022-01-28
- Значение аттрибута организация сделано настраиваемым через конфигурационный файл.
Expand Down
1 change: 1 addition & 0 deletions MANIFEST.SKIP
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
\badup.conf$
\btest.conf$
\.pem$
\bodata.epf$

#!start included /usr/share/perl/5.30/ExtUtils/MANIFEST.SKIP
# Avoid version control files.
Expand Down
13 changes: 13 additions & 0 deletions lib/Adup/Task/Preprocess.pm
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ sub _process_dbf {
# split fio
$fio = decode('cp866', $fio);

# fix ё in fio
_fix_eE($fio);

my ($fio_f, $fio_i, $fio_o);
if ($fio =~ m/^\s*(\S+)\s*(\S*)\s*\b(.*)\b\s*$/) { # we have to do it to reset $N vars
$fio_f = "\u\L$1";
Expand All @@ -95,6 +98,10 @@ sub _process_dbf {

$otdel = decode('cp866', $otdel);

# fix ё in otdel, dolj
_fix_eE($otdel);
_fix_eE($dolj);

# flatdept dedup
unless (exists $flatdept_dedup_h{$otdel}) {
$flatdept_dedup_h{$otdel} = $flatdept_id_gen_val;
Expand Down Expand Up @@ -265,5 +272,11 @@ sub process_dept_a {
}


# internal
sub _fix_eE {
$_[0] =~ tr/ёЁ/еЕ/;
}


1;
__END__
4 changes: 2 additions & 2 deletions lib/Adup/Ural/FlatGroupNamingAI.pm
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ sub flatgroup_ai {
s/^Служба Северного комплекса водопроводных сооружений-Ремонтно-механический участок/Служба СКВС-РМУ/ ||
s/^Служба Северного комплекса водопроводных сооружений-Участок Шакшинского водопровода/Служба СКВС-Участок ШВ/ ||
s/^Служба Северного комплекса водопроводных сооружений-Химико-бактериологическая лаборатория/Служба СКВС-ХБЛ/ ||
s/^Служба Северного комплекса водопроводных сооружений-Участок 2-го подъёма инфильтрационного водозабора/Служба СКВС-Участок 2ПИВ/ ||
s/^Служба Северного комплекса водопроводных сооружений-Участок 2-го подъ[ёе]ма инфильтрационного водозабора/Служба СКВС-Участок 2ПИВ/ ||
s/^Служба Северного комплекса водопроводных сооружений-Цех Изякского водопровода/Служба СКВС-Цех ИВ/ ||
s/^Служба Северного комплекса водопроводных сооружений-Цех очистных сооружений водопровода/Служба СКВС-Цех ОСВ/ ||
s/^Служба Северного комплекса водопроводных сооружений/Служба СКВС/ ||
Expand All @@ -59,7 +59,7 @@ sub flatgroup_ai {
s/^Управление Южных канализационных сетей/УЮКС/ ||
s/^Управление по эксплуатации систем водоотведения и водоснабжения/Управление по эксплуатации систем ВО и ВС/ ||

s/^Служба Южного комплекса водопроводных сооружений-Участок Демского водопровода/Служба ЮВС-Участок ДВ/ ||
s/^Служба Южного комплекса водопроводных сооружений-Участок Д[ёе]мского водопровода/Служба ЮВС-Участок ДВ/ ||
s/^Служба Южного комплекса водопроводных сооружений-Цех Южного водопровода/Служба ЮВС-Цех ЮВ/ ||
s/^Служба Южного комплекса водопроводных сооружений/Служба ЮВС/ ||

Expand Down
18 changes: 17 additions & 1 deletion lib/Adup/Ural/ZupLoader.pm
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,11 @@ sub process_data {
my $otdel_hierarhy = _unwind_hierarhy($pod_key, $_pod); # this also mark depts as used
my $otdel = join('\\', @$otdel_hierarhy) // '';

# fix ё in fio, dolj, otdel
_fix_eE($fio);
_fix_eE($dolj);
_fix_eE($otdel);

# split fio
my ($fio_f, $fio_i, $fio_o);
if ($fio =~ m/^\s*(\S+)\s*(\S*)\s*\b(.*)\b\s*$/) { # we have to do it to reset $N vars
Expand Down Expand Up @@ -333,11 +338,16 @@ sub process_data {
$level++;
} until _zero_key($pk);
}

# fix ё in departments names
my $dept_name = $_->{Description};
_fix_eE($dept_name);

$e = eval {
$self->get_db->query("INSERT INTO depts (id, name, level, parent) \
VALUES(?, ?, ?, ?)",
$_->{_id},
$_->{Description},
$dept_name,
$level,
$parent
);
Expand Down Expand Up @@ -507,4 +517,10 @@ sub _fix_pluses_in_url {
}


# internal, not a method
sub _fix_eE {
$_[0] =~ tr/ёЁ/еЕ/;
}


1;
76 changes: 44 additions & 32 deletions t2/preprocess.pl
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@
my $dbf = eval { new XBase($cfg->{galdb_temporary_file}); };

if (defined $dbf) {
my $e = eval {
my $e = eval {
$db_adup->query("DELETE FROM persons");
$db_adup->query("DELETE FROM depts");
$db_adup->query("DELETE FROM flatdepts");
$db_adup->query("TRUNCATE _fio_dedup");
$db_adup->query("TRUNCATE _fio_otd_dedup");
};
unless (defined $e) {
_setstate($db_adup, 0);
Expand All @@ -43,8 +45,6 @@
my $loaded_cnt = 0;
my %path_id_h;
my %id_dept_h;
my %fio_dedup_h;
my %fio_otd_dedup_h;
my $id_gen_val = 1;
my %flatdept_dedup_h;
my $flatdept_id_gen_val = 1;
Expand All @@ -57,12 +57,15 @@
### 1.begin of persons loop ###
#
for (0 .. $last_record) {
my ($deleted, $id, $fio, $otdel, $dolj, $tabn) =
my ($deleted, $id, $fio, $otdel, $dolj, $tabn) =
$dbf->get_record($_, 'ID', 'FIO', 'OTDEL', 'DOLJ', 'TABN');
unless ($deleted) {
# split fio
$fio = decode('cp866', $fio);

# fix ё in fio
_fix_eE($fio);

my ($fio_f, $fio_i, $fio_o);
if ($fio =~ m/^\s*(\S+)\s*(\S*)\s*\b(.*)\b\s*$/) { # we have to do it to reset $N vars
$fio_f = "\u\L$1";
Expand All @@ -82,20 +85,9 @@

$otdel = decode('cp866', $otdel);

# fio dedup (and then dedup by fio+otdel)
if (exists $fio_dedup_h{$fio}) {
# fio+otdel
my $fio_otd = join('', $fio, $otdel);
if (exists $fio_otd_dedup_h{$fio_otd}) {
#$fio_otd_dedup_h{$fio_otd} = 1; # not needed
$fio_dedup_h{$fio} = 2;
} else {
$fio_otd_dedup_h{$fio_otd} = 0;
$fio_dedup_h{$fio} = 1;
}
} else {
$fio_dedup_h{$fio} = 0;
}
# fix ё in otdel, dolj
_fix_eE($otdel);
_fix_eE($dolj);

# flatdept dedup
unless (exists $flatdept_dedup_h{$otdel}) {
Expand All @@ -109,7 +101,7 @@
$e = eval {
$db_adup->query("INSERT INTO persons (gal_id, fio, dup, f, i, o, dept_id, flatdept_id, otdel, dolj, tabn) \
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
$id,
$id,
$fio,
0, #1.7 will update later
$fio_f, $fio_i, $fio_o,
Expand Down Expand Up @@ -140,18 +132,32 @@
#
### 2.update duplicates ###
#
for my $fio (keys %fio_dedup_h) {
if ($fio_dedup_h{$fio} > 0) {
$e = eval {
$db_adup->query("UPDATE persons SET dup = ? WHERE fio = ?", $fio_dedup_h{$fio}, $fio);
};
unless (defined $e) {
$log->l(state => 1, info => "Произошла ошибка обновления дубликатов в таблице persons, $loaded_cnt сотрудников обработано");
_setstate($db_adup, 0);
die('Mysql update dublicates in table persons error');
}
}
$e = eval {
$db_adup->query("INSERT INTO _fio_dedup (fio) \
SELECT fio FROM persons GROUP BY fio HAVING COUNT(*) > 1");

$db_adup->query("INSERT INTO _fio_otd_dedup (fio, otdel) \
SELECT fio, otdel FROM persons GROUP BY fio, otdel HAVING COUNT(*) > 1");
};
unless (defined $e) {
$log->l(state => 1, info => "Произошла ошибка расчета дубликатов в таблице persons, $loaded_cnt сотрудников обработано");
_setstate($db_adup, 0);
die('Mysql duplicates calculation in table persons error');
}

$e = eval {
$db_adup->query("UPDATE persons SET dup = 1 \
WHERE fio IN (SELECT fio FROM _fio_dedup)");

$db_adup->query("UPDATE persons SET dup = 2 \
WHERE (fio, otdel) IN (SELECT fio, otdel FROM _fio_otd_dedup)");
};
unless (defined $e) {
$log->l(state => 1, info => "Произошла ошибка обновления дубликатов в таблице persons, $loaded_cnt сотрудников обработано");
_setstate($db_adup, 0);
die('Mysql update dublicates in table persons error');
}

#
### done ###
#
Expand All @@ -165,7 +171,7 @@
$e = eval {
$db_adup->query("INSERT INTO depts (id, name, level, parent) \
VALUES(?, ?, ?, ?)",
$_,
$_,
$id_dept_h{$_}->{name},
$id_dept_h{$_}->{level},
$id_dept_h{$_}->{parent}
Expand Down Expand Up @@ -208,7 +214,7 @@
#
### end of saving flat depts hash ###
#

$log->l(info => "Загружен шаблон с информацией по $loaded_cnt сотрудникам и выполнен разбор оргструктуры по $dept_loaded_cnt/$flatdept_loaded_cnt подразделениям");

} else {
Expand Down Expand Up @@ -265,3 +271,9 @@ sub process_dept_a {
}


# internal, not a method
sub _fix_eE {
$_[0] =~ tr/ёЁ/еЕ/;
}


0 comments on commit 01708f1

Please sign in to comment.