Базовый
This commit is contained in:
@@ -82,11 +82,6 @@ public class Main implements Runnable {
|
||||
|
||||
ExcelDataRow data;
|
||||
while( !Thread.currentThread().isInterrupted() && ((data = nextData()) != null) ) {
|
||||
if (!data.tarif.equalsIgnoreCase("Акция 3 месяца") &&
|
||||
!data.tarif.equalsIgnoreCase("Группа компаний") &&
|
||||
!data.tarif.equalsIgnoreCase("Оптимальный, 4 направ."))
|
||||
continue; //FIXME
|
||||
|
||||
logger.info("Проверяю {} / {} ...", data.inn, data.kpp);
|
||||
logger.debug("data = {}", data);
|
||||
Organization organization = astral.getOrganization(data.inn, data.kpp);
|
||||
@@ -106,6 +101,12 @@ public class Main implements Runnable {
|
||||
else if (data.tarif.equalsIgnoreCase("Оптимальный, 4 направ.")) {
|
||||
tarif_Optimalniy(astral, organization, data);
|
||||
}
|
||||
else if (data.tarif.equalsIgnoreCase("Базовый, 2 направ.")) {
|
||||
tarif_Basic(astral, organization, data);
|
||||
}
|
||||
else {
|
||||
logger.info("Не задана логика для тарифа: \"{}\"", data.tarif);
|
||||
}
|
||||
|
||||
safeSleep(sleepThread);
|
||||
}
|
||||
@@ -232,6 +233,37 @@ public class Main implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
// Тариф: Базовый, 2 направ.
|
||||
private void tarif_Basic(AstralSession astral, Organization organization, ExcelDataRow data) {
|
||||
// Step 0: Количество доступных продуктов
|
||||
if (organization.products.size() == 0) {
|
||||
logger.warn("({}/{}): Нет доступных продуктов!", organization.inn, organization.kpp);
|
||||
return;
|
||||
}
|
||||
|
||||
// Step I: Проверяем разницу дат.
|
||||
// Сертификат должен быть выдан в тот же день или позже, чем тариф
|
||||
Product product = organization.products.get(0);
|
||||
Tarif tarif = product.contractTariffs.get(0);
|
||||
if (product.certs.size() > 1) {
|
||||
logger.warn("({}/{}): Обнаружено более 1 сертификата!", organization.inn, organization.kpp);
|
||||
}
|
||||
Cert cert = product.certs.get(0);
|
||||
|
||||
long tarifDateLong = tarif.date_initialDate.getTime();
|
||||
long certDateLong = cert.startCertDate.getTime();
|
||||
|
||||
if (certDateLong < tarifDateLong) {
|
||||
logger.error("({}/{}): Ошибка: сертификат выдан раньше тарифа!", organization.inn, organization.kpp);
|
||||
return;
|
||||
}
|
||||
|
||||
// Step II: Проверяем кол-во Направлений
|
||||
if (!calcRecipients2(product, data)) { //TODO надо проверять по категориям
|
||||
logger.warn("({}/{}): Внимание! Не соответствие количества направлений!", organization.inn, organization.kpp);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean calcRecipients(Product product, ExcelDataRow data) {
|
||||
int countFNS = 0,
|
||||
countFSS = 0,
|
||||
@@ -274,4 +306,47 @@ public class Main implements Runnable {
|
||||
|
||||
return boolFNS && boolFSS && boolRosstat && boolPFR && boolRosalco && boolRPN;
|
||||
}
|
||||
|
||||
private boolean calcRecipients2(Product product, ExcelDataRow data) {
|
||||
int countFNS = 0,
|
||||
countFSS = 0,
|
||||
countRosstat = 0,
|
||||
countPFR = 0,
|
||||
countRosalco = 0,
|
||||
countRPN = 0;
|
||||
|
||||
for (Recipient recipient : product.recipients) {
|
||||
switch (recipient.protocolId) {
|
||||
case 12:
|
||||
case 10: break;
|
||||
case 6:
|
||||
case 13:
|
||||
countFNS += recipient.kpp.size();
|
||||
break;
|
||||
case 5: countFSS++; break;
|
||||
case 4: countRosstat++; break;
|
||||
case 2: countPFR++; break;
|
||||
case 9: countRosalco++; break;
|
||||
case 15: countRPN++; break;
|
||||
default: logger.warn("Не известный тип Направления: {}/{}/{}", recipient.protocolId, recipient.code, recipient.name);
|
||||
}
|
||||
}
|
||||
|
||||
boolean boolFNS = (countFNS == 0 || countFNS == 1 + data.addonKpp);
|
||||
if (countFNS == 0 && data.addonKpp > 0) {
|
||||
logger.warn("({}/{}): Внимание! Странное значение ФНС/Доп.КПП", data.inn, data.kpp);
|
||||
}
|
||||
boolean boolFSS = (countFSS == 0 || countFSS == 1);
|
||||
boolean boolRosstat = (countRosstat == 0 || countRosstat == 1);
|
||||
boolean boolPFR = (countPFR == 0 || countPFR == 1);
|
||||
|
||||
if (countFNS + countFSS + countRosstat + countPFR + data.addonKpp > 2 + data.addonKpp + data.addonNaprov) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean boolRosalco = (countRosalco == 0 || countRosalco == 1);
|
||||
boolean boolRPN = (countRPN == 0 || countRPN == 1);
|
||||
|
||||
return boolFNS && boolFSS && boolRosstat && boolPFR && boolRosalco && boolRPN;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user