DmitrMakeev commited on
Commit
f57200f
·
verified ·
1 Parent(s): 01ed6ad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +8 -16
app.py CHANGED
@@ -692,14 +692,13 @@ class NutrientCalculator:
692
  self.results = defaultdict(lambda: {'grams': 0.0, 'adds': defaultdict(float)})
693
  self.target = {
694
  'P': 0, 'K': 0, 'Mg': 0, 'Ca': 0, 'S': 0,
695
- 'NO3': 0, 'NH4': 0 # Упрощенные ключи
696
  }
697
  self.actual = defaultdict(float)
698
  self.fertilizers = {}
699
  self.total_ec = 0.0
700
 
701
  def set_target_profile(self, profile_data):
702
- """Устанавливаем целевые значения с преобразованием ключей"""
703
  self.target.update({
704
  'P': float(profile_data.get('P', 0)),
705
  'K': float(profile_data.get('K', 0)),
@@ -711,7 +710,6 @@ class NutrientCalculator:
711
  })
712
 
713
  def set_fertilizers(self, fertilizers_data):
714
- """Преобразуем входные данные в единый формат"""
715
  self.fertilizers = {
716
  "Сульфат магния": {
717
  "Mg": float(fertilizers_data["Сульфат магния"]["Mg"]),
@@ -740,13 +738,12 @@ class NutrientCalculator:
740
  }
741
 
742
  def calculate(self):
743
- """Новая логика расчёта с приоритетом по азоту"""
744
  try:
745
- # 1. Вносим обязательные компоненты
746
  self._apply_fertilizer("Сульфат магния", "Mg")
747
  self._apply_fertilizer("Монофосфат калия", "P")
748
 
749
- # 2. Контроль азота
750
  self._apply_fertilizer("Аммоний азотнокислый", "NH4")
751
 
752
  # 3. Кальций с контролем NO3
@@ -754,7 +751,7 @@ class NutrientCalculator:
754
  if remaining_no3 > 0.1:
755
  self._apply_fertilizer("Кальциевая селитра", "Ca")
756
 
757
- # 4. Калий с минимальным NO3
758
  k_deficit = self.target['K'] - self.actual['K']
759
  if k_deficit > 0.1:
760
  if self.actual['NO3'] < self.target['NO3']:
@@ -773,7 +770,6 @@ class NutrientCalculator:
773
  return False
774
 
775
  def _apply_fertilizer(self, name, main_element, required_ppm=None):
776
- """Умное внесение удобрений с контролем NO3"""
777
  if name not in self.fertilizers:
778
  return
779
 
@@ -787,18 +783,18 @@ class NutrientCalculator:
787
  if content <= 0:
788
  return
789
 
790
- # Корректировка для NO3
791
  if 'NO3' in self.fertilizers[name]:
792
  no3_limit = max(self.target['NO3'] - self.actual['NO3'], 0)
793
  if no3_limit <= 0:
794
- return # Превышение NO3
795
  max_grams = (no3_limit * self.volume) / (self.fertilizers[name]['NO3'] * 1000)
796
  required_grams = (required_ppm * self.volume) / (content * 1000)
797
  grams = min(required_grams, max_grams)
798
  else:
799
  grams = (required_ppm * self.volume) / (content * 1000)
800
 
801
- # Обновляем профиль
802
  self.results[name]['grams'] += grams
803
  for element, percent in self.fertilizers[name].items():
804
  added_ppm = (grams * percent * 1000) / self.volume
@@ -817,7 +813,6 @@ class NutrientCalculator:
817
  )
818
 
819
  def get_results(self):
820
- """Форматируем выходные данные"""
821
  return {
822
  'fertilizers': [
823
  {
@@ -847,7 +842,7 @@ class NutrientCalculator:
847
  }
848
  }
849
 
850
- @app.route('/calculate', methods=['POST'])
851
  def handle_calculation():
852
  try:
853
  data = request.json
@@ -892,8 +887,5 @@ def handle_calculation():
892
 
893
 
894
 
895
-
896
-
897
-
898
  if __name__ == '__main__':
899
  app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
 
692
  self.results = defaultdict(lambda: {'grams': 0.0, 'adds': defaultdict(float)})
693
  self.target = {
694
  'P': 0, 'K': 0, 'Mg': 0, 'Ca': 0, 'S': 0,
695
+ 'NO3': 0, 'NH4': 0
696
  }
697
  self.actual = defaultdict(float)
698
  self.fertilizers = {}
699
  self.total_ec = 0.0
700
 
701
  def set_target_profile(self, profile_data):
 
702
  self.target.update({
703
  'P': float(profile_data.get('P', 0)),
704
  'K': float(profile_data.get('K', 0)),
 
710
  })
711
 
712
  def set_fertilizers(self, fertilizers_data):
 
713
  self.fertilizers = {
714
  "Сульфат магния": {
715
  "Mg": float(fertilizers_data["Сульфат магния"]["Mg"]),
 
738
  }
739
 
740
  def calculate(self):
 
741
  try:
742
+ # 1. Обязательные компоненты
743
  self._apply_fertilizer("Сульфат магния", "Mg")
744
  self._apply_fertilizer("Монофосфат калия", "P")
745
 
746
+ # 2. Азотный баланс
747
  self._apply_fertilizer("Аммоний азотнокислый", "NH4")
748
 
749
  # 3. Кальций с контролем NO3
 
751
  if remaining_no3 > 0.1:
752
  self._apply_fertilizer("Кальциевая селитра", "Ca")
753
 
754
+ # 4. Калий
755
  k_deficit = self.target['K'] - self.actual['K']
756
  if k_deficit > 0.1:
757
  if self.actual['NO3'] < self.target['NO3']:
 
770
  return False
771
 
772
  def _apply_fertilizer(self, name, main_element, required_ppm=None):
 
773
  if name not in self.fertilizers:
774
  return
775
 
 
783
  if content <= 0:
784
  return
785
 
786
+ # Контроль NO3
787
  if 'NO3' in self.fertilizers[name]:
788
  no3_limit = max(self.target['NO3'] - self.actual['NO3'], 0)
789
  if no3_limit <= 0:
790
+ return
791
  max_grams = (no3_limit * self.volume) / (self.fertilizers[name]['NO3'] * 1000)
792
  required_grams = (required_ppm * self.volume) / (content * 1000)
793
  grams = min(required_grams, max_grams)
794
  else:
795
  grams = (required_ppm * self.volume) / (content * 1000)
796
 
797
+ # Обновление данных
798
  self.results[name]['grams'] += grams
799
  for element, percent in self.fertilizers[name].items():
800
  added_ppm = (grams * percent * 1000) / self.volume
 
813
  )
814
 
815
  def get_results(self):
 
816
  return {
817
  'fertilizers': [
818
  {
 
842
  }
843
  }
844
 
845
+ @app.route('/calculation', methods=['POST']) # Точный эндпоинт из ошибки
846
  def handle_calculation():
847
  try:
848
  data = request.json
 
887
 
888
 
889
 
 
 
 
890
  if __name__ == '__main__':
891
  app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))