also logging satellitetaskcode to cropfieldtable in database
This commit is contained in:
		| @@ -75,12 +75,14 @@ namespace FarmmapsBulkSatDownload | |||||||
|             string connectionString = dbparcels.GetConnectionString(); |             string connectionString = dbparcels.GetConnectionString(); | ||||||
|             string readSql = string.Format( |             string readSql = string.Format( | ||||||
| @" | @" | ||||||
| SELECT pt.arbid, pt.year, gml.lastwenrdate, ST_AsGeoJSON(ST_Transform((ST_DUMP(pt.geom)).geom::geometry(Polygon),4326)) AS geojson_polygon_wgs84, COALESCE(pt.cropfielditemcode,'') AS cropfielditemcode | SELECT pt.arbid, pt.year, gml.lastwenrdate, ST_AsGeoJSON(ST_Transform((ST_DUMP(pt.geom)).geom::geometry(Polygon),4326)) AS geojson_polygon_wgs84,  | ||||||
|  |     COALESCE(pt.cropfielditemcode,'') AS cropfielditemcode, | ||||||
|  |     CASE WHEN pt.year >= DATE_PART('year', CURRENT_DATE) THEN '' ELSE COALESCE(pt.satellitetaskcode,'') END AS satellitetaskcode | ||||||
| FROM {0}.{1} pt, {0}.{2} gml | FROM {0}.{1} pt, {0}.{2} gml | ||||||
| WHERE | WHERE | ||||||
|     pt.arbid = gml.arbid AND |     pt.arbid = gml.arbid AND | ||||||
|     pt.crop NOT IN ('Lelie','Tulp') AND |     pt.crop NOT IN ('Lelie','Tulp') AND | ||||||
|     pt.year > 2018 AND pt.arbid >= 8155 |     pt.year > 2018 AND pt.arbid IN(8276,8314,8315) | ||||||
| ORDER BY pt.arbid | ORDER BY pt.arbid | ||||||
| LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMIT x for testing | LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMIT x for testing | ||||||
|  |  | ||||||
| @@ -102,6 +104,7 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|                     bulkSatDownloadInput.GeometryJson = JObject.Parse(dr.GetString(3)); |                     bulkSatDownloadInput.GeometryJson = JObject.Parse(dr.GetString(3)); | ||||||
|                     bulkSatDownloadInput.SatelliteBands = satelliteBands; |                     bulkSatDownloadInput.SatelliteBands = satelliteBands; | ||||||
|                     bulkSatDownloadInput.cropfielditemcode = dr.GetString(4); |                     bulkSatDownloadInput.cropfielditemcode = dr.GetString(4); | ||||||
|  |                     bulkSatDownloadInput.satellitetaskcode = dr.GetString(5); | ||||||
|                     bulkSatDownloadInput.database = dbparcels; |                     bulkSatDownloadInput.database = dbparcels; | ||||||
|                     bulkSatDownloadInput.schemaname = schemaname; |                     bulkSatDownloadInput.schemaname = schemaname; | ||||||
|                     bulkSatDownloadInput.cropfieldtable = parceltablename; |                     bulkSatDownloadInput.cropfieldtable = parceltablename; | ||||||
| @@ -177,6 +180,7 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|         private async Task Process(List<UserRoot> roots, BulkSatDownloadInput input) |         private async Task Process(List<UserRoot> roots, BulkSatDownloadInput input) | ||||||
|         { |         { | ||||||
|             string cropfielditemcode; |             string cropfielditemcode; | ||||||
|  |             string satellitetaskcode; | ||||||
|             Item cropfieldItem; |             Item cropfieldItem; | ||||||
|             bool satelliteItemsAvailable; |             bool satelliteItemsAvailable; | ||||||
|             bool statsAvailable; |             bool statsAvailable; | ||||||
| @@ -193,6 +197,7 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|             int cntDatesDownloaded; |             int cntDatesDownloaded; | ||||||
|  |  | ||||||
|             string satelliteSource = "akkerwebwenr";    //same as in groenmonitorlatestviewname SQL code |             string satelliteSource = "akkerwebwenr";    //same as in groenmonitorlatestviewname SQL code | ||||||
|  |             int fieldID = input.fieldID; | ||||||
|             string fieldName = input.fieldName; |             string fieldName = input.fieldName; | ||||||
|             int cropYear = input.cropYear; |             int cropYear = input.cropYear; | ||||||
|             List<string> satelliteBands = input.SatelliteBands; |             List<string> satelliteBands = input.SatelliteBands; | ||||||
| @@ -204,6 +209,7 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|             string satelllitetable = input.satelllitetable; |             string satelllitetable = input.satelllitetable; | ||||||
|             DateTime lastDownloadedSatelliteDate = input.lastdownloadedimagedate; |             DateTime lastDownloadedSatelliteDate = input.lastdownloadedimagedate; | ||||||
|             cropfielditemcode = input.cropfielditemcode; |             cropfielditemcode = input.cropfielditemcode; | ||||||
|  |             satellitetaskcode = input.satellitetaskcode; | ||||||
|  |  | ||||||
|             LoadSettings(settingsfile); |             LoadSettings(settingsfile); | ||||||
|  |  | ||||||
| @@ -230,20 +236,20 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|                 // If working with a database, add this cropfieldItem.Code to the database so that next case same cropField is requested, will be faster |                 // If working with a database, add this cropfieldItem.Code to the database so that next case same cropField is requested, will be faster | ||||||
|                 if (database != null) |                 if (database != null) | ||||||
|                 { |                 { | ||||||
|                     // add this CropfieldItemCode to the parceltable |                     // add this cropfielditemcode to the cropfieldtable | ||||||
|                     using (NpgsqlConnection connection = new NpgsqlConnection(database.GetConnectionString())) |                     using (NpgsqlConnection connection = new NpgsqlConnection(database.GetConnectionString())) | ||||||
|                     { |                     { | ||||||
|                         connection.Open(); |                         connection.Open(); | ||||||
|                         NpgsqlCommand updateCmd = connection.CreateCommand(); |                         NpgsqlCommand updateCmd = connection.CreateCommand(); | ||||||
|                         string updateSql = string.Format($"UPDATE {schemaname}.{cropfieldtable} SET cropfielditemcode = '{cropfieldItem.Code}' WHERE arbid = {input.fieldID};"); |                         string updateSql = string.Format($"UPDATE {schemaname}.{cropfieldtable} SET cropfielditemcode = '{cropfieldItem.Code}' WHERE arbid = {fieldID};"); | ||||||
|                         updateCmd.CommandText = updateSql; |                         updateCmd.CommandText = updateSql; | ||||||
|                         //Console.WriteLine(insertCmd.CommandText); |                         //Console.WriteLine(insertCmd.CommandText); | ||||||
|                         int r = updateCmd.ExecuteNonQuery(); |                         int r = updateCmd.ExecuteNonQuery(); | ||||||
|                         if (r != 1) |                         if (r != 1) | ||||||
|                             throw new Exception("// FarmmapsBulkSatDownload: Update Failed"); |                             throw new Exception("// FarmmapsBulkSatDownload: Update cropfielditemcode Failed"); | ||||||
|                         connection.Close(); |                         connection.Close(); | ||||||
|                     } |                     } | ||||||
|                     _logger.LogInformation($"// FarmmapsBulkSatDownload: Added cropfieldItem.Code '{cropfieldItem.Code}' for parcelid {input.fieldID} to {schemaname}.{cropfieldtable} "); |                     _logger.LogInformation($"// FarmmapsBulkSatDownload: Added cropfieldItem.Code '{cropfieldItem.Code}' for parcelid {fieldID} to {schemaname}.{cropfieldtable} "); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             else |             else | ||||||
| @@ -252,20 +258,48 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|                 cropfieldItem = new Item(); |                 cropfieldItem = new Item(); | ||||||
|                 cropfieldItem.Code = cropfielditemcode; |                 cropfieldItem.Code = cropfielditemcode; | ||||||
|                 cropfieldItem.Name = "DataCropfield " + fieldName; |                 cropfieldItem.Name = "DataCropfield " + fieldName; | ||||||
|                 _logger.LogInformation($"// FarmmapsBulkSatDownload: CropfieldItem.Code for parcelid {input.fieldID} already there in {schemaname}.{cropfieldtable}: '{cropfieldItem.Code}'"); |                 _logger.LogInformation($"// FarmmapsBulkSatDownload: CropfieldItem.Code for parcelid {fieldID} already there in {schemaname}.{cropfieldtable}: '{cropfieldItem.Code}'"); | ||||||
|             } |             } | ||||||
|             _settings.cropFieldItems.Add(cropfieldItem); |             _settings.cropFieldItems.Add(cropfieldItem); | ||||||
|             SaveSettings(settingsfile); |             SaveSettings(settingsfile); | ||||||
|  |  | ||||||
|             //Create satelliteTaskCode & save satelliteTaskCode.Code to settingsfile for retracing last call (can be useful if failed) |             //Create satelliteTaskCode & save satelliteTaskCode.Code to settingsfile for retracing last call (can be useful if failed) | ||||||
|             _logger.LogInformation(string.Format($"Running RunSatelliteTask for cropfieldItem '{cropfielditemcode}' and saving settings to {settingsfile}")); |             //_logger.LogInformation(string.Format($"Running RunSatelliteTask for cropfieldItem '{cropfielditemcode}' and saving settings to {settingsfile}")); | ||||||
|             var satelliteTaskCode = await _generalService.RunSatelliteTask(cropfieldItem); |             //var satelliteTaskCode = await _generalService.RunSatelliteTask(cropfieldItem); | ||||||
|             // POSSIBLE & DESIRABLE TO ALSO LOG satelliteTaskCode? |             if (string.IsNullOrEmpty(satellitetaskcode)) | ||||||
|  |             { | ||||||
|  |                 _logger.LogInformation(string.Format($"Running RunSatelliteTask for cropfieldItem '{cropfielditemcode}'")); | ||||||
|  |                 satellitetaskcode = await _generalService.RunSatelliteTask(cropfieldItem); | ||||||
|  |                 // If working with a database, add this cropfieldItem.Code to the database so that next case same cropField is requested, will be faster | ||||||
|  |                 if (database != null) | ||||||
|  |                 { | ||||||
|  |                     // add this satellitetaskcode to the cropfieldtable | ||||||
|  |                     using (NpgsqlConnection connection = new NpgsqlConnection(database.GetConnectionString())) | ||||||
|  |                     { | ||||||
|  |                         connection.Open(); | ||||||
|  |                         NpgsqlCommand updateCmd = connection.CreateCommand(); | ||||||
|  |                         string updateSql = string.Format($"UPDATE {schemaname}.{cropfieldtable} SET satellitetaskcode = '{satellitetaskcode}' WHERE arbid = {fieldID};"); | ||||||
|  |                         updateCmd.CommandText = updateSql; | ||||||
|  |                         //Console.WriteLine(insertCmd.CommandText); | ||||||
|  |                         int r = updateCmd.ExecuteNonQuery(); | ||||||
|  |                         if (r != 1) | ||||||
|  |                             throw new Exception("// FarmmapsBulkSatDownload: Update satellitetaskcode Failed"); | ||||||
|  |                         connection.Close(); | ||||||
|  |                     } | ||||||
|  |                     _logger.LogInformation($"// FarmmapsBulkSatDownload: Added satellitetaskcode '{satellitetaskcode}' for cropfieldItem.Code '{cropfieldItem.Code}' to {schemaname}.{cropfieldtable} "); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 _logger.LogInformation($"// FarmmapsBulkSatDownload: satellitetaskcode for parcelid {fieldID} already there in {schemaname}.{cropfieldtable}: '{satellitetaskcode}'"); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // TODO also log satellitetaskcode to settings, how? | ||||||
|             // SaveSettings(settingsfile); |             // SaveSettings(settingsfile); | ||||||
|  |  | ||||||
|             // Getting satellite items |             // Getting satellite items | ||||||
|             _logger.LogInformation(string.Format($"Running FindSatelliteItems for cropfieldItem.Code '{cropfieldItem.Code}', SatelliteTaskCode '{satelliteTaskCode}'")); |             _logger.LogInformation(string.Format($"Running FindSatelliteItems for cropfieldItem.Code '{cropfieldItem.Code}', SatelliteTaskCode '{satellitetaskcode}'")); | ||||||
|             satelliteItemsCropYear = await _generalService.FindSatelliteItems(cropfieldItem, satelliteTaskCode); |             satelliteItemsCropYear = await _generalService.FindSatelliteItems(cropfieldItem, satellitetaskcode); | ||||||
|  |  | ||||||
|             // Checking if satellite items found |             // Checking if satellite items found | ||||||
|             satelliteItemsAvailable = true; |             satelliteItemsAvailable = true; | ||||||
| @@ -365,7 +399,7 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|                         { |                         { | ||||||
|                             if (dtSatelliteDate <= input.lastdownloadedimagedate) |                             if (dtSatelliteDate <= input.lastdownloadedimagedate) | ||||||
|                             { |                             { | ||||||
|                                 _logger.LogInformation($"// Stats for parcelid {input.fieldID}, date '{strSatelliteDate}' already there in {schemaname}.{satelllitetable}"); |                                 _logger.LogInformation($"// Stats for parcelid {fieldID}, date '{strSatelliteDate}' already there in {schemaname}.{satelllitetable}"); | ||||||
|                             } |                             } | ||||||
|                             else |                             else | ||||||
|                             { |                             { | ||||||
| @@ -378,8 +412,8 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|                                 sbInsertSqlUpdate = new StringBuilder(); |                                 sbInsertSqlUpdate = new StringBuilder(); | ||||||
|                                 sbInsertSqlValues = new StringBuilder(); |                                 sbInsertSqlValues = new StringBuilder(); | ||||||
|                                 sbInsertSqlInto.Append($"INSERT INTO {schemaname}.{satelllitetable} (parcelid,date,source"); |                                 sbInsertSqlInto.Append($"INSERT INTO {schemaname}.{satelllitetable} (parcelid,date,source"); | ||||||
|                                 sbInsertSqlValues.Append($"VALUES ({input.fieldID},'{strSatelliteDate}','{satelliteSource}'"); |                                 sbInsertSqlValues.Append($"VALUES ({fieldID},'{strSatelliteDate}','{satelliteSource}'"); | ||||||
|                                 sbInsertSqlUpdate.Append($"ON CONFLICT (parcelid,date,source) DO UPDATE SET parcelid={input.fieldID}, date='{strSatelliteDate}',source='{satelliteSource}'"); |                                 sbInsertSqlUpdate.Append($"ON CONFLICT (parcelid,date,source) DO UPDATE SET parcelid={fieldID}, date='{strSatelliteDate}',source='{satelliteSource}'"); | ||||||
|                                 if (satelliteBands.Contains("wdvi")) |                                 if (satelliteBands.Contains("wdvi")) | ||||||
|                                 { |                                 { | ||||||
|                                     if (satelliteStatistics_wdvi != null) |                                     if (satelliteStatistics_wdvi != null) | ||||||
| @@ -418,7 +452,7 @@ LIMIT 2000;", schemaname, parceltablename, groenmonitorlatestviewname);   //LIMI | |||||||
|                                 int r = insertCmd.ExecuteNonQuery(); |                                 int r = insertCmd.ExecuteNonQuery(); | ||||||
|                                 if (r != 1) |                                 if (r != 1) | ||||||
|                                     throw new Exception("// FarmmapsBulkSatDownload: Insert Failed"); |                                     throw new Exception("// FarmmapsBulkSatDownload: Insert Failed"); | ||||||
|                                 _logger.LogInformation($"// Added stats to {schemaname}.{satelllitetable} for parcelid {input.fieldID}, date '{strSatelliteDate}'. cntDatesDownloaded: {cntDatesDownloaded}"); |                                 _logger.LogInformation($"// Added stats to {schemaname}.{satelllitetable} for parcelid {fieldID}, date '{strSatelliteDate}'. cntDatesDownloaded: {cntDatesDownloaded}"); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ namespace FarmmapsBulkSatDownload.Models | |||||||
|         public DateTime lastdownloadedimagedate { get; set; } |         public DateTime lastdownloadedimagedate { get; set; } | ||||||
|         public JObject GeometryJson { get; set; } |         public JObject GeometryJson { get; set; } | ||||||
|         public string cropfielditemcode { get; set; } |         public string cropfielditemcode { get; set; } | ||||||
|  |         public string satellitetaskcode { get; set; } | ||||||
|         public string downloadFolder { get; set; } |         public string downloadFolder { get; set; } | ||||||
|         public string fileNameStats { get; set; } |         public string fileNameStats { get; set; } | ||||||
|         public DB database { get; set; } |         public DB database { get; set; } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user