DmitrMakeev commited on
Commit
ab172ac
·
verified ·
1 Parent(s): 8436df1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -21
app.py CHANGED
@@ -896,44 +896,93 @@ if __name__ == "__main__":
896
 
897
 
898
 
899
- @app.route('/calculate', methods=['POST'])
900
- def calculate_nutrients():
901
  try:
902
- # Получаем данные из запроса
903
  data = request.get_json()
904
 
905
- # Обновляем переменные из запроса (кроме NH4+)
906
- volume = float(data.get('volume', 100))
 
 
 
 
 
 
 
 
 
 
 
 
 
907
  target_profile = {
908
- 'P': float(data.get('P', 31.000)),
909
- 'K': float(data.get('K', 210.000)),
910
- 'Mg': float(data.get('Mg', 24.000)),
911
- 'Ca': float(data.get('Ca', 84.000)),
912
- 'S': float(data.get('S', 56.439)),
913
- 'N (NO3-)': float(data.get('NO3', 0)),
914
- 'N (NH4+)': 1.00 # По умолчанию как в оригинале
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
915
  }
916
 
917
- # Создаем и настраиваем калькулятор
918
- calculator = NutrientCalculator(volume_liters=volume)
919
- calculator.target_profile.update(target_profile)
 
 
 
 
 
920
 
921
- # Выполняем расчет
922
  results = calculator.calculate()
923
 
924
- # Формируем ответ
925
  response = {
926
- 'profile': {k: round(v, 2) for k, v in calculator.actual_profile.items()},
927
  'fertilizers': results,
928
  'total_ec': calculator.calculate_ec(),
929
- 'total_ppm': round(sum(calculator.actual_profile.values()), 1)
 
 
 
 
 
930
  }
931
 
932
  return jsonify(response)
933
 
934
  except Exception as e:
935
- return jsonify({'error': str(e)}), 400
936
-
937
 
938
 
939
 
 
896
 
897
 
898
 
899
+ @app.route('/calculation', methods=['POST'])
900
+ def handle_calculation():
901
  try:
 
902
  data = request.get_json()
903
 
904
+ # 1. Проверка обязательных полей
905
+ if not data or 'fertilizerConstants' not in data or 'profileSettings' not in data:
906
+ return jsonify({'error': 'Неверный формат данных'}), 400
907
+
908
+ # 2. Извлекаем данные из запроса
909
+ fertilizer_data = data['fertilizerConstants']
910
+ profile_data = data['profileSettings']
911
+
912
+ # 3. Устанавливаем константы из запроса
913
+ TOTAL_NITROGEN = float(profile_data.get('TOTAL_NITROG', 125.0))
914
+ NO3_RATIO = float(profile_data.get('NO3_RAT', 8.25)) # Берем как есть, без деления на 100
915
+ VOLUME_LITERS = float(profile_data.get('liters', 100))
916
+ NH4_RATIO = 1.00 # Фиксированное значение
917
+
918
+ # 4. Формируем целевой профиль
919
  target_profile = {
920
+ 'P': float(profile_data.get('P', 31.0)),
921
+ 'K': float(profile_data.get('K', 210.0)),
922
+ 'Mg': float(profile_data.get('Mg', 24.0)),
923
+ 'Ca': float(profile_data.get('Ca', 84.0)),
924
+ 'S': float(profile_data.get('S', 56.439)),
925
+ 'N (NO3-)': 0, # Будет рассчитано в калькуляторе
926
+ 'N (NH4+)': 0 # Будет рассчитано в калькуляторе
927
+ }
928
+
929
+ # 5. Обновляем константы удобрений
930
+ NUTRIENT_CONTENT_IN_FERTILIZERS = {
931
+ "Кальциевая селитра": {
932
+ "N (NO3-)": float(fertilizer_data["Кальциевая селитра"].get("N (NO3-)", 0.11863)),
933
+ "Ca": float(fertilizer_data["Кальциевая селитра"].get("Ca", 0.16972))
934
+ },
935
+ "Калий азотнокислый": {
936
+ "N (NO3-)": float(fertilizer_data["Калий азотнокислый"].get("N (NO3-)", 0.13854)),
937
+ "K": float(fertilizer_data["Калий азотнокислый"].get("K", 0.36672))
938
+ },
939
+ "Аммоний азотнокислый": {
940
+ "N (NO3-)": float(fertilizer_data["Аммоний азотнокислый"].get("N (NO3-)", 0.17499)),
941
+ "N (NH4+)": float(fertilizer_data["Аммоний азотнокислый"].get("N (NH4+)", 0.17499))
942
+ },
943
+ "Сульфат магния": {
944
+ "Mg": float(fertilizer_data["Сульфат магния"].get("Mg", 0.1022)),
945
+ "S": float(fertilizer_data["Сульфат магния"].get("S", 0.13483))
946
+ },
947
+ "Монофосфат калия": {
948
+ "P": float(fertilizer_data["Монофосфат калия"].get("P", 0.22761)),
949
+ "K": float(fertilizer_data["Монофосфат калия"].get("K", 0.28731))
950
+ },
951
+ "Калий сернокислый": {
952
+ "K": float(fertilizer_data["Калий сернокислый"].get("K", 0.44874)),
953
+ "S": float(fertilizer_data["Калий сернокислый"].get("S", 0.18401))
954
+ }
955
  }
956
 
957
+ # 6. Создаем и настраиваем калькулятор
958
+ calculator = NutrientCalculator(volume_liters=VOLUME_LITERS)
959
+ calculator.target_profile = target_profile
960
+ calculator.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
961
+
962
+ # 7. Устанавливаем параметры азота
963
+ calculator.target_profile['N (NO3-)'] = TOTAL_NITROGEN * (NO3_RATIO / (NO3_RATIO + NH4_RATIO))
964
+ calculator.target_profile['N (NH4+)'] = TOTAL_NITROGEN * (NH4_RATIO / (NO3_RATIO + NH4_RATIO))
965
 
966
+ # 8. Выполняем расчет
967
  results = calculator.calculate()
968
 
969
+ # 9. Формируем ответ
970
  response = {
971
+ 'actual_profile': {k: round(v, 2) for k, v in calculator.actual_profile.items()},
972
  'fertilizers': results,
973
  'total_ec': calculator.calculate_ec(),
974
+ 'total_ppm': round(sum(calculator.actual_profile.values()), 2),
975
+ 'nitrogen_ratios': {
976
+ 'NO3_RATIO': NO3_RATIO,
977
+ 'NH4_RATIO': NH4_RATIO,
978
+ 'TOTAL_NITROGEN': TOTAL_NITROGEN
979
+ }
980
  }
981
 
982
  return jsonify(response)
983
 
984
  except Exception as e:
985
+ return jsonify({'error': f'Ошибка при расчете: {str(e)}'}), 500
 
986
 
987
 
988