read & write KPI "E1" = milieu belastingspunten ("mbp")
This commit is contained in:
parent
d616fd3dfc
commit
9d691dfed1
@ -71,7 +71,8 @@ namespace FarmmapsKPI
|
||||
StreamWriter sw;
|
||||
string KPIItemCsv = Path.GetFileNameWithoutExtension(fnKPIinput) + "_Items.csv";
|
||||
string KPIItemPathCsv = Path.Combine(downloadFolder, KPIItemCsv);
|
||||
List<string> headerList = new List<string> { "parentName", "area_ha", "cropTypeCode", "cropTypeName", "KPIid", "KPIvariable", "KPIvalue", "KPIunit", "KPItargetvalue", "KPIthresholdValue" };
|
||||
List<string> headerList = new List<string> { "parentName", "area_ha", "cropTypeCode", "cropTypeName", "KPIid", "KPIvariable", "KPIvalue", "KPIunit", "KPItargetvalue", "KPIthresholdValue",
|
||||
"mbp_productCode","mbp_productName","mbp_quantity","mbp_unitCode","mbp_date","mbp_KPIvariable","mbp_KPIvalue"};
|
||||
//Create a new csv file. Means if existing then overwritten !!!
|
||||
sw = new StreamWriter(KPIItemPathCsv);
|
||||
sw.WriteLine($"FarmmapsKPI backend calculations on input file '{fnKPIinput}' downloaded on {DateTime.Now} with the FarmmapsKPI application in the FarmmapsApSamples.sln");
|
||||
@ -86,8 +87,8 @@ namespace FarmmapsKPI
|
||||
|
||||
for (int i = 0; i < fieldsInputs.Count; i++)
|
||||
//for (int i = 7; i < 8; i++)
|
||||
{
|
||||
watch.Restart();
|
||||
{
|
||||
watch.Restart();
|
||||
input = fieldsInputs[i];
|
||||
_logger.LogInformation(string.Format($"// FarmmapsKPI: Downloading KPI's for field {i + 1} out of {fieldsInputs.Count} to single csv file {KPIItemPathCsv}"));
|
||||
try
|
||||
@ -116,6 +117,9 @@ namespace FarmmapsKPI
|
||||
List<Item> crprecChildren;
|
||||
KPIOutput kpio;
|
||||
KPIOutput kpioPrevious = new KPIOutput(); //creates a new empty
|
||||
//If KPI E1 is calculated, write these sub kpi's to output
|
||||
string[] mbp_KPIvariables = new string[] { "aquaticLife", "groundWater", "soilLife" };
|
||||
string mbp_KPIvalue;
|
||||
|
||||
string downloadFolder = input.DownloadFolder;
|
||||
if (string.IsNullOrEmpty(downloadFolder)) {
|
||||
@ -209,18 +213,24 @@ namespace FarmmapsKPI
|
||||
string strJarea = JsonConvert.SerializeObject(new { area = area_ha });
|
||||
JObject Jarea = JObject.Parse(strJarea);
|
||||
|
||||
//Retreiving BOFEK. A cropfield has 1 soil
|
||||
//Have a look at the cropfieldChildren before and after running this task, see one child (i.e. soil) has been added)
|
||||
cropfieldChildren = await _farmmapsApiService.GetItemChildrenAsync(cropfieldItem.Code);
|
||||
_logger.LogInformation("Get BOFEK for field");
|
||||
Item bofekItem = await _generalService.RunBofekTask(cropfieldItem);
|
||||
if (bofekItem == null)
|
||||
if (useExistingCropfieldWithChildren == false)
|
||||
{
|
||||
_logger.LogError("Something went wrong while obtaining the BOFEK data");
|
||||
return;
|
||||
//Retreiving BOFEK. A cropfield has 1 soil
|
||||
//Have a look at the cropfieldChildren before and after running this task, see one child (i.e. soil) has been added)
|
||||
//cropfieldChildren = await _farmmapsApiService.GetItemChildrenAsync(cropfieldItem.Code);
|
||||
_logger.LogInformation("Get BOFEK for field");
|
||||
Item bofekItem = await _generalService.RunBofekTask(cropfieldItem);
|
||||
if (bofekItem == null)
|
||||
{
|
||||
_logger.LogError("Something went wrong while obtaining the BOFEK data");
|
||||
return;
|
||||
}
|
||||
//cropfieldChildren = await _farmmapsApiService.GetItemChildrenAsync(cropfieldItem.Code);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogInformation("For existing cropfield we assume it already has BOFEK soil data");
|
||||
}
|
||||
cropfieldChildren = await _farmmapsApiService.GetItemChildrenAsync(cropfieldItem.Code);
|
||||
|
||||
|
||||
// A cropfield has 1 crop recording and the crop recording has 0:many operations
|
||||
//So first at the crop recording
|
||||
@ -331,9 +341,10 @@ namespace FarmmapsKPI
|
||||
int targetKPIitemsCount = 8; //if we know we should be getting 8
|
||||
int maxtries = 5; // but don't keep on trying forever; there is a maximum number of tries
|
||||
int trycnt = 0;
|
||||
|
||||
_logger.LogInformation($"Firing calls GetKpiItemsForCropField() until we have {targetKPIitemsCount}, but don't keep firing forever, stop after {maxtries} calls");
|
||||
while (KPIItems.Count < targetKPIitemsCount & trycnt < maxtries) {
|
||||
KPIItems = await _generalService.GetKpiItemsForCropField(cropfieldItem, 30);
|
||||
KPIItems = await _generalService.GetKpiItemsForCropField(cropfieldItem, 5);
|
||||
_logger.LogInformation($"Found {KPIItems.Count} KPI items");
|
||||
trycnt ++;
|
||||
}
|
||||
@ -356,24 +367,62 @@ namespace FarmmapsKPI
|
||||
List<string> dataList;
|
||||
foreach (Item item in KPIItems)
|
||||
{
|
||||
dataList = new List<string> { };
|
||||
kpio = JsonConvert.DeserializeObject<KPIOutput>(item.Data.ToString());
|
||||
//Seems sometimes duplicate KPI items are returned. So check that here and only write if this kpio is different from previous
|
||||
if (kpio.id != null)
|
||||
{
|
||||
if (kpio.id != kpioPrevious.id)
|
||||
{
|
||||
dataList.Add(kpio.parentName);
|
||||
dataList.Add(kpio.data.area);
|
||||
dataList.Add(kpio.data.cropTypeCode);
|
||||
dataList.Add(kpio.data.cropTypeName);
|
||||
dataList.Add(kpio.id);
|
||||
dataList.Add(kpio.quantity);
|
||||
dataList.Add(kpio.value);
|
||||
dataList.Add(kpio.unit);
|
||||
dataList.Add(kpio.targetValue);
|
||||
dataList.Add(kpio.thresholdValue);
|
||||
sw.WriteLine(string.Join(",", dataList));
|
||||
if (kpio.id != "E1")
|
||||
{
|
||||
//Make a new dataList = new line to be written
|
||||
dataList = new List<string> { };
|
||||
//Fill the datalist with this kpi
|
||||
dataList.Add(kpio.parentName);
|
||||
dataList.Add(kpio.data.area);
|
||||
dataList.Add(kpio.data.cropTypeCode);
|
||||
dataList.Add(kpio.data.cropTypeName);
|
||||
dataList.Add(kpio.id);
|
||||
dataList.Add(kpio.quantity); // in KPI output quantity is what we call KPIvariable in headerlist of csv file
|
||||
dataList.Add(kpio.value);
|
||||
dataList.Add(kpio.unit);
|
||||
dataList.Add(kpio.targetValue);
|
||||
dataList.Add(kpio.thresholdValue);
|
||||
//Write the datalist to a line to the streamwrieter sw for the output csv file
|
||||
sw.WriteLine(string.Join(",", dataList));
|
||||
}
|
||||
else
|
||||
{
|
||||
//for E1, environmentMeasureData is an array of elements with 1 per pesticide. Inside each element there are multiple mbp_KPIvariables to be written
|
||||
foreach (KPIenvironmentMeasureData e in kpio.data.environmentMeasureData)
|
||||
{
|
||||
foreach (string mbp_KPIvariable in mbp_KPIvariables)
|
||||
{
|
||||
if (mbp_KPIvariable == "aquaticLife") { mbp_KPIvalue = e.aquaticLife; } else if (mbp_KPIvariable == "groundWater") { mbp_KPIvalue = e.groundWater; } else if (mbp_KPIvariable == "soilLife") { mbp_KPIvalue = e.soilLife; } else { mbp_KPIvalue = ""; }
|
||||
//Make a new dataList = new line to be written
|
||||
dataList = new List<string> { };
|
||||
//Fill the datalist with this kpi
|
||||
dataList.Add(kpio.parentName);
|
||||
dataList.Add(kpio.data.area);
|
||||
dataList.Add(kpio.data.cropTypeCode);
|
||||
dataList.Add(kpio.data.cropTypeName);
|
||||
dataList.Add(kpio.id); //"E1"
|
||||
dataList.Add(kpio.quantity); // "mbp"
|
||||
dataList.Add(""); // not here the value
|
||||
dataList.Add(""); // not here KPIunit for this indicator
|
||||
dataList.Add(""); // not here KPItargetvalue for this indicator
|
||||
dataList.Add(""); // not here KPIthresholdValue for this indicator
|
||||
dataList.Add(e.productCode);
|
||||
dataList.Add(e.productName);
|
||||
dataList.Add(e.quantity);
|
||||
dataList.Add(e.unitCode);
|
||||
dataList.Add(e.date);
|
||||
dataList.Add(mbp_KPIvariable);
|
||||
dataList.Add(mbp_KPIvalue);
|
||||
//Write the datalist to a line to the streamwrieter sw for the output csv file
|
||||
sw.WriteLine(string.Join(",", dataList));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
kpioPrevious = kpio;
|
||||
|
@ -21,5 +21,18 @@ namespace FarmmapsKPI.Models
|
||||
public string area { get; set; }
|
||||
public string cropTypeCode { get; set; }
|
||||
public string cropTypeName { get; set; }
|
||||
public KPIenvironmentMeasureData[] environmentMeasureData { get; set; }
|
||||
|
||||
}
|
||||
public class KPIenvironmentMeasureData
|
||||
{
|
||||
public string date { get; set; }
|
||||
public string productCode { get; set; }
|
||||
public string productName { get; set; }
|
||||
public string quantity { get; set; }
|
||||
public string unitCode { get; set; }
|
||||
public string soilLife { get; set; }
|
||||
public string aquaticLife { get; set; }
|
||||
public string groundWater { get; set; }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user