Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save cesarockstar1985/734e8911bae89fefc444f4a03fcb5975 to your computer and use it in GitHub Desktop.

Select an option

Save cesarockstar1985/734e8911bae89fefc444f4a03fcb5975 to your computer and use it in GitHub Desktop.
//package cast.backend.migrator.autopiezas; //TODO: comentar
import cast.portal.core.srv.CommandService;
import cast.portal.iface.srv.DeviceInfoService;
import cast.portal.monitor.dto.DeviceInfoEventDTO;
import cast.portal.security.ent.User;
import cast.portal.util.DataBaseHelper;
import com.sun.org.apache.xml.internal.security.utils.Base64;
import grails.plugin.mail.MailService;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.datasource.DataSourceUtils;
import javax.sql.DataSource;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
MigradorBackend migradorBackend = new MigradorBackend(ctx,log,user,commandData); //TODO: descomentar
return migradorBackend.executeCommand();
public class MigradorBackend {
final String PARAMETER_SEPARATOR = "¤";
final String BLOCK_SEPARATOR = "¥";
final String BLOCK_SEPARATOR_DETAILS = "€";
final String BLOCK_SEPARATOR_PAYMENT = "\$"
private DataSource dataSourcePortalNG, dataSourcePortalBackend;
private Connection connPortalBackend, connPortalNG;
PreparedStatement ps;
ResultSet rs;
private ApplicationContext appCtx;
private Logger log;
private Map<String, String> commandData;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private CommandService commandSrv;
private DeviceInfoService deviceInfoSrv;
private Random random;
private HashMap<String, String> deviceInfoEventTypesMap;
private HashMap<String, String> userAccessKeyMap = new HashMap<>();
public MigradorBackend(ApplicationContext appCtx, Logger log, User user, Map<String, String> commandData) throws Throwable {
this.appCtx = appCtx;
this.log = log;
this.commandData = commandData;
dataSourcePortalNG = (DataSource) this.appCtx.getBean("dataSource");
dataSourcePortalBackend = (DataSource) this.appCtx.getBean("castPortalBackend");
this.connPortalNG = DataSourceUtils.getConnection(dataSourcePortalNG);
this.connPortalNG.setAutoCommit(false);
this.connPortalBackend = DataSourceUtils.getConnection(dataSourcePortalBackend);
this.connPortalBackend.setAutoCommit(false);
this.commandSrv = (CommandService) appCtx.getBean("commandService");
this.deviceInfoSrv = (DeviceInfoService) appCtx.getBean("deviceInfoService");
this.random = new Random();
this.deviceInfoEventTypesMap = getDeviceInfoEventTypesMap();
}
private HashMap<String, String> getDeviceInfoEventTypesMap(){
HashMap<String, String> dieTypesNameMap = new HashMap<>();
dieTypesNameMap.put("GPS_STATUS", "gps");
dieTypesNameMap.put("WIFI_STATUS", "wifi");
dieTypesNameMap.put("FIRST_LOGIN", "firstConfiguration");
dieTypesNameMap.put("MOCK_LOCATION_STATUS", "mockLocation");
dieTypesNameMap.put("MOBILE_DATA_STATUS", "data");
dieTypesNameMap.put("CREDIT_MESSAGE", "creditMeesage");
return dieTypesNameMap;
}
public String executeCommand() throws Throwable {
PreparedStatement psNotProcessed = null, psProcessed = null, psException = null;
long startTime = System.currentTimeMillis();
try{
log.info("------ castPortalBackend Migrator STARTED ------");
ArrayList<MigrationControlDTO> messagesToProcess = loadMigrationData();
if(messagesToProcess != null && messagesToProcess.size() > 0){
//Consulta y almacena la clave de acceso de los usuarios con documentos pendientes de migracion
reloadUserData();
ArrayList<DeviceInfoDTO> deviceInfoList = new ArrayList<>();
ArrayList<DeviceInfoEventDTO> deviceInfoEventList = new ArrayList<>();
psNotProcessed = connPortalBackend.prepareStatement("UPDATE migration_control set migrated_status = 'NP' where id = ?");
psProcessed = connPortalBackend.prepareStatement("UPDATE migration_control set migrated_status = 'M', migrated_date = now() where id = ?");
psException = connPortalBackend.prepareStatement("UPDATE migration_control set migrated_status = 'P', exception_date = now(), exception_message = ? where id = ?");
HashSet<String> usersWithExceptions = new HashSet<>();
MigrationControlDTO message = null;
for (int i = 0; i < messagesToProcess.size(); i++) {
boolean messageWasProcessed = false;
boolean isDeviceInfoMessage = false;
try {
String messageString = "";
message = messagesToProcess.get(i);
log.info("------------- Message to migrate -------------: \n" + message.toString() );
if (!usersWithExceptions.contains(message.username)) {
switch (message.domainName.toLowerCase().trim()) {
case "tracking":
messageWasProcessed = true;
messageString = generateTrackingMessage(message);
break;
case "device_info":
isDeviceInfoMessage = true;
messageWasProcessed = true;
deviceInfoList.add(generateDeviceInfoDTO(message));
break;
case "device_info_event":
isDeviceInfoMessage = true;
messageWasProcessed = true;
deviceInfoEventList.add(generateDeviceEventInfoDTO(message));
break;
case "route_detail":
switch (message.eventType) {
case "SV":
messageWasProcessed = true;
messageString = generateStartVisitMessage(message);
break;
case "EV":
messageWasProcessed = true;
messageString = generateEndVisitMessage(message);
break;
case "ASR":
messageWasProcessed = true;
messageString = generateAddSubjectInRouteMessage(message);
break;
}
break;
case "subject":
switch (message.eventType) {
case "AP":
messageWasProcessed = true;
messageString = generateSubjectPotentialMessage(message);
break;
}
break;
case "delivery_detail":
switch (message.eventType) {
case "D":
messageWasProcessed = true;
messageString = generateDeliveryMessage(message);
break;
}
break;
case "workday":
switch (message.eventType) {
case "SW":
messageWasProcessed = true;
messageString = generateStartWorkdayMessage(message);
break;
case "EW":
messageWasProcessed = true;
messageString = generateEndWorkdayMessage(message);
break;
}
break;
case "receipt":
switch(message.eventType){
case "C":
messageWasProcessed = true;
messageString = generateReceiptMessage(message);
break;
case "AR":
messageWasProcessed = true;
messageString = generateAnnulationReceiptMessage(message);
break;
case "SPC":
messageWasProcessed = true;
messageString = generateReprintUpdateReceiptMessage(message);
break;
}
break;
case "orders":
switch (message.eventType) {
case "OR":
messageWasProcessed = true;
messageString = generateOrdersMessage(message);
break;
}
break;
case "subject_attribute_assignment":
switch (message.eventType) {
case "SA":
messageWasProcessed = true;
messageString = generteSubjectAttributeAssignmentMessage(message);
break;
}
break;
case "invoice":
switch(message.eventType){
case "VD":
messageWasProcessed = true;
messageString = generateInvoiceVDMessage(message);
break;
}
break;
}
if (!isDeviceInfoMessage) {
if(!messageWasProcessed) {
log.info("Discarded message. Not implemented..");
updateNotProcessed(psNotProcessed, message);
} else {
log.info("Message String: " + messageString);
String messageResponse = executeCommandService(message, messageString);
log.info("Message Response: " + messageResponse);
if (messageResponse.startsWith("0|")) {
updateProcessed(psProcessed, message);
} else {
throw new Exception("Error en el procesamiento de mensaje: " +messageResponse);
}
}
}else {
log.info("Message device info type! Added in list!");
}
log.info("------------- Message processed -------------" );
} else {
log.info("Usuario " + message.username + " no procesado se encuentra con errores.");
}
} catch (Throwable t) {
log.error("----- Error al procesar un mensaje de migracion ----");
log.error(t,t);
connPortalBackend.rollback();
if (message != null){
usersWithExceptions.add(message.username);
updateException(psException, message, t);
String body = "Error en la migracion de mensaje del castPortal3. Verificar registro en la tabla migration_control. \n Excepcion: " + t.toString() + " \nMensaje: " + message.toString();
sendMail(body, null, null, null);
}
}
connPortalBackend.commit();
}
// Al terminar evalua los device info para migrar de una vez
migrateDeviceInfoMessages(deviceInfoList);
migrateDeviceInfoEventMessages(deviceInfoEventList);
}
log.info("------ castPortalBackend Migrator FINISHED ------");
}catch (Throwable th){
log.error("ERROR executeCommand: "+th);
connPortalBackend.rollback();
log.error("ERROR executeCommand: "+th, th);
}finally{
log.info("------ castPortalBackend Migrator FINALLY ------");
DataBaseHelper.closeRs(rs);
DataBaseHelper.closePs(ps);
DataBaseHelper.closePs(psNotProcessed);
DataBaseHelper.closePs(psProcessed);
DataBaseHelper.closePs(psException);
long finishTime = System.currentTimeMillis();
DataBaseHelper.releaseConnection(connPortalBackend, dataSourcePortalBackend);
log.info("Migrator Total Process Time in Seconds: " + ((finishTime - startTime) / 1000.0));
log.info("------ castPortalBackend Migrator FINALLY ------");
}
return "";
}
private void reloadUserData() throws Throwable{
if(userAccessKeyMap != null){
log.debug("======= reloadUserData - Started ========");
ResultSet rs = null;
PreparedStatement ps = null;
try {
ps = connPortalNG.prepareStatement("SELECT username, pin FROM users WHERE username = ANY (?) ");
ps.setArray(1, connPortalNG.createArrayOf("varchar", userAccessKeyMap.keySet().toArray()));
rs = ps.executeQuery();
String pinStr = "";
while (rs.next()){
pinStr = rs.getString("pin");
pinStr = (pinStr == null || pinStr.equals("")) ? "81dc9bdb52d04dc20036dbd8313ed055" : pinStr;
userAccessKeyMap.put(rs.getString("username"), pinStr);
}
}catch (Throwable th){
log.error("ERROR: reloadUserData. "+th.getMessage());
throw th;
}finally{
log.debug("======= reloadUserData - Finished =======");
DataBaseHelper.closeRs(rs);
DataBaseHelper.closePs(ps);
}
}else{
log.info("No se encontraron username de usuarios para la consulta");
}
}
private String generteSubjectAttributeAssignmentMessage(MigrationControlDTO message) throws Throwable{
StringBuilder sb;
String query = "SELECT (select code from subject where id = subject_id) as subject_code, saa.ng_id, sav.description from subject_attribute_assignment saa join subject_attribute_value sav on sav.id = saa.subject_attribute_value_id join subject_attribute sa on sa.id = sav.subject_attribute_id where sa.id = 'autopiezas|1667919934877|1244835784|6' and saa.id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs= ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".SEG_ASS").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("ng_id")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("description")).append(PARAMETER_SEPARATOR);
} else{
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateEndVisitMessage(MigrationControlDTO message) throws Throwable{
StringBuilder sb;
String query = "select d.id, d.subject_code, d.subject_name, d.subject_fiscal_number, " +
"d.subject_commercial_name, d.subject_address, d.visit_type, d.ev_observation, d.with_supervisor, " +
"d.visit_positive, d.ev_reason " +
"from route r join route_detail d on r.id = d.route_id where d.id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs= ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
ArrayList<String> coordinates = searchEventCoordinate(rs.getString("id"), message.eventType);
String photo = searchSubjectPhoto(rs.getString("id"));
sb.append(".CAST_EV").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
if(rs.getBoolean("visit_positive")){
sb.append("1.Positivo").append(PARAMETER_SEPARATOR); //VISIT RESULT
}else{
sb.append("2.Negativo").append(PARAMETER_SEPARATOR); //VISIT RESULT
}
if(rs.getString("ev_reason") == null){
sb.append("-1").append(PARAMETER_SEPARATOR);
}else{
sb.append(rs.getString("ev_reason")).append(PARAMETER_SEPARATOR); //VISIT REASON
}
sb.append("-1").append(PARAMETER_SEPARATOR); //next Visit Date
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT1
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT2
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT3
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT4
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT5
if(rs.getString("ev_observation") == null || (rs.getString("ev_observation")).equals("")){
sb.append("-1").append(PARAMETER_SEPARATOR);
}else{
sb.append(rs.getString("ev_observation")).append(PARAMETER_SEPARATOR);; //OBSERVATION
}
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateStartVisitMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
String query = "select d.id, d.subject_code, d.subject_name, d.subject_fiscal_number, " +
"d.subject_commercial_name, d.subject_address, d.visit_type, d.sv_observation, d.with_supervisor " +
"from route r join route_detail d on r.id = d.route_id where d.id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
ArrayList<String> subjectDataArray = searchSubjectData(rs.getString("subject_code"));
ArrayList<String> coordinates = searchEventCoordinate(rs.getString("id"), message.eventType);
String photo = searchSubjectPhoto(rs.getString("id"));
String visitType = rs.getString("visit_type");
sb.append(".CAST_SV").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_fiscal_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_commercial_name")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR); //CONTACT_NAME
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_address")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR); //PHONE NUMBER
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
if(!visitType.equalsIgnoreCase("Presencial")){
sb.append("No").append(PARAMETER_SEPARATOR); //SUBJECT_LOCALIZABLE
}else{
sb.append(subjectDataArray.get(1)).append(PARAMETER_SEPARATOR); //SUBJECT_LOCALIZABLE
}
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(photo).append(PARAMETER_SEPARATOR); //SUBJECT_PHOTO
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT1
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT2
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT3
sb.append("-1").append(PARAMETER_SEPARATOR); //OPT4
sb.append(visitType).append(PARAMETER_SEPARATOR); //OPT5
String observation = visitType;
observation += " - "+rs.getString("sv_observation");
//if(observation != null && !observation.equals("")){
sb.append(observation).append(PARAMETER_SEPARATOR);
/*}else{
sb.append("-1").append(PARAMETER_SEPARATOR);
}*/
sb.append(coordinates.get(0)).append(PARAMETER_SEPARATOR); //LATITUDE
sb.append(coordinates.get(1)).append(PARAMETER_SEPARATOR); //LONGITUDE
sb.append(coordinates.get(2)).append(PARAMETER_SEPARATOR); //altitude
sb.append(coordinates.get(3)).append(PARAMETER_SEPARATOR); //verticalAccuracy
sb.append(coordinates.get(4)).append(PARAMETER_SEPARATOR); //horizontalAccuracy
sb.append(coordinates.get(5)).append(PARAMETER_SEPARATOR); //locationTimeMillis
sb.append(coordinates.get(6)).append(PARAMETER_SEPARATOR); //isTrueLocation
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private ArrayList<String> searchSubjectData(String subjectCode) throws Throwable{
ArrayList<String> subjectDataArray = new ArrayList<>();
PreparedStatement ps = null;
ResultSet rs = null;
try {
StringBuilder sb = new StringBuilder();
sb.append("SELECT active, localizable FROM subject WHERE code = ?");
ps = connPortalBackend.prepareStatement(sb.toString());
ps.setString(1, subjectCode);
rs = ps.executeQuery();
String status = "2.Inactivo", localizable = "Si";
if(rs.next()){
if(rs.getBoolean("active")){
status = "1.Activo";
}
if(rs.getBoolean("localizable")){
localizable = "Si";
}
subjectDataArray.add(status);
subjectDataArray.add(localizable);
}else{
subjectDataArray.add("-1");
subjectDataArray.add("No");
}
} catch (Throwable th) {
log.error("ERROR searchSubjectData: "+th, th);
throw th;
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return subjectDataArray;
}
private String searchSubjectPhoto(String routeDetailId) throws Throwable{
String photo = "-1";
PreparedStatement ps = null;
ResultSet rs = null;
try {
byte [] photoBytes = null;
StringBuilder sb = new StringBuilder();
sb.append("SELECT photo FROM subject_photo WHERE route_detail_id = ?");
ps = connPortalBackend.prepareStatement(sb.toString());
ps.setString(1, routeDetailId);
rs = ps.executeQuery();
if(rs.next()){
photoBytes = rs.getBytes("photo");
}
if(photoBytes != null){
photo = Base64.encode(photoBytes);
}
} catch (Throwable th) {
log.error("ERROR searchSubjectPhoto: "+th, th);
throw th;
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return photo;
}
private String searchWorkdayPhoto(String workdayId, String status) throws Throwable{
String photo = "-1";
PreparedStatement ps = null;
ResultSet rs = null;
try {
byte [] photoBytes = null;
StringBuilder sb = new StringBuilder();
sb.append("SELECT photo FROM workday_photo WHERE workday_id = ? AND workday_status = ?");
ps = connPortalBackend.prepareStatement(sb.toString());
ps.setString(1, workdayId);
ps.setString(2, status);
rs = ps.executeQuery();
if(rs.next()){
photoBytes = rs.getBytes("photo");
}
if(photoBytes != null){
photo = Base64.encode(photoBytes);
}
} catch (Throwable th) {
log.error("ERROR searchWorkdayPhoto: "+th, th);
throw th;
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return photo;
}
private ArrayList<String> searchEventCoordinate(String routeDetailId, String eventType) throws Throwable{
ArrayList<String> coordinates = new ArrayList<>();
PreparedStatement ps = null;
ResultSet rs = null;
try {
StringBuilder sb = new StringBuilder();
sb.append("SELECT e.latitude, e.longitude, e.altitude, e.vertical_accuracy, e.horizontal_accuracy, ");
sb.append("e.localization_time_millis, e.is_true_location ");
sb.append("FROM event e JOIN event_type et ON e.event_type_id = et.id WHERE domain_id = ? AND et.code = ?");
ps = connPortalBackend.prepareStatement(sb.toString());
ps.setString(1, routeDetailId);
ps.setString(2, eventType);
rs = ps.executeQuery();
if(rs.next()){
if(rs.getString("latitude") != null && !rs.getString("latitude").equals("")){
coordinates.add(rs.getString("latitude"));
}else{
coordinates.add("0");
}
if(rs.getString("longitude") != null && !rs.getString("longitude").equals("")){
coordinates.add(rs.getString("longitude"));
}else{
coordinates.add("0");
}
if(rs.getString("altitude") != null && !rs.getString("altitude").equals("")){
coordinates.add(rs.getString("altitude"));
}else{
coordinates.add("0");
}
if(rs.getString("vertical_accuracy") != null && !rs.getString("vertical_accuracy").equals("")){
coordinates.add(rs.getString("vertical_accuracy"));
}else{
coordinates.add("0");
}
if(rs.getString("horizontal_accuracy") != null && !rs.getString("horizontal_accuracy").equals("")){
coordinates.add(rs.getString("horizontal_accuracy"));
}else{
coordinates.add("0");
}
if(rs.getString("localization_time_millis") != null && !rs.getString("localization_time_millis").equals("")){
coordinates.add(rs.getString("localization_time_millis"));
}else{
coordinates.add("0");
}
if(rs.getBoolean("is_true_location")){
coordinates.add("0");
}else{
coordinates.add("1");
}
} else{
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
}
} catch (Throwable th) {
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
coordinates.add("0");
log.error("ERROR searchEventCoordinate: "+th, th);
throw th;
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return coordinates;
}
private String generateAddSubjectInRouteMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
String query = "select * from route r join route_detail d on r.id = d.route_id where d.id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".CAST_ASR").append(PARAMETER_SEPARATOR);
sb.append(sdf.format(rs.getDate("start_day"))).append(BLOCK_SEPARATOR); //ROUTE DATE
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append("0").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("sequence")).append(PARAMETER_SEPARATOR); //SEQUENCE
sb.append(PARAMETER_SEPARATOR); //ROW NUMBER
sb.append("0");
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateSubjectPotentialMessage(MigrationControlDTO message) throws Throwable {
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder sb = new StringBuilder();
try {
String query = "select id, temporary_code, subject_name,fiscal_number, '-1' as company_alias, telephone, address, '-1' as prospectList, location_city_id, latitude, longitude, (case active when active then 'Activo' else 'Inactivo' end) as Activo, '-1' as observation from subject where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
/*Obtener los valores adicionales*/
String contactName = searchSubjectContacts(rs.getString("id"));
String city = searchSubjectCity(rs.getString("location_city_id"));
String photo = searchProspectPhoto(rs.getString("id"));
String regPotencial = searchRegPotencial(rs.getString("id"));
String potLiters = searchPotLiters(rs.getString("id"));
String reason = searchReason(rs.getString("id"));
/*Cargar en el mapa a retornar*/
sb.append(".AP").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("temporary_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("fiscal_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("company_alias")).append(PARAMETER_SEPARATOR);
sb.append(contactName).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("telephone")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("address")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("2.Prospecto").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(photo).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("latitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("longitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("Activo")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);//22 usa el 24
//Si registra potencial de volumen(si o no)
sb.append(regPotencial).append(PARAMETER_SEPARATOR);
//potencial en litros, si no hay potencial en litros retornar '-1'
sb.append(potLiters).append(PARAMETER_SEPARATOR);
sb.append(reason).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("observation")).append(PARAMETER_SEPARATOR);
}
}catch (Throwable th) {
log.error("ERROR generateSubjectPotentialMessage: "+th, th);
throw new Exception("ERROR generateSubjectPotentialMessage: "+th);
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return sb.toString();
}
/*private String generateSubjectPotentialMessage(MigrationControlDTO message) throws Throwable {
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder sb = new StringBuilder();
try {
String query = "SELECT s.id, address, s.code, commercial_name, fiscal_number, latitude, localizable, longitude, subject_name, telephone, person_type, location_city_id, location_departament_id, location_country_id, sale_condition_id, location_district_id, price_list_id FROM subject s where s.id = ? ";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
String contactName = searchSubjectContacts(rs.getString("id"));
String photo = searchProspectPhoto(rs.getString("id"));
String companyAlias = addDefaultValue(rs.getString("commercial_name"));
String telephone = addDefaultValue(rs.getString("telephone"));
String address = addDefaultValue(rs.getString("address"));
String city = searchSubjectCity(rs.getString("location_city_id"));
String departament = searchSubjectDepartament(rs.getString("location_departament_id"));
String district = searchSubjectDistrict(rs.getString("location_district_id"));
String rubro = getAttributeValue(rs.getString("id"), "rubro");
String condition_sale = getCondition(rs.getString("sale_condition_id"));
String price_list = getPriceList(rs.getString("price_list_id"));
String localizable = rs.getBoolean("localizable") ? "Si" : "No";
String personType = "2.Fisica";
if (rs.getString("person_type").equals("Juridica")) {
personType = "1.Juridica";
}
sb.append(".CAST_SSP").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("fiscal_number")).append(PARAMETER_SEPARATOR);
sb.append(companyAlias).append(PARAMETER_SEPARATOR); //company_alias
sb.append(contactName).append(PARAMETER_SEPARATOR);
sb.append(telephone).append(PARAMETER_SEPARATOR);
sb.append(address).append(PARAMETER_SEPARATOR);
sb.append(city).append(PARAMETER_SEPARATOR); //city
sb.append("2.Prospecto").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(district).append(PARAMETER_SEPARATOR); //Barrio
sb.append(departament).append(PARAMETER_SEPARATOR); // --Departament
sb.append(price_list).append(PARAMETER_SEPARATOR); // --priceList
sb.append(condition_sale).append(PARAMETER_SEPARATOR); //Condicion de venta.
sb.append(photo).append(PARAMETER_SEPARATOR);
sb.append(rs.getDouble("latitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getDouble("longitude")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR); //Codigo de usuario.
sb.append("-1").append(PARAMETER_SEPARATOR); //nombre de usuario.
sb.append(rubro).append(PARAMETER_SEPARATOR); //rubro
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("id")); //replica_id
} else {
throw new Exception("No se encontro subject con id "+message.domainId);
}
}catch (Throwable th) {
log.error("ERROR generateSubjectPotentialMessage: "+th, th);
throw new Exception("ERROR generateSubjectPotentialMessage: "+th);
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return sb.toString();
}*/
private String searchProspectPhoto(String subjectId) throws Throwable{
String photo = "-1";
PreparedStatement ps = null;
ResultSet rs = null;
try {
byte [] photoBytes = null;
StringBuilder sb = new StringBuilder();
sb.append("SELECT photo FROM subject_photo WHERE (cast_deleted = FALSE OR cast_deleted IS NULL) AND subject_id = ? ORDER BY creation_date DESC LIMIT 1");
ps = connPortalBackend.prepareStatement(sb.toString());
ps.setString(1, subjectId);
rs = ps.executeQuery();
if(rs.next()){
photoBytes = rs.getBytes("photo");
}
if(photoBytes != null){
photo = Base64.encode(photoBytes);
}
} catch (Throwable th) {
log.error("ERROR searchProspectPhoto: "+th, th);
throw th;
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return photo;
}
private String searchSubjectCity(String subjectCityId) throws Exception {
String city="-1";
try {
String query = "select description from location_city where id=?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectCityId);
rs = ps.executeQuery();
if(rs.next()){
city = rs.getString("description");
}
} catch(Exception ex) {
log.error("searchSubjectCity: " + ex);
throw ex;
}
return city;
}
private String searchSubjectDepartament(String subjectDepartamentId) throws Exception {
String departament ="-1";
try {
String query = "select code ||'.'|| description as description from location_departament where id= ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectDepartamentId);
rs = ps.executeQuery();
if(rs.next()){
departament = rs.getString("description");
}
} catch(Exception ex) {
log.error("searchSubjectDepartament: " + ex);
throw ex;
}
return departament;
}
private String searchSubjectDistrict(String subjectDistrictId) throws Exception {
String district="-1";
try {
String query = "select description from location_district where id=?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectDistrictId);
rs = ps.executeQuery();
if(rs.next()){
district = rs.getString("description");
}
} catch(Exception ex) {
log.error("searchSubjectDistrict: " + ex);
throw ex;
}
return district;
}
private String getAttributeValue(String id, String attribute_code) throws Throwable {
try {
String query = "select code || '.' || description as value from subject_attribute_value where subject_attribute_id in (select id from subject_attribute where code = '$attribute_code' and cast_deleted is false) and id in (select subject_attribute_value_id from subject_attribute_assignment where subject_id = ?)";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, id);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("value");
}else{
return "-1";
}
} catch(Exception ex) {
log.error("getAttributeValue: " + ex);
throw ex;
}
}
private String getCondition(String condition) throws Throwable {
try {
String query = "select code || '.' || description as condition from sale_condition where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, condition);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("condition");
}else{
return "-1";
}
} catch(Exception ex) {
log.error("getCondition: " + ex);
throw ex;
}
}
private String getPriceList(String price_list_id) throws Throwable {
try {
String query = "select code || '.' || description as price_list from price_list where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, price_list_id);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("price_list");
}else{
return "-1";
}
} catch(Exception ex) {
log.error("getPriceList: " + ex);
throw ex;
}
}
private String searchRegPotencial(String subjectId) throws Exception {
try {
String query = "select sav.description from subject_attribute_assignment saa join subject_attribute_value sav on sav.id = saa.subject_attribute_value_id where sav.subject_attribute_id = 'autopiezas|1667919934877|1244835784|7' and saa.subject_id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectId);
rs = ps.executeQuery();
if(rs.next()){
if (rs.getString("description") == "Si"){
return rs.getString("description");
} else{
return "-1";
}
}
} catch(Exception ex) {
log.error("searchSubjectContacts: " + ex);
throw ex;
}
return "-1";
}
private String searchPotLiters(String subjectId) throws Exception {
try {
String query = "select sav.description from subject_attribute_assignment saa join subject_attribute_value sav on sav.id = saa.subject_attribute_value_id where sav.subject_attribute_id = 'autopiezas|1667919934877|1244835784|1' and saa.subject_id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectId);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("description");
}
} catch(Exception ex) {
log.error("searchSubjectContacts: " + ex);
throw ex;
}
return "-1";
}
private String searchReason(String subjectId) throws Exception {
try {
String query = "select coalesce(impl_potencial_motivo, '') as impl_potencial_motivo from subject where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectId);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("impl_potencial_motivo");
}
} catch(Exception ex) {
log.error("searchSubjectContacts: " + ex);
throw ex;
}
return "-1";
}
private String searchSubjectContacts(String subjectId) throws Exception {
try {
String query = "SELECT contact_name FROM subject_contacts WHERE subject_id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, subjectId);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("contact_name");
}
} catch(Exception ex) {
log.error("searchSubjectContacts: " + ex);
throw ex;
}
return "-1";
}
private String addDefaultValue(String value) {
if (value.trim().length() > 0) {
return value;
}
return "-1";
}
private void migrateDeviceInfoEventMessages(ArrayList<DeviceInfoEventDTO> deviceInfoEventList) throws Throwable {
log.info("Device info to migrate: " + deviceInfoEventList.size());
HashSet<Long> idsWithErrorsMap = new HashSet<>();
StringBuilder errorsId = new StringBuilder();
StringBuilder migratedId = new StringBuilder();
if (deviceInfoEventList.size() > 0) {
Long[] deviceInfoIdWithErrors = deviceInfoSrv.processDeviceInfoEvent(deviceInfoEventList);
if (deviceInfoIdWithErrors != null) {
for (Long deviceInfoIdWithError : deviceInfoIdWithErrors) {
idsWithErrorsMap.add(deviceInfoIdWithError);
}
}
for (DeviceInfoEventDTO deviceInfoEventDTO : deviceInfoEventList) {
if (idsWithErrorsMap.contains(deviceInfoEventDTO.id)) {
if (!errorsId.toString().equals("")) {
errorsId.append(", ");
}
errorsId.append(deviceInfoEventDTO.id);
} else {
if (!migratedId.toString().equals("")) {
migratedId.append(", ");
}
migratedId.append(deviceInfoEventDTO.id);
}
}
if (!errorsId.toString().equals("")) {
updateDeviceInfoException(errorsId.toString());
}
if (!migratedId.toString().equals("")) {
updateDeviceInfoMigrated(migratedId.toString());
}
}
}
private void migrateDeviceInfoMessages(ArrayList<DeviceInfoDTO> deviceInfoList) throws Throwable {
log.info("Device info to migrate: " + deviceInfoList.size());
HashSet<Long> idsWithErrorsMap = new HashSet<>();
StringBuilder errorsId = new StringBuilder();
StringBuilder migratedId = new StringBuilder();
if (deviceInfoList.size() > 0) {
Long[] deviceInfoIdWithErrors = deviceInfoSrv.processDeviceInfo(deviceInfoList);
if (deviceInfoIdWithErrors != null) {
for (Long deviceInfoIdWithError : deviceInfoIdWithErrors) {
idsWithErrorsMap.add(deviceInfoIdWithError);
}
}
for (DeviceInfoDTO deviceInfoDTO : deviceInfoList) {
if (idsWithErrorsMap.contains(deviceInfoDTO.id)) {
if (!errorsId.toString().equals("")) {
errorsId.append(", ");
}
errorsId.append(deviceInfoDTO.id);
} else {
if (!migratedId.toString().equals("")) {
migratedId.append(", ");
}
migratedId.append(deviceInfoDTO.id);
}
}
if (!errorsId.toString().equals("")) {
updateDeviceInfoException(errorsId.toString());
}
if (!migratedId.toString().equals("")) {
updateDeviceInfoMigrated(migratedId.toString());
}
}
}
private void updateDeviceInfoException(String errorsId) throws Throwable {
Statement st = null;
try {
st = connPortalBackend.createStatement();
int updated = st.executeUpdate("UPDATE migration_control set exception_date = now() where id in (" + errorsId + ")");
log.info("Device Info / Event marcados con error: " + updated);
String body = "Device Info / Device Info Event no migrados: " + errorsId;
sendMail(body, null, null, null);
connPortalBackend.commit();
} catch (Throwable t) {
log.error("Error al procesar actualizacion de device info no migrados: "+ t);
throw t;
} finally {
DataBaseHelper.closeStatement(st);
}
}
private void updateDeviceInfoMigrated(String migratedId) throws Throwable {
Statement st = null;
try {
st = connPortalBackend.createStatement();
int updated = st.executeUpdate("UPDATE migration_control set migrated_status = 'M', migrated_date = now() where id in (" + migratedId + ")");
connPortalBackend.commit();
} catch (Throwable t) {
log.error("Error al procesar actualizacion de device info migrados: "+ t);
throw new Exception("Error al procesar actualizacion de device info migrados: " + t);
} finally {
DataBaseHelper.closeStatement(st);
}
}
private String executeCommandService(MigrationControlDTO message, String messageString) {
String username = message.username;
String mobilePin = "81dc9bdb52d04dc20036dbd8313ed055";
if(userAccessKeyMap != null){
mobilePin = userAccessKeyMap.get(username);
}
String[] messageData = new String[8];
messageData[0] = "MOBILEORI_KEY:"+username;
messageData[1] = "MOBILEDEST_KEY:"+ username;
messageData[2] = "TEXT_KEY:"+ messageString;
messageData[3] = "SEQ_KEY:"+ "castPortalBackend|" +username+ "|" + System.currentTimeMillis();
messageData[4] = "CAST_ID:0";
messageData[5] = "IS_FULL:true";
messageData[6] = "DOCUMENT_TIME:"+ message.documentTime;
messageData[7] = "MOBILE_PIN:"+mobilePin;
//for para loguear el array messageData
for (int i = 0; i < messageData.length; i++) {
log.info("messageData["+i+"] = " + messageData[i]);
}
return commandSrv.processMessage(messageData);
}
private void updateException(PreparedStatement psException, MigrationControlDTO message, Throwable t) {
try {
psException.setString(1,t.toString());
psException.setLong(2, message.migrationControlId);
psException.executeUpdate();
} catch (Throwable e) {
log.error("Error al marcar como excepcion!" + e);
}
}
private void updateProcessed(PreparedStatement psProcessed, MigrationControlDTO message) throws Throwable {
psProcessed.setLong(1, message.migrationControlId);
psProcessed.executeUpdate();
}
private void updateNotProcessed(PreparedStatement psNotProcessed, MigrationControlDTO message) throws Throwable {
psNotProcessed.setLong(1, message.migrationControlId);
psNotProcessed.executeUpdate();
}
private DeviceInfoDTO generateDeviceInfoDTO(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
String query = "select * from device_info where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
DeviceInfoDTO di;
if (rs.next()) {
String gatewayId = rs.getString("username")+"|"+(rs.getTimestamp("persisted_date")).getTime();
di = new DeviceInfoDTO();
di.setId(message.migrationControlId);
di.setPersistedDate(rs.getTimestamp("persisted_date"));
di.setServiceCode("");
di.setMobileUser(rs.getString("username"));
di.setMobilePin("");
di.setRequestType("");
di.setRequestId("");
di.setRequest("");
di.setCurrentMillis(rs.getString("current_millis"));
di.setImei(rs.getString("imei"));
di.setAppVersion(rs.getString("app_version"));
di.setFirstConfigMillis("");
di.setChangedConfigMillis("");
di.setQueueCount("0");
di.setSpaceAvailable(rs.getString("available_space"));
di.setSpaceUsed("");
di.setMemoryAvailable(rs.getString("free_memory"));
di.setMemoryUsed("");
di.setAppOpenMillis("");
di.setAppClosedMillis("");
di.setFailedSendMessageCount("");
di.setStgStartMillis("");
di.setStgFinishMillis("");
di.setStgDetails("");
di.setStgTotalRows("");
di.setExceptionsCount("");
di.setLastCleanedCount("");
di.setGatewayId(gatewayId);
di.setDeviceInfoTime((rs.getTimestamp("persisted_date")).getTime());
di.setOpt01("-"); //CurrentHost
di.setOpt02("-"); //CurrentSavedAppVersionMillis
di.setOpt03("-"); //VersionHistory
di.setOpt04("0"); //FailedDocumentCreation
di.setOpt05(rs.getString("brand_and_model")+" Android version: "+ rs.getString("os_version")); //Platform
di.setOpt06(""); //FileconnDirPhotos
di.setOpt07("-"); //PrinterConfig
di.setOpt09(""); //LocationStatus
di.setOpt10("-"); //DataDirectorySize
di.setOpt11("-"); //AppCloseHistory
di.setOpt12(rs.getString("battery_level")); //BatteryLevel
di.setOpt13(""); //CompressDate
di.setOpt14(""); //CompressDateWithError
di.setOpt15("0"); //TrackingQueueCount
di.setOpt16(""); //GpsDisableDate
di.setOpt17(""); //GpsStatus
di.setOpt18(""); //LastCreditSmsMillis
di.setOpt19(""); //LastCreditSmsText
di.setOpt20(rs.getString("os_uptime")); //PhoneUpTimeMilli
di.setOpt21(""); //EnableData
di.setOpt22(""); //DocumentIncompleteCount
di.setOpt23("");
di.setOpt24("");
di.setOpt25("");
di.setOpt26("");
di.setOpt27("");
di.setOpt28("");
di.setOpt29("");
di.setOpt30("");
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return di;
}
private DeviceInfoEventDTO generateDeviceEventInfoDTO(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
String query = "select * from device_info_event where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
DeviceInfoEventDTO die;
if (rs.next()) {
String gatewayId = rs.getString("username")+"|"+(rs.getTimestamp("persisted_date")).getTime();
die = new DeviceInfoEventDTO();
die.setPersistedDate(rs.getTimestamp("persisted_date"));
die.setId(message.migrationControlId);
die.setServiceCode("");
die.setMobileUser(rs.getString("username"));
die.setDeviceInfoEventTime(rs.getString("document_time"));
String eventType = rs.getString("event_type");
String eventMessage = getEventMessage(eventType, rs.getString("event_details"));
if(deviceInfoEventTypesMap.get(eventType) != null){
eventType = deviceInfoEventTypesMap.get(eventType);
}
die.setEventType(eventType);
die.setEventMessage(eventMessage);
die.setGatewayId(gatewayId);
die.setImei(rs.getString("imei"));
die.setMigratedDate("");
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return die;
}
private String getEventMessage(String eventType, String eventMessage){
String eventMessageToReturn = eventMessage;
switch (eventType) {
case "GPS_STATUS":
case "WIFI_STATUS":
case "MOCK_LOCATION_STATUS":
case "MOBILE_DATA_STATUS":
if(eventMessage.equalsIgnoreCase("true")){
eventMessageToReturn = "ON";
}else{
eventMessageToReturn = "OFF";
}
break;
default:
break;
}
return eventMessageToReturn;
}
private String generateTrackingMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
String query = "select * from tracking where id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".TRK").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("latitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("longitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("altitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("horizontal_accuracy")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("vertical_accuracy")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("location_time_millis")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("is_true_location")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("battery_level"));
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateStartWorkdayMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
String query = "SELECT id, sw_date, coalesce(sw_kilometer, 0) as sw_kilometer, coalesce(sw_latitude, 0) as sw_latitude, coalesce(sw_longitude, 0) as sw_longitude, sw_observation, " +
"beacon_check, ew_observation, extinguisher_check, light_check, water_check, sequence, subject_id, related_delivery_id " +
"FROM workday WHERE id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
log.info("start workday query: "+ps.toString());
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
String photo = searchWorkdayPhoto(rs.getString("id"), "started");
ArrayList<String> coordinates = searchEventCoordinate(rs.getString("id"), message.eventType);
sb.append(".CAST_SWD").append(PARAMETER_SEPARATOR);
sb.append(rs.getLong("sw_kilometer")).append(PARAMETER_SEPARATOR);
sb.append(rs.getBoolean("light_check") ? "Si" : "No").append(PARAMETER_SEPARATOR);
sb.append(rs.getBoolean("beacon_check") ? "Si" : "No").append(PARAMETER_SEPARATOR);
sb.append(rs.getBoolean("extinguisher_check") ? "Si" : "No").append(PARAMETER_SEPARATOR);
sb.append(rs.getBoolean("water_check") ? "Si" : "No").append(PARAMETER_SEPARATOR);
sb.append(photo).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT1
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT2
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT3
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT4
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT5
if(rs.getString("related_delivery_id")!="") {
sb.append(rs.getLong("related_delivery_id")).append(PARAMETER_SEPARATOR); // delivery_id
}else {
sb.append("-1").append(PARAMETER_SEPARATOR); // delivery_id
}
String observation = rs.getString("sw_observation");
if(observation != null && !observation.equals("")){
sb.append(observation).append(PARAMETER_SEPARATOR);
}else{
sb.append("-1").append(PARAMETER_SEPARATOR);
}
sb.append(rs.getDouble("sw_latitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getDouble("sw_longitude")).append(PARAMETER_SEPARATOR); // 15
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(coordinates.get(6)).append(PARAMETER_SEPARATOR); //Tipo de localizacion
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateEndWorkdayMessage(MigrationControlDTO message) throws Throwable{
StringBuilder sb;
String query = "SELECT id, ew_date, coalesce(ew_kilometer, 0) as ew_kilometer, coalesce(ew_latitude, 0) as ew_latitude, " +
"coalesce(ew_longitude, 0) as ew_longitude, ew_observation,related_delivery_id, (case when impl_close_delivery is true then '1.Si' else '2.No' end) as close_delivery FROM workday WHERE id = ?";
ps = connPortalBackend.prepareStatement(query);
ps.setString(1, message.domainId);
log.info("end workday query: "+ps.toString());
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
ArrayList<String> coordinates = searchEventCoordinate(rs.getString("id"), message.eventType);
String photo = searchWorkdayPhoto(rs.getString("id"), "finished");
sb.append(".CAST_EWD").append(PARAMETER_SEPARATOR);
sb.append(rs.getLong("ew_kilometer")).append(PARAMETER_SEPARATOR);
sb.append(photo).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("close_delivery")).append(PARAMETER_SEPARATOR); // OPT1
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT2
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT3
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT4
sb.append("-1").append(PARAMETER_SEPARATOR); // OPT5
if(rs.getString("related_delivery_id") != null && !rs.getString("related_delivery_id").equals("")){
sb.append("2").append(PARAMETER_SEPARATOR); // delivery_id
}else{
sb.append("-1").append(PARAMETER_SEPARATOR);
}
String observation = rs.getString("ew_observation");
if(observation != null && !observation.equals("")){
sb.append(observation).append(PARAMETER_SEPARATOR);
}else{
sb.append("-1").append(PARAMETER_SEPARATOR);
}
sb.append(rs.getDouble("ew_latitude")).append(PARAMETER_SEPARATOR);
sb.append(rs.getDouble("ew_longitude")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(coordinates.get(6)); //Tipo de localizacion
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateDeliveryMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
StringBuilder deliveryDetailQuerysb = new StringBuilder();
deliveryDetailQuerysb.append("select dd.receiver_name, ds.subject_signature, dd.subject_code, dd.subject_name, dd.status, dd.creation_date, ");
deliveryDetailQuerysb.append("round(dd.total_amount,0) as total_amount, dd.impl_observation, dd.external_id, "); deliveryDetailQuerysb.append("(select external_id from delivery where id = dd.delivery_id) as delivery_id, ") ;
deliveryDetailQuerysb.append("dd.subject_commercial_name, dd.subject_fiscal_number ");
deliveryDetailQuerysb.append("from delivery_detail dd left join impl_delivery_detail_electronic_signature ds on dd.id = ds.delivery_detail_id ");
deliveryDetailQuerysb.append("where dd.id = ?");
ps = connPortalBackend.prepareStatement(deliveryDetailQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
byte [] photoBytes = null;
String photo = "-1";
byte [] photoSignatureBytes = null;
String photoSignature = "-1";
if (rs.next()) {
sb = new StringBuilder();
sb.append(".DC").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code") == null ? "-1":rs.getString("subject_code").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name") == null ? "-1":rs.getString("subject_name").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("creation_date") == null ? "-1":rs.getString("creation_date").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("impl_observation") == null || rs.getString("impl_observation") == "" ? "-1":rs.getString("impl_observation").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("total_amount") == null || rs.getString("total_amount") == "" ? "-1":rs.getString("total_amount").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("delivery_id")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("external_id")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("status") == null || rs.getString("status") == "" ? "-1":rs.getString("status").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_commercial_name") == null ? "-1":rs.getString("subject_commercial_name").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_fiscal_number") == null ? "-1":rs.getString("subject_fiscal_number").trim()).append(PARAMETER_SEPARATOR);
if(rs.getString("subject_signature") != null){
photoSignatureBytes = rs.getBytes("subject_signature");
photoSignature = Base64.encode(photoSignatureBytes);
sb.append(photoSignature).append(PARAMETER_SEPARATOR);
} else {
sb.append("-1").append(PARAMETER_SEPARATOR);
}
sb.append(rs.getString("receiver_name") == null || rs.getString("receiver_name") == "" ? "-1":rs.getString("receiver_name").trim());
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
sb.append(BLOCK_SEPARATOR_DETAILS);
StringBuilder deliveryDocumentsQuerysb = new StringBuilder();
deliveryDocumentsQuerysb.append("select subject_code, subject_name, status, document_number, (select description from impl_rebound_reason where id = impl_reason_rebound) as impl_reason_rebound, ");
deliveryDocumentsQuerysb.append("round(document_amount,0) as document_amount, external_id,delivery_detail_id from delivery_document ");
deliveryDocumentsQuerysb.append(" where delivery_detail_id = ? ");
ps = connPortalBackend.prepareStatement(deliveryDocumentsQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
int b = 0;
while (rs.next()) {
if (b == 1){
sb.append(BLOCK_SEPARATOR);
}
sb.append(rs.getString("subject_code") == null || rs.getString("subject_code") == "" ? "-1":rs.getString("subject_code").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name") == null || rs.getString("subject_name") == "" ? "-1":rs.getString("subject_name").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("status") == null || rs.getString("status") == "" ? "-1":rs.getString("status").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_number") == null || rs.getString("document_number") == "" ? "-1":rs.getString("document_number").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_amount") == null || rs.getString("document_amount") == "" ? "-1":rs.getString("document_amount").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("external_id") == null || rs.getString("external_id") == "" ? "-1":rs.getString("external_id").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("impl_reason_rebound") == null || rs.getString("impl_reason_rebound") == "" ? "-1":rs.getString("impl_reason_rebound").trim());
b = 1;
}
sb.append(BLOCK_SEPARATOR_DETAILS);
StringBuilder deliveryDocumentDetailQuerysb = new StringBuilder();
deliveryDocumentDetailQuerysb.append("select ddd.product_code, ddd.product_name, ddd.status, round(ddd.amount, 0) as amount, cast(round(ddd.quantity, 0) as numeric) as quantity, cast(round(ddd.quantity_delivered, 0) as numeric) as quantity_delivered, ddd.external_id, ");
deliveryDocumentDetailQuerysb.append(" ddd.impl_delivered_amount, ddd.impl_rejected_amount from delivery_document_detail ddd join delivery_document dd on ddd.delivery_document_id = dd.id where delivery_document_id in ");
deliveryDocumentDetailQuerysb.append("(select id from delivery_document where delivery_detail_id = ? ) ");
ps = connPortalBackend.prepareStatement(deliveryDocumentDetailQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
b = 0;
while (rs.next()) {
if (b == 1){
sb.append(BLOCK_SEPARATOR);
}
sb.append(rs.getString("product_code") == null ? "-1":rs.getString("product_code").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("product_name") == null ? "-1":rs.getString("product_name").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("status") == null ? "-1":rs.getString("status").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("amount") == null ? "-1":rs.getString("amount").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("quantity") == null ? "-1":rs.getString("quantity").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("quantity_delivered") == null ? "-1":rs.getString("quantity_delivered").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("impl_delivered_amount") == null ? "-1":rs.getString("impl_delivered_amount").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("impl_rejected_amount") == null ? "-1":rs.getString("impl_rejected_amount").trim()).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("external_id") == null ? "-1":rs.getString("external_id").trim());
b = 1;
}
return sb.toString().replaceAll("'", " ");
}
private ArrayList<MigrationControlDTO> loadMigrationData() throws Throwable {
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder excludeUsers = new StringBuilder("' '");
ArrayList<MigrationControlDTO> messagesList = new ArrayList<>();
try {
// Traer usuarios a migrar
String query = "SELECT distinct username from migration_control where migrated_status = 'P' and exception_date is not null and exception_date > current_timestamp - interval '1 day'";
ps = connPortalBackend.prepareStatement(query);
log.info(ps.toString()+" - User: "+excludeUsers.toString());
rs = ps.executeQuery();
log.info("Despues de RS - User: "+excludeUsers.toString());
while (rs.next()) {
excludeUsers.append(", '").append(rs.getString("username")).append("'");
log.info("Dentro de RS - User: "+rs.getString("username"));
}
log.info(" - User: "+excludeUsers.toString());
/*
* Para versiones del castPortalNG igual o menor al 2019.02.13 descomentar esta consulta
* y comentar la siguiente.
* */
/*query = "SELECT id, username, domain_name, domain_id, operation_type, event_type, document_time " +
"FROM migration_control WHERE migrated_status = 'P' and username not in ("+
excludeUsers.toString() + ") ORDER BY document_time LIMIT 50";*/
/*
* Desde la version superior a 2019.02.13 del castPortalNG, ya se excluyen los device info events porque los mismos se migran
* con un JOB que ya incorpora el castPortalNG
**/
query = "SELECT id, username, domain_name, domain_id, operation_type, event_type, document_time " +
"FROM migration_control WHERE migrated_status = 'P' and username not in ("+
excludeUsers.toString() + ") and username in ('595980123146') AND domain_name != 'device_info' AND domain_name != 'device_info_event' ORDER BY document_time LIMIT 100";
log.info(query);
ps = connPortalBackend.prepareStatement(query);
rs = ps.executeQuery();
MigrationControlDTO mc;
while (rs.next()) {
mc = new MigrationControlDTO();
mc.migrationControlId = rs.getLong("id");
mc.documentTime = rs.getTimestamp("document_time").getTime();
mc.eventType = rs.getString("event_type");
mc.operationType = rs.getString("operation_type");
mc.domainName = rs.getString("domain_name");
mc.domainId = rs.getString("domain_id");
mc.username = rs.getString("username");
messagesList.add(mc);
//cargamos el username de usuarios para en adelante consultar la clave de acceso de los mismos
userAccessKeyMap.put(rs.getString("username"), "");
}
} catch (Throwable t) {
log.info("---- Error al obtener datos a ser migrados ----");
throw t;
} finally {
DataBaseHelper.closePs(ps);
DataBaseHelper.closeRs(rs);
}
return messagesList;
}
// DTO
public class MigrationControlDTO {
Long migrationControlId = 0L;
String eventType = "";
Long documentTime = 0L;
String operationType = "";
String domainName = "";
String domainId = "";
String username = "";
HashMap domainIdsMap = new HashMap<>();
boolean hasError = false;
String msgError = "";
Timestamp exceptionDate = null;
@Override
public String toString() {
return "Message { domainName='" + domainName + '\'' + ", domainId='" + domainId + '\'' + ", migrationControlId='" + migrationControlId + '\'' + ", eventType='" + eventType + '\'' + ", operationType='" + operationType + '\'' + ", username='" + username + '\'' + '}';
}
}
private class DeviceInfoDTO {
private Long id; //migrationId
private Date persistedDate;
private String serviceCode;
private String mobileUser;
private String mobilePin;
private String requestType;
private String requestId;
private String request;
private String currentMillis;
private String imei;
private String appVersion;
private String firstConfigMillis;
private String changedConfigMillis;
private String queueCount;
private String spaceAvailable;
private String spaceUsed;
private String memoryAvailable;
private String memoryUsed;
private String appOpenMillis;
private String appClosedMillis;
private String failedSendMessageCount;
private String stgStartMillis;
private String stgFinishMillis;
private String stgDetails;
private String stgTotalRows;
private String exceptionsCount;
private String lastCleanedCount;
private String gatewayId;
private long deviceInfoTime;
private String opt01;
private String opt02;
private String opt03;
private String opt04;
private String opt05;
private String opt06;
private String opt07;
private String opt08;
private String opt09;
private String opt10;
private String opt11;
private String opt12;
private String opt13;
private String opt14;
private String opt15;
private String opt16;
private String opt17;
private String opt18;
private String opt19;
private String opt20;
private String opt21;
private String opt22;
private String opt23;
private String opt24;
private String opt25;
private String opt26;
private String opt27;
private String opt28;
private String opt29;
private String opt30;
public void setId(Long id) {
this.id = id;
}
public void setPersistedDate(Date persistedDate) {
this.persistedDate = persistedDate;
}
public String getServiceCode() {
return serviceCode;
}
public void setServiceCode(String serviceCode) {
this.serviceCode = serviceCode;
}
public String getMobileUser() {
return mobileUser;
}
public void setMobileUser(String mobileUser) {
this.mobileUser = mobileUser;
}
public String getMobilePin() {
return mobilePin;
}
public void setMobilePin(String mobilePin) {
this.mobilePin = mobilePin;
}
public String getRequestType() {
return requestType;
}
public void setRequestType(String requestType) {
this.requestType = requestType;
}
public String getRequestId() {
return requestId;
}
public void setRequestId(String requestId) {
this.requestId = requestId;
}
public String getRequest() {
return request;
}
public void setRequest(String request) {
this.request = request;
}
public String getCurrentMillis() {
return currentMillis;
}
public void setCurrentMillis(String currentMillis) {
this.currentMillis = currentMillis;
}
public String getImei() {
return imei;
}
public void setImei(String imei) {
this.imei = imei;
}
public String getAppVersion() {
return appVersion;
}
public void setAppVersion(String appVersion) {
this.appVersion = appVersion;
}
public String getFirstConfigMillis() {
return firstConfigMillis;
}
public void setFirstConfigMillis(String firstConfigMillis) {
this.firstConfigMillis = firstConfigMillis;
}
public String getChangedConfigMillis() {
return changedConfigMillis;
}
public void setChangedConfigMillis(String changedConfigMillis) {
this.changedConfigMillis = changedConfigMillis;
}
public String getQueueCount() {
return queueCount;
}
public void setQueueCount(String queueCount) {
this.queueCount = queueCount;
}
public String getSpaceAvailable() {
return spaceAvailable;
}
public void setSpaceAvailable(String spaceAvailable) {
this.spaceAvailable = spaceAvailable;
}
public String getSpaceUsed() {
return spaceUsed;
}
public void setSpaceUsed(String spaceUsed) {
this.spaceUsed = spaceUsed;
}
public String getMemoryAvailable() {
return memoryAvailable;
}
public void setMemoryAvailable(String memoryAvailable) {
this.memoryAvailable = memoryAvailable;
}
public String getMemoryUsed() {
return memoryUsed;
}
public void setMemoryUsed(String memoryUsed) {
this.memoryUsed = memoryUsed;
}
public String getAppOpenMillis() {
return appOpenMillis;
}
public void setAppOpenMillis(String appOpenMillis) {
this.appOpenMillis = appOpenMillis;
}
public String getAppClosedMillis() {
return appClosedMillis;
}
public void setAppClosedMillis(String appClosedMillis) {
this.appClosedMillis = appClosedMillis;
}
public String getFailedSendMessageCount() {
return failedSendMessageCount;
}
public void setFailedSendMessageCount(String failedSendMessageCount) {
this.failedSendMessageCount = failedSendMessageCount;
}
public String getStgStartMillis() {
return stgStartMillis;
}
public void setStgStartMillis(String stgStartMillis) {
this.stgStartMillis = stgStartMillis;
}
public String getStgFinishMillis() {
return stgFinishMillis;
}
public void setStgFinishMillis(String stgFinishMillis) {
this.stgFinishMillis = stgFinishMillis;
}
public String getStgDetails() {
return stgDetails;
}
public void setStgDetails(String stgDetails) {
this.stgDetails = stgDetails;
}
public String getStgTotalRows() {
return stgTotalRows;
}
public void setStgTotalRows(String stgTotalRows) {
this.stgTotalRows = stgTotalRows;
}
public String getExceptionsCount() {
return exceptionsCount;
}
public void setExceptionsCount(String exceptionsCount) {
this.exceptionsCount = exceptionsCount;
}
public String getLastCleanedCount() {
return lastCleanedCount;
}
public void setLastCleanedCount(String lastCleanedCount) {
this.lastCleanedCount = lastCleanedCount;
}
public void setGatewayId(String gatewayId){
this.gatewayId = gatewayId;
}
public void setDeviceInfoTime(Long deviceInfoTime) {
this.deviceInfoTime = deviceInfoTime;
}
public void setOpt01(String opt01) {
this.opt01 = opt01;
}
public void setOpt02(String opt02) {
this.opt02 = opt02;
}
public void setOpt03(String opt03) {
this.opt03 = opt03;
}
public void setOpt04(String opt04) {
this.opt04 = opt04;
}
public void setOpt05(String opt05) {
this.opt05 = opt05;
}
public void setOpt06(String opt06) {
this.opt06 = opt06;
}
public void setOpt07(String opt07) {
this.opt07 = opt07;
}
public void setOpt08(String opt08) {
this.opt08 = opt08;
}
public void setOpt09(String opt09) {
this.opt09 = opt09;
}
public void setOpt10(String opt10) {
this.opt10 = opt10;
}
public void setOpt11(String opt11) {
this.opt11 = opt11;
}
public void setOpt12(String opt12) {
this.opt12 = opt12;
}
public void setOpt13(String opt13) {
this.opt13 = opt13;
}
public void setOpt14(String opt14) {
this.opt14 = opt14;
}
public void setOpt15(String opt15) {
this.opt15 = opt15;
}
public void setOpt16(String opt16) {
this.opt16 = opt16;
}
public void setOpt17(String opt17) {
this.opt17 = opt17;
}
public String getOpt18() {
return opt18;
}
public void setOpt18(String opt18) {
this.opt18 = opt18;
}
public void setOpt19(String opt19) {
this.opt19 = opt19;
}
public void setOpt20(String opt20) {
this.opt20 = opt20;
}
public void setOpt21(String opt21) {
this.opt21 = opt21;
}
public void setOpt22(String opt22) {
this.opt22 = opt22;
}
public void setOpt23(String opt23) {
this.opt23 = opt23;
}
public void setOpt24(String opt24) {
this.opt24 = opt24;
}
public void setOpt25(String opt25) {
this.opt25 = opt25;
}
public void setOpt26(String opt26) {
this.opt26 = opt26;
}
public void setOpt27(String opt27) {
this.opt27 = opt27;
}
public void setOpt28(String opt28) {
this.opt28 = opt28;
}
public void setOpt29(String opt29) {
this.opt29 = opt29;
}
public void setOpt30(String opt30) {
this.opt30 = opt30;
}
}
private class DeviceInfoEventDTO {
private Long id; //migrationId
private Date persistedDate;
private String serviceCode;
private String mobileUser;
private String deviceInfoEventTime;
private String eventType;
private String eventMessage;
private String gatewayId;
private String imei;
private String migratedDate;
public void setId(Long id){
this.id = id;
}
public void setPersistedDate(Date persistedDate ){
this.persistedDate = persistedDate;
}
public void setServiceCode(String serviceCode){
this.serviceCode = serviceCode;
}
public void setMobileUser(String mobileUser){
this.mobileUser = mobileUser;
}
public void setDeviceInfoEventTime(String deviceInfoEventTime){
this.deviceInfoEventTime = deviceInfoEventTime;
}
public void setEventType(String eventType){
this.eventType = eventType;
}
public void setEventMessage(String eventMessage){
this.eventMessage = eventMessage;
}
public void setGatewayId(String gatewayId){
this.gatewayId = gatewayId;
}
public void setImei(String imei){
this.imei = imei;
}
public void setMigratedDate(String migratedDate) {
this.migratedDate = migratedDate;
}
}
private void sendMail(String mailBody, ArrayList<String> mailTo, String mailFrom, String mailSubject){
MailService mailService = (MailService)appCtx.getBean("mailService");
String serviceName;
try {
InetAddress localMachine = null;
localMachine = InetAddress.getLocalHost();
String[] localMachineData= localMachine.toString().split("/");
serviceName = localMachineData[0];
} catch (Throwable e) {
log.error("Error al obtener el nombre del servicio: " + e);
serviceName = "";
}
if (mailSubject == null) {
mailSubject = "Migrador castPortal3";
}
mailSubject = serviceName.toUpperCase() +" - " + mailSubject;
if (mailFrom == null) {
mailFrom = "[email protected]";
}
if (mailTo == null) {
mailTo = new ArrayList<>();
mailTo.add("[email protected]");
}
try {
mailService.sendTextMail(mailFrom, mailTo, mailSubject, mailBody);
} catch (Throwable tm) {
sendMailInOldFormat(mailFrom, mailTo, mailSubject, mailBody, mailService);
}
log.info("-------------------- Mail enviado -----------------------");
}
private void sendMailInOldFormat(String mailFrom, ArrayList<String> mailTo, String mailSubject, String mailBody, MailService mailService) {
mailService.sendMail { //TODO: descomentar
to mailTo;
from mailFrom;
subject mailSubject;
body mailBody;
}
}
private String generateReceiptMessage(MigrationControlDTO message) throws Throwable {
log.info("ingresa en la funcion generateReceiptMessage que trae los datos");
StringBuilder sb;
StringBuilder receiptQuerysb = new StringBuilder();
receiptQuerysb.append("select r.id as replica_id, subject_code, subject_name, document_date, subject_selected_type, receipt_number, (c.currency_symbol || '.' || currency_payment_name) as currency_payment, total_amount, total_amount_paid, receipt_balance, user_id, user_code, user_full_name, observation, corporation_subject_code, 'CONTADO' as type, (c.currency_symbol || '.' || currency_documents_name) currency_documents, currency_exchange_amount, print_text, fiscal_stamp_number from receipt r join currency c on r.currency_payment_name = c.description where r.id = ?");
ps = connPortalBackend.prepareStatement(receiptQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".CAST_SP2").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_date")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("receipt_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("currency_payment")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("total_amount")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("total_amount_paid")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("receipt_balance")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("user_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("user_full_name")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("observation")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("corporation_subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("currency_documents")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("currency_exchange_amount")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("type")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_selected_type")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("print_text")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("fiscal_stamp_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("replica_id")).append(PARAMETER_SEPARATOR);
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
sb.append(BLOCK_SEPARATOR_DETAILS);
StringBuilder receiptDocumentsQuerysb = new StringBuilder();
receiptDocumentsQuerysb.append("select document_number, document_total_amount, amount_paid, fee_pending_amount, document_date, document_expiration_date, fee_number, fee_total_amount, fee_expiration_date, document_pending_amount, document_type from receipt_documents where receipt_id = ?");
ps = connPortalBackend.prepareStatement(receiptDocumentsQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
int b = 0;
while (rs.next()) {
if (b == 1){
sb.append(BLOCK_SEPARATOR);
}
sb.append(rs.getString("document_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_total_amount")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("amount_paid")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_pending_amount")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_date")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_expiration_date")).append(PARAMETER_SEPARATOR);
//sb.append(rs.getString("document_type")).append(PARAMETER_SEPARATOR);
//sb.append(rs.getString("fee_number")).append(PARAMETER_SEPARATOR);
//sb.append(rs.getString("fee_total_amount")).append(PARAMETER_SEPARATOR);
//sb.append(rs.getString("fee_expiration_date")).append(PARAMETER_SEPARATOR);
b = 1;
}
sb.append(BLOCK_SEPARATOR_DETAILS);
StringBuilder receiptValuesQuerysb = new StringBuilder();
receiptValuesQuerysb.append("select (payment_method_code || '.' || payment_method_name) as payment, value_amount, ");
receiptValuesQuerysb.append("(case when bank_code != '' then (bank_code || '.' || bank_description) else '-1' end) as bank, document_number, document_date, payment_method_code, ");
receiptValuesQuerysb.append("document_expiration_date, document_drawer from receipt_values where receipt_id = ? ");
ps = connPortalBackend.prepareStatement(receiptValuesQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
b = 0;
while (rs.next()) {
if (b == 1){
sb.append(BLOCK_SEPARATOR);
}
sb.append(rs.getString("value_amount") == null ? "-1":rs.getString("value_amount") ).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("payment")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("bank") == null ? "-1":rs.getString("bank") ).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_number").length() == 0 ? "-1":rs.getString("document_number") ).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_date") == null ? "-1":rs.getString("document_date") ).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_expiration_date") == null ? "-1":rs.getString("document_expiration_date") ).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("document_drawer").length() == 0 ? "-1":rs.getString("document_drawer") ).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("payment_method_code").length() == 0 ? "-1":rs.getString("payment_method_code") ).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
b = 1;
}
return sb.toString().replaceAll("'", " ");
}
private String generateAnnulationReceiptMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
StringBuilder receiptQuerysb = new StringBuilder();
receiptQuerysb.append("select fiscal_stamp_number, subject_code as subject_code, subject_name, subject_fiscal_number, receipt_number, cancelled_reason, cancelled_date, to_char(document_date, 'YYYY-MM-DD') as receipt_date, cancelled_date ");
receiptQuerysb.append("from receipt where id = ? ");
ps = connPortalBackend.prepareStatement(receiptQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".AR").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_fiscal_number")).append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append("-1").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("receipt_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("cancelled_reason")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("receipt_date")).append(PARAMETER_SEPARATOR);
//sb.append(rs.getString("fiscal_stamp_number")).append(PARAMETER_SEPARATOR);
//sb.append(rs.getString("cancelled_date")).append(PARAMETER_SEPARATOR);
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
return sb.toString();
}
private String generateReprintUpdateReceiptMessage(MigrationControlDTO message) throws Throwable {
log.info("ingresa en la funcion generateReprintUpdateReceiptMessage");
StringBuilder sb;
StringBuilder receiptQuerysb = new StringBuilder();
receiptQuerysb.append("SELECT subject_code, receipt_number, 'receipt' AS type, reprint_quantity FROM receipt WHERE id = ? ");
ps = connPortalBackend.prepareStatement(receiptQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".CAST_SPC").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("receipt_number")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("type")).append(PARAMETER_SEPARATOR);
sb.append(rs.getString("reprint_quantity"));
} else {
throw new Exception("Mensaje ID a procesar no encontrado ");
}
return sb.toString();
}
private String generateOrdersMessage(MigrationControlDTO message) throws Throwable {
StringBuilder sb;
StringBuilder ordersQuerysb = new StringBuilder();
ordersQuerysb.append("select subject_code, o.subject_name, subject_fiscal_number, s.impl_porcentaje_descuento, o.impl_subject_segment as segment, '-1' as cod_condicion_de_venta, '-1' as subject_type, subject_address, subject_telephone, '-1' as subject_status, '-1' as subject_credit_line, '-1' as subject_delinquency, cast(delivery_date as date) as delivery_date, '-1' as timbrado, '-1' as validez, '-1' as nro_de_factura, cast(document_date as date) as orders_date, price_list_code || '.' || price_list_name as price_list, sale_condition_code || '.' || sale_condition_name as sale_condition, '-1' condition, '-1' as vencimiento, currency_code || '.' || currency_name as currency, currency_exchange_amount as currency_exchange, '-1' as codigo_producto, '-1' as descuento_maximo, '-1' as discount_rate,'-1' as bonus_quantity, (select sum(case cast(product_vat_rate_value as int) when 5 then product_vat_amount else 0 end) from orders_detail where orders_id = o.id) as vat_05_total, (select sum(case cast(product_vat_rate_value as int) when 10 then product_vat_amount else 0 end) from orders_detail where orders_id = o.id) as vat_10_total, (select sum(case cast(product_vat_rate_value as int) when 5 then product_vatted_amount else 0 end) from orders_detail where orders_id = o.id) as vatted_05_total, (select sum(case cast(product_vat_rate_value as int) when 10 then product_vatted_amount else 0 end) from orders_detail where orders_id = o.id) as vatted_10_total, (select sum(case cast(product_vat_rate_value as int) when 0 then product_vatted_amount else 0 end) from orders_detail where orders_id = o.id) as exempt_total, total_vat_amount, total_gross_amount, total_discount_amount, '-1' as bonus_total, total_net_amount, user_code, user_full_name, '-1' as warehouse, '-1' as cash, '-1' as credito, observation, '-1' as opt1, '-1' as opt2, '-1' as opt3, '-1' as opt4, '-1' as opt5, COALESCE(impl_print_text,'-1') as opt7, '-1' as opt6, '-1' as opt8, '-1' as opt9, '-1' as opt10 from orders o join subject s on s.id = o.subject_id where o.id = ?");
ps = connPortalBackend.prepareStatement(ordersQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
if (rs.next()) {
sb = new StringBuilder();
sb.append(".CAST_SO3").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);//1
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);//2
sb.append(rs.getString("subject_fiscal_number")).append(PARAMETER_SEPARATOR);//3
sb.append(rs.getString("impl_porcentaje_descuento")).append(PARAMETER_SEPARATOR);//4
sb.append(rs.getString("segment")).append(PARAMETER_SEPARATOR);//5
sb.append(rs.getString("cod_condicion_de_venta")).append(PARAMETER_SEPARATOR);//6
sb.append(rs.getString("subject_type")).append(PARAMETER_SEPARATOR);//7
sb.append(rs.getString("subject_address")).append(PARAMETER_SEPARATOR);//8
sb.append(rs.getString("subject_telephone")).append(PARAMETER_SEPARATOR);//9
sb.append(rs.getString("subject_status")).append(PARAMETER_SEPARATOR);//10
sb.append(rs.getString("subject_credit_line")).append(PARAMETER_SEPARATOR);//11
sb.append(rs.getString("subject_delinquency")).append(PARAMETER_SEPARATOR);//12
sb.append(rs.getString("delivery_date")).append(PARAMETER_SEPARATOR);//13
sb.append(rs.getString("timbrado")).append(PARAMETER_SEPARATOR);//14
sb.append(rs.getString("validez")).append(PARAMETER_SEPARATOR);//15
sb.append(rs.getString("nro_de_factura")).append(PARAMETER_SEPARATOR);//16
sb.append(rs.getString("orders_date")).append(PARAMETER_SEPARATOR);//17
sb.append(rs.getString("price_list")).append(PARAMETER_SEPARATOR);//18
sb.append(rs.getString("sale_condition")).append(PARAMETER_SEPARATOR);//19
sb.append(rs.getString("condition")).append(PARAMETER_SEPARATOR);//20
sb.append(rs.getString("vencimiento")).append(PARAMETER_SEPARATOR);//21
sb.append(rs.getString("currency")).append(PARAMETER_SEPARATOR);//22
sb.append(rs.getString("currency_exchange")).append(PARAMETER_SEPARATOR);//23
sb.append(rs.getString("codigo_producto")).append(PARAMETER_SEPARATOR);//24
sb.append(rs.getString("descuento_maximo")).append(PARAMETER_SEPARATOR);//25
sb.append(rs.getString("discount_rate")).append(PARAMETER_SEPARATOR);//26
sb.append(rs.getString("bonus_quantity")).append(PARAMETER_SEPARATOR);//27
sb.append(rs.getString("vat_05_total")).append(PARAMETER_SEPARATOR);//28
sb.append(rs.getString("vat_10_total")).append(PARAMETER_SEPARATOR);//29
sb.append(rs.getString("vatted_05_total")).append(PARAMETER_SEPARATOR);//30
sb.append(rs.getString("vatted_10_total")).append(PARAMETER_SEPARATOR);//31
sb.append(rs.getString("exempt_total")).append(PARAMETER_SEPARATOR);//32
sb.append(rs.getString("total_vat_amount")).append(PARAMETER_SEPARATOR);//33
sb.append(rs.getString("total_gross_amount")).append(PARAMETER_SEPARATOR);//34
sb.append(rs.getString("total_discount_amount")).append(PARAMETER_SEPARATOR);//35
sb.append(rs.getString("bonus_total")).append(PARAMETER_SEPARATOR);//36
sb.append(rs.getString("total_net_amount")).append(PARAMETER_SEPARATOR);//37
sb.append(rs.getString("user_code")).append(PARAMETER_SEPARATOR);//38
sb.append(rs.getString("user_full_name")).append(PARAMETER_SEPARATOR);//39
sb.append(rs.getString("warehouse")).append(PARAMETER_SEPARATOR);//40
sb.append(rs.getString("cash")).append(PARAMETER_SEPARATOR);//41
sb.append(rs.getString("credito")).append(PARAMETER_SEPARATOR);//42
sb.append(rs.getString("observation")).append(PARAMETER_SEPARATOR);//43
sb.append(rs.getString("opt1")).append(PARAMETER_SEPARATOR);//44
sb.append(rs.getString("opt2")).append(PARAMETER_SEPARATOR);//45
sb.append(rs.getString("opt3")).append(PARAMETER_SEPARATOR);//46
sb.append(rs.getString("opt4")).append(PARAMETER_SEPARATOR);//47
sb.append(rs.getString("opt5")).append(PARAMETER_SEPARATOR);//48
sb.append(rs.getString("opt6")).append(PARAMETER_SEPARATOR);//49
sb.append(rs.getString("opt7")).append(PARAMETER_SEPARATOR);//50
sb.append(rs.getString("opt8")).append(PARAMETER_SEPARATOR);//51
sb.append(rs.getString("opt9")).append(PARAMETER_SEPARATOR);//52
sb.append(rs.getString("opt10")).append(PARAMETER_SEPARATOR);//53
sb.append("-1").append(PARAMETER_SEPARATOR);//54
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
StringBuilder ordersDetailQuerysb = new StringBuilder();
ordersDetailQuerysb.append("select product_presentation_code, product_presentation_name, '-1' as product_select, cast(product_vat_rate_value as int) as product_vat_rate, price,'-1' as stock, '-1' as promotion_name, '-1' as discount_promotion,quantity, '-1' as promo_a_aplicar,'-1' as color, (select unit from product_presentation where id = orders_detail.product_presentation_id) as product_unit, '-1' as cantidad_equivalente,'-1' as vencimiento_lote, product_gross_amount, '-1' as max_discount, case when discount_rate is null then 0 else discount_rate end as discount_rate, product_discount_amount as discount_amount, '-1' as bonificacion_maxima, bonus_quantity, '-1' as total_quantity, bonus_amount,product_net_amount, '-1' as iva_05, '-1' as iva_10, '-1' as exenta, case cast(product_vat_rate_value as int) when 5 then product_vat_amount else 0 end as vat_05_amount, case cast(product_vat_rate_value as int) when 10 then product_vat_amount else 0 end as vat_10_amount, product_vat_amount, case cast(product_vat_rate_value as int) when 5 then product_vatted_amount else 0 end as vatted_05_amount, case cast(product_vat_rate_value as int) when 10 then product_vatted_amount else 0 end as vatted_10_amount, case cast(product_vat_rate_value as int) when 0 then product_vatted_amount else 0 end as exempt_amount, '-1' as opt1, '-1' as opt2,'-1' as opt3,'-1' as opt4,'-1' as opt5,'-1' as opt6,'-1' as opt7,'-1' as opt8,'-1' as opt9,'-1' as opt10 from orders_detail where orders_id = ?");
ps = connPortalBackend.prepareStatement(ordersDetailQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
while (rs.next()) {
sb.append(BLOCK_SEPARATOR);
sb.append(rs.getString("product_presentation_code")).append(PARAMETER_SEPARATOR);//1
sb.append(rs.getString("product_presentation_name")).append(PARAMETER_SEPARATOR);//2
sb.append(rs.getString("product_select")).append(PARAMETER_SEPARATOR);//3
sb.append(rs.getString("product_vat_rate")).append(PARAMETER_SEPARATOR);//4
//sb.append(rs.getString("price_list")).append(PARAMETER_SEPARATOR);//5
sb.append(rs.getString("price")).append(PARAMETER_SEPARATOR);//6
sb.append(rs.getString("stock")).append(PARAMETER_SEPARATOR);//7
sb.append(rs.getString("promotion_name")).append(PARAMETER_SEPARATOR);//8
sb.append(rs.getString("discount_promotion")).append(PARAMETER_SEPARATOR);//9
sb.append(rs.getString("quantity")).append(PARAMETER_SEPARATOR);//10
sb.append(rs.getString("promo_a_aplicar")).append(PARAMETER_SEPARATOR);//11
sb.append(rs.getString("color")).append(PARAMETER_SEPARATOR);//12
sb.append(rs.getString("product_unit")).append(PARAMETER_SEPARATOR);//13
sb.append(rs.getString("cantidad_equivalente")).append(PARAMETER_SEPARATOR);//14
sb.append(rs.getString("vencimiento_lote")).append(PARAMETER_SEPARATOR);//15
sb.append(rs.getString("max_discount")).append(PARAMETER_SEPARATOR);//16
sb.append(rs.getString("discount_rate")).append(PARAMETER_SEPARATOR);//17
sb.append(rs.getString("discount_amount")).append(PARAMETER_SEPARATOR);//18
sb.append(rs.getString("bonificacion_maxima")).append(PARAMETER_SEPARATOR);//19
sb.append(rs.getString("bonus_quantity")).append(PARAMETER_SEPARATOR);//20
sb.append(rs.getString("total_quantity")).append(PARAMETER_SEPARATOR);//21
sb.append(rs.getString("bonus_amount")).append(PARAMETER_SEPARATOR);//22
sb.append(rs.getString("product_net_amount")).append(PARAMETER_SEPARATOR);//23
sb.append(rs.getString("iva_05")).append(PARAMETER_SEPARATOR);//24
sb.append(rs.getString("iva_10")).append(PARAMETER_SEPARATOR);//25
sb.append(rs.getString("exenta")).append(PARAMETER_SEPARATOR);//26
sb.append(rs.getString("vat_05_amount")).append(PARAMETER_SEPARATOR);//27
sb.append(rs.getString("vat_10_amount")).append(PARAMETER_SEPARATOR);//28
sb.append(rs.getString("product_vat_amount")).append(PARAMETER_SEPARATOR);//29
sb.append(rs.getString("vatted_05_amount")).append(PARAMETER_SEPARATOR);//30
sb.append(rs.getString("vatted_10_amount")).append(PARAMETER_SEPARATOR);//31
sb.append(rs.getString("exempt_amount")).append(PARAMETER_SEPARATOR);//32
sb.append(rs.getString("opt1")).append(PARAMETER_SEPARATOR);//33
sb.append(rs.getString("opt2")).append(PARAMETER_SEPARATOR);//34
sb.append(rs.getString("opt3")).append(PARAMETER_SEPARATOR);//35
sb.append(rs.getString("opt4")).append(PARAMETER_SEPARATOR);//36
sb.append(rs.getString("opt5")).append(PARAMETER_SEPARATOR);//37
sb.append(rs.getString("opt6")).append(PARAMETER_SEPARATOR);//38
sb.append(rs.getString("opt7")).append(PARAMETER_SEPARATOR);//39
sb.append(rs.getString("opt8")).append(PARAMETER_SEPARATOR);//40
sb.append(rs.getString("opt9")).append(PARAMETER_SEPARATOR);//41
sb.append(rs.getString("opt10")).append(PARAMETER_SEPARATOR);//42
}
return sb.toString();
}
private String generateInvoiceVDMessage(MigrationControlDTO message) throws Throwable {
log.info("----- Ingresa al metodo de generar mensaje venta directa ----------");
StringBuilder sb;
StringBuilder invoiceQuerysb = new StringBuilder();
invoiceQuerysb.append("select subject_code, subject_name, subject_fiscal_number, ");
invoiceQuerysb.append("subject_commercial_name, '-1' as subject_contact_name, '1' as subject_type, ");
invoiceQuerysb.append("subject_address, subject_telephone, '-1' as subject_status, '-1' as subject_credit_line, '-1' as subject_credit_available, ");
invoiceQuerysb.append("fiscal_stamp_number, to_date(fiscal_stamp_number_end, 'YYYY-MM-DD') as validez, ");
invoiceQuerysb.append("invoice_number, to_date(document_date, 'YYYY-MM-DD') as invoice_date, (price_list_code || '.' || price_list_name) as price_list, '1.Efectivo' as payment_method, ");
invoiceQuerysb.append("(select c.code || '.' || c.description from sale_condition c where c.id = sale_condition_id ) as sale_condition, ");
invoiceQuerysb.append("'-1' as condition, '-1' as vencimiento, (currency_id || '.' || currency_name) as currency, currency_exchange_amount as currency_exchange, ");
invoiceQuerysb.append("'-1' as codigo_producto, '-1' as descuento_maximo, '-1' as discount_rate,'-1' as bonus_quantity, ");
invoiceQuerysb.append("(select sum(case cast(product_vat_rate_value as int) when 5 then product_vat_amount else 0 end) ");
invoiceQuerysb.append("from invoice_detail where invoice_id = i.id) as vat_05_total, ");
invoiceQuerysb.append("(select sum(case cast(product_vat_rate_value as int) when 10 then product_vat_amount else 0 end) ");
invoiceQuerysb.append("from invoice_detail where invoice_id = i.id) as vat_10_total, ");
invoiceQuerysb.append("(select sum(case cast(product_vat_rate_value as int) when 5 then product_vatted_amount else 0 end) ");
invoiceQuerysb.append("from invoice_detail where invoice_id = i.id) as vatted_05_total, ");
invoiceQuerysb.append("(select sum(case cast(product_vat_rate_value as int) when 10 then product_vatted_amount else 0 end) ");
invoiceQuerysb.append("from invoice_detail where invoice_id = i.id) as vatted_10_total, ");
invoiceQuerysb.append("(select sum(case cast(product_vat_rate_value as int) when 0 then product_vatted_amount else 0 end) ");
invoiceQuerysb.append("from invoice_detail where invoice_id = i.id) as exempt_total, ");
invoiceQuerysb.append("total_vat_amount, total_gross_amount, total_discount_amount, ");
invoiceQuerysb.append("'-1' as bonus_total, total_net_amount, user_code, user_full_name, ");
invoiceQuerysb.append("'-1' as warehouse_code, '-1' as cash, '-1' as credito, observation, ");
invoiceQuerysb.append("'1' as opt1, '1' as opt2, subject_code as opt3,'Contado' as opt4, ");
invoiceQuerysb.append("'0' as opt5, '-1' as opt6, '-1' as opt7, ");
invoiceQuerysb.append("'-1' as opt8, '-1' as opt9, '-1' as opt10, '-1' as print_text ");
invoiceQuerysb.append("from invoice i where id = ? order by document_date ");
ps = connPortalBackend.prepareStatement(invoiceQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
String attributeAssignmentId = "-1";
if (rs.next()) {
sb = new StringBuilder();
/* if(rs.getString("opt10").equals("PROMOCIONAL")){
attributeAssignmentId = getAttributeValue(rs.getString("subject_id"), rs.getString("user_id"));
}*/
sb.append(".CAST_SI2").append(PARAMETER_SEPARATOR);
sb.append(rs.getString("subject_code")).append(PARAMETER_SEPARATOR);//1
sb.append(rs.getString("subject_name")).append(PARAMETER_SEPARATOR);//2
sb.append(rs.getString("subject_fiscal_number")).append(PARAMETER_SEPARATOR);//3
sb.append(rs.getString("subject_commercial_name").length() == 0 ? "-1":rs.getString("subject_commercial_name")).append(PARAMETER_SEPARATOR);//4
sb.append(rs.getString("subject_contact_name")).append(PARAMETER_SEPARATOR);//5
sb.append(rs.getString("subject_type")).append(PARAMETER_SEPARATOR);//6
sb.append(rs.getString("subject_address")).append(PARAMETER_SEPARATOR);//7
sb.append(rs.getString("subject_telephone")).append(PARAMETER_SEPARATOR);//8
sb.append(rs.getString("subject_status")).append(PARAMETER_SEPARATOR);//9
sb.append(rs.getString("subject_credit_line")).append(PARAMETER_SEPARATOR);//10
sb.append(rs.getString("subject_credit_available")).append(PARAMETER_SEPARATOR);//11
sb.append(rs.getString("fiscal_stamp_number")).append(PARAMETER_SEPARATOR);//12
sb.append(rs.getString("validez")).append(PARAMETER_SEPARATOR);//13
sb.append(rs.getString("invoice_number")).append(PARAMETER_SEPARATOR);//14
sb.append(rs.getString("invoice_date")).append(PARAMETER_SEPARATOR);//15
sb.append(rs.getString("price_list")).append(PARAMETER_SEPARATOR);//16
sb.append(rs.getString("payment_method")).append(PARAMETER_SEPARATOR);//17
sb.append(rs.getString("sale_condition")).append(PARAMETER_SEPARATOR);//18
sb.append(rs.getString("vencimiento")).append(PARAMETER_SEPARATOR);//19
sb.append(rs.getString("currency")).append(PARAMETER_SEPARATOR);//20
sb.append(rs.getString("currency_exchange")).append(PARAMETER_SEPARATOR);//21
sb.append(rs.getString("codigo_producto")).append(PARAMETER_SEPARATOR);//22
sb.append(rs.getString("descuento_maximo")).append(PARAMETER_SEPARATOR);//23
sb.append(rs.getString("discount_rate")).append(PARAMETER_SEPARATOR);//24
sb.append(rs.getString("bonus_quantity")).append(PARAMETER_SEPARATOR);//25
sb.append(rs.getString("vat_05_total")).append(PARAMETER_SEPARATOR);//26
sb.append(rs.getString("vat_10_total")).append(PARAMETER_SEPARATOR);//27
sb.append(rs.getString("vatted_05_total")).append(PARAMETER_SEPARATOR);//28
sb.append(rs.getString("vatted_10_total")).append(PARAMETER_SEPARATOR);//29
sb.append(rs.getString("exempt_total")).append(PARAMETER_SEPARATOR);//30
sb.append(rs.getString("total_vat_amount")).append(PARAMETER_SEPARATOR);//31
sb.append(rs.getString("total_gross_amount")).append(PARAMETER_SEPARATOR);//32
sb.append(rs.getString("total_discount_amount")).append(PARAMETER_SEPARATOR);//33
sb.append(rs.getString("bonus_total")).append(PARAMETER_SEPARATOR);//34
sb.append(rs.getString("total_net_amount")).append(PARAMETER_SEPARATOR);//35
sb.append(rs.getString("user_code")).append(PARAMETER_SEPARATOR);//36
sb.append(rs.getString("user_full_name")).append(PARAMETER_SEPARATOR);//37
sb.append(rs.getString("warehouse_code")).append(PARAMETER_SEPARATOR);//38
sb.append(rs.getString("cash")).append(PARAMETER_SEPARATOR);//39
sb.append(rs.getString("credito")).append(PARAMETER_SEPARATOR);//40
sb.append(rs.getString("observation").length() == 0 ? "-1": rs.getString("observation")).append(PARAMETER_SEPARATOR);//41
sb.append(rs.getString("opt1")).append(PARAMETER_SEPARATOR);//42
sb.append(rs.getString("opt2")).append(PARAMETER_SEPARATOR);//43
sb.append(rs.getString("opt3")).append(PARAMETER_SEPARATOR);//44
sb.append(rs.getString("opt4")).append(PARAMETER_SEPARATOR);//45
sb.append(rs.getString("opt5")).append(PARAMETER_SEPARATOR);//46
sb.append(rs.getString("opt6")).append(PARAMETER_SEPARATOR);//47
sb.append(rs.getString("opt7")).append(PARAMETER_SEPARATOR);//48
sb.append(rs.getString("opt8")).append(PARAMETER_SEPARATOR);//49
sb.append(rs.getString("opt9")).append(PARAMETER_SEPARATOR);//50
sb.append(rs.getString("opt10")).append(PARAMETER_SEPARATOR);//51
sb.append(rs.getString("opt10")).append(PARAMETER_SEPARATOR);//51
sb.append(rs.getString("print_text")).append(PARAMETER_SEPARATOR);//52
} else {
throw new Exception("Mensaje ID a procesar no encontrado");
}
StringBuilder invoiceDetailQuerysb = new StringBuilder();
invoiceDetailQuerysb.append("select product_code, product_name, '-1' as product_select, ");
invoiceDetailQuerysb.append("cast(product_vat_rate_value as int) as product_vat_rate, ");
invoiceDetailQuerysb.append("'-1' as price_list, price, product_batch_name as batch, '-1' as design, '-1' as size, ");
invoiceDetailQuerysb.append("'-1' as color, product_size_name as product_unit, '-1' as cantidad_equivalente, ");
invoiceDetailQuerysb.append("product_batch_date as vencimiento_lote, '-1' as existencia, quantity, product_gross_amount, ");
invoiceDetailQuerysb.append("'-1' as max_discount, coalesce(discount_rate,0) as discount_rate, coalesce(discount_amount,0) as discount_amount, ");
invoiceDetailQuerysb.append("'-1' as bonificacion_maxima, '-1' as bonus_quantity, '-1' as total_quantity, ");
invoiceDetailQuerysb.append("'-1' as bonus_amount,product_net_amount, '-1' as iva_05, '-1' as iva_10, '-1' as exenta, ");
invoiceDetailQuerysb.append("case cast(product_vat_rate_value as int) when 5 then product_vat_amount else 0 end as vat_05_amount, ");
invoiceDetailQuerysb.append("case cast(product_vat_rate_value as int) when 10 then product_vat_amount else 0 end as vat_10_amount, ");
invoiceDetailQuerysb.append("product_vat_amount, ");
invoiceDetailQuerysb.append("case cast(product_vat_rate_value as int) when 5 then product_vatted_amount else 0 end as vatted_05_amount, ");
invoiceDetailQuerysb.append("case cast(product_vat_rate_value as int) when 10 then product_vatted_amount else 0 end as vatted_10_amount, ");
invoiceDetailQuerysb.append("case cast(product_vat_rate_value as int) when 0 then product_vatted_amount else 0 end as exempt_amount, ");
invoiceDetailQuerysb.append("'-1' as opt1, '-1' as opt2,'-1' as opt3,'-1' as opt4,'-1' as opt5,'-1' as opt6, ");
invoiceDetailQuerysb.append("'-1' as opt7,'-1' as opt8,'-1' as opt9,'-1' as opt10 ");
invoiceDetailQuerysb.append("from invoice_detail where invoice_id = ? ");
ps = connPortalBackend.prepareStatement(invoiceDetailQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
sb.append(BLOCK_SEPARATOR);
int b=0;
while (rs.next()) {
if (b == 1){
sb.append(BLOCK_SEPARATOR_DETAILS);
}
sb.append(rs.getString("product_code")).append(PARAMETER_SEPARATOR);//0
sb.append(rs.getString("product_name")).append(PARAMETER_SEPARATOR);//1
sb.append(rs.getString("product_select")).append(PARAMETER_SEPARATOR);//2
sb.append(rs.getString("product_vat_rate")).append(PARAMETER_SEPARATOR);//3
sb.append(rs.getString("price_list")).append(PARAMETER_SEPARATOR);//4
sb.append(rs.getString("price")).append(PARAMETER_SEPARATOR);//5
sb.append(rs.getString("batch")).append(PARAMETER_SEPARATOR);//6
sb.append(rs.getString("design")).append(PARAMETER_SEPARATOR);//7
sb.append(rs.getString("size")).append(PARAMETER_SEPARATOR);//8
sb.append(rs.getString("color")).append(PARAMETER_SEPARATOR);//9
sb.append(rs.getString("product_unit")).append(PARAMETER_SEPARATOR);//10
sb.append(rs.getString("cantidad_equivalente")).append(PARAMETER_SEPARATOR);//11
sb.append(rs.getString("vencimiento_lote")).append(PARAMETER_SEPARATOR);//12
sb.append(rs.getString("existencia")).append(PARAMETER_SEPARATOR);//13
sb.append(rs.getString("quantity")).append(PARAMETER_SEPARATOR);//14
sb.append(rs.getString("product_gross_amount")).append(PARAMETER_SEPARATOR);///15
sb.append(rs.getString("max_discount")).append(PARAMETER_SEPARATOR);//16
sb.append(rs.getString("discount_rate")).append(PARAMETER_SEPARATOR);//17
sb.append(rs.getString("discount_amount")).append(PARAMETER_SEPARATOR);//18
sb.append(rs.getString("bonificacion_maxima")).append(PARAMETER_SEPARATOR);//19
sb.append(rs.getString("bonus_quantity")).append(PARAMETER_SEPARATOR);//20
sb.append(rs.getString("total_quantity")).append(PARAMETER_SEPARATOR);//21
sb.append(rs.getString("bonus_amount")).append(PARAMETER_SEPARATOR);//22
sb.append(rs.getString("product_net_amount")).append(PARAMETER_SEPARATOR);//23
sb.append(rs.getString("iva_05")).append(PARAMETER_SEPARATOR);//24
sb.append(rs.getString("iva_10")).append(PARAMETER_SEPARATOR);//25
sb.append(rs.getString("exenta")).append(PARAMETER_SEPARATOR);//26
sb.append(rs.getString("vat_05_amount")).append(PARAMETER_SEPARATOR);//27
sb.append(rs.getString("vat_10_amount")).append(PARAMETER_SEPARATOR);//28
sb.append(rs.getString("product_vat_amount")).append(PARAMETER_SEPARATOR);//29
sb.append(rs.getString("vatted_05_amount")).append(PARAMETER_SEPARATOR);//30
sb.append(rs.getString("vatted_10_amount")).append(PARAMETER_SEPARATOR);//31
sb.append(rs.getString("exempt_amount")).append(PARAMETER_SEPARATOR);//32
sb.append(rs.getString("opt1")).append(PARAMETER_SEPARATOR);//33
sb.append(rs.getString("opt2")).append(PARAMETER_SEPARATOR);//34
sb.append(rs.getString("opt3")).append(PARAMETER_SEPARATOR);//35
sb.append(rs.getString("opt4")).append(PARAMETER_SEPARATOR);//36
sb.append(rs.getString("opt5")).append(PARAMETER_SEPARATOR);//37
sb.append(rs.getString("opt6")).append(PARAMETER_SEPARATOR);//38
sb.append(rs.getString("opt7")).append(PARAMETER_SEPARATOR);//39
sb.append(rs.getString("opt8")).append(PARAMETER_SEPARATOR);//40
sb.append(rs.getString("opt9")).append(PARAMETER_SEPARATOR);//41
sb.append(rs.getString("opt10")).append(PARAMETER_SEPARATOR);//42
b=1;
}
sb.append(BLOCK_SEPARATOR);
StringBuilder receiptValuesQuerysb = new StringBuilder();
receiptValuesQuerysb.append("select (p.payment_method_code || '.' || p.payment_method_name) as payment, p.value_amount, ");
receiptValuesQuerysb.append("(case when p.bank_code != '' then (p.bank_code || '.' || p.bank_description) else '-1' end) as bank, ");
receiptValuesQuerysb.append(" p.document_number as document_number, p.document_date, p.document_expiration_date, ");
receiptValuesQuerysb.append(" coalesce(p.document_drawer, '-1') document_drawer, p.payment_method_code ");
receiptValuesQuerysb.append(" from invoice_payment_detail p join invoice i on i.id=p.invoice_id where p.invoice_id = ?");
ps = connPortalBackend.prepareStatement(receiptValuesQuerysb.toString());
ps.setString(1, message.domainId);
rs = ps.executeQuery();
b= 0;
while (rs.next()) {
if (b == 1){
sb.append(BLOCK_SEPARATOR_PAYMENT);
}
sb.append(rs.getString("value_amount") == null ? "-1":rs.getString("value_amount") ).append(PARAMETER_SEPARATOR);//0
sb.append(rs.getString("payment")).append(PARAMETER_SEPARATOR);//1
sb.append(rs.getString("bank") == null ? "-1":rs.getString("bank") ).append(PARAMETER_SEPARATOR);//2
sb.append(rs.getString("document_number").length() == 0 ? "-1":rs.getString("document_number") ).append(PARAMETER_SEPARATOR);//3
sb.append(rs.getString("document_date") == null ? "-1":rs.getString("document_date") ).append(PARAMETER_SEPARATOR);//4
sb.append(rs.getString("document_expiration_date") == null ? "-1":rs.getString("document_expiration_date") ).append(PARAMETER_SEPARATOR);//5
sb.append(rs.getString("document_drawer").length() == 0 ? "-1":rs.getString("document_drawer") ).append(PARAMETER_SEPARATOR);//6
sb.append(rs.getString("payment_method_code").length() == 0 ? "-1":rs.getString("payment_method_code") ).append(PARAMETER_SEPARATOR);//7
b = 1;
}
log.info("Mensaje a procesar: "+sb.toString());
return sb.toString().replaceAll("'", " ");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment