DmitrMakeev commited on
Commit
5c991ad
·
verified ·
1 Parent(s): 5b2b2cc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -16
app.py CHANGED
@@ -895,6 +895,7 @@ if __name__ == "__main__":
895
 
896
 
897
 
 
898
 
899
  def round_floats(obj, ndigits=3):
900
  """Рекурсивно округляет все float значения в структуре данных"""
@@ -911,21 +912,24 @@ def handle_calculation():
911
  try:
912
  data = request.get_json()
913
 
914
- # 1. Проверка обязательных полей
 
 
 
915
  if not data or 'fertilizerConstants' not in data or 'profileSettings' not in data:
916
  return jsonify({'error': 'Неверный формат данных'}), 400
917
 
918
- # 2. Извлекаем данные из запроса
919
  fertilizer_data = data['fertilizerConstants']
920
  profile_data = data['profileSettings']
921
 
922
- # 3. Устанавливаем константы из запроса
923
  TOTAL_NITROGEN = float(profile_data.get('TOTAL_NITROG', 125.0))
924
  NO3_RATIO = float(profile_data.get('NO3_RAT', 8.25))
925
  VOLUME_LITERS = float(profile_data.get('liters', 100))
926
  NH4_RATIO = 1.00 # Фиксированное значение
927
 
928
- # 4. Формируем целевой профиль
929
  target_profile = {
930
  'P': float(profile_data.get('P', 31.0)),
931
  'K': float(profile_data.get('K', 210.0)),
@@ -936,7 +940,7 @@ def handle_calculation():
936
  'N (NH4+)': 0 # Будет рассчитано в калькуляторе
937
  }
938
 
939
- # 5. Обновляем константы удобрений
940
  NUTRIENT_CONTENT_IN_FERTILIZERS = {
941
  "Кальциевая селитра": {
942
  "N (NO3-)": float(fertilizer_data["Кальциевая селитра"].get("N (NO3-)", 0.11863)),
@@ -964,24 +968,19 @@ def handle_calculation():
964
  }
965
  }
966
 
967
- # 6. Создаем и настраиваем калькулятор
968
  calculator = NutrientCalculator(volume_liters=VOLUME_LITERS)
969
  calculator.target_profile = target_profile
970
  calculator.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
971
 
972
- # 7. Устанавливаем параметры азота
973
  calculator.target_profile['N (NO3-)'] = TOTAL_NITROGEN * (NO3_RATIO / (NO3_RATIO + NH4_RATIO))
974
  calculator.target_profile['N (NH4+)'] = TOTAL_NITROGEN * (NH4_RATIO / (NO3_RATIO + NH4_RATIO))
975
 
976
- # 8. Выполняем расчет
977
  results = calculator.calculate()
978
 
979
- # 9. Округляем значения граммов до 3 знаков после запятой
980
- for fert_data in results.values():
981
- if 'граммы' in fert_data:
982
- fert_data['граммы'] = round(fert_data['граммы'], 3)
983
-
984
- # 10. Формируем ответ
985
  response = {
986
  'actual_profile': calculator.actual_profile,
987
  'fertilizers': results,
@@ -994,8 +993,8 @@ def handle_calculation():
994
  }
995
  }
996
 
997
- # Округляем ВСЕ числовые значения в ответе до 3 знаков
998
- rounded_response = round_floats(response)
999
 
1000
  # Для миллиграммов применяем целочисленное округление
1001
  if 'fertilizers' in rounded_response:
 
895
 
896
 
897
 
898
+ from flask import request, jsonify
899
 
900
  def round_floats(obj, ndigits=3):
901
  """Рекурсивно округляет все float значения в структуре данных"""
 
912
  try:
913
  data = request.get_json()
914
 
915
+ # Получаем параметр точности округления (по умолчанию 3)
916
+ rounding_precision = int(data['profileSettings'].get('rounding_precision', 3))
917
+
918
+ # Проверка обязательных полей
919
  if not data or 'fertilizerConstants' not in data or 'profileSettings' not in data:
920
  return jsonify({'error': 'Неверный формат данных'}), 400
921
 
922
+ # Извлекаем данные из запроса
923
  fertilizer_data = data['fertilizerConstants']
924
  profile_data = data['profileSettings']
925
 
926
+ # Устанавливаем константы из запроса
927
  TOTAL_NITROGEN = float(profile_data.get('TOTAL_NITROG', 125.0))
928
  NO3_RATIO = float(profile_data.get('NO3_RAT', 8.25))
929
  VOLUME_LITERS = float(profile_data.get('liters', 100))
930
  NH4_RATIO = 1.00 # Фиксированное значение
931
 
932
+ # Формируем целевой профиль
933
  target_profile = {
934
  'P': float(profile_data.get('P', 31.0)),
935
  'K': float(profile_data.get('K', 210.0)),
 
940
  'N (NH4+)': 0 # Будет рассчитано в калькуляторе
941
  }
942
 
943
+ # Обновляем константы удобрений
944
  NUTRIENT_CONTENT_IN_FERTILIZERS = {
945
  "Кальциевая селитра": {
946
  "N (NO3-)": float(fertilizer_data["Кальциевая селитра"].get("N (NO3-)", 0.11863)),
 
968
  }
969
  }
970
 
971
+ # Создаем и настраиваем калькулятор
972
  calculator = NutrientCalculator(volume_liters=VOLUME_LITERS)
973
  calculator.target_profile = target_profile
974
  calculator.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
975
 
976
+ # Устанавливаем параметры азота
977
  calculator.target_profile['N (NO3-)'] = TOTAL_NITROGEN * (NO3_RATIO / (NO3_RATIO + NH4_RATIO))
978
  calculator.target_profile['N (NH4+)'] = TOTAL_NITROGEN * (NH4_RATIO / (NO3_RATIO + NH4_RATIO))
979
 
980
+ # Выполняем расчет
981
  results = calculator.calculate()
982
 
983
+ # Формируем ответ
 
 
 
 
 
984
  response = {
985
  'actual_profile': calculator.actual_profile,
986
  'fertilizers': results,
 
993
  }
994
  }
995
 
996
+ # Округляем все числовые значения
997
+ rounded_response = round_floats(response, rounding_precision)
998
 
999
  # Для миллиграммов применяем целочисленное округление
1000
  if 'fertilizers' in rounded_response: