module_online_data.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. import requests
  2. import settings
  3. import json
  4. import numpy as np
  5. class JsonEncoder(json.JSONEncoder):
  6. """Convert numpy classes to JSON serializable objects."""
  7. def default(self, obj):
  8. if isinstance(obj, (np.integer, np.floating, np.bool_)):
  9. return obj.item()
  10. elif isinstance(obj, np.ndarray):
  11. return obj.tolist()
  12. else:
  13. return super(JsonEncoder, self).default(obj)
  14. class OnlineDataRequest(object):
  15. def __init__(self,token):
  16. self.s = requests.session()
  17. self.token = token
  18. self.post_headers = {
  19. "Authorization": token,
  20. # "Origin": settings.Headers["Origin"],
  21. # "Host": settings.Headers["Host"],
  22. "Content-Length": "0",
  23. "Content-Type": "application/json",
  24. "Accept": "application/json",
  25. }
  26. print("28 Authorization:", self.post_headers["Authorization"])
  27. def refresh_headers(self, token):
  28. self.post_headers = {
  29. "Authorization": token,
  30. # "Origin": settings.Headers["Origin"],
  31. # "Host": settings.Headers["Host"],
  32. "Content-Length": "0",
  33. "Content-Type": "application/json",
  34. "Accept": "application/json",
  35. }
  36. def auth_user(self):
  37. # 用户登录
  38. url = "{domain}/api/auth/user".format(
  39. domain=settings.DOMAIN
  40. )
  41. s = requests.session()
  42. _s = s.get(url=url, headers=settings.Headers)
  43. response_data = _s.json()
  44. return response_data
  45. def logout(self):
  46. url = "{domain}/api/auth/logout".format(
  47. domain=settings.DOMAIN
  48. )
  49. s = requests.session()
  50. _s = s.post(url=url, headers=settings.Headers)
  51. def get_change_bar_code(self, code):
  52. url = "{domain}/api/hct/open/sting_search_goods?string={code}".format(domain=settings.DOMAIN, code=code)
  53. try:
  54. s = requests.get(url)
  55. goods_art_no = s.json()["data"]["goods_art_no"]
  56. return goods_art_no
  57. except BaseException as e:
  58. print(e)
  59. return
  60. def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None,token=None):
  61. # 获取商品基础信息,入参为商品的编号
  62. url = "{domain}/api/backend/produce/goods/info".format(
  63. domain=settings.DOMAIN
  64. )
  65. print("执行 get_goods_art_no_info ", url)
  66. if numbers_list:
  67. data = {
  68. 'numbers': numbers_list
  69. }
  70. print("请求编码:", numbers_list)
  71. else:
  72. data = {
  73. 'goods_art_nos': goods_art_list
  74. }
  75. print("请求货号:", goods_art_list)
  76. print("请求货号=====>", self.token)
  77. print("执行 get_goods_art_no_info----------------", data)
  78. post_headers = {
  79. "Authorization": token,
  80. # "Origin": settings.Headers["Origin"],
  81. # "Host": settings.Headers["Host"],
  82. "Content-Length": "",
  83. "Content-Type": "application/json",
  84. "Accept": "application/json",
  85. }
  86. data = json.dumps(data)
  87. post_headers["Content-Length"] = str(len(data))
  88. _s = self.s.post(url=url, data=data, headers=post_headers)
  89. # _s = self.s.get(url=url, params=params, headers=settings.Headers)
  90. response_data = _s.json()
  91. # print(response_data)
  92. # print("\n")
  93. goods_number_data = {}
  94. # ["", "", "", "", "", "", "", "", "", "", "", ]
  95. if "data" not in response_data:
  96. return {}
  97. for data in response_data["data"]:
  98. if numbers_list:
  99. number = data["number"]
  100. else:
  101. number = data["goods_art_no"].upper()
  102. goods_number_data[number] = {}
  103. goods_number_data[number]["商品面料"] = data["fabric"]
  104. goods_number_data[number]["商品内里"] = data["lining"]
  105. goods_number_data[number]["商品鞋底"] = data["sole"]
  106. goods_number_data[number]["后帮高"] = data["back_height"]
  107. goods_number_data[number]["前掌宽"] = data["forefoot_width"]
  108. goods_number_data[number]["鞋跟高"] = data["heel_height"]
  109. goods_number_data[number]["FAB介绍"] = data["fab_info"]
  110. goods_number_data[number]["编号"] = data["number"]
  111. goods_number_data[number]["商品货号"] = data["goods_art_no"].upper()
  112. goods_number_data[number]["款号"] = data["goods_number"].upper()
  113. goods_number_data[number]["颜色名称"] = data["color"]
  114. goods_number_data[number]["所属企划"] = data["projects"][0]
  115. goods_number_data[number]["设计方名称"] = data["purchasing_unit"]
  116. goods_number_data[number]["供应商"] = data["supplier_name"]
  117. goods_number_data[number]["供应商编码"] = data["supplier_code"].lstrip('0')
  118. goods_number_data[number]["供应商货号"] = data["supplier_goods_artno"]
  119. goods_number_data[number]["销售工厂"] = data["sales_factory_name"]
  120. goods_number_data[number]["销售组织"] = data["man_org_name"]
  121. goods_number_data[number]["是否SAP"] = data["source"]
  122. goods_number_data[number]["OEM报价"] = data["oem_price"]
  123. goods_number_data[number]["出厂价"] = data["ex_factory_price"]
  124. goods_number_data[number]["首单货期"] = data["earliest_delivery_date"]
  125. goods_number_data[number]["包装"] = data["package_specification"]
  126. goods_number_data[number]["创建日期"] = data["created_at"]
  127. goods_number_data[number]["货号图"] = data["image"]
  128. return goods_number_data
  129. def get_on_goods_all_art(self, number):
  130. # 获取商品基础信息,入参为商品的编号
  131. url = "{domain}/api/backend/produce/goods/query/numbers?number={number}".format(
  132. domain=settings.DOMAIN,
  133. number=number
  134. )
  135. _s = self.s.get(url=url, headers=self.post_headers)
  136. response_data = _s.json()
  137. print(number, response_data)
  138. """
  139. 14250230 {'data': {'goods_number': 'AC5200117', 'brother_goods_arts': [{'number': '14250232', 'goods_art_no': 'AC52001173', 'color': '杏色'}, {'number': '14250231', 'goods_art_no': 'AC52001172', 'color': '灰色'}, {'number': '14250230', 'goods_art_no': 'AC52001171', 'color': '黑色'}]}, 'code': 0, 'message': 'success'}
  140. """
  141. return response_data["data"]["goods_number"], response_data["data"]["brother_goods_arts"], \
  142. response_data["data"]["goods_art_no"]
  143. def get_views(self, image_url):
  144. url = "http://{}/shoes_category".format(settings.VIEW_DEAL_DOMAIN)
  145. data = {"train_path": "./datasets/Shoes_Dataset/Train/angle",
  146. "model_filename": "./models/0320/output0320.pth",
  147. "validate_path": image_url, }
  148. _s = requests.post(url=url, data=json.dumps(data), )
  149. response_data = _s.json()
  150. return response_data["classify_result"]
  151. def uploadImage(self, local_path: str) -> str:
  152. post_headers = {"Authorization": self.token}
  153. url = settings.DOMAIN + '/api/upload'
  154. resultData = self.s.post(url, files={'file': open(local_path, 'rb')}, headers=post_headers).json()
  155. return resultData['data']['url']
  156. def get_current_menu(self):
  157. def get_menu(_menu_dict, _data):
  158. for menu in _data:
  159. _menu_dict[menu["key"]] = {}
  160. for mods in menu["mods_arr"]:
  161. _menu_dict[menu["key"]][mods["key"]] = mods["name"]
  162. if "_child" in menu:
  163. get_menu(_menu_dict, menu["_child"])
  164. return _menu_dict
  165. url = "{domain}/api/backend/basic/get_current_menu".format(
  166. domain=settings.DOMAIN,
  167. )
  168. _s = self.s.get(url=url, headers=settings.Headers)
  169. response_data = _s.json()
  170. try:
  171. menu_data = response_data["data"]["pc_menu"]
  172. menu_dict = {}
  173. menu_dict = get_menu(menu_dict, menu_data)
  174. except:
  175. menu_dict = {}
  176. # print(json.dumps(menu_dict,ensure_ascii=False))
  177. # raise 1
  178. return menu_dict
  179. # 获取所有资源的配置
  180. def get_resource_config(self):
  181. url = "{domain}/api/openai/query_client_addons".format(domain=settings.DOMAIN)
  182. _s = self.s.get(url=url, headers=self.post_headers, params={"type": "client_camera"})
  183. response_data = _s.json()
  184. return response_data
  185. # 拍照日志上报
  186. def add_auto_photo_logs(self, data):
  187. url = "{domain}/api/openai/add_auto_photo_logs".format(domain=settings.DOMAIN)
  188. post_data = {"goods_no": data["goods_art_no"],
  189. "take_photo_created_at": data["take_photo_created_at"],
  190. "photo_created_at": data["photo_create_time"],
  191. "image_dispose_mode": data["image_deal_mode"],
  192. "photo_serial_number": data["image_index"], }
  193. post_data = json.dumps(post_data)
  194. _s = self.s.post(url=url, headers=self.post_headers, data=post_data)
  195. response_data = _s.json()
  196. if settings.IS_TEST:
  197. print("209-----拍照日志上报 add_auto_photo_logs")
  198. print(response_data)
  199. return response_data
  200. def upload_pic_list_data(self, data):
  201. url = "{domain}/api/backend/goods/save/images".format(
  202. domain=settings.DOMAIN
  203. )
  204. data = json.dumps(data)
  205. self.post_headers["Content-Length"] = str(len(data))
  206. _s = self.s.post(url=url, data=data, headers=self.post_headers)
  207. response_data = _s.json()
  208. try:
  209. if response_data["code"] == 0 and response_data["message"] == "success":
  210. return True
  211. else:
  212. print(data)
  213. print(response_data)
  214. return False
  215. except BaseException as e:
  216. print(data)
  217. print(e)
  218. print(response_data)
  219. return False
  220. def upload_pic(self, goods_data):
  221. # 检查货号图是否存在
  222. url = "{domain}/api/backend/upload".format(
  223. domain=settings.DOMAIN
  224. )
  225. # print(url)
  226. headers = {'Authorization': settings.Headers["Authorization"],
  227. 'User-Agent': settings.Headers["User-Agent"],
  228. 'Origin': settings.Headers["Origin"],
  229. 'Host': settings.Headers["Host"], }
  230. files = [
  231. ('file',
  232. (goods_data["file_path"], goods_data["image_io"], 'image/{}'.format(goods_data["e"])))
  233. ]
  234. _s = requests.post(url=url, headers=headers, files=files)
  235. response_data = _s.json()
  236. return response_data["data"]["url"]
  237. # 查询是否已有详情图
  238. def check_detail_image(self, goods_art_no,token):
  239. url = "{domain}/api/backend/goods/check_detail_image?number={number}".format(domain=settings.DOMAIN,
  240. number=goods_art_no)
  241. _s = self.s.get(url=url, headers=self.post_headers)
  242. response_data = _s.json()
  243. # print(response_data)
  244. return response_data["data"]["hasDetailImage"]
  245. # 调用API识别是否是拖鞋
  246. def yolo_shoes_category(self, image_url):
  247. url = "{domain}/api/ai_image/main/yolo_shoes_category".format(domain=settings.DOMAIN)
  248. post_data = {"image_url": image_url,
  249. }
  250. post_data = json.dumps(post_data)
  251. _s = self.s.post(url=url, headers=self.post_headers, data=post_data)
  252. response_data = _s.json()
  253. if settings.IS_TEST:
  254. print("278-----yolo_shoes_category")
  255. print(response_data)
  256. r_data = None
  257. try:
  258. r_data = response_data["data"]["category"]
  259. except BaseException as e:
  260. print("285", e)
  261. return r_data
  262. # 图片上传by IO
  263. def upload_image_by_io(self, image_io) -> str:
  264. post_headers = {"Authorization": settings.Authorization}
  265. url = settings.DOMAIN + '/api/upload'
  266. resultData = self.s.post(url, files={'file': image_io}, headers=post_headers).json()
  267. return resultData['data']['url']
  268. class GetOnlineDataHLM(OnlineDataRequest):
  269. def __init__(self,token):
  270. super().__init__(token)
  271. self.token = token
  272. def upload_pic(self, goods_data,token):
  273. # 检查货号图是否存在
  274. url = "{domain}/api/backend/upload".format(
  275. domain=settings.DOMAIN
  276. )
  277. # print(url)
  278. headers = {'Authorization': self.token,
  279. # 'User-Agent': settings.Headers["User-Agent"],
  280. # 'Origin': settings.Headers["Origin"],
  281. # 'Host': settings.Headers["Host"],
  282. }
  283. files = [
  284. ('file',
  285. (goods_data["file_path"], goods_data["image_io"], 'image/{}'.format(goods_data["e"])))
  286. ]
  287. _s = requests.post(url=url, headers=headers, files=files)
  288. response_data = _s.json()
  289. return response_data["data"]["url"]
  290. def upload_pic_list_data(self, data,token):
  291. url = "{domain}/api/backend/goods/save/images".format(
  292. domain=settings.DOMAIN
  293. )
  294. data = json.dumps(data)
  295. self.post_headers["Content-Length"] = str(len(data))
  296. _s = self.s.post(url=url, data=data, headers=self.post_headers)
  297. response_data = _s.json()
  298. try:
  299. if response_data["code"] == 0 and response_data["message"] == "success":
  300. return True
  301. else:
  302. print(response_data)
  303. return False
  304. except BaseException as e:
  305. print(e)
  306. print(response_data)
  307. return False
  308. def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None,token=None):
  309. # 获取商品基础信息,入参为商品的编号
  310. url = "{domain}/api/backend/goods_client/goods_query".format(
  311. domain=settings.DOMAIN
  312. )
  313. data = {
  314. 'goods_art_list': goods_art_list
  315. }
  316. print("url:", url)
  317. print("请求货号:", goods_art_list)
  318. post_headers = {
  319. "Authorization": token,
  320. # "Origin": settings.Headers["Origin"],
  321. # "Host": settings.Headers["Host"],
  322. "Content-Length": "",
  323. "Content-Type": "application/json",
  324. "Accept": "application/json",
  325. }
  326. data = json.dumps(data)
  327. print(post_headers)
  328. print(data)
  329. # post_headers["Content-Length"] = str(len(data))
  330. _s = self.s.post(url=url, data=data, headers=post_headers)
  331. # _s = self.s.get(url=url, params=params, headers=settings.Headers)
  332. response_data = _s.json()
  333. print(response_data)
  334. print("\n")
  335. goods_number_data = {}
  336. # ["", "", "", "", "", "", "", "", "", "", "", ]
  337. if "data" not in response_data:
  338. return {}
  339. for data in response_data["data"]:
  340. goods_number_data[data["goods_art_no"]] = {}
  341. goods_number_data[data["goods_art_no"]]["商品货号"] = data["goods_art_no"].upper()
  342. goods_number_data[data["goods_art_no"]]["款号"] = data["goods_number"].upper()
  343. goods_number_data[data["goods_art_no"]]["商品面料"] = data["fabric"]
  344. goods_number_data[data["goods_art_no"]]["商品内里"] = data["lining"]
  345. goods_number_data[data["goods_art_no"]]["商品鞋底"] = data["sole"]
  346. goods_number_data[data["goods_art_no"]]["鞋垫"] = data["insole"]
  347. goods_number_data[data["goods_art_no"]]["颜色名称"] = data["color"]
  348. return goods_number_data
  349. def uploadImage(self, local_path: str) -> str:
  350. post_headers = {"Authorization": settings.Authorization}
  351. url = settings.DOMAIN + '/api/upload'
  352. resultData = self.s.post(url, files={'file': open(local_path, 'rb')}, headers=post_headers).json()
  353. return resultData['data']['url']
  354. # ============pixian抠图处理==========================
  355. def dispose_point(self, _type):
  356. # 扣分 sub;add为增加分数,每次操作一分
  357. url = "{domain}/api/ai_image/client/dispose_point".format(
  358. domain=settings.DOMAIN)
  359. data = {"type": _type}
  360. _s = self.s.post(url=url, headers=self.post_headers, data=json.dumps(data), timeout=10)
  361. response_data = _s.json()
  362. return response_data
  363. def send_message(self, text):
  364. # 发送钉钉消息
  365. url = "{domain}/api/ai_image/client/send_message".format(
  366. domain=settings.DOMAIN)
  367. data = {"message": text}
  368. _s = self.s.post(url=url, headers=self.post_headers, data=json.dumps(data), timeout=10)
  369. response_data = _s.json()
  370. return response_data
  371. def get_cutout_image_times(self):
  372. # 获取抠图剩余次数
  373. url = "{domain}/api/ai_image/client/search_company_balance".format(
  374. domain=settings.DOMAIN)
  375. _s = self.s.post(url=url, headers=self.post_headers, timeout=10)
  376. response_data = _s.json()
  377. if "data" not in response_data:
  378. return False
  379. else:
  380. return response_data["data"]
  381. def get_key_secret(self):
  382. # 获取抠图剩余次数
  383. url = "{domain}/api/ai_image/client/get_key_serect".format(
  384. domain=settings.DOMAIN)
  385. _s = self.s.post(url=url, headers=self.post_headers, timeout=10)
  386. response_data = _s.json()
  387. return response_data["data"]