budget.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. "0201": {
  29. "name": "预算<0",
  30. "parent_name": "金额错误",
  31. "parent_code": "01",
  32. "checkFn": self.check0201
  33. },
  34. "0401": {
  35. "name": "预算金额 < 中标金额",
  36. "parent_name": "金额错误",
  37. "parent_code": "01",
  38. "checkFn": self.check0401
  39. }
  40. }
  41. @staticmethod
  42. def check0101(budget: float, bidamount: float) -> bool:
  43. """
  44. 预算和中标金额的比例
  45. :param budget:
  46. :param amount:
  47. :return:返回true 代表异常
  48. """
  49. if budget and bidamount:
  50. if 0.7 < budget / bidamount < 1.3:
  51. return False
  52. else:
  53. return True
  54. else:
  55. # 两者中有一方为空不判断
  56. return False
  57. @staticmethod
  58. def check0102(budget: float) -> bool:
  59. """
  60. 中标金额过大过小[100,10亿]
  61. :param price:
  62. :return: 返回true 代表异常
  63. """
  64. if budget:
  65. if 100 < budget < 1000000000:
  66. return False
  67. return True
  68. else:
  69. return False
  70. @staticmethod
  71. def check0103(budget: float) -> bool :
  72. """
  73. 预算小数点位数超过4位,视为异常
  74. :param price:
  75. :return: 返回true 代表异常
  76. """
  77. # 将数字转换为字符串
  78. number_str = str(budget)
  79. # 检查是否有小数点
  80. if '.' in number_str:
  81. # 分割整数部分和小数部分
  82. integer_part, decimal_part = number_str.split('.')
  83. # 返回小数部分的长度
  84. length= len(decimal_part)
  85. else:
  86. length = 0
  87. if length > 4 :
  88. return True
  89. @staticmethod
  90. def check0201(budget: float) -> bool :
  91. """
  92. 预算<0,视为异常
  93. :return: 返回true 代表异常
  94. """
  95. if budget < 0:
  96. return True
  97. return False
  98. @staticmethod
  99. def check0401(budget: float, bidamount: float) -> bool:
  100. """
  101. 预算金额 < 中标金额,视为异常
  102. :return: 返回true 代表异常
  103. """
  104. if budget and bidamount:
  105. if budget < bidamount:
  106. return True
  107. return False
  108. else:
  109. return False