def chooseBank(driver, detail):
    times = 0
    maxTimes = int(LOAD_PAGE_TIMEOUT / WHILE_WAIT_SLEEP)
    while times < maxTimes:
        time.sleep(ACTION_WAIT_SLEEP_LONG)
        select2ZzkmContainer = driver.find_element_by_id(
            'select2-zkm-container')
        if select2ZzkmContainer != None:
            break
        # elements = driver.find_elements_by_class_name('select2-selection')
        times = times + 1
        if times == maxTimes:
            log.e("等待弹出框超时——选择银行")
            return 1
        time.sleep(WHILE_WAIT_SLEEP)
        # ActionChains(driver).move_to_element(
        #     driver.find_element_by_class_name('sz-zkm')).click().perform()

        driver.find_element_by_class_name('sz-zkm').click()
    driver.find_element_by_id('select2-zkm-container').click()

    time.sleep(ACTION_WAIT_SLEEP_LONG)
    driver.find_element_by_class_name('select2-search__field').send_keys(
        detail.account_code)

    maxTimes = int(LOAD_PAGE_TIMEOUT / WHILE_WAIT_SLEEP)
    times = 0
    while times < maxTimes:
        result = driver.find_element_by_class_name(
            'select2-results__option').text
        if result == 'No results found':
            log.w('银行不存在', detail.account_code)

            driver.find_element_by_id('select2-zkm-container').click()

            time.sleep(ACTION_WAIT_SLEEP_SHORT)
            addNewBank(driver, detail.account_name)
            chooseBank(driver, detail)
        elif detail.account_code + '--' in driver.find_element_by_class_name(
                'select2-results__option').text:
            driver.switch_to.active_element.send_keys(Keys.DOWN)
            driver.switch_to.active_element.send_keys(Keys.ENTER)
            driver.find_element_by_id('zkm_sub').click()
            break
        times = times + 1
        time.sleep(WHILE_WAIT_SLEEP)
def waitNotice(driver, element):
    for i in range(10):
        try:
            element.tag_name
            alert = WebDriverWait(driver, 1, poll_frequency=0.2).until(
                lambda x: x.find_element_by_id("gritter-notice-wrapper"))
            log.w(alert.text)
            return 0
        except StaleElementReferenceException:
            # log.w('StaleElementReferenceException')
            return 1

        except TimeoutException:
            continue
        except:
            log.exception('凭证列表-批量处理等待异常')
            return 0
        time.sleep(0.1)
    log.w('凭证列表-批量处理等待超时')
    return 0
Exemple #3
0
def main():
    # while 1:
    #     log.i('选择项目(crm,third,)','\n')
    #     table = input()
    #     if table == 'crm' or table == 'third':
    #         break
    while 1:
        log.i('输入id', '\n')
        id = input()
        try:
            id = int(id)
            break
        except:
            log.w('输入id转换失败\n')
    # log.i('参数:', table, str(id))
    ret, af, bf, msg = mySqlHelper.getThirdLog(id)
    if ret != 0:
        return 1
    log.i('参数:', af, bf)
    option = webdriver.ChromeOptions()
    option.add_argument('disable-infobars')
    driver = webdriver.Chrome(options=option)
    driver.set_window_size(config.window_size_w, config.window_size_h)
    driver.implicitly_wait(5)
    commonSelenium.toPage(driver, 'https://www.sojson.com/jsondiff.html')

    ActionChains(driver).move_to_element(
        driver.find_elements_by_class_name('CodeMirror-sizer')
        [0]).double_click().perform()
    commonSelenium.clearElement(driver.switch_to.active_element)
    pyperclip.copy(af)
    driver.switch_to.active_element.send_keys(Keys.Ct)

    ActionChains(driver).move_to_element(
        driver.find_elements_by_class_name('CodeMirror-sizer')
        [1]).double_click().perform()
    commonSelenium.clearElement(driver.switch_to.active_element)
    driver.switch_to.active_element.send_keys(bf)

    log.i('参数:', af, bf)
def waitToast(driver, functionName, successMsg):
    times = 0
    maxTimes = int(LOAD_PAGE_TIMEOUT / WHILE_WAIT_SLEEP)
    while times < maxTimes:
        try:
            alert = WebDriverWait(driver, 10, poll_frequency=0.2).until(
                lambda x: x.find_element_by_id("gritter-notice-wrapper"))
            # log.w(alert.text)
            if successMsg in alert.text:
                log.w(functionName, successMsg, alert.text)
                return 0
        except TimeoutException:
            log.w(functionName, 'TimeoutException')
            return 1
        except:
            log.exception(functionName)
            return 1

        times = times + 1
        if times == maxTimes:
            log.e(functionName, '等待超时')
            return 1
        time.sleep(WHILE_WAIT_SLEEP)
def run(driver):
    log.d('录入凭证')
    try:
        ret, documents, msg = read_documentInput()
        if ret != 0:
            log.e('加载凭证文件失败', msg)
            return 1
        if len(documents) == 0:
            log.w('加载凭证文件数量为0')
            return 1
        spCount = 0
        cpCount = 0
        nblzCount = 0
        for document in documents:
            if document[0].type == 1:
                spCount = spCount + 1
            if document[0].type == 2:
                cpCount = cpCount + 1
            if document[0].type == 3:
                nblzCount = nblzCount + 1

        document = documents[0]
        if commonSelenium.toPage(
                driver, config.domain +
                "/cs-third/cer/certificate/toCertificateInput"):
            log.w('加载凭证录入页面超时')
            return 1

        driver.find_element_by_id('uniformCreditCode').send_keys(
            config.caseTaxId)
        driver.find_element_by_id('currentDate').click()
        years = config.caseCurrentAccountYear - int(
            driver.find_elements_by_class_name('datepicker-switch')[1].text)

        if years < 0:
            for i in range(-1 * years):  # <<
                ActionChains(driver).move_to_element(
                    driver.find_elements_by_class_name('prev')
                    [1]).click().perform()
                time.sleep(ACTION_WAIT_SLEEP_SHORT)
        if years > 0:
            for i in range(years):  # >>
                ActionChains(driver).move_to_element(
                    driver.find_elements_by_class_name('next')
                    [1]).click().perform()
                time.sleep(ACTION_WAIT_SLEEP_SHORT)
        months = driver.find_elements_by_class_name('month')
        for month in months:
            if str(config.caseCurrentAccountMonth) in month.text:
                ActionChains(driver).move_to_element(month).click().perform()
                break
        isOpenOriginCertificate = 0
        isCsInfoFileUploadSp = 0
        isCsInfoFileUploadCp = 0
        isCsInfoFileUploadNblz = 0
        for documentIndex in range(len(documents)):

            document = documents[documentIndex]
            ActionChains(driver).move_to_element(
                driver.find_elements_by_class_name('iCheck-helper')[
                    document[0].type - 1]).click().perform()

            driver.find_element_by_class_name("btn-success").send_keys(
                Keys.ENTER)
            # print('原始凭证',driver.find_element_by_class_name('allcount').text.split('   ')[1] )

            if isOpenOriginCertificate == 0:  # 打开原始凭证
                isOpenOriginCertificate = 1
                driver.find_element_by_id("originCertificate").send_keys(
                    Keys.ENTER)
                driver.find_element_by_id(
                    "originCertificateConfirm").send_keys(Keys.ENTER)
                handles = driver.window_handles
                time.sleep(ACTION_WAIT_SLEEP_LONG)

                driver.switch_to.window(handles[0])
                # switch back to main screen

                time.sleep(ACTION_WAIT_SLEEP_LONG)
            count = int(
                driver.find_element_by_class_name('allcount').text.split('   ')
                [1][4:])

            if isCsInfoFileUploadSp == 0 and document[
                    0].type == 1 and count < spCount:
                isCsInfoFileUploadSp = 1
                log.w('原始凭证收票数量不足', '当前数量:', count, '需要数量', spCount)
                if csInfoFileUpload.run(config.caseTaxId, document[0].type,
                                        spCount - count):  # 文件上传失败
                    return 1
            if isCsInfoFileUploadCp == 0 and document[
                    0].type == 2 and count < cpCount:
                isCsInfoFileUploadCp = 1
                log.w('原始凭证出票数量不足', '当前数量:', count, '需要数量', cpCount)
                if csInfoFileUpload.run(config.caseTaxId, document[0].type,
                                        cpCount - count):  # 文件上传失败
                    return 1
            if isCsInfoFileUploadNblz == 0 and document[
                    0].type == 3 and count < nblzCount:
                isCsInfoFileUploadNblz = 1
                log.w('原始凭证内部流转数量不足', '当前数量:', count, '需要数量', nblzCount)
                if csInfoFileUpload.run(config.caseTaxId, document[0].type,
                                        nblzCount - count):  # 文件上传失败
                    return 1
            divBtn = driver.find_element_by_id('divBtn')
            ActionChains(driver).move_to_element(divBtn).perform()
            time.sleep(ACTION_WAIT_SLEEP_LONG)

            smallClasses = driver.find_elements_by_xpath(
                "//ul[@class = 'dropspan-ul']/li")
            for i in range(len(smallClasses)):
                ActionChains(driver).move_to_element(smallClasses[i]).perform()
                templates = driver.find_elements_by_xpath(
                    "//ul[@class = 'dropspan-ul']/li[" + str(i + 1) +
                    "]/ul/li")
                isbreak = 0
                for j in range(len(templates)):
                    if templates[j].text == document[0].TEMPLATED_NAME:
                        ActionChains(driver).move_to_element(
                            templates[j]).click().perform()
                        isbreak = 1
                        break
                if isbreak == 1:
                    break
                if i == len(smallClasses) - 1:
                    print('模板未找到', document[0].TEMPLATED_NAME)
                    return 1, '模板未找到', document[0].TEMPLATED_NAME
                time.sleep(ACTION_WAIT_SLEEP_SHORT)
            time.sleep(ACTION_WAIT_SLEEP_LONG)

            ret_getFile, dataTemplates, msg = getTemplateSubjectById(
                document[0].TEMPLATED_ID)
            if ret_getFile != 0 or len(dataTemplates) == 0:
                log.e('加载模板失败', msg)
                return 1
            # ActionChains(driver).move_to_element(
            #     driver.find_element_by_class_name('sz-zkm')).click().perform()
            # time.sleep(ACTION_WAIT_SLEEP_LONG)

            sj = 1
            hasBank = 0
            for detail in document:
                for template in dataTemplates:
                    isSum = 0
                    if template.kmCode in detail.account_code:
                        if (template.subjectType == 1 or template.subjectType
                                == 2) and template.jdType == 0:
                            isSum = 1
                        if template.subjectType == 3 and template.jdType == 1:
                            isSum = 1
                        if (template.subjectType == 4
                                or template.subjectType == 5) and sj == 1:
                            isSum = 1
                            sj == 0
                        id = 'ts' + str(template.tsId)
                        if isSum == 0:
                            elementInput = driver.find_element_by_id(id)
                            # if elementInput.text!='':
                            clearElement(elementInput)
                            if template.jdType == 0:
                                elementInput.send_keys(
                                    str(detail.credit_amount))
                            else:
                                elementInput.send_keys(str(
                                    detail.debit_amount))
                        # else:
                        if getFeatureCdByCode(template.kmCode) == 2:  # 银行
                            hasBank = 1
                            # sz_zkm=driver.find_element(By.CLASS_NAME,'sz-zkm')
                            sz_zkm = driver.find_element_by_class_name(
                                'sz-zkm')
                            print(
                                'location',
                                driver.find_element_by_class_name(
                                    'sz-zkm').location['x'],
                                driver.find_element_by_class_name(
                                    'sz-zkm').location['y'])
                            # mouseRightClick(driver,driver.find_element_by_class_name('sz-zkm').location['x'],
                            #       driver.find_element_by_class_name('sz-zkm').location['y'])
                            # driver.execute_script(
                            #     "arguments[0].setAttribute('style', arguments[1]);",
                            #     driver.find_element_by_class_name('sz-zkm'),
                            #     "border: 1px solid red;"  # 边框border:2px; red红色
                            # )
                            # ActionChains(driver).move_to_element(
                            #     driver.find_element_by_class_name('sz-zkm')).context_click().perform()
                            time.sleep(ACTION_WAIT_SLEEP_LONG)
                            driver.find_element_by_class_name('sz-zkm').click()
                            time.sleep(ACTION_WAIT_SLEEP_LONG)

                            try:
                                alert = WebDriverWait(
                                    driver, 1, poll_frequency=0.2).until(
                                        lambda x: x.find_element_by_id(
                                            "zkmNoData"))
                                log.w(alert.text)
                                if '暂无子科目数据' in alert.text and alert.is_displayed(
                                ):
                                    addNewBank(driver, detail.account_name)
                                else:

                                    chooseBank(driver, detail)

                            except TimeoutException:
                                log.w(alert.text)

                                chooseBank(driver, detail)

                            except:
                                log.exception('凭证录入-点击银行等待异常')
                                return 1
                        elif getFeatureCdByCode(
                                template.kmCode) == 4 or getFeatureCdByCode(
                                    template.kmCode) == 5:  # 往来
                            count = 0
                            # ActionChains(driver).move_to_element(
                            #     driver.find_element_by_class_name('sz-wldw')).click().perform()
                            element = driver.find_element_by_css_selector(
                                'div[class*="sz-wldw"]')
                            driver.execute_script("arguments[0].click();",
                                                  element)
                            # driver.find_element_by_class_name('sz-wldw').click()
                            time.sleep(ACTION_WAIT_SLEEP_LONG)
                            if hasBank == 1:
                                elements = driver.find_elements_by_class_name(
                                    'select2-selection')
                                times = 0
                                maxTimes = int(LOAD_PAGE_TIMEOUT /
                                               WHILE_WAIT_SLEEP)
                                while times < maxTimes:
                                    time.sleep(WHILE_WAIT_SLEEP)

                                    if len(elements) == 2:
                                        break
                                    elements = driver.find_elements_by_class_name(
                                        'select2-selection')
                                    times = times + 1
                                    if times == maxTimes:
                                        log.e("等待弹出框超时——选择往来")
                                        return 1
                                    time.sleep(WHILE_WAIT_SLEEP)
                                for i in range(len(elements)):
                                    aria_labelledby = elements[
                                        i].get_attribute('aria-labelledby')
                                    if aria_labelledby == 'select2-wldw-container':
                                        ActionChains(driver).move_to_element(
                                            elements[i]).click().perform()
                            else:
                                select2_selection = driver.find_element_by_class_name(
                                    'select2-selection')
                                ActionChains(driver).move_to_element(
                                    driver.find_element_by_class_name(
                                        'select2-selection')).click().perform(
                                        )

                            time.sleep(ACTION_WAIT_SLEEP_LONG)
                            driver.find_element_by_class_name(
                                'select2-search__field').send_keys(
                                    detail.partner_name)
                            time.sleep(ACTION_WAIT_SLEEP_LONG)
                            times = 0
                            maxTimes = int(LOAD_PAGE_TIMEOUT /
                                           WHILE_WAIT_SLEEP)
                            while times < maxTimes:
                                partner = driver.find_element_by_class_name(
                                    'select2-results__option').text
                                if detail.partner_name == partner or '公司--' + detail.partner_name == partner:
                                    driver.switch_to.active_element.send_keys(
                                        Keys.DOWN)
                                    driver.switch_to.active_element.send_keys(
                                        Keys.ENTER)
                                    break
                                if partner == 'No results found':
                                    log.w('往来单位不存在', detail.partner_name)

                                    ActionChains(driver).move_to_element(
                                        driver.find_element_by_class_name(
                                            'select2-selection')).click(
                                            ).perform()

                                    time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                                    driver.find_element_by_id(
                                        'wldw_add_sub').click()

                                    time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                                    driver.find_element_by_id(
                                        'partnerName').send_keys(
                                            detail.partner_name)

                                    time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                                    driver.find_element_by_id(
                                        'add_wldw_sub').click()

                                    time.sleep(config.ACTION_WAIT_SLEEP_LONG)
                                    if detail.partner_name not in driver.find_element_by_class_name(
                                            'select2-selection').text:

                                        log.i('添加往来_关联科目失败',
                                              detail.partner_name)
                                        return 1
                                    # waitToast(driver,'新增往来单位','保存成功')
                                    break
                                times = times + 1
                                if times == maxTimes:
                                    log.e(documentIndex, '录入凭证——添加往来等待超时',
                                          detail.document_id)
                                    return 1
                                time.sleep(WHILE_WAIT_SLEEP)

                            time.sleep(ACTION_WAIT_SLEEP_LONG)
                            driver.find_element_by_id('wldw_sub').click()
            currentImgIdOld = driver.get_cookie('current_img_id')['value']
            driver.find_element_by_id("remark").send_keys("selenium 录入")

            time.sleep(ACTION_WAIT_SLEEP_LONG)
            driver.find_element_by_id('save').click()

            time.sleep(ACTION_WAIT_SLEEP_LONG)
            times = 0
            maxTimes = int(LOAD_PAGE_TIMEOUT / WHILE_WAIT_SLEEP)
            while times < maxTimes:
                try:
                    alert = WebDriverWait(driver, 1, poll_frequency=0.2).until(
                        lambda x: x.find_element_by_id("gritter-notice-wrapper"
                                                       ))
                    # log.w(alert.text)
                    if '保存成功' in alert.text:
                        log.i(documentIndex, '录入凭证成功')
                        break

                except TimeoutException:
                    pass
                except:
                    log.exception('录入凭证异常')
                    return 1
                currentImgIdNew = driver.get_cookie('current_img_id')['value']

                log.d('点击保存等待', times, 'currentImgIdNew', currentImgIdNew,
                      'currentImgIdOld', currentImgIdOld)
                if currentImgIdNew != currentImgIdOld:
                    # print('currentImgIdNew', currentImgIdNew, 'currentImgIdOld', currentImgIdOld)
                    log.i(documentIndex, '录入凭证成功', detail.document_id)
                    break
                times = times + 1
                if times == maxTimes:
                    log.e(documentIndex, '录入凭证保存等待超时', detail.document_id)
                    return 1
                time.sleep(WHILE_WAIT_SLEEP)

            time.sleep(ACTION_WAIT_SLEEP_LONG)

        log.i('录入凭证结束')
        return 0
    except BaseException as e:
        r = requests.get(driver.current_url, allow_redirects=False)
        log.exception('录入凭证异常', r.status_code)
        return 1
def run(driver):
    log.d('资产负债表')
    dictsApi = {}
    try:
        params = {
            'origin': 'zidh',
            'taxNo': config.caseTaxId,
            'year': config.caseCurrentAccountYear,
            'month': config.caseCurrentAccountMonth
        }

        log.i('API 资产负债表获取', config.domain_api)
        response = requests.get(config.domain_api + '/api/report/balancesheet',
                                params=params,
                                allow_redirects=False)
        response.encoding = 'utf-8'
        if response.status_code == 200:
            ret = json.loads(response.text)
            if str(ret['code']) == '200':
                dictsApi = ret['data']
            else:

                log.e('API 资产负债表获取失败:', response.text)
                return 1
        else:
            log.e('API 资产负债表获取失败HTTP:', response.status_code)
            return 1
        log.i('API 资产负债表获取成功')
        if toThird.run(driver, config.caseCompanyName, config.caseTaxId):
            time.sleep(config.FAIL_WAIT_SLEEP)
            return 1
        if commonSelenium.toPage(
                driver,
                config.domain + "/cs-third/cer/balanceSheet/balanceSheetList"):
            return 1

        driver.find_element_by_id('currentDate').click()
        time.sleep(config.ACTION_WAIT_SLEEP_LONG)

        months = driver.find_elements_by_class_name('month')
        for month in months:
            if str(config.caseCurrentAccountMonth) + '月' in month.text:
                ActionChains(driver).move_to_element(month).click().perform()
                time.sleep(config.ACTION_WAIT_SLEEP_LONG)
                break

        time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
        shutil.rmtree(config.FILE_DOWNLOAD)
        os.mkdir(config.FILE_DOWNLOAD)
        driver.find_element_by_id('downloadBtn').click()
        times = 0
        maxTimes = int(config.LOAD_PAGE_TIMEOUT / config.WHILE_WAIT_SLEEP)
        while times < maxTimes:
            time.sleep(config.ACTION_WAIT_SLEEP_LONG)
            if '数据导出并下载成功' in driver.find_element_by_class_name(
                    'bootbox-body').text:
                btns = driver.find_elements_by_class_name('btn-primary')
                for btn in btns:
                    if btn.text == "OK":
                        btn.click()
                break
            if times == maxTimes:
                log.e("资产负债表-资产负债表下载超时")
                return 1
            times = times + 1

            log.w("资产负债表-资产负债表下载等待", times)
        time.sleep(config.ACTION_WAIT_SLEEP_LONG)
        time.sleep(config.ACTION_WAIT_SLEEP_LONG)
        retCode, dictsDownload = excelTools.read_balanceSheetList()
        if retCode != 0:
            time.sleep(config.FAIL_WAIT_SLEEP)
            log.e('资产负债表下载失败:')
            return 1
        if len(dictsDownload) != len(dictsApi) - 1:
            log.e('API资产负债表数量与下载数量不一致 dictsDownload:', str(len(dictsDownload)),
                  'listsApi:', str(len(dictsApi)))

            return 1

        time.sleep(config.ACTION_WAIT_SLEEP_LONG)

        time.sleep(config.ACTION_WAIT_SLEEP_LONG)
        rows = driver.find_elements_by_xpath(
            "//table[@id='customerTable']/tbody/tr")
        for i in range(len(rows)):
            if i < 1:
                continue
            tdsSum = rows[i].find_elements_by_tag_name("td")

            if tdsSum[1].text != '' and tdsSum[1].text != '11':
                line = tdsSum[1].text
                qm = tdsSum[2].text.replace(',', '')
                nc = tdsSum[3].text.replace(',', '')
                # log.e('tdsSum[1]:\t', line)
                if dictsApi['r' + line + 'qm'] == dictsDownload[
                        'r' + line + 'qm'] == qm == '' and dictsApi[
                            'r' + line + 'nc'] == dictsDownload[
                                'r' + line + 'nc'] == nc == '':
                    pass
                elif not (float(dictsApi['r' + line + 'qm']) == float(
                        dictsDownload['r' + line + 'qm']) == float(qm)
                          and float(dictsApi['r' + line + 'nc']) == float(
                              dictsDownload['r' + line + 'nc']) == float(nc)):
                    log.e('比较失败——行次', line, '\n页面:\t'
                          '期末余额', qm, '年初余额', nc, '\nAPI:\t',
                          dictsApi['r' + line + 'qm'], '年初余额',
                          dictsApi['r' + line + 'nc'], '\n文件:\t',
                          dictsDownload['r' + line + 'qm'], '年初余额',
                          dictsDownload['r' + line + 'nc'])

                    return 1
                # else:
                #     log.d('行次',line,'期末余额', qm, '年初余额', nc )
            if tdsSum[5].text != '':
                line = tdsSum[5].text
                qm = tdsSum[6].text.replace(',', '')
                nc = tdsSum[7].text.replace(',', '')

                # log.e('tdsSum[5]:\t', line)
                if dictsApi['r' + line + 'qm'] == dictsDownload[
                        'r' + line + 'qm'] == qm == '' and dictsApi[
                            'r' + line + 'nc'] == dictsDownload[
                                'r' + line + 'nc'] == nc == '':
                    pass
                elif not (float(dictsApi['r' + line + 'qm']) == float(
                        dictsDownload['r' + line + 'qm']) == float(qm)
                          and float(dictsApi['r' + line + 'nc']) == float(
                              dictsDownload['r' + line + 'nc']) == float(nc)):
                    log.e('比较失败——行次', line, '\n页面:\t'
                          '期末余额', qm, '年初余额', nc, '\nAPI:\t',
                          dictsApi['r' + line + 'qm'], '年初余额',
                          dictsApi['r' + line + 'nc'], '\n文件:\t',
                          dictsDownload['r' + line + 'qm'], '年初余额',
                          dictsDownload['r' + line + 'nc'])

                    return 1
                # else:
                #     log.d('行次', line, '期末余额', qm, '年初余额', nc)
        if dictsApi['r30qm'] != dictsApi['r53qm'] or dictsApi[
                'r30nc'] != dictsApi['r53nc']:
            log.e('资产负债不平衡')

            return 1
        log.i('资产负债表页面接口对比通过')
        return 0
    except:

        r = requests.get(driver.current_url, allow_redirects=False)
        log.exception('资产负债表', r.status_code)

        return 1
Exemple #7
0
def runBack(driver):
    log.d('反结账')
    try:
        if toThird.run(driver, config.caseCompanyName, config.caseTaxId):
            time.sleep(config.FAIL_WAIT_SLEEP)
            return 1
        if commonSelenium.toPage(
                driver,
                config.domain + "/cs-third/st/settle/toSettleAccounts"):
            return 1
        lastSettleDate = driver.find_element_by_class_name('marked_words').text

        if lastSettleDate == '上次结账: 无数据':
            log.i(lastSettleDate, '测试会计月:', config.caseCurrentAccountMonth)
            return 0
        lastSettleDate = lastSettleDate.replace('上次结账至:', '')
        driver.find_element_by_id('dateTime').click()
        time.sleep(config.ACTION_WAIT_SLEEP_LONG)
        # years = document[0].year - int(driver.find_elements_by_class_name('datepicker-switch')[1].text)
        #
        # if years < 0:
        #     for i in range(-1 * years):  # <<
        #         ActionChains(driver).move_to_element(driver.find_elements_by_class_name('prev')[1]).click().perform()
        #         time.sleep(ACTION_WAIT_SLEEP_SHORT)
        # if years > 0:
        #     for i in range(years):  # >>
        #         ActionChains(driver).move_to_element(driver.find_elements_by_class_name('next')[1]).click().perform()
        #         time.sleep(ACTION_WAIT_SLEEP_SHORT)

        lastSettleYear = int(lastSettleDate.split('-')[0])
        lastSettleMonth = int(lastSettleDate.split('-')[1])
        months = driver.find_elements_by_class_name('month')
        if config.caseCurrentAccountYear * 100000 + config.caseCurrentAccountMonth <= lastSettleYear * 100000 + lastSettleMonth:

            for month in months:
                if str(lastSettleMonth) + '月' in month.text:
                    ActionChains(driver).move_to_element(
                        month).click().perform()
                    times = 0
                    maxTimes = int(config.LOAD_PAGE_TIMEOUT /
                                   config.WHILE_WAIT_SLEEP)
                    while times < maxTimes:
                        time.sleep(config.ACTION_WAIT_SLEEP_LONG)

                        if driver.find_element_by_id('checkBtn').text == '反结账':
                            driver.find_element_by_id('checkBtn').click()

                            time.sleep(config.ACTION_WAIT_SLEEP_LONG)
                            alert = driver.find_element_by_class_name(
                                'bootbox-body')

                            if alert.text == '反结账成功':
                                log.i("反结账成功", str(lastSettleDate), '月')
                                btns = driver.find_elements_by_class_name(
                                    'btn-primary')
                                for btn in btns:
                                    if btn.text == 'OK':
                                        btn.click()
                                if runBack(driver) == 0:
                                    return 0

                        else:
                            log.w(driver.find_element_by_id('checkBtn').text)
                        times = times + 1
                        if times == maxTimes:
                            log.e('反结账月份选择后等待超时')
                            return 1
        else:
            log.w(lastSettleDate, "反结账")
            return 0

        return 1

    except:
        r = requests.get(driver.current_url, allow_redirects=False)
        log.exception('反结账', r.status_code)

        return 1
Exemple #8
0
def run(driver):
    log.d('结账')
    try:
        if toThird.run(driver, config.caseCompanyName, config.caseTaxId):
            time.sleep(config.FAIL_WAIT_SLEEP)
            return 1
        if commonSelenium.toPage(
                driver,
                config.domain + "/cs-third/st/settle/toSettleAccounts"):
            return 1

        lastSettleMonth = driver.find_element_by_class_name(
            'marked_words').text
        if lastSettleMonth != '上次结账: 无数据' and int(
                lastSettleMonth.split('-')
            [1]) >= config.caseCurrentAccountMonth:
            log.w(lastSettleMonth, "不需结账")
            return 0
        driver.find_element_by_id('checkBtn').click()

        times = 0
        maxTimes = int(config.LOAD_PAGE_TIMEOUT / config.WHILE_WAIT_SLEEP)
        while times < maxTimes:
            time.sleep(config.ACTION_WAIT_SLEEP_LONG)

            if driver.find_element_by_id('checkBtn').text == '继续结账':
                driver.find_element_by_id('checkBtn').click()

                time.sleep(config.ACTION_WAIT_SLEEP_LONG)
                alert = driver.find_element_by_class_name('bootbox-body')

                if alert.text == '结账成功':
                    log.i("结账成功")
                    btns = driver.find_elements_by_class_name('btn-primary')
                    for btn in btns:
                        if btn.text == 'OK':
                            btn.click()
                    return 0
                else:

                    log.i("结账成功22222", alert.text)
            elif driver.find_element_by_id('checkBtn').text == '重新检查':

                log.e("马上检查未通过")
                lis = driver.find_elements_by_xpath(
                    "//div[@class='ckPannel']/div[3]/div/ul/li")
                for i in range(len(lis)):
                    li = driver.find_element_by_xpath(
                        "//div[@class='ckPannel']/div[3]/div/ul/li[" +
                        str(i + 1) + "]/i")
                    if li.get_attribute('class') == 'describe_i error':
                        log.w(
                            driver.find_element_by_xpath(
                                "//div[@class='ckPannel']/div[3]/div/ul/li[" +
                                str(i + 1) + "]/span[1]").text,
                            driver.find_element_by_xpath(
                                "//div[@class='ckPannel']/div[3]/div/ul/li[" +
                                str(i + 1) + "]/span[2]").text)
                return 1
            if times == maxTimes:
                log.e("结账失败-马上检查超时")
                return 1
            times = times + 1

    except:
        r = requests.get(driver.current_url, allow_redirects=False)
        log.exception('结账', r.status_code)

        return 1
Exemple #9
0
def run():
    CONN_RATE_THRESHOLD = 50  # 数据库连接使用率(%)50
    CREATE_PZ_WAIT_COUNT_THRESHOLD = 20  # 自动创建凭证积压时间(分钟)20
    HE_HE_WAIT_TIME_THRESHOLD = 120  # 合合识别积压时间(分钟)120
    PDF_WAIT_THRESHOLD = 30  # 凭证生成pdf等待数量 30
    SLEEP = 300  # 执行周期(秒)300
    while True:
        mailMsg = ''
        hour = datetime.now().hour
        if hour > 6 and hour < 21:

            log.i('数据库状态监控' + '\n数据库连接使用率警告阈值(%)' + str(CONN_RATE_THRESHOLD) +
                  '\n自动创建凭证积压时间警告阈值(分钟)' +
                  str(CREATE_PZ_WAIT_COUNT_THRESHOLD) + '\n合合识别积压时间警告阈值(分钟)' +
                  str(HE_HE_WAIT_TIME_THRESHOLD) + '\n凭证生成pdf等待数量警告阈值' +
                  str(PDF_WAIT_THRESHOLD) + '\n执行周期(秒)' + str(SLEEP) + '\n')
            try:
                retCode, warnMsg = checkConn(CONN_RATE_THRESHOLD)
                if retCode != 0:
                    # log.w(warnMsg)
                    mailMsg = mailMsg + warnMsg + '\n'
                else:

                    log.d(warnMsg)
                retCode, minutes, msg = mySqlHelper.getUnCreateWaitTime()
                if retCode != 0:
                    mailMsg = mailMsg + '自动生成凭证等待查询出错 :' + msg + '\n'
                elif retCode == 0 and minutes > CREATE_PZ_WAIT_COUNT_THRESHOLD:

                    mailMsg = mailMsg + "自动生成凭证等待时间\t" + str(minutes) + '分钟\n'
                else:
                    log.d("自动生成凭证等待时间\t" + str(minutes) + '分钟')

                retCode, minutes, msg = mySqlHelper.getUnHeHeWaitTime()
                if retCode != 0:
                    mailMsg = mailMsg + '合合识别积压查询出错 :' + msg + '\n'
                elif retCode == 0 and minutes > HE_HE_WAIT_TIME_THRESHOLD:
                    mailMsg = mailMsg + "合合识别等待时间\t" + str(minutes) + '分钟\n'
                else:
                    log.d("合合识别等待时间\t" + str(minutes) + '分钟')

                retCode, count, msg = mySqlHelper.getUnPdfCount()
                if retCode != 0:
                    # log.w(warnMsg)
                    mailMsg = mailMsg + '凭证生成pdf积压查询出错 :' + msg + '\n'
                elif retCode == 0 and count > PDF_WAIT_THRESHOLD:
                    log.w('pdfCount:', count)
                    mailMsg = mailMsg + "凭证生成pdf积压数量\t" + str(count) + '\n'
                else:
                    log.d("凭证生成pdf积压数量\t" + str(count))
                # retCode, msg = loadByHeaders('20171009-102958-845')
                # if retCode != 200:
                #     log.w('status_code:', retCode, 'msg:', msg)
                #     mailMsg = mailMsg + "third调用 code:" + str(retCode) + "  " + msg + '\n'
                retCode, msg = pageStatus()
                if retCode != 0:
                    # log.w(warnMsg)
                    mailMsg = mailMsg + '页面调用出错 :' + msg + '\n'

                if len(mailMsg) > 0:
                    mail.send("财税警告", mailMsg)
                    log.e("财税警告", mailMsg)
                else:
                    log.i('状态正常\n')
            except:
                # exc_type, exc_obj, exc_tb = sys.exc_info()
                # fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
                # print(exc_type, fname, exc_tb.tb_lineno)
                msg = log.exception('状态监控异常')

                mail.send("财税警告_状态监控异常", msg)
        time.sleep(SLEEP)
def runDelete(driver):
    log.d('原始凭证-删除凭证')
    try:

        if commonSelenium.toPage(
                driver, config.domain +
                "/cs-third/cer/certificate/toCertificateInput"):
            log.w('加载凭证录入页面超时')
            return 1

        driver.find_element_by_id('uniformCreditCode').send_keys(
            config.caseTaxId)
        driver.find_element_by_id('currentDate').click()
        years = config.caseCurrentAccountYear - int(
            driver.find_elements_by_class_name('datepicker-switch')[1].text)

        if years < 0:
            for i in range(-1 * years):  # <<
                ActionChains(driver).move_to_element(
                    driver.find_elements_by_class_name('prev')
                    [1]).click().perform()
                time.sleep(ACTION_WAIT_SLEEP_SHORT)
        if years > 0:
            for i in range(years):  # >>
                ActionChains(driver).move_to_element(
                    driver.find_elements_by_class_name('next')
                    [1]).click().perform()
                time.sleep(ACTION_WAIT_SLEEP_SHORT)
        months = driver.find_elements_by_class_name('month')
        for month in months:
            if str(config.caseCurrentAccountMonth) in month.text:
                ActionChains(driver).move_to_element(month).click().perform()
                break
        isOpenOriginCertificate = 0
        for type in range(3):

            ActionChains(driver).move_to_element(
                driver.find_elements_by_class_name('iCheck-helper')
                [type]).click().perform()

            driver.find_element_by_class_name("btn-success").send_keys(
                Keys.ENTER)
            count = int(
                driver.find_element_by_class_name('allcount').text.split('   ')
                [1][4:])

            if count == 0:
                continue
            mainWindow = driver.current_window_handle  # 保存主页面句柄

            if isOpenOriginCertificate == 0:  # 打开原始凭证
                isOpenOriginCertificate = 1
                driver.find_element_by_id("originCertificate").send_keys(
                    Keys.ENTER)
                driver.find_element_by_id(
                    "originCertificateConfirm").send_keys(Keys.ENTER)

                time.sleep(ACTION_WAIT_SLEEP_LONG)

            toHandle = driver.window_handles
            for handle in toHandle:
                if handle == mainWindow:
                    continue
                driver.switch_to.window(handle)

            for i in range(count):
                driver.find_element_by_class_name('delete').click()

                times = 0
                maxTimes = int(config.LOAD_PAGE_TIMEOUT /
                               config.WHILE_WAIT_SLEEP)
                while times < maxTimes:
                    time.sleep(config.ACTION_WAIT_SLEEP_LONG)
                    btn = driver.switch_to.active_element
                    if btn.tag_name == 'button' and btn.text == 'OK':

                        btn.click()
                        break
                    if times == maxTimes:
                        log.e("原始凭证-删除凭证等待确认超时")
                        return 1
                    times = times + 1
                time.sleep(ACTION_WAIT_SLEEP_LONG)
            driver.close()
            isOpenOriginCertificate = 0
            driver.switch_to.window(mainWindow)
            time.sleep(config.ACTION_WAIT_SLEEP_LONG)

        log.i('原始凭证-删除凭证结束')
        return 0
    except BaseException as e:
        r = requests.get(driver.current_url, allow_redirects=False)
        log.exception('原始凭证-删除凭证异常', r.status_code)
        return 1
def run(driver):
    log.d('新增凭证')
    ret, documents, msg = read_documentAdd()
    if ret != 0:
        log.e('加载凭证文件失败', msg)
        return 1
    if len(documents) == 0:
        log.w('加载凭证文件数量为0')
        return 1
    # if toThird.run(driver, documents[0][0].company_name, documents[0][0].tax_id):
    if toThird.run(driver, config.caseCompanyName, config.caseTaxId):
        print('进账簿失败', ret)
        return 1
    if toPage(driver,
              config.domain + "/cs-third/cer/certificate/toAddCertificate"):
        return 1
    # alertDiv = driver.find_element_by_id('alertDiv')
    # startX = alertDiv.location['x'] + 100 + 135
    # startY = alertDiv.location['y'] + 150

    for document in documents:

        # mouseLeftDoubleClick(driver, startX, startY)
        # driver.find_element_by_class_name('zy-text').d
        # driver.find_elements_by_class_name('zy-text')[0].

        time.sleep(config.ACTION_WAIT_SLEEP_LONG)
        ActionChains(driver).move_to_element(
            driver.find_elements_by_class_name('zy-text')
            [0]).double_click().perform()
        time.sleep(config.ACTION_WAIT_SLEEP_LONG)
        for index in range(len(document)):
            documentDetail = document[index]
            clearElement(driver.switch_to.active_element)
            driver.switch_to.active_element.send_keys(documentDetail.summary)
            driver.switch_to.active_element.send_keys(Keys.TAB)

            driver.switch_to.active_element.send_keys(
                documentDetail.account_code)

            elements = driver.find_elements_by_class_name(
                'select2-results__option')
            if len(elements) == 0:
                log.e('科目不存在', documentDetail.account_code)
                return 1
            for element in elements:
                if element.text.split(' ')[0] == documentDetail.account_code:
                    element.click()
            # driver.switch_to.active_element.send_keys(Keys.TAB)
            if documentDetail.partner_name != '\\N':  # 往来类型
                time.sleep(config.ACTION_WAIT_SLEEP_LONG)
                # driver.find_element_by_id('select2-wldw-container').click()
                time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                ActionChains(driver).move_to_element(
                    driver.find_element_by_id(
                        'select2-wldw-container')).click().perform()

                time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                driver.find_element_by_class_name(
                    'select2-search__field').send_keys(
                        documentDetail.partner_name)
                elements = driver.find_elements_by_class_name(
                    'select2-results__option')
                if len(elements) == 0 or (len(elements) == 1
                                          and elements[0].text
                                          == 'No results found'):
                    log.w('往来单位不存在', documentDetail.account_code,
                          documentDetail.partner_name)

                    driver.find_element_by_id('add_wldw').click()

                    time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                    driver.find_element_by_id('partnerName').send_keys(
                        documentDetail.partner_name)

                    time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                    driver.find_element_by_id('add_wldw_sub').click()
                    # return 1
                else:
                    for element in elements:
                        if element.text == documentDetail.partner_name:
                            element.click()

                driver.find_element_by_id('wldw_sub').click()

            time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
            # driver.switch_to.active_element.send_keys(Keys.TAB)
            if documentDetail.debit_amount != '\\N':  # 钱在借方
                elements = driver.find_elements_by_class_name('jf-je-text')
                time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                elements[index].click()
                clearElement(driver.switch_to.active_element)
                driver.switch_to.active_element.send_keys(
                    str(documentDetail.debit_amount))  # 如果钱在借方。 tab时直接换行
            else:
                elements = driver.find_elements_by_class_name('df-je-text')
                time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
                elements[index].click()
                # clearElement(driver.switch_to.active_element)  # 清空借方默认金额
                # driver.switch_to.active_element.send_keys(Keys.TAB)
                clearElement(driver.switch_to.active_element)
                driver.switch_to.active_element.send_keys(
                    str(documentDetail.credit_amount))
            if (index != len(document) - 1):
                driver.switch_to.active_element.send_keys(Keys.TAB)

        time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
        driver.find_element_by_id('btn_xzpz_add_and_save').send_keys(
            Keys.ENTER)
        time.sleep(config.ACTION_WAIT_SLEEP_SHORT)
        times = 0
        maxTimes = int(LOAD_PAGE_TIMEOUT / WHILE_WAIT_SLEEP)
        while (times < maxTimes):
            if ('零元整' == driver.find_element_by_id('hjjesx').text):
                break
            times = times + 1
            if times == maxTimes:
                log.e('新增凭证保存等待 超时')
                return 1
            time.sleep(WHILE_WAIT_SLEEP)

    log.i('新增凭证完成')
    return 0
Exemple #12
0
def set_host(host):
    global domain
    global domain_cs_info
    global domain_api
    global dbHost
    global dbPort
    global dbUser
    global dbPasswd
    global dbPlatform
    global dbLog
    global hostSource
    hostSource = host
    if host==HOST_SOURCE_ON_LINE:

        log.i('设置环境参数-生产环境')
        domain = 'http://sstax.cn:1000/'

        domain_cs_info = 'http://sstax.cn:1000/'
        domain_api = 'http://sstax.cn:1000/'
        dbHost = '222.73.99.99'
        dbPort = 3030
        dbUser = '******'
        dbPasswd = 'Pwd!2018@db'
        dbPlatform = 'cs_platform'
        dbLog = 'cs-log'
    elif host==HOST_SOURCE_PRE:


        log.i('设置环境参数-预发布环境')
        # domain = 'http://pre.sstax.cn:81/'
        # domain = 'http://61.153.190.93:18080'
        # domain_cs_info = 'http://61.153.190.93:18080'
        # domain_cs_info = 'pre.sstax.cn:81'
        domain = 'http://101.89.137.10:48080'
        domain_cs_info = 'http://101.89.137.10:48080'
        # domain_api = 'http://pre.sstax.cn:81'
        domain_api = 'http://sstax.cn:1000/'
        dbHost = '222.73.99.99'
        dbPort = 3031
        dbUser = '******'
        dbPasswd = 'Pwd2018db'
        dbPlatform = 'pre_cs_platform'

        dbLog = 'pre-cs-log'
    elif host == HOST_SOURCE_ON_XI_AN:


        log.i('设置环境参数-西安环境')
        domain = 'http://101.89.137.10:48080'
        domain_cs_info = 'http://101.89.137.10:48080'
        # domain_api = 'http://pre.sstax.cn:81'
        domain_api = 'http://sstax.cn:1000/'
        dbHost = '222.73.99.99'
        dbPort = 3031
        dbUser = '******'
        dbPasswd = 'Pwd2018db'
        dbPlatform = 'pre_cs_platform'

        dbLog = 'pre-cs-log'
    elif host == HOST_SOURCE_ON_YUN_NAN:

        log.i('设置环境参数-云南环境')
        domain = 'http://61.153.190.93:18080'
        domain_cs_info = 'http://61.153.190.93:18080'
        domain_api = 'http://61.153.190.93:18080/'
        dbHost = '222.73.99.99'
        dbPort = 3031
        dbUser = '******'
        dbPasswd = 'Pwd2018db'
        dbPlatform = 'pre_cs_platform'
        dbLog = 'pre-cs-log'
    elif host == HOST_SOURCE_ON_JIN_KAI_QU:

        log.i('设置环境参数-金开区环境')
        domain = 'http://101.91.230.16:28080'
        domain_cs_info = 'http://101.91.230.16:28080'
        domain_api = 'http://101.91.230.16:28080/'
        dbHost = '222.73.99.99'
        dbPort = 3031
        dbUser = '******'
        dbPasswd = 'Pwd2018db'
        dbPlatform = 'pre_cs_platform'
        dbLog = 'pre-cs-log'
    elif host == HOST_SOURCE_ON_NAN_CHANG:

        log.i('设置环境参数-南昌环境')
        domain = 'http://183.134.73.180:18080'
        domain_cs_info ='http://183.134.73.180:18080'
        domain_api = 'http://183.134.73.180:18080'
        dbHost = '222.73.99.99'
        dbPort = 3031
        dbUser = '******'
        dbPasswd = 'Pwd2018db'
        dbPlatform = 'pre_cs_platform'
        dbLog = 'pre-cs-log'
    else:
        log.w('未设置环境参数 ')

        hostSource = None
    dbHost = '222.73.99.99'
    dbPort = 3030
    dbUser = '******'
    dbPasswd = 'Pwd!2018@db'
    dbPlatform = 'fs-admin'
    dbLog = 'cs-log'