Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
#
|
|
|
|
|
|
|
915 |
if not data or 'fertilizerConstants' not in data or 'profileSettings' not in data:
|
916 |
return jsonify({'error': 'Неверный формат данных'}), 400
|
917 |
|
918 |
-
#
|
919 |
fertilizer_data = data['fertilizerConstants']
|
920 |
profile_data = data['profileSettings']
|
921 |
|
922 |
-
#
|
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 |
-
#
|
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 |
-
#
|
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 |
-
#
|
968 |
calculator = NutrientCalculator(volume_liters=VOLUME_LITERS)
|
969 |
calculator.target_profile = target_profile
|
970 |
calculator.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
|
971 |
|
972 |
-
#
|
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 |
-
#
|
977 |
results = calculator.calculate()
|
978 |
|
979 |
-
#
|
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 |
-
# Округляем
|
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:
|