Ordenación Tareas asincronas limpieza

ConfiguracionSimplificada
Gerardo 2021-11-14 18:39:18 +01:00
parent b0e389aada
commit 1e77fc2ac5
6 changed files with 131 additions and 120 deletions

View File

@ -636,14 +636,14 @@ namespace OliviaAddInPro.Helper
return res; return res;
} }
public static async Task<bool> ExportShp(string pathLayerIn, SpatialQueryFilter filter, string nameShp, string outpath, ProgressorSource progrDialog = null) public static bool ExportShp(string pathLayerIn, SpatialQueryFilter filter, string nameShp, string outpath,out string msgOut, ProgressorSource progrDialog = null)
{ {
msgOut = "";
if (!System.IO.Directory.Exists(outpath)) if (!System.IO.Directory.Exists(outpath))
System.IO.Directory.CreateDirectory(outpath); System.IO.Directory.CreateDirectory(outpath);
ReiniciaOutStr(); ReiniciaOutStr();
System.Threading.CancellationTokenSource _cts= new System.Threading.CancellationTokenSource(); System.Threading.CancellationTokenSource _cts= new System.Threading.CancellationTokenSource();
var fin = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<string>)(() =>
{
var progSrc = new CancelableProgressorSource(); var progSrc = new CancelableProgressorSource();
string[] args = { pathLayerIn, outpath }; string[] args = { pathLayerIn, outpath };
// execute the tool // execute the tool
@ -662,7 +662,7 @@ namespace OliviaAddInPro.Helper
case "OnProgressMessage": case "OnProgressMessage":
{ {
string msg = string.Format("{0}: {1}", new object[] { event_name, (string)o }); string msg = string.Format("{0}: {1}", new object[] { event_name, (string)o });
progrDialog.Message = (string)o; //progrDialog.Message = (string)o;
Debug.WriteLine(msg); Debug.WriteLine(msg);
//System.Windows.MessageBox.Show(msg); //System.Windows.MessageBox.Show(msg);
//_cts.Cancel(); //_cts.Cancel();
@ -683,23 +683,14 @@ namespace OliviaAddInPro.Helper
//renombrado de ficheros: //renombrado de ficheros:
if (!RenameSHP(outpath, pathLayerIn, nameShp)) if (!RenameSHP(outpath, pathLayerIn, nameShp))
return null;
return gpResult.ReturnValue;
}));
fin.Wait();
if (string.IsNullOrEmpty(fin.Result))
{ {
OutStr = "Ha ocurrido un error en la herramienta de GeoProcesamiento"; msgOut = "Error al exportar a shp.";
return false; return false;
} }
else
{
OutStr = "Ok: " + fin.Result;
return true; return true;
} }
}
} }
} }

View File

@ -9,6 +9,7 @@ using System.Collections.ObjectModel;
using ArcGIS.Core.CIM; using ArcGIS.Core.CIM;
using ArcGIS.Core.Data; using ArcGIS.Core.Data;
using OliviaAddInPro.Services; using OliviaAddInPro.Services;
using static OliviaAddInPro.Model.LimpiezaDef;
namespace OliviaAddInPro.Model namespace OliviaAddInPro.Model
{ {
@ -44,14 +45,16 @@ namespace OliviaAddInPro.Model
{ {
Serv = new LimpiezaServ(this); Serv = new LimpiezaServ(this);
} }
public void Ejecuta(ModosEjec modo)
public TareaRes Ejecuta(ModosEjec modo)
{ {
bool bien = true; TareaRes res = null;
if (modo == ModosEjec.Sectoriza) if (modo == ModosEjec.Sectoriza)
bien = Serv.Sectoriza(); res = Serv.Sectoriza();
else if (modo == ModosEjec.Planifica) else if (modo == ModosEjec.Planifica)
bien=Serv.Planifica(); res = Serv.Planifica();
if(!bien) return res;
/*if(!res)
{ {
string msg; string msg;
if (Serv.ErrStr.Length > 0) if (Serv.ErrStr.Length > 0)
@ -59,7 +62,19 @@ namespace OliviaAddInPro.Model
else else
msg = "Han ocurrido errores al comenzar la ejeción."; msg = "Han ocurrido errores al comenzar la ejeción.";
HelperGlobal.ponMsg(msg); HelperGlobal.ponMsg(msg);
} }*/
}
public async Task<TareaRes> EjecutaAsync(ModosEjec modo, Action<TareaRes> ffin)
{
var tarea = await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<TareaRes>)(() =>
{
var res = Ejecuta(modo);
ffin(res);
return res;
}));
return tarea;
} }
} }
} }

View File

@ -788,6 +788,12 @@ namespace OliviaAddInPro.Model
LimpiezaDef.filtro_str[(int)LimpiezaDef.AmbitsTra.AmbPipi] = LimpiezaDef.Campos.consulta_entidad + " = '" + LimpiezaDef.Atributos.atr_pipi + "'"; LimpiezaDef.filtro_str[(int)LimpiezaDef.AmbitsTra.AmbPipi] = LimpiezaDef.Campos.consulta_entidad + " = '" + LimpiezaDef.Atributos.atr_pipi + "'";
LimpiezaDef.filtro_str[(int)LimpiezaDef.AmbitsTra.AmbSane] = LimpiezaDef.Campos.consulta_entidad + " = '" + LimpiezaDef.Atributos.atr_sane + "'"; LimpiezaDef.filtro_str[(int)LimpiezaDef.AmbitsTra.AmbSane] = LimpiezaDef.Campos.consulta_entidad + " = '" + LimpiezaDef.Atributos.atr_sane + "'";
} }
public class TareaRes
{
public bool Errores { get; set; }
public object data { get; set; }
public string msg { get; set; }
}
} }
} }

View File

@ -35,22 +35,10 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar * Modo 0, sectorizar
* Modo 1, planificar * Modo 1, planificar
*/ */
public bool ComienzaEjec(ModosEjec modo) public bool ComienzaEjec(ModosEjec modo, out string ErrStr)
{ {
using (OliviaGlob.progrDialog = new ProgressDialog("Exportando Datos", "Cancelar", 100, true))
{
var status = new ProgressorSource(OliviaGlob.progrDialog);
OliviaGlob.progrDialog.Show();
bool fue_mal = false; bool fue_mal = false;
status.Message = "Exportando Datos";
status.Value = 0;
status.Status = "Exportando Datos";
status.Max = 100;
//esconde el pane
OliviaGlob.ShowHidePane(false);
ErrStr = string.Empty; ErrStr = string.Empty;
//Cuenta las filas que cumplen la consulta //Cuenta las filas que cumplen la consulta
int nelems = HelperGdb.GetNumElems(com.CapaElems, com.ConsultaAmbs); int nelems = HelperGdb.GetNumElems(com.CapaElems, com.ConsultaAmbs);
if (nelems <= 0) if (nelems <= 0)
@ -69,11 +57,6 @@ namespace OliviaAddInPro.Services
ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + ErrStr; ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + ErrStr;
fue_mal = true; fue_mal = true;
} }
if (geom_export == null || geom_export.IsEmpty)
{
fue_mal = true;
}
} }
//crea el filtro de exportación //crea el filtro de exportación
@ -82,26 +65,18 @@ namespace OliviaAddInPro.Services
//mira spatialreference de los datos de entrada //mira spatialreference de los datos de entrada
spatRef = geom_export.SpatialReference; spatRef = geom_export.SpatialReference;
filtroEspacial = CreaFiltro(com.ConsultaAmbs, geom_export); filtroEspacial = CreaFiltro(com.ConsultaAmbs, geom_export);
if (filtroEspacial == null) fue_mal = filtroEspacial == null;
{ if(fue_mal)
fue_mal = true; ErrStr = "error al crear el filtro de exportacion";
}
} }
if (!fue_mal) if (!fue_mal)
{ fue_mal = Ejecuta(modo, out ErrStr);
Ejecuta(modo, status);
OliviaGlob.progrDialog.Hide();
return true;
}
OliviaGlob.progrDialog.Hide(); return fue_mal;
//fue mal
//muestra pane
OliviaGlob.ShowHidePane(true);
return false;
}
} }
@ -203,20 +178,12 @@ namespace OliviaAddInPro.Services
/** /**
* Exporta y lanza proceso y ventana de proceso * Exporta y lanza proceso y ventana de proceso
*/ */
public void Ejecuta(ModosEjec modo, ProgressorSource dlgProcess) public bool Ejecuta(ModosEjec modo, out string msg)
{ {
//lanza ventana de progreso msg = "";
//exporta los datos de entrada //exporta los datos de entrada
bool res=HelperGdb.ExportShp(com.CapaElems, filtroEspacial, com.NombreShpExport, OliviaGlob.Paths.DirData, dlgProcess).Result; return HelperGdb.ExportShp(com.CapaElems, filtroEspacial, com.NombreShpExport, OliviaGlob.Paths.DirData, out msg);
if(!res)
{
string msg = HelperGdb.OutStr;
if (!string.IsNullOrEmpty(msg))
msg = "Han ocurrido errores al convertir a shape.";
HelperGlobal.ponMsg(msg);
}

View File

@ -9,6 +9,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using static OliviaAddInPro.Model.LimpiezaDef;
namespace OliviaAddInPro.Services namespace OliviaAddInPro.Services
{ {
@ -20,21 +21,31 @@ namespace OliviaAddInPro.Services
{ {
limp = _limp; limp = _limp;
} }
/** /**
* Acciones para comenzar ejecución * Acciones para comenzar ejecución
* Modo 0, sectorizar * Modo 0, sectorizar
* Modo 1, planificar * Modo 1, planificar
*/ */
public bool Sectoriza() public TareaRes Sectoriza()
{ {
var res = new TareaRes()
{
Errores = false,
data = null,
msg = ""
};
com = (TratamientoComun)limp; com = (TratamientoComun)limp;
string nombFileAmbs = string.Empty; string nombFileAmbs = string.Empty;
//Prepara consulta //Prepara consulta
ErrStr = string.Empty; ErrStr = string.Empty;
if (!PreparaConsulta(out nombFileAmbs)) if (!PreparaConsulta(out nombFileAmbs))
{ {
ErrStr = "No se ha seleccionado una consulta válida" + limp.ConsultaAmbs; res.msg= "No se ha seleccionado una consulta válida" + limp.ConsultaAmbs;
return false; res.Errores = true;
return res;
} }
//Prepara nombre //Prepara nombre
@ -44,13 +55,16 @@ namespace OliviaAddInPro.Services
//Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp //Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp
limp.NombreShpExport = prefNameExport + "T" + limp.TipoTto.ToString("00") + nombFileAmbs + DameStrPoligs() + "_" + fechaHora + extShp; limp.NombreShpExport = prefNameExport + "T" + limp.TipoTto.ToString("00") + nombFileAmbs + DameStrPoligs() + "_" + fechaHora + extShp;
string msg = "";
//comienza ejecucion //comienza ejecucion
if(!ComienzaEjec(ModosEjec.Sectoriza)) if(!ComienzaEjec(ModosEjec.Sectoriza, out msg))
{ {
return false; res.Errores = true;
res.msg = msg;
return res;
} }
return true; return res;
} }
@ -65,25 +79,33 @@ namespace OliviaAddInPro.Services
return true; return true;
} }
public bool Planifica() public TareaRes Planifica()
{ {
TareaRes res = new TareaRes()
{
Errores = false,
msg = "",
data = null
};
//se asegura que tiene todo para planif //se asegura que tiene todo para planif
ErrStr = string.Empty; //ErrStr = string.Empty;
if (!CompruebaPlanif()) if (!CompruebaPlanif())
{ {
ErrStr = "En la capa de ámbitos seleccionada no se encuentran columnas de SECTOR y/o SECUENCIA, necesarias para planificar"; res.msg = "En la capa de ámbitos seleccionada no se encuentran columnas de SECTOR y/o SECUENCIA, necesarias para planificar";
return false; res.Errores = true;
return res;
} }
//Prepara consulta //Prepara consulta
string nombFileAmbs = string.Empty; string nombFileAmbs = string.Empty;
//Prepara consulta //Prepara consulta
if (!PreparaConsulta(out nombFileAmbs)) if (!PreparaConsulta(out nombFileAmbs))
{ {
ErrStr = "No se ha seleccionado una consulta válida" + limp.ConsultaAmbs; res.msg = "No se ha seleccionado una consulta válida" + limp.ConsultaAmbs;
return false; res.Errores = true;
return res;
} }
return true; return res;
} }
public string DameAmbsConsulta(out string ambs_file) public string DameAmbsConsulta(out string ambs_file)

View File

@ -7,6 +7,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using OliviaAddInPro.Helper; using OliviaAddInPro.Helper;
using static OliviaAddInPro.Model.LimpiezaDef;
namespace OliviaAddInPro namespace OliviaAddInPro
{ {
@ -151,8 +152,17 @@ namespace OliviaAddInPro
return; return;
} }
OliviaGlob.Limp.Ejecuta(modo); Action<TareaRes> ac = finEjecuta;
var res = OliviaGlob.Limp.EjecutaAsync(modo, ac);
//res.
}
public void finEjecuta(TareaRes res)
{
if (res.Errores)
{
HelperGlobal.ponMsg(res.msg);
}
HelperGlobal.ponMsg("Proceso terminado");
} }
} }
} }