def v3_eva(self, product_id, channel_id, pid, options=None):
     if not options:
         options = self.v3_eva_option_get(product_id, channel_id, pid)
     url = "http://evaserver.huishoubao.com/evaluate_price_v3/evaluate"
     param = {"_head": {"_interface": "evaluate", "_msgType": "request", "_remark": "liuzhiming_autoTest",
                        "_version": "0.01", "_timestamps": "895467888516", "_invokeId": "79464631336456",
                        "_callerServiceId": "216053", "_groupNo": "1"},
              "_param": {"productid": product_id, "ip": "127.0.0.1", "cookies": "liuzhiming_autoTest",
                         "userid": "1895", "select": options, "pid": pid, "channel_id": channel_id}}
     print("获取估价结果的请求参数为:\n{}".format(param))
     print(get_price_headers(param))
     res = requests.post(url, json=param, headers=get_price_headers(param), proxies=hsb_eva_ipProxy_test())
     res_print(res, "1")  # 打印输出响应结果,非1数字打印json格式
 def sale_apply_price(self):
     planId = "3"
     productId = "41567"
     evaType = "3"
     skus = ['8012', '130', '17', '2236', '36', '42', '2242']
     options = [
         '9015', '9019', '9027', '9028', '9035', '9039', '9047', '7481',
         '9057', '9059', '9062', '9067', '9071', '9074', '7559', '9077',
         '9079', '7570', '7574', '9082', '9084', '7589', '9090', '9094',
         '9098', '9102', '9106', '9111', '9117', '9120'
     ]
     ip = "10.0.11.88"
     freqLimitType = "0"
     url = "http://bpeserver.huishoubao.com/adjustment_price/sale_apply_price"
     param = {
         "_head": {
             "_interface": "sale_apply_price",
             "_msgType": "request",
             "_remark": "",
             "_version": "0.01",
             "_timestamps": "1525332832",
             "_invokeId": "lzm_adjustPrice_locust",
             "_callerServiceId": "116006",
             "_groupNo": "1"
         },
         "_param": {
             "planId": planId,
             "productId": productId,
             "evaType": evaType,
             "skuItem": skus,
             "optItem": options,
             "ip": ip,
             "userId": "1895",
             "freqLimitType": freqLimitType
         }
     }
     # res = self.client.post(url, json=param, headers=get_price_headers(param), catch_response=True,
     #                        name="get_sale_price", proxies=hsb_eva_ipProxy_k8s_test())
     with self.client.post(url,
                           json=param,
                           headers=get_price_headers(param),
                           proxies=hsb_eva_ipProxy_k8s_test(),
                           name="获取销售价V2.0",
                           catch_response=True) as res:
         # print(res.text)
         if res.status_code == 200 and res.json(
         )["_data"]["_errCode"] == "0":
             print("请求成功")
             res.success()
         else:
             res.failure("sale_apply_price接口失败!")
def recycle_current_evaluate(product_id, channel_id, pid, check_type, opts,
                             skus):
    url = "http://codserver.huishoubao.com/detect_v3/recycle_current_evaluate"
    param = {
        "_head": {
            "_interface": "recycle_current_evaluate",
            "_msgType": "request",
            "_remark": "",
            "_version": "0.01",
            "_timestamps": "1525332832",
            "_invokeId": "152533283241636",
            "_callerServiceId": "216002",
            "_groupNo": "1"
        },
        "_param": {
            "productId": product_id,
            "channelId": channel_id,
            "pid": pid,
            "checkType": check_type,
            "optItem": opts,
            "skuItem": skus,
            "userId": "1895",
            "ip": "127.0.0.1",
            "freqLimitType": "0"
        }
    }
    print("请求参数:\n{}".format(json.dumps(param)))
    res = requests.post(url,
                        json=param,
                        headers=get_price_headers(param),
                        proxies=hsb_eva_ipProxy_test())
    res_print(res)  # 打印输出响应结果,非1数字打印json格式

    res = res.json()
    options_list = []  # 估价明细选项
    for item in res["_data"]["_data"]["evaItemList"]:
        aId = item["ansId"]
        options_list.append(aId)

    base_list = []  # 定价选项
    base_defualt_list = []  # 定价选项(默认项标识)
    for item in res["_data"]["_data"]["baseItemList"]:
        aId = item["ansId"]
        base_list.append(aId)
        if item["isDefault"] == "1":
            base_defualt_list.append(aId)

    print("======转换后的估价明细选项为:\n{}\n".format(options_list))
    print("======转换后的定价明细选项(全部)为:\n{}\n".format(base_list))
    print("======转换后的定价明细选项(带默认标识)为:\n{}\n".format(base_defualt_list))
def v3_get_base_item(class_id, que_name="", index="0", size="10"):
    """获取检测选项库信息"""
    url = "http://prdserver.huishoubao.com/base_product_v3/get_base_item"
    param = {"_head": {"_interface": "get_base_item", "_msgType": "request", "_remark": "","_version": "0.01",
                       "_timestamps": "1632448718","_invokeId": "16324487181227","_callerServiceId": "212011","_groupNo": "1"},
             "_param": {
                 "classId": class_id,
                 "queName": que_name,
                 "pageIndex": index,
                 "pageSize": size
             }
             }
    res = requests.post(url, json=param, headers=get_price_headers(param), proxies=hsb_eva_ipProxy_test())
    res_print(res, "1")  # 打印输出响应结果,非1数字打印json格式
 def get_order_info(order_id):  # 从订单信息中拿到productId、evaluateId
     """"""
     url = "http://ordserver.huishoubao.com/order_center/getOrderInfo"
     param = {"_head": {"_callerServiceId": "216009", "_groupNo": "1", "_interface": "getOrderInfo",
                        "_invokeId": "92847505a83371e99119f52157e8b0bf", "_msgType": "request", "_remark": "",
                        "_timestamps": "1634866297", "_version": "0.01"},
              "_param": {"containInfo": ["good", "basic", "evaluation"], "orderId": order_id}}
     res = requests.post(url, json=param, headers=get_price_headers(param), proxies=hsb_ordserver_ipProxy_test())
     res_print(res, 1)
     # print(param)
     res_dict = res.json()
     if res_dict["_data"]["_retinfo"] == "success":
         property = res_dict["_data"]["_data"]["basic"]["orderProperty"]
         evaluation = res_dict["_data"]["_data"]["evaluation"]
         print("订单属性:{}\n".format(property))
         print("获取的价格信息为:{}".format(evaluation))
         return evaluation
     else:
         return False
    def v3_product_check_item(self, product_id, order_id, check_type, is_over="0"):
        "http://wiki.huishoubao.com/web/#/138?page_id=15854"
        param = {"_head": {"_interface": "product_check_item", "_msgType": "request", "_remark": "", "_version": "0.01",
                           "_timestamps": "1525332832",
                           "_invokeId": "152533283241636", "_callerServiceId": "216002", "_groupNo": "1"},
                 "_param": {"productId": product_id, "orderId": order_id, "checkType": check_type, "userId": "1895",
                            "freqLimitType": "1", "isOverInsurance": is_over, "ip": "127.0.0.1"}}
        url = "http://codserver.huishoubao.com/detect_v3/product_check_item"
        print("url:{}  请求参数\n{}".format(url, json.dumps(param)))
        respone = requests.post(url, json=param, headers=get_price_headers(param), proxies=hsb_eva_ipProxy_test())
        res_print(respone)
        respone_dict = respone.json()
        checkList = respone_dict['_data']['_data']['checkList']
        skuList = respone_dict['_data']['_data']['skuList']

        strCheckList = []
        strCheckDesc = ''
        for info_question in checkList:
            questionList = info_question['questionList']
            for info_answer in questionList:
                answerList = info_answer['answerList']
                '''第一种方式:在answerList下随机取1个'''
                index = randint(0, len(answerList) - 1)
                strCheckList.append(answerList[index]['answerId'])
                strCheckDesc += '"' + info_answer['questionName'] + ":" + answerList[index]['answerName'] + '",'

                '''第二种方式:在answerList下取answerWeight最大的那个'''
                # index = sorted(answerList, key=lambda x: int(x['answerWeight']), reverse=True)[0]
                # strCheckList.append(index['answerId'])
                # strCheckDesc += '"' + info_answer['questionName'] + '":"' + index['answerName'] + '",'

        strSkuList = []
        strSkuDesc = ''
        for info in skuList:
            answerList = info['answerList']
            index = randint(0, len(answerList) - 1)
            # index = 0
            strSkuList.append(answerList[index]['answerId'])
            strSkuDesc += '"' + info['questionName'] + ":" + answerList[index]['answerName'] + '",'

        print(strSkuList, strCheckList)
        return strSkuList, strSkuDesc, strCheckList, strCheckDesc
def v3_spu_sku_pic(product_id, sku_items):
    url = "http://prdserver.huishoubao.com/base_product_v3/spu_sku_pic"
    param = {
                "_head": {
                    "_interface": "spu_sku_pic",
                    "_msgType": "request",
                    "_remark": "",
                    "_version": "0.01",
                    "_timestamps": "1632448718",
                    "_invokeId": "HsbApiAgent16324487181227",
                    "_callerServiceId": "212011",
                    "_groupNo": "1"
                },
                "_param": {
                    "productId": product_id,
                    "skuItem": sku_items
                }
            }
    print("url:{},请求参数\n{}".format(url, json.dumps(param)))
    res = requests.post(url, json=param, headers=get_price_headers(param), proxies=hsb_eva_ipProxy_test())
    res_print(res, "2")  # 打印输出响应结果,非1数字打印json格式
    def v3_eva_option_get(self, product_id, channel_id, pid, get_way="1", is_best="1"):
        """获取产品估价选项"""
        url = "http://prdserver.huishoubao.com/eva_product_v3/eva_option_get"
        param = {"_head": {"_interface": "eva_option_get", "_msgType": "request", "_remark": "eva_product_v3",
                           "_version": "0.01", "_timestamps": "123", "_invokeId": "eva_product_v3",
                           "_callerServiceId": "112002", "_groupNo": "1"},
                 "_param": {"channel_id": channel_id, "product_id": product_id, "pid": pid}}
        print("url:{},请求参数\n{}".format(url, json.dumps(param)))
        res = requests.post(url, json=param, headers=get_price_headers(param), proxies=hsb_eva_ipProxy_test())
        res_print(res, "1")  # 打印输出响应结果,非1数字打印json格式
        questions = res.json()["_body"]["_data"]["itemList"]
        answer_ids = []  # 定义答案项ID列表
        answer_names = ""  # 定义答案项名称列表,便于对照
        for question in questions:
            answers = question["question"]
            question_single = question["single"]
            if get_way == "1":  # 随机获取答案项
                if question_single == "1":
                    """随机选中单选"""
                    i = randint(0, len(answers) - 1)
                    answer_id = answers[i]["id"]
                    answer_ids.append(answer_id)

                    answer_name = answers[i]["name"]
                    answer_names += "【{}】{}\n".format(answer_id, answer_name)

                elif question_single == "2":
                    """多选, 
                    1.随机多选N项,
                    2.随机选中,如果多选标识,添加到临时列表,
                    3.如果是单选,则清空已选中项,只保留单选项,
                    4.最后添加到answer_ids
                    """
                    j = randint(1, len(answers))  # 随机多选的个数
                    temp_ids = []
                    temp_names = ""
                    for x in range(j):
                        i = randint(0, len(answers) - 1)
                        answer_single = answers[i]["single"]

                        if answer_single == "1":
                            """答案项是单选,则对临时变量(存储id和name)重新赋值,并退出循环"""
                            answer_id = answers[i]["id"]
                            temp_ids = [answer_id]
                            answer_name = answers[i]["name"]
                            temp_names = "【{}】{}\n".format(answer_id, answer_name)
                            break
                        elif answer_single == "2":
                            """答案项是多选,则将id和name追加到临时变量中"""
                            answer_id = answers[i]["id"]
                            if answer_id in temp_ids:  # 防止随机到重复的答案项
                                pass
                            else:
                                temp_ids.append(answer_id)
                                answer_name = answers[i]["name"]
                                temp_names += "【{}】{}\n".format(answer_id, answer_name)
                    # 将多选问题项的最后结果添加到最终结果中
                    temp_ids = list(dict.fromkeys(temp_ids))  # 对列表去重
                    answer_names += temp_names
                    answer_ids.extend(temp_ids)

            elif get_way == "2":  # 按优先级返回固定答案项
                answers = sorted(answers, key=operator.itemgetter("priority"), reverse=True)  # 按优先级字段进行倒序

                if is_best == "0":  # 取优先级最高的
                    answer_id = answers[0]["id"]
                    answer_ids.append(answer_id)
                    answer_name = answers[0]["name"]
                    answer_names += "【{}】{}\n".format(answer_id, answer_name)
                elif is_best == "1":  # 取优先级最低的
                    answer_id = answers[-1]["id"]
                    answer_ids.append(answer_id)
                    answer_name = answers[-1]["name"]
                    answer_names += "【{}】{}\n".format(answer_id, answer_name)

        print("========>1.产品的『估价选项-答案项ID』为:\n{}".format(answer_ids))
        print("\n========>2. 以上『估价选项-问题项名称:答案项名称』为:\n{}".format(answer_names))

        return answer_ids