DmitrMakeev commited on
Commit
aef6b00
·
verified ·
1 Parent(s): 867a2cd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -34
app.py CHANGED
@@ -982,50 +982,77 @@ if __name__ == "__main__":
982
  @app.route('/calculation', methods=['POST'])
983
  def handle_calculation():
984
  try:
985
- # Получаем сырые данные запроса
986
- raw_data = request.get_json()
987
 
988
- # Проверяем базовую структуру
989
- if not raw_data or 'fertilizerConstants' not in raw_data or 'profileSettings' not in raw_data:
990
- return jsonify({"error": "Invalid request structure"}), 400
991
 
992
- # Преобразуем данные клиента в серверный формат
993
- data = {
994
- 'fertilizerConstants': convert_client_data(raw_data['fertilizerConstants']),
995
- 'profileSettings': {
996
- 'P': float(raw_data['profileSettings'].get('P', 0)),
997
- 'K': float(raw_data['profileSettings'].get('K', 0)),
998
- 'Mg': float(raw_data['profileSettings'].get('Mg', 0)),
999
- 'Ca': float(raw_data['profileSettings'].get('Ca', 0)),
1000
- 'S': float(raw_data['profileSettings'].get('S', 0)),
1001
- 'N (NO3-)': float(raw_data['profileSettings'].get('NO3', 0)),
1002
- 'N (NH4+)': float(raw_data['profileSettings'].get('NH4', 0)),
1003
- 'liters': int(raw_data['profileSettings'].get('liters', 100))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1004
  }
1005
  }
1006
-
1007
- # Обновляем глобальные переменные
1008
- global NO3_RATIO, NH4_RATIO
1009
- NO3_RATIO = float(raw_data.get('NO3_RATIO', 8.25))
1010
- NH4_RATIO = float(raw_data.get('NH4_RATIO', 1.00))
1011
-
1012
- # Создаем и настраиваем калькулятор
1013
- calculator = NutrientCalculator(volume_liters=data['profileSettings']['liters'])
1014
- calculator.fertilizers = data['fertilizerConstants']
1015
- calculator.target_profile.update(data['profileSettings'])
1016
 
1017
- # Выполняем расчет
 
 
1018
  calculator.calculate()
1019
 
1020
- # Возвращаем результаты
1021
  return jsonify(calculator.get_web_results())
1022
 
1023
- except ValueError as e:
1024
- return jsonify({"error": f"Invalid numeric value: {str(e)}"}), 400
1025
- except KeyError as e:
1026
- return jsonify({"error": f"Missing required field: {str(e)}"}), 400
1027
  except Exception as e:
1028
- return jsonify({"error": f"Calculation error: {str(e)}"}), 500
 
 
 
1029
 
1030
 
1031
  if __name__ == '__main__':
 
982
  @app.route('/calculation', methods=['POST'])
983
  def handle_calculation():
984
  try:
985
+ # Получаем данные как есть, без преобразований
986
+ data = request.get_json()
987
 
988
+ # Проверяем только самое необходимое
989
+ if not data or 'fertilizerConstants' not in data or 'profileSettings' not in data:
990
+ return jsonify({"error": "Требуются fertilizerConstants и profileSettings"}), 400
991
 
992
+ # Берем глобальные переменные (они уже объявлены выше)
993
+ global NO3_RATIO, NH4_RATIO, TOTAL_NITROGEN, VOLUME_LITERS
994
+
995
+ # Обновляем глобальные переменные из запроса (если переданы)
996
+ NO3_RATIO = float(data.get('NO3_RATIO', NO3_RATIO))
997
+ NH4_RATIO = float(data.get('NH4_RATIO', NH4_RATIO))
998
+ TOTAL_NITROGEN = float(data['profileSettings'].get('N', TOTAL_NITROGEN))
999
+ VOLUME_LITERS = int(data['profileSettings'].get('liters', VOLUME_LITERS))
1000
+
1001
+ # Создаем калькулятор
1002
+ calculator = NutrientCalculator(volume_liters=VOLUME_LITERS)
1003
+
1004
+ # Обновляем профиль из полученных данных
1005
+ calculator.target_profile.update({
1006
+ 'P': float(data['profileSettings']['P']),
1007
+ 'K': float(data['profileSettings']['K']),
1008
+ 'Mg': float(data['profileSettings']['Mg']),
1009
+ 'Ca': float(data['profileSettings']['Ca']),
1010
+ 'S': float(data['profileSettings']['S']),
1011
+ 'N (NO3-)': float(data['profileSettings']['NO3']),
1012
+ 'N (NH4+)': float(data['profileSettings']['NH4'])
1013
+ })
1014
+
1015
+ # Конвертируем удобрения (используем твой формат как есть)
1016
+ converted_fertilizers = {
1017
+ "Кальциевая селитра": {
1018
+ "N (NO3-)": data['fertilizerConstants']['CaN2O6']['NO3'] / 100,
1019
+ "Ca": data['fertilizerConstants']['CaN2O6']['Ca'] / 100
1020
+ },
1021
+ "Калий азотнокислый": {
1022
+ "N (NO3-)": data['fertilizerConstants']['KNO3']['NO3'] / 100,
1023
+ "K": data['fertilizerConstants']['KNO3']['K'] / 100
1024
+ },
1025
+ "Аммоний азотнокислый": {
1026
+ "N (NO3-)": data['fertilizerConstants']['NH4NO3']['NO3'] / 100,
1027
+ "N (NH4+)": data['fertilizerConstants']['NH4NO3']['NH4'] / 100
1028
+ },
1029
+ "Сульфат магния": {
1030
+ "Mg": data['fertilizerConstants']['MgSO4']['Mg'] / 100,
1031
+ "S": data['fertilizerConstants']['MgSO4']['S'] / 100
1032
+ },
1033
+ "Монофосфат калия": {
1034
+ "P": data['fertilizerConstants']['KH2PO4']['P'] / 100,
1035
+ "K": data['fertilizerConstants']['KH2PO4']['K'] / 100
1036
+ },
1037
+ "Калий сернокислый": {
1038
+ "K": data['fertilizerConstants']['K2SO4']['K'] / 100,
1039
+ "S": data['fertilizerConstants']['K2SO4']['S'] / 100
1040
  }
1041
  }
 
 
 
 
 
 
 
 
 
 
1042
 
1043
+ calculator.fertilizers = converted_fertilizers
1044
+
1045
+ # Запускаем расчет
1046
  calculator.calculate()
1047
 
1048
+ # Возвращаем результаты в том же формате, что и раньше
1049
  return jsonify(calculator.get_web_results())
1050
 
 
 
 
 
1051
  except Exception as e:
1052
+ return jsonify({
1053
+ "error": "Ошибка расчета",
1054
+ "details": str(e)
1055
+ }), 500
1056
 
1057
 
1058
  if __name__ == '__main__':