DataService.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. package es.uv.saic.service;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.net.HttpURLConnection;
  5. import java.net.URI;
  6. import java.net.http.HttpClient;
  7. import java.net.http.HttpRequest;
  8. import java.net.http.HttpResponse;
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.sql.ResultSet;
  12. import java.sql.ResultSetMetaData;
  13. import java.sql.SQLException;
  14. import java.sql.Statement;
  15. import java.sql.Timestamp;
  16. import java.util.ArrayList;
  17. import java.util.Arrays;
  18. import java.util.HashMap;
  19. import java.util.List;
  20. import java.util.Map;
  21. import javax.sql.rowset.CachedRowSet;
  22. import javax.sql.rowset.RowSetFactory;
  23. import javax.sql.rowset.RowSetProvider;
  24. import jakarta.mail.MessagingException;
  25. import org.apache.commons.csv.CSVFormat;
  26. import org.apache.commons.csv.CSVParser;
  27. import org.apache.commons.csv.CSVRecord;
  28. import org.apache.commons.lang.StringUtils;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.stereotype.Service;
  31. import org.springframework.util.LinkedCaseInsensitiveMap;
  32. import es.uv.saic.domain.IndicadorEnquestaTmp;
  33. import es.uv.saic.domain.Usuari;
  34. import es.uv.saic.dto.EmailDTO;
  35. import es.uv.saic.dto.IndicadorEnquestaTmpDup;
  36. import es.uv.saic.dto.OrganDTO;
  37. import es.uv.saic.feing.CoreClient;
  38. import es.uv.saic.domain.Datasource;
  39. @Service
  40. public class DataService {
  41. @Autowired
  42. private DatasourceService dss;
  43. @Autowired
  44. private CoreClient cc;
  45. private HashMap<String, String> titsMap;
  46. private HashMap<String, String> centresMap;
  47. public DataService() {
  48. titsMap = new HashMap<String, String>();
  49. titsMap.put("TRAD", "1099");
  50. centresMap = new HashMap<String, String>();
  51. centresMap.put("INDV", "121");
  52. centresMap.put("POST", "121");
  53. centresMap.put("EDOC", "62");
  54. }
  55. public String doImport(InputStreamReader in, Usuari usuari, String enquesta, String ambit, String estudi,
  56. String locale, String delim, String clau, List<String> ignoredColumns) throws IOException, MessagingException {
  57. CSVFormat format = CSVFormat.DEFAULT.builder()
  58. .setHeader()
  59. .setIgnoreHeaderCase(true)
  60. .setSkipHeaderRecord(true)
  61. .setIgnoreEmptyLines(true)
  62. .setIgnoreSurroundingSpaces(true)
  63. .setDelimiter(delim)
  64. .setRecordSeparator('\n')
  65. .build();
  66. CSVParser parser = format.parse(in);
  67. List<CSVRecord> records = parser.getRecords();
  68. List<String> header = parser.getHeaderNames();
  69. List<String> headerInds = new ArrayList<>(header);
  70. StringBuilder errors = new StringBuilder();
  71. /* 1) Comprobar columnas obligatorias */
  72. List<String> mandatoryColumns = new ArrayList<String>();
  73. List<String> knownColumns = new ArrayList<String>();
  74. if(clau.equals("ruct")) {
  75. this.setColumnsRuct(ambit, knownColumns, mandatoryColumns);
  76. }
  77. else {
  78. this.setColumnsCod(ambit, knownColumns, mandatoryColumns);
  79. }
  80. if(!this.checkColumns(header, mandatoryColumns, errors, locale)) {
  81. return errors.append("[ERROR] " + (locale.equals("es") ? "Se han encontrado errores en el fichero proporcionado. No se ha importado ningún registro. " : "S'han trobat errors al fitxer proporcionat. No s'ha importat cap registre.")).append("<br>").toString();
  82. }
  83. /* 2) Eliminar las columnas obligatorias, conocidas e ignoradas. El resto se consideran indicadores a importar */
  84. knownColumns.addAll(mandatoryColumns);
  85. knownColumns.addAll(ignoredColumns);
  86. for(String c : knownColumns) {
  87. headerInds.removeIf(v->v.equalsIgnoreCase(c));
  88. }
  89. /* 3) Comprobar valores y tipos */
  90. if(!this.checkValues(records, ambit, clau, errors, locale)) {
  91. return errors.append(("[ERROR] " + (locale.equals("es") ? "Se han encontrado errores en el fichero proporcionado. No se ha importado ningún registro. " : "S'han trobat errors al fitxer proporcionat. No s'ha importat cap registre."))).append("<br>").toString();
  92. }
  93. /* 4) Importar datos */
  94. Integer numRecords = 0;
  95. Integer numTuples = 0;
  96. for (CSVRecord record : records) {
  97. Map<String, String> recordMap = new LinkedCaseInsensitiveMap<>();
  98. recordMap.putAll(record.toMap());
  99. String c = ambit.equals("T") || ambit.equals("C") ? translateCentre(recordMap.get("centre")) : null;
  100. String t = ambit.equals("T") ? translateTitulacio(recordMap.get("titulacio")) : null;
  101. String type = recordMap.get("tipus");
  102. Integer curs = Integer.parseInt(recordMap.get("curs").replaceAll("\\D+",""));
  103. String cursEnquesta = recordMap.containsKey("curs_enquesta") ? recordMap.get("curs_enquesta") : null;
  104. String titulacioOrigen = recordMap.containsKey("titulacio_origen") ? recordMap.get("titulacio_origen") : null;
  105. String centreOrigen = recordMap.containsKey("centre_origen") ? recordMap.get("centre_origen") : null;
  106. Integer nenq = recordMap.containsKey("nenq") ? Integer.parseInt(recordMap.get("nenq").replaceAll("\\D+","")) : null;
  107. String ructStr = recordMap.containsKey("ruct") ? recordMap.get("ruct").replaceAll("\\D+","") : null;
  108. String cursd = recordMap.containsKey("cursd") ? recordMap.get("cursd") : null;
  109. Integer ruct = null;
  110. if(ructStr != null) {
  111. if(!(ructStr.isBlank() || ructStr.isEmpty() || ructStr.equals("NULL") || ructStr.equals("null"))) {
  112. ruct = Integer.parseInt(ructStr);
  113. }
  114. }
  115. Integer centre;
  116. Integer titulacio;
  117. if(clau.equals("ruct") && ambit.equals("T") && ruct != null) {
  118. OrganDTO o = findOrgByRuct(ruct);
  119. if(o == null) {
  120. errors.append("[WARNING] " + (locale.equals("es") ? "No se ha encontrado el RUCT "+ructStr+", se omiten los registros de esta entrada." : "No s'ha trobat el RUCT "+ructStr+", s'ometen els registres d'aquesta entrada.")).append("<br>").toString();
  121. continue;
  122. }
  123. titulacio = o.getLugar();
  124. centre = o.getLugar2();
  125. }
  126. else{
  127. centre = ambit.equals("T") || ambit.equals("C") ? Integer.parseInt(c.replaceAll("\\D+","")) : null;
  128. titulacio = ambit.equals("T") ? Integer.parseInt(t) : null;
  129. if(!existsOrg("T", titulacio)){
  130. errors.append("[WARNING] " + (locale.equals("es") ? "No se ha encontrado la titulación con código "+titulacio+" pero se importa igualmente." : "No s'ha trobat la titulació amb codi "+titulacio+" però s'importa igualment")).append("<br>").toString();
  131. }
  132. }
  133. if(header.contains("cursd")) {
  134. cursd = recordMap.get("cursd").replaceAll("\\D+","");
  135. }
  136. for(String r : headerInds) {
  137. IndicadorEnquestaTmp ie = new IndicadorEnquestaTmp();
  138. ie.setEnquesta(enquesta);
  139. ie.setTitulacio(titulacio);
  140. ie.setCentre(centre);
  141. ie.setCurs(curs);
  142. ie.setAmbit(ambit);
  143. ie.setEstudi(estudi);
  144. ie.setIndicador(r.replace("_min", "").replace("_max", "").toLowerCase());
  145. ie.setNum(null);
  146. ie.setCursd(cursd);
  147. ie.setTipus(type);
  148. ie.setUsuari(usuari.getUsuari());
  149. ie.setData(new Timestamp(System.currentTimeMillis()));
  150. ie.setCursEnquesta(cursEnquesta);
  151. ie.setTitulacioOrigen(titulacioOrigen);
  152. ie.setCentreOrigen(centreOrigen);
  153. ie.setNenq(nenq);
  154. ie.setRuct(ruct);
  155. try {
  156. ie.setValor(record.get(r).replace(",", "."));
  157. }
  158. catch(Exception ex) {
  159. ie.setValor(null);
  160. }
  161. save(ie);
  162. numRecords++;
  163. }
  164. numTuples++;
  165. }
  166. /* 5) Notificar administradores y usuario implicado */
  167. this.sendNotificacion(usuari, enquesta, ambit, estudi);
  168. if(!usuari.isAdmin()){
  169. this.sendConfirmation(usuari.getUsuari(), enquesta, ambit, estudi);
  170. }
  171. errors.append("[INFO] " + (locale.equals("es") ? ("Se han importado "+numRecords.toString()+" nuevos registros para un total de "+numTuples.toString()+" titulaciones") : ("[INFO] S'han importat "+numRecords.toString()+" nous registres per a un total de "+numTuples.toString()+" titulacions")));
  172. return errors.toString();
  173. }
  174. public String doDbImport(Integer dbOrigen, String vista, Integer srcCurs, Integer dstCurs, Usuari usuari, String enquesta, String ambit,
  175. String estudi, String locale, String clau, List<String> ignoredColumns) throws SQLException, ClassNotFoundException {
  176. StringBuilder errors = new StringBuilder();
  177. Datasource source = this.dss.findById(dbOrigen);
  178. if(source == null){
  179. return errors.append("[ERROR] " + (locale.equals("es") ? "No se ha proporcionado un origen de datos válido." : "No s'ha proporcionat un origen de dades vàlid.")).append("<br>").toString();
  180. }
  181. String query = "SELECT * FROM "+vista+ " WHERE curs = "+srcCurs;
  182. Class.forName(source.getDriver());
  183. Integer numRecords = 0;
  184. Integer numTuples = 0;
  185. try (Connection connection = DriverManager.getConnection(source.getConn())) {
  186. /* 1) Ejecutar consulta */
  187. Statement statement = connection.createStatement();
  188. ResultSet resultset = statement.executeQuery(query);
  189. ResultSetMetaData resultMetadata = resultset.getMetaData();
  190. int columns = resultMetadata.getColumnCount();
  191. /* 2) Obtener resultados para procesar online y cerrar conexión */
  192. RowSetFactory factory = RowSetProvider.newFactory();
  193. CachedRowSet result = factory.createCachedRowSet();
  194. result.populate(resultset);
  195. connection.close();
  196. /* 3) Comprobar columnas obligatorias */
  197. List<String> mandatoryColumns = new ArrayList<String>();
  198. List<String> knownColumns = new ArrayList<String>();
  199. if(clau.equals("ruct")) {
  200. this.setColumnsRuct(ambit, knownColumns, mandatoryColumns);
  201. }
  202. else {
  203. this.setColumnsCod(ambit, knownColumns, mandatoryColumns);
  204. }
  205. List<String> allColNames = new ArrayList<String>();
  206. for(int i = 1; i <= columns; i++){
  207. allColNames.add(resultMetadata.getColumnLabel(i).toLowerCase());
  208. }
  209. List<String> colnames = new ArrayList<String>(allColNames);
  210. if(!this.checkColumns(colnames, mandatoryColumns, errors, locale)) {
  211. return errors.append("[ERROR] " + (locale.equals("es") ? "Se han encontrado errores al procesar la vista seleccionada. No se ha importado ningún registro. " : "S'han trobat errors al processar la vista seleccionada. No s'ha importat cap registre.")).append("<br>").toString();
  212. }
  213. knownColumns.addAll(mandatoryColumns);
  214. knownColumns.addAll(ignoredColumns);
  215. for(String c : knownColumns) {
  216. colnames.removeIf(v->v.equalsIgnoreCase(c));
  217. }
  218. if(ambit.equals("T") && !clau.equals("ruct")){
  219. return errors.append("[ERROR] " + (locale.equals("es") ? "Los datos de titulación deben de importarse por código RUCT" : "Les dades de titulació s'han d'importar per códi RUCT.")).append("<br>").toString();
  220. }
  221. /* 4) Importar datos */
  222. while(result.next()) {
  223. Integer ruct = null;
  224. Integer titulacio = null;
  225. Integer centre = null;
  226. String c = ambit.equals("C") ? translateCentre(result.getString("centre")) : null;
  227. boolean isValid = true;
  228. if(ambit.equals("T")) {
  229. String ructStr = result.getString("ruct");
  230. if(ructStr != null) {
  231. if(!(ructStr.isBlank() || ructStr.isEmpty() || ructStr.equals("NULL") || ructStr.equals("null"))) {
  232. ruct = Integer.parseInt(ructStr);
  233. }
  234. else{
  235. isValid = false;
  236. }
  237. }
  238. else{
  239. isValid = false;
  240. }
  241. OrganDTO o = findOrgByRuct(ruct);
  242. if(o == null) {
  243. errors.append("[WARNING] " + (locale.equals("es") ? "No se ha encontrado el RUCT "+ructStr+", se omiten los registros de esta entrada." : "No s'ha trobat el RUCT "+ructStr+", s'ometen els registres d'aquesta entrada.")).append("<br>").toString();
  244. continue;
  245. }
  246. titulacio = o.getLugar();
  247. centre = o.getLugar2();
  248. }
  249. else if(ambit.equals("C")) {
  250. centre = ambit.equals("T") || ambit.equals("C") ? Integer.parseInt(c.replaceAll("\\D+","")) : null;
  251. if(centre == null){
  252. isValid = false;
  253. }
  254. }
  255. if(isValid) {
  256. Integer curs = dstCurs == null ? result.getInt("curs") : dstCurs;
  257. String tipus = allColNames.contains("tipus") ? result.getString("tipus") : "avg";
  258. String cursEnquesta = allColNames.contains("curs_enquesta") ? result.getString("curs_enquesta") : null;
  259. String titulacioOrigen = allColNames.contains("titulacio_origen") ? result.getString("titulacio_origen") : null;
  260. String centreOrigen = allColNames.contains("centre_origen") ? result.getString("centre_origen") : null;
  261. Integer nenq = allColNames.contains("nenq") ? result.getInt("nenq") : null;
  262. String cursd = allColNames.contains("cursd") ? result.getString("cursd") : null;
  263. for(String colName : colnames) {
  264. IndicadorEnquestaTmp ie = new IndicadorEnquestaTmp();
  265. ie.setEnquesta(enquesta);
  266. ie.setTitulacio(titulacio);
  267. ie.setCentre(centre);
  268. ie.setCurs(curs);
  269. ie.setAmbit(ambit);
  270. ie.setEstudi(estudi);
  271. ie.setIndicador(colName.replace("_min", "").replace("_max", "").toLowerCase());
  272. ie.setNum(null);
  273. ie.setCursd(cursd);
  274. ie.setTipus(tipus);
  275. ie.setUsuari(usuari.getUsuari());
  276. ie.setData(new Timestamp(System.currentTimeMillis()));
  277. ie.setCursEnquesta(cursEnquesta);
  278. ie.setTitulacioOrigen(titulacioOrigen);
  279. ie.setCentreOrigen(centreOrigen);
  280. ie.setNenq(nenq);
  281. ie.setRuct(ruct);
  282. try {
  283. ie.setValor(result.getString(colName).replace(",", "."));
  284. }
  285. catch(Exception ex) {
  286. ie.setValor(null);
  287. }
  288. save(ie);
  289. numRecords++;
  290. }
  291. numTuples++;
  292. }
  293. }
  294. }
  295. /* 5) Notificar administradores y usuario implicado */
  296. this.sendNotificacion(usuari, enquesta, ambit, estudi);
  297. if(!usuari.isAdmin()){
  298. this.sendConfirmation(usuari.getUsuari(), enquesta, ambit, estudi);
  299. }
  300. errors.append("[INFO] " + (locale.equals("es") ? ("Se han importado "+numRecords.toString()+" nuevos registros para un total de "+numTuples.toString()+" titulaciones") : ("[INFO] S'han importat "+numRecords.toString()+" nous registres per a un total de "+numTuples.toString()+" titulacions")));
  301. return errors.toString();
  302. }
  303. public List<String> listTableColumns(Integer dbOrigen, String vista, String locale) throws SQLException, ClassNotFoundException {
  304. Datasource source = this.dss.findById(dbOrigen);
  305. String query = "SELECT * FROM "+vista+" LIMIT 1;";
  306. Class.forName(source.getDriver());
  307. List<String> colNames = new ArrayList<String>();
  308. try (Connection connection = DriverManager.getConnection(source.getConn())) {
  309. Statement statement = connection.createStatement();
  310. ResultSet resultset = statement.executeQuery(query);
  311. ResultSetMetaData resultMetadata = resultset.getMetaData();
  312. int columns = resultMetadata.getColumnCount();
  313. for(int i = 1; i <= columns; i++){
  314. colNames.add(resultMetadata.getColumnLabel(i));
  315. }
  316. }
  317. return colNames;
  318. }
  319. public List<IndicadorEnquestaTmpDup> checkDuplicates(String enquesta) {
  320. return checkDuplicatesAux(enquesta);
  321. }
  322. public Integer consolidateByEnquesta(String enquesta) {
  323. if(checkDuplicates(enquesta).size() > 0) {
  324. return -1;
  325. }
  326. else {
  327. Integer i = cc.consolidateByEnquesta(enquesta);
  328. deleteByEnquesta(enquesta);
  329. return i;
  330. }
  331. }
  332. public Integer countByEnquesta(String enquesta) {
  333. return countByEnquestaAux(enquesta);
  334. }
  335. public List<IndicadorEnquestaTmpDup> checkIntegrity(String enquesta){
  336. return cc.checkIntegrity(enquesta);
  337. }
  338. public Integer deleteFromCurrent(String enquesta){
  339. return cc.deleteFromCurrent(enquesta);
  340. }
  341. public Integer deleteFromPending(String enquesta){
  342. return cc.deleteFromPending(enquesta);
  343. }
  344. private void setColumnsCod(String ambit, List<String> knownColumns, List<String> mandatoryColumns) {
  345. knownColumns.addAll(Arrays.asList("ruct", "curs_enquesta", "centre_origen", "titulacio_origen", "nenq", "cursd"));
  346. if(ambit.equals("U")) {
  347. mandatoryColumns.addAll(Arrays.asList("curs", "tipus"));
  348. }
  349. else if(ambit.equals("C")) {
  350. mandatoryColumns.addAll(Arrays.asList("curs", "centre", "tipus"));
  351. }
  352. else {
  353. mandatoryColumns.addAll(Arrays.asList("curs", "titulacio", "centre", "tipus"));
  354. }
  355. }
  356. private void setColumnsRuct(String ambit, List<String> knownColumns, List<String> mandatoryColumns) {
  357. knownColumns.addAll(Arrays.asList("curs_enquesta", "centre_origen", "titulacio_origen", "nenq", "cursd"));
  358. if(ambit.equals("U")) {
  359. mandatoryColumns.addAll(Arrays.asList("curs", "tipus"));
  360. }
  361. else if(ambit.equals("C")) {
  362. mandatoryColumns.addAll(Arrays.asList("curs", "tipus", "ruct"));
  363. knownColumns.add("centre");
  364. }
  365. else {
  366. mandatoryColumns.addAll(Arrays.asList("curs", "tipus", "ruct"));
  367. knownColumns.addAll(Arrays.asList("centre", "titulacio"));
  368. }
  369. }
  370. private boolean checkColumns(List<String> header, List<String> mandatoryColumns, StringBuilder errors, String locale) {
  371. boolean isvalid = true;
  372. for(String c : mandatoryColumns) {
  373. if(!header.stream().anyMatch(c::equalsIgnoreCase)) {
  374. isvalid = false;
  375. errors.append((locale.equals("es") ? "[ERROR] No se ha encontrado la columna " : "[ERROR] No s'ha trobat la columna ") +c).append("<br>");
  376. }
  377. }
  378. return isvalid;
  379. }
  380. private boolean checkValues(List<CSVRecord> records, String ambit, String clau, StringBuilder errors, String locale) {
  381. boolean isvalid = true;
  382. Integer numRecords = 0;
  383. for (CSVRecord record : records) {
  384. Map<String, String> recordMap = new LinkedCaseInsensitiveMap<>();
  385. recordMap.putAll(record.toMap());
  386. String type = recordMap.get("tipus");
  387. numRecords++;
  388. if((ambit.equals("T") || ambit.equals("C")) && !clau.equals("ruct")) {
  389. String c = recordMap.get("centre");
  390. c = translateCentre(c);
  391. if(!StringUtils.isNumeric(c.replace("C", ""))) {
  392. isvalid = false;
  393. errors.append("[ERROR] " + (locale.equals("es") ? "En la linea " : "A la línia ") + numRecords.toString() + ": " + (locale.equals("es") ? c+" no es un valor válido para la columna centre." : c+" no es un valor vàlid per la columna centre.")).append("<br>");
  394. }
  395. }
  396. if(ambit.equals("T")) {
  397. String t = recordMap.get("titulacio");
  398. if(!clau.equals("ruct")) {
  399. t = translateTitulacio(t);
  400. if(!StringUtils.isNumeric(t)) {
  401. isvalid = false;
  402. errors.append("[ERROR] " + (locale.equals("es") ? "En la linea " : "A la línia ") + numRecords.toString() + ": " + (locale.equals("es") ? t+" no es un valor válido para la columna titulacio." : t+" no es un valor vàlid per la columna titulacio.")).append("<br>");
  403. }
  404. }
  405. else {
  406. String ructStr = recordMap.get("ruct");
  407. if(!ructStr.isBlank() && ructStr.isEmpty() && ructStr.equals("NULL") && ructStr.equals("null") && !StringUtils.isNumeric(t)) {
  408. isvalid = false;
  409. errors.append("[ERROR] " + (locale.equals("es") ? "En la linea " : "A la línia ") + numRecords.toString() + ": " + (locale.equals("es") ? ructStr+" no es un valor válido para la columna ruct." : ructStr+" no es un valor vàlid per la columna ruct.")).append("<br>");
  410. }
  411. }
  412. }
  413. if(!type.equals("avg") && !type.equals("min") && !type.equals("max")) {
  414. isvalid = false;
  415. errors.append("[ERROR] " + (locale.equals("es") ? "En la linea " : "A la línia ") + numRecords.toString() + ": " + (locale.equals("es") ? type+" no es un valor válido para la columna tipus." : type+" no es un valor vàlid per la columna tipus.")).append("<br>");
  416. }
  417. }
  418. return isvalid;
  419. }
  420. private void sendNotificacion(Usuari usuari, String enquesta, String ambit, String estudi) {
  421. sendMail("saic@uv.es", "[SYS] Datos pendientes de consolidar", "Estimado/a administrador: \n"
  422. + "\n"
  423. + "El usuario "+usuari.getUsuari()+" ha importado nuevos datos referentes a: \n"
  424. + "Origen: "+enquesta+"\n"
  425. + "Ámbito: "+ambit+"\n"
  426. + "Tipo titulación: "+estudi+"\n"
  427. + "\n"
  428. + "Acceda a https://saic.uv.es y realice las acciones pertinentes para consolidar los datos. ");
  429. }
  430. private void sendConfirmation(String to, String enquesta, String ambit, String estudi) {
  431. sendMail(to, "[SYS] Nuevos datos importados", "Estimado/a usuario: \n"
  432. + "\n"
  433. + "Se han importado correctamente nuevos datos referentes a: \n"
  434. + "Origen: "+enquesta+"\n"
  435. + "Ámbito: "+ambit+"\n"
  436. + "Tipo titulación: "+estudi+"\n"
  437. + "\n"
  438. + "Los datos se quedarán en estado pendiente de consolidar hasta que un administrador inicie el proceso de consolidación.");
  439. }
  440. /* Exepciones en el código de titulación que hay que traducir a código SAIC */
  441. private String translateTitulacio(String t) {
  442. if(!StringUtils.isNumeric(t)) {
  443. if(this.titsMap.containsKey(t)) {
  444. return this.titsMap.get(t);
  445. }
  446. }
  447. return t;
  448. }
  449. /* Exepciones en el código de centro que hay que traducir a código SAIC */
  450. private String translateCentre(String c) {
  451. if(!StringUtils.isNumeric(c)) {
  452. if(this.centresMap.containsKey(c)) {
  453. return this.centresMap.get(c);
  454. }
  455. }
  456. return c;
  457. }
  458. private OrganDTO findOrgByRuct(Integer ruct) {
  459. return cc.getOrgByRuct(ruct);
  460. }
  461. private boolean existsOrg(String tlugar, Integer titulacio) {
  462. return cc.existsOrg(tlugar, titulacio);
  463. }
  464. private void deleteByEnquesta(String enquesta) {
  465. cc.deleteByEnquestaC(enquesta);
  466. }
  467. private void save(IndicadorEnquestaTmp ie) {
  468. cc.save(ie);
  469. }
  470. private List<IndicadorEnquestaTmpDup> checkDuplicatesAux(String enquesta) {
  471. return cc.checkDuplicates(enquesta);
  472. }
  473. private Integer countByEnquestaAux(String enquesta) {
  474. return cc.countByEnquesta(enquesta);
  475. }
  476. private void sendMail(String string, String string2, String string3) {
  477. EmailDTO email = new EmailDTO(string, string2, string3);
  478. cc.sendEmail(email);
  479. }
  480. }