Commit 8c259785 authored by Alina Habibulina's avatar Alina Habibulina

[FIX] испраления в справчониках, ссылках на реестр. добавлена api для...

[FIX] испраления в справчониках, ссылках на реестр. добавлена api для просмотре информации о результатах импорта
parent 7be53921
package kz.arta.ext.sap.util;
import com.google.gson.*;
import kz.arta.ext.sap.State;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.slf4j.Logger;
......@@ -35,23 +36,21 @@ public class ImportBean {
private static Map<String, String> defaultValues = new HashMap<>();
private static Map<String, String> searchValues = new HashMap<>();
private static List<Row> errors = new ArrayList<>();
public static volatile State importState;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void getFormFieldForRowAsync(final Row row, final FormulaEvaluator evaluator, final Map<String, FormField> formDefinitionMap, final String registryCode, final Boolean isActivate, final String login, final String password, final int action, final Boolean shouldPasteMeaningValue) {
executor.submit(new Runnable() {
@Override
public void run() {
importState.count.incrementAndGet();
getFormFieldForRow(row, evaluator, formDefinitionMap, registryCode, login, password, isActivate, action, shouldPasteMeaningValue);
}
});
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public static String parseFile(String filename, String formcode, String registryCode, Boolean isActivate, String login, String password, int action, String defaultValue, String searchString, Boolean shouldPasteMeaningValue) throws Exception {
errors = new ArrayList<>();
public static State parseFile(String filename, String formcode, String registryCode, Boolean isActivate, String login, String password, int action, String defaultValue, String searchString, Boolean shouldPasteMeaningValue) throws Exception {
LOGGER.info("Start pasrsing file: " + filename);
//рид файл
......@@ -88,13 +87,15 @@ public class ImportBean {
Sheet importedFileSheet = importedFileWB.getSheetAt(i);
List<Row> sheetRows = getAllSheetRows(importedFileSheet);
importState = new State(sheetRows.size());
for(Row row : sheetRows){
try {
ImportBean iu = new ImportBean();
iu.getFormFieldForRowAsync(row, evaluator, formDefinitionMap, registryCode, isActivate, login, password, action, shouldPasteMeaningValue);
} catch (Exception e){
errors.add(row);
importState.errors.add(e.getMessage());
LOGGER.error(e.getMessage());
}
}
......@@ -106,7 +107,7 @@ public class ImportBean {
throw new Exception("Wrong form definition! " + jsonTree.getAsString());
}
return "Начат импорт записей реестра, его процесс и результаты пишутся в логи Synergy!";
return importState;
}
private static String formateRequestData(List<FormField> data, String registryCode){
......@@ -251,7 +252,7 @@ public class ImportBean {
FormField defField = formFields.get(header);
if (defField == null) {
errors.add(row);
importState.errors.add("Import error in line :" + (row.getRowNum() + 1));
LOGGER.error("Import error in line :" + (row.getRowNum() + 1));
}
FormField valueFF = new FormField(defField);
......@@ -259,6 +260,14 @@ public class ImportBean {
if(cellValue == null) continue;
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
String value = "";
try {
value = cellValue.getNumberValue() + "";
} catch (NullPointerException e){
value = cellValue.getStringValue();
}
if (defField.getType().equals(FormFieldType.DATE.value)) {
if (cell.getDateCellValue() == null) {
continue;
......@@ -271,20 +280,20 @@ public class ImportBean {
( date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()) + ":" +
( date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds()));
} else {
valueFF.setValue(new BigDecimal(cellValue.getNumberValue() + "").toPlainString());
valueFF.setValue(new BigDecimal(value + "").toPlainString());
}
try {
if (valueFF.isRegLink()) valueFF.setValue(Integer.parseInt(valueFF.getValue()) + "");
if (valueFF.isRegLink()) valueFF.setValue(value + "");
} catch (Exception ingnore){
valueFF.setValue(((int)Double.parseDouble(valueFF.getValue())) + "");
valueFF.setValue(value + "");
}
break;
case Cell.CELL_TYPE_STRING:
if (cellValue.getStringValue() == null || cellValue.getStringValue().equals("")) {
continue;
}
String value = cellValue.getStringValue().replaceAll("\"","\\\\\"");
valueFF.setValue(value);
String val = cellValue.getStringValue().replaceAll("\"","\\\\\"");
valueFF.setValue(val);
break;
case Cell.CELL_TYPE_BLANK:
continue;
......@@ -304,8 +313,7 @@ public class ImportBean {
for (int i = 0; i < values.length; i++) {
arlvals.add(values[i]);
if (valueFF.getElements().get(values[i]) == null) {
errors.add(row);
LOGGER.error("Import error in line :" + (row.getRowNum() + 1));
importState.errors.add("Import error in line :" + (row.getRowNum() + 1)); LOGGER.error("Import error in line :" + (row.getRowNum() + 1));
return;
} else {
keys.add(valueFF.getElements().get(values[i]));
......@@ -316,7 +324,11 @@ public class ImportBean {
valueFF.setKeys(keys);
} else {
valueFF.setKey(valueFF.getElements().get(valueFF.getValue()));
try {
valueFF.setKey(valueFF.getElements().get(valueFF.getValue()));
}catch (Exception ignore){
importState.errors.add("Dictionary element not found for value " + valueFF.getValue() + ", and fieldCode " + header);
}
}
} else if (valueFF.isEntity()) {
......@@ -325,7 +337,12 @@ public class ImportBean {
//TODO: распилить все ячейки по одной дин таблице хз как
} else if (valueFF.isRegLink()) {
String documentID = getRegLinkObject(valueFF.getRegistryID(), valueFF.getCode(), valueFF.getValue(), action, login, password);
String documentID = "";
try {
documentID = getRegLinkObject(valueFF.getRegistryID(), valueFF.getCode(), valueFF.getValue(), action, login, password);
}catch (Exception e){
importState.errors.add("Error in reglink with value: " + valueFF.getValue() + ", couldn't find registry.");
}
if(shouldPasteMeaningValue){
//если в value нужно вставить значимое содержимое реестра, то вставляем новый value
valueFF.setValue(getMeaningContentForRegLink(documentID, login, password));
......@@ -336,7 +353,7 @@ public class ImportBean {
rowFF.add(valueFF);
} catch (Exception e){
LOGGER.error("Error in line :" + (row.getRowNum() + 1) + ". Something wrong with cell of type: " + cellValue.getCellType() +
importState.errors.add("Error in line :" + (row.getRowNum() + 1) + ". Something wrong with cell of type: " + cellValue.getCellType() +
", and value: \"" + cellValue.formatAsString() + "\". The header is: \"" + header + "\".");
LOGGER.error(e.getMessage());
}
......@@ -349,23 +366,26 @@ public class ImportBean {
JsonElement jsonAnswr = answrPars.parse(answer);
String errorCode = jsonAnswr.getAsJsonObject().get("errorCode").getAsString();
if(!errorCode.equals("0")){
errors.add(row);
importState.errors.add("CREATE DOC RCC error in line :" + (row.getRowNum() + 1));
LOGGER.error("CREATE DOC RCC error in line :" + (row.getRowNum() + 1));
} else {
if (isActivate) {
String dataUUID = jsonAnswr.getAsJsonObject().get("dataID").getAsString();
HTTPRequestUtils.sendGet(BASE_URL + "rest/api/registry/activate_doc?dataUUID=" + dataUUID, login, password);
importState.imported.incrementAndGet();
} else {
importState.imported.incrementAndGet();
}
}
} else {
errors.add(row);
importState.errors.add("Import error in line :" + (row.getRowNum() + 1));
LOGGER.error("Import error in line :" + (row.getRowNum() + 1));
return;
}
} catch (Exception e){
errors.add(row);
importState.errors.add("Import error in line :" + (row.getRowNum() + 1));
LOGGER.error("Import error in line :" + (row.getRowNum() + 1), e.getMessage());
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment