241 lines
9.6 KiB
Python
241 lines
9.6 KiB
Python
'''
|
|
连接数据库信息
|
|
对数据进行过滤
|
|
宜搭新建普通表单——字段一一对应
|
|
将读取数据写入宜搭表单
|
|
设置定时任务校验数据变动
|
|
'''
|
|
|
|
# -*- coding: utf-8 -*-
|
|
import psycopg2
|
|
import pandas as pd
|
|
# 获得连接
|
|
conn = psycopg2.connect(database="f6_bi", user="BASIC$ro_caowei", password="!ro_caowei123", host="hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com", port="80")
|
|
# 获得游标对象,一个游标对象可以对数据库进行执行操作
|
|
cursor = conn.cursor()
|
|
|
|
import datetime
|
|
now_time = datetime.datetime.now()
|
|
yes_time = now_time + datetime.timedelta(days=-1)
|
|
yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期
|
|
# sql语句 建表
|
|
sql =f"""SELECT * FROM "public"."holo_ads_report_sales_saas_commission_info_d" WHERE "date_fmt" LIKE '%{yes_time_nyr}%' AND "org_type" LIKE '%一般%' ;"""
|
|
# 执行语句
|
|
cursor.execute(sql)
|
|
# 获取结果集的每一行
|
|
rows = cursor.fetchall()
|
|
# 获取所有字段名
|
|
all_fields = cursor.description
|
|
#执行结果转化为dataframe
|
|
col = []
|
|
for i in all_fields:
|
|
col.append(i[0])
|
|
data_F6 = pd.DataFrame(list(rows),columns=col)
|
|
# data_F6.to_excel(r'C:\Users\admin\Desktop\小六提成明细.xlsx')
|
|
# 关闭数据库连接
|
|
cursor.close()
|
|
conn.close()
|
|
|
|
print(len(data_F6))
|
|
|
|
# 基础函数配置
|
|
import pandas as pd
|
|
import pandas as pd
|
|
import requests
|
|
from pathlib import Path
|
|
from urllib.parse import quote
|
|
import json
|
|
import numpy as np
|
|
import time
|
|
|
|
ROOT = Path('.').absolute() # 当前工作目录
|
|
|
|
def generateToken() -> str:
|
|
""" 生成 token """
|
|
|
|
token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'
|
|
|
|
# 该信息在钉钉开放应用中
|
|
data = {
|
|
"appKey": "ding5kqocon5s9oph5uq",
|
|
"appSecret": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'
|
|
}
|
|
|
|
res = requests.post(token_api, json=data)
|
|
token = res.json()['accessToken']
|
|
|
|
return token
|
|
|
|
def read_instances(token, formUuid, page, n):
|
|
""" 函数功能:读取普通表单的所有数据 """
|
|
|
|
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'
|
|
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
"x-acs-dingtalk-access-token": token
|
|
}
|
|
|
|
formData = {
|
|
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
|
|
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
|
|
"userId" : "yida_pub_account",
|
|
"language" : "zh_CN",
|
|
"formUuid" : formUuid,
|
|
"currentPage" : page,
|
|
"pageSize" : n
|
|
}
|
|
|
|
res = requests.post(api, headers=headers, json=formData)
|
|
return res.json()
|
|
|
|
def read_delete(token, formInstanceId):
|
|
""" 函数功能:调用本接口删除表单数据。 """
|
|
|
|
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
|
|
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
"x-acs-dingtalk-access-token": token
|
|
}
|
|
|
|
formData = {
|
|
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
|
|
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
|
|
"userId" : "yida_pub_account",
|
|
"language" : "zh_CN",
|
|
"formInstanceId" : formInstanceId
|
|
}
|
|
|
|
res = requests.delete(api, headers=headers, json=formData)
|
|
return res.json()
|
|
|
|
def read_new(FORMID,formData):
|
|
""" 通过实例id 获取表单内容 """
|
|
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances'
|
|
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
"x-acs-dingtalk-access-token": TOKEN
|
|
}
|
|
payload = {
|
|
"formUuid" : FORMID,
|
|
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
|
|
"formDataJson" : json.dumps(formData, cls=NpEncoder),
|
|
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
|
|
"language" : "zh_CN",
|
|
"userId" : "yida_pub_account"
|
|
}
|
|
|
|
res = requests.post(api, headers=headers, json=payload)
|
|
print(res.json())
|
|
|
|
return res.json()
|
|
class NpEncoder(json.JSONEncoder):
|
|
def default(self, obj):
|
|
if isinstance(obj, np.integer):
|
|
return int(obj)
|
|
elif isinstance(obj, np.floating):
|
|
return float(obj)
|
|
elif isinstance(obj, np.ndarray):
|
|
return obj.tolist()
|
|
else:
|
|
return super(NpEncoder, self).default(obj)
|
|
|
|
# 读取员工对应关系:宜搭员工-ID对应表
|
|
TOKEN = generateToken()
|
|
FORMID = "FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6
|
|
# 读取流程表单数据
|
|
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
|
|
PAGES = form_data.get('totalCount')//100 + 1
|
|
|
|
ALL_DATA_staff = []
|
|
""" 获取全量数据 """
|
|
for i in range(1, PAGES+1):
|
|
# form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})
|
|
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)
|
|
for data in form_data.get('data'):
|
|
ALL_DATA_staff.append(data)
|
|
|
|
FORMID = "FORM-GP666M71TNE9GFK57V2O85NLM04I34CSG1TFLC" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6
|
|
data_F6 = data_F6.astype('string')
|
|
data_F6 = data_F6.fillna('',inplace=False)
|
|
for i in range(0,len(data_F6)):
|
|
if data_F6["saas_create_time"][i] =="":
|
|
data_F6["saas_create_time"][i] = '2000-01-01 00:00:00'
|
|
if data_F6["pay_date"][i] =="":
|
|
data_F6["pay_date"][i] = '2000-01-01'
|
|
if data_F6["etl_time"][i] =="":
|
|
data_F6["etl_time"][i] = '2000-01-01 00:00:00'
|
|
if data_F6["date_fmt_2"][i] =="":
|
|
data_F6["date_fmt_2"][i] = '2000-01-01'
|
|
if data_F6["saas_create_time_2"][i] =="":
|
|
data_F6["saas_create_time_2"][i] = '2000-01-01 00:00:00'
|
|
if data_F6["pay_date_2"][i] =="":
|
|
data_F6["pay_date_2"][i] = '2000-01-01'
|
|
formData = {
|
|
"textField_xgaye7b":data_F6["date_fmt"][i],
|
|
"textField_5aunjjz":data_F6["to_grant_employee_id"][i],
|
|
"employeeField_lft1hn2e":[v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== data_F6["to_grant_person"][i]],
|
|
"employeeField_lft1hn2f":[v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== data_F6["area_manager"][i]],
|
|
"textField_3qsnt9b":data_F6["region_name"][i],
|
|
"textField_ua446tp":data_F6["province_name"][i],
|
|
"textField_j9ljlkf":data_F6["commission_type_1st"][i],
|
|
"textField_b0zcpw7":data_F6["commission_type_2nd"][i],
|
|
"textField_07mm4y7":data_F6["order_id"][i],
|
|
"textField_m3fpjk2":data_F6["order_no"][i],
|
|
"textField_6glka3o":data_F6["org_id"][i],
|
|
"textField_dfvhslm":data_F6["org_code"][i],
|
|
"textField_syljyve":data_F6["org_name"][i],
|
|
"textField_xindatc":data_F6["org_crm_id"][i],
|
|
"textField_ewa0fov":data_F6["group_id"][i],
|
|
"textField_kqi0lgg":data_F6["group_name"][i],
|
|
"dateField_9rmplmj":int(time.mktime(time.strptime(data_F6["saas_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000),
|
|
"textField_gkzyime":data_F6["saas_edition_fmt"][i],
|
|
"textField_nz7bokd":data_F6["spu_id"][i],
|
|
"textField_czwr4gi":data_F6["spu_name"][i],
|
|
"numberField_u2uxl9r":data_F6["is_upgrade_order"][i],
|
|
"numberField_zriq77s":data_F6["is_finish_follow"][i],
|
|
"numberField_zwvyzuw":data_F6["is_first_renew"][i],
|
|
"dateField_dezcysa":int(time.mktime(time.strptime(data_F6["pay_date"][i], "%Y-%m-%d"))*1000),
|
|
"numberField_7soucf9":data_F6["order_trade_amount"][i],
|
|
"numberField_vbubqg5":data_F6["amount_real_base"][i],
|
|
"numberField_322ap3t":data_F6["amount_real_beyond"][i],
|
|
"numberField_9r0pqjh":data_F6["r_within_base"][i],
|
|
"numberField_86nt5n9":data_F6["r_beyond_base"][i],
|
|
"numberField_4zq0um5":data_F6["commission_proportion"][i],
|
|
"numberField_4udpris":data_F6["over_commission_proportion"][i],
|
|
"numberField_t7q2mf8":data_F6["commission_base"][i],
|
|
"numberField_26r5qhn":data_F6["satisfy_score"][i],
|
|
"numberField_z56c377":data_F6["deduction_factor"][i],
|
|
"dateField_7bb5a3w":int(time.mktime(time.strptime(data_F6["etl_time"][i], "%Y-%m-%d %H:%M:%S"))*1000),
|
|
"textField_nir0f7g":data_F6["branch_name"][i],
|
|
"textField_x72zywz":data_F6["city_name"][i],
|
|
"employeeField_lft1hn2g":[v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== data_F6["technician"][i]],
|
|
"textField_o65xr8r":data_F6["to_grant_employee_code"][i],
|
|
"textField_m48obfc":data_F6["is_first_add_purchase"][i],
|
|
"textField_3w926j1":data_F6["month_fmt"][i],
|
|
"textField_1st9ba2":data_F6["ding_user_id"][i],
|
|
"textField_mxlhhx6":data_F6["org_type"][i],
|
|
"numberField_tnr50pm":data_F6["new_stage_flag"][i],
|
|
"dateField_0tk0bj2":int(time.mktime(time.strptime(data_F6["date_fmt_2"][i], "%Y-%m-%d"))*1000),
|
|
"dateField_vl6p1ds":int(time.mktime(time.strptime(data_F6["saas_create_time_2"][i], "%Y-%m-%d %H:%M:%S"))*1000),
|
|
"dateField_3oc57kk":int(time.mktime(time.strptime(data_F6["pay_date_2"][i], "%Y-%m-%d"))*1000),
|
|
"textField_br8o1wy":data_F6["month_fmt_2"][i],
|
|
"numberField_pkt6w2o":data_F6["order_period_year_number"][i],
|
|
"textField_9solcme":data_F6["business_type"][i],
|
|
"textField_lld2doy7":data_F6["franchise_group_name"][i],
|
|
"numberField_esmnply":data_F6["is_more_paid"][i],
|
|
"textField_llyskpc6":data_F6["is_more_paid"][i],
|
|
"textField_llyskpc6":str(data_F6["date_fmt"][i]) + str(i)
|
|
|
|
}
|
|
if formData['textField_lld2doy7']=="修工坊全国运营中心" or formData['textField_lld2doy7']=="CC养车" or formData['textField_lld2doy7']=="金铁橡全国运营中心":
|
|
if formData['textField_gkzyime'] == "基础版":
|
|
formData['numberField_7soucf9'] = 500
|
|
if formData['textField_gkzyime'] == "尊享版":
|
|
formData['numberField_7soucf9'] = 1500
|
|
read_new(FORMID,formData)
|
|
|
|
data_F6 = data_F6.astype(str)
|
|
data_F6.to_excel(r'C:\Users\admin\Desktop\小六提成明细'+str(yes_time_nyr)+'.xlsx') |