DmitrMakeev commited on
Commit
244354e
·
verified ·
1 Parent(s): e5a3f9e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -47
app.py CHANGED
@@ -704,7 +704,7 @@ def nutri_call():
704
 
705
  from tabulate import tabulate
706
 
707
- # Входные данные
708
  INPUT_DATA = {
709
  "fertilizerConstants": {
710
  "Кальциевая селитра": {"N (NO3-)": 0.11863, "Ca": 0.16972},
@@ -713,11 +713,11 @@ INPUT_DATA = {
713
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
714
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
715
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
716
- "Кальций хлорид": {"Ca": 0.272} # Хлор не учитываем
717
  },
718
  "profileSettings": {
719
- "P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
720
- "NO3_RAT": 11.5, "TOTAL_NITROG": 138.57, "liters": 100
721
  }
722
  }
723
 
@@ -734,12 +734,13 @@ class NutrientCalculator:
734
  'Mg': self.profile["Mg"],
735
  'Ca': self.profile["Ca"],
736
  'S': self.profile["S"],
 
737
  'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
738
  'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
739
  }
740
 
741
  self.actual = {k: 0.0 for k in self.target}
742
- self.results = {}
743
 
744
  def calculate(self):
745
  # 1. Вносим аммонийный азот
@@ -768,9 +769,6 @@ class NutrientCalculator:
768
  content = self.fertilizers[name][element]
769
  grams = (target_ppm * self.volume) / (content * 1000)
770
 
771
- if name not in self.results:
772
- self.results[name] = {'граммы': 0.0}
773
-
774
  self.results[name]['граммы'] += grams
775
 
776
  for el, val in self.fertilizers[name].items():
@@ -815,44 +813,6 @@ class NutrientCalculator:
815
  'total_ppm': round(sum(self.actual.values()), 3)
816
  }
817
 
818
- def generate_report(self, results):
819
- fert_table = []
820
- for name, data in results['fertilizers'].items():
821
- fert_table.append([name, f"{data} г"])
822
-
823
- element_table = []
824
- for el in sorted(self.target.keys()):
825
- element_table.append([
826
- el,
827
- f"{self.target[el]} ppm",
828
- f"{results['actual_profile'][el]} ppm",
829
- f"{results['actual_profile'][el] - self.target[el]:+.2f} ppm"
830
- ])
831
-
832
- report = "РЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:\n"
833
- report += tabulate(fert_table, headers=["Удобрение", "Количество"], tablefmt="grid")
834
-
835
- report += "\n\nБАЛАНС ЭЛЕМЕНТОВ:\n"
836
- report += tabulate(element_table,
837
- headers=["Элемент", "Цель", "Факт", "Отклонение"],
838
- tablefmt="grid")
839
-
840
- report += f"\n\nОбщая концентрация: {results['total_ppm']} ppm"
841
-
842
- if results['deficits']:
843
- report += "\n\nВНИМАНИЕ: Обнаружены небольшие отклонения:"
844
- for el, diff in results['deficits'].items():
845
- report += f"\n- {el}: не хватает {abs(diff)} ppm"
846
-
847
- return report
848
-
849
- # Запуск расчета
850
- calculator = NutrientCalculator(INPUT_DATA)
851
- results = calculator.calculate()
852
- print(calculator.generate_report(results))
853
-
854
-
855
-
856
  @app.route('/calculation', methods=['POST'])
857
  def handle_calculation():
858
  try:
@@ -920,7 +880,6 @@ def handle_calculation():
920
 
921
 
922
 
923
-
924
 
925
 
926
  if __name__ == '__main__':
 
704
 
705
  from tabulate import tabulate
706
 
707
+ # Входные данные (пример)
708
  INPUT_DATA = {
709
  "fertilizerConstants": {
710
  "Кальциевая селитра": {"N (NO3-)": 0.11863, "Ca": 0.16972},
 
713
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
714
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
715
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
716
+ "Кальций хлорид": {"Ca": 0.272, "Cl": 0.483} # Хлор теперь учитывается
717
  },
718
  "profileSettings": {
719
+ "P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445, "Cl": 0, # Добавлен Cl
720
+ "NO3_RAT": 1.5, "TOTAL_NITROG": 138.57, "liters": 100
721
  }
722
  }
723
 
 
734
  'Mg': self.profile["Mg"],
735
  'Ca': self.profile["Ca"],
736
  'S': self.profile["S"],
737
+ 'Cl': self.profile.get("Cl", 0), # Добавлен Cl
738
  'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
739
  'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
740
  }
741
 
742
  self.actual = {k: 0.0 for k in self.target}
743
+ self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers} # Инициализация всех удобрений
744
 
745
  def calculate(self):
746
  # 1. Вносим аммонийный азот
 
769
  content = self.fertilizers[name][element]
770
  grams = (target_ppm * self.volume) / (content * 1000)
771
 
 
 
 
772
  self.results[name]['граммы'] += grams
773
 
774
  for el, val in self.fertilizers[name].items():
 
813
  'total_ppm': round(sum(self.actual.values()), 3)
814
  }
815
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
816
  @app.route('/calculation', methods=['POST'])
817
  def handle_calculation():
818
  try:
 
880
 
881
 
882
 
 
883
 
884
 
885
  if __name__ == '__main__':