HandleSpeech.py 14.2 KB
# @Time    : 2022/10/20 11:56
# @Author  : 付孟奇
from util.HandleLog import logger
from util.HandleData import handle_data
from util.HandleDB import db_load
from config.VendorPath import *
import copy
import json


class SpeechLoad:
    def __init__(self):
        # 获取Excel信息源
        self.data_excel = handle_data.load_excel(excel_path, '纸质入件')
        self.dic_excel = handle_data.load_excel(excel_path, '字典映射')
        self.result_desc = None  # 话术变量拼接的extra
        self.list_order = []
        self.list_insurance = []
        self.list_insures = []
        self.list_agent = []
        self.list_applicant = []
        self.dic_key = []
        self.case_num = None
        self.del_excel()

    # 处理纸质入件信息参数
    def del_data_excel(self):
        num_base = 0
        for i in self.data_excel:
            # 数据分类
            if i['group_id'] == 0:
                num_base += 1
            elif i['group_id'] == 4:
                self.list_order.append(i)
            elif i['group_id'] == 5 and i['is_insured'] == 0:
                self.list_insurance.append(i)
            elif i['group_id'] == 5 and i['is_insured'] == 1:
                self.list_insures.append(i)
            elif i['group_id'] == 6:
                self.list_agent.append(i)
            elif i['group_id'] == 7:
                self.list_applicant.append(i)

    # 处理数据字典参数与话术变量参数一致
    def del_excel(self):
        for index in range(len(self.dic_excel)):
            str_tag = str(self.dic_excel[index]['函数TAG']).split('Enums')[0]
            new_tag = str_tag[0].lower() + str_tag[1:]
            self.dic_key.append(new_tag)
            self.dic_excel[index]['函数TAG'] = new_tag
        self.dic_key = list(set(self.dic_key))

    # 合成入参字符串
    def getJsonString(self, arg_list):
        result = '{'
        for i in arg_list:  # 处理每一行信息
            i_v = i.get(self.case_num)
            if i_v == '' or i_v is None:
                i_v = 'test_' + i.get('name')
            # elif i.get('name') in self.dic_key:
            else:
                i_v = self.getArgs(i.get('name'), i_v)
            result += '''"{}":"{}",'''.format(i.get('name'), i_v)
        result += '}'
        return result.replace(',}', '}')

    # 合成数据结构
    def getJsonDesc(self, arg_list):
        result = '{'
        for i in arg_list:  # 处理每一行信息
            i_v = i.get(self.case_num)
            if i_v == '' or i_v is None:
                i_v = 'test_' + i.get('name')
            else:
                i_v = self.getArgs(i.get('name'), i_v)
            result += '''"{}":"{}",'''.format(i.get('desc'), i_v)
        result += '}'
        return result.replace(',}', '}')

    # 字典映射
    def getArgs(self, arg_k, arg_v):
        # 数据字典替换
        result = ''
        for i in self.dic_excel:
            if i['函数TAG'] == 'applicantSex' and arg_k == 'gender' and int(i['dict_value']) == int(arg_v):
                result = i['dict_label']
            elif i['函数TAG'] == 'insuredRelation' and arg_k == 'relation' and i['dict_value'] == arg_v:
                result = i['dict_label']
            elif i['函数TAG'] == 'orderType' and arg_k == 'policyType' and i['dict_value'] == arg_v:
                result = i['dict_label']
            elif i['函数TAG'] == arg_k and i['dict_value'] == arg_v:
                result = i['dict_label']
            else:  # 未找到替换数据
                continue
        if result == '':
            return arg_v
        else:
            return result

    # 组装订单请求信息
    def getRestult(self, case_num):
        self.case_num = case_num  # 执行的case内容
        self.del_data_excel()  # 处理纸质入件数据源
        insurance_json = ''
        insurance_desc_json = ''
        order_json = '''"order":''' + self.getJsonString(self.list_order)  # 订单基本信息
        order_desc_json = '''"订单基本信息":''' + self.getJsonDesc(self.list_order)
        agent_json = '''"agent":''' + self.getJsonString(self.list_agent)  # 销售人员信息
        agent__desc_json = '''"销售人员信息":''' + self.getJsonDesc(self.list_agent)
        applicant_json = '''"applicant":''' + self.getJsonString(self.list_applicant)  # 投保人信息
        applicant_desc_json = '''"投保人信息":''' + self.getJsonDesc(self.list_applicant)
        # 处理被保人信息
        list_people_1 = copy.deepcopy(self.list_insures)
        list_people_2 = copy.deepcopy(self.list_insures)
        for i in range(len(self.list_insures)):
            i_list = self.list_insures[i][case_num].split(';')
            if len(i_list) is 2:
                list_people_1[i][case_num] = i_list[0]
                list_people_2[i][case_num] = i_list[1]
            elif len(i_list) is 1:
                list_people_1[i][case_num] = i_list[0]
                list_people_2[i][case_num] = ''
            else:
                list_people_1[i][case_num] = ''
                list_people_2[i][case_num] = ''
        # 处理投保基本信息
        if self.case_num == 'test_case1':  # 处理一主一附
            logger.info('订单类型是一主一附')
            list_product_1 = copy.deepcopy(self.list_insurance)
            list_product_2 = copy.deepcopy(self.list_insurance)
            for i in range(len(self.list_insurance)):  # 拆分组装主险信息、附加险信息
                i_list = self.list_insurance[i][case_num].split(';')
                if len(i_list) is 2:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = i_list[1]
                elif len(i_list) is 1:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = ''
                else:
                    list_product_1[i][case_num] = ''
                    list_product_2[i][case_num] = ''
            main_insurance_json = '''"mainInsurance":''' + self.getJsonString(list_product_1).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_1) + "]}"
            main_insurance_desc_json = '''"投保基本信息1":''' + (self.getJsonDesc(list_product_1) + self.getJsonDesc(list_people_1)).replace('}{', ',')
            additional_insurance_json = '''"additionalInsurances":[''' + self.getJsonString(list_product_2).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_2) + "]}]"
            additional_insurance_desc_json = '''"投保基本信息2":''' + (self.getJsonDesc(list_product_2) + self.getJsonDesc(list_people_2)).replace('}{', ',')
            insurance_json = '''"insurance":[{''' + main_insurance_json + "," + additional_insurance_json + "}]"
            insurance_desc_json = main_insurance_desc_json + "," + additional_insurance_desc_json
        elif self.case_num == 'test_case2':  # 处理一主多附
            logger.info('订单类型是一主多附')
            list_product_1 = copy.deepcopy(self.list_insurance)
            list_product_2 = copy.deepcopy(self.list_insurance)
            list_product_3 = copy.deepcopy(self.list_insurance)
            for i in range(len(self.list_insurance)):  # 拆分组装主险信息、附加险信息
                i_list = self.list_insurance[i][case_num].split(';')
                if len(i_list) is 3:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = i_list[1]
                    list_product_3[i][case_num] = i_list[2]
                elif len(i_list) is 2:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = i_list[1]
                elif len(i_list) is 1:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = ''
                else:
                    list_product_1[i][case_num] = ''
                    list_product_2[i][case_num] = ''
            main_insurance_json = '''"mainInsurance":''' + self.getJsonString(list_product_1).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_1) + "]}"
            add_1_json = self.getJsonString(list_product_2).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_2) + "]}"
            add_2_json = self.getJsonString(list_product_3).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_2) + "]}"
            additional_insurance_json = '''"additionalInsurances":[''' + add_1_json + ',' + add_2_json + "]"
            insurance_json = '''"insurance":[{''' + main_insurance_json + "," + additional_insurance_json + "}]"

            main_insurance_desc_json = '''"投保基本信息1":''' + (self.getJsonDesc(list_product_1) + self.getJsonDesc(list_people_1)).replace('}{', ',')
            add_1_desc_json = '''"投保基本信息2":''' + (self.getJsonDesc(list_product_2) + self.getJsonDesc(list_people_2)).replace('}{', ',')
            add_2_desc_json = '''"投保基本信息3":''' + (self.getJsonDesc(list_product_3) + self.getJsonDesc(list_people_2)).replace('}{', ',')
            insurance_desc_json = main_insurance_desc_json + "," + add_1_desc_json + ',' + add_2_desc_json
        elif self.case_num == 'test_case3':  # 处理多主多附
            logger.info('订单类型是多主多附')
            list_product_1 = copy.deepcopy(self.list_insurance)
            list_product_2 = copy.deepcopy(self.list_insurance)
            list_product_3 = copy.deepcopy(self.list_insurance)
            list_product_4 = copy.deepcopy(self.list_insurance)
            for i in range(len(self.list_insurance)):  # 拆分组装主险信息、附加险信息
                i_list = self.list_insurance[i][case_num].split(';')
                if len(i_list) is 4:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = i_list[1]
                    list_product_3[i][case_num] = i_list[2]
                    list_product_4[i][case_num] = i_list[3]
                elif len(i_list) is 3:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = i_list[1]
                    list_product_3[i][case_num] = i_list[2]
                elif len(i_list) is 2:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = i_list[1]
                elif len(i_list) is 1:
                    list_product_1[i][case_num] = i_list[0]
                    list_product_2[i][case_num] = ''
                else:
                    list_product_1[i][case_num] = ''
                    list_product_2[i][case_num] = ''
            main_1_insurance_json = '''"mainInsurance":''' + self.getJsonString(list_product_1).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_1) + "]}"
            main_2_insurance_json = '''"mainInsurance":''' + self.getJsonString(list_product_2).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_1) + "]}"
            add_1_json = self.getJsonString(list_product_3).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_2) + "]}"
            add_2_json = self.getJsonString(list_product_4).replace('}', ',') + '''"insureds":[''' + self.getJsonString(list_people_2) + "]}"
            additional_insurance_json = '''"additionalInsurances":[''' + add_1_json + ',' + add_2_json + "]"
            insurance_json = '''"insurance":[{''' + main_1_insurance_json + ',' + additional_insurance_json + '},{' + main_2_insurance_json + ',' + additional_insurance_json + '}]'

            main_1_insurance_desc_json = '''"投保基本信息1":''' + (self.getJsonDesc(list_product_1) + self.getJsonDesc(list_people_1)).replace('}{', ',')
            main_2_insurance_desc_json = '''"投保基本信息2":''' + (self.getJsonDesc(list_product_2) + self.getJsonDesc(list_people_1)).replace('}{', ',')
            add_1_desc_json = '''"投保基本信息3":''' + (self.getJsonDesc(list_product_3) + self.getJsonDesc(list_people_2)).replace('}{', ',')
            add_2_desc_json = '''"投保基本信息4":''' + (self.getJsonDesc(list_product_4) + self.getJsonDesc(list_people_2)).replace('}{', ',')
            insurance_desc_json = main_1_insurance_desc_json + ',' + main_2_insurance_desc_json + ',' + add_1_desc_json + ',' + add_2_desc_json
        result = "{" + order_json + "," + agent_json + "," + applicant_json + "," + insurance_json + "}"
        self.result_desc = "{" + order_desc_json + "," + agent__desc_json + "," + applicant_desc_json + "," + insurance_desc_json + "}"
        logger.info("话术变量参数自动生成成功!")
        logger.info("订单数据结构为" + str(self.result_desc))
        return result

    def getAssert(self, orderRecordId):
        # 研发代码生成的extra_info信息
        res_extra = db_load.select_db(('''SELECT extra_info FROM order_base_info WHERE id={};''').format(orderRecordId))
        auto_dic = {}
        extra_dic = {}
        for k, v in json.loads(self.result_desc).items():
            for k_, v_ in v.items():
                auto_dic[(k + '/' + k_)] = v_
        for m, n in json.loads(res_extra[0]['extra_info']).items():
            for m_, n_ in n.items():
                extra_dic[m + '/' + m_] = n_

        error_list = []
        lack_list = []
        res_msg = None
        for i in extra_dic:
            if i in auto_dic:
                if extra_dic[i] == auto_dic[i]:
                    res_msg = {'code': 0, 'msg': '数据处理成功'}
                else:
                    error_list.append(i)
            else:
                lack_list.append(i)
        if len(lack_list) != 0 and len(error_list) != 0:
            res_msg = {'code': 1, 'msg': [{'数据生成异常,下列数据不存在,请核对话术变量表': str(lack_list)}, {'数据生成错误,下列数据值与原始值不符合': str(error_list)}]}
        elif len(lack_list) != 0:
            res_msg = {'code': 1, 'msg': '数据生成异常,下列数据不存在,请核对话术变量表:' + str(lack_list)}
        elif len(error_list) != 0:
            res_msg = {'code': 1, 'msg': '数据生成错误,下列数据值与原始值不符合:' + str(error_list)}
        return res_msg


handle_speech = SpeechLoad()
if __name__ == '__main__':
    handle_speech.getRestult(case_num='test_case1')
    # handle_speech.getArgs()