0

AstralSession: история сертификатов как List

This commit is contained in:
2016-06-08 01:46:50 +03:00
parent df19bef260
commit 1acf532f15
6 changed files with 44 additions and 59 deletions

View File

@@ -7,12 +7,17 @@ package ru.dmitriymx.astralcheckreport;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ru.dmitriymx.astralcheckreport.objects.*; import ru.dmitriymx.astralcheckreport.objects.*;
import ru.dmitriymx.tools.browser.Browser; import ru.dmitriymx.tools.browser.Browser;
import ru.dmitriymx.tools.browser.SimpleBrowser; import ru.dmitriymx.tools.browser.SimpleBrowser;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class AstralSession { public class AstralSession {
private Logger logger = LoggerFactory.getLogger(AstralSession.class.getSimpleName()); private Logger logger = LoggerFactory.getLogger(AstralSession.class.getSimpleName());
private Browser browser = new SimpleBrowser(); private Browser browser = new SimpleBrowser();
@@ -71,12 +76,15 @@ public class AstralSession {
return gson.fromJson(jsonObj.get("d").getAsString(), Organization.class); return gson.fromJson(jsonObj.get("d").getAsString(), Organization.class);
} }
public JsonObject historyCert(int productId) { public List<Cert> historyCert(int productId) {
String postData = "{\"productId\":" + productId + "}"; String postData = "{\"productId\":" + productId + "}";
String jsonStr = browser.post("http://reg.astralnalog.ru/AbonentModule.aspx/GetCertificatesHistory", postData); String jsonStr = browser.post("http://reg.astralnalog.ru/AbonentModule.aspx/GetCertificatesHistory", postData);
JsonObject jsonObj = str2jsonObj(jsonStr); JsonObject jsonObj = str2jsonObj(jsonStr);
return str2jsonObj(jsonObj.get("d").getAsString()); jsonObj = str2jsonObj(jsonObj.get("d").getAsString());
Type listType = new TypeToken<ArrayList<Cert>>(){}.getType();
return gson.fromJson(jsonObj.get("rows"), listType);
} }
private JsonObject str2jsonObj(String jsonStr) { private JsonObject str2jsonObj(String jsonStr) {

View File

@@ -8,4 +8,5 @@ import java.util.Date;
public class Cert { public class Cert {
public Date startCertDate; public Date startCertDate;
public Date endCertDate;
} }

View File

@@ -18,9 +18,19 @@ public class CertDeserialize implements JsonDeserializer<Cert> {
Cert cert = new Cert(); Cert cert = new Cert();
JsonObject jsonObject = jsonElement.getAsJsonObject(); JsonObject jsonObject = jsonElement.getAsJsonObject();
String dateStr = jsonObject.get("startCertDate").getAsString().substring(0, 10); String dateStr = null;
String dateStrEnd = null;
if (jsonObject.has("startCertDate")) {
dateStr = jsonObject.get("startCertDate").getAsString().substring(0, 10);
} else if (jsonObject.has("cell")) {
dateStr = jsonObject.get("cell").getAsJsonArray().get(1).getAsString();
dateStrEnd = jsonObject.get("cell").getAsJsonArray().get(1).getAsString();
}
try { try {
cert.startCertDate = sdf.parse(dateStr); cert.startCertDate = sdf.parse(dateStr);
if (dateStrEnd != null)
cert.endCertDate = sdf.parse(dateStrEnd);
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -8,10 +8,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ru.dmitriymx.astralcheckreport.AstralSession; import ru.dmitriymx.astralcheckreport.AstralSession;
import ru.dmitriymx.astralcheckreport.ExcelDataRow; import ru.dmitriymx.astralcheckreport.ExcelDataRow;
import ru.dmitriymx.astralcheckreport.Main;
import ru.dmitriymx.astralcheckreport.objects.Cert;
import ru.dmitriymx.astralcheckreport.objects.LeftObject; import ru.dmitriymx.astralcheckreport.objects.LeftObject;
import ru.dmitriymx.astralcheckreport.objects.Organization; import ru.dmitriymx.astralcheckreport.objects.Organization;
import ru.dmitriymx.astralcheckreport.objects.Product; import ru.dmitriymx.astralcheckreport.objects.Product;
import java.util.List;
public abstract class AbstractTarifProcessor { public abstract class AbstractTarifProcessor {
private static LeftObject astralNalogPlugin = new LeftObject(15); private static LeftObject astralNalogPlugin = new LeftObject(15);
private Logger logger = LoggerFactory.getLogger(AbstractTarifProcessor.class); private Logger logger = LoggerFactory.getLogger(AbstractTarifProcessor.class);
@@ -41,5 +45,16 @@ public abstract class AbstractTarifProcessor {
} }
} }
protected int countActiveCert(List<Cert> historyCert) {
int result = 0;
for (Cert cert : historyCert) {
if (cert.endCertDate.after(Main.currentDate)) {
result++;
}
}
return result;
}
protected abstract void process0(AstralSession astral, Organization organization, ExcelDataRow data); protected abstract void process0(AstralSession astral, Organization organization, ExcelDataRow data);
} }

View File

@@ -16,6 +16,7 @@ import ru.dmitriymx.astralcheckreport.objects.*;
import java.text.ParseException; import java.text.ParseException;
import java.util.Date; import java.util.Date;
import java.util.List;
/** Тариф: Акция 3 месяца */ /** Тариф: Акция 3 месяца */
public class Akcia3MountTarifProcessor extends AbstractTarifProcessor { public class Akcia3MountTarifProcessor extends AbstractTarifProcessor {
@@ -41,7 +42,7 @@ public class Akcia3MountTarifProcessor extends AbstractTarifProcessor {
// Сертификатов должно быть: // Сертификатов должно быть:
// - либо один // - либо один
// - либо соответствовать формуле "1 + доп.сертификаты" // - либо соответствовать формуле "1 + доп.сертификаты"
JsonObject historyCert = astral.historyCert(product.id); List<Cert> historyCert = astral.historyCert(product.id);
int totalActiveCerts = countActiveCert(historyCert); int totalActiveCerts = countActiveCert(historyCert);
if (totalActiveCerts > 1) { if (totalActiveCerts > 1) {
if (totalActiveCerts != (1 + data.getAddonCert())) { if (totalActiveCerts != (1 + data.getAddonCert())) {
@@ -68,25 +69,4 @@ public class Akcia3MountTarifProcessor extends AbstractTarifProcessor {
logger.trace("Тариф игнорируется: \"{}\"", tarif.name); logger.trace("Тариф игнорируется: \"{}\"", tarif.name);
} }
} }
private int countActiveCert(JsonObject historyCert) {
JsonArray rows = historyCert.get("rows").getAsJsonArray();
int result = 0;
for (JsonElement element : rows) {
JsonObject jsonObject = element.getAsJsonObject();
Date endDate;
try {
endDate = Main.sdf.parse(jsonObject.get("cell").getAsJsonArray().get(2).getAsString());
} catch (ParseException e) {
logger.error("Ошибка при форматировании даты");
return 0;
}
if (endDate.after(Main.currentDate)) {
result++;
}
}
return result;
}
} }

View File

@@ -12,12 +12,14 @@ import org.slf4j.LoggerFactory;
import ru.dmitriymx.astralcheckreport.AstralSession; import ru.dmitriymx.astralcheckreport.AstralSession;
import ru.dmitriymx.astralcheckreport.ExcelDataRow; import ru.dmitriymx.astralcheckreport.ExcelDataRow;
import ru.dmitriymx.astralcheckreport.Main; import ru.dmitriymx.astralcheckreport.Main;
import ru.dmitriymx.astralcheckreport.objects.Cert;
import ru.dmitriymx.astralcheckreport.objects.Organization; import ru.dmitriymx.astralcheckreport.objects.Organization;
import ru.dmitriymx.astralcheckreport.objects.Product; import ru.dmitriymx.astralcheckreport.objects.Product;
import ru.dmitriymx.astralcheckreport.objects.Tarif; import ru.dmitriymx.astralcheckreport.objects.Tarif;
import java.text.ParseException; import java.text.ParseException;
import java.util.Date; import java.util.Date;
import java.util.List;
/** Тариф: (пустое значение) */ /** Тариф: (пустое значение) */
public class EmptyTarifProcessor extends AbstractTarifProcessor { public class EmptyTarifProcessor extends AbstractTarifProcessor {
@@ -28,7 +30,7 @@ public class EmptyTarifProcessor extends AbstractTarifProcessor {
protected void process0(AstralSession astral, Organization organization, ExcelDataRow data) { protected void process0(AstralSession astral, Organization organization, ExcelDataRow data) {
// Step I: Проверяем // Step I: Проверяем
Product product = organization.products.get(0); Product product = organization.products.get(0);
JsonObject historyCert = astral.historyCert(product.id); List<Cert> historyCert = astral.historyCert(product.id);
int totalActiveCerts = countActiveCert(historyCert); int totalActiveCerts = countActiveCert(historyCert);
if (totalActiveCerts < 1 + data.getAddonCert()) { if (totalActiveCerts < 1 + data.getAddonCert()) {
logger.warn("({}/{}): Странно... Сертификатов меньше чем надо", organization.inn, organization.kpp); logger.warn("({}/{}): Странно... Сертификатов меньше чем надо", organization.inn, organization.kpp);
@@ -39,41 +41,10 @@ public class EmptyTarifProcessor extends AbstractTarifProcessor {
} }
Tarif tarif = product.contractTariffs.get(0); Tarif tarif = product.contractTariffs.get(0);
JsonArray certArr = historyCert.get("rows").getAsJsonArray(); for (Cert cert : historyCert) {
for (JsonElement element : certArr) { if (cert.startCertDate.before(tarif.date_initialDate)) {
JsonObject jsonObject = element.getAsJsonObject();
Date certDate;
try {
certDate = Main.sdf.parse(jsonObject.get("cell").getAsJsonArray().get(1).getAsString());
} catch (ParseException e) {
logger.error("({}/{}): Ошибка при форматировании даты", organization.inn, organization.kpp);
return;
}
if (certDate.before(tarif.date_initialDate)) {
logger.error("({}/{}): Ошибка: сертификат выдан раньше тарифа!", organization.inn, organization.kpp); logger.error("({}/{}): Ошибка: сертификат выдан раньше тарифа!", organization.inn, organization.kpp);
} }
} }
} }
private int countActiveCert(JsonObject historyCert) {
JsonArray rows = historyCert.get("rows").getAsJsonArray();
int result = 0;
for (JsonElement element : rows) {
JsonObject jsonObject = element.getAsJsonObject();
Date endDate;
try {
endDate = Main.sdf.parse(jsonObject.get("cell").getAsJsonArray().get(2).getAsString());
} catch (ParseException e) {
logger.error("Ошибка при форматировании даты");
return 0;
}
if (endDate.after(Main.currentDate)) {
result++;
}
}
return result;
}
} }