api_service.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from agent.agent import Agent
  2. from db import MongoDao
  3. import json
  4. license_dao = MongoDao("ProductStandard")
  5. class ApiService:
  6. agent = Agent()
  7. @staticmethod
  8. def keyword_judgement(url_data, basic_data):
  9. """关键词引流判断"""
  10. if url_data['title'] == None or url_data['brand_name'] == None or basic_data['brand_name'] == None:
  11. return '信息不全,无法判定'
  12. # 标题判定
  13. if basic_data['brand_name'] in url_data['title'] and url_data['brand_name'] != basic_data['brand_name']:
  14. # 当产品名称中包含与判定商标一致的品牌名称,且详情页中的品牌名称与判定的品牌名称不一致时判定为关键词引流
  15. return True
  16. elif url_data['brand_name'] == basic_data['brand_name'] or basic_data['brand_name'] not in url_data['title']:
  17. return False
  18. else:
  19. # 图像判定
  20. pass
  21. # 图像判定
  22. return "无法判定"
  23. @staticmethod
  24. def similarity_logo_judgement(url_data, basic_data):
  25. """近似商标侵权判定"""
  26. if url_data['title'] == None or url_data['brand_name'] == None or basic_data['similarity_logos'] == None or len(basic_data['similarity_logos']) == 0:
  27. return '信息不全,无法判断'
  28. for similarity_logo in basic_data['similarity_logos']:
  29. if similarity_logo in url_data['title'] or similarity_logo in url_data['brand_name']:
  30. return True
  31. # 判断基础数据中的名称是否包含在标题或者详情品牌名称中
  32. if basic_data['brand_name'] in url_data['title'] or basic_data['brand_name'] in url_data['brand_name']:
  33. return False
  34. else:
  35. return '无法判定'
  36. @staticmethod
  37. def logo_1to1_judgement(url_data, basic_data):
  38. """商标一比一侵权"""
  39. if basic_data['base_price'] == None or basic_data['price_percent'] == None or url_data['title'] == None or basic_data['product_name'] == None:
  40. return '信息不全,无法判定'
  41. # 首先计算基础价格百分比
  42. base_price = basic_data['base_price'] * basic_data['price_percent']
  43. if url_data['title'].strip() == basic_data['product_name'].strip():
  44. # 当商品名称与提供的产品名称完全一致时,进行判定
  45. if url_data['price'] < base_price:
  46. return True
  47. else:
  48. return False
  49. else:
  50. if url_data['product_images'] == None or len(url_data['product_images']) == 0 or basic_data['product_images'] == None or len(basic_data['product_images']) == 0:
  51. return '信息不全,无法判定'
  52. for image_url1 in url_data['product_images']:
  53. for image_url2 in basic_data['product_images']:
  54. similarity_product_judgement = json.loads(ApiService.agent.product_image_similarity_judgement(image_url1, image_url2))
  55. if similarity_product_judgement['is_similarity_product']:
  56. if url_data['price'] < base_price:
  57. return True
  58. else:
  59. return False
  60. return False
  61. @staticmethod
  62. def low_price_judgement(url_data, basic_data):
  63. """低价判断"""
  64. if url_data['price'] == None or basic_data['base_price'] == None:
  65. return '价格信息缺失,无法判定'
  66. if url_data['title'] == basic_data['product_name']:
  67. if url_data['price'] < basic_data['base_price']:
  68. return True
  69. else:
  70. return False
  71. else:
  72. # 进行图像判定
  73. if url_data['product_images'] == None or len(url_data['product_images']) == 0 or basic_data['product_images'] == None or len(basic_data['product_images']) == 0:
  74. return '信息不全,无法判定'
  75. for image_url1 in url_data['product_images']:
  76. for image_url2 in basic_data['product_images']:
  77. similarity_product_judgement = json.loads(ApiService.agent.product_image_similarity_judgement(image_url1, image_url2))
  78. if similarity_product_judgement['is_similarity_product']:
  79. if url_data['price'] < basic_data['base_price']:
  80. return True
  81. else:
  82. return False
  83. @staticmethod
  84. def get_license_list(brand_name):
  85. """获取品牌方授权生成的商品列表"""
  86. license_list = []
  87. records = license_dao.get_records_by_query({"BrandName": brand_name})
  88. for record in records:
  89. license_list.append(record['ProductTitle'].strip())
  90. return license_list
  91. @staticmethod
  92. def license_judgement(url_data, basic_data):
  93. """未生产产品判断"""
  94. if basic_data['brand_name'] == None:
  95. return '信息不全,无法判定'
  96. license_list = ApiService.get_license_list(basic_data['brand_name'])
  97. if len(license_list) == 0:
  98. return '授权列表空,无法判定'
  99. result = ApiService.agent.license_product_judgement(url_data['title'], license_list)
  100. return result
  101. if __name__ == '__main__':
  102. url_data = {
  103. 'title': '休闲短裤女士运动潮流系列夏季女装裤子梭织运动裤',
  104. 'brand_name': '李宁',
  105. 'product_images': [
  106. 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/0902/118/27466cf6-fb28-4580-9009-95a3763e06bf.jpg',
  107. 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/169/8ca15632-9cb9-40e7-8915-e6773e17a05e.jpg'
  108. ],
  109. 'price': 199
  110. }
  111. basic_data = {
  112. 'product_name': '休闲短裤女士运动潮流系列夏季女装裤子梭织运动裤',
  113. 'brand_name': '李宁',
  114. 'similarity_logos': ['李宇', '李柠'],
  115. 'product_images': [
  116. 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/169/8ca15632-9cb9-40e7-8915-e6773e17a05e.jpg',
  117. 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/169/8ca15632-9cb9-40e7-8915-e6773e17a05e.jpg'
  118. ],
  119. 'base_price': 200,
  120. 'price_percent': 0.9
  121. }
  122. result = ApiService.low_price_judgement(url_data, basic_data)
  123. print(result)