budget.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """
  2. 预算金额字段检查
  3. """
  4. class BudgetChecker(object):
  5. """
  6. 预算字段检查
  7. """
  8. def __init__(self):
  9. self.errors_tables = {
  10. "0101": {
  11. "name": "预算/中标金额不在:[0.7,1.3]",
  12. "parent_name": "金额错误",
  13. "parent_code": "01",
  14. "checkFn": self.check0101
  15. },
  16. "0102": {
  17. "name": "过大过小,不在[100,10亿]",
  18. "parent_name": "金额错误",
  19. "parent_code": "01",
  20. "checkFn": self.check0102
  21. },
  22. "0103": {
  23. "name": "预算小数点位数超过4位",
  24. "parent_name": "金额错误",
  25. "parent_code": "01",
  26. "checkFn": self.check0103
  27. },
  28. }
  29. @staticmethod
  30. def check0101(budget: float, bidamount: float) -> bool:
  31. """
  32. 预算和中标金额的比例
  33. :param budget:
  34. :param amount:
  35. :return:返回true 代表异常
  36. """
  37. if budget and bidamount:
  38. if 0.7 < budget / bidamount < 1.3:
  39. return False
  40. else:
  41. return True
  42. else:
  43. # 两者中有一方为空不判断
  44. return False
  45. @staticmethod
  46. def check0102(budget: float) -> bool:
  47. """
  48. 中标金额过大过小[100,10亿]
  49. :param price:
  50. :return: 返回true 代表异常
  51. """
  52. if 100 < budget < 1000000000:
  53. return False
  54. return True
  55. @staticmethod
  56. def check0103(budget: float) -> bool :
  57. """
  58. 预算小数点位数超过4位,视为异常
  59. :param price:
  60. :return: 返回true 代表异常
  61. """
  62. # 将数字转换为字符串
  63. number_str = str(budget)
  64. # 检查是否有小数点
  65. if '.' in number_str:
  66. # 分割整数部分和小数部分
  67. integer_part, decimal_part = number_str.split('.')
  68. # 返回小数部分的长度
  69. length= len(decimal_part)
  70. else:
  71. length = 0
  72. if length > 4 :
  73. return True