Files
F6--/其它系统脚本/代码运行位置.py
T
2026-01-30 11:28:35 +08:00

669 lines
35 KiB
Python
Raw 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.
# 基础信息
import pandas as pd
import numpy as np
import requests
import json
import time
import re
import sys
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pathlib import Path
from urllib.parse import quote
from datetime import date, timedelta
import datetime
from io import BytesIO
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_processes_instances(token, formUuid, page, n):
""" 函数功能:读取流程表单的所有数据 """
api = f'https://api.dingtalk.com/v1.0/yida/processes/instances?pageNumber={page}&pageSize={n}'
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,
# "searchFieldJson": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储
"instanceStatus": "RUNNING" # 运行中
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def queryLastSaasInfo(cellPhone):
""" 函数功能:手机号查询最近一次购买saas明细 """
api = 'http://manage.f6yc.com/hive-admin/yida/order/queryLastSaasInfo?cellPhone=' + cellPhone
headers = {
"token":"af88h9KvLQrdvVhFhS8zD1yWx9cu"
}
res = requests.post(api,headers=headers)
return res.json()
def get_approval_records(token: str, processInstanceId: str):
""" 函数功能:获取流程表单的审批记录 """
appType = "APP_UYZ0KG6L0CCNV80GZ66O"
systemToken = "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2"
userId = "yida_pub_account"
api = f'https://api.dingtalk.com/v1.0/yida/processes/operationRecords?appType={appType}&systemToken={systemToken}&userId={userId}&language=zh_CN&processInstanceId={processInstanceId}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
res = requests.get(api, headers=headers)
# print('获取流程表单的审批记录')
return res.json()
def aggree_approval(token: str, taskId: str, processInstanceId: str,res_new,formDataJson):
""" 函数功能:同意审批节点 """
api = f'https://api.dingtalk.com/v1.0/yida/tasks/execute'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"outResult": "AGREE",
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"remark": "同意(接口自动)",
"formDataJson": json.dumps(formDataJson),
"processInstanceId": processInstanceId,
# "userId": "yida_pub_account",
"userId": res_new,
"language": "zh_CN",
"taskId": int(taskId)
}
res = requests.post(api, headers=headers, json=payload)
# print('同意审批节点')
return res
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 queryCompanies(cellPhone):
""" 函数功能:自动发券查询手机号所处公司 """
api = 'http://manage.f6yc.com/hive-admin/yida/account/query?cellPhone=' + cellPhone
headers = {
"token":"af88h9KvLQrdvVhFhS8zD1yWx9cu"
}
res = requests.post(api,headers=headers)
return res.json()
def queryDetailByOrgId(orgId):
""" 函数功能:自动发券查询门店上次成交价 """
api = 'http://manage.f6yc.com/hive-admin/yida/org/queryDetailByOrgId?orgId=' + orgId
headers = {
"token":"af88h9KvLQrdvVhFhS8zD1yWx9cu"
}
res = requests.post(api,headers=headers)
return res.json()
def component(FORMID,TOKEN):
""" 获取组件信息 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/formFields'
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.get(api, headers=headers, json=payload)
return res.json()
def Batch_creation(FORMID,TOKEN,ALL_formData):
""" 获取组件信息 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchSave'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
# "formDataJson" : json.dumps(formData, cls=NpEncoder),
"noExecuteExpression" : "false",
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "false",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : ALL_formData,
# "formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def queryskuList():
""" 函数功能:按照商品分类查询商品列表接口 """
api = 'http://manage.f6yc.com/hive-admin/yida/sku/category/query?category=4'
headers = {
"token":"af88h9KvLQrdvVhFhS8zD1yWx9cu"
}
res = requests.post(api,headers=headers)
return res.json()
def couponAvailableQuery(cellPhone,groupId,skuList,passportId):
""" 函数功能:在当前选择场景下查询手机号可以使用的优惠券 http://manage.f6yc.com/hive-admin/ """
api = f'http://manage.f6yc.com/hive-admin/yida/coupon/available/query?passportId={passportId}&cellPhone={cellPhone}&groupId={groupId}&skuList' + str(skuList)
headers = {
"token":"af88h9KvLQrdvVhFhS8zD1yWx9cu"
}
res = requests.post(api,headers=headers)
return res.json()
def queryPriceInfoBySkuId(orgId,skuId,saasUpdate):
""" 函数功能:商品价格查询"""
api = f'http://manage.f6yc.com/hive-admin/yida/sku/queryPriceInfoBySkuId?orgId={orgId}&skuId={skuId}&saasUpdate={saasUpdate}'
headers = {
"token":"af88h9KvLQrdvVhFhS8zD1yWx9cu"
}
res = requests.post(api,headers=headers)
return res.json()
def read_instances_new(token, formUuid, page, n,CREATE_FROM, CREATE_TO):
""" 函数功能:读取流程表单的所有数据 """
api = f'https://api.dingtalk.com//v1.0/yida/processes/instances?pageNumber={page}&pageSize={n}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
"appType": "APP_RTPWHV37ENXPQUZHTL25",
"systemToken": "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"userId": "yida_pub_account", # 超级管理员账号
"language": "zh_CN",
"formUuid": formUuid,
"createFromTimeGMT":CREATE_FROM,
"createToTimeGMT":CREATE_TO
# "searchFieldJson": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储
# "instanceStatus": "RUNNING"
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def updateFormDataJson (token, formUuid, updateFormDataJson):
""" 函数功能:更新表单数据 """
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_RTPWHV37ENXPQUZHTL25",
"systemToken": "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"userId": "yida_pub_account", # 超级管理员账号
"language": "zh_CN",
"formInstanceId": formUuid,
"updateFormDataJson":updateFormDataJson
}
res = requests.put(api, headers=headers, json=formData)
return res.json()
from datetime import datetime
import time
def get_time_range_minute(n):
""" 获取近n分钟的时间戳(单位是毫秒)"""
def delay_time(time_str, years=0, months=0, days=0, hours=0, minutes=0, seconds=0):
if type(time_str) == str:
time_str = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
ret = time_str + relativedelta(years=years, months=months, days=days, hours=hours, minutes=minutes, seconds=seconds)
return ret
# 获得当前时间
now_time = datetime.now()
endTime = int(time.mktime(time.strptime(now_time.strftime('%Y/%m/%d %H:%M:%S'), '%Y/%m/%d %H:%M:%S'))) * 1000 - 1000
# n小时前的时间
ret2 = delay_time(now_time, minutes=-n)
startTime = int(time.mktime(time.strptime(ret2.strftime('%Y/%m/%d %H:%M:%S'), '%Y/%m/%d %H:%M:%S'))) * 1000
# print(f'时间区间:[{startTime}-{endTime}]')
return startTime, endTime
def timeStamp(timeNum):
""" 函数功能:将时间戳(毫秒) 转化为时间日期格式"""
timeStamp = float(timeNum/1000)
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return otherStyleTime
# 4320分钟时间间隔
CREATE_FROM, CREATE_TO = [timeStamp(t) for t in get_time_range_minute(4320)]
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)
'''获取表内控件信息 '''
TOKEN = generateToken()
FORMID_NEW = "FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9"
component_list = component(FORMID_NEW,TOKEN)
for i in range(len(component_list['result'])):
componentName = component_list['result'][i]['componentName']
name_value = component_list['result'][i]['label']['value']
fieldId = component_list['result'][i]['fieldId']
print("'",fieldId,"':","data[",name_value,"][i],#",name_value)
""" 处理流程开始 """
FORMID = "FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9" # 【测试版本】批量自动发券
# 读取续约流程表单
form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
""" 获取全量数据 """
for i in range(1, PAGES+1):
form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)
for v in range(0,len(form_data.get('data'))):
# 获取当前所处节点
res_new = get_approval_records(token=TOKEN, processInstanceId=form_data['data'][v]['processInstanceId'])
records_new = res_new.get('result')
# 获取审批节点的 taskId
records_new = [item for item in records_new if item.get('type') == "TODO"]
taskId_new = records_new[0]['activityId']
taskId = records_new[0]['taskId']
if taskId_new=="sid-6470221a-82ec-4bdd-a873-245ee47a5605": # check
print("开始处理!")
# 读取NGV明细
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_saas_profile_ngv_detail_d" WHERE "date_id" = '{yes_time_nyr}';"""
# 执行语句
cursor.execute(sql)
# 获取结果集的每一行
rows = cursor.fetchall()
# 获取所有字段名
all_fields = cursor.description
#执行结果转化为dataframe
col = []
for i in all_fields:
col.append(i[0])
data_NGV = pd.DataFrame(list(rows),columns=col)
# 关闭数据库连接
cursor.close()
conn.close()
'''读取商品和券信息'''
FORMID_TWO = "FORM-6L966171O3RB70TJDB75R6RBI31V2NNACKCJLF1" # 商品ID券ID关系表
all_skuId = {}
all_couponTemplateId = {}
textField_ljwon3vt = {}
textField_ljxv26ip = {}
list_new = 0
tableField_data_new = {}
form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=1, n=100)
PAGES_TWO = form_data_TWO.get('totalCount')//100 + 1
for a in range(1, PAGES_TWO+1):
form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=a, n=100)
for data_TWO in form_data_TWO.get('data'):
all_skuId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_nt0h72h']
all_couponTemplateId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_47og525']
textField_ljwon3vt[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljwon3vt']
textField_ljxv26ip[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljxv26ip']
""" 开始分别读取数据并填充数据进行创建 """
for data in form_data['data'][v]['data']['tableField_ljcfpjg4']:
# 基础字段预设
data_new = {}
data_new['textField_ljibuzgd'] = ""
data_new['textField_ljibuzge'] = ""
try:
# 获取门店编码对应的信息
result = data_NGV[data_NGV['org_code'] == data['textField_ljcfpjg6']]
result = result.reset_index()
# 获取手机号+判断手机号是否在公司名下
# 获取手机号+判断手机号是否在公司名下
if data["textField_ljcfpjg8"] =="": # 手机号未填写,默认填充ngv中对应的手机号
data_new['textField_ljibuzgl'] = result['contact_mobile'][0]
else:
data_new['textField_ljibuzgl'] = data["textField_ljcfpjg8"]
cellPhone_group_name = queryCompanies(data_new['textField_ljibuzgl'])
groupName_all = {}
for data_two in cellPhone_group_name['data']['groupList']:
groupName_all[data_two["groupName"]]=data_two["groupId"]
try:
if len(cellPhone_group_name['data']['groupList']) > 0:
pass
else:
data_new['textField_ljibuzgl'] = data["textField_ljcfpjg8"]
data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + "F6中不存在该手机号;"
except:
data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + "F6中不存在该手机号;"
if result['group_name'][0] not in groupName_all:
data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + "联系电话与门店编码关系错误;"
# # 本次成交年限(1、2、3 selectField_ljicmdwn
# if data["selectField_ljicmdwn"] =="1" or data["selectField_ljicmdwn"] =="2" or data["selectField_ljicmdwn"] =="3":
# data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + "本次成交年限填写错误,请填写【1、2、3】;"
# 获取公司名称+门店名称+门店版本+到期日+门店编码
data_new['textField_ljibuzgm'] = result['group_name'][0]
data_new['textField_ljibuzgh'] = result['org_name'][0]
data_new['textField_ljibuzgi'] = result['saas_edition_fmt'][0]
data_new['textField_ljibuzgf'] = result['expiry_time'][0]
data_new['textField_ljibuzgn'] = result['org_code'][0]
# 获取上次成交价 textField_ljibuzgg
OrgId_list = queryDetailByOrgId(result['id_own_org'][0])
data_new['textField_ljibuzgg'] = OrgId_list['data']['lastSaasOrderPrice']/OrgId_list['data']['lastTransactionYear']
# 获取提前续约立减额 textField_ljibuzgj
try:
queryPriceInfoBySkuIdnew = queryPriceInfoBySkuId(result['id_own_org'][0],all_skuId[result['saas_edition_fmt'][0] + "1"],"false")
data_new['textField_ljibuzgj'] = queryPriceInfoBySkuIdnew['data']['renewalDiscountAmount']
except:
data_new['textField_ljibuzgj'] = "0"
# 版本续约金额
data_new['textField_lk6g6e2l'] = textField_ljwon3vt[result['saas_edition_fmt'][0] + "1"] # 版本续约金额
# 申请优惠券金额 numberField_ljwn6n7w_value 判断优惠券申请金额是否填写,如果没有填写则进行填充
# 本次成交价 numberField_ljwn6n7w_value 判断本次成交价是否填写,如果没有填写则进行填充
if data["numberField_ljwn6n7w_value"] != "":
data_new['textField_ljibuzgk'] = data["numberField_ljwn6n7w_value"]
if int(data["numberField_ljwn6n7w_value"]) <= 0:
data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + "本次成交价需要大于0,或者为空;"
elif data["numberField_ljwn6n7w_value"] == "": # 判断本次成交价是否填写,如果没有填写则进行填充 默认取 上次成交价
data_new['textField_ljibuzgk'] = data_new['textField_ljibuzgg']
else:
data_new['textField_ljibuzgk'] =data["numberField_ljwn6n7w_value"]
# 获取申请优惠券金额 textField_ljibuzgp 申请优惠券金额= 版本价格-提前立减额-本次成交价
data_new['textField_ljibuzgp'] = int(data_new['textField_lk6g6e2l']) - int(data_new['textField_ljibuzgj']) - int(data_new['textField_ljibuzgk'])
# # 获取本次成交价格 textField_ljibuzgk
# if data["numberField_ljwn6n7w_value"] =="":
# data_new['textField_ljibuzgk'] = int(textField_ljwon3vt[result['saas_edition_fmt'][0] + "1"]) - int(data_new['textField_ljibuzgp'])- int(data_new['textField_ljibuzgj'])
# else:
# data_new['textField_ljibuzgk'] = int(textField_ljwon3vt[result['saas_edition_fmt'][0] + "1"]) - int(data_new['textField_ljibuzgp']) - int(data_new['textField_ljibuzgj'])
# 获取已有优惠券
passportId=int(cellPhone_group_name['data']['passportId'])
cellPhone=int(data_new['textField_ljibuzgl'])
groupId = int(result['id_own_group'][0])
skuList = queryskuList()
# 过滤 仅入参对应版本的
filtered_data = [item for item in skuList["data"] if item['saasEditionName'] == result['saas_edition_fmt'][0]]
filtered_data_skuList={'code': 200,
'data': filtered_data,
'message': 'SUCCESS'}
couponAvailableQuery_list = couponAvailableQuery(cellPhone,groupId,filtered_data_skuList,passportId)
for data_ONE in couponAvailableQuery_list['data']:
data_new['textField_ljibuzge'] = data_new['textField_ljibuzge'] + data_ONE ['couponName'] + ""+ str(data_ONE ['couponValue']) +""
if "优惠券" in data_ONE ['couponName']:
data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] +"存在未使用的优惠券;"
# 是否低于限价 radioField_ljxz9ho5 是否发券 radioField_ljibuzgc 版本限价 textField_lk6hj6sw
data_new['textField_lk6hj6sw'] = textField_ljxv26ip[result['saas_edition_fmt'][0] + "1"]
if int(data_new['textField_ljibuzgk']) < int(textField_ljxv26ip[result['saas_edition_fmt'][0] + "1"]):
data_new['radioField_ljxz9ho5'] = ""
# data_new['radioField_ljibuzgc'] = "否"
else:
data_new['radioField_ljxz9ho5'] = ""
# 是否的低于上次成交价 radioField_ljxz9ho6 是否发券 radioField_ljibuzgc
if int(data_new['textField_ljibuzgk']) < int(data_new['textField_ljibuzgg']):
data_new['radioField_ljxz9ho6'] = ""
# data_new['radioField_ljibuzgc'] = "否"
else:
data_new['radioField_ljxz9ho6'] = ""
# if int(data_new['textField_ljibuzgj']) > 0:
# data_new['textField_ljibuzgd'] = "存在提前续约立减额,不是30天内过期客户!"
# if int(data_new['textField_ljibuzgp']) <= 0:
# data_new['textField_ljibuzgd'] = "申请优惠金额需要大于0元!"
# # 集合 textField_ljy172na
# data_new['textField_ljy172na'] = str({
# "cellPhone":data_new["textField_ljibuzgl"], # 收劵人手机号码
# "dingDingId":form_data['data'][v]['originator']['userId'], # 申请人钉钉ID
# "stage":2, # 所属阶段(新签:1,续约:2)
# "couponApplyType":1, # 优惠券申请类型;新签:saas优惠劵申请:1,短信优惠劵申请:2,人工服务优惠劵申请:3;续约:saas续约优惠劵申请:1,saas升级优惠劵申请:2,短信优惠劵申请:3,人工服务优惠劵申请:4(暂不支持)
# "detailList":[{ # 发劵明细列表
# "couponTemplateId":all_couponTemplateId[result['saas_edition_fmt'][0] + "1"], # 劵模板ID
# "couponAmount":int(data_new["textField_ljibuzgp"]), # 劵金额,>0
# "grantGroup":1, # 1:发送到公司+人,0:发送到人
# "groupId":result['id_own_group'][0], # 发放公司ID,发在公司下=true是有值
# "skuId":all_skuId[result['saas_edition_fmt'][0] + "1"], # 商品id
# "orgId":result['id_own_org'][0], # 门店ID,(申请续约劵并且降级时必填)
# "demotion":0, # 降级(是:1,否:0
# "demotionSaaSEdition":0 # 降级版本,门店降级时必填
# }]
# })
# data_new['textField_ljy172na'] = data_new['textField_ljy172na'].replace("'", '"')
# data_new['textField_ljy172na'] = data_new['textField_ljy172na'].replace(" ", "")
except:
data_new['textField_ljibuzgd'] = "数据读取异常:" + data_new['textField_ljibuzgd']
# CHECK结果校验 textField_ljibuzgd
if data_new['textField_ljibuzgd'] == "":
data_new['textField_ljibuzgd'] = "正确"
list_new = list_new + 1
# 回传结果
if list_new == 1:
tableField_data_new['tableField_ljibuzgq'] = [data_new]
else:
tableField_data_new['tableField_ljibuzgq'].append(data_new)
res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new ="2268275546837446",formDataJson=tableField_data_new)
print(form_data['data'][v]['processInstanceId'],res.json())
time.sleep(2)
elif taskId_new=="sid-23822834-234a-b12a-dfea-a6ad1acc8c1b": # API自动发券
print("开始处理发券!")
# 读取NGV明细
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_saas_profile_ngv_detail_d" WHERE "date_id" = '{yes_time_nyr}';"""
# 执行语句
cursor.execute(sql)
# 获取结果集的每一行
rows = cursor.fetchall()
# 获取所有字段名
all_fields = cursor.description
#执行结果转化为dataframe
col = []
for i in all_fields:
col.append(i[0])
data_NGV = pd.DataFrame(list(rows),columns=col)
# 关闭数据库连接
cursor.close()
conn.close()
'''读取商品和券信息'''
FORMID_TWO = "FORM-6L966171O3RB70TJDB75R6RBI31V2NNACKCJLF1" # 商品ID券ID关系表
all_skuId = {}
all_couponTemplateId = {}
textField_ljwon3vt = {}
textField_ljxv26ip = {}
list_new = 0
succeed_all = 0
all_all= 0
tableField_data_new = {}
data_new = {}
data_check = {}
formDataJson_check = {}
code_new = ""
formDataJson_check['textField_ljcfpjgd'] = ""
form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=1, n=100)
PAGES_TWO = form_data_TWO.get('totalCount')//100 + 1
for a in range(1, PAGES_TWO+1):
form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=a, n=100)
for data_TWO in form_data_TWO.get('data'):
all_skuId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_nt0h72h']
all_couponTemplateId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_47og525']
textField_ljwon3vt[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljwon3vt']
textField_ljxv26ip[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljxv26ip']
FORMID = "FORM-XHA66881FHMAR0F07GT4Y59GGA972DD6B5OHLB" # [流程]自动化优惠券(+多年)
# 读取[流程]自动化优惠券(+多年)
form_data_new = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,CREATE_FROM=CREATE_FROM, CREATE_TO=CREATE_TO)
PAGES = form_data_new.get('totalCount')//100 + 1
ALL_DATA_code = []
""" 获取全量数据 """
for i in range(1, PAGES+1):
form_data_new = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,CREATE_FROM=CREATE_FROM, CREATE_TO=CREATE_TO)
for data_one in form_data_new.get('data'):
try:
for j in range(0,len(data_one['data']['tableField_l1w05znp'])):
ALL_DATA_code.append(str(data_one['data']['tableField_l1w05znp'][j]['selectField_l1wxjd8l']) + "+" + str(data_one['data']['tableField_l1w05znp'][j]['textField_l5j0ym23']))
except:
pass
print(f'读取到 [[流程]自动化优惠券(+多年)表中 {len(ALL_DATA_code)} 条数据!')
for data in form_data['data'][v]['data']['tableField_ljibuzgq']: # -----------------------------------------------
updateFormDataJson_check = {}
# 获取门店编码对应的信息
result = data_NGV[data_NGV['org_code'] == data['textField_ljibuzgn']]
result = result.reset_index()
# 读取[流程]自动化优惠券(+多年)中存在该门店发券流程,避免重复发券
if str(data['textField_ljibuzgn']) + "+" + str(all_couponTemplateId[result['saas_edition_fmt'][0] + "1"]) in ALL_DATA_code:
# updateFormDataJson_check['textField_ljibuzgd'] = data['textField_ljibuzgd'] + "[流程]自动化优惠券(+多年)中存在该门店发券流程!;"
# updateFormDataJson_check['radioField_ljxz9ho5'] = "否"
# FORMID = "FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9" # 【测试版本】批量自动发券
# res=updateFormDataJson(TOKEN, FORMID, updateFormDataJson_check)
# print(res.json)
code_new = code_new + data["textField_ljibuzgl"] + ""
else:
# res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new ="2268275546837446",formDataJson=tableField_data_new)
# print(form_data['data'][v]['processInstanceId'],res.json())
# for data_ONE in couponAvailableQuery_list['data']:
# if "续约优惠券" in data_ONE ['couponName']:
# data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] +"存在未使用的续约优惠券;"
# data_new['textField_ljibuzge'] = data_new['textField_ljibuzge'] + data_ONE ['couponName'] + ""+ str(data_ONE ['couponValue']) +""
# check_all = check_all + 1
data_new['textField_ljy172na'] = str({
"cellPhone":data["textField_ljibuzgl"], # 收劵人手机号码
"dingDingId":form_data['data'][v]['originator']['userId'], # 申请人钉钉ID
"stage":2, # 所属阶段(新签:1,续约:2
"couponApplyType":1, # 优惠券申请类型;新签:saas优惠劵申请:1,短信优惠劵申请:2,人工服务优惠劵申请:3;续约:saas续约优惠劵申请:1,saas升级优惠劵申请:2,短信优惠劵申请:3,人工服务优惠劵申请:4(暂不支持)
"detailList":[{ # 发劵明细列表
"couponTemplateId":all_couponTemplateId[result['saas_edition_fmt'][0] + "1"], # 劵模板ID
"couponAmount":int(float(data["textField_ljibuzgp"])), # 劵金额,>0
"grantGroup":1, # 1:发送到公司+人,0:发送到人
"groupId":result['id_own_group'][0], # 发放公司ID,发在公司下=true是有值
"skuId":all_skuId[result['saas_edition_fmt'][0] + "1"], # 商品id
"orgId":result['id_own_org'][0], # 门店ID,(申请续约劵并且降级时必填)
"demotion":0, # 降级(是:1,否:0
"demotionSaaSEdition":0 # 降级版本,门店降级时必填
}]
})
data_list = {
'textField_ljchgz1f':data['textField_ljibuzgn'], # 门店编码
'textField_ljchgz1i':data_new['textField_ljy172na'], # 数据集
'textField_ljchgz1h':data['textField_ljibuzgd'], # check结果
'textField_ljy1x9kb':form_data['data'][v]['processInstanceId'], # 关联表单id
'textField_ljf6nf7s':data['radioField_ljibuzgc'] # 是否发券
}
ALL_formData = []
ALL_formData.append(json.dumps(data_list, cls=NpEncoder))
FORMID_NEW = "FORM-JD8668C1MFBC3ND4BWO736T7G5Q7318IC0YJLA" # 【测试版本】自动触发明细表
res = Batch_creation(FORMID_NEW,TOKEN,ALL_formData)
print(data['textField_ljibuzgn'],data["textField_ljibuzgl"],res)
time.sleep(2)
all_all = all_all + 1
if data['textField_ljibuzgd'] == "正确" and data['radioField_ljibuzgc'] == "":
succeed_all = succeed_all + 1
fail_all = all_all - succeed_all
if len(code_new)>0:
txt_all = f"发送成功:{succeed_all}条;发送失败:{fail_all}条;{code_new}在[流程]自动化优惠券(+多年)中有申请记录!"
else:
txt_all = f"发送成功:{succeed_all}条;发送失败:{fail_all}条;"
formDataJson_check = {
'textField_ljcfpjgd':txt_all
}
res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new ="2268275546837446",formDataJson=formDataJson_check)
print(form_data['data'][v]['processInstanceId'],res.json())
time.sleep(2)