{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:\n", "c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll\n", "c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas64__v0.3.21-gcc_10_3_0.dll\n", " warnings.warn(\"loaded more than 1 DLL from .libs:\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "读取到 续约服务流程表单中 4381 条数据!\n" ] } ], "source": [ "# -*- coding: utf-8 -*-\n", "import psycopg2\n", "import pandas as pd\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", "yes_time = now_time + datetime.timedelta(days=-1)\n", "yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n", "# sql语句 建表\n", "sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\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", "# 关闭数据库连接\n", "cursor.close()\n", "conn.close()\n", "\n", "\n", "# 基础函数配置\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", "\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_new(token, formUuid, page, n):\n", " \"\"\" 函数功能:读取流程表单的所有数据 \"\"\"\n", "\n", " api = f'https://api.dingtalk.com//v1.0/yida/processes/instances?pageNumber={page}&pageSize={n}'\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", " # \"searchFieldJson\": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储\n", " \"instanceStatus\": \"RUNNING\"\n", " }\n", "\n", " res = requests.post(api, headers=headers, json=formData)\n", " return res.json()\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 update_instances(TOKEN, processInstanceId,code,name):\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", " data_new= {\n", " code : name \n", " }\n", "\n", " payload = {\n", " \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n", " \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n", " \"userId\" : \"yida_pub_account\",\n", " \"language\" : \"zh_CN\",\n", " \"formInstanceId\" : processInstanceId,\n", " \"useLatestVersion\" : 'false',\n", " \"updateFormDataJson\" : json.dumps(data_new, cls=NpEncoder) #json.dumps(data_new, cls=NpEncoder)\n", " }\n", "\n", " res = requests.put(api, headers=headers,json =payload)\n", "\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", "TOKEN = generateToken() \n", "\n", "\n", "# 读取续约服务流程\n", "FORMID = \"FORM-PE866MD1MJMU0WGLYRFLYEN5YN9L1I55Z7ZUK22\" # 续约服务流程\n", "# 读取流程表单数据\n", "form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n", "PAGES = form_data.get('totalCount')//100 + 1\n", "ALL_DATA_node = []\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_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n", " for data in form_data.get('data'):\n", " ALL_DATA_node.append(data)\n", "print(f'读取到 续约服务流程表单中 {len(ALL_DATA_node)} 条数据!')\n", "\n", "# 校验状态\n", "for i in range(0,len(ALL_DATA_node)):\n", " for a in range(len(data_NGV[\"org_code\"])):\n", " if ALL_DATA_node[i]['data']['textField_ksydghqw'] == data_NGV.loc[a,\"org_code\"]:\n", " if data_NGV.loc[a,\"active_status_fmt\"] == \"活跃\":\n", " if ALL_DATA_node[i]['data']['textField_ksydghr5']==\"否\":\n", " update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr5',\"是\")\n", " print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n", " elif data_NGV.loc[a,\"active_status_fmt\"] == \"不活跃\":\n", " if ALL_DATA_node[i]['data']['textField_ksydghr5']==\"是\":\n", " update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr5',\"否\")\n", " print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n", "for i in range(0,len(ALL_DATA_node)):\n", " for a in range(len(data_NGV[\"org_code\"])):\n", " if ALL_DATA_node[i]['data']['textField_ksydghqw'] == data_NGV.loc[a,\"org_code\"]:\n", " if data_NGV.loc[a,\"is_g\"] == \"1\":\n", " if ALL_DATA_node[i]['data']['textField_ksydghr8']==\"否\":\n", " update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr8',\"是\")\n", " print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n", " elif data_NGV.loc[a,\"is_g\"] == \"0\":\n", " if ALL_DATA_node[i]['data']['textField_ksydghr8']==\"是\":\n", " update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr8',\"否\")\n", " print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n", "for i in range(0,len(ALL_DATA_node)):\n", " for a in range(len(data_NGV[\"org_code\"])):\n", " if ALL_DATA_node[i]['data']['textField_ksydghr7'] != data_NGV.loc[a,\"bill_day_count_last_30_day\"]:\n", " update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr7',data_NGV.loc[a,\"bill_day_count_last_30_day\"])\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bill_day_count_last_30_day" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "28" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_NGV.loc[0,\"bill_day_count_last_30_day\"]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i in range(0,len(ALL_DATA_node)):\n", " for a in range(len(data_NGV[\"org_code\"])):\n", " if ALL_DATA_node[i]['data']['textField_ksydghr7'] != data_NGV.loc[a,\"bill_day_count_last_30_day\"]:\n", " update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr7',data_NGV.loc[a,\"bill_day_count_last_30_day\"])\n" ] } ], "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" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }