Files
F6--/其它系统脚本/续费率看板+订单明细(提前立减额).ipynb
2026-01-30 11:28:35 +08:00

3365 lines
174 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 正式"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"import calendar\n",
"import datetime\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",
"# 获取当前日期\n",
"today = datetime.date.today()\n",
"# 获取当月\n",
"first_day_of_month = int(today.replace().strftime('%Y%m'))-2\n",
"\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_sales_saas_org_summary_income_m\" WHERE \"pt\" >= '{first_day_of_month}'\"\"\"\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_details = 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",
"print(len(data_details))\n",
"\n",
"\n",
"from decimal import Decimal\n",
"data_details['version_amount_total'] = data_details['version_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_saas'] = data_details['version_amount_saas'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_other'] = data_details['version_amount_other'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_total'] = data_details['unversion_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_mngv'] = data_details['unversion_amount_mngv'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_message'] = data_details['unversion_amount_message'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_total'] = data_details['irregular_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_activity'] = data_details['irregular_amount_activity'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_service'] = data_details['irregular_amount_service'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['coupon_amount'] = data_details['coupon_amount'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"\n",
"\n",
"\n",
"\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",
"\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 Batch_creation(FORMID,TOKEN,ALL_formData):\n",
" \"\"\" 获取组件信息 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchSave'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"noExecuteExpression\" : \"true\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"true\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"formDataJsonList\" : json.dumps(ALL_formData, cls=NpEncoder),\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",
"def read_instances_pt(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",
"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",
"TOKEN = generateToken() \n",
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
"# 读取流程表单数据\n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA_staff = {}\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",
" ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']\n",
"\n",
"'''获取表内控件信息 '''\n",
"FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\"\n",
"component_list = component(FORMID,TOKEN)\n",
"for i in range(len(component_list['result'])):\n",
" componentName = component_list['result'][i]['componentName']\n",
" name_value = component_list['result'][i]['label']['value']\n",
" fieldId = component_list['result'][i]['fieldId']\n",
" print(\"'\",fieldId,\"':\",\"data_details[\",name_value,\"][i], # \",name_value)\n",
"'''获取订单明细'''\n",
"form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA = []\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA.append([data['formData'][\"textField_dv032lp\"],data['formData'][\"textField_cwqfrcq\"],data['formData'][\"textField_qplm0p9\"]+data['formData'][\"textField_wy749n8\"]])\n",
"print(f'读取到流程表中 {len(ALL_DATA)} 条数据')\n",
"df_DataFrame = pd.DataFrame(ALL_DATA, columns=[ '优惠券金额', '提前续约优惠', '公司名称门店名称'])\n",
"# '''批量删除NGV数据'''\n",
"for i in range(0,10):\n",
" default = True\n",
" while default:\n",
" FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\" \n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" PAGES = form_data.get('totalCount')//100 +1 \n",
" print(form_data.get('totalCount'))\n",
" if form_data.get('totalCount')<=0:\n",
" default = False\n",
" for i in range(PAGES, 1,-1):\n",
" ALL_DATA_instance = []\n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA_instance.append(data['formInstanceId'])\n",
" print(f'读取到表单中 {len(ALL_DATA_instance)} 条数据!')\n",
" red_delete = delete_in_batches(FORMID,TOKEN,ALL_DATA_instance)\n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" for data in form_data.get('data'):\n",
" formInstanceId = data['formInstanceId']\n",
" delete_in(TOKEN,formInstanceId)\n",
" print(f'单条删除 {formInstanceId} 数据!')\n",
"\n",
"'''遍历数据进行新建'''\n",
"data_details = data_details.astype('string')\n",
"data_details = data_details.fillna('',inplace=False)\n",
"for a in range(0,len(data_details[\"year_id\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" try:\n",
" if data_details[\"franchise_group_name\"][i] ==\"\":\n",
" data_details[\"franchise_group_name\"][i] = \"普通SAAS\"\n",
" except:\n",
" pass\n",
" formData = {\n",
" 'textField_l556qrj':data_details[\"year_id\"][i],#\"year_id\"\n",
" 'textField_ioghzon':data_details[\"org_crm_id\"][i],#\"org_crm_id\"\n",
" 'textField_kr3pc6c':data_details[\"org_id\"][i],#\"org_id\"\n",
" 'textField_sv3xmix':data_details[\"org_code\"][i],#\"org_code\"\n",
" 'textField_nk98j1i':data_details[\"org_name\"][i],#\"org_name\"\n",
" 'textField_gvdimtj':data_details[\"group_id\"][i],#\"group_id\"\n",
" 'textField_ntc1mqo':data_details[\"group_name\"][i],#\"group_name\"\n",
" 'textField_dssu351':data_details[\"group_grade\"][i],#\"group_grade\"\n",
" 'dateField_hgp5gh8':int(time.mktime(time.strptime(data_details[\"saas_create_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"saas_create_time\"][i] !='' else '',#\"saas_create_time\"\n",
" 'textField_m6wvkhp':data_details[\"from_flag_fmt\"][i],#\"from_flag_fmt\"\n",
" 'textField_rzrq44v':data_details[\"franchise_group_name\"][i],#\"franchise_group_name\"\n",
" 'textField_s8u1211':data_details[\"region_name\"][i],#\"region_name\"\n",
" 'textField_bifjpqz':data_details[\"branch_name\"][i],#\"branch_name\"\n",
" 'textField_zz547i2':data_details[\"province_name\"][i],#\"province_name\"\n",
" 'textField_j86bqku':data_details[\"city_name\"][i],#\"city_name\"\n",
" # 'employeeField_li0304o0':ALL_DATA_staff[data_details[\"area_manager\"][i]] if data_details[\"area_manager\"][i] !='' else '',#\"area_manager\"\n",
" # 'employeeField_li0304o1':ALL_DATA_staff[data_details[\"service_impl_principal\"][i]] if data_details[\"service_impl_principal\"][i] !='' else '',#\"service_impl_principal\"\n",
" # 'employeeField_li0304o2':ALL_DATA_staff[data_details[\"technician\"][i]] if data_details[\"technician\"][i] !='' else '',#\"technician\"\n",
" 'dateField_f7cjejs':int(time.mktime(time.strptime(data_details[\"to_renew_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"to_renew_time\"][i] !='' else '',#\"to_renew_time\"\n",
" 'textField_4a171yy':data_details[\"saas_edition_fmt\"][i],#\"saas_edition_fmt\"\n",
" 'textField_9cja7t3':data_details[\"version_amount_total\"][i],#\"version_amount_total\"\n",
" 'textField_tdd8vic':data_details[\"version_amount_saas\"][i],#\"version_amount_saas\"\n",
" 'textField_yc1liag':data_details[\"version_amount_other\"][i],#\"version_amount_other\"\n",
" 'textField_sazuktm':data_details[\"unversion_amount_total\"][i],#\"unversion_amount_total\"\n",
" 'textField_dzyddir':data_details[\"unversion_amount_mngv\"][i],#\"unversion_amount_mngv\"\n",
" 'textField_rimc2k8':data_details[\"unversion_amount_message\"][i],#\"unversion_amount_message\"\n",
" 'textField_whlq8rb':data_details[\"irregular_amount_total\"][i],#\"irregular_amount_total\"\n",
" 'textField_jm29spy':data_details[\"irregular_amount_activity\"][i],#\"irregular_amount_activity\"\n",
" 'textField_hf46l34':data_details[\"irregular_amount_service\"][i],#\"irregular_amount_service\"\n",
" 'textField_pkyoug6':data_details[\"coupon_amount\"][i],#\"coupon_amount\"\n",
" 'dateField_uwztkat':int(time.mktime(time.strptime(data_details[\"etl_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"etl_time\"][i] !='' else '',#\"etl_time\"\n",
" 'textField_s6mf0at':data_details[\"pt\"][i],#\"pt\"\n",
" 'textField_llm3mclm':\"0\" #\"提前续约优惠\"\n",
" }\n",
" try:\n",
" formData['employeeField_li0304o2'] = ALL_DATA_staff[data_details[\"technician\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o2'] = \"\"\n",
" try:\n",
" formData['employeeField_li0304o1'] = ALL_DATA_staff[data_details[\"service_impl_principal\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o1'] = \"\"\n",
" try:\n",
" formData['employeeField_li0304o0'] = ALL_DATA_staff[data_details[\"area_manager\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o0'] = \"\"\n",
" try:\n",
" group_name_org_name = formData['textField_ntc1mqo'] + formData['textField_nk98j1i']\n",
" row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
" if row_numbers[0]>0:\n",
" pandan_new = int(float(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0])) - int(float(formData['textField_pkyoug6']))\n",
" if pandan_new == 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers[0],'提前续约优惠'] # 提前续约优惠\n",
" except:\n",
" formData['textField_llm3mclm'] = \"0\"\n",
"\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass\n",
" FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\" \n",
" res_new = Batch_creation(FORMID,TOKEN,ALL_formData)\n",
" print(\"新建第\",i,\"条数据!\")\n",
" time.sleep(10)\n",
" \n",
"'''校验是否新建正常'''\n",
"time.sleep(120)\n",
"FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\" \n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"if int(form_data.get('totalCount')) ==len(data_details):\n",
" print(\"数据新建成功!\")\n",
"else:\n",
" \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 = \"4、年度滚动续费率分子:holo_ads_report_sales_saas_org_summary_income_m 新建条数不正确!\"\n",
" res_yujing = start_instance_process(TOKEN,name)\n",
" except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 6,
"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"
]
}
],
"source": [
"# 基础函数配置\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 transcation(token,FORMID,data_new):\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",
" payload = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"2268275546837446\", # 曹伟 id\n",
" \"language\" : \"zh_CN\",\n",
" \"useLatestVersion\" : \"false\",\n",
" \"formInstanceId\" : FORMID,\n",
" \"updateFormDataJson\" : json.dumps(data_new, cls=NpEncoder),\n",
" }\n",
"\n",
" res = requests.put(api, headers=headers, json=payload)\n",
"\n",
" return res.json()\n",
"def aggree_approval(token: str, taskId: str, processInstanceId: str, formData: dict,res_new):\n",
" \"\"\" 函数功能:同意审批节点 --F6客户服务 应用 \"\"\"\n",
" api = f'https://api.dingtalk.com/v1.0/yida/tasks/execute'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" payload = {\n",
" \"outResult\": \"AGREE\",\n",
" \"appType\": \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\": \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"remark\": \"同意(接口自动)\",\n",
" \"formDataJson\": json.dumps(formData, cls=NpEncoder),\n",
" \"processInstanceId\": processInstanceId,\n",
" # \"userId\": \"yida_pub_account\",\n",
" \"userId\": res_new, \n",
" \"language\": \"zh_CN\",\n",
" \"taskId\": int(taskId)\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" # print('同意审批节点')\n",
" return res\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 get_approval_records(token: str, processInstanceId: str):\n",
" \"\"\" 函数功能:获取流程表单的审批记录 --F6客户服务 应用 \"\"\"\n",
" appType = \"APP_UYZ0KG6L0CCNV80GZ66O\"\n",
" systemToken = \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\"\n",
" userId = \"yida_pub_account\"\n",
"\n",
" api = f'https://api.dingtalk.com/v1.0/yida/processes/operationRecords?appType={appType}&systemToken={systemToken}&userId={userId}&language=zh_CN&processInstanceId={processInstanceId}'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" res = requests.get(api, headers=headers)\n",
" # print('获取流程表单的审批记录')\n",
" return res.json()\n",
"def read_instances_pt(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",
"def read_processes(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",
"def instances_id(TOKEN,id):\n",
" \"\"\" 函数功能:查询表单实例 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/{id}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
"\n",
" res = requests.get(api, headers=headers)\n",
"\n",
" return res.json()\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 component_id(id,TOKEN):\n",
" api = f'https://api.dingtalk.com/v1.0/yida/processes/instancesInfos/{id}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" \n",
" res = requests.get(api, headers=headers)\n",
"\n",
" return res.json()\n",
"def find_indexes(daichuli_mendian_name,i_two):\n",
" indexes = [i for i, x in enumerate(daichuli_mendian_name) if x == i_two]\n",
" return indexes\n",
"def get_staffID(TOKEN: str,ALL_DATA_staff,staff_name):\n",
" res_new = [v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== staff_name]\n",
" # print('通过员工名称获取员工id')\n",
" return res_new\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"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"读取到流程表中 76 条数据\n"
]
}
],
"source": [
"TOKEN = generateToken()\n",
"form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA = []\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA.append([data['formData'][\"textField_dv032lp\"],data['formData'][\"textField_cwqfrcq\"],data['formData'][\"textField_qplm0p9\"]+data['formData'][\"textField_wy749n8\"]])\n",
"print(f'读取到流程表中 {len(ALL_DATA)} 条数据')\n",
"df_DataFrame = pd.DataFrame(ALL_DATA, columns=[ '优惠券金额', '提前续约优惠', '公司名称门店名称'])"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>优惠券金额</th>\n",
" <th>提前续约优惠</th>\n",
" <th>公司名称门店名称</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>青岛山高汽车科技服务有限公司赛轮养车延安三路店</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>顺德汽修顺德汽修</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>800.00</td>\n",
" <td>0.00</td>\n",
" <td>天津市红桥区祥三汽车维修中心天津市红桥区祥三汽车维修中心</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2000.00</td>\n",
" <td>0.00</td>\n",
" <td>胜达养车胜达汽车服务</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>瑞安市攸正汽车美容中心瑞安市攸正汽车维修中心</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>上海天冠汽车服务有限公司知车汇快修连锁(龙飞店)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>上海天冠汽车服务有限公司知车汇快修连锁(临江店)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>上海天冠汽车服务有限公司知车汇快修连锁(嘉罗店)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>上海天冠汽车服务有限公司知车汇快修连锁杨鑫路店</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>600.00</td>\n",
" <td>0.00</td>\n",
" <td>怡邦名车专修中心怡邦汽车维修服务中心</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>76 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" 优惠券金额 提前续约优惠 公司名称门店名称\n",
"0 0.00 0.00 青岛山高汽车科技服务有限公司赛轮养车延安三路店\n",
"1 600.00 0.00 顺德汽修顺德汽修\n",
"2 800.00 0.00 天津市红桥区祥三汽车维修中心天津市红桥区祥三汽车维修中心\n",
"3 2000.00 0.00 胜达养车胜达汽车服务\n",
"4 600.00 0.00 瑞安市攸正汽车美容中心瑞安市攸正汽车维修中心\n",
".. ... ... ...\n",
"71 600.00 0.00 上海天冠汽车服务有限公司知车汇快修连锁(龙飞店)\n",
"72 600.00 0.00 上海天冠汽车服务有限公司知车汇快修连锁(临江店)\n",
"73 600.00 0.00 上海天冠汽车服务有限公司知车汇快修连锁(嘉罗店)\n",
"74 600.00 0.00 上海天冠汽车服务有限公司知车汇快修连锁杨鑫路店\n",
"75 600.00 0.00 怡邦名车专修中心怡邦汽车维修服务中心\n",
"\n",
"[76 rows x 3 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
"if len(row_numbers)>0:\n",
" pandan_new = int(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0]) - int(data_details[\"coupon_amount\"][i])\n",
" if pandan_new > 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers,'提前续约优惠'].values[0] # 提前立减额"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == \"上海天冠汽车服务有限公司知车汇快修连锁杨鑫路店\"].tolist()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.00'"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_DataFrame.loc[row_numbers,'提前续约优惠'].values[0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"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"
]
}
],
"source": [
"# 基础函数配置\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",
"\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",
"def read_instances_pt(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",
"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 Batch_creation(FORMID,TOKEN,ALL_formData):\n",
" \"\"\" 批量新建 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchSave'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"noExecuteExpression\" : \"true\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"true\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"formDataJsonList\" : json.dumps(ALL_formData, cls=NpEncoder),\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",
"def Retrieve_employee_id(TOKEN,offset):\n",
" \"\"\" 获取在职员工列表 \"\"\"\n",
" api = f'https://oapi.dingtalk.com/topapi/smartwork/hrm/employee/queryonjob?access_token={TOKEN}'\n",
"\n",
" payload = {\n",
"\t\"offset\":offset,\n",
"\t\"size\":50,\n",
"\t\"status_list\":\"3\"\n",
" }\n",
"\n",
" res = requests.post(api, json=payload)\n",
" return res.json()\n",
"\n",
"def Retrieve_employee_list(TOKEN,userid):\n",
" \"\"\" 获取员工花名册字段信息 \"\"\"\n",
" api = f'https://oapi.dingtalk.com/topapi/smartwork/hrm/employee/v2/list?access_token={TOKEN}'\n",
"\n",
" payload = {\n",
"\t\"userid_list\":userid,\n",
"\t\"field_filter_list\":\"sys00-name\",\n",
"\t\"agentid\":\"1405052868\"\n",
" }\n",
"\n",
" res = requests.post(api, json=payload)\n",
" return res.json()\n",
"\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)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"21230\n"
]
}
],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"import calendar\n",
"import datetime\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",
"# 获取当前日期\n",
"today = datetime.date.today()\n",
"# 获取当月\n",
"first_day_of_month = int(today.replace().strftime('%Y%m'))-2\n",
"\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_sales_saas_org_summary_income_m\" WHERE \"pt\" >= '{first_day_of_month}'\"\"\"\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_details = 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",
"print(len(data_details))\n",
"\n",
"\n",
"from decimal import Decimal\n",
"data_details['version_amount_total'] = data_details['version_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_saas'] = data_details['version_amount_saas'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_other'] = data_details['version_amount_other'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_total'] = data_details['unversion_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_mngv'] = data_details['unversion_amount_mngv'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_message'] = data_details['unversion_amount_message'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_total'] = data_details['irregular_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_activity'] = data_details['irregular_amount_activity'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_service'] = data_details['irregular_amount_service'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['coupon_amount'] = data_details['coupon_amount'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"' textField_l556qrj ': data_details[ \"计算年份\" ][i], # \"计算年份\"\n",
"' textField_ioghzon ': data_details[ \"商户id\" ][i], # \"商户id\"\n",
"' textField_kr3pc6c ': data_details[ \"门店id\" ][i], # \"门店id\"\n",
"' textField_sv3xmix ': data_details[ \"门店编码\" ][i], # \"门店编码\"\n",
"' textField_nk98j1i ': data_details[ \"门店名称\" ][i], # \"门店名称\"\n",
"' textField_gvdimtj ': data_details[ \"公司id\" ][i], # \"公司id\"\n",
"' textField_ntc1mqo ': data_details[ \"公司名称\" ][i], # \"公司名称\"\n",
"' textField_dssu351 ': data_details[ \"公司等级\" ][i], # \"公司等级\"\n",
"' dateField_hgp5gh8 ': data_details[ \"开户日期\" ][i], # \"开户日期\"\n",
"' textField_m6wvkhp ': data_details[ \"开户渠道来源\" ][i], # \"开户渠道来源\"\n",
"' textField_rzrq44v ': data_details[ \"加盟商公司名称\" ][i], # \"加盟商公司名称\"\n",
"' textField_s8u1211 ': data_details[ \"大区\" ][i], # \"大区\"\n",
"' textField_bifjpqz ': data_details[ \"小区\" ][i], # \"小区\"\n",
"' textField_zz547i2 ': data_details[ \"省份\" ][i], # \"省份\"\n",
"' textField_j86bqku ': data_details[ \"城市\" ][i], # \"城市\"\n",
"' employeeField_li0304o0 ': data_details[ \"区域经理\" ][i], # \"区域经理\"\n",
"' employeeField_li0304o1 ': data_details[ \"运营负责人\" ][i], # \"运营负责人\"\n",
"' employeeField_li0304o2 ': data_details[ \"技术专家\" ][i], # \"技术专家\"\n",
"' dateField_f7cjejs ': data_details[ \"应续约时间\" ][i], # \"应续约时间\"\n",
"' textField_4a171yy ': data_details[ \"当前saas版本\" ][i], # \"当前saas版本\"\n",
"' textField_9cja7t3 ': data_details[ \"经常性_版本收入合计\" ][i], # \"经常性_版本收入合计\"\n",
"' textField_tdd8vic ': data_details[ \"经常性_版本收入_saas\" ][i], # \"经常性_版本收入_saas\"\n",
"' textField_yc1liag ': data_details[ \"经常性_版本收入_其他\" ][i], # \"经常性_版本收入_其他\"\n",
"' textField_sazuktm ': data_details[ \"经常性_非版本收入合计\" ][i], # \"经常性_非版本收入合计\"\n",
"' textField_dzyddir ': data_details[ \"经常性_非版本收入_企业钱包\" ][i], # \"经常性_非版本收入_企业钱包\"\n",
"' textField_rimc2k8 ': data_details[ \"经常性_非版本收入_短信\" ][i], # \"经常性_非版本收入_短信\"\n",
"' textField_whlq8rb ': data_details[ \"非经常性_收入合计\" ][i], # \"非经常性_收入合计\"\n",
"' textField_jm29spy ': data_details[ \"非经常性_活动广场\" ][i], # \"非经常性_活动广场\"\n",
"' textField_hf46l34 ': data_details[ \"非经常性_服务包\" ][i], # \"非经常性_服务包\"\n",
"' textField_pkyoug6 ': data_details[ \"券金额(只做展示用,saas和服务包等已补回券金额)\" ][i], # \"券金额(只做展示用,saas和服务包等已补回券金额)\"\n",
"' dateField_uwztkat ': data_details[ \"数据处理时间\" ][i], # \"数据处理时间\"\n",
"' textField_llm3mclm ': data_details[ \"提前立减额\" ][i], # \"提前立减额\"\n",
"' textField_s6mf0at ': data_details[ \"月分区(存储年初至本月累计分子)\" ][i], # \"月分区(存储年初至本月累计分子)\"\n",
"读取到流程表中 76 条数据\n"
]
}
],
"source": [
"TOKEN = generateToken() \n",
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
"# 读取流程表单数据\n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA_staff = {}\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",
" ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']\n",
"\n",
"'''获取表内控件信息 '''\n",
"FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\"\n",
"component_list = component(FORMID,TOKEN)\n",
"for i in range(len(component_list['result'])):\n",
" componentName = component_list['result'][i]['componentName']\n",
" name_value = component_list['result'][i]['label']['value']\n",
" fieldId = component_list['result'][i]['fieldId']\n",
" print(\"'\",fieldId,\"':\",\"data_details[\",name_value,\"][i], # \",name_value)\n",
"'''获取订单明细'''\n",
"form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA = []\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA.append([data['formData'][\"textField_dv032lp\"],data['formData'][\"textField_cwqfrcq\"],data['formData'][\"textField_qplm0p9\"]+data['formData'][\"textField_wy749n8\"]])\n",
"print(f'读取到流程表中 {len(ALL_DATA)} 条数据')\n",
"df_DataFrame = pd.DataFrame(ALL_DATA, columns=[ '优惠券金额', '提前续约优惠', '公司名称门店名称'])\n",
"\n",
"'''遍历数据进行新建'''\n",
"data_details = data_details.astype('string')\n",
"data_details = data_details.fillna('',inplace=False)\n",
"for a in range(0,len(data_details[\"year_id\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" try:\n",
" if data_details[\"franchise_group_name\"][i] ==\"\":\n",
" data_details[\"franchise_group_name\"][i] = \"普通SAAS\"\n",
" except:\n",
" pass\n",
" formData = {\n",
" 'textField_l556qrj':data_details[\"year_id\"][i],#\"year_id\"\n",
" 'textField_ioghzon':data_details[\"org_crm_id\"][i],#\"org_crm_id\"\n",
" 'textField_kr3pc6c':data_details[\"org_id\"][i],#\"org_id\"\n",
" 'textField_sv3xmix':data_details[\"org_code\"][i],#\"org_code\"\n",
" 'textField_nk98j1i':data_details[\"org_name\"][i],#\"org_name\"\n",
" 'textField_gvdimtj':data_details[\"group_id\"][i],#\"group_id\"\n",
" 'textField_ntc1mqo':data_details[\"group_name\"][i],#\"group_name\"\n",
" 'textField_dssu351':data_details[\"group_grade\"][i],#\"group_grade\"\n",
" 'dateField_hgp5gh8':int(time.mktime(time.strptime(data_details[\"saas_create_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"saas_create_time\"][i] !='' else '',#\"saas_create_time\"\n",
" 'textField_m6wvkhp':data_details[\"from_flag_fmt\"][i],#\"from_flag_fmt\"\n",
" 'textField_rzrq44v':data_details[\"franchise_group_name\"][i],#\"franchise_group_name\"\n",
" 'textField_s8u1211':data_details[\"region_name\"][i],#\"region_name\"\n",
" 'textField_bifjpqz':data_details[\"branch_name\"][i],#\"branch_name\"\n",
" 'textField_zz547i2':data_details[\"province_name\"][i],#\"province_name\"\n",
" 'textField_j86bqku':data_details[\"city_name\"][i],#\"city_name\"\n",
" # 'employeeField_li0304o0':ALL_DATA_staff[data_details[\"area_manager\"][i]] if data_details[\"area_manager\"][i] !='' else '',#\"area_manager\"\n",
" # 'employeeField_li0304o1':ALL_DATA_staff[data_details[\"service_impl_principal\"][i]] if data_details[\"service_impl_principal\"][i] !='' else '',#\"service_impl_principal\"\n",
" # 'employeeField_li0304o2':ALL_DATA_staff[data_details[\"technician\"][i]] if data_details[\"technician\"][i] !='' else '',#\"technician\"\n",
" 'dateField_f7cjejs':int(time.mktime(time.strptime(data_details[\"to_renew_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"to_renew_time\"][i] !='' else '',#\"to_renew_time\"\n",
" 'textField_4a171yy':data_details[\"saas_edition_fmt\"][i],#\"saas_edition_fmt\"\n",
" 'textField_9cja7t3':data_details[\"version_amount_total\"][i],#\"version_amount_total\"\n",
" 'textField_tdd8vic':data_details[\"version_amount_saas\"][i],#\"version_amount_saas\"\n",
" 'textField_yc1liag':data_details[\"version_amount_other\"][i],#\"version_amount_other\"\n",
" 'textField_sazuktm':data_details[\"unversion_amount_total\"][i],#\"unversion_amount_total\"\n",
" 'textField_dzyddir':data_details[\"unversion_amount_mngv\"][i],#\"unversion_amount_mngv\"\n",
" 'textField_rimc2k8':data_details[\"unversion_amount_message\"][i],#\"unversion_amount_message\"\n",
" 'textField_whlq8rb':data_details[\"irregular_amount_total\"][i],#\"irregular_amount_total\"\n",
" 'textField_jm29spy':data_details[\"irregular_amount_activity\"][i],#\"irregular_amount_activity\"\n",
" 'textField_hf46l34':data_details[\"irregular_amount_service\"][i],#\"irregular_amount_service\"\n",
" 'textField_pkyoug6':data_details[\"coupon_amount\"][i],#\"coupon_amount\"\n",
" 'dateField_uwztkat':int(time.mktime(time.strptime(data_details[\"etl_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"etl_time\"][i] !='' else '',#\"etl_time\"\n",
" 'textField_s6mf0at':data_details[\"pt\"][i],#\"pt\"\n",
" 'textField_llm3mclm':\"0\" #\"提前续约优惠\"\n",
" }\n",
" try:\n",
" formData['employeeField_li0304o2'] = ALL_DATA_staff[data_details[\"technician\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o2'] = \"\"\n",
" try:\n",
" formData['employeeField_li0304o1'] = ALL_DATA_staff[data_details[\"service_impl_principal\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o1'] = \"\"\n",
" try:\n",
" formData['employeeField_li0304o0'] = ALL_DATA_staff[data_details[\"area_manager\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o0'] = \"\"\n",
" try:\n",
" group_name_org_name = formData['textField_ntc1mqo'] + formData['textField_nk98j1i']\n",
" row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
" if row_numbers[0]>0:\n",
" pandan_new = int(float(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0])) - int(float(formData['textField_pkyoug6']))\n",
" if pandan_new > 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers[0],'提前续约优惠'].values[0] # 提前续约优惠\n",
" except:\n",
" formData['textField_llm3mclm'] = \"0\"\n",
"\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"group_name_org_name = \"胜达养车胜达汽车服务\"\n",
"row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
"if row_numbers[0]>0:\n",
" pandan_new = int(float(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0])) - int(float(formData['textField_pkyoug6']))\n",
" if pandan_new > 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers[0],'提前续约优惠'].values[0] # 提前续约优惠"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"row_numbers[0]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.00'"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_DataFrame.loc[row_numbers,'提前续约优惠'].values[0]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 青岛山高汽车科技服务有限公司赛轮养车延安三路店\n",
"1 顺德汽修顺德汽修\n",
"2 天津市红桥区祥三汽车维修中心天津市红桥区祥三汽车维修中心\n",
"3 胜达养车胜达汽车服务\n",
"4 瑞安市攸正汽车美容中心瑞安市攸正汽车维修中心\n",
" ... \n",
"71 上海天冠汽车服务有限公司知车汇快修连锁(龙飞店)\n",
"72 上海天冠汽车服务有限公司知车汇快修连锁(临江店)\n",
"73 上海天冠汽车服务有限公司知车汇快修连锁(嘉罗店)\n",
"74 上海天冠汽车服务有限公司知车汇快修连锁杨鑫路店\n",
"75 怡邦名车专修中心怡邦汽车维修服务中心\n",
"Name: 公司名称门店名称, Length: 76, dtype: object"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_DataFrame['公司名称门店名称']"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "21299",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\core\\indexes\\range.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 344\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 345\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_range\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnew_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 346\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: 21299 is not in range",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-7-7f2c75ce35d3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mgroup_name_org_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata_details\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"group_name\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mdata_details\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"org_name\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mrow_numbers\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdf_DataFrame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mdf_DataFrame\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'公司名称门店名称'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0mgroup_name_org_name\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrow_numbers\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m>\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mpandan_new\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf_DataFrame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mrow_numbers\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'优惠券金额'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_details\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"coupon_amount\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mpandan_new\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mdf_DataFrame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mrow_numbers\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'优惠券金额'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m\"0\"\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\core\\series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1005\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1006\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mkey_is_scalar\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1007\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_value\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1008\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1009\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_hashable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\core\\series.py\u001b[0m in \u001b[0;36m_get_value\u001b[1;34m(self, label, takeable)\u001b[0m\n\u001b[0;32m 1114\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1115\u001b[0m \u001b[1;31m# Similar to Index.get_value, but we do not fall back to positional\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1116\u001b[1;33m \u001b[0mloc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1117\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1118\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\core\\indexes\\range.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 345\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_range\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnew_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 346\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 347\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 348\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mHashable\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 349\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mKeyError\u001b[0m: 21299"
]
}
],
"source": [
"group_name_org_name = data_details[\"group_name\"][i] + data_details[\"org_name\"][i]\n",
"row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
"if len(row_numbers)>0:\n",
" pandan_new = int(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0]) - int(data_details[\"coupon_amount\"][i])\n",
" if pandan_new > 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers,'提前续约优惠'].values[0] # 提前续约优惠"
]
},
{
"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": [
"21433\n",
"' textField_l556qrj ': data_details[ \"计算年份\" ][i], # \"计算年份\"\n",
"' textField_ioghzon ': data_details[ \"商户id\" ][i], # \"商户id\"\n",
"' textField_kr3pc6c ': data_details[ \"门店id\" ][i], # \"门店id\"\n",
"' textField_sv3xmix ': data_details[ \"门店编码\" ][i], # \"门店编码\"\n",
"' textField_nk98j1i ': data_details[ \"门店名称\" ][i], # \"门店名称\"\n",
"' textField_gvdimtj ': data_details[ \"公司id\" ][i], # \"公司id\"\n",
"' textField_ntc1mqo ': data_details[ \"公司名称\" ][i], # \"公司名称\"\n",
"' textField_dssu351 ': data_details[ \"公司等级\" ][i], # \"公司等级\"\n",
"' dateField_hgp5gh8 ': data_details[ \"开户日期\" ][i], # \"开户日期\"\n",
"' textField_m6wvkhp ': data_details[ \"开户渠道来源\" ][i], # \"开户渠道来源\"\n",
"' textField_rzrq44v ': data_details[ \"加盟商公司名称\" ][i], # \"加盟商公司名称\"\n",
"' textField_s8u1211 ': data_details[ \"大区\" ][i], # \"大区\"\n",
"' textField_bifjpqz ': data_details[ \"小区\" ][i], # \"小区\"\n",
"' textField_zz547i2 ': data_details[ \"省份\" ][i], # \"省份\"\n",
"' textField_j86bqku ': data_details[ \"城市\" ][i], # \"城市\"\n",
"' employeeField_li0304o0 ': data_details[ \"区域经理\" ][i], # \"区域经理\"\n",
"' employeeField_li0304o1 ': data_details[ \"运营负责人\" ][i], # \"运营负责人\"\n",
"' employeeField_li0304o2 ': data_details[ \"技术专家\" ][i], # \"技术专家\"\n",
"' dateField_f7cjejs ': data_details[ \"应续约时间\" ][i], # \"应续约时间\"\n",
"' textField_4a171yy ': data_details[ \"当前saas版本\" ][i], # \"当前saas版本\"\n",
"' textField_9cja7t3 ': data_details[ \"经常性_版本收入合计\" ][i], # \"经常性_版本收入合计\"\n",
"' textField_tdd8vic ': data_details[ \"经常性_版本收入_saas\" ][i], # \"经常性_版本收入_saas\"\n",
"' textField_yc1liag ': data_details[ \"经常性_版本收入_其他\" ][i], # \"经常性_版本收入_其他\"\n",
"' textField_sazuktm ': data_details[ \"经常性_非版本收入合计\" ][i], # \"经常性_非版本收入合计\"\n",
"' textField_dzyddir ': data_details[ \"经常性_非版本收入_企业钱包\" ][i], # \"经常性_非版本收入_企业钱包\"\n",
"' textField_rimc2k8 ': data_details[ \"经常性_非版本收入_短信\" ][i], # \"经常性_非版本收入_短信\"\n",
"' textField_whlq8rb ': data_details[ \"非经常性_收入合计\" ][i], # \"非经常性_收入合计\"\n",
"' textField_jm29spy ': data_details[ \"非经常性_活动广场\" ][i], # \"非经常性_活动广场\"\n",
"' textField_hf46l34 ': data_details[ \"非经常性_服务包\" ][i], # \"非经常性_服务包\"\n",
"' textField_pkyoug6 ': data_details[ \"券金额(只做展示用,saas和服务包等已补回券金额)\" ][i], # \"券金额(只做展示用,saas和服务包等已补回券金额)\"\n",
"' dateField_uwztkat ': data_details[ \"数据处理时间\" ][i], # \"数据处理时间\"\n",
"' textField_llm3mclm ': data_details[ \"提前立减额\" ][i], # \"提前立减额\"\n",
"' textField_s6mf0at ': data_details[ \"月分区(存储年初至本月累计分子)\" ][i], # \"月分区(存储年初至本月累计分子)\"\n",
"读取到流程表中 75 条数据\n",
"21433\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 5 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 23 条数据!\n",
"读取到表单中 84 条数据!\n",
"读取到表单中 16 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 11 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 7 条数据!\n",
"读取到表单中 93 条数据!\n",
"读取到表单中 7 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 94 条数据!\n",
"读取到表单中 16 条数据!\n",
"读取到表单中 92 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 95 条数据!\n",
"读取到表单中 5 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 18 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 7 条数据!\n",
"读取到表单中 96 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 13 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 12 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 16 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 9 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 6 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 5 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 10 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 9 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 5 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 6 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 25 条数据!\n",
"读取到表单中 79 条数据!\n",
"读取到表单中 21 条数据!\n",
"读取到表单中 91 条数据!\n",
"读取到表单中 11 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 16 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"单条删除 FINST-G9C669B1MPSD2BW993K8A8HI8P0W31B8AXWLLL5 数据!\n",
"10377\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 70 条数据!\n",
"读取到表单中 32 条数据!\n",
"读取到表单中 92 条数据!\n",
"读取到表单中 23 条数据!\n",
"读取到表单中 94 条数据!\n",
"读取到表单中 12 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 30 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 12 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 96 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 11 条数据!\n",
"读取到表单中 96 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 96 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 12 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 7 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 5 条数据!\n",
"读取到表单中 96 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 9 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 4 条数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLI5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLL67 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLA6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLLW6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLA5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLL65 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLW5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLL66 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922EC7YWWLLN4 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLO5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922EC7YWWLLV4 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLLP6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLF5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLF6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLLX6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLL77 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLL76 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLL75 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922EC7YWWLLO4 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLX5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLX4 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922EC7YWWLLW4 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLP5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLG6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLLQ6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922FC7YWWLLG5 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLL07 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLLY6 数据!\n",
"单条删除 FINST-9J666XB1IPSD8YWRFXTR28SRVL922GC7YWWLL87 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL57 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL56 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLV6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLV5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLB7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLN6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLN5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLE6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL28 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLK7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLS7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC336ZXWWLLH5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL46 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLU6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLA7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL47 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLZ7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLU5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLM6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLI7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLM5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLD6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL18 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLJ7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL97 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLR7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLX6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLX5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL77 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL76 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLH7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLP6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLP5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL08 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLQ7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLG6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL88 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLY7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL67 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLW5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL66 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLW6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLG7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLO5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLO6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLP7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLF6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL78 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLX7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLR6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLR5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL96 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLF7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLJ6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLJ5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL17 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL16 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLO7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLI6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLLW7 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLZ6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLZ5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLA6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC356ZXWWLL68 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLQ5 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL86 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLY6 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL87 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLL06 数据!\n",
"单条删除 FINST-CH766981FNSDET8D881DSAMROFUC346ZXWWLLQ6 数据!\n",
"4931\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 11 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 5 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 96 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 10 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLJ5 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLR4 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLR5 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLL15 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLZ4 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2373SWWLLG6 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLL95 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2373SWWLLO6 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLA5 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLK4 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLK5 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2373SWWLL76 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2373SWWLLX6 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLS4 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLLS5 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2273SWWLL25 数据!\n",
"单条删除 FINST-5OA66G81EOSDWQUGF8M3B51XJPUD2373SWWLLH6 数据!\n",
"2380\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 51 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 13 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 1 条数据!\n",
"读取到表单中 99 条数据!\n",
"读取到表单中 4 条数据!\n",
"读取到表单中 100 条数据!\n",
"单条删除 FINST-TH866OD1LOSD3HG6D5TGOA17WFEW3D7DPWWLL57 数据!\n",
"1103\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 25 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 0 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 13 条数据!\n",
"读取到表单中 97 条数据!\n",
"读取到表单中 3 条数据!\n",
"读取到表单中 98 条数据!\n",
"单条删除 FINST-CH7669817NSDF8CM9JIOT8XGHO932Q3SNWWLLXA 数据!\n",
"单条删除 FINST-CH7669817NSDF8CM9JIOT8XGHO932Q3SNWWLLP9 数据!\n",
"464\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 8 条数据!\n",
"读取到表单中 98 条数据!\n",
"读取到表单中 2 条数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLYH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLXF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLXG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLQH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLL0I 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLHH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLHF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLHG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLSF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL2H 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLXH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLSG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL2G 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLPH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLCG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLCH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLKF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLKG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL1G 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL1H 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLRF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLRG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLWH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL9G 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL9H 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLZF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLZG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLOH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLBH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLBG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLJH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLJF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLJG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLUG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL4G 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLUF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL4H 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLVH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLNH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLEG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLEH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLEF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLMG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLMF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLTF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLTG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL3G 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLL3H 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3NTBNWWLLCF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLUH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLDF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLDG 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3PTBNWWLLMH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLDH 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLLF 数据!\n",
"单条删除 FINST-S6666V91ANSDIIURDWYS0D0NCRLS3OTBNWWLLLG 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLW5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLL65 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLJ3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLJ4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLO5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLL14 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLR3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLR4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLF5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLL94 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLZ3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLL93 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLA4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLW4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLA3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLL75 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLK3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLK4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLP5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLS3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLH5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLL24 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLG5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLX4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLB3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLB4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLH3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLH4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLQ5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLL05 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLL74 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLP3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLP4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLI5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLX3 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLL73 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLG4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLY4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLL85 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLI4 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLLR5 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A21O3NWWLL15 数据!\n",
"单条删除 FINST-GR666G71KOSDCE8X8TAGE4I6DB2A20O3NWWLLI3 数据!\n",
"158\n",
"读取到表单中 100 条数据!\n",
"61\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLW2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL61 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL62 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL63 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873FJVMWWLLH3 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLE1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLE2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLE3 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLM1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLM2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLV1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLV2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL51 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL52 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL53 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873FJVMWWLLI3 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLD1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLD2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLD3 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLL1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLL2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLU1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLU2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL42 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL43 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873FJVMWWLLJ3 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLC1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLC2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLC3 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL23 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLK1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLL21 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLK2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLS 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLL11 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLT1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLW 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLT2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLV 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL32 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLU 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL33 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLT 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLZ 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLY 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLLX 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLB1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLB2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL12 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL13 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLJ1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLJ2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873DJVMWWLL01 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLS1 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLS2 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLL22 数据!\n",
"单条删除 FINST-TL7661A16USDV5VSDMWJ77F8BV873EJVMWWLLB3 数据!\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"新建第 99 条数据!\n",
"新建第 199 条数据!\n",
"新建第 299 条数据!\n",
"新建第 399 条数据!\n",
"新建第 499 条数据!\n",
"新建第 599 条数据!\n",
"新建第 699 条数据!\n",
"新建第 799 条数据!\n",
"新建第 899 条数据!\n",
"新建第 999 条数据!\n",
"新建第 1099 条数据!\n",
"新建第 1199 条数据!\n",
"新建第 1299 条数据!\n",
"新建第 1399 条数据!\n",
"新建第 1499 条数据!\n",
"新建第 1599 条数据!\n",
"新建第 1699 条数据!\n",
"新建第 1799 条数据!\n",
"新建第 1899 条数据!\n",
"新建第 1999 条数据!\n",
"新建第 2099 条数据!\n",
"新建第 2199 条数据!\n",
"新建第 2299 条数据!\n",
"新建第 2399 条数据!\n",
"新建第 2499 条数据!\n",
"新建第 2599 条数据!\n",
"新建第 2699 条数据!\n",
"新建第 2799 条数据!\n",
"新建第 2899 条数据!\n",
"新建第 2999 条数据!\n",
"新建第 3099 条数据!\n",
"新建第 3199 条数据!\n",
"新建第 3299 条数据!\n",
"新建第 3399 条数据!\n",
"新建第 3499 条数据!\n",
"新建第 3599 条数据!\n",
"新建第 3699 条数据!\n",
"新建第 3799 条数据!\n",
"新建第 3899 条数据!\n",
"新建第 3999 条数据!\n",
"新建第 4099 条数据!\n",
"新建第 4199 条数据!\n",
"新建第 4299 条数据!\n",
"新建第 4399 条数据!\n",
"新建第 4499 条数据!\n",
"新建第 4599 条数据!\n",
"新建第 4699 条数据!\n",
"新建第 4799 条数据!\n",
"新建第 4899 条数据!\n",
"新建第 4999 条数据!\n",
"新建第 5099 条数据!\n",
"新建第 5199 条数据!\n",
"新建第 5299 条数据!\n",
"新建第 5399 条数据!\n",
"新建第 5499 条数据!\n",
"新建第 5599 条数据!\n",
"新建第 5699 条数据!\n",
"新建第 5799 条数据!\n",
"新建第 5899 条数据!\n",
"新建第 5999 条数据!\n",
"新建第 6099 条数据!\n",
"新建第 6199 条数据!\n",
"新建第 6299 条数据!\n",
"新建第 6399 条数据!\n",
"新建第 6499 条数据!\n",
"新建第 6599 条数据!\n",
"新建第 6699 条数据!\n",
"新建第 6799 条数据!\n",
"新建第 6899 条数据!\n",
"新建第 6999 条数据!\n",
"新建第 7099 条数据!\n",
"新建第 7199 条数据!\n",
"新建第 7299 条数据!\n",
"新建第 7399 条数据!\n",
"新建第 7499 条数据!\n",
"新建第 7599 条数据!\n",
"新建第 7699 条数据!\n",
"新建第 7799 条数据!\n",
"新建第 7899 条数据!\n",
"新建第 7999 条数据!\n",
"新建第 8099 条数据!\n",
"新建第 8199 条数据!\n",
"新建第 8299 条数据!\n",
"新建第 8399 条数据!\n",
"新建第 8499 条数据!\n",
"新建第 8599 条数据!\n",
"新建第 8699 条数据!\n",
"新建第 8799 条数据!\n",
"新建第 8899 条数据!\n",
"新建第 8999 条数据!\n",
"新建第 9099 条数据!\n",
"新建第 9199 条数据!\n",
"新建第 9299 条数据!\n",
"新建第 9399 条数据!\n",
"新建第 9499 条数据!\n",
"新建第 9599 条数据!\n",
"新建第 9699 条数据!\n",
"新建第 9799 条数据!\n",
"新建第 9899 条数据!\n",
"新建第 9999 条数据!\n",
"新建第 10099 条数据!\n",
"新建第 10199 条数据!\n",
"新建第 10299 条数据!\n",
"新建第 10399 条数据!\n",
"新建第 10499 条数据!\n",
"新建第 10599 条数据!\n",
"新建第 10699 条数据!\n",
"新建第 10799 条数据!\n",
"新建第 10899 条数据!\n",
"新建第 10999 条数据!\n",
"新建第 11099 条数据!\n",
"新建第 11199 条数据!\n",
"新建第 11299 条数据!\n",
"新建第 11399 条数据!\n",
"新建第 11499 条数据!\n",
"新建第 11599 条数据!\n",
"新建第 11699 条数据!\n",
"新建第 11799 条数据!\n",
"新建第 11899 条数据!\n",
"新建第 11999 条数据!\n",
"新建第 12099 条数据!\n",
"新建第 12199 条数据!\n",
"新建第 12299 条数据!\n",
"新建第 12399 条数据!\n",
"新建第 12499 条数据!\n",
"新建第 12599 条数据!\n",
"新建第 12699 条数据!\n",
"新建第 12799 条数据!\n",
"新建第 12899 条数据!\n",
"新建第 12999 条数据!\n",
"新建第 13099 条数据!\n",
"新建第 13199 条数据!\n",
"新建第 13299 条数据!\n",
"新建第 13399 条数据!\n",
"新建第 13499 条数据!\n",
"新建第 13599 条数据!\n",
"新建第 13699 条数据!\n",
"新建第 13799 条数据!\n",
"新建第 13899 条数据!\n",
"新建第 13999 条数据!\n",
"新建第 14099 条数据!\n",
"新建第 14199 条数据!\n",
"新建第 14299 条数据!\n",
"新建第 14399 条数据!\n",
"新建第 14499 条数据!\n",
"新建第 14599 条数据!\n",
"新建第 14699 条数据!\n",
"新建第 14799 条数据!\n",
"新建第 14899 条数据!\n",
"新建第 14999 条数据!\n",
"新建第 15099 条数据!\n",
"新建第 15199 条数据!\n",
"新建第 15299 条数据!\n",
"新建第 15399 条数据!\n",
"新建第 15499 条数据!\n",
"新建第 15599 条数据!\n",
"新建第 15699 条数据!\n",
"新建第 15799 条数据!\n",
"新建第 15899 条数据!\n",
"新建第 15999 条数据!\n",
"新建第 16099 条数据!\n",
"新建第 16199 条数据!\n",
"新建第 16299 条数据!\n",
"新建第 16399 条数据!\n",
"新建第 16499 条数据!\n",
"新建第 16599 条数据!\n",
"新建第 16699 条数据!\n",
"新建第 16799 条数据!\n",
"新建第 16899 条数据!\n",
"新建第 16999 条数据!\n",
"新建第 17099 条数据!\n",
"新建第 17199 条数据!\n",
"新建第 17299 条数据!\n",
"新建第 17399 条数据!\n",
"新建第 17499 条数据!\n",
"新建第 17599 条数据!\n",
"新建第 17699 条数据!\n",
"新建第 17799 条数据!\n",
"新建第 17899 条数据!\n",
"新建第 17999 条数据!\n",
"新建第 18099 条数据!\n",
"新建第 18199 条数据!\n",
"新建第 18299 条数据!\n",
"新建第 18399 条数据!\n",
"新建第 18499 条数据!\n",
"新建第 18599 条数据!\n",
"新建第 18699 条数据!\n",
"新建第 18799 条数据!\n",
"新建第 18899 条数据!\n",
"新建第 18999 条数据!\n",
"新建第 19099 条数据!\n",
"新建第 19199 条数据!\n",
"新建第 19299 条数据!\n",
"新建第 19399 条数据!\n",
"新建第 19499 条数据!\n",
"新建第 19599 条数据!\n",
"新建第 19699 条数据!\n",
"新建第 19799 条数据!\n",
"新建第 19899 条数据!\n",
"新建第 19999 条数据!\n",
"新建第 20099 条数据!\n",
"新建第 20199 条数据!\n",
"新建第 20299 条数据!\n",
"新建第 20399 条数据!\n",
"新建第 20499 条数据!\n",
"新建第 20599 条数据!\n",
"新建第 20699 条数据!\n",
"新建第 20799 条数据!\n",
"新建第 20899 条数据!\n",
"新建第 20999 条数据!\n",
"新建第 21099 条数据!\n",
"新建第 21199 条数据!\n",
"新建第 21299 条数据!\n",
"新建第 21399 条数据!\n",
"新建第 21499 条数据!\n",
"数据新建成功!\n"
]
}
],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"import calendar\n",
"import datetime\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",
"# 获取当前日期\n",
"today = datetime.date.today()\n",
"# 获取当月\n",
"first_day_of_month = int(today.replace().strftime('%Y%m'))-2\n",
"\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_sales_saas_org_summary_income_m\" WHERE \"pt\" >= '{first_day_of_month}'\"\"\"\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_details = 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",
"print(len(data_details))\n",
"\n",
"\n",
"from decimal import Decimal\n",
"data_details['version_amount_total'] = data_details['version_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_saas'] = data_details['version_amount_saas'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_other'] = data_details['version_amount_other'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_total'] = data_details['unversion_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_mngv'] = data_details['unversion_amount_mngv'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_message'] = data_details['unversion_amount_message'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_total'] = data_details['irregular_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_activity'] = data_details['irregular_amount_activity'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_service'] = data_details['irregular_amount_service'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['coupon_amount'] = data_details['coupon_amount'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"\n",
"\n",
"\n",
"\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",
"\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 Batch_creation(FORMID,TOKEN,ALL_formData):\n",
" \"\"\" 获取组件信息 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchSave'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"noExecuteExpression\" : \"true\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"true\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"formDataJsonList\" : json.dumps(ALL_formData, cls=NpEncoder),\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",
"def read_instances_pt(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",
"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",
"TOKEN = generateToken() \n",
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
"# 读取流程表单数据\n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA_staff = {}\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",
" ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']\n",
"\n",
"'''获取表内控件信息 '''\n",
"FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\"\n",
"component_list = component(FORMID,TOKEN)\n",
"for i in range(len(component_list['result'])):\n",
" componentName = component_list['result'][i]['componentName']\n",
" name_value = component_list['result'][i]['label']['value']\n",
" fieldId = component_list['result'][i]['fieldId']\n",
" print(\"'\",fieldId,\"':\",\"data_details[\",name_value,\"][i], # \",name_value)\n",
"'''获取订单明细'''\n",
"form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA = []\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA.append([data['formData'][\"textField_dv032lp\"],data['formData'][\"textField_cwqfrcq\"],data['formData'][\"textField_qplm0p9\"]+data['formData'][\"textField_wy749n8\"]])\n",
"print(f'读取到流程表中 {len(ALL_DATA)} 条数据')\n",
"df_DataFrame = pd.DataFrame(ALL_DATA, columns=[ '优惠券金额', '提前续约优惠', '公司名称门店名称'])\n",
"# '''批量删除NGV数据'''\n",
"for i in range(0,10):\n",
" default = True\n",
" while default:\n",
" FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\" \n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" PAGES = form_data.get('totalCount')//100 +1 \n",
" print(form_data.get('totalCount'))\n",
" if form_data.get('totalCount')<=0:\n",
" default = False\n",
" for i in range(PAGES, 1,-1):\n",
" ALL_DATA_instance = []\n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA_instance.append(data['formInstanceId'])\n",
" print(f'读取到表单中 {len(ALL_DATA_instance)} 条数据!')\n",
" red_delete = delete_in_batches(FORMID,TOKEN,ALL_DATA_instance)\n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" for data in form_data.get('data'):\n",
" formInstanceId = data['formInstanceId']\n",
" delete_in(TOKEN,formInstanceId)\n",
" print(f'单条删除 {formInstanceId} 数据!')\n",
"\n",
"'''遍历数据进行新建'''\n",
"data_details = data_details.astype('string')\n",
"data_details = data_details.fillna('',inplace=False)\n",
"for a in range(0,len(data_details[\"year_id\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" try:\n",
" if data_details[\"franchise_group_name\"][i] ==\"\":\n",
" data_details[\"franchise_group_name\"][i] = \"普通SAAS\"\n",
" except:\n",
" pass\n",
" formData = {\n",
" 'textField_l556qrj':data_details[\"year_id\"][i],#\"year_id\"\n",
" 'textField_ioghzon':data_details[\"org_crm_id\"][i],#\"org_crm_id\"\n",
" 'textField_kr3pc6c':data_details[\"org_id\"][i],#\"org_id\"\n",
" 'textField_sv3xmix':data_details[\"org_code\"][i],#\"org_code\"\n",
" 'textField_nk98j1i':data_details[\"org_name\"][i],#\"org_name\"\n",
" 'textField_gvdimtj':data_details[\"group_id\"][i],#\"group_id\"\n",
" 'textField_ntc1mqo':data_details[\"group_name\"][i],#\"group_name\"\n",
" 'textField_dssu351':data_details[\"group_grade\"][i],#\"group_grade\"\n",
" 'dateField_hgp5gh8':int(time.mktime(time.strptime(data_details[\"saas_create_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"saas_create_time\"][i] !='' else '',#\"saas_create_time\"\n",
" 'textField_m6wvkhp':data_details[\"from_flag_fmt\"][i],#\"from_flag_fmt\"\n",
" 'textField_rzrq44v':data_details[\"franchise_group_name\"][i],#\"franchise_group_name\"\n",
" 'textField_s8u1211':data_details[\"region_name\"][i],#\"region_name\"\n",
" 'textField_bifjpqz':data_details[\"branch_name\"][i],#\"branch_name\"\n",
" 'textField_zz547i2':data_details[\"province_name\"][i],#\"province_name\"\n",
" 'textField_j86bqku':data_details[\"city_name\"][i],#\"city_name\"\n",
" # 'employeeField_li0304o0':ALL_DATA_staff[data_details[\"area_manager\"][i]] if data_details[\"area_manager\"][i] !='' else '',#\"area_manager\"\n",
" # 'employeeField_li0304o1':ALL_DATA_staff[data_details[\"service_impl_principal\"][i]] if data_details[\"service_impl_principal\"][i] !='' else '',#\"service_impl_principal\"\n",
" # 'employeeField_li0304o2':ALL_DATA_staff[data_details[\"technician\"][i]] if data_details[\"technician\"][i] !='' else '',#\"technician\"\n",
" 'dateField_f7cjejs':int(time.mktime(time.strptime(data_details[\"to_renew_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"to_renew_time\"][i] !='' else '',#\"to_renew_time\"\n",
" 'textField_4a171yy':data_details[\"saas_edition_fmt\"][i],#\"saas_edition_fmt\"\n",
" 'textField_9cja7t3':data_details[\"version_amount_total\"][i],#\"version_amount_total\"\n",
" 'textField_tdd8vic':data_details[\"version_amount_saas\"][i],#\"version_amount_saas\"\n",
" 'textField_yc1liag':data_details[\"version_amount_other\"][i],#\"version_amount_other\"\n",
" 'textField_sazuktm':data_details[\"unversion_amount_total\"][i],#\"unversion_amount_total\"\n",
" 'textField_dzyddir':data_details[\"unversion_amount_mngv\"][i],#\"unversion_amount_mngv\"\n",
" 'textField_rimc2k8':data_details[\"unversion_amount_message\"][i],#\"unversion_amount_message\"\n",
" 'textField_whlq8rb':data_details[\"irregular_amount_total\"][i],#\"irregular_amount_total\"\n",
" 'textField_jm29spy':data_details[\"irregular_amount_activity\"][i],#\"irregular_amount_activity\"\n",
" 'textField_hf46l34':data_details[\"irregular_amount_service\"][i],#\"irregular_amount_service\"\n",
" 'textField_pkyoug6':data_details[\"coupon_amount\"][i],#\"coupon_amount\"\n",
" 'dateField_uwztkat':int(time.mktime(time.strptime(data_details[\"etl_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"etl_time\"][i] !='' else '',#\"etl_time\"\n",
" 'textField_s6mf0at':data_details[\"pt\"][i],#\"pt\"\n",
" 'textField_llm3mclm':\"0\" #\"提前续约优惠\"\n",
" }\n",
" try:\n",
" formData['employeeField_li0304o2'] = ALL_DATA_staff[data_details[\"technician\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o2'] = \"\"\n",
" try:\n",
" formData['employeeField_li0304o1'] = ALL_DATA_staff[data_details[\"service_impl_principal\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o1'] = \"\"\n",
" try:\n",
" formData['employeeField_li0304o0'] = ALL_DATA_staff[data_details[\"area_manager\"][i]]\n",
" except:\n",
" formData['employeeField_li0304o0'] = \"\"\n",
" try:\n",
" group_name_org_name = formData['textField_ntc1mqo'] + formData['textField_nk98j1i']\n",
" row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
" if row_numbers[0]>0:\n",
" pandan_new = int(float(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0])) - int(float(formData['textField_pkyoug6']))\n",
" if pandan_new == 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers[0],'提前续约优惠'] # 提前续约优惠\n",
" except:\n",
" formData['textField_llm3mclm'] = \"0\"\n",
"\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass\n",
" FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\" \n",
" res_new = Batch_creation(FORMID,TOKEN,ALL_formData)\n",
" print(\"新建第\",i,\"条数据!\")\n",
" time.sleep(10)\n",
" \n",
"'''校验是否新建正常'''\n",
"time.sleep(120)\n",
"FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\" \n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"if int(form_data.get('totalCount')) ==len(data_details):\n",
" print(\"数据新建成功!\")\n",
"else:\n",
" \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 = \"4、年度滚动续费率分子:holo_ads_report_sales_saas_org_summary_income_m 新建条数不正确!\"\n",
" res_yujing = start_instance_process(TOKEN,name)\n",
" except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"21261\n",
"' textField_l556qrj ': data_details[ \"计算年份\" ][i], # \"计算年份\"\n",
"' textField_ioghzon ': data_details[ \"商户id\" ][i], # \"商户id\"\n",
"' textField_kr3pc6c ': data_details[ \"门店id\" ][i], # \"门店id\"\n",
"' textField_sv3xmix ': data_details[ \"门店编码\" ][i], # \"门店编码\"\n",
"' textField_nk98j1i ': data_details[ \"门店名称\" ][i], # \"门店名称\"\n",
"' textField_gvdimtj ': data_details[ \"公司id\" ][i], # \"公司id\"\n",
"' textField_ntc1mqo ': data_details[ \"公司名称\" ][i], # \"公司名称\"\n",
"' textField_dssu351 ': data_details[ \"公司等级\" ][i], # \"公司等级\"\n",
"' dateField_hgp5gh8 ': data_details[ \"开户日期\" ][i], # \"开户日期\"\n",
"' textField_m6wvkhp ': data_details[ \"开户渠道来源\" ][i], # \"开户渠道来源\"\n",
"' textField_rzrq44v ': data_details[ \"加盟商公司名称\" ][i], # \"加盟商公司名称\"\n",
"' textField_s8u1211 ': data_details[ \"大区\" ][i], # \"大区\"\n",
"' textField_bifjpqz ': data_details[ \"小区\" ][i], # \"小区\"\n",
"' textField_zz547i2 ': data_details[ \"省份\" ][i], # \"省份\"\n",
"' textField_j86bqku ': data_details[ \"城市\" ][i], # \"城市\"\n",
"' employeeField_li0304o0 ': data_details[ \"区域经理\" ][i], # \"区域经理\"\n",
"' employeeField_li0304o1 ': data_details[ \"运营负责人\" ][i], # \"运营负责人\"\n",
"' employeeField_li0304o2 ': data_details[ \"技术专家\" ][i], # \"技术专家\"\n",
"' dateField_f7cjejs ': data_details[ \"应续约时间\" ][i], # \"应续约时间\"\n",
"' textField_4a171yy ': data_details[ \"当前saas版本\" ][i], # \"当前saas版本\"\n",
"' textField_9cja7t3 ': data_details[ \"经常性_版本收入合计\" ][i], # \"经常性_版本收入合计\"\n",
"' textField_tdd8vic ': data_details[ \"经常性_版本收入_saas\" ][i], # \"经常性_版本收入_saas\"\n",
"' textField_yc1liag ': data_details[ \"经常性_版本收入_其他\" ][i], # \"经常性_版本收入_其他\"\n",
"' textField_sazuktm ': data_details[ \"经常性_非版本收入合计\" ][i], # \"经常性_非版本收入合计\"\n",
"' textField_dzyddir ': data_details[ \"经常性_非版本收入_企业钱包\" ][i], # \"经常性_非版本收入_企业钱包\"\n",
"' textField_rimc2k8 ': data_details[ \"经常性_非版本收入_短信\" ][i], # \"经常性_非版本收入_短信\"\n",
"' textField_whlq8rb ': data_details[ \"非经常性_收入合计\" ][i], # \"非经常性_收入合计\"\n",
"' textField_jm29spy ': data_details[ \"非经常性_活动广场\" ][i], # \"非经常性_活动广场\"\n",
"' textField_hf46l34 ': data_details[ \"非经常性_服务包\" ][i], # \"非经常性_服务包\"\n",
"' textField_pkyoug6 ': data_details[ \"券金额(只做展示用,saas和服务包等已补回券金额)\" ][i], # \"券金额(只做展示用,saas和服务包等已补回券金额)\"\n",
"' dateField_uwztkat ': data_details[ \"数据处理时间\" ][i], # \"数据处理时间\"\n",
"' textField_llm3mclm ': data_details[ \"提前立减额\" ][i], # \"提前立减额\"\n",
"' textField_s6mf0at ': data_details[ \"月分区(存储年初至本月累计分子)\" ][i], # \"月分区(存储年初至本月累计分子)\"\n",
"读取到流程表中 75 条数据\n"
]
}
],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"import calendar\n",
"import datetime\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",
"# 获取当前日期\n",
"today = datetime.date.today()\n",
"# 获取当月\n",
"first_day_of_month = int(today.replace().strftime('%Y%m'))-2\n",
"\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_sales_saas_org_summary_income_m\" WHERE \"pt\" >= '{first_day_of_month}'\"\"\"\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_details = 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",
"print(len(data_details))\n",
"\n",
"\n",
"from decimal import Decimal\n",
"data_details['version_amount_total'] = data_details['version_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_saas'] = data_details['version_amount_saas'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['version_amount_other'] = data_details['version_amount_other'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_total'] = data_details['unversion_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_mngv'] = data_details['unversion_amount_mngv'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['unversion_amount_message'] = data_details['unversion_amount_message'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_total'] = data_details['irregular_amount_total'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_activity'] = data_details['irregular_amount_activity'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['irregular_amount_service'] = data_details['irregular_amount_service'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"data_details['coupon_amount'] = data_details['coupon_amount'].apply(lambda x: float(x) if isinstance(x, Decimal) else x)\n",
"\n",
"\n",
"\n",
"\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",
"\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 Batch_creation(FORMID,TOKEN,ALL_formData):\n",
" \"\"\" 获取组件信息 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchSave'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"noExecuteExpression\" : \"true\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"true\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"formDataJsonList\" : json.dumps(ALL_formData, cls=NpEncoder),\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",
"def read_instances_pt(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",
"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",
"TOKEN = generateToken() \n",
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
"# 读取流程表单数据\n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA_staff = {}\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",
" ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']\n",
"\n",
"'''获取表内控件信息 '''\n",
"FORMID = \"FORM-GI666T81ZBWAFJZVABUMA80PJSDC2YCOZ20ILZ\"\n",
"component_list = component(FORMID,TOKEN)\n",
"for i in range(len(component_list['result'])):\n",
" componentName = component_list['result'][i]['componentName']\n",
" name_value = component_list['result'][i]['label']['value']\n",
" fieldId = component_list['result'][i]['fieldId']\n",
" print(\"'\",fieldId,\"':\",\"data_details[\",name_value,\"][i], # \",name_value)\n",
"'''获取订单明细'''\n",
"form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA = []\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_pt(token=TOKEN, formUuid=\"FORM-E6766M8103CDA5M3CJ06JDRCLSKV2FJ6Z3CLLA\" , page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA.append([data['formData'][\"textField_dv032lp\"],data['formData'][\"textField_cwqfrcq\"],data['formData'][\"textField_qplm0p9\"]+data['formData'][\"textField_wy749n8\"]])\n",
"print(f'读取到流程表中 {len(ALL_DATA)} 条数据')\n",
"df_DataFrame = pd.DataFrame(ALL_DATA, columns=[ '优惠券金额', '提前续约优惠', '公司名称门店名称'])\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"data_details = data_details.astype('string')\n",
"data_details = data_details.fillna('',inplace=False)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"332"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"row_numbers = data_details.index[data_details['org_name'] == \"志丹县奥丰宝汽车保养中心\"].tolist()\n",
"row_numbers[0]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"i = row_numbers[0]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"try:\n",
" if data_details[\"franchise_group_name\"][i] ==\"\":\n",
" data_details[\"franchise_group_name\"][i] = \"普通SAAS\"\n",
"except:\n",
" pass\n",
"formData = {\n",
"'textField_l556qrj':data_details[\"year_id\"][i],#\"year_id\"\n",
"'textField_ioghzon':data_details[\"org_crm_id\"][i],#\"org_crm_id\"\n",
"'textField_kr3pc6c':data_details[\"org_id\"][i],#\"org_id\"\n",
"'textField_sv3xmix':data_details[\"org_code\"][i],#\"org_code\"\n",
"'textField_nk98j1i':data_details[\"org_name\"][i],#\"org_name\"\n",
"'textField_gvdimtj':data_details[\"group_id\"][i],#\"group_id\"\n",
"'textField_ntc1mqo':data_details[\"group_name\"][i],#\"group_name\"\n",
"'textField_dssu351':data_details[\"group_grade\"][i],#\"group_grade\"\n",
"'dateField_hgp5gh8':int(time.mktime(time.strptime(data_details[\"saas_create_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"saas_create_time\"][i] !='' else '',#\"saas_create_time\"\n",
"'textField_m6wvkhp':data_details[\"from_flag_fmt\"][i],#\"from_flag_fmt\"\n",
"'textField_rzrq44v':data_details[\"franchise_group_name\"][i],#\"franchise_group_name\"\n",
"'textField_s8u1211':data_details[\"region_name\"][i],#\"region_name\"\n",
"'textField_bifjpqz':data_details[\"branch_name\"][i],#\"branch_name\"\n",
"'textField_zz547i2':data_details[\"province_name\"][i],#\"province_name\"\n",
"'textField_j86bqku':data_details[\"city_name\"][i],#\"city_name\"\n",
"# 'employeeField_li0304o0':ALL_DATA_staff[data_details[\"area_manager\"][i]] if data_details[\"area_manager\"][i] !='' else '',#\"area_manager\"\n",
"# 'employeeField_li0304o1':ALL_DATA_staff[data_details[\"service_impl_principal\"][i]] if data_details[\"service_impl_principal\"][i] !='' else '',#\"service_impl_principal\"\n",
"# 'employeeField_li0304o2':ALL_DATA_staff[data_details[\"technician\"][i]] if data_details[\"technician\"][i] !='' else '',#\"technician\"\n",
"'dateField_f7cjejs':int(time.mktime(time.strptime(data_details[\"to_renew_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"to_renew_time\"][i] !='' else '',#\"to_renew_time\"\n",
"'textField_4a171yy':data_details[\"saas_edition_fmt\"][i],#\"saas_edition_fmt\"\n",
"'textField_9cja7t3':data_details[\"version_amount_total\"][i],#\"version_amount_total\"\n",
"'textField_tdd8vic':data_details[\"version_amount_saas\"][i],#\"version_amount_saas\"\n",
"'textField_yc1liag':data_details[\"version_amount_other\"][i],#\"version_amount_other\"\n",
"'textField_sazuktm':data_details[\"unversion_amount_total\"][i],#\"unversion_amount_total\"\n",
"'textField_dzyddir':data_details[\"unversion_amount_mngv\"][i],#\"unversion_amount_mngv\"\n",
"'textField_rimc2k8':data_details[\"unversion_amount_message\"][i],#\"unversion_amount_message\"\n",
"'textField_whlq8rb':data_details[\"irregular_amount_total\"][i],#\"irregular_amount_total\"\n",
"'textField_jm29spy':data_details[\"irregular_amount_activity\"][i],#\"irregular_amount_activity\"\n",
"'textField_hf46l34':data_details[\"irregular_amount_service\"][i],#\"irregular_amount_service\"\n",
"'textField_pkyoug6':data_details[\"coupon_amount\"][i],#\"coupon_amount\"\n",
"'dateField_uwztkat':int(time.mktime(time.strptime(data_details[\"etl_time\"][i], \"%Y-%m-%d %H:%M:%S\"))*1000) if data_details[\"etl_time\"][i] !='' else '',#\"etl_time\"\n",
"'textField_s6mf0at':data_details[\"pt\"][i],#\"pt\"\n",
"'textField_llm3mclm':\"0\" #\"提前续约优惠\"\n",
"}\n",
"try:\n",
" formData['employeeField_li0304o2'] = ALL_DATA_staff[data_details[\"technician\"][i]]\n",
"except:\n",
" formData['employeeField_li0304o2'] = \"\"\n",
"try:\n",
" formData['employeeField_li0304o1'] = ALL_DATA_staff[data_details[\"service_impl_principal\"][i]]\n",
"except:\n",
" formData['employeeField_li0304o1'] = \"\"\n",
"try:\n",
" formData['employeeField_li0304o0'] = ALL_DATA_staff[data_details[\"area_manager\"][i]]\n",
"except:\n",
" formData['employeeField_li0304o0'] = \"\"\n",
"try:\n",
" group_name_org_name = formData['textField_ntc1mqo'] + formData['textField_nk98j1i']\n",
" row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
" if row_numbers[0]>0:\n",
" pandan_new = int(float(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0])) - int(float(formData['textField_pkyoug6']))\n",
" if pandan_new > 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers[0],'提前续约优惠'].values[0] # 提前续约优惠\n",
"except:\n",
" formData['textField_llm3mclm'] = \"0\""
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"group_name_org_name = formData['textField_ntc1mqo'] + formData['textField_nk98j1i']\n",
"row_numbers = df_DataFrame.index[df_DataFrame['公司名称门店名称'] == group_name_org_name].tolist()\n",
"if row_numbers[0]>0:\n",
" pandan_new = int(float(df_DataFrame.loc[row_numbers,'优惠券金额'].values[0])) - int(float(formData['textField_pkyoug6']))\n",
" if pandan_new == 0 or df_DataFrame.loc[row_numbers,'优惠券金额'].values[0] == \"0\":\n",
" formData['textField_llm3mclm'] = df_DataFrame.loc[row_numbers[0],'提前续约优惠'] # 提前续约优惠"
]
}
],
"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
}