DmitrMakeev commited on
Commit
84eac94
·
verified ·
1 Parent(s): 664a3d1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -115
app.py CHANGED
@@ -979,121 +979,6 @@ if __name__ == "__main__":
979
 
980
 
981
 
982
- class WebNutrientCalculator:
983
- def __init__(self, volume_liters=1.0):
984
- self.volume = volume_liters
985
- self.results = {}
986
- self.target_profile = {}
987
- self.actual_profile = {}
988
- self.fertilizers = {}
989
- self.total_ec = 0.0
990
-
991
- def web_calculate(self, profile_settings, fertilizer_constants):
992
- """Основная функция расчета для веб-интерфейса"""
993
- try:
994
- # 1. Устанавливаем целевой профиль из параметров
995
- self.target_profile = {
996
- 'P': float(profile_settings['P']),
997
- 'K': float(profile_settings['K']),
998
- 'Mg': float(profile_settings['Mg']),
999
- 'Ca': float(profile_settings['Ca']),
1000
- 'S': float(profile_settings['S']),
1001
- 'N (NO3-)': float(profile_settings['N (NO3-)']),
1002
- 'N (NH4+)': float(profile_settings['N (NH4+)'])
1003
- }
1004
-
1005
- # 2. Устанавливаем параметры удобрений
1006
- self.fertilizers = fertilizer_constants
1007
-
1008
- # 3. Выполняем расчет по новой логике
1009
- self._web_apply("Сульфат магния", "Mg", self.target_profile['Mg'])
1010
- self._web_apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
1011
- self._web_apply("Монофосфат калия", "P", self.target_profile['P'])
1012
- self._web_apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
1013
-
1014
- # 4. Коррекция NO3
1015
- current_no3 = self.actual_profile.get('N (NO3-)', 0)
1016
- no3_needed = self.target_profile['N (NO3-)'] - current_no3
1017
- if no3_needed > 0.1:
1018
- self._web_apply("Калий азотнокислый", "N (NO3-)", no3_needed)
1019
-
1020
- # 5. Коррекция K и S
1021
- self._web_apply_k_sulfate()
1022
-
1023
- # 6. Финалный расчет EC
1024
- self.total_ec = self._web_calculate_ec()
1025
-
1026
- return self._web_get_results()
1027
-
1028
- except Exception as e:
1029
- print(f"WebCalculator error: {str(e)}")
1030
- raise
1031
-
1032
- def _web_apply(self, fert_name, main_element, required_ppm):
1033
- """Аналог оригинального _apply для веб-версии"""
1034
- if required_ppm <= 0:
1035
- return
1036
-
1037
- content = self.fertilizers[fert_name][main_element]
1038
- grams = (required_ppm * self.volume) / (content * 1000)
1039
-
1040
- if fert_name not in self.results:
1041
- self.results[fert_name] = {
1042
- 'grams': 0.0,
1043
- 'adds': {}
1044
- }
1045
-
1046
- self.results[fert_name]['grams'] += grams
1047
-
1048
- # Расчет вносимых элементов
1049
- for element, percent in self.fertilizers[fert_name].items():
1050
- added_ppm = (grams * percent * 1000) / self.volume
1051
- self.results[fert_name]['adds'][element] = added_ppm
1052
- self.actual_profile[element] = self.actual_profile.get(element, 0) + added_ppm
1053
-
1054
- def _web_apply_k_sulfate(self):
1055
- """Аналог оригинального _apply_k_sulfate"""
1056
- fert = "Калий сернокислый"
1057
- k_def = self.target_profile['K'] - self.actual_profile.get('K', 0)
1058
- s_def = self.target_profile['S'] - self.actual_profile.get('S', 0)
1059
-
1060
- if s_def > 0.1:
1061
- self._web_apply(fert, "S", s_def)
1062
-
1063
- def _web_calculate_ec(self):
1064
- """Упрощенный расчет EC для веб-версии"""
1065
- ec_coefficients = {
1066
- 'P': 0.0012, 'K': 0.0018, 'Mg': 0.0015,
1067
- 'Ca': 0.0016, 'S': 0.0014,
1068
- 'N (NO3-)': 0.0017, 'N (NH4+)': 0.0019
1069
- }
1070
-
1071
- total_ec = 0.0
1072
- for element, ppm in self.actual_profile.items():
1073
- total_ec += ppm * ec_coefficients.get(element, 0.0015)
1074
-
1075
- return round(total_ec, 2)
1076
-
1077
- def _web_get_results(self):
1078
- """Форматирование результатов для веб"""
1079
- return {
1080
- 'fertilizers': [
1081
- {
1082
- 'name': name,
1083
- 'grams': round(data['grams'], 3),
1084
- 'adds': {k: round(v, 2) for k, v in data['adds'].items()}
1085
- }
1086
- for name, data in self.results.items()
1087
- ],
1088
- 'profile': [
1089
- {'element': k, 'ppm': round(v, 2)}
1090
- for k, v in self.actual_profile.items()
1091
- ],
1092
- 'ec': self.total_ec,
1093
- 'volume': self.volume
1094
- }
1095
- }), 500
1096
-
1097
 
1098
  @app.route('/calculation', methods=['POST'])
1099
  def handle_calculation():
 
979
 
980
 
981
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
982
 
983
  @app.route('/calculation', methods=['POST'])
984
  def handle_calculation():