{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "距离今天还有120天的日期是:2024-04-03\n", "31\n", "27\n", "读取到省市小六技术专家区域客服区域客成表单中 347 条数据!\n", "{'result': 'a822eb03-495f-4d1d-81db-bf3e896e5ffe'}\n", "Rtzbs7KTJCtNyl//Q4r0oXkRkUjXsMVak4vGfMcDAZ+WYTAuipzmGq2VjlDBqUpltu9QvD7OVsL+jWOZ2u6Cb83vviPzZVs0teObNhqfgyRFbBWKe6fZYEwyfpuiC9k9+Gk/iKe8klBq5p7TCsX1TqzCeJtw1pj7\n", "数据新建成功!\n", "{'result': 'cf8f8576-e2c6-471e-9a08-4596b70b2686'}\n", "8STzhl9v9IbhsuxbVkDInw+HIbnApfx6YXEDyfl8RLoFx08cQP8W7rImu+K0Fe9oChy9yRE+SVw6i40xckrnFvCdyANP3cbvOzH1JBPh2pFex3bHoZkyVQuauBmKIjq3jyM1s7fmuQDsMBmggG/7NtlfQKIfUODa\n", "数据新建成功!\n", "{'result': 'ef2a2773-17eb-4a83-8ba7-20d681259df6'}\n", "k6lTmkc6/s45oRqsmEB3QsntFW34AQEr0XvhLyaL0WM0TyCO/Teb6eY64BYkU4hiscqeKONpOdG3G2dZYD+B49RG8JuVkZYrkjf7Lbdu4c1bJRnD4eOxM8QcS3JtSrcyTxiMak3DPodhMc2ewNPjpvtOh38A+y19\n", "数据新建成功!\n", "{'result': '6f2e1ce8-6143-48ea-8020-51710e7933f3'}\n", "EBuAbsEOICvT+yvy0w+p9BghrN05jBMcJu9WmJiCSDef9YgfmGecB5ZNjaUV7BkR96Jv7BJtWJEQ6h3yKA2kX1ihLkupdvw6j7fzydpMlbiQmZiijOJPQKtwWSf3WH1Wt9pZUcfX9uxS5jjFHkxMxK8KX5AYvfWj\n", "数据新建成功!\n", "{'result': '70cef930-35c8-4104-9700-9f3ad063dff7'}\n", "olpMCx6wnHf3uF7w1hOUn+Ug4dMG/XA87g2NpYlBPEr5duDPIOCJ/xH8CExjc1cNR5RuCX7C6BJlHGm0+LksWLAMA1/iSORNVOQbiN9Y+cO8A40pa2XY/AbnA6XzbCHrOzuJO2wbpzeqdW2mc1e1vGe+tYB1KtrI\n", "数据新建成功!\n", "{'result': '2ae1765e-3ba8-4443-8cbe-a4ede2a909a9'}\n", "JHpAj7PWmB//AAzsgz2DBpaPpYG73PsiMH62C65h1IHo5rcJvU0hv+Pgmiq9vyFBO6Ds71yZ/l3UpwTl31xEvGYbnRgufyDGHZNenCHe4zxYhRBbXxK7nZmDP+qA1LLhPJgBA2iOjZZYaohwmSms5jSF5rIMkVBE\n", "数据新建成功!\n", "{'result': 'ef6e9924-122c-4150-a2ce-4811a7ff8e6d'}\n", "gBEGJS0RFd0bl0oXtNcl2zhB9O16dJYuY9y6ZMCGs+XgYqknW4qdWXkN7RXXBSTEL/LZru69q5b7nVRocpO+JNr6fBh5ELxvAIAUjss6bLMAGfQAzKteDrCvnHuNy/h5KuL58YJPPBna8d7ii59vWvW+SxD6tQxn\n", "数据新建成功!\n", "{'result': 'b95fff04-011d-470b-aee1-c533aa910cb4'}\n", "9BPpx17zNyqi7Wtlf4L6th2wBWL/Xa7bAynodxikfeu4yRVRgdcAlyZXOPMJiCYAATpSoqCF7Thd/ZsYBUhGQHdFn1UQo+M4e80fGPJd2RTayO7JWt7whb5Y32HdbcILA9XNCqKuAG7HAkQRZOL0uCjzTAaYnvKQ\n", "数据新建成功!\n", "{'result': 'e51853d7-ba54-4fba-8122-d5c4d1ff2911'}\n", "QW0o2GKZayoCiEyFvvK0ZssdgN4VZv8ZFQ8bLGrjXgj4cWqo9n1m0zERZMAzfzhPLPGsK1tmJJzx/P8WsoIPqyl5mrApmPX5+jpy2xrrcpD33UU2IQvZv9LDfq/x3oq91CCB7XNnTd9/qXWuYsMsjNzew3lah/0U\n", "数据新建成功!\n", "{'result': 'e7db2f63-75ae-4d32-a915-4854f4dd6f76'}\n", "Y9fCugvB0IA44wxOFJhyEkwteAvfcS22btNOeWKF6eJ7uuV9bRJxotBujRciNu0tzpjPXYB22EKEiAQ7Sereqtp71VHZ6dv4oUJSyxZghFvJYb87BDiYRLlW1T0P60bh6ZdxPGbSW4FrCmmtSYiCVHczqD3f2avb\n", "数据新建成功!\n", "{'result': 'e808a707-9901-405d-80b4-5dfc9eafe524'}\n", "MTJC8RzDkR4KBd1oyvzf6vxMOZHPJ+kGzcBD64fVgkjHdSqndcGVJ80R2q5eMwj7Z3eKDORrKxzhe2BpOuGr1qvp6jbYbijTsgCu7CNLuMGJPWDatvjWxm6FDbpTCRKLYbVS2NfFI7hWcUBwFsw7O+nrt1UsLSbH\n", "数据新建成功!\n", "{'result': 'f9788c3d-1bd6-453d-b1c4-75966da5bb7a'}\n", "IGHZi/Q/UQdoVxfh0AhInpyhjiiSUkUOIMn5TFionL0lUMRgDe3qbLjE9njWIPkSpL4fRTzYsDEPOZfGqyCI8oqXawvNoaJFJ/tnowdFS61ns9L0gdbcr+QP/4HiqaBj3HW06Bl57saEdpE2VLdUaoDL3CfAJ4iK\n", "数据新建成功!\n", "{'result': '42bfda6b-fd04-459c-b5e5-a4d9fa526377'}\n", "ZWoJ5BvugoTXRzmONdtsNxbwDQXUiR6WZGCNcn3RW5bbXqLDilffBpDTtwfkex+ZtCiPMYqccfFzV4Mi/05raQvVVcr9ATgPlFxrr1jTcYxa16h3OEiN0pQCDOCEW58ABOu9x3JN1w/2TQLV6miNC12tflfU3GaK\n", "数据新建成功!\n", "{'result': '6f05e352-6814-4594-bf72-190b99d807d4'}\n", "0qNE2Vch567jLvPRH8NA1CZJDO7eYm0Irv8VlEiV6yQX5RHf07nUGMK6bj9sh8YBcOedEUkOruh/DdzbhrhKjomq/kvPGWJ+u57CqasB4NDBtSr8HP+OUrcg5DvYo6yNkbcpiUCZXNIfVu9U+CdT66Ggkg9AUn6E\n", "数据新建成功!\n", "{'result': '66195a7c-1911-4418-9b27-72bb2961c13e'}\n", "iIIBla/MuTy35RFUmN8r7v2KFcby+lRUOrc+TexTJqgIxRNf//j2LcKopdudvJoxU/w2977PEHRnThQpjQDaO4E/NSAflqb1hQm3Da+T24txI+8ToknucJfGncB0C8JCepId2C1+Iy6vaOR+oWnQHHaToCjh+8wG\n", "数据新建成功!\n", "{'result': '70f62c50-647b-4e4a-9fb6-b73012ce1e87'}\n", "qlUsDiMdhj1YJknBOpIsBrxO0J2Y22KtM3PBNYhSRMq1hCVQPxaM0boPSBRYengoYSSkzZaQvOFAomUWRcsJzTSeVQvlTN6R/T55kxL/rj4ILptNiNIzVQYeutagdfNAx2P5c+gB2s0zP17b6cKTw2l8RE3v/7ot\n", "数据新建成功!\n", "{'result': '00eb1ea4-0a35-4db4-8ff7-99e529021376'}\n", "8CX3O9nnn9g5o1YdqhHS/2ZRKeZV8OgNL7fkV2Qt0GYoPyIzyPzexFuWtQK3GRA/XdoEs1HELX5xeqg4gR6V/G+F//c4Fl6rSnre3CXBehcIMDxlakflKPrnnKFgD22mHtXhWsulnuBRZ2OCHavxo2di8DyKCaFk\n", "数据新建成功!\n", "{'result': '2529580c-ca83-453a-9ca7-54d835233e98'}\n", "zuvgm2APT6qcTZsTSq5E/WIomVBGFxlo85FSBLnY/3ysqC/8+t+0rVMFvAY67BHoBoqjwPm50AZpHpP0ryzIc8jMHnm8RKIyG7Knb5Avt3h+C3lPhRHyT/zEND6oBK/kZSlC1AUEhk2JMsJOYYQ7f2POOulJbrzN\n", "数据新建成功!\n", "{'result': 'd62d61d3-5787-49dc-8c5e-039592096440'}\n", "jeDcswysL+NgRXidG28X8M29Pdgyn3ElvYiOQQsNmezLmQtRG4QGc//+DHvUqpr1sBE312BAkoPrFDsOMbdJOuKv7m8hS0cosnS5k1r9l3xAOWDwfqEBJluXMbTXJBs7Ggj1K+TuLgAkA/5Mjnao6Flk0a0rKbTX\n", "数据新建成功!\n", "{'result': '68658c9b-bde0-4e7c-990b-32d0c1b0e3bd'}\n", "2Q0rs+M5dHPv2VLPQr4ghPrDqRbbLYBJVC3XX6OOHYvk5PBe0LbgfPto624GYuaSCO7+ImjM0DTsQcUqcXWstuEaVuoaoWIrtKAmtaJ1V33t27OJ99zHa5W1HUva/VUwDaZfBJOgjQEJedWh9BtLJfCW1UBN/eA4\n", "数据新建成功!\n", "{'result': 'c2e7a817-781d-4eb4-a689-900467941e0d'}\n", "0DfldlU1UWJDfNqYWbS0PXMbMc6d4hBBbgXifondP4ssRiUmNWeUgZ9RbqIzYDipa8mSSjzooeTAlsHXKS2KmC5rfq7eFsmLXUyVYXLrBRkBs39YFVTrY68rwdRP9mWofmgjnYRjU5lzmh2eqWs/5gIKPxv8OmKM\n", "数据新建成功!\n", "{'result': '9788b353-892e-4f31-8e9c-a276e6ed077f'}\n", "QjwgQbe49ds3pkkD6aM9Bc8Ut6ohRj2BL6eEQ1lKWLtqSwle/zWtWZBY3i+ixC4/p9hIMrtlnq6UFiywOHj0xMz6PihX93gdBdNgxZui1SG5vK4wDLjqlJCkpBaNbnBIis10NhZ2MWN1wMLXkIrb/qiXxj1qyoyx\n", "数据新建成功!\n", "{'result': '3939bfad-c6db-45bf-b22f-c06ef9729284'}\n", "Z4Up8HVkd3gPKI1qpcp2TA3qHYuHKVq2FT5Azu/hkKw1riyF6gcyEibl7SRXWcaTcnsnsKAQPyiHKnUBHTXUofg1EfkqF54GM9cZuVPloXndDE74ADG1uX+fSKgKnC8Q9lz2isRjg3gpGDFbscvA3Hu5dPPpR5jp\n", "数据新建成功!\n", "{'result': 'c6c57896-e169-4fa1-9c41-9e13b6355167'}\n", "3WMORAXAgZ/QzkE8ftDMGbgJdvwusZGZ8KajwBUVdxrvMxdUoSb5H68JAakIDCfqa9lp0V2jN0X3msZ8lW2ecKy3O9ZmJih4XqUWirvwyK//pR2BIsa812N5olBKc4II177RKndjcb71G99YrGDoWmoUjsDoaRLI\n", "数据新建成功!\n", "{'result': '8ff86b3a-b07e-4e30-a470-571d70e5056f'}\n", "CwDVPuGeCLeF766AnoxcbS2LuAZ+pHrDlhG3Pe43mx6+nQAQUxUk0vkBBgcSFtCWiPHVoGyLfs8Q4COkMy8UaRxmr8a1ZhR7O7OMpqbFXi2Mmsa5BRwL7OeYpfQCSiBwVtMLbuVOpdkedpGs9jeTxxGAAg3OfArM\n", "数据新建成功!\n", "{'result': '770f16b4-b34f-4f65-85f2-aa202733bf97'}\n", "lS/KWlhvwkr3Mp72w6ZSMLZlWjXYPCoYhkOjVBjF9UCOAcvP/2FnGKdd+sDKJMHpYk15hGCFQ/3VRBhjIi7Ngi9OzvISyE7a8i6dTmOmlhk0LHlp5l0pZH01nC+CFwr5b+CnPKA1hAI+hjfzAMA6oej+HdAL9umf\n", "数据新建成功!\n", "{'result': 'fb666f44-fb43-457a-a391-8ccd3815581f'}\n", "g89Yg/7txappZorcPA4/T1L5Np32/2ZGKaISrQaf2y01bMKjCsqkB7Azie97H39IVvuYyuE58WIF9QsH3paqhi02hQkM0q+WtBNehQTIjWbg3wb04jo5itWIju1rIhG+jQunkeW2krLnBFyvaXiYPGeyppyRKaDz\n", "数据新建成功!\n" ] } ], "source": [ "# -*- coding: utf-8 -*-\n", "import psycopg2\n", "import pandas as pd\n", "from datetime import date, timedelta\n", "# 获得连接\n", "conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n", "# 获得游标对象,一个游标对象可以对数据库进行执行操作\n", "cursor = conn.cursor()\n", "\n", "import datetime\n", "now_time = datetime.datetime.now()\n", "\n", "# now_time = now_time + datetime.timedelta(days=-1)\n", "\n", "yes_time = now_time + datetime.timedelta(days=-2)\n", "yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n", "\n", "today = date.today()\n", "days_to_add = 120\n", "future_date = str(today + timedelta(days=days_to_add))\n", "# 输出结果\n", "print(\"距离今天还有{}天的日期是:{}\".format(days_to_add, future_date))\n", "# sql语句 建表\n", "sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}' and \"expiry_time\" like '%{future_date}%';\"\"\"\n", "# 执行语句\n", "cursor.execute(sql)\n", "# 获取结果集的每一行\n", "rows = cursor.fetchall()\n", "# 获取所有字段名\n", "all_fields = cursor.description\n", "#执行结果转化为dataframe\n", "col = []\n", "for i in all_fields:\n", " col.append(i[0])\n", "data_NGV = pd.DataFrame(list(rows),columns=col)\n", "# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n", "print(len(data_NGV))\n", "# 关闭数据库连接\n", "cursor.close()\n", "conn.close()\n", "chonfushuju = pd.read_excel(r\"C:\\Users\\admin\\Downloads\\[流程]续约服务流程_20231205111321.xlsx\",sheet_name=\"Sheet1\")\n", "# 使用isin()函数判断B表中的门店编码是否在A表中存在\n", "mask = data_NGV['org_code'].isin(chonfushuju['门店编码'])\n", "\n", "# 使用布尔索引筛选出不在A表中的数据\n", "result = data_NGV[~mask]\n", "\n", "# 重置索引的dataframe\n", "data_NGV = result.reset_index(drop=True)\n", "print(len(data_NGV))\n", "\n", "# 基础函数配置\n", "import pandas as pd\n", "import pandas as pd\n", "import requests\n", "from pathlib import Path\n", "from urllib.parse import quote\n", "import json\n", "import numpy as np\n", "import time\n", "from datetime import date, timedelta\n", "\n", "ROOT = Path('.').absolute() # 当前工作目录\n", "\n", "def generateToken() -> str:\n", " \"\"\" 生成 token \"\"\"\n", "\n", " token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'\n", "\n", " # 该信息在钉钉开放应用中\n", " data = {\n", " \"appKey\": \"ding5kqocon5s9oph5uq\",\n", " \"appSecret\": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'\n", " }\n", "\n", " res = requests.post(token_api, json=data)\n", " token = res.json()['accessToken']\n", "\n", " return token\n", "\n", "def read_instances(token, formUuid, page, n):\n", " \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n", "\n", " api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": token\n", " }\n", "\n", " formData = {\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " \"userId\" : \"yida_pub_account\",\n", " \"language\" : \"zh_CN\",\n", " \"formUuid\" : formUuid,\n", " \"currentPage\" : page,\n", " \"pageSize\" : n\n", " }\n", "\n", " res = requests.post(api, headers=headers, json=formData)\n", " return res.json()\n", "\n", "def read_delete(token, formInstanceId):\n", " \"\"\" 函数功能:调用本接口删除表单数据。 \"\"\"\n", "\n", " api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": token\n", " }\n", "\n", " formData = {\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " \"userId\" : \"yida_pub_account\",\n", " \"language\" : \"zh_CN\",\n", " \"formInstanceId\" : formInstanceId\n", " }\n", "\n", " res = requests.delete(api, headers=headers, json=formData)\n", " return res.json()\n", "\n", "def read_new(FORMID,formData):\n", " \"\"\" 通过实例id 获取表单内容 \"\"\"\n", " api = f'https://api.dingtalk.com/v1.0/yida/forms/instances'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": TOKEN\n", " }\n", " payload = {\n", " \"formUuid\" : FORMID,\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " \"language\" : \"zh_CN\",\n", " \"userId\" : \"yida_pub_account\"\n", " }\n", "\n", " res = requests.post(api, headers=headers, json=payload)\n", " print(res.json())\n", "\n", " return res.json()\n", "\n", "\n", "def component(FORMID,TOKEN):\n", " \"\"\" 获取组件信息 \"\"\"\n", " api = f'https://api.dingtalk.com//v1.0/yida/forms/formFields'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": TOKEN\n", " }\n", " payload = {\n", " \"formUuid\" : FORMID,\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " # \"language\" : \"zh_CN\",\n", " \"userId\" : \"yida_pub_account\"\n", " }\n", "\n", " res = requests.get(api, headers=headers, json=payload)\n", "\n", " return res.json()\n", "def initiate_process(TOKEN,formData):\n", " \"\"\" 发起宜搭审批流程 \"\"\"\n", " api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": TOKEN\n", " }\n", " payload = {\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " \"userId\" : \"yida_pub_account\",\n", " \"language\" : \"zh_CN\",\n", " \"formUuid\" : \"FORM-PE866MD1MJMU0WGLYRFLYEN5YN9L1I55Z7ZUK22\",\n", " \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n", " \"processCode\" : \"TPROC--PE866MD1MJMU0WGLYRFLYEN5YN9L1885Z7ZUK32\",\n", " }\n", "\n", " res = requests.post(api, headers=headers, json=payload)\n", " return res.json()\n", "\n", "def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):\n", " \"\"\" 批量删除表单实例 \"\"\"\n", " api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": TOKEN\n", " }\n", "\n", " payload = {\n", " \"formUuid\" : FORMID,\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " \"asynchronousExecution\" : \"true\",\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " \"formInstanceIdList\" : json.dumps(ALL_DATA_instance, cls=NpEncoder),\n", " \"userId\" : \"yida_pub_account\",\n", " \"executeExpression\" : \"false\" # 不触发\n", " }\n", "\n", " res = requests.post(api, headers=headers, json=payload)\n", " return res.json()\n", "\n", "def delete_in(TOKEN,formInstanceIdList):\n", " \"\"\" 逐条删除表单实例 \"\"\"\n", " api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": TOKEN\n", " }\n", " res = requests.delete(api, headers=headers)\n", " return res.json()\n", "\n", "class NpEncoder(json.JSONEncoder):\n", " def default(self, obj):\n", " if isinstance(obj, np.integer):\n", " return int(obj)\n", " elif isinstance(obj, np.floating):\n", " return float(obj)\n", " elif isinstance(obj, np.ndarray):\n", " return obj.tolist()\n", " else:\n", " return super(NpEncoder, self).default(obj)\n", " \n", "import binascii\n", "import time\n", "import random\n", "from pyDes import des, CBC, PAD_PKCS5\n", "import requests\n", "\n", "def des_encrypt(s):\n", " \"\"\"\n", " DES 加密\n", " :param s: 原始字符串\n", " :return: 加密后字符串,16进制\n", " \"\"\"\n", " secret_key = 'HwdMBW8o'\n", " iv = secret_key\n", " k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)\n", " en = k.encrypt(s, padmode=PAD_PKCS5)\n", " return binascii.b2a_base64(en, newline=False)\n", "\n", "\n", "def des_descrypt(s):\n", " \"\"\"\n", " DES 解密\n", " :param s: 加密后的字符串,16进制\n", " :return: 解密后的字符串\n", " \"\"\"\n", " secret_key = 'HwdMBW8o'\n", " iv = secret_key\n", " k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)\n", " de = k.decrypt(binascii.a2b_base64(s), padmode=PAD_PKCS5)\n", " return de\n", "\n", "TOKEN = generateToken() \n", "'''读取省市小六技术专家区域客服区域客成 '''\n", "FORMID = \"FORM-TP866D918DFCA4FW79YZU5X43FO32QZJQDZJL7\" #省市小六技术专家区域客服区域客成\n", "try:\n", " # 读取流程表单数据\n", " form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n", " PAGES = form_data.get('totalCount')//100 + 1\n", " textField_gif29wy = {}\n", " textField_3athky8 = {}\n", " textField_3hgho1m = {}\n", " textField_nc7gskc = {}\n", " \"\"\" 获取全量数据 \"\"\"\n", " for i in range(1, PAGES+1):\n", " # form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})\n", " form_data = read_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)\n", " for data in form_data.get('data'):\n", " textField_gif29wy[data['formData']['textField_m3hchxc']]=data['formData']['textField_gif29wy'] #区域客成id\n", " textField_3athky8[data['formData']['textField_m3hchxc']]=data['formData']['textField_3athky8'] #区域客服id\n", " textField_3hgho1m[data['formData']['textField_3hgho1m']]=data['formData']['textField_3hgho1m'] #小六id\n", " textField_nc7gskc[data['formData']['textField_nc7gskc']]=data['formData']['textField_nc7gskc'] #技术专家id\n", " print(f'读取到省市小六技术专家区域客服区域客成表单中 {len(textField_gif29wy)} 条数据!')\n", "\n", "\n", " '''遍历数据进行新建'''\n", " data_NGV = data_NGV.astype('string')\n", " data_NGV = data_NGV.fillna('',inplace=False)\n", " group_grade = {\n", " \"普通客户(VIP)\":10,\n", " \"重要客户(SVIP)\":20,\n", " \"区域KA(MVP)\":30,\n", " \"全国KA(FMVP)\":50\n", " }\n", " # 过滤数据\n", " for i in range(0,len(data_NGV[\"date_fmt\"])):\n", " try:\n", " t = time.time()\n", " ts = int(round(t * 1000))\n", " randint = random.randint(100000000, 999999999)\n", " req = data_NGV['id_own_org'][i] + \"_\" + str(ts) + \"_\" + str(randint)\n", " str_en = des_encrypt(req)\n", " req_new = str_en.decode('utf-8')\n", "\n", " url = f\"http://manage.f6yc.com/hive-admin/py/yida/renewal/orgInfo\"\n", " data = {\n", " 'req':req_new,\n", " 't':ts,\n", " 'r':randint\n", " }\n", " res = requests.post(url,data=data)\n", " formData = res.json()['data']['yidaFormData']\n", " # 过期日期的时间戳\n", " expire_timestamp = int(formData['dateField_ksirro5l'])/1000\n", "\n", " # 获取距离过期日期前120天,前90天,前60天,前30天的日期\n", " expire_date = datetime.datetime.fromtimestamp(expire_timestamp)\n", " before_90_days = expire_date - datetime.timedelta(days=90)\n", " before_60_days = expire_date - datetime.timedelta(days=60)\n", " before_30_days = expire_date - datetime.timedelta(days=30)\n", " # print(formData)\n", " formData['dateField_ljzefdm4'] = str(int(before_90_days.timestamp()*1000)) # 90天限制日期\n", " formData['dateField_ljzefdm5'] = str(int(before_60_days.timestamp()*1000)) # 60天限制日期\n", " formData['dateField_ljzefdm6'] = str(int(before_30_days.timestamp()*1000)) # 30天限制日期\n", "\n", "\n", " employeeField_kykw5ege = str(formData['employeeField_kykw5ege'])\n", " employeeField_ksydghrd = str(formData['employeeField_ksydghrd'])\n", " formData['employeeField_ljz6gvwc'] = f\"['{textField_gif29wy[formData['textField_kuj8nx01']]}', '{textField_3athky8[formData['textField_kuj8nx01']]}']\" # 区域客成+区域客服\n", " # formData['employeeField_ljz6416i'] = f\"[{textField_gif29wy[formData['textField_kuj8nx01']]}, {employeeField_kykw5ege}]\" # 区域客成+小六\n", " formData['employeeField_ljz6416i'] = f\"['{textField_gif29wy[formData['textField_kuj8nx01']]}', '{employeeField_kykw5ege}']\" # 区域客成+小六\n", " formData['employeeField_ljz6416j'] = f\"['{textField_gif29wy[formData['textField_kuj8nx01']]}', '{employeeField_ksydghrd}']\" # 区域客成+技术专家\n", " formData['employeeField_ljz6gvwd'] = textField_3athky8[formData['textField_kuj8nx01']] # 区域客服\n", " formData['employeeField_ksydght0'] = textField_gif29wy[formData['textField_kuj8nx01']] # 区域客成\n", "\n", " if employeeField_kykw5ege ==\"1824534815658365\" or employeeField_kykw5ege ==\"0627252740652855\": \n", " if employeeField_ksydghrd ==\"\":\n", " employeeField_kykw5ege = '0627252740652855'\n", " formData['employeeField_ljz6gvwc'] = '0627252740652855' # 区域客成+区域客服\n", " formData['employeeField_ljz6416i'] = '0627252740652855' # 区域客成+小六\n", " formData['employeeField_ljz6416j'] = '0627252740652855' # 区域客成+技术专家\n", " formData['employeeField_ljz6gvwd'] = '0627252740652855' # 区域客服\n", " formData['employeeField_ksydght0'] = '0627252740652855' # 区域客成\n", " formData['employeeField_kykw5ege'] = '0627252740652855' # 专属运营顾问\n", " formData['employeeField_ksirro5o'] = '0627252740652855' # 续约绩效归属人\n", " else:\n", " employeeField_kykw5ege = employeeField_ksydghrd\n", " formData['employeeField_ljz6gvwc'] = employeeField_ksydghrd # 区域客成+区域客服\n", " formData['employeeField_ljz6416i'] = employeeField_ksydghrd # 区域客成+小六\n", " formData['employeeField_ljz6416j'] = employeeField_ksydghrd # 区域客成+技术专家\n", " formData['employeeField_ljz6gvwd'] = employeeField_ksydghrd # 区域客服\n", " formData['employeeField_ksydght0'] = employeeField_ksydghrd # 区域客成\n", " formData['employeeField_kykw5ege'] = employeeField_ksydghrd # 专属运营顾问\n", " formData['employeeField_ksirro5o'] = employeeField_ksydghrd # 续约绩效归属人\n", " if formData['textField_kycfic6o'] == \"区域KA(MVP)\" or formData['textField_kycfic6o'] == \"全国KA(FMVP)\":\n", " formData['employeeField_ljz6gvwc'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n", " formData['employeeField_ljz6416i'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n", " formData['employeeField_ljz6416j'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n", " formData['employeeField_ljz6gvwd'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n", " try:\n", " formData['textField_ksirro5g'] = group_grade[data_NGV['group_grade'][i]]\n", " formData['textField_kycfic6o'] = data_NGV['group_grade'][i]\n", " except:\n", " pass\n", " res_new = initiate_process(TOKEN,formData)\n", " time.sleep(2)\n", " print(res_new)\n", "\n", " # 回传信息-------------------------------------------------------------------------------------------------------------\n", " default_new = True\n", " a_len = 1\n", " while default_new:\n", " t = time.time()\n", " ts = int(round(t * 1000))\n", " randint = random.randint(100000000, 999999999)\n", " req = res_new['result'] + \"|\" + formData['textField_kuntp6fk'] + \"|\" + formData['textField_kuntp6fl']+ \"|\" + formData['employeeField_kykw5ege'] + \"_\" + str(ts) + \"_\" + str(randint)\n", " str_en = des_encrypt(req)\n", " print(str_en.decode('utf-8'))\n", " req_new = str_en.decode('utf-8')\n", " url = f\"http://manage.f6yc.com/hive-admin/py/yida/renewal/insertRenewalFormsData\"\n", " data = {\n", " 'req':req_new,\n", " 't':ts,\n", " 'r':randint\n", " }\n", " res = requests.post(url,data=data)\n", " res.json()\n", " \n", " if res.json()['message'] == \"SUCCESS\":\n", " default_new = False\n", " a_len = a_len + 1\n", " if a_len > 5:\n", " default_new = False\n", " time.sleep(1)\n", " '''校验是否新建正常'''\n", " FORMID = \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\" \n", "\n", " if a_len < 5:\n", " print(\"数据新建成功!\")\n", " else:\n", " def start_instance_process(token: str, name):\n", "\n", " \"\"\"发送宜搭表单 -- 发起流程表单\n", "\n", " Args:\n", " token \n", " data:需要发送的数据字典\n", " \"\"\"\n", "\n", " yida_api = \"https://api.dingtalk.com/v1.0/yida/processes/instances/start\"\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": token\n", " }\n", "\n", " send_data = {\n", " \"textField_l9fe0uiw\": name,\n", " \"textField_l9fe0uiv\": name\n", " }\n", "\n", " payload = {\n", " \"appType\": \"APP_TNVBVZ3K8G56HG03Z45Q\",\n", " \"systemToken\": \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n", " \"userId\": \"yida_pub_account\",# 超级管理员账号\n", " \"language\": \"zh_CN\",\n", " \"formUuid\": \"FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2\",\n", " \"formDataJson\": json.dumps(send_data),\n", " \"processCode\":\"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2\"\n", " }\n", "\n", " res = requests.post(yida_api, headers=headers, json=payload)\n", " return res\n", " try:\n", " name = f\"[流程]续约服务流程 新建后接口回传失败,请检查!{data_NGV['id_own_org'][i]}\"\n", " res_yujing = start_instance_process(TOKEN,name)\n", " except:\n", " pass\n", " except:\n", " '''校验是否新建正常'''\n", " FORMID = \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\" \n", " def start_instance_process(token: str, name):\n", "\n", " \"\"\"发送宜搭表单 -- 发起流程表单\n", "\n", " Args:\n", " token \n", " data:需要发送的数据字典\n", " \"\"\"\n", "\n", " yida_api = \"https://api.dingtalk.com/v1.0/yida/processes/instances/start\"\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": token\n", " }\n", "\n", " send_data = {\n", " \"textField_l9fe0uiw\": name,\n", " \"textField_l9fe0uiv\": name\n", " }\n", "\n", " payload = {\n", " \"appType\": \"APP_TNVBVZ3K8G56HG03Z45Q\",\n", " \"systemToken\": \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n", " \"userId\": \"yida_pub_account\",# 超级管理员账号\n", " \"language\": \"zh_CN\",\n", " \"formUuid\": \"FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2\",\n", " \"formDataJson\": json.dumps(send_data),\n", " \"processCode\":\"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2\"\n", " }\n", "\n", " res = requests.post(yida_api, headers=headers, json=payload)\n", " return res\n", " try:\n", " name = f\"[流程]续约服务流程 未成功新建,请检查!{data_NGV['id_own_org'][i]}\"\n", " res_yujing = start_instance_process(TOKEN,name)\n", " except:\n", " pass\n", "except:\n", " '''校验是否新建正常'''\n", " FORMID = \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\" \n", " def start_instance_process(token: str, name):\n", "\n", " \"\"\"发送宜搭表单 -- 发起流程表单\n", "\n", " Args:\n", " token \n", " data:需要发送的数据字典\n", " \"\"\"\n", "\n", " yida_api = \"https://api.dingtalk.com/v1.0/yida/processes/instances/start\"\n", "\n", " headers = {\n", " \"Content-Type\": \"application/json\",\n", " \"x-acs-dingtalk-access-token\": token\n", " }\n", "\n", " send_data = {\n", " \"textField_l9fe0uiw\": name,\n", " \"textField_l9fe0uiv\": name\n", " }\n", "\n", " payload = {\n", " \"appType\": \"APP_TNVBVZ3K8G56HG03Z45Q\",\n", " \"systemToken\": \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n", " \"userId\": \"yida_pub_account\",# 超级管理员账号\n", " \"language\": \"zh_CN\",\n", " \"formUuid\": \"FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2\",\n", " \"formDataJson\": json.dumps(send_data),\n", " \"processCode\":\"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2\"\n", " }\n", "\n", " res = requests.post(yida_api, headers=headers, json=payload)\n", " return res\n", " try:\n", " name = f\"[流程]续约服务流程 表单数据读取失败,请检查!{data_NGV['id_own_org'][i]}\"\n", " res_yujing = start_instance_process(TOKEN,name)\n", " except:\n", " pass" ] } ], "metadata": { "kernelspec": { "display_name": "F6processing", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.4" } }, "nbformat": 4, "nbformat_minor": 2 }