|
@@ -91,8 +91,10 @@ def get_request_one_page(log, rating_no) -> dict:
|
|
|
"""
|
|
"""
|
|
|
获取单页数据
|
|
获取单页数据
|
|
|
:param log: logger
|
|
:param log: logger
|
|
|
- :param rating_no: 证书编号
|
|
|
|
|
- :return: dict
|
|
|
|
|
|
|
+ :param rating_no: 证书编号(即 tag_no)
|
|
|
|
|
+ :return: dict, 外层结构 {'code':..., 'msg':..., 'data':...}。
|
|
|
|
|
+ code==200 时 data 为解密后的业务字典(含 obj_order_rating_goods);
|
|
|
|
|
+ code==400 表示该评级单不存在;其他为异常。
|
|
|
"""
|
|
"""
|
|
|
sign, dt_str = make_sign()
|
|
sign, dt_str = make_sign()
|
|
|
|
|
|
|
@@ -120,11 +122,12 @@ def get_request_one_page(log, rating_no) -> dict:
|
|
|
response.raise_for_status()
|
|
response.raise_for_status()
|
|
|
result = response.json()
|
|
result = response.json()
|
|
|
# print(result)
|
|
# print(result)
|
|
|
- if result["code"] == 200 and result.get("iv"):
|
|
|
|
|
- decrypted = decrypt_response(result["data"], result["iv"])
|
|
|
|
|
- return decrypted
|
|
|
|
|
- else:
|
|
|
|
|
- return result
|
|
|
|
|
|
|
+ # 新版 webDetail:成功(code==200 且带 iv)时对 data 做 AES-CBC 解密,
|
|
|
|
|
+ # 把解密后的业务数据(含 obj_order_rating_goods)回填到 result['data'],
|
|
|
|
|
+ # code 始终保留在外层,供上层 loop_rating_no 判断状态(不存在时 code==400)。
|
|
|
|
|
+ if result.get("code") == 200 and result.get("iv"):
|
|
|
|
|
+ result["data"] = decrypt_response(result["data"], result["iv"])
|
|
|
|
|
+ return result
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_data(resp_json, sql_pool):
|
|
def parse_data(resp_json, sql_pool):
|
|
@@ -140,7 +143,9 @@ def parse_data(resp_json, sql_pool):
|
|
|
images = resp_json.get('obj_order_rating_goods', {}).get('images')
|
|
images = resp_json.get('obj_order_rating_goods', {}).get('images')
|
|
|
card_create_time = resp_json.get('obj_order_rating_goods', {}).get('create_time')
|
|
card_create_time = resp_json.get('obj_order_rating_goods', {}).get('create_time')
|
|
|
card_update_time = resp_json.get('obj_order_rating_goods', {}).get('update_time')
|
|
card_update_time = resp_json.get('obj_order_rating_goods', {}).get('update_time')
|
|
|
- score = resp_json.get('obj_order_rating_goods', {}).get('score') # 中检评分
|
|
|
|
|
|
|
+ score = resp_json.get('obj_order_rating_goods', {}).get('score') # 中检评分(总分)
|
|
|
|
|
+ # 注意:2026/09 起 webDetail 不再返回以下分项评分(四角/边缘/表面/居中/颜色/修复),
|
|
|
|
|
+ # obj_detail 仅保留 spxl/spmc/fxnf/yy/spbh,故下列字段现均为 None,入库即 NULL。
|
|
|
corners = resp_json.get('obj_order_rating_goods', {}).get('obj_detail', {}).get('corners') # 四角
|
|
corners = resp_json.get('obj_order_rating_goods', {}).get('obj_detail', {}).get('corners') # 四角
|
|
|
eoges = resp_json.get('obj_order_rating_goods', {}).get('obj_detail', {}).get('eoges') # 边缘
|
|
eoges = resp_json.get('obj_order_rating_goods', {}).get('obj_detail', {}).get('eoges') # 边缘
|
|
|
surface = resp_json.get('obj_order_rating_goods', {}).get('obj_detail', {}).get('surface') # 表面
|
|
surface = resp_json.get('obj_order_rating_goods', {}).get('obj_detail', {}).get('surface') # 表面
|
|
@@ -168,7 +173,7 @@ def parse_data(resp_json, sql_pool):
|
|
|
obj_detail_spbh)
|
|
obj_detail_spbh)
|
|
|
# print(info)
|
|
# print(info)
|
|
|
sql = """
|
|
sql = """
|
|
|
- INSERT INTO zhongjian_record (card_id, order_no, tag_no, images, card_create_time, card_update_time, score, corners, eoges, surface, centering, colour, repair, rating_no, obj_brand_title, obj_detail_spxl, obj_detail_spmc, obj_detail_fxnf, obj_detail_yy, obj_detail_spbh)
|
|
|
|
|
|
|
+ INSERT IGNORE INTO zhongjian_record (card_id, order_no, tag_no, images, card_create_time, card_update_time, score, corners, eoges, surface, centering, colour, repair, rating_no, obj_brand_title, obj_detail_spxl, obj_detail_spmc, obj_detail_fxnf, obj_detail_yy, obj_detail_spbh)
|
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
|
|
"""
|
|
"""
|
|
|
sql_pool.insert_one(sql, info)
|
|
sql_pool.insert_one(sql, info)
|
|
@@ -187,16 +192,19 @@ def loop_rating_no(log, sql_pool, sql_ra_no_list):
|
|
|
log.info(f"{rating_no_} is start ......................................")
|
|
log.info(f"{rating_no_} is start ......................................")
|
|
|
try:
|
|
try:
|
|
|
resp_json = get_request_one_page(log, rating_no_)
|
|
resp_json = get_request_one_page(log, rating_no_)
|
|
|
|
|
+ code = resp_json.get('code') if isinstance(resp_json, dict) else None
|
|
|
|
|
+ # 新版 webDetail:成功时 code==200 且 data 内含 obj_order_rating_goods;不存在时 code==400
|
|
|
|
|
+ biz = resp_json.get('data') if isinstance(resp_json, dict) else None
|
|
|
|
|
|
|
|
- if resp_json and resp_json.get('code') == 200:
|
|
|
|
|
|
|
+ if code == 200 and isinstance(biz, dict) and biz.get('obj_order_rating_goods'):
|
|
|
# print(resp_json)
|
|
# print(resp_json)
|
|
|
- parse_data(resp_json, sql_pool)
|
|
|
|
|
|
|
+ parse_data(biz, sql_pool)
|
|
|
sql_pool.update_one('update zhongjian_task set state = 1 where tag_no = %s', (rating_no_,))
|
|
sql_pool.update_one('update zhongjian_task set state = 1 where tag_no = %s', (rating_no_,))
|
|
|
- elif resp_json and resp_json.get('code') == 400:
|
|
|
|
|
|
|
+ elif code == 400:
|
|
|
log.warning(f"{rating_no_} is not exist ......................................")
|
|
log.warning(f"{rating_no_} is not exist ......................................")
|
|
|
sql_pool.update_one('update zhongjian_task set state = 2 where tag_no = %s', (rating_no_,))
|
|
sql_pool.update_one('update zhongjian_task set state = 2 where tag_no = %s', (rating_no_,))
|
|
|
else:
|
|
else:
|
|
|
- log.warning(f"other warning, please check ......................................")
|
|
|
|
|
|
|
+ log.warning(f"{rating_no_} other warning code={code}, please check ......")
|
|
|
sql_pool.update_one('update zhongjian_task set state = 3 where tag_no = %s', (rating_no_,))
|
|
sql_pool.update_one('update zhongjian_task set state = 3 where tag_no = %s', (rating_no_,))
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
|
log.warning(f"{sys._getframe().f_code.co_name} error: {e}")
|
|
log.warning(f"{sys._getframe().f_code.co_name} error: {e}")
|