This commit is contained in:
2026-01-30 11:28:35 +08:00
commit f1831c31b4
399 changed files with 860978 additions and 0 deletions
+178
View File
@@ -0,0 +1,178 @@
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# 数据文件
*.csv
*.xls
*.xlsx
*.db
# 环境文件
.conda
.idea
.vscode
文件输出
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
+232
View File
@@ -0,0 +1,232 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# 权鉴请求",
"id": "531f1a2429f3444a"
},
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2025-08-04T06:16:16.333259Z",
"start_time": "2025-08-04T06:16:16.069427Z"
}
},
"source": [
"import requests\n",
"import time\n",
"import hashlib\n",
"\n",
"# 参数\n",
"app_id = \"ac331f73-8071-4caa-7b06-84d2f5371a52\"\n",
"sid = \"123456789abcdef\"\n",
"secret = \"secret-b78b4e07-9310-44ff-749c-367240b5a0f5\" # 这相当于 secret\n",
"\n",
"# 当前时间戳(秒级)\n",
"ts = str(int(time.time()))\n",
"\n",
"# 生成 signSHA-1(salt + secret + ts)\n",
"sign_str = sid + secret + ts\n",
"sign = hashlib.sha1(sign_str.encode('utf-8')).hexdigest()\n",
"\n",
"# 构造 URL\n",
"url = f\"https://f6car.udesk.cn/ccapi/v2/spnumbers?AppId={app_id}&Timestamp={ts}&Sid={sid}&Sign={sign}\"\n",
"\n",
"# 发起请求\n",
"res = requests.get(url)\n",
"print(\"Response:\", res.text)\n",
"print(\"Timestamp:\", ts)\n",
"print(\"Sign String (raw):\", sign_str)\n",
"print(\"Sign (SHA-1):\", sign)"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Response: <!DOCTYPE html>\n",
"<html lang=\"en\">\n",
"<head>\n",
" <meta charset=\"UTF-8\">\n",
" <title>ERROR 404</title>\n",
" <meta name=\"baidu-site-verification\" content=\"bfnCTh0lxs\" />\n",
" <style>\n",
" html,body{height: 100%;margin: 0;padding: 0;min-width: 1024px;font-family: \"Microsoft Yahei\",Tahoma,Arial,STHeiti,sans-serif,\"宋体\";}\n",
" .error{position: absolute;top: 50%;left: 50%;width: 1000px;margin-left: -500px;}\n",
" body.error-404{min-height: 400px;}\n",
" body.error-404 .error{height: 262px;margin-top: -180px;background: url('/assets/error/error-404-bg.png') no-repeat;}\n",
" .btn{position: absolute;top: 0;left: 0;width: 130px;height: 46px;color: #fff;font-size: 18px;line-height: 46px;background: #2ea1ca;border-radius: 3px;text-align: center;text-decoration: none;box-shadow: 1px 1px 2px #41899e;}\n",
" a:hover{text-decoration: underline;}\n",
" .btn1{position: absolute;top: 0;left: 0;width: 130px;height: 46px;color: #fff;font-size: 18px;line-height: 46px;background: #7fb602;border-radius: 3px;text-align: center;text-decoration: none;}\n",
" </style>\n",
"</head>\n",
"<body class=\"error-404\">\n",
" <div class=\"error\">\n",
" <p style=\"position: absolute;top: 228px;left: 70px;font-size: 18px;color: #002934;\">请下达指示:</p>\n",
" <a class=\"btn\" style=\"top: 300px;left: 70px;\" href=\"/\">返回控制台</a>\n",
" </div>\n",
" <!-- ga -->\n",
" <script type=\"text/javascript\">\n",
" (function(i, s, o, g, r, a, m) {\n",
" i['GoogleAnalyticsObject'] = r;\n",
" i[r] = i[r] || function() {\n",
" (i[r].q = i[r].q || []).push(arguments)\n",
" }, i[r].l = 1 * new Date();\n",
" a = s.createElement(o),\n",
" m = s.getElementsByTagName(o)[0];\n",
" a.async = 1;\n",
" a.src = g;\n",
" m.parentNode.insertBefore(a, m)\n",
" })(window, document, 'script', '/assets/google/analytics.js', 'ga');\n",
" (function(ga) {\n",
" var r = new RegExp(\"[\\\\?&]client_uuid=([^&#]*)\"),\n",
" p = r.exec(location.search);\n",
" if (p === null) {\n",
" ci = undefined;\n",
" } else {\n",
" ci = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n",
" }\n",
" ga('create', 'UA-69864074-1', {\n",
" 'clientId': ci\n",
" });\n",
" ga('send', 'pageview');\n",
" })(ga);\n",
" </script>\n",
"</body>\n",
"</html>\n",
"\n",
"Timestamp: 1754288176\n",
"Sign String (raw): 123456789abcdefsecret-b78b4e07-9310-44ff-749c-367240b5a0f51754288176\n",
"Sign (SHA-1): 41c3bf8f1e77436f19d238e9842359db0bfdeacb\n"
]
}
],
"execution_count": 14
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-08-04T06:01:03.742483Z",
"start_time": "2025-08-04T06:01:03.452284Z"
}
},
"cell_type": "code",
"source": [
"import requests\n",
"import time\n",
"import hashlib\n",
"\n",
"# 参数\n",
"app_id = \"ac331f73-8071-4caa-7b06-84d2f5371a52\"\n",
"sid = \"123456789abcdef\"\n",
"secret = \"secret-b78b4e07-9310-44ff-749c-367240b5a0f5\" # 这相当于 secret\n",
"\n",
"# 当前时间戳(秒级)\n",
"ts = str(int(time.time()))\n",
"\n",
"# 生成 signSHA-1(salt + secret + ts)\n",
"sign_str = sid + secret + ts\n",
"sign = hashlib.sha1(sign_str.encode('utf-8')).hexdigest()\n",
"\n",
"# 构造 URL\n",
"url = f\"https://f6car.udesk.cn/ccapi/v2/agents?AppId={app_id}&Timestamp={ts}&Sid={sid}&Sign={sign}\"\n",
"\n",
"# 发起请求\n",
"res = requests.get(url)\n",
"print(\"Response:\", res.text)\n",
"print(\"Timestamp:\", ts)\n",
"print(\"Sign String (raw):\", sign_str)\n",
"print(\"Sign (SHA-1):\", sign)"
],
"id": "f78184bf27c5ef49",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Response: <!DOCTYPE html>\n",
"<html lang=\"en\">\n",
"<head>\n",
" <meta charset=\"UTF-8\">\n",
" <title>ERROR 404</title>\n",
" <meta name=\"baidu-site-verification\" content=\"bfnCTh0lxs\" />\n",
" <style>\n",
" html,body{height: 100%;margin: 0;padding: 0;min-width: 1024px;font-family: \"Microsoft Yahei\",Tahoma,Arial,STHeiti,sans-serif,\"宋体\";}\n",
" .error{position: absolute;top: 50%;left: 50%;width: 1000px;margin-left: -500px;}\n",
" body.error-404{min-height: 400px;}\n",
" body.error-404 .error{height: 262px;margin-top: -180px;background: url('/assets/error/error-404-bg.png') no-repeat;}\n",
" .btn{position: absolute;top: 0;left: 0;width: 130px;height: 46px;color: #fff;font-size: 18px;line-height: 46px;background: #2ea1ca;border-radius: 3px;text-align: center;text-decoration: none;box-shadow: 1px 1px 2px #41899e;}\n",
" a:hover{text-decoration: underline;}\n",
" .btn1{position: absolute;top: 0;left: 0;width: 130px;height: 46px;color: #fff;font-size: 18px;line-height: 46px;background: #7fb602;border-radius: 3px;text-align: center;text-decoration: none;}\n",
" </style>\n",
"</head>\n",
"<body class=\"error-404\">\n",
" <div class=\"error\">\n",
" <p style=\"position: absolute;top: 228px;left: 70px;font-size: 18px;color: #002934;\">请下达指示:</p>\n",
" <a class=\"btn\" style=\"top: 300px;left: 70px;\" href=\"/\">返回控制台</a>\n",
" </div>\n",
" <!-- ga -->\n",
" <script type=\"text/javascript\">\n",
" (function(i, s, o, g, r, a, m) {\n",
" i['GoogleAnalyticsObject'] = r;\n",
" i[r] = i[r] || function() {\n",
" (i[r].q = i[r].q || []).push(arguments)\n",
" }, i[r].l = 1 * new Date();\n",
" a = s.createElement(o),\n",
" m = s.getElementsByTagName(o)[0];\n",
" a.async = 1;\n",
" a.src = g;\n",
" m.parentNode.insertBefore(a, m)\n",
" })(window, document, 'script', '/assets/google/analytics.js', 'ga');\n",
" (function(ga) {\n",
" var r = new RegExp(\"[\\\\?&]client_uuid=([^&#]*)\"),\n",
" p = r.exec(location.search);\n",
" if (p === null) {\n",
" ci = undefined;\n",
" } else {\n",
" ci = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n",
" }\n",
" ga('create', 'UA-69864074-1', {\n",
" 'clientId': ci\n",
" });\n",
" ga('send', 'pageview');\n",
" })(ga);\n",
" </script>\n",
"</body>\n",
"</html>\n",
"\n",
"Timestamp: 1754287263\n",
"Sign String (raw): 123456789abcdefsecret-b78b4e07-9310-44ff-749c-367240b5a0f51754287263\n",
"Sign (SHA-1): dcc90771f98740f723956a94d43bc9821894a677\n"
]
}
],
"execution_count": 11
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,25 @@
import pandas as pd
import requests
cookies_str = 'memberSESSIONID=628612b7-606b-48d0-900a-8fb76fd6f1fa; sensorsdata2015jssdkcross={"distinct_id":"10691192243902595917","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=10546443563896246051; unp=10546443563896246058; un=10546443563896246058; _up=-NillNN-qyBEJ--t3vnSknvoOFt6yfeJtM4A1Xg3U-FfUvfBopHQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEfoUqYom1gII-vlRv-ZNHu3M-GTZ25y3EXOrq-tWgeIcklLFPhZnrEj95Rm-8c22MyI.; currMenu=客户车辆; sensorsdata2015jssdkcross={"distinct_id":"10546443563896246058","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json",
'origin': 'https://yunxiu.f6car.cn'
}
df = pd.read_excel(r'C:\Users\admin\Desktop\天猫养车手机号匹配.xls')
df = df.astype('string')
df.drop_duplicates(subset=['客户id'])
links = []
num = 1
for userID in df['客户id']:
res = requests.delete(f'https://yunxiu.f6car.cn/member/customer/{userID}',cookies=cookie_dict)
num = num + 1
print(num,userID,res.text)
@@ -0,0 +1,256 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"打印出响应信息: {\"code\":200,\"data\":{\"accId\":\"\",\"applyModel\":\"\",\"brand\":\"品牌\",\"brandId\":\"212\",\"categoryName\":\"维修配件-其它\",\"chain\":1,\"channel\":\"\",\"creationTime\":\"2022-01-18 09:15:52\",\"creatorName\":\"曹伟\",\"customCode\":\"CL0000001\",\"defSeat\":\"\",\"errorMsg\":\"\",\"finalSellPrice\":0.00,\"groupId\":null,\"headquarterGroupId\":null,\"headquarterInfoId\":null,\"idMdmPart\":\"\",\"idOwnOrg\":\"11240984669917217520\",\"idPartCategory\":\"14438164991364920793\",\"infoId\":\"14582097882896378201\",\"isDel\":0,\"isSourcePartId\":null,\"itemId\":\"\",\"labelId\":\"1297423\",\"labelName\":\"维修\",\"lastPurchasePrice\":null,\"manageStatus\":0,\"memo\":\"\",\"modifiedTime\":\"2022-03-08 13:54:33\",\"modifierName\":\"曹伟\",\"moduleType\":0,\"name\":\"测试材料名称2\",\"newPartId\":null,\"oe\":\"\",\"partBarCodeVos\":null,\"partCategoryAmountVos\":null,\"partId\":1016814095,\"partInfoImageVoList\":null,\"partPriceRuleResponse\":null,\"pkId\":\"14582097882896378201\",\"priceBenchmark\":null,\"priceMode\":0,\"priceRate\":null,\"purchasePrice\":0.0,\"safeStock\":0.0,\"sellPrice\":0.0,\"sellPurchaseStatus\":2,\"showName\":\"测试材料名称2 品牌 测试规格型号 (测试)\",\"skuId\":null,\"spec\":\"测试规格型号\",\"standard\":\"\",\"status\":0,\"stockNumber\":null,\"supplierCode\":\"测试\",\"supplierId\":null,\"supplierName\":\"\",\"taxRateOutput\":0.13,\"tmallId\":null,\"tmallSkuId\":null,\"transferPrice\":0.0,\"unit\":\"个\",\"universalGroupCode\":\"\",\"universalGroupDetailId\":null,\"universalGroupDetailLevel\":null,\"universalGroupId\":null,\"uspuId\":\"\",\"validityPeriod\":\"\"},\"message\":\"SUCCESS\"}\n"
]
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'f6-ids-goodsSESSIONID=374257af-49bd-4761-a0e9-80943cf8cc43; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917217520; unp=15503028824961978372; _up=-NillNN-qyBEJ--t3vnSknvoOF56zfKNssUN0X82XOZUUfnCoJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEPUXoYsi0QEE-_VRv-ZNHu3M-GTc25iyFXWgpu9RgO0bmVHLPRRtrEj9nBi9_Mu2cQM.; sensorsdata2015jssdkcross={\"distinct_id\":\"15503028824961978372\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"#get材料属性\n",
"url = 'https://ids-goods.f6car.cn/f6-ids-goods/part/getPartInfo?partId=1016814095'\n",
"res = requests.get(url,cookies=cookie_dict)\n",
"print(\"打印出响应信息:\",res.text)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'accId': '', 'applyModel': '', 'brand': '品牌', 'brandId': '212', 'categoryName': '维修配件-其它', 'chain': 1, 'channel': '', 'creationTime': '2022-01-18 09:15:52', 'creatorName': '曹伟', 'customCode': 'CL0000001', 'defSeat': '', 'errorMsg': '', 'finalSellPrice': 0.0, 'groupId': None, 'headquarterGroupId': None, 'headquarterInfoId': None, 'idMdmPart': '', 'idOwnOrg': '11240984669917217520', 'idPartCategory': '14438164991364920793', 'infoId': '14582097882896378201', 'isDel': 0, 'isSourcePartId': None, 'itemId': '', 'labelId': '1297423', 'labelName': '维修', 'lastPurchasePrice': None, 'manageStatus': 0, 'memo': '', 'modifiedTime': '2022-03-08 13:59:15', 'modifierName': '曹伟', 'moduleType': 0, 'name': '测试材料名称2', 'newPartId': None, 'oe': '', 'partBarCodeVos': None, 'partCategoryAmountVos': None, 'partId': 1016814095, 'partInfoImageVoList': None, 'partPriceRuleResponse': None, 'pkId': '14582097882896378201', 'priceBenchmark': None, 'priceMode': 0, 'priceRate': None, 'purchasePrice': 0.0, 'safeStock': 0.0, 'sellPrice': 0.0, 'sellPurchaseStatus': 2, 'showName': '测试材料名称2 品牌 测试规格型号 (测试)', 'skuId': None, 'spec': '测试规格型号', 'standard': '', 'status': 0, 'stockNumber': None, 'supplierCode': 'caowei', 'supplierId': None, 'supplierName': '', 'taxRateOutput': 0.13, 'tmallId': None, 'tmallSkuId': None, 'transferPrice': 0.0, 'unit': '个', 'universalGroupCode': '', 'universalGroupDetailId': None, 'universalGroupDetailLevel': None, 'universalGroupId': None, 'uspuId': '', 'validityPeriod': ''}\n"
]
}
],
"source": [
"strele = res.text[19:-21]\n",
"pastebin_url_json = json.loads(strele)\n",
"pastebin_url_json['supplierCode'] = \"caowei\"\n",
"pastebin_url_json_1 = pastebin_url_json['supplierCode']\n",
"print(pastebin_url_json)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\"code\":200,\"data\":{\"accId\":\"\",\"applyModel\":\"\",\"brand\":\"品牌\",\"brandId\":\"212\",\"categoryName\":\"维修配件-其它\",\"chain\":1,\"channel\":\"\",\"creationTime\":\"2022-01-18 09:15:52\",\"creatorName\":\"曹伟\",\"customCode\":\"CL0000001\",\"defSeat\":\"\",\"errorMsg\":\"\",\"finalSellPrice\":0.00,\"groupId\":null,\"headquarterGroupId\":null,\"headquarterInfoId\":null,\"idMdmPart\":\"\",\"idOwnOrg\":\"11240984669917217520\",\"idPartCategory\":\"14438164991364920793\",\"infoId\":\"14582097882896378201\",\"isDel\":0,\"isSourcePartId\":null,\"itemId\":\"\",\"labelId\":\"1297423\",\"labelName\":\"维修\",\"lastPurchasePrice\":null,\"manageStatus\":0,\"memo\":\"\",\"modifiedTime\":\"2022-03-08 13:59:25\",\"modifierName\":\"曹伟\",\"moduleType\":0,\"name\":\"测试材料名称2\",\"newPartId\":null,\"oe\":\"\",\"partBarCodeVos\":null,\"partCategoryAmountVos\":null,\"partId\":1016814095,\"partInfoImageVoList\":null,\"partPriceRuleResponse\":null,\"pkId\":\"14582097882896378201\",\"priceBenchmark\":null,\"priceMode\":0,\"priceRate\":null,\"purchasePrice\":0.0,\"safeStock\":0.0,\"sellPrice\":0.0,\"sellPurchaseStatus\":2,\"showName\":\"测试材料名称2 品牌 测试规格型号 (caowei)\",\"skuId\":null,\"spec\":\"测试规格型号\",\"standard\":\"\",\"status\":0,\"stockNumber\":null,\"supplierCode\":\"caowei\",\"supplierId\":null,\"supplierName\":\"\",\"taxRateOutput\":0.13,\"tmallId\":null,\"tmallSkuId\":null,\"transferPrice\":0.0,\"unit\":\"个\",\"universalGroupCode\":\"\",\"universalGroupDetailId\":null,\"universalGroupDetailLevel\":null,\"universalGroupId\":null,\"uspuId\":\"\",\"validityPeriod\":\"\"},\"message\":\"SUCCESS\"}\n"
]
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'hiveSESSIONID=7b4b3c13-2518-48b6-8aa4-e0952d270394; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917217520; unp=15503028824961978372; un=15503028824961978372; _up=-NillNN-qyBEJ--t3vnSknvoOF56zfKNssUN0X82XOZUUfnCoJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEPUTqIMn0wcN_fBRv-ZNHu3M-GTc25iyFXWgpu9RgO0bmVHLPRRtrEj94nvl9sC4Mys.; currMenu=客户车辆; sensorsdata2015jssdkcross={\"distinct_id\":\"15503028824961978372\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"\n",
"#修改值读取\n",
"res = requests.post(f'https://ids-goods.f6car.cn/f6-ids-goods/part/updatePartInfo', headers=headers,\n",
" cookies=cookie_dict, json=pastebin_url_json)\n",
"print(res.text)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"'''#材料属性明细\n",
" data = {\n",
" \"accId\": \"\",\n",
" \"applyModel\": \"适用车型\",#适用车型\n",
" \"brand\": \"倍耐力\",#品牌\n",
" \"brandId\": \"203\",#品牌识别\n",
" \"categoryName\": \"轮胎\",#材料分类\n",
" \"chain\": 1,\n",
" \"channel\": \"\",\n",
" \"creationTime\": \"2022-01-22 16:09:00\",#创建时间\n",
" \"creatorName\": \"曹伟\",#创建人\n",
" \"customCode\": \"CL0000003\",#材料编码\n",
" \"defSeat\": \"\",\n",
" \"errorMsg\": \"\",\n",
" \"finalSellPrice\": 222,#参考销售价\n",
" \"groupId\": \"\",\n",
" \"headquarterGroupId\": \"\",\n",
" \"headquarterInfoId\": \"\",\n",
" \"idMdmPart\": \"1149460\",\n",
" \"idOwnOrg\": \"11240984669917217520\",#门店id\n",
" \"idPartCategory\": \"14438164991364920801\",\n",
" \"infoId\": \"14582097882897530818\",\n",
" \"isDel\": 0,\n",
" \"isSourcePartId\": \"\",\n",
" \"itemId\": \"\",\n",
" \"labelId\": \"1297424\",\n",
" \"labelName\": \"保养\",#业务分类\n",
" \"lastPurchasePrice\": \"\",\n",
" \"manageStatus\": 0,\n",
" \"memo\": \"\",\n",
" \"modifiedTime\": \"2022-03-02 14:47:25\",#更新时间\n",
" \"modifierName\": \"曹伟\",#修改人\n",
" \"moduleType\": 0,\n",
" \"name\": \"255/55R20 Scorpion Verde All Season 110Y1\",#材料名称\n",
" \"newPartId\": \"\",\n",
" \"oe\": \"oe码\",#oe码\n",
" \"partBarCodeVos\": \"\",\n",
" \"partCategoryAmountVos\": \"\",\n",
" \"partId\": {nameid},#材料id\n",
" \"partInfoImageVoList\": \"\",\n",
" \"partPriceRuleResponse\": \"\",\n",
" \"pkId\": \"14582097882897530818\",\n",
" \"priceBenchmark\": \"\",\n",
" \"priceMode\": 0,\n",
" \"priceRate\": \"\",\n",
" \"purchasePrice\": 111,#参考采购价\n",
" \"safeStock\": 0,\n",
" \"sellPrice\": 222,#参考销售价\n",
" \"sellPurchaseStatus\": 2,\n",
" \"showName\": \"255/55R20 Scorpion Verde All Season 110Y 倍耐力 规格型号 (BNL2555520-Fa)\",\n",
" \"skuId\": \"\",\n",
" \"spec\": {xiugai},#规格型号\n",
" \"standard\": \"\",\n",
" \"status\": 0,\n",
" \"stockNumber\": \"\",\n",
" \"supplierCode\": \"BNL2555520-Fa\",#零件号\n",
" \"supplierId\": \"\",\n",
" \"supplierName\": \"\",\n",
" \"taxRateOutput\": 0.13,#税率\n",
" \"tmallId\": \"\",\n",
" \"tmallSkuId\": \"\",\n",
" \"transferPrice\": 0,\n",
" \"unit\": \"条\",#单位\n",
" \"universalGroupCode\": \"\",\n",
" \"universalGroupDetailId\": \"\",\n",
" \"universalGroupDetailLevel\": \"\",\n",
" \"universalGroupId\": \"\",\n",
" \"uspuId\": \"\",\n",
" \"validityPeriod\": \"\"\n",
" }\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"表数据的行数为2,列数为2\n",
"1050177984 {\"code\":200,\"data\":{\"accId\":\"\",\"applyModel\":\"大众捷达\",\"brand\":\"博世\",\"brandId\":\"218\",\"categoryName\":\"刹车片\",\"chain\":1,\"channel\":\"\",\"creationTime\":\"2022-05-13 14:07:42\",\"creatorName\":\"曹伟\",\"customCode\":\"CL0000019\",\"defSeat\":\"\",\"errorMsg\":\"\",\"finalSellPrice\":2650.00,\"groupId\":null,\"headquarterGroupId\":null,\"headquarterInfoId\":null,\"idMdmPart\":\"000001\",\"idOwnOrg\":\"11240984669917217520\",\"idPartCategory\":\"14438164991364920777\",\"infoId\":\"14582097882908443102\",\"isDel\":0,\"isSourcePartId\":null,\"itemId\":\"\",\"labelId\":\"1297423\",\"labelName\":\"维修\",\"lastPurchasePrice\":null,\"manageStatus\":0,\"memo\":\"\",\"modifiedTime\":\"2022-05-23 16:50:48\",\"modifierName\":\"曹伟\",\"moduleType\":0,\"name\":\"前刹车片\",\"newPartId\":null,\"oe\":\"191698151K,191698151J,191608151H,191698151D,19198151C,1H0698151\",\"partBarCodeVos\":null,\"partCategoryAmountVos\":null,\"partId\":1050177984,\"partInfoImageVoList\":null,\"partPriceRuleResponse\":null,\"pkId\":\"14582097882908443102\",\"priceBenchmark\":null,\"priceMode\":0,\"priceRate\":null,\"purchasePrice\":0.0,\"safeStock\":0.0,\"sellPrice\":2650.0,\"sellPurchaseStatus\":2,\"showName\":\"前刹车片 博世 (测试1024)\",\"skuId\":null,\"spec\":\"\",\"standard\":\"\",\"status\":0,\"stockNumber\":null,\"supplierCode\":\"测试1024\",\"supplierId\":null,\"supplierName\":\"\",\"taxRateOutput\":0.13,\"tmallId\":null,\"tmallSkuId\":null,\"transferPrice\":null,\"unit\":\"组\",\"universalGroupCode\":\"\",\"universalGroupDetailId\":null,\"universalGroupDetailLevel\":null,\"universalGroupId\":null,\"uspuId\":\"\",\"validityPeriod\":\"\"},\"message\":\"SUCCESS\"}\n"
]
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"\n",
"cookies_str = 'f6-ids-goodsSESSIONID=e7b2f4da-a1db-42e0-b9c7-cdfdf0fe4b4f; sajssdk_2015_cross_new_user=1; prodOrg=11240984669917217520; unp=15503028824961978372; _up=-NillNN-qyBEJ--t3vnSknvoOF56zfKNssUN0X82XOZUUfnCoJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEfAWoIgr3gIM9_BRv-ZNHu3M-GTc25iyFXWgpu9RgO0bmVHLPRRtrEj9mlzy8brLZzo.; sensorsdata2015jssdkcross={\"distinct_id\":\"15503028824961978372\",\"first_id\":\"180effbdceb2f8-07e420bc2cb8df-6b3e555b-1327104-180effbdcec72\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"180effbdceb2f8-07e420bc2cb8df-6b3e555b-1327104-180effbdcec72\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"#读取excel文件\n",
"data = xlrd.open_workbook(r\"C:\\Users\\admin\\Desktop\\Python脚本\\图形界面自动化脚本\\F6系统常用脚本\\Excel通用存储位置.xls\")\n",
"table = data.sheet_by_index(0) # 通过索引顺序获取\n",
"h = table.nrows\n",
"l = table.ncols\n",
"print(u\"表数据的行数为%s,列数为%s\"%(h,l))\n",
"for i in range(1,h):\n",
" idMember =table.cell(i, 0).value #材料id\n",
" idMember1 =table.cell(i, 1).value #修改内容\n",
" #get材料属性\n",
" url = 'https://ids-goods.f6car.cn/f6-ids-goods/part/getPartInfo?partId={}'.format(idMember)\n",
" res = requests.get(url,cookies=cookie_dict)\n",
" strele = res.text[19:-21]\n",
" pastebin_url_json = json.loads(strele)\n",
" pastebin_url_json['supplierCode'] = idMember1#修改内容\n",
" #修改值读取\n",
" res = requests.post(f'https://ids-goods.f6car.cn/f6-ids-goods/part/updatePartInfo', headers=headers,cookies=cookie_dict, json=pastebin_url_json)\n",
" print(idMember,res.text)"
]
}
],
"metadata": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
},
"kernelspec": {
"display_name": "Python 3.9.4 ('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
}
@@ -0,0 +1,49 @@
import pandas as pd
import requests
import json
import xlrd
cookies_str = 'hiveSESSIONID=7b4b3c13-2518-48b6-8aa4-e0952d270394; sensorsdata2015jssdkcross={"distinct_id":"10691192243902595917","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917217520; unp=15503028824961978372; un=15503028824961978372; _up=-NillNN-qyBEJ--t3vnSknvoOF56zfKNssUN0X82XOZUUfnCoJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEPUTqIMn0wcN_fBRv-ZNHu3M-GTc25iyFXWgpu9RgO0bmVHLPRRtrEj94nvl9sC4Mys.; currMenu=客户车辆; sensorsdata2015jssdkcross={"distinct_id":"15503028824961978372","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json",
'origin': 'https://yunxiu.f6car.cn'
}
#读取excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(0,h):
idMember =table.cell(i, 0).value #材料id
idMember1 =table.cell(i, 1).value #修改内容
#get材料属性
url = 'https://ids-goods.f6car.cn/f6-ids-goods/part/getPartInfo?partId={}'.format(idMember)
res = requests.get(url,cookies=cookie_dict)
strele = res.text[19:-21]
pastebin_url_json = json.loads(strele)
pastebin_url_json['supplierCode'] = idMember1#修改内容
#修改值读取
res = requests.post(f'https://ids-goods.f6car.cn/f6-ids-goods/part/updatePartInfo', headers=headers,cookies=cookie_dict, json=pastebin_url_json)
print(idMember,res.text)
@@ -0,0 +1,112 @@
import pandas as pd
import time
import requests
import json
import xlrd
cookies_str ='marketingSESSIONID=f9282002-952a-43ef-adeb-115a10f86582; unp=10979894419862873377; un=10979894419862873377; _up=-NillNN-qyBEJ--t3vnSknvoOFt2yviFuckB0nI3XOVVUfLCoJ7QjaZJ9Q3d-WrAAGgt60MgQHajH2BEMqCxilqvQjl2xs5PR0K-R6Uw93buFvYcrYgm0QYQ7LQU-bEeWP7G42LQ1pG1EXahputXgewZk1HELF5853znmxrs988.; sensorsdata2015jssdkcross={"distinct_id":"10979894419862873377","first_id":"1807ab08f0d1e5-01a788ed4f63b8-6b3e555b-1327104-1807ab08f0e219","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1807ab08f0d1e5-01a788ed4f63b8-6b3e555b-1327104-1807ab08f0e219"}; currMenu=营销; prodOrg=11240984669917132579'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json",
'origin': 'https://yunxiu.f6car.cn'
}
#读取excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(1,h):
idMember =table.cell(i, 0).value #卡id
idMember1 =table.cell(i, 1).value #退款金额
idMember2 =table.cell(i, 2).value #退款金额
idOwnOrg =table.cell(i, 3).value #门店ID
employeeId =table.cell(i, 4).value #退卡服务顾问ID
#读取cardVersion信息并配置退卡data
url = 'https://yunxiu.f6car.cn/marketing/tkdBill/baseInfo?pkId={}'.format(idMember)
resget = requests.get(url,cookies=cookie_dict)
resget = json.loads(resget.text)
cardVersion = resget['data']['cardVersion']
data = {
"cardId": idMember, # 退卡实体id
"cardVersion": cardVersion,
"employeeId": employeeId, # 退卡服务顾问ID 手动更新
"idOwnOrg": idOwnOrg, # 门店ID 手动更新
"refundAmount": idMember1, # 退卡金额
"remark": "" # 备注
}
#生成退卡单
res = requests.post(f'https://yunxiu.f6car.cn/marketing/tkdBill/add',
headers=headers,cookies=cookie_dict, json=data)
resdata = res.json().get('data')
#print(data)
#读取Version信息并配置退卡data
url1 = 'https://yunxiu.f6car.cn/marketing/tkdBill/detail/{}'.format(resdata)
resget1 = requests.get(url1,cookies=cookie_dict)
resget1 = json.loads(resget1.text)
cardVersion1 = resget1['data']['version']
#完成收款
if idMember1 != "0":
data = {
"idOwnOrg": idOwnOrg,# 门店ID 手动更新
"idOperationOrg": idOwnOrg,# 退卡门店ID 手动更新
"idSourceBill": resdata,# 退卡单ID
"sourceBillType": "TKD",#类型
"receiptMemo": "",# 备注
"version": cardVersion1,
"favourableList": [],
"gatheringFavourable": 0,
"paymentTypeGroupId": "",
"czkList": [],
"paymentList": [
{
"paymentTypeId": "7941750",# 各门店不同 手动更新
"paymentType": "现金",
"paymentAmount": idMember2,
"gatheringType": 0,
"kind": "normal"
}
],
"pkId": 0,
"billType": "YSF",
"domainCode": "SAAS"
}
else:
data = {
"idOwnOrg": idOwnOrg,# 门店ID 手动更新
"idOperationOrg": idOwnOrg,# 退卡门店ID 手动更新
"idSourceBill": resdata,# 退卡单ID
"sourceBillType": "TKD",#类型
"receiptMemo": "",# 备注
"version": cardVersion1,
"favourableList": [],
"gatheringFavourable": 0,
"paymentTypeGroupId": "",
"czkList": [],
"paymentList": [
{
"status": 0,
"paymentAmount": 0
}
],
"pkId": 0,
"billType": "YSF",
"domainCode": "SAAS"
}
#print(data)
res = requests.post(f'https://yunxiu.f6car.cn/financial/advance/payment/singleGathering',
headers=headers,cookies=cookie_dict, json=data)
print("打印出响应信息:",cardVersion,cardVersion1,resdata,idMember,res.text)
@@ -0,0 +1,724 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 11680450638495363092 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"1 11680450638440837213 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"2 11680450638134648879 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"3 11680450638122065922 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"4 11680450637878796292 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"5 11680450637803302975 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"6 11680450637681664015 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"7 11680450637400649759 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"8 11680450637383872543 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"9 11680450637153185817 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"10 11680450636884750377 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"11 11680450636670836778 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"12 11680450636431765595 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"13 11680450636196884519 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"14 11680450627611144260 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"15 11680450627367870524 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"16 11680450627082661890 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"17 11680450626835193932 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"18 11680450626814222413 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"19 11680450626533204046 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"20 11680450626352853024 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"21 11680450626084417606 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"22 11680450626038276100 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"23 11680450626029887562 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"24 11680450625803395170 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"25 11680450625782423609 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"26 11680450625664987183 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"27 11680450625623044131 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"28 11680450625421717598 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"29 11680450625371381795 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"30 11680450625354604628 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"31 11680450624943566855 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"32 11680450624930983939 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"33 11680450624889040910 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"34 11680450624666742799 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"35 11680450624368947228 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"36 11680450624314421281 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"37 11680450624289255512 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"38 11680450624264085597 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"39 11680450623983071255 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"40 11680450623840460811 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"41 11680450623836266592 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"42 11680450623689470036 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"43 11680450623626551372 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"44 11680450623530082336 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"45 11680450623521693760 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"46 11680450623446200352 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"47 11680450623278424086 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"48 11680450623202926673 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"49 11680450623186153480 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"50 11680450623127433267 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"51 11680450622972239908 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"52 11680450622972239907 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"53 11680450622867386384 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"54 11680450622854799386 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"55 11680450622745751613 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"56 11680450622741553249 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"57 11680450622565396521 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"58 11680450622548615196 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"59 11680450622506672139 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n",
"60 11680450622502481985 {\"success\":true,\"code\":200,\"message\":null,\"data\":null}\n"
]
}
],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"from pprint import pprint\n",
"cookies_str = 'marketingSESSIONID=2a0fc89f-dec7-4e56-9e71-b297636783d6; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; currMenu=安全退出; prodOrg=11240984669917405035; unp=15570772930810884182; un=15570772930810884182; _up=-NillNN-qyBEJ--t3vnSknvoOF56yvGKt88M0Hs3W-dVXvXAr5vQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEfsXoYsl0AMM9vJRv-ZNHu3M-GTc25-xEnCqp-5VgeoamF7HPxttrEj9mxu48Lq4d2c.; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"cookies = cookies_str.encode('utf-8').decode('latin-1')\n",
"cookies={item.split('=')[0]:item.split('=')[1] for item in cookies.split('; ')}\n",
"headers = {\n",
"'accept': 'application/json, text/plain, */*',\n",
"'accept-encoding': 'gzip, deflate, br',\n",
"'accept-language': 'zh-CN,zh;q=0.9',\n",
"'content-length': '1598',\n",
"'content-type': 'application/json;charset=UTF-8',\n",
"'cookie': 'blazerSESSIONID=fb383a80-6ed8-48e4-bfde-3e7cc35ef146; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210691192243902595917%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; currMenu=%E5%AE%89%E5%85%A8%E9%80%80%E5%87%BA; prodOrg=11240984669917405035; unp=15570772930810884182; un=15570772930810884182; _up=-NillNN-qyBEJ--t3vnSknvoOF56yvGKt88M0Hs3W-dVXvXAr5vQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEfsXoYsl0AMM9vJRv-ZNHu3M-GTc25-xEnCqp-5VgeoamF7HPxttrEj9mxu48Lq4d2c.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210691192243902595917%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D',\n",
"'origin': 'https://yunxiu.f6car.cn',\n",
"'referer': 'https://yunxiu.f6car.cn/macan/view/index.html',\n",
"'sec-ch-ua': '\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"',\n",
"'sec-ch-ua-mobile': '?0',\n",
"'sec-ch-ua-platform': \"Windows\",\n",
"'sec-fetch-dest': 'empty',\n",
"'sec-fetch-mode': 'cors',\n",
"'sec-fetch-site': 'same-origin',\n",
"'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'\n",
"}\n",
"df = pd.read_excel(r'C:\\Users\\admin\\Downloads\\会员卡信息 (1).xlsx',sheet_name='Sheet1',dtype='string') \n",
"for item in df.index:\n",
" py_id= df.loc[item,'卡实体id']\n",
" py_idkh= df.loc[item,'卡号']\n",
" py_xc= df.loc[item,'洗车项目折扣']\n",
" py_mr= df.loc[item,'美容项目折扣']\n",
" # print(py_id)\n",
" url1 = 'https://yunxiu.f6car.cn/marketing/card/detail/{}'.format(py_id)\n",
" resget1 = requests.get(url1,cookies=cookies)\n",
" resget = json.loads(resget1.text)\n",
" py_version = resget['data']['version']\n",
" data = resget['data']['cardEntityCarInfoList']\n",
" lst= []\n",
" for record in data:\n",
" supplierCodeidCar = record.get('idCar')\n",
" supplierCodeidCustomer = record.get('idCustomer')\n",
" lst.append({'idCustomer':supplierCodeidCustomer,'idCar':supplierCodeidCar})\n",
"\n",
" py_json={\n",
" \"id\": py_id,\n",
" \"cardNo\": py_idkh,\n",
" \"memo\": \"\",\n",
" \"useTerm\": \"\",\n",
" \"idCustomer\": supplierCodeidCustomer,\n",
" \"version\": py_version,\n",
" \"useType\": 1,\n",
" \"permanent\": 1,\n",
" \"carList\": lst,\n",
" \"cardEntityBusinessList\": [\n",
" {\n",
" \"labelName\": \"维修\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620368\"\n",
" },\n",
" {\n",
" \"labelName\": \"保养\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620369\"\n",
" },\n",
" {\n",
" \"labelName\": \"美容\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620370\"\n",
" },\n",
" {\n",
" \"labelName\": \"钣喷\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620371\"\n",
" },\n",
" {\n",
" \"labelName\": \"轮胎\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620372\"\n",
" },\n",
" {\n",
" \"labelName\": \"洗车\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620373\"\n",
" },\n",
" {\n",
" \"labelName\": \"精品\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620374\"\n",
" },\n",
" {\n",
" \"labelName\": \"其他\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620375\"\n",
" },\n",
" {\n",
" \"labelName\": \"零售\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1620376\"\n",
" },\n",
" {\n",
" \"labelName\": \"装潢\",\n",
" \"businessType\": 0,\n",
" \"labelId\": \"1622187\"\n",
" },\n",
" {\n",
" \"labelName\": \"维修\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620368\"\n",
" },\n",
" {\n",
" \"labelName\": \"保养\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620369\"\n",
" },\n",
" {\n",
" \"labelName\": \"美容\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620370\"\n",
" },\n",
" {\n",
" \"labelName\": \"钣喷\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620371\"\n",
" },\n",
" {\n",
" \"labelName\": \"轮胎\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620372\"\n",
" },\n",
" {\n",
" \"labelName\": \"洗车\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620373\"\n",
" },\n",
" {\n",
" \"labelName\": \"精品\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620374\"\n",
" },\n",
" {\n",
" \"labelName\": \"其他\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620375\"\n",
" },\n",
" {\n",
" \"labelName\": \"零售\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1620376\"\n",
" },\n",
" {\n",
" \"labelName\": \"装潢\",\n",
" \"businessType\": 1,\n",
" \"labelId\": \"1622187\"\n",
" },\n",
" {\n",
" \"businessType\": 2,\n",
" \"labelId\": \"0\"\n",
" }\n",
" ],\n",
" \"cardEntityBusinessDiscountList\": [\n",
" {\n",
" \"labelName\": \"美容\",\n",
" \"businessType\": 0,\n",
" \"discount\": py_mr,\n",
" \"labelId\": \"1620370\"\n",
" },\n",
" {\n",
" \"labelName\": \"洗车\",\n",
" \"businessType\": 0,\n",
" \"discount\": py_xc,\n",
" \"labelId\": \"1620373\"\n",
" }\n",
" ],\n",
" \"businessType\": 1\n",
"}\n",
" url = 'https://yunxiu.f6car.cn/marketing/card/modifyCzkCardEntity4Gray'\n",
" res = requests.post(url,cookies=cookies,json=py_json,headers =headers)\n",
" print(item,py_id,res.text)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[\n",
" {\n",
" \"idCustomer\": \"11679749121492660508\",\n",
" \"idCar\": \"11679749142107665194\"\n",
" }\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'success': True,\n",
" 'code': 200,\n",
" 'message': None,\n",
" 'data': {'pkId': '11680450674105000003',\n",
" 'idCustomer': '11679749121492660508',\n",
" 'customerName': '朱先生',\n",
" 'customerExclusiveConsultantId': None,\n",
" 'customerExclusiveConsultantName': None,\n",
" 'cellPhone': '13816556331',\n",
" 'idMemberCard': '11680439895070879838',\n",
" 'memberCardNo': '20201008100204',\n",
" 'cardType': 'CZK',\n",
" 'useType': 1,\n",
" 'name': '洗车美容7.5折卡',\n",
" 'password': None,\n",
" 'memo': '',\n",
" 'permanent': 1,\n",
" 'validate': 1,\n",
" 'endDate': 2145899646000,\n",
" 'activeDate': 1658246400000,\n",
" 'idOwnOrg': '11240984669917405035',\n",
" 'abbreviation': '特伯动力',\n",
" 'isDel': 0,\n",
" 'useTerm': '',\n",
" 'availableForOwnerOnly': 0,\n",
" 'usable': 1,\n",
" 'activationDeadline': None,\n",
" 'realActiveDate': 1658246400000,\n",
" 'idBuyer': '11679749121492660508',\n",
" 'buyerName': '朱先生',\n",
" 'buyerCellPhone': '13816556331',\n",
" 'version': '2',\n",
" 'czkBusinessType': 1,\n",
" 'czkBusinessLabelId': None,\n",
" 'czkBusinessLabelName': None,\n",
" 'totalAmount': '16.50',\n",
" 'consumeAmount': '0.00',\n",
" 'balanceAmount': '16.50',\n",
" 'cardEntityStationList': None,\n",
" 'cardEntityCarInfoList': [{'pkId': '11680813696216477700',\n",
" 'idMember': '11680450674105000003',\n",
" 'idCustomer': '11679749121492660508',\n",
" 'idCar': '11679749142107665194',\n",
" 'idOwnOrg': '11240984669917405035',\n",
" 'creator': None,\n",
" 'creationtime': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'groupId': None,\n",
" 'carNo': '沪A36J52',\n",
" 'carModel': None,\n",
" 'carModelShort': None}],\n",
" 'itemList': None,\n",
" 'partList': None,\n",
" 'packageInfoList': None,\n",
" 'cardEntityBusinessList': None,\n",
" 'cardEntityBusinessDiscountList': [{'id': 151873,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620370',\n",
" 'businessType': 0,\n",
" 'discount': '0.10',\n",
" 'creationtime': 1658383743000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': '美容'},\n",
" {'id': 151874,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620373',\n",
" 'businessType': 0,\n",
" 'discount': '0.10',\n",
" 'creationtime': 1658383743000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': '洗车'}]}}"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resget"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'idCustomer': '11679749121492660508', 'idCar': '11679749142107665194'}]"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[\n",
" {\n",
" \"idCustomer\": \"11679749121492660508\",\n",
" \"idCar\": \"11679749142107665194\"\n",
" }\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'idCustomer': '11679749121492660508', 'idCar': '11679749142107665194'}]"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resget1['data'].get('cardEntityCarInfoList')"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'pkId': '11680450674105000003',\n",
" 'idCustomer': '11679749121492660508',\n",
" 'customerName': '朱先生',\n",
" 'customerExclusiveConsultantId': None,\n",
" 'customerExclusiveConsultantName': None,\n",
" 'cellPhone': None,\n",
" 'idMemberCard': '11680439895070879838',\n",
" 'memberCardNo': '20201008100204',\n",
" 'cardType': 'CZK',\n",
" 'useType': 1,\n",
" 'name': '洗车美容7.5折卡',\n",
" 'password': None,\n",
" 'memo': '',\n",
" 'permanent': 1,\n",
" 'validate': 1,\n",
" 'endDate': 2145899646000,\n",
" 'activeDate': 1658246400000,\n",
" 'idOwnOrg': '11240984669917405035',\n",
" 'abbreviation': '特伯动力',\n",
" 'isDel': 0,\n",
" 'useTerm': '',\n",
" 'availableForOwnerOnly': 0,\n",
" 'usable': 1,\n",
" 'activationDeadline': None,\n",
" 'realActiveDate': 1658246400000,\n",
" 'idBuyer': '11679749121492660508',\n",
" 'buyerName': '朱先生',\n",
" 'buyerCellPhone': None,\n",
" 'version': '1',\n",
" 'czkBusinessType': 1,\n",
" 'czkBusinessLabelId': None,\n",
" 'czkBusinessLabelName': None,\n",
" 'totalAmount': '16.50',\n",
" 'consumeAmount': '0.00',\n",
" 'balanceAmount': '16.50',\n",
" 'cardEntityStationList': None,\n",
" 'cardEntityCarInfoList': [],\n",
" 'itemList': None,\n",
" 'partList': None,\n",
" 'packageInfoList': None,\n",
" 'cardEntityBusinessList': None,\n",
" 'cardEntityBusinessDiscountList': [{'id': 139305,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620370',\n",
" 'businessType': 0,\n",
" 'discount': '0.75',\n",
" 'creationtime': 1658299571000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': None},\n",
" {'id': 139306,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620373',\n",
" 'businessType': 0,\n",
" 'discount': '0.75',\n",
" 'creationtime': 1658299571000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': None}]}"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resget1.get('data')"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'pkId': '11680450674105000003',\n",
" 'idCustomer': '11679749121492660508',\n",
" 'customerName': '朱先生',\n",
" 'customerExclusiveConsultantId': None,\n",
" 'customerExclusiveConsultantName': None,\n",
" 'cellPhone': None,\n",
" 'idMemberCard': '11680439895070879838',\n",
" 'memberCardNo': '20201008100204',\n",
" 'cardType': 'CZK',\n",
" 'useType': 1,\n",
" 'name': '洗车美容7.5折卡',\n",
" 'password': None,\n",
" 'memo': '',\n",
" 'permanent': 1,\n",
" 'validate': 1,\n",
" 'endDate': 2145899646000,\n",
" 'activeDate': 1658246400000,\n",
" 'idOwnOrg': '11240984669917405035',\n",
" 'abbreviation': '特伯动力',\n",
" 'isDel': 0,\n",
" 'useTerm': '',\n",
" 'availableForOwnerOnly': 0,\n",
" 'usable': 1,\n",
" 'activationDeadline': None,\n",
" 'realActiveDate': 1658246400000,\n",
" 'idBuyer': '11679749121492660508',\n",
" 'buyerName': '朱先生',\n",
" 'buyerCellPhone': None,\n",
" 'version': '1',\n",
" 'czkBusinessType': 1,\n",
" 'czkBusinessLabelId': None,\n",
" 'czkBusinessLabelName': None,\n",
" 'totalAmount': '16.50',\n",
" 'consumeAmount': '0.00',\n",
" 'balanceAmount': '16.50',\n",
" 'cardEntityStationList': None,\n",
" 'cardEntityCarInfoList': [],\n",
" 'itemList': None,\n",
" 'partList': None,\n",
" 'packageInfoList': None,\n",
" 'cardEntityBusinessList': None,\n",
" 'cardEntityBusinessDiscountList': [{'id': 139305,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620370',\n",
" 'businessType': 0,\n",
" 'discount': '0.75',\n",
" 'creationtime': 1658299571000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': None},\n",
" {'id': 139306,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620373',\n",
" 'businessType': 0,\n",
" 'discount': '0.75',\n",
" 'creationtime': 1658299571000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': None}]}"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resget1['data']"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'success': True,\n",
" 'code': 200,\n",
" 'message': None,\n",
" 'data': {'pkId': '11680450674105000003',\n",
" 'idCustomer': '11679749121492660508',\n",
" 'customerName': '朱先生',\n",
" 'customerExclusiveConsultantId': None,\n",
" 'customerExclusiveConsultantName': None,\n",
" 'cellPhone': None,\n",
" 'idMemberCard': '11680439895070879838',\n",
" 'memberCardNo': '20201008100204',\n",
" 'cardType': 'CZK',\n",
" 'useType': 1,\n",
" 'name': '洗车美容7.5折卡',\n",
" 'password': None,\n",
" 'memo': '',\n",
" 'permanent': 1,\n",
" 'validate': 1,\n",
" 'endDate': 2145899646000,\n",
" 'activeDate': 1658246400000,\n",
" 'idOwnOrg': '11240984669917405035',\n",
" 'abbreviation': '特伯动力',\n",
" 'isDel': 0,\n",
" 'useTerm': '',\n",
" 'availableForOwnerOnly': 0,\n",
" 'usable': 1,\n",
" 'activationDeadline': None,\n",
" 'realActiveDate': 1658246400000,\n",
" 'idBuyer': '11679749121492660508',\n",
" 'buyerName': '朱先生',\n",
" 'buyerCellPhone': None,\n",
" 'version': '1',\n",
" 'czkBusinessType': 1,\n",
" 'czkBusinessLabelId': None,\n",
" 'czkBusinessLabelName': None,\n",
" 'totalAmount': '16.50',\n",
" 'consumeAmount': '0.00',\n",
" 'balanceAmount': '16.50',\n",
" 'cardEntityStationList': None,\n",
" 'cardEntityCarInfoList': [],\n",
" 'itemList': None,\n",
" 'partList': None,\n",
" 'packageInfoList': None,\n",
" 'cardEntityBusinessList': None,\n",
" 'cardEntityBusinessDiscountList': [{'id': 139305,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620370',\n",
" 'businessType': 0,\n",
" 'discount': '0.75',\n",
" 'creationtime': 1658299571000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': None},\n",
" {'id': 139306,\n",
" 'cardEntityId': '11680450674105000003',\n",
" 'labelId': '1620373',\n",
" 'businessType': 0,\n",
" 'discount': '0.75',\n",
" 'creationtime': 1658299571000,\n",
" 'creator': None,\n",
" 'modifier': None,\n",
" 'modifiedtime': None,\n",
" 'isDeleted': None,\n",
" 'groupId': None,\n",
" 'labelName': None}]}}"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resget1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 ('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,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,417 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"'''\n",
"1、单据管理中导出单据列表\n",
"2、通过接口获取单据id\n",
"3、进入单据详情页面、点击取消收款、点击取消完工\n",
"4、通过接口删除单据\n",
"'''"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# 获取单据id"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 获取单据id\n",
"import pandas as pd\n",
"import requests\n",
"\n",
"cookies_str = 'maintainSESSIONID=c9f660ff-291a-4c85-858b-db4420cbc038; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917702548; unp=15658998626808512553; un=15658998626808512553; _up=-NillNN-qyBEJ--t3vnSknvoOF55yPmEucUD0X03Wu9YV_PEoprQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrE_oQrI4k0wIL_fFRv-ZNHu3M-GTc2J25HH6gqO9TgesSlVfBOxZsrEj93n659sC4UWM.; tmall=false; sensorsdata2015jssdkcross={\"distinct_id\":\"15658998626808512553\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"list_new = []\n",
"for i in range(1,10):\n",
" res = requests.get(f'https://yunxiu.f6car.cn/maintain/list/getMaintainList?currentPage={i}&pageSize=100&idOwnOrgList=11240984669917702548&maintainTypeList=GD&beginDate=2022-12-21&endDate=2023-03-21&idEmployeeList=&serviceEmployeeIdList=&isDel=0&sourceFrom=maintainNormal&enableCount=true',cookies=cookie_dict)\n",
" for a in range(len(res.json()['data']['list'])):\n",
" print(res.json()['data']['list'][a]['billNo'],res.json()['data']['list'][a]['pkId'])"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# 进入单据详情页面:取消收款"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"GD20230319017 11768276383074107439 2023-03-22 11:47:16\n",
"GD20230309005 11764479936146985055 2023-03-22 11:47:24\n",
"GD20230319013 11768187725428047918 2023-03-22 11:47:32\n",
"GD20230313012 11766014184293158987 2023-03-22 11:47:40\n",
"GD20230208001 11767025915467415585 2023-03-22 11:47:48\n",
"GD20230308003 11767746673583870043 2023-03-22 11:47:55\n",
"GD20230308009 11768284042280063006 2023-03-22 11:48:03\n",
"GD20230310002 11767090740411256864 2023-03-22 11:48:10\n",
"GD20230311001 11765172295016923178 2023-03-22 11:48:17\n",
"GD20230313010 11766001634784591881 2023-03-22 11:48:23\n",
"GD20230314005 11766342718580604955 2023-03-22 11:48:30\n",
"GD20230314006 11766346247563137102 2023-03-22 11:48:37\n",
"GD20230316016 11767060428914442326 2023-03-22 11:48:45\n",
"GD20230316028 11767120027042467935 2023-03-22 11:48:52\n",
"GD20230318020 11767828869023809571 2023-03-22 11:48:59\n",
"GD20230319003 11768074023303397433 2023-03-22 11:49:06\n",
"GD20230308002 11767106703382822918 2023-03-22 11:49:14\n",
"GD20230312004 11765576222329819181 2023-03-22 11:49:22\n",
"GD20230313014 11766032078532005985 2023-03-22 11:49:29\n",
"GD20230313016 11766036423570903115 2023-03-22 11:49:36\n",
"GD20230314002 11766324742951288907 2023-03-22 11:49:44\n",
"GD20230314009 11766357941635010601 2023-03-22 11:49:52\n",
"GD20230315002 11766608897853374505 2023-03-22 11:49:59\n",
"GD20230316003 11766971868362326039 2023-03-22 11:50:06\n",
"GD20230316010 11767018950355861600 2023-03-22 11:50:13\n",
"GD20230316013 11767027763922358282 2023-03-22 11:50:20\n",
"GD20230317001 11767348061230088287 2023-03-22 11:50:28\n",
"GD20230319001\n",
"GD20230319004 11768075129513328649 2023-03-22 11:50:42\n",
"GD20230319006 11768091781583880281 2023-03-22 11:50:50\n",
"GD20230308001 11764555581682110487 2023-03-22 11:50:57\n",
"GD20230308004 11767773481192669275 2023-03-22 11:51:04\n",
"GD20230310004 11767543705731354662 2023-03-22 11:51:11\n",
"GD20230311007 11765384945608966182 2023-03-22 11:51:18\n",
"GD20230312003 11765575737032069166 2023-03-22 11:51:25\n",
"GD20230312016 11765719958393208922 2023-03-22 11:51:32\n",
"GD20230314004 11766339050632396858 2023-03-22 11:51:39\n",
"GD20230315006 11766636528153935953 2023-03-22 11:51:46\n",
"GD20230315007 11766643584479019054 2023-03-22 11:51:53\n",
"GD20230315009 11766702143711498260 2023-03-22 11:52:00\n",
"GD20230316018 11767064603312275505 2023-03-22 11:52:07\n",
"GD20230316027 11767111906303692881 2023-03-22 11:52:14\n",
"GD20230319005 11768077574054367330 2023-03-22 11:52:21\n",
"GD20230320003 11768440913121001562 2023-03-22 11:52:28\n",
"GD20230224002 11765668846638219320 2023-03-22 11:52:36\n",
"GD20230309001 11764439496739799063 2023-03-22 11:52:44\n",
"GD20230309008 11764494383657795587 2023-03-22 11:52:50\n",
"GD20230309010 11764543445606092841 2023-03-22 11:52:56\n",
"GD20230311004 11765363081071312985 2023-03-22 11:53:03\n",
"GD20230311008 11767089137738338378 2023-03-22 11:53:09\n",
"GD20230312006 11765618351802437659 2023-03-22 11:53:16\n",
"GD20230312007 11765619672580374625 2023-03-22 11:53:22\n",
"GD20230312011 11765671644129935389 2023-03-22 11:53:28\n",
"GD20230312014 11765715726608912421 2023-03-22 11:53:35\n",
"GD20230313001 11765932839273517089 2023-03-22 11:53:41\n",
"GD20230315001 11766606346894458940 2023-03-22 11:53:47\n",
"GD20230315008 11766684928220090406 2023-03-22 11:53:53\n",
"GD20230316006 11767003271867158604 2023-03-22 11:54:00\n",
"GD20230317002 11767371537093513231 2023-03-22 11:54:06\n",
"GD20230318003 11767709188736700508 2023-03-22 11:54:13\n",
"GD20230318005 11767734533108023389 2023-03-22 11:54:19\n",
"GD20230318015 11767807019652763707 2023-03-22 11:54:25\n",
"GD20230318017 11767820305911791705 2023-03-22 11:54:31\n",
"GD20230318021 11767829427952570380 2023-03-22 11:54:37\n",
"GD20230319008 11768115353333284922 2023-03-22 11:54:44\n",
"GD20230319009 11768135358850547763 2023-03-22 11:54:51\n",
"GD20230319010 11768138699068428359 2023-03-22 11:54:58\n",
"GD20230319016 11768272995422851156 2023-03-22 11:55:07\n",
"GD20230320004 11768444464194928738 2023-03-22 11:55:15\n",
"GD20230309004 11764460796711555163 2023-03-22 11:55:21\n",
"GD20230309007 11764484232548732969 2023-03-22 11:55:28\n",
"GD20230313019 11766094525343223828 2023-03-22 11:55:34\n",
"GD20230315011 11766723414440562785 2023-03-22 11:55:41\n",
"GD20230315012 11766732719491403855 2023-03-22 11:55:47\n",
"GD20230316009 11767014278576492547 2023-03-22 11:55:53\n",
"GD20230316022 11767101440936394765 2023-03-22 11:55:59\n",
"GD20230317007 11767406742277738515 2023-03-22 11:56:05\n",
"GD20230318006 11767735424217272393 2023-03-22 11:56:12\n",
"GD20230318023 11767848850784538704 2023-03-22 11:56:18\n",
"GD20230224001 11765662166550597691 2023-03-22 11:56:25\n",
"GD20230302001 11768155761350295606 2023-03-22 11:56:33\n",
"GD20230309003 11764453220749950975 2023-03-22 11:56:41\n",
"GD20230309012 11767545970307387478 2023-03-22 11:56:50\n",
"GD20230310005 11768498060362006533 2023-03-22 11:56:58\n",
"GD20230311003 11765262602479882244 2023-03-22 11:57:04\n",
"GD20230311009 11767836173127405647 2023-03-22 11:57:11\n",
"GD20230313008 11765997375045255171 2023-03-22 11:57:18\n",
"GD20230317008 11767416479270584358 2023-03-22 11:57:25\n",
"GD20230317011 11767450084927623241 2023-03-22 11:57:32\n",
"GD20230317016 11767523474665390152 2023-03-22 11:57:39\n",
"GD20230318008 11767749542886264859 2023-03-22 11:57:46\n",
"GD20230318010 11767766291610353740 2023-03-22 11:57:52\n",
"GD20230320001 11768432913417261135 2023-03-22 11:57:59\n",
"GD20230320002 11768435473532338182 2023-03-22 11:58:07\n",
"GD20230227001 11768259670920151076 2023-03-22 11:58:13\n",
"GD20230308005 11767778371986018357 2023-03-22 11:58:20\n",
"GD20230308006 11767780448254578777 2023-03-22 11:58:27\n",
"GD20230308007 11767783487086547022 2023-03-22 11:58:33\n",
"GD20230308008 11767806217311764487 2023-03-22 11:58:40\n",
"GD20230309002 11764443512068657161 2023-03-22 11:58:46\n",
"GD20230309011 11764551493007458338 2023-03-22 11:58:52\n",
"GD20230310003 11767097652569722957 2023-03-22 11:58:58\n",
"GD20230312001 11765541387305504815 2023-03-22 11:59:04\n",
"GD20230312002 11765575164249526275 2023-03-22 11:59:10\n",
"GD20230312009 11765648082547527681 2023-03-22 11:59:17\n",
"GD20230312013 11765713231736229938 2023-03-22 11:59:23\n",
"GD20230312017 11765729965356630075 2023-03-22 11:59:29\n",
"GD20230312021 11767417093861949481 2023-03-22 11:59:36\n",
"GD20230313002 11765933554968576043 2023-03-22 11:59:41\n",
"GD20230313003 11765975327577227302 2023-03-22 11:59:47\n",
"GD20230313005 11765992118818983940 2023-03-22 11:59:54\n",
"GD20230313006 11765993418822537274 2023-03-22 12:00:00\n",
"GD20230313007 11765996406228140078 2023-03-22 12:00:05\n",
"GD20230313009 11765998306541457494 2023-03-22 12:00:11\n",
"GD20230313017 11766037326784905252 2023-03-22 12:00:17\n",
"GD20230313020 11767121376194875402 2023-03-22 12:00:23\n",
"GD20230314003 11766333837821366309 2023-03-22 12:00:30\n",
"GD20230315004 11766629223626723371 2023-03-22 12:00:36\n",
"GD20230315005 11766632838739279886 2023-03-22 12:00:42\n",
"GD20230315013 11766745699461382157 2023-03-22 12:00:49\n",
"GD20230316005 11766998645784727607 2023-03-22 12:00:55\n",
"GD20230316008 11767012436748554276 2023-03-22 12:01:01\n",
"GD20230316015 11767057978534940764 2023-03-22 12:01:08\n",
"GD20230316019 11767067711253794828 2023-03-22 12:01:14\n",
"GD20230316020 11767079710968791045 2023-03-22 12:01:20\n",
"GD20230316021 11767096913164255265 2023-03-22 12:01:26\n",
"GD20230316023 11767102972075462704 2023-03-22 12:01:32\n",
"GD20230316024 11767103372694409305 2023-03-22 12:01:38\n",
"GD20230316025 11767105651543654493 2023-03-22 12:01:44\n",
"GD20230316026 11767111613537075234 2023-03-22 12:01:50\n",
"GD20230317004 11767386220907216971 2023-03-22 12:01:56\n",
"GD20230317014 11767461272700862469 2023-03-22 12:02:02\n",
"GD20230317015 11767473235866701896 2023-03-22 12:02:08\n",
"GD20230318002 11767704408756867135 2023-03-22 12:02:14\n",
"GD20230318004 11767721288716533810 2023-03-22 12:02:21\n",
"GD20230318016 11767816479670550604 2023-03-22 12:02:26\n",
"GD20230318018 11767823683979067392 2023-03-22 12:02:32\n",
"GD20230318019 11767824964948869140 2023-03-22 12:02:38\n",
"GD20230318024 11767891686699585632 2023-03-22 12:02:45\n",
"GD20230319002 11768060190400725083 2023-03-22 12:02:50\n",
"GD20230319014 11768189399316054102 2023-03-22 12:02:57\n",
"GD20230319015 11768193205026181191 2023-03-22 12:03:03\n",
"GD20230319018 11768277935696396315 2023-03-22 12:03:09\n",
"GD20230320009 11768548487862435859 2023-03-22 12:03:15\n",
"GD20230321001 11768790079013671005 2023-03-22 12:03:21\n",
"GD20230321004 11768813218510684204 2023-03-22 12:03:27\n"
]
}
],
"source": [
"# 进入单据详情页面:取消收款\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import pandas as pd\n",
"from selenium import webdriver\n",
"from time import sleep,ctime\n",
"#获取基础信息#获取基础信息\n",
"name = '18522921001'\n",
"password = 'Aa36349@'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"\n",
"http='https://m.f6car.cn/'\n",
"#driver = webdriver.Chrome(chrome_options=option_chrome)\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"driver.maximize_window()\n",
"driver.implicitly_wait(2)\n",
"driver.get(http)\n",
"\n",
"# 在输入框中输入账号和密码\n",
"username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
"enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
"username.clear()\n",
"username.send_keys(name)\n",
"driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"enter.click()\n",
"time.sleep(10)#预设时间\n",
"\n",
"df = pd.read_excel(r'C:\\Users\\admin\\Downloads\\工单详细列表导出 (1).xlsx',sheet_name='导出计数_单号',dtype='string')\n",
"df.fillna('', inplace=True)\n",
"for i in range(0,len(df)):\n",
" try:\n",
" code = df.loc[i,'单号']\n",
" pkid = df.loc[i,'ID']\n",
" https=f'https://yunxiu.f6car.cn/erp/view/index.html#/index/frame?toUrl=%2Fmaintain%2FgetMaintainInfoNew%2F{pkid}.do%3FlistQueryParam%3D%7B%22currentPage%22%3A1,%22pageSize%22%3A100,%22idOwnOrg%22%3A%2211240984669917702548%22,%22idOwnOrgList%22%3A%2211240984669917702548%22,%22maintainTypeList%22%3A%22GD%22,%22beginDate%22%3A%222022-12-22%22,%22endDate%22%3A%222023-03-22%22,%22idEmployeeList%22%3A%22%22,%22serviceEmployeeIdList%22%3A%22%22,%22isDel%22%3A0,%22sourceFrom%22%3A%22maintainNormal%22,%22rowNum%22%3A47%7D'\n",
" driver.get(https)\n",
" #传值转换\n",
" driver.switch_to.frame('erp-qiankun-iframe')\n",
" driver.find_element_by_xpath('//*[@id=\"cancelGathering\"]').click() # 取消收款\n",
" time.sleep(0.5)\n",
" driver.find_element_by_xpath('/html/body/ul/li/div/div/span[1]/a').click() # 确定\n",
" time.sleep(0.5)\n",
" print(code,pkid,time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))\n",
" except:\n",
" print(code)\n",
" "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# 进入单据详情页面:取消完工"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 进入单据详情页面:取消完工\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import pandas as pd\n",
"from selenium import webdriver\n",
"from time import sleep,ctime\n",
"#获取基础信息#获取基础信息\n",
"name = '18522921001'\n",
"password = 'Aa36349@'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"\n",
"http='https://m.f6car.cn/'\n",
"#driver = webdriver.Chrome(chrome_options=option_chrome)\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"driver.maximize_window()\n",
"driver.implicitly_wait(2)\n",
"driver.get(http)\n",
"\n",
"# 在输入框中输入账号和密码\n",
"username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
"enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
"username.clear()\n",
"username.send_keys(name)\n",
"driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"enter.click()\n",
"time.sleep(10)#预设时间\n",
"\n",
"df = pd.read_excel(r'C:\\Users\\admin\\Downloads\\工单详细列表导出 (1).xlsx',sheet_name='导出计数_单号',dtype='string')\n",
"df.fillna('', inplace=True)\n",
"for i in range(1,len(df)):\n",
" try:\n",
" code = df.loc[i,'单号']\n",
" pkid = df.loc[i,'ID']\n",
" https=f'https://yunxiu.f6car.cn/erp/view/index.html#/index/frame?toUrl=%2Fmaintain%2FgetMaintainInfoNew%2F{pkid}.do%3FlistQueryParam%3D%7B%22currentPage%22%3A1,%22pageSize%22%3A100,%22idOwnOrg%22%3A%2211240984669917702548%22,%22idOwnOrgList%22%3A%2211240984669917702548%22,%22maintainTypeList%22%3A%22GD%22,%22beginDate%22%3A%222022-12-22%22,%22endDate%22%3A%222023-03-22%22,%22idEmployeeList%22%3A%22%22,%22serviceEmployeeIdList%22%3A%22%22,%22isDel%22%3A0,%22sourceFrom%22%3A%22maintainNormal%22,%22rowNum%22%3A47%7D'\n",
" driver.get(https)\n",
" #传值转换\n",
" driver.switch_to.frame('erp-qiankun-iframe')\n",
" driver.find_element_by_xpath('//*[@id=\"cancelComplete\"]').click() # 取消完工\n",
" time.sleep(0.5)\n",
" alert=driver.switch_to.alert #创建弹窗对象\n",
" alert.accept() #点击弹窗中的【确定】\n",
" time.sleep(0.5)\n",
" print(code,pkid,time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))\n",
" except:\n",
" print(code)\n",
" "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# 删除单据"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 删除单据\n",
"import pandas as pd\n",
"import requests\n",
"\n",
"cookies_str = 'maintainSESSIONID=f5071220-d211-4e5e-9c77-c8000d010c1f; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917188035; unp=15632739166222045268; un=15632739166222045268; _up=-NillNN-qyBEJ--t3vnSknvoOF55zvOKs8QE1X09WOVdUvTDoZHQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrE_oXr4kj1QYE-flRv-ZNHu3M-GTc2JuzEnShr-tTi-kYkFLGPBVnrEj9mRTDoJuzcWA.; tmall=false; sensorsdata2015jssdkcross={\"distinct_id\":\"15632739166222045268\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"df = pd.read_excel(r'C:\\Users\\admin\\Downloads\\工单列表导出.xlsx',sheet_name='Sheet1',dtype='string')\n",
"df.fillna('', inplace=True)\n",
"for i in range(1,len(df)):\n",
" code = df.loc[i,'单号']\n",
" pkid = df.loc[i,'ID']\n",
" # 获取version\n",
" res = requests.get(f'https://yunxiu.f6car.cn/maintain/onlineeditor/getOnlineEditorsNew?idSourceBill={pkid}&type=1',cookies=cookie_dict,headers=headers)\n",
" version = res.json()['data']['version']\n",
" data={\n",
" \"pkId\": pkid,\n",
" \"version\": version\n",
" }\n",
" res = requests.post(f'https://yunxiu.f6car.cn/maintain/detail/delMaintain',cookies=cookie_dict,headers=headers,json=data)\n",
" print(i,code,res.json(),time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))"
]
}
],
"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
}
@@ -0,0 +1,347 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"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"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CL0005884 @ 14582097882978937643\n",
"CL0005883 @ 14582097882978840768\n",
"CL0005882 @ 14582097882978836413\n",
"CL0005871 @ 14582097882978835910\n",
"CL0005875 @ 14582097882978835914\n",
"CL0005870 @ 14582097882978835909\n",
"CL0005879 @ 14582097882978835918\n",
"CL0005869 @ 14582097882978835908\n",
"CL0005876 @ 14582097882978835915\n",
"CL0005873 @ 14582097882978835912\n",
"CL0005878 @ 14582097882978835917\n",
"CL0005874 @ 14582097882978835913\n",
"CL0005880 @ 14582097882978835919\n",
"CL0005868 @ 14582097882978835907\n",
"CL0005872 @ 14582097882978835911\n",
"CL0005877 @ 14582097882978835916\n",
"CL0005881 @ 14582097882978835920\n",
"CL0005861 @ 14582097882978832878\n",
"CL0005864 @ 14582097882978832881\n",
"CL0005866 @ 14582097882978832883\n",
"CL0005867 @ 14582097882978832884\n",
"CL0005863 @ 14582097882978832880\n",
"CL0005865 @ 14582097882978832882\n",
"CL0005862 @ 14582097882978832879\n",
"CL0005669 @ 14582097882978831686\n",
"CL0005673 @ 14582097882978831690\n",
"CL0005683 @ 14582097882978831700\n",
"CL0005686 @ 14582097882978831703\n",
"CL0005693 @ 14582097882978831710\n",
"CL0005704 @ 14582097882978831721\n",
"CL0005705 @ 14582097882978831722\n",
"CL0005716 @ 14582097882978831733\n",
"CL0005717 @ 14582097882978831734\n",
"CL0005733 @ 14582097882978831750\n",
"CL0005741 @ 14582097882978831758\n",
"CL0005748 @ 14582097882978831765\n",
"CL0005755 @ 14582097882978831772\n",
"CL0005765 @ 14582097882978831782\n",
"CL0005761 @ 14582097882978831778\n",
"CL0005766 @ 14582097882978831783\n",
"CL0005780 @ 14582097882978832797\n",
"CL0005784 @ 14582097882978832801\n",
"CL0005786 @ 14582097882978832803\n",
"CL0005795 @ 14582097882978832812\n",
"CL0005797 @ 14582097882978832814\n",
"CL0005800 @ 14582097882978832817\n",
"CL0005859 @ 14582097882978832876\n",
"CL0005860 @ 14582097882978832877\n",
"CL0005811 @ 14582097882978832828\n",
"CL0005812 @ 14582097882978832829\n",
"CL0005816 @ 14582097882978832833\n",
"CL0005823 @ 14582097882978832840\n",
"CL0005832 @ 14582097882978832849\n",
"CL0005838 @ 14582097882978832855\n",
"CL0005849 @ 14582097882978832866\n",
"CL0005672 @ 14582097882978831689\n",
"CL0005675 @ 14582097882978831692\n",
"CL0005682 @ 14582097882978831699\n",
"CL0005690 @ 14582097882978831707\n",
"CL0005702 @ 14582097882978831719\n",
"CL0005706 @ 14582097882978831723\n",
"CL0005718 @ 14582097882978831735\n",
"CL0005720 @ 14582097882978831737\n",
"CL0005725 @ 14582097882978831742\n",
"CL0005731 @ 14582097882978831748\n",
"CL0005732 @ 14582097882978831749\n",
"CL0005746 @ 14582097882978831763\n",
"CL0005757 @ 14582097882978831774\n",
"CL0005759 @ 14582097882978831776\n",
"CL0005763 @ 14582097882978831780\n",
"CL0005769 @ 14582097882978831786\n",
"CL0005778 @ 14582097882978832795\n",
"CL0005779 @ 14582097882978832796\n",
"CL0005799 @ 14582097882978832816\n",
"CL0005825 @ 14582097882978832842\n",
"CL0005829 @ 14582097882978832846\n",
"CL0005831 @ 14582097882978832848\n",
"CL0005842 @ 14582097882978832859\n",
"CL0005852 @ 14582097882978832869\n",
"CL0005854 @ 14582097882978832871\n",
"CL0005681 @ 14582097882978831698\n",
"CL0005688 @ 14582097882978831705\n",
"CL0005692 @ 14582097882978831709\n",
"CL0005698 @ 14582097882978831715\n",
"CL0005699 @ 14582097882978831716\n",
"CL0005700 @ 14582097882978831717\n",
"CL0005710 @ 14582097882978831727\n",
"CL0005712 @ 14582097882978831729\n",
"CL0005724 @ 14582097882978831741\n",
"CL0005745 @ 14582097882978831762\n",
"CL0005753 @ 14582097882978831770\n",
"CL0005758 @ 14582097882978831775\n",
"CL0005764 @ 14582097882978831781\n",
"CL0005767 @ 14582097882978831784\n",
"CL0005770 @ 14582097882978831787\n",
"CL0005776 @ 14582097882978832793\n",
"CL0005777 @ 14582097882978832794\n",
"CL0005790 @ 14582097882978832807\n",
"CL0005792 @ 14582097882978832809\n",
"CL0005807 @ 14582097882978832824\n"
]
}
],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"from pprint import pprint\n",
"cookies_str = 'f6-ids-goodsSESSIONID=af571e86-4e73-4006-9c8a-255f6977165c; erpLanguage=zh-CN; tmall=false; unp=10546443564007523766; _up=-NillNN-qyBEJ--t3vnSknvoOFt6yfeJtM4A1X8_WuBYVPLGoZ_QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFPoUqI4i0wsJ9_JRv-ZNHu3M-GTZ25y3EXOrq-tRiesdlVTAORVprEj9-knQgcH6NGI.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215605564149906554899%22%2C%22first_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fyunxiu.f6car.com%2Ferp%2Fview%2Findex.html%22%7D%2C%22%24device_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%7D; prodOrg=11240984669917926035'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"url = 'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo'\n",
"for a in range(1,56):\n",
" json={\n",
" 'applyModel': \"\",\n",
" 'brand': \"\",\n",
" 'categoryId': \"\",\n",
" 'categoryName': \"\",\n",
" 'currentPage': a,\n",
" 'customCode': \"\",\n",
" 'idOwnOrg': \"11240984669917926035\",\n",
" 'keyWord': \"\",\n",
" 'labelId': \"\",\n",
" 'labelName': \"\",\n",
" 'name': \"\",\n",
" 'pageSize': 100,\n",
" 'sellPurchaseStatuses': [2, 3, 4, 5],\n",
" 'spec': \"\",\n",
" 'supplierCode': \"\"\n",
" }\n",
" res = requests.post(url,cookies=cookie_dict,json=json)\n",
" rr = res.json()\n",
" le=len(rr['data']['records'])\n",
" for i in range(0,le):\n",
" id1={}\n",
" rr0=rr['data']['records'][i]['customCode']\n",
" rr1=rr['data']['records'][i]['infoId']\n",
" print(rr0,\"@\",rr1)"
]
},
{
"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": [
"1\n"
]
}
],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"from pprint import pprint\n",
"cookies_str = 'f6-ids-goodsSESSIONID=f20a1664-54ba-46e9-acad-3c911970b63b; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; tmall=false; unp=10546443564007523766; _up=-NillNN-qyBEJ--t3vnSknvoOFt6yfeJtM4A1X8_WuBYVPLGoZ_QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFPoUqIgm1QMN-flRv-ZNHu3M-GTZ25y3EXOrq-tRiesdlVTAORVprEj9zRT49czKaSs.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210546443564007523766%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D; prodOrg=11240984669917926035'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.com'\n",
"}\n",
"result = []\n",
"url = 'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo'\n",
"for a in range(1,60):\n",
" try:\n",
" json={\n",
" 'applyModel': \"\",\n",
" 'brand': \"\",\n",
" 'categoryId': \"\",\n",
" 'categoryName': \"\",\n",
" 'currentPage': a,\n",
" 'customCode': \"\",\n",
" 'idOwnOrg': \"11240984669917926035\",\n",
" 'keyWord': \"\",\n",
" 'labelId': \"\",\n",
" 'labelName': \"\",\n",
" 'name': \"\",\n",
" 'pageSize': 100,\n",
" 'sellPurchaseStatuses': [2, 3, 4, 5],\n",
" 'spec': \"\",\n",
" 'supplierCode': \"\"\n",
" }\n",
" res = requests.post(url,cookies=cookie_dict,json=json)\n",
" rr = res.json()\n",
" le=len(rr['data']['records'])\n",
" for i in range(0,le):\n",
" applyModel=rr['data']['records'][i]['applyModel']\n",
" infoId=rr['data']['records'][i]['infoId']\n",
" name=rr['data']['records'][i]['name']\n",
" accId=rr['data']['records'][i]['accId']\n",
" supplierCode=rr['data']['records'][i]['supplierCode']\n",
" brand=rr['data']['records'][i]['brand']\n",
" result.append({'infoId':infoId,'材料编码':accId,'材料名称':name,'品牌':brand,'零件号':supplierCode,'规格型号':applyModel})\n",
" print(a)\n",
" except:\n",
" pass\n",
"df = pd.DataFrame(result)\n",
"df.to_excel(r'C:\\Users\\admin\\Desktop\\88888888888888888888888888888888888888888品牌零件号查询云材料.xlsx')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"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"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<Response [200]> {'infoIds': ['14582097882978832878'], 'idOwnOrg': '10546443564007523756'}\n"
]
}
],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"from pprint import pprint\n",
"import time\n",
"cookies_str = 'f6-ids-goodsSESSIONID=f0a4838b-8512-4057-a826-0b1b8ba37c6d; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; prodOrg=10546443564007523756; unp=10546443564007523766; _up=-NillNN-qyBEJ--t3vnSknvoOFt6yfeJtM4A1X8_WuBYVPLGoZ_QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFPoUoYMj0QQF_vFRv-ZNHu3M-GTZ25y3EXOrq-tRiesdlVTAORVprEj94m_voc22PGg.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210546443564007523766%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D; tmall=false'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"url = 'https://ids-goods.f6car.cn/f6-ids-goods/part/deletePartInfo'\n",
"\n",
"data = pd.read_excel(r\"C:\\Users\\admin\\Desktop\\材料信息删除.xlsx\", sheet_name='Sheet1')\n",
"for a in data.index:\n",
" infoId =data.loc[a,\"材料长码\"]\n",
" json={\"infoIds\":[str(infoId)],\"idOwnOrg\":\"10546443564007523756\"}\n",
" resquest = requests.post(url,cookies=cookie_dict,json=json)\n",
" print(resquest,json)\n",
" time.sleep(1)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 ('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,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
+134
View File
@@ -0,0 +1,134 @@
# -*- coding:UTF-8 -*-
# 功能:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
import datetime
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
# 获取会员卡基础信息
pkId = '4061359779622808474' # 手动获取
name = '15888265981'
password = 'F6123456'
zhi = 1
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
for hum in range(zhi):
# http='https://yunxiu-trial.f6car.cn/member/customer/list?pageSize=5000&pageNo=1'
httptx = 'https://yunxiu.f6car.cn'
# 初步加载处理
# chrom_opt = webdriver.ChromeOptions()
# prefs = { "profile.managed_default_content_settings.images": 2 }
# chrom_opt.add_experimental_option("prefs", prefs)
# driver = webdriver.Chrome(executable_path="E:/Python/chromedriver.exe", chrome_options=chrom_opt)
# 无显示预处理
# option=webdriver.ChromeOptions()
# option.add_argument('headless') # 设置option
# driver = webdriver.Chrome(chrome_options=option)
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(0.2)
driver.get(httptx)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
'''
try:
driver.find_element_by_xpath(
'//*[@id="app"]/div/div[1]/div[2]/div/div/div[2]/div[2]/div/div[1]/div/div[1]/p[1]').click()
except:
print('未识别到多门店')
'''
time.sleep(4) # 预设时间
print("登陆系统")
print("创建文件")
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
# 打开excel文件
print("打开文件")
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
https = 'https://yunxiu.f6car.cn/kzf6/partInfo/newPageList.do?page=view%2Fmaterial.html%23/info/list/cloud'
driver.get(https)
# 传值转换
driver.switch_to.frame('weixin-page-iframe')
# 获取卡项目
num = 0
for i in range(0, h): # 浮点型
try:
d1 = datetime.datetime.now()
receiveAmount1 = table.cell(num, 0).value # 按行品牌
receiveAmount2 = table.cell(num, 1).value # 按行零件号
receiveAmount3 = table.cell(num, 2).value # 按行自编码
# https='https://yunxiu-trial.f6car.cn/kzf6/member/index.do?page=/view/index.html%23/customer/detail/'+idMember
# 进入链接获取json
num = num + 1
time.sleep(0.2)
input_box = driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input').send_keys(
receiveAmount1)
time.sleep(0.2)
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/div/button/i').click()#确定
time.sleep(0.2)
try:
input1=driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div[2]/div[1]/div/div/ul/li/span')
if input1.text==receiveAmount1:
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/div/ul/li[1]/span').click() # 选择
time.sleep(0.2)
input_box = driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input').send_keys(receiveAmount2)
time.sleep(0.2)
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/div/button/i').click() # 确定
time.sleep(0.2)
'//*[@id="cloudTable"]/div[1]/div[3]/table/tbody/tr/td[7]/div'
input1 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[2]/div')
input2 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[3]/div')
input3 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[5]/div')
input4 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[6]/div')
input6 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[7]/div')
input5 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div[2]/span')
d3 = d1 + datetime.timedelta(hours=10)
print(num, '@', receiveAmount3, '@', input1.text, '@', input2.text, '@', input3.text, '@', input4.text, '@', input6.text,'@', input5.text)
except:
print('未识别到品牌字段')
'/html/body/div/div/div/div/div[2]/div[3]/div[2]/div[3]/div/button/span/i'
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/button/span/i').click() # 取消
'''
input1 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[1]/div')
input2 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[2]/div')
input3 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[4]/div')
input4 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[6]/div')
input5 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div[2]/span')
d3 = d1 + datetime.timedelta(hours=10)
print(num, '@', input1.text, '@', input2.text, '@', input3.text, '@', input4.text, '@', input5.text)
'''
except:
continue
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,103 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11月—维修领料配件财务审统计表(汇总)已删除需减产值的.xls\n",
"4月维修领料配件财务审统计表(汇总).xls\n",
"5月材料同捷+畅天.xls\n",
"报表---维修领料配件财务审统计表.xls\n",
"报表--维修领料配件财务审统计表.xls\n",
"报表-维修领料配件财务审统计表--汇总.xls\n",
"报表-维修领料配件财务审统计表-汇总.xls\n",
"报表-维修领料配件财务审统计表.xls\n",
"报表-维修领料配件财务审统计表0228.xls\n",
"报表-维修领料配件财务审统计表10..xls\n",
"报表-维修领料配件财务审统计表10.xls\n",
"报表-维修领料配件财务审统计表11.xls\n",
"报表-维修领料配件财务审统计表12(4).xls\n",
"报表-维修领料配件财务审统计表12月.xls\n",
"报表-维修领料配件财务审统计表2019.xls\n",
"报表-维修领料配件财务审统计表202001.xls\n",
"报表-维修领料配件财务审统计表2021年9月.xls\n",
"报表-维修领料配件财务审统计表202201.xls\n",
"报表-维修领料配件财务审统计表331.xls\n",
"报表-维修领料配件财务审统计表3月.xls\n",
"报表-维修领料配件财务审统计表5.xls\n",
"报表-维修领料配件财务审统计表6.xls\n",
"报表-维修领料配件财务审统计表7.xls\n",
"报表-维修领料配件财务审统计表8.xls\n",
"报表-维修领料配件财务审统计表9.xls\n",
"报表-维修领料配件财务审统计表—12月汇总.xls\n",
"汇总----维修领料配件财务审统计表.xls\n",
"汇总-维修领料配件财务审统计表.xls\n",
"汇总-维修领料配件财务审统计表2月.xls\n",
"汇总6月报表-维修领料配件财务审统计表.xls\n",
"汇总7月报表-维修领料配件财务审统计表.xls\n",
"汇总报表-维修领料配件财务审统计表.xls\n",
"汇总报表.-维修领料配件财务审统计表.xls\n",
"维修领料配件财务审统计表-2月.xls\n",
"维修领料配件财务审统计表—10月汇总.xls\n",
"维修领料配件财务审统计表—汇总.xls\n",
"!维修领料配件财务审统计表-汇总一下.xls\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-2-d7b0f52d1f5d>:18: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n",
" merged_df.to_excel(output_file, index=False)\n"
]
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"\n",
"folder_path = r'C:\\Users\\admin\\Desktop\\历史记录(1)\\材料'\n",
"excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]\n",
"\n",
"# 读取每个Excel文件并将其存储在一个列表中\n",
"dataframes = []\n",
"for file in excel_files:\n",
" print(file)\n",
" file_path = os.path.join(folder_path, file)\n",
" df = pd.read_excel(file_path)\n",
" dataframes.append(df)\n",
"\n",
"merged_df = pd.concat(dataframes, ignore_index=True)\n",
"\n",
"output_file = '合并后材料.xlsx'\n",
"merged_df.to_excel(output_file, index=False)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,112 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas64__v0.3.21-gcc_10_3_0.dll\n",
" warnings.warn(\"loaded more than 1 DLL from .libs:\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"11月—维修产值财务审统计表(汇总)已删除需减产值的.xls\n",
"4月维修产值财务审统计表(汇总).xls\n",
"5月产值同捷+畅天.xls\n",
"报表---维修产值财务审统计表.xls\n",
"报表--维修产值财务审统计表.xls\n",
"报表-维修产值财务审统计表--汇总.xls\n",
"报表-维修产值财务审统计表-汇总.xls\n",
"报表-维修产值财务审统计表.xls\n",
"报表-维修产值财务审统计表0228.xls\n",
"报表-维修产值财务审统计表10..xls\n",
"报表-维修产值财务审统计表10.xls\n",
"报表-维修产值财务审统计表11.xls\n",
"报表-维修产值财务审统计表12月.xls\n",
"报表-维修产值财务审统计表2019.xls\n",
"报表-维修产值财务审统计表202101.xls\n",
"报表-维修产值财务审统计表2021年9月.xls\n",
"报表-维修产值财务审统计表202201.xls\n",
"报表-维修产值财务审统计表331.xls\n",
"报表-维修产值财务审统计表3月.xls\n",
"报表-维修产值财务审统计表5.xls\n",
"报表-维修产值财务审统计表6.xls\n",
"报表-维修产值财务审统计表7.xls\n",
"报表-维修产值财务审统计表8.xls\n",
"报表-维修产值财务审统计表9.xls\n",
"报表-维修产值财务审统计表—12月汇总.xls\n",
"汇总----维修产值财务审统计表.xls\n",
"汇总-维修产值财务审统计表.xls\n",
"汇总-维修产值财务审统计表2月.xls\n",
"汇总6月报表-维修产值财务审统计表.xls\n",
"汇总7月报表-维修产值财务审统计表.xls\n",
"汇总报表-维修产值财务审统计表.xls\n",
"汇总报表.-维修产值财务审统计表.xls\n",
"维修产值财务审统计表-2月.xls\n",
"维修产值财务审统计表—10月汇总.xls\n",
"维修产值财务审统计表—汇总.xls\n",
"!维修产值财务审统计表-汇总一下.xls\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-1-225ed455547c>:18: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n",
" merged_df.to_excel(output_file, index=False)\n"
]
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"\n",
"folder_path = r'C:\\Users\\admin\\Desktop\\历史记录(1)\\产值'\n",
"excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]\n",
"\n",
"# 读取每个Excel文件并将其存储在一个列表中\n",
"dataframes = []\n",
"for file in excel_files:\n",
" print(file)\n",
" file_path = os.path.join(folder_path, file)\n",
" df = pd.read_excel(file_path)\n",
" dataframes.append(df)\n",
"\n",
"merged_df = pd.concat(dataframes, ignore_index=True)\n",
"\n",
"output_file = '合并后产值.xlsx'\n",
"merged_df.to_excel(output_file, index=False)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,100 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11月—维修工时财务审统计表(汇总)已删除需减产值的.xls\n",
"4月维修工时财务审统计表(汇总).xls\n",
"5月工时同捷+畅天.xls\n",
"报表---维修工时财务审统计表.xls\n",
"报表--维修工时财务审统计表.xls\n",
"报表-维修工时财务审统计表--汇总.xls\n",
"报表-维修工时财务审统计表-汇总.xls\n",
"报表-维修工时财务审统计表.xls\n",
"报表-维修工时财务审统计表0228.xls\n",
"报表-维修工时财务审统计表10..xls\n",
"报表-维修工时财务审统计表10.xls\n",
"报表-维修工时财务审统计表11.xls\n",
"报表-维修工时财务审统计表12月.xls\n",
"报表-维修工时财务审统计表2019.xls\n",
"报表-维修工时财务审统计表202101.xls\n",
"报表-维修工时财务审统计表2021年9月.xls\n",
"报表-维修工时财务审统计表202201.xls\n",
"报表-维修工时财务审统计表331.xls\n",
"报表-维修工时财务审统计表3月.xls\n",
"报表-维修工时财务审统计表6.xls\n",
"报表-维修工时财务审统计表7.xls\n",
"报表-维修工时财务审统计表8.xls\n",
"报表-维修工时财务审统计表9.xls\n",
"报表-维修工时财务审统计表—12月汇总.xls\n",
"汇总----维修工时财务审统计表.xls\n",
"汇总-维修工时财务审统计表.xls\n",
"汇总-维修工时财务审统计表2月.xls\n",
"汇总6月报表-维修工时财务审统计表.xls\n",
"汇总7月报表-维修工时财务审统计表.xls\n",
"汇总报表-维修工时财务审统计表.xls\n",
"汇总报表.-维修工时财务审统计表.xls\n",
"维修工时财务审统计表-2月.xls\n",
"维修工时财务审统计表—10月汇总.xls\n",
"维修工时财务审统计表—汇总.xls\n",
"!维修工时财务审统计表-汇总一下.xls\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-3-a54f8128be16>:17: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n",
" merged_df.to_excel(output_file, index=False)\n"
]
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"\n",
"folder_path = r'C:\\Users\\admin\\Desktop\\历史记录(1)\\工时'\n",
"excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]\n",
"\n",
"# 读取每个Excel文件并将其存储在一个列表中\n",
"dataframes = []\n",
"for file in excel_files:\n",
" print(file)\n",
" file_path = os.path.join(folder_path, file)\n",
" df = pd.read_excel(file_path)\n",
" dataframes.append(df)\n",
"\n",
"merged_df = pd.concat(dataframes, ignore_index=True)\n",
"output_file = '合并后工时.xlsx'\n",
"merged_df.to_excel(output_file, index=False)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
+382
View File
@@ -0,0 +1,382 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"表数据的行数为210,列数为2\n",
"13084101247 0 14365556958328588048 : 10546443563809684189 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804496\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958328588048\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13096562469 0 15655280450073546798 : 11240984669917074568 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804497\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15655280450073546798\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13134871931 0 10546172455180031723 : 10546172455153749935 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804498\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180031723\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13143461200 0 15477426816720838742 : 11240984669917165532 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804499\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15477426816720838742\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13149141143 0 10546172455234514111 : 10546443563654861858 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804500\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455234514111\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13149141143 1 10546172455234514111 : 11240984669917082528 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804501\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455234514111\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13170030052 0 14582097882792073980 : 11240984669917671535 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804502\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882792073980\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13172736740 0 15634284891867205679 : 11240984669917614026 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804503\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15634284891867205679\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13231661722 0 14365556958321342330 : 10546443563761385049 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804504\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958321342330\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13252159215 0 15621863064071061565 : 11240984669917578546 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804505\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15621863064071061565\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13253749993 0 14365556958323166338 : 10546443563772655608 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804506\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958323166338\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13320902011 0 15644792238037286950 : 11240984669917640199 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804507\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15644792238037286950\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13341026930 0 15516795996867661913 : 11240984669917109107 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804508\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15516795996867661913\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13341026930 1 15516795996867661913 : 11240984669917324032 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804509\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15516795996867661913\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13341026930 2 15516795996867661913 : 10546443563772655620 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804510\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15516795996867661913\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13348918449 0 14582097882780289253 : 10546443564026546883 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804511\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882780289253\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13353830804 0 15607757450747334666 : 11240984669917076077 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804512\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15607757450747334666\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13356660099 0 14582097882771362399 : 10546443563980415801 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804513\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882771362399\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13356895033 0 15419086738819203099 : 11240984669917013516 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804514\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15419086738819203099\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13386637308 0 10546172455180030284 : 10546050787356325512 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804515\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180030284\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13457252947 0 15652661244060516429 : 11240984669917066578 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804516\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15652661244060516429\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13469725111 0 15454558237189214240 : 11240984669917116525 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804517\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15454558237189214240\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13472225525 0 14582097882772803317 : 10546443563990884979 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804518\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882772803317\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13508842871 0 14365556958315724725 : 10546443563710234005 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804519\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958315724725\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13508842871 1 14365556958315724725 : 11240984669917456533 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804520\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958315724725\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13509735502 0 10546172455231166525 : 10546172455231166542 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804521\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455231166525\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13521852845 0 15516160778360070196 : 11240984669917341029 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804522\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15516160778360070196\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13527433330 0 15498774411678322729 : 11240984669917322553 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804523\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15498774411678322729\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13527588826 0 15408809789215559775 : 11240984669916920582 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804524\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15408809789215559775\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13542343666 0 15486405891980267600 : 11240984669917190521 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804525\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15486405891980267600\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13572193083 0 10546172455180024665 : 11240984669917058054 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804526\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180024665\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13572193083 1 10546172455180024665 : 11240984669917051036 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804527\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180024665\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13572193083 2 10546172455180024665 : 11240984669917325046 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804528\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180024665\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13572193083 3 10546172455180024665 : 11240984669917081563 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804529\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180024665\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13610944443 0 14582097882812119282 : 11240984669917029058 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804530\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882812119282\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13621112531 0 15577335444466053123 : 10691192243963987046 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804531\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15577335444466053123\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13628715240 0 15670531276169834588 : 11240984669917340051 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804532\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15670531276169834588\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13637119818 0 15548020492995670079 : 10546443563860524123 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804533\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15548020492995670079\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13644121818 0 15454844702628520008 : 10691192243905800085 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804534\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15454844702628520008\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13654925482 0 14582097882792621975 : 10691192243938382620 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804535\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882792621975\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13654925482 1 14582097882792621975 : 11240984669917304842 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804536\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882792621975\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13663166918 0 10546443563704415552 : 10546443563703204802 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804537\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563704415552\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13664609354 0 15664389788843130964 : 10691192243928557589 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804538\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15664389788843130964\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13699932099 0 14365556958336471021 : 10546443563846903494 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804539\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958336471021\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13699932099 1 14365556958336471021 : 11240984669917108036 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804540\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958336471021\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13703829924 0 15551404104403136583 : 10545724654284683189 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804541\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15551404104403136583\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13704729167 0 14582097882780508638 : 11240984669917139536 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804542\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882780508638\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13706745920 0 10546172455180032810 : 10546172455170763509 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804543\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180032810\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13720257818 0 15386439567133429779 : 11240984669917640177 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804544\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15386439567133429779\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13726678657 0 15483062767522418705 : 11240984669917116029 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804545\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15483062767522418705\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13733861617 0 10546172455193582497 : 10546172455192881887 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804546\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455193582497\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13750705085 0 14365556958315407316 : 10546443563713251614 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804547\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958315407316\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13756565277 0 14582097882801749963 : 10907434497309977926 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804548\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882801749963\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13769648332 0 15418572417219510283 : 11240984669917005516 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804549\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15418572417219510283\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13771033035 0 14582097882779535108 : 11240984669917041689 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804550\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882779535108\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13771033035 1 14582097882779535108 : 11240984669917094600 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804551\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882779535108\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13771033035 2 14582097882779535108 : 11240984669917042678 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804552\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882779535108\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13771033035 3 14582097882779535108 : 11240984669917089516 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804553\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882779535108\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13785610483 0 15642209571114602572 : 11240984669917500517 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804554\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15642209571114602572\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13785610483 1 15642209571114602572 : 11240984669917722281 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804555\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15642209571114602572\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13801049572 0 15483806845167996942 : 10546443563846887410 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804556\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15483806845167996942\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13801049572 1 15483806845167996942 : 10546443563667385385 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804557\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15483806845167996942\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13814658520 0 14582097882822500376 : 11240984669917070035 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804558\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822500376\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13815850804 0 14582097882822732849 : 11240984669917075577 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804559\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822732849\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13820299066 0 14365556958328424528 : 10546443563808567608 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804560\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958328424528\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13834164983 0 15383412198302867510 : 11240984669917485518 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804561\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15383412198302867510\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13834164983 1 15383412198302867510 : 11240984669917737714 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804562\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15383412198302867510\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13855445529 0 14582097882762078242 : 10546443563918222824 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804563\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882762078242\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13855445529 1 14582097882762078242 : 11240984669917388083 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804564\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882762078242\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13855445529 2 14582097882762078242 : 11240984669917670818 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804565\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882762078242\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13881905839 0 14582097882763068224 : 10546443563926014205 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804566\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882763068224\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13882114645 0 10546172455191863386 : 11240984669917055593 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804567\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455191863386\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13882114645 1 10546172455191863386 : 11240984669917058033 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804568\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455191863386\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13894891941 0 14365556958342912038 : 10546443563903522801 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804569\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958342912038\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13894891941 1 14365556958342912038 : 11240984669916892059 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804570\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958342912038\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13898911456 0 14365556958343125896 : 10546443563905175967 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804571\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958343125896\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13905130053 0 10546172455180025634 : 10545511425557179090 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804572\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180025634\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13926689077 0 15387918248200687632 : 11240984669917068076 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804573\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15387918248200687632\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13940825660 0 15393905072245104675 : 11240984669917346526 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804574\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15393905072245104675\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13966729816 0 14582097882822895241 : 10907434497450512778 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804575\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822895241\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13966729816 1 14582097882822895241 : 11240984669917201029 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804576\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822895241\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13967369520 0 15479134043626278951 : 11240984669916923605 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804577\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15479134043626278951\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13970859533 0 14582097882811944564 : 10907434497369226917 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804578\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882811944564\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13970859533 1 14582097882811944564 : 11240984669917162518 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804579\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882811944564\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13971090477 0 15412027765460914178 : 11240984669917031558 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804580\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15412027765460914178\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13972926052 0 14582097882810914059 : 10907434497363731166 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804581\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882810914059\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13987233722 0 14582097882821862951 : 11240984669917027544 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804582\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882821862951\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"13998682517 0 15595500173306904610 : 11240984669917496519 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804583\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15595500173306904610\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15037199912 0 10546443563652930572 : 10546443563652930589 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804584\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563652930572\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15041187878 0 14365556958335260311 : 10546443563846895401 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804585\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958335260311\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15056898457 0 15665364314259210248 : 11240984669917052604 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804586\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15665364314259210248\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15061626715 0 10546172455180031833 : 10546172455157874869 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804587\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180031833\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15071415865 0 14582097882822899622 : 11240984669917075079 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804588\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822899622\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15094060610 0 14365556958342806150 : 10546443563902304693 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804589\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958342806150\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15119172877 0 15542664056878931998 : 11240984669917068577 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804590\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15542664056878931998\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15139302902 0 10546443563677183904 : 10546443563677592836 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804591\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563677183904\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15141344544 0 15540068992885465181 : 11240984669917340558 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804592\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15540068992885465181\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15145422888 0 14582097882774453302 : 10546443563994718349 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804593\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882774453302\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15161519000 0 15444733014805844029 : 11240984669917094600 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804594\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15444733014805844029\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15189102573 0 10546172455180026857 : 10545511425563997353 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804595\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180026857\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15205348366 0 15434558374779293696 : 11240984669917059522 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804596\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15434558374779293696\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15235809909 0 10546443563673014870 : 10546443563888007235 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804597\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563673014870\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15240271100 0 10546443563703401678 : 10546443563722997239 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804598\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563703401678\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15292029236 0 14582097882822871040 : 10546443563753455462 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804599\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822871040\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15304732017 0 14582097882784032487 : 10546443564045194949 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804600\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882784032487\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15305389999 0 15438232527516467211 : 11240984669917075525 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804601\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15438232527516467211\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15305389999 1 15438232527516467211 : 11240984669917320025 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804602\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15438232527516467211\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15307130681 0 15433884972728979506 : 11240984669917033058 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804603\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15433884972728979506\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15349921660 0 15428755180060938253 : 11240984669916901554 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804604\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15428755180060938253\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15351705982 0 15646928444871168008 : 11240984669917096695 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804605\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15646928444871168008\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15365014189 0 15524071847237783625 : 10546443563772660110 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804606\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15524071847237783625\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15368067083 0 14365556958340105100 : 10546443563883561403 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804607\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958340105100\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15506603699 0 14582097882803550931 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804608\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882803550931\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15514097725 0 14582097882822699619 : 11240984669917342542 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804609\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822699619\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15538410612 0 15551922566850424857 : 11240984669917020556 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804610\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15551922566850424857\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15544015606 0 15450567107212742680 : 11240984669917066087 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804611\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15450567107212742680\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15553735222 0 14365556958327741588 : 10546443563805250042 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804612\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958327741588\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15556831289 0 15611129082601820240 : 11240984669917545551 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804613\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15611129082601820240\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15564897977 0 14365556958321280494 : 10546443563761385018 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804614\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958321280494\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15611712299 0 10546443563680934860 : 11240984669917066077 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804615\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563680934860\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15684341158 0 15413526187795890212 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804616\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15413526187795890212\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15701291789 0 15481235705283223590 : 11240984669917331043 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804617\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15481235705283223590\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15716621301 0 10546443563682533424 : 10907434497447412722 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804618\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563682533424\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15716621301 1 10546443563682533424 : 11240984669917140050 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804619\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563682533424\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15734737009 0 15459194581362413593 : 11240984669917053025 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804620\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15459194581362413593\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15803145012 0 15470110433242779665 : 11240984669917118521 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804621\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15470110433242779665\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15803145012 1 15470110433242779665 : 10546443563723002739 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804622\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15470110433242779665\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15809916955 0 14365556958321624883 : 10546443563767202690 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804623\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958321624883\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15811330638 0 15664717065288175668 : 11240984669917731021 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804624\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15664717065288175668\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15815757879 0 15486897794182025243 : 11240984669917330530 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804625\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15486897794182025243\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15821407811 0 14582097882801780424 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804626\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882801780424\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15828945227 0 14365556958318476699 : 11240984669917584023 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804627\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958318476699\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15830492616 0 10546172455187599413 : 10546172455187881427 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804628\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455187599413\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15867407760 0 15645405324192530466 : 10545055917999719687 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804629\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15645405324192530466\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15883036830 0 15523376230945525841 : 11240984669917322603 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804630\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15523376230945525841\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15896850979 0 14365556958338470357 : 10546443563866231436 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804631\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958338470357\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15902245707 0 15429849475690008641 : 11240984669917047054 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804632\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15429849475690008641\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15903913677 0 14582097882817523971 : 10907434497400085871 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804633\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882817523971\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15914519972 0 14365556958326579070 : 11240984669917705560 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804634\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958326579070\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15926175050 0 15409611704736235570 : 11240984669917068594 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804635\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15409611704736235570\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15935551687 0 10546172455186072143 : 10546172455186072161 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804636\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455186072143\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15937683177 0 10546443563667180063 : 10546443563667180147 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804637\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563667180063\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15940865696 0 15541157543412772874 : 11240984669917349034 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804638\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15541157543412772874\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15941266279 0 15420430946809241610 : 11240984669917026548 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804639\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15420430946809241610\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15952051001 0 14582097882774651684 : 10546443563916755470 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804640\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882774651684\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15954760888 0 14582097882775479719 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804641\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882775479719\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"15976981542 0 15494798719018082377 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804642\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15494798719018082377\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17310327169 0 15654960202036297768 : 11240984669917681553 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804643\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15654960202036297768\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17310327169 1 15654960202036297768 : 11240984669917717131 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804644\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15654960202036297768\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17361171775 0 15417563046733758471 : 11240984669917040542 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804645\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15417563046733758471\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17397300016 0 10546172455180032996 : 10546443563960780262 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804646\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180032996\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17613650175 0 15659213020607823893 : 11240984669917067574 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804647\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15659213020607823893\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17616554906 0 15622603032020140124 : 11240984669917426092 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804648\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15622603032020140124\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17621029933 0 15656015072289902654 : 11240984669917700731 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804649\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15656015072289902654\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17671296067 0 10546172455229881562 : 11240984669917068095 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804650\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455229881562\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17671398899 0 14365556958332057016 : 10546443563828889284 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804651\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958332057016\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17671398899 1 14365556958332057016 : 11240984669917328035 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804652\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958332057016\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17752186513 0 15647715467416584212 : 11240984669917348530 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804653\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15647715467416584212\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17773157222 0 15494734236694351947 : 11240984669917085051 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804654\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15494734236694351947\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"17795732496 0 15466851614869954561 : 11240984669917168527 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804655\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15466851614869954561\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18009084812 0 10546172455231778765 : 10546443563658312609 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804656\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455231778765\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18009084812 1 10546172455231778765 : 11240984669917496016 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804657\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455231778765\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18032293793 0 14582097882818812373 : 11240984669917128171 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804658\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882818812373\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18035818668 0 14582097882768428280 : 10691192243946427667 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804659\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882768428280\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18058188890 0 15656019828458672196 : 11240984669917698562 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804660\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15656019828458672196\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18059585999 0 15495431278693453877 : 11240984669917193517 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804661\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15495431278693453877\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18068801370 0 14582097882791329899 : 11240984669917043099 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804662\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882791329899\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18075784750 0 15663550217016328223 : 11240984669917738049 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804663\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15663550217016328223\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18075791000 0 15442863497779609622 : 11240984669917085041 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804664\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15442863497779609622\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18075791000 1 15442863497779609622 : 11240984669917738049 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804665\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15442863497779609622\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18090877604 0 15655936342502690911 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804666\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15655936342502690911\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18098606198 0 10546172455180027018 : 10545511425565073559 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804667\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180027018\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18103199133 0 15435373620406255680 : 11240984669917066523 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804668\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15435373620406255680\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18112882552 0 14582097882789879991 : 10691192243917935678 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804669\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882789879991\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18136362966 0 10546172455235298397 : 10546443563900963864 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804670\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455235298397\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18149055915 0 14365556958342685269 : 10546443563904836244 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804671\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958342685269\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18173299555 0 14365556958330582166 : 10546443563816610238 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804672\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958330582166\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18173299555 1 14365556958330582166 : 11240984669917457528 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804673\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958330582166\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18199229966 0 14365556958321214008 : 10546443563754919099 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804674\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958321214008\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18199229966 1 14365556958321214008 : 11240984669917255017 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804675\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958321214008\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18224727137 0 15439231587954196487 : 11240984669917096617 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804676\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15439231587954196487\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18224727137 1 15439231587954196487 : 11240984669917011523 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804677\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15439231587954196487\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18246825999 0 15593395625931063360 : 11240984669917438543 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804678\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15593395625931063360\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18257040311 0 15500149827680866371 : 10691192243941243947 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804679\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15500149827680866371\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18260579997 0 15432327575162064963 : 11240984669917041043 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804680\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15432327575162064963\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18260579997 1 15432327575162064963 : 11240984669917356018 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804681\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15432327575162064963\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18260579997 2 15432327575162064963 : 11240984669917529023 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804682\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15432327575162064963\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18292545111 0 14365556958315912141 : 11240984669917186075 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804683\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958315912141\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18297777080 0 15399461748444553268 : 11240984669916866026 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804684\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15399461748444553268\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18338376868 0 15527994867052453966 : 11240984669917067574 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804685\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15527994867052453966\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18340171717 0 15607417531415937058 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804686\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15607417531415937058\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18361094005 0 15616494398374694947 : 11240984669917524517 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804687\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15616494398374694947\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18366770521 0 10546443563651054187 : 11240984669917630529 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804688\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563651054187\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18366770521 1 10546443563651054187 : 11240984669917021076 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804689\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563651054187\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18385153126 0 15514614918362963986 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804690\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15514614918362963986\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18396116316 0 15453793591121420384 : 11240984669917058543 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804691\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15453793591121420384\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18452315177 0 14365556958316139990 : 11240984669916911550 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804692\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958316139990\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18524433799 0 15514663353506078724 : 11240984669917335535 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804693\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15514663353506078724\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18531515168 0 14365556958317743869 : 10546443563723021925 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804694\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958317743869\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18545005911 0 15513889906886713390 : 11240984669917644472 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804695\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15513889906886713390\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18576312406 0 15500932147224514629 : 11240984669917042098 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804696\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15500932147224514629\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18576312406 1 15500932147224514629 : 11240984669917102526 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804697\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15500932147224514629\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18576312406 2 15500932147224514629 : 11240984669917115529 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804698\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15500932147224514629\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18611639321 0 15538231972894617602 : 11240984669917350031 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804699\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15538231972894617602\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18612585799 0 14365556958326146909 : 10546172455159761837 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804700\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958326146909\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18622199443 0 10546443563680271200 : 10546443563876151610 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804701\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563680271200\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18628557990 0 14582097882787348062 : 11240984669917105073 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804702\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882787348062\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18628557990 1 14582097882787348062 : 11240984669917081563 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804703\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882787348062\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18638090871 0 15642949626124845093 : 11240984669917637602 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804704\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15642949626124845093\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18653475988 0 10546172455227741282 : 10546443563656464112 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804705\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455227741282\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18662997123 0 15469021882845503547 : 11240984669917147532 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804706\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15469021882845503547\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18668920258 0 14365556958318209518 : 10546443563722998819 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804707\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958318209518\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18669860863 0 15373712527854723145 : 10691192243961762604 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804708\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15373712527854723145\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18669860863 1 15373712527854723145 : 11240984669917378586 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804709\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15373712527854723145\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18670000078 0 10546172455231131828 : 10546443563665315338 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804710\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455231131828\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18671008383 0 15530657076043845657 : 11240984669917329620 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804711\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15530657076043845657\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18686669783 0 15387050183225303071 : 11240984669917031561 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804712\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15387050183225303071\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18705859599 0 14365556958327357892 : 10546443563802663245 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804713\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958327357892\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18712607162 0 15389602040883765306 : 11240984669917051581 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804714\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15389602040883765306\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18735221988 0 10546172455180033987 : 10546172455177477843 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804715\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180033987\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18735221988 1 10546172455180033987 : 11240984669917039662 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804716\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180033987\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18738969887 0 10546172455180031491 : 10546443563985538885 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804717\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180031491\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18738969887 1 10546172455180031491 : 11240984669917496016 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804718\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180031491\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18767308205 0 15536355514236543038 : None {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804719\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15536355514236543038\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18776732160 0 15663919242602893348 : 11240984669917066089 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804720\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15663919242602893348\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18800672828 0 10546172455180028773 : 10545724654292209692 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804721\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180028773\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18800672828 1 10546172455180028773 : 11240984669917734286 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804722\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455180028773\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18909923693 0 15569371044706787384 : 11240984669917388546 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804723\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15569371044706787384\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18916586623 0 10546443563649477212 : 10546443563662141246 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804724\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563649477212\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18921476222 0 10546172455214824358 : 11240984669917206023 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804725\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546172455214824358\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18946552228 0 15658100199811727418 : 11240984669917710571 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804726\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15658100199811727418\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18946622227 0 15416443753887514720 : 11240984669916990519 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804727\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15416443753887514720\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18949658501 0 15493327195048255542 : 11240984669917185615 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804728\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15493327195048255542\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18991915336 0 10546443563692844943 : 10546443563710832463 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804729\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563692844943\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18991915336 1 10546443563692844943 : 11240984669916965034 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804730\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"10546443563692844943\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"18996480252 0 15541040030096044122 : 10546443563722987634 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804731\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15541040030096044122\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"19337550070 0 15600842357300285460 : 11240984669917067571 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804732\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15600842357300285460\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"19931943913 0 15513686770288959549 : 11240984669917147031 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804733\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15513686770288959549\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"19933002300 0 15665448789458571344 : 11240984669917074590 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804734\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"15665448789458571344\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"19976952809 0 14582097882767848645 : 10546172455173793094 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804735\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882767848645\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"19993869392 0 14582097882822899824 : 11240984669916892038 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804736\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14582097882822899824\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n",
"19999211922 0 14365556958340975282 : 10546443563888005007 {\"code\":200,\"data\":{\"code\":\"\",\"error\":\"\",\"result\":[{\"code\":\"take_success\",\"couponIds\":[\"10804737\"],\"couponTemplateId\":\"137178\",\"couponTemplateName\":\"短信进阶包满300减60元优惠券\",\"customerId\":\"14365556958340975282\",\"failCount\":0,\"message\":\"领取成功\",\"successCount\":1}],\"sourceIp\":\"\",\"sourceStack\":\"\",\"success\":true},\"message\":\"SUCCESS\"}\n"
]
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"\n",
"cookies_str ='hive-adminSESSIONID=d91e99b8-fa2b-4c89-b17a-89a5abb2ce5b; sensorsdata2015jssdkcross={\"distinct_id\":\"0627252740652855\",\"first_id\":\"1753edeb75a603-0155d23aa05675-3d634f03-1327104-1753edeb75b347\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1753edeb75a603-0155d23aa05675-3d634f03-1327104-1753edeb75b347\"}; _yg_prod=EkX_f7K7eYt61spccZtpCE7FHQQyLJPTP_kPD6E4jSHBSVLYfszIPQQqjcJjPPEZL0J2pO07cfpwVG-hQiHtBfYzvRdjXVIjT2H6eZnX9EGazQgL3YqvVma_W4j_-vDH247_STHNHRGDiyfdHndACpNXGE_oaRhA'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"data = xlrd.open_workbook(r\"C:\\Users\\admin\\Desktop\\新建XLS 工作表 (3).xls\")\n",
"table = data.sheet_by_index(0) # 通过索引顺序获取\n",
"h = table.nrows\n",
"l = table.ncols\n",
"print(u\"表数据的行数为%s,列数为%s\"%(h,l))\n",
"for i in range(1,h):\n",
" idMember = table.cell(i, 0).value #按行读取数据\n",
" namecode = table.cell(i, 1).value #按行读取数据\n",
" url1 = 'https://manage.f6yc.com/hive-admin/coupon/getUserInfoByCellPhone?cellPhone={}&pageSize=10&currentPage=1'.format(idMember)\n",
" resget1 = requests.get(url1,cookies=cookie_dict)\n",
" resget1 = json.loads(resget1.text)\n",
"\n",
" for v in range(0,len(resget1['data'])):#len(resget1['data'])\n",
" customerId = resget1['data'][v]['passportId']\n",
" employeeName = resget1['data'][v]['employeeName']\n",
" applyOrg = resget1['data'][v]['groupId']\n",
" # print(customerId,':',employeeName,':',applyOrg)\n",
"\n",
" url = 'https://manage.f6yc.com/hive-admin/coupon/takeCoupon'\n",
" data_1 = {\n",
" \"couponParamVoList\": [\n",
" {\n",
" \"couponTemplateId\": namecode,\n",
" \"quantity\": 1,\n",
" \"couponValue\": 50\n",
" }\n",
" ],\n",
" \"customerList\": [\n",
" {\n",
" \"customerId\": customerId,\n",
" \"customerName\":employeeName,\n",
" \"cellPhone\": idMember\n",
" }\n",
" ],\n",
" \"applyOrg\": applyOrg\n",
" }\n",
" res = requests.post(url,headers=headers,cookies=cookie_dict, json=data_1)\n",
" time.sleep(0.05)\n",
" # print(idMember,namecode,v,customerId,':',employeeName,':',applyOrg,\"打印出响应信息:\",res.text)\n",
" print(idMember,v,customerId,':',applyOrg,res.text)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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(day=1).strftime('%Y%m%d'))\n",
"# 获取当月的最后一天\n",
"last_day_of_month = int(today.replace(day=calendar.monthrange(today.year, today.month)[1]).strftime('%Y%m%d'))\n",
"\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_sales_saas_to_renew_org_regular_income_d\" WHERE \"pt\" >= '{first_day_of_month}' AND \"pt\" <= '{last_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_details.to_excel(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\NGV明细.xlsx')\n",
"conn.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.12.4"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
+218
View File
@@ -0,0 +1,218 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"表数据的行数为91,列数为2\n",
"1 11794822649434107975\n",
"2 11794822610343194660\n",
"3 11794822584443367517\n",
"4 11794822565963259947\n",
"5 11794822565699022922\n",
"6 11794822565447364615\n",
"7 11794822565246034006\n",
"8 11794822565216677917\n",
"9 11794822564944048209\n",
"10 11794822564927270948\n",
"11 11794822564679807025\n",
"12 11794822564650442822\n",
"13 11794822564419760211\n",
"14 11794822564117770335\n",
"15 11794822564113571881\n",
"16 11794822563870302277\n",
"17 11794822563606065188\n",
"18 11794822563606061089\n",
"19 11794822563375378461\n",
"20 11794822563333435457\n",
"21 11794822563098554445\n",
"22 11794822543263686738\n",
"23 11794822491950571602\n",
"24 11794822490675507289\n",
"25 11794822490377707558\n",
"26 11794822474674237441\n",
"27 11794822458610049072\n",
"28 11794822451718807606\n",
"29 11794822444240367619\n",
"30 11794822444068397105\n",
"31 11794822411252162630\n",
"32 11794822378691784767\n",
"33 11794822369174909021\n",
"34 11794821134514417726\n",
"35 11794821129598693384\n",
"36 11794819320947695684\n",
"37 11794819311858642963\n",
"38 11794818932647424069\n",
"39 11794816766427815999\n",
"40 11794816720122699835\n",
"41 11794816716440104993\n",
"42 11794816707707559948\n",
"43 11794816704838656013\n",
"44 11794816701361582109\n",
"45 11794816693023305767\n",
"46 11794816689835634737\n",
"47 11794815182620876857\n",
"48 11794814950390657101\n",
"49 11794814939057643611\n",
"50 11794814935995801671\n",
"51 11794814852537540629\n",
"52 11794814821025734689\n",
"53 11794814815011102781\n",
"54 11794814762888491027\n",
"55 11794814746576842801\n",
"56 11794814316601958474\n",
"57 11794814300579717192\n",
"58 11794814285660581912\n",
"59 11794814284192571399\n",
"60 11794814267016900666\n",
"61 11794814260645752843\n",
"62 11794814259467153426\n",
"63 11794814242765434935\n",
"64 11794814238688571416\n",
"65 11794814217125650436\n",
"66 11794814188063322141\n",
"67 11794814181457289237\n",
"68 11794814177149743170\n",
"69 11794814149798682707\n",
"70 11794814147940610103\n",
"71 11794814146669735989\n",
"72 11794814137962356767\n",
"73 11794814134502056028\n",
"74 11794814133474455559\n",
"75 11794814133092769877\n",
"76 11794814131868037199\n",
"77 11794814119364816971\n",
"78 11794814104173047877\n",
"79 11794814080114516007\n",
"80 11794814077321109574\n",
"81 11794814076637442115\n",
"82 11794814070358564923\n",
"83 11794814070039801868\n",
"84 11794814064218107931\n",
"85 11794814059633729627\n",
"86 11794814059004583971\n",
"87 11794814051136069659\n",
"88 11794814041791164418\n",
"89 11794814038418944079\n",
"90 11794814032739852385\n",
"表数据的行数为91,列数为2\n"
]
}
],
"source": [
"# -*- coding:UTF-8 -*-\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"import datetime\n",
"import os\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import pandas as pd\n",
"#获取基础信息\n",
"name = '15888265981'\n",
"password = 'Ff123456'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"A = 1\n",
"for v in range(0,1000):\n",
" try:\n",
" http='https://m.f6car.cn/'\n",
" #driver = webdriver.Chrome(chrome_options=option_chrome)\n",
" driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
" driver.maximize_window()\n",
" driver.implicitly_wait(2)\n",
" driver.get(http)\n",
"\n",
" # 在输入框中输入账号和密码\n",
" username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
" enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
" username.clear()\n",
" username.send_keys(name)\n",
" driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
" enter.click()\n",
" time.sleep(2)#预设时间\n",
" driver.find_element_by_xpath(\"//*[text()='长葛市顺达汽车销售服务有限公司']\").click() #点击公司\n",
" time.sleep(5)#预设时间\n",
" file = xlwt.Workbook()\n",
" # table = file.add_sheet('sheet name', cell_overwrite_ok=True)\n",
" #打开excel文件\n",
" data = xlrd.open_workbook(r\"C:\\Users\\admin\\Desktop\\新建XLS 工作表 (6).xls\")\n",
" # print(data)\n",
" table = data.sheet_by_index(0) # 通过索引顺序获取\n",
" h = table.nrows\n",
" l = table.ncols\n",
" print(u\"表数据的行数为%s,列数为%s\"%(h,l))\n",
"\n",
" for i in range(A,A+500):\n",
" try:\n",
" idMember =table.cell(i, 0).value #按行读取数据\n",
" code_new =table.cell(i, 1).value #按行读取数据\n",
" # idMembervin =table.cell(i, 1).value #按行读取数据\n",
" https='https://yunxiu.f6car.cn/erp/view/index.html#/macan-view/cardManage/cardEdit/'+idMember #进入页面\n",
" # driver.get(\"https://yunxiu.f6car.cn/erp/view/index.html#/\")\n",
" driver.get(https)\n",
" time.sleep(0.1)\n",
" driver.get(https)\n",
" time.sleep(0.3)\n",
" try: \n",
" # driver.find_element_by_xpath('//*[@id=\"app\"]/div/div/div/div/div/div/div/div/div/form/div/div/div/div/div/div/input').send_keys(code_new) # 输入卡号\n",
" input_bos =driver.find_element_by_xpath('//*[@id=\"app\"]/div/div/div/div/div/div/div/div/div/form/div/div/div/div/div/div/input')\n",
" # input_bos.send_keys(Keys.CONTROL, 'a')\n",
" # input_bos.send_keys(Keys.BACK_SPACE)\n",
" time.sleep(0.1)\n",
" input_bos.clear()\n",
" time.sleep(0.1)\n",
" input_bos.send_keys(code_new)# 输入卡号\n",
" time.sleep(0.1)\n",
" driver.find_element_by_xpath('//*[@id=\"app\"]/div/div/div/div/div/div/button[1]/span').click() #点击保存\n",
" time.sleep(0.1)\n",
" print(i, idMember)\n",
" A = A + 1\n",
" except:\n",
" driver.find_element_by_xpath('//*[@id=\"app\"]/div[3]/div/div[1]/div/span').click() # 新手引导\n",
" time.sleep(0.1)\n",
" except:\n",
" pass\n",
" except:\n",
" driver.close()\n",
" A = A + 1\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,83 @@
# -*- coding:UTF-8 -*-
#修改套餐卡-永久有效-按表格中的有效期进行处理
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd
#获取基础信息
name = '16621142776'
password = 'f6wuyanzu'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
# 在输入框中输入账号和密码
username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[1]/div/div[1]/input')))
enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[3]/div/button')))
username.clear()
username.send_keys(name)
driver.find_element_by_xpath(r'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
enter.click()
time.sleep(15)#预设时间
file = xlwt.Workbook()
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(1,h):
try:
idMember =table.cell(i, 0).value #id
#idMember1 =table.cell(i, 1).value #日期
'''
httpas='https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-promotion/marketing/vipList'
driver.get(httpas)
time.sleep(0.5)
try:
driver.find_element_by_xpath('/html/body/div/div/div[3]/button[1]').click()
time.sleep(0.5)
except:
a = 1
'''
https='https://yunxiu.f6car.cn/kzf6/macan/index.do?page=/view/index.html%23/macan-view/cardManage/cardEdit/'+idMember #进入页面
driver.get(https)
time.sleep(0.3)
#传值转换
driver.switch_to.frame('weixin-page-iframe')
driver.find_element_by_xpath(
'//*[@id="app"]/div[2]/div/div/div[2]/div[1]/div/div/div[1]/div[6]/form/div[2]/div[1]/div/div/div').click() #点击可以门店
time.sleep(0.3)
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div/div/div[2]/div[1]/div/div/div[2]/div/div[2]/div/div[2]/table/thead/tr/th[1]/div/label/span/span').click()
time.sleep(0.3)
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div/div/div[2]/div[1]/div/div/div[2]/div/div[3]/span/button[1]/span').click()
time.sleep(0.3)
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div/div/div[2]/div[2]/div/button[1]/span').click()
time.sleep(0.2)
endtime = datetime.datetime.now()
print(i,'@', idMember)
except:
print('失败')
continue
@@ -0,0 +1,289 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# -*- coding:UTF-8 -*-\n",
"# 功能:F6修改项目信息-工时单价\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"import datetime\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"import datetime\n",
"import os\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import pandas as pd\n",
"\n",
"# 获取会员卡基础信息\n",
"name = '18906245518'\n",
"password = 'Jb123456'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"\n",
"http = 'https://m.f6car.cn/'\n",
"# 进入链接获取json\n",
"# driver = webdriver.Chrome(chrome_options=option_chrome)\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"driver.maximize_window()\n",
"driver.implicitly_wait(2)\n",
"driver.get(http)\n",
"driver.find_element_by_xpath('//*[@id=\"pane-username\"]/form/div[1]/div/div/input').send_keys(name)\n",
"driver.find_element_by_xpath('//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"driver.find_element_by_xpath('//*[@id=\"pane-username\"]/form/div[3]/div/button/span').click()\n",
"time.sleep(5) # 预设时间\n",
"\n",
"# 新建一个excel文件\n",
"file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧\n",
"# 新建sheet\n",
"table = file.add_sheet('sheet name', cell_overwrite_ok=True)\n",
"if 1 == 1:\n",
" he = 0\n",
" hen = 0\n",
" heng = 0\n",
" hang = 0\n",
" len = 0\n",
"# 获取所有内容\n",
"# 打开excel文件\n",
"data = xlrd.open_workbook(r'C:\\Users\\admin\\Desktop\\新建XLS 工作表 (3).xls') \n",
"print(data)\n",
"table = data.sheet_by_index(0) # 通过索引顺序获取\n",
"h = table.nrows\n",
"l = table.ncols\n",
"print(u\"表数据的行数为%s,列数为%s\" % (h, l))\n",
"\n",
"# 获取卡项目\n",
"for i in range(1, h):\n",
" starttime = datetime.datetime.now()\n",
" idMember = table.cell(i, 0).value # 按行读取数据\n",
" https = 'https://yunxiu.f6car.cn/erp/view/index.html#/index/frame?pageType=vue&toUrl=%2F%2Fids-goods.f6car.cn%2Ff6-ids-goods%2Fview%2FserviceInfo.html&_ts=1706520727551&route=%2FeditServiceInfo%2F3%2F'+idMember\n",
" # http = 'https://yunxiu-trial.f6car.cn/kzf6/payment/toGathering.do?idSourceBill=' + idMember + '&billType=TKD'\n",
" # 进入链接获取json\n",
" driver.get(https)\n",
" time.sleep(0.2)\n",
" driver.switch_to.frame('erp-qiankun-iframe')\n",
" driver.find_element_by_xpath('/html/body/div/div[1]/div[3]/span/button[1]/span').click()\n",
" # enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'/html/body/div/div[1]/div[3]/span/button[1]/span')))\n",
" # enter.clear()\n",
" time.sleep(0.2)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[1]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[2]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[3]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[4]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[5]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" time.sleep(0.2)\n",
" driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/div/button[1]/span').click()\n",
" time.sleep(0.2)\n",
" driver.switch_to.default_content()\n",
" # 点击首页\n",
" driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[1]/div[1]/div/div[2]/div/div[1]/div').click()\n",
" time.sleep(0.2)\n",
" endtime = datetime.datetime.now()\n",
" implement = (endtime - starttime).seconds\n",
" print(i, implement)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 运行"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<xlrd.book.Book object at 0x000001F1477FFD90>\n",
"表数据的行数为3,列数为1\n",
"1 4\n",
"2 3\n"
]
}
],
"source": [
"# -*- coding:UTF-8 -*-\n",
"# 功能:F6修改项目信息-工时单价\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"import datetime\n",
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"import datetime\n",
"import os\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import pandas as pd\n",
"\n",
"# 获取会员卡基础信息\n",
"name = '18906245518'\n",
"password = 'Jb123456'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"\n",
"http = 'https://m.f6car.cn/'\n",
"# 进入链接获取json\n",
"# driver = webdriver.Chrome(chrome_options=option_chrome)\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"driver.maximize_window()\n",
"driver.implicitly_wait(2)\n",
"driver.get(http)\n",
"driver.find_element_by_xpath('//*[@id=\"pane-username\"]/form/div[1]/div/div/input').send_keys(name)\n",
"driver.find_element_by_xpath('//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"driver.find_element_by_xpath('//*[@id=\"pane-username\"]/form/div[3]/div/button/span').click()\n",
"time.sleep(10) # 预设时间\n",
"\n",
"# 新建一个excel文件\n",
"file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧\n",
"# 新建sheet\n",
"table = file.add_sheet('sheet name', cell_overwrite_ok=True)\n",
"if 1 == 1:\n",
" he = 0\n",
" hen = 0\n",
" heng = 0\n",
" hang = 0\n",
" len = 0\n",
"# 获取所有内容\n",
"# 打开excel文件\n",
"data = xlrd.open_workbook(r'C:\\Users\\admin\\Desktop\\新建XLS 工作表 (3).xls') \n",
"print(data)\n",
"table = data.sheet_by_index(0) # 通过索引顺序获取\n",
"h = table.nrows\n",
"l = table.ncols\n",
"print(u\"表数据的行数为%s,列数为%s\" % (h, l))\n",
"\n",
"# 获取卡项目\n",
"for i in range(1, h):\n",
" starttime = datetime.datetime.now()\n",
" idMember = table.cell(i, 0).value # 按行读取数据\n",
" https = 'https://yunxiu.f6car.cn/erp/view/index.html#/index/frame?pageType=vue&toUrl=%2F%2Fids-goods.f6car.cn%2Ff6-ids-goods%2Fview%2FserviceInfo.html&_ts=1706520727551&route=%2FeditServiceInfo%2F3%2F'+idMember\n",
" # http = 'https://yunxiu-trial.f6car.cn/kzf6/payment/toGathering.do?idSourceBill=' + idMember + '&billType=TKD'\n",
" # 进入链接获取json\n",
" driver.get(https)\n",
" time.sleep(0.2)\n",
" driver.switch_to.frame('erp-qiankun-iframe')\n",
" driver.find_element_by_xpath('/html/body/div/div[1]/div[3]/span/button[1]/span').click()\n",
" # enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'/html/body/div/div[1]/div[3]/span/button[1]/span')))\n",
" # enter.clear()\n",
" time.sleep(0.2)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[1]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[2]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[3]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[4]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" # time.sleep(0.5)\n",
" input_bos = driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/form/div[3]/div/div/div/div[3]/table/tbody/tr[5]/td[2]/div/div/input')\n",
" input_bos.send_keys(Keys.CONTROL, 'a')\n",
" input_bos.send_keys(Keys.BACK_SPACE)\n",
" input_bos.send_keys(38)\n",
" time.sleep(0.2)\n",
" driver.find_element_by_xpath('//*[@id=\"priceDialog\"]/div/button[1]/span').click()\n",
" time.sleep(0.2)\n",
" driver.switch_to.default_content()\n",
" # 点击首页\n",
" driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[1]/div[1]/div/div[2]/div/div[1]/div').click()\n",
" time.sleep(0.2)\n",
" endtime = datetime.datetime.now()\n",
" implement = (endtime - starttime).seconds\n",
" print(i, implement)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,141 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 获取储值卡现有属性信息,组合生成修改需要的载荷内容"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n",
"{'code': 200, 'data': None, 'errInfo': None, 'ext': None, 'info': None, 'message': '', 'msg': 'success', 'traceId': ''}\n"
]
}
],
"source": [
"# # 获取储值卡现有属性信息,组合生成修改需要的载荷内容\n",
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"import datetime\n",
"\n",
"cookies_str = 'marketingSESSIONID=0082626e-060f-46e6-acc3-f220b7439091; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; prodOrg=11240984669918116047; unp=15852100371620065343; un=15852100371620065343; _up=-NillNN-qyBEJ--t3vnSknvoOF53yPOMsM0G1Ho5WOddUPTCo5rQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFvYWrYkh0wAO_PJRv-ZNHu3M-GTc1p2zFHeorepUj-kakFDGPRdsrEj9zBy995e3SxM.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215852100371620065343%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1724314408,1724655996,1724923121,1725242343; HMACCOUNT=B4D963E4DD28B6C3; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1725242520'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
"}\n",
"\n",
"try:\n",
" df = pd.read_excel(r'C:\\Users\\admin\\Desktop\\会员卡信息 (鸿宇).xlsx',sheet_name='会员卡详情',dtype='string')\n",
" for da in df.values:\n",
" # 获取储值卡属性信息\n",
" url_version = 'https://yunxiu.f6car.cn/marketing/card/detail/'+da[0]\n",
" res_version = requests.get(url_version,cookies=cookie_dict,headers=headers)\n",
" res_version = res_version.json()\n",
" # 获取储值卡属性信息\n",
" url = 'https://yunxiu.f6car.cn/macan/card/entity/czk/queryWithBenefit?pkId='+da[0]\n",
" res = requests.get(url,cookies=cookie_dict,headers=headers)\n",
" res = res.json()\n",
" # 组合载荷内容\n",
" # 时间戳转格式\n",
" timestamp = res['info']['entityDTO']['endDate'] / 1000\n",
" dt_object = datetime.datetime.fromtimestamp(timestamp)\n",
" endDate = dt_object.strftime(\"%Y-%m-%d %H:%M:%S\")\n",
" # 提取carInfoList\n",
" carInfoList = []\n",
" for carInfo in res['info']['carInfoList']:\n",
" List = {\n",
" \"idCar\": carInfo['idCar'],\n",
" \"idCustomer\": carInfo['idCustomer']\n",
" }\n",
" carInfoList.append(List)\n",
" # 提取cardEntityBusinessList\n",
" cardEntityBusinessList = []\n",
" for cardEntityBusiness in res['info']['valueCardBusinessDiscountInfoList']:\n",
" List = {\n",
" \"labelName\": cardEntityBusiness['labelName'],\n",
" \"businessType\": cardEntityBusiness['businessType'],\n",
" \"labelId\": cardEntityBusiness['labelId']\n",
" }\n",
" cardEntityBusinessList.append(List)\n",
" # 提取cardEntityBusinessDiscountList\n",
" cardEntityBusinessDiscountList = []\n",
" for cardEntityBusinessDiscount in res['info']['valueCardBusinessDiscountInfoList']:\n",
" List = {\n",
" \"labelName\": cardEntityBusinessDiscount['labelName'],\n",
" \"businessType\": cardEntityBusinessDiscount['businessType'],\n",
" \"discount\": cardEntityBusinessDiscount['discount'],\n",
" \"labelId\": cardEntityBusinessDiscount['labelId']\n",
" }\n",
" cardEntityBusinessDiscountList.append(List)\n",
" data = {\n",
" \"id\": res['info']['entityDTO']['pkId'],\n",
" \"carList\": carInfoList,\n",
" \"cardNo\": res['info']['entityDTO']['memberCardNo'],\n",
" \"memo\": res['info']['entityDTO']['memo'],\n",
" \"useTerm\": res['info']['entityDTO']['useTerm'],\n",
" \"idCustomer\": res['info']['entityDTO']['idCustomer'],\n",
" \"version\": res_version['data']['version'],\n",
" \"useType\": res['info']['entityDTO']['useType'],\n",
" \"consumeLimitFlag\": res['info']['entityDTO']['consumeLimitFlag'],\n",
" \"consumeLimitAmount\": int(float(res['info']['entityDTO']['consumeLimitAmount'])),\n",
" \"permanent\": res['info']['entityDTO']['permanent'],\n",
" \"endDate\": endDate,\n",
" \"cardEntityBusinessList\": cardEntityBusinessList,\n",
" \"cardEntityBusinessDiscountList\": cardEntityBusinessDiscountList,\n",
" \"businessType\": 1,\n",
" \"cardEntitySkuDiscountList\": res['info']['valueCardEntitySkuDiscountInfoList']\n",
" }\n",
" url = 'https://yunxiu.f6car.cn/marketing/card/modifyCzkCardEntity4Gray'\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers,json=data)\n",
" res = res.json()\n",
" print(res,da[0])\n",
"except:\n",
" pass"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,214 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\杨国栋\\AppData\\Local\\Temp/ipykernel_2228/4239557569.py:23: DeprecationWarning: executable_path has been deprecated, please pass in a Service object\n",
" driver = webdriver.Chrome(executable_path=r'C:\\chromedriver\\chromedriver_107\\chromedriver.exe')\n"
]
}
],
"source": [
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"import datetime\n",
"import pandas as pd\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.common.action_chains import ActionChains\n",
"from selenium.webdriver.common.by import By\n",
"\n",
"#获取会员卡基础信息\n",
"name = '15882131247'\n",
"password = 'Ff123456'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"\n",
"http='https://m.f6car.cn/'\n",
"\n",
"driver = webdriver.Chrome(executable_path=r'C:\\chromedriver\\chromedriver_113\\chromedriver.exe')\n",
"driver.maximize_window()\n",
"driver.implicitly_wait(5)\n",
"driver.get(http)\n",
"driver.find_element(By.XPATH,'//*[@id=\"pane-username\"]/form/div[1]/div/div/input').send_keys(name)\n",
"driver.find_element(By.XPATH,'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"driver.find_element(By.XPATH,'//*[@id=\"pane-username\"]/form/div[3]/div/button/span').click()\n",
"\n",
"time.sleep(4)#预设时间\n",
"\n",
"df = pd.read_excel(r'C:\\Users\\admin\\Downloads\\会员卡信息 (23).xlsx',sheet_name='会员卡详情',dtype='string') \n",
"for item in df.index:\n",
" try:\n",
" cardid= df.loc[item,'卡实体id']\n",
" https='https://yunxiu.f6car.cn/kzf6/consumeBill/index.do?page=view/index.html%23/marketing/cardEdit/'+cardid\n",
" driver.get(https)\n",
" time.sleep(0.5)\n",
"\n",
" #点击全选,多车牌\n",
" \n",
" driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div/div/div/div/div/div/label/span/span').click()\n",
" driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div/div/div/div/div/div/label/span/span').click()\n",
" time.sleep(0.5)\n",
" driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div/div/button[1]/span').click()\n",
" time.sleep(0.5)\n",
" # #点击勾选,单车牌\n",
" # driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div[1]/div/div/div/div/div/div/div/label/span/span').click()\n",
" # time.sleep(0.5)\n",
" # driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div/div/button[1]/span').click()\n",
" # time.sleep(0.5)\n",
" except:\n",
" pass"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"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"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"成功:11961263688167485444\n",
"成功:11961263687672553540\n",
"成功:11961263687613837405\n",
"成功:11961263687047606309\n",
"成功:11961263686603010082\n",
"成功:11961263686032580698\n",
"成功:11961263685915144279\n"
]
}
],
"source": [
"from selenium import webdriver\n",
"from selenium.webdriver.support.ui import Select\n",
"from selenium.webdriver import ActionChains\n",
"import time\n",
"import xlrd\n",
"import xlwt\n",
"import re\n",
"import datetime\n",
"import pandas as pd\n",
"from xlutils.copy import copy\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.common.action_chains import ActionChains\n",
"from selenium.webdriver.common.by import By\n",
"\n",
"#获取会员卡基础信息\n",
"name = '15888265981'\n",
"password = 'Ff123456'\n",
"option_chrome = webdriver.ChromeOptions()\n",
"option_chrome.add_argument('--headless')\n",
"\n",
"http='https://m.f6car.com/'\n",
"\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"\n",
"driver.maximize_window()\n",
"\n",
"driver.implicitly_wait(5)\n",
"\n",
"driver.get(http)\n",
"driver.find_element(By.XPATH,'//*[@id=\"pane-username\"]/form/div[1]/div/div/input').send_keys(name)\n",
"driver.find_element(By.XPATH,'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"driver.find_element(By.XPATH,'//*[@id=\"pane-username\"]/form/div[3]/div/button/span').click()\n",
"#新手引导关闭\n",
"driver.find_element(By.XPATH,'/html/body/div/div/div[1]/button').click()\n",
"driver.find_element(By.XPATH,'//*[@id=\"subMain\"]/div/div[3]/div/div/div/span[2]').click()\n",
"\n",
"df = pd.read_excel(r'C:\\Users\\admin\\Downloads\\会员卡信息 (23).xlsx',sheet_name='会员卡详情',dtype='string') \n",
"\n",
"for item in range(0,693):\n",
" try:\n",
" time.sleep(2)\n",
" # 点击首页\n",
" driver.find_element(By.XPATH,'//*[@id=\"main\"]/div/div/div/div/div/div/div[1]/div/div/span').click()\n",
" time.sleep(2)\n",
" cardid= df.loc[item,'卡实体id']\n",
" https='https://yunxiu.f6car.com/erp/view/index.html#/macan-view/cardManage/cardEdit/'+cardid\n",
" driver.get(https)\n",
" time.sleep(2)\n",
"\n",
" #点击不限制车牌使用\n",
" driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div/div/div/div/div/div/div[1]/label/span/span').click()\n",
" time.sleep(1)\n",
" #点击保存\n",
" driver.find_element(By.XPATH,'//*[@id=\"app\"]/div/div/div/div/div/div/button[1]/span').click()\n",
" time.sleep(2)\n",
" #点击确定\n",
" driver.find_element(By.XPATH,'/html/body/div[5]/div/div/button[1]/span').click()\n",
"\n",
" print(\"成功:\"+str(cardid))\n",
" except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from selenium import webdriver\n",
"from selenium.webdriver.chrome.service import Service\n",
"\n",
"# create a new ChromeDriver service\n",
"service = Service(r'C:\\chromedriver\\chromedriver_113\\chromedriver.exe')\n",
"\n",
"# create a new ChromeDriver instance using the service\n",
"driver = webdriver.Chrome(service=service)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.12.4"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,82 @@
# -*- coding:UTF-8 -*-
# 遍历车辆信息中的数据判断,如果能查询到就点击车辆 完成车牌与卡数据绑定关系
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd
#获取基础信息
name = '15827030879'
password = 'jhb@123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\Users\admin\Desktop\Python脚本\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
# 在输入框中输入账号和密码
username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[1]/div/div[1]/input')))
enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[3]/div/button')))
username.clear()
username.send_keys(name)
driver.find_element_by_xpath(r'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
enter.click()
time.sleep(5)#预设时间
file = xlwt.Workbook()
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(1,h):
try:
idMember =table.cell(i, 0).value #id
idMember1 =table.cell(i, 1).value #名称
https1='https://yunxiu.f6car.cn/erp/view/index.html#/'
https='https://yunxiu.f6car.cn/erp/view/index.html#/macan-view/cardManage/cardEdit/'+idMember #进入页面
driver.get(https1)
time.sleep(0.5)
driver.get(https)
time.sleep(0.5)
#传值转换
#driver.switch_to.frame('__qiankun_microapp_wrapper_for_macan_1647410136310_639__')
for a in range(1,20):
try:
input1 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div[1]/div/div/div[1]/div[4]/div[2]/div[1]/div/label[{}]/span[2]'.format(a))
input1 = input1.text
input1 = input1[:7]
if input1 == idMember1:
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div[1]/div/div/div[1]/div[4]/div[2]/div[1]/div/label[{}]/span[1]'.format(a)).click()
aimnuw = input1
time.sleep(0.2)
break
except:
print(input1)
continue
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div[2]/div/button[1]/span').click()
endtime = datetime.datetime.now()
print(i,'@', idMember,'@',endtime)
time.sleep(0.2)
except:
print('失败')
continue
+84
View File
@@ -0,0 +1,84 @@
# -*- coding:UTF-8 -*-
# 功能:F6系统页面会员卡退卡操作
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
# 获取会员卡基础信息
name = '15651006300'
password = 'Wamh523364'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http = 'https://m.f6car.cn/'
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(10) # 预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
# 获取所有内容
# 打开excel文件
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s" % (h, l))
# 获取卡项目
for i in range(1, h):
try:
starttime = datetime.datetime.now()
https = 'https://yunxiu.f6car.cn/kzf6/contactBook/contactBookList.do?page=view/index.html%23/'
# http = 'https://yunxiu-trial.f6car.cn/kzf6/payment/toGathering.do?idSourceBill=' + idMember + '&billType=TKD'
# 进入链接获取json
driver.get(https)
# 传值转换
driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.2)
idMember = table.cell(i, 0).value # 按行读取数据
input_box = driver.find_element_by_xpath('//*[@id="pane-1"]/div/div[2]/div[1]/div[1]/div/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
time.sleep(0.3)
driver.find_element_by_xpath(
'//*[@id="pane-1"]/div/div[2]/div[1]/div[1]/div/input').send_keys(idMember)
# driver.find_element_by_xpath(
# '//*[@id="app"]/div[2]/div[2]/div/section[2]/div[2]/div[2]/div[3]/div/div/input').send_keys(onename)
# 通过父类进行定位
time.sleep(0.3)
driver.find_element_by_xpath(
'//*[@id="pane-1"]/div/div[2]/div[1]/div[1]/div/div/button/i').click() # 点击查询
time.sleep(0.2)
driver.find_element_by_xpath(
'//*[@id="pane-1"]/div/div[2]/div[3]/div/div[1]/div[3]/table/tbody/tr/td[8]/div/button[3]/span').click() # 离职
time.sleep(0.2)
driver.find_element_by_xpath('/html/body/div[4]/div/div[3]/button[1]/span').click() # 离职
time.sleep(0.2)
# 进入结算
endtime = datetime.datetime.now()
implement = (endtime - starttime).seconds
print(i, idMember,implement)
except:
print('失败')
continue
+168
View File
@@ -0,0 +1,168 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas64__v0.3.21-gcc_10_3_0.dll\n",
" warnings.warn(\"loaded more than 1 DLL from .libs:\"\n"
]
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"import xlwt\n",
"import xlrd\n",
"\n",
"\n",
"df1 = pd.read_excel(r'C:\\Users\\admin\\Desktop\\库存配件查询.xls',sheet_name='导出计数_产地',dtype='string') \n",
"for item in df1.index:\n",
" new_brand_name= df1.loc[item,'品牌新建']\n",
"\n",
" data = {\n",
" \"partBrandName\": new_brand_name \n",
" }\n",
" cookies_str = 'f6-ids-goodsSESSIONID=33b3add2-c869-46d3-b4ec-163bfc628018; sajssdk_2015_cross_new_user=1; erpLanguage=zh-CN; prodOrg=11240984669917991522; unp=15815448158550388788; _up=-NillNN-qyBEJ--t3vnSknvoOF53zPSJtMUE1nM6X-deXvnGr5HQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFfURqI8m0gsM-vNRv-ZNHu3M-GTc1pm0EXOgr-hdjO4ak17LORtnrEj9nxiw_Mi4PBA.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215815448158550388788%22%2C%22first_id%22%3A%2218fa83be71061f-03f4b144c21fe2c-26001c51-1327104-18fa83be711283%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218fa83be71061f-03f4b144c21fe2c-26001c51-1327104-18fa83be711283%22%7D; tmall=false'\n",
" cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
" cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
" url ='https://ids-goods.f6car.com/f6-ids-goods/brand/checkDuplicateBrand?brandName='+new_brand_name\n",
"\n",
" headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',\n",
" \"Content-Type\": \"application/json;charset=UTF-8\",\n",
" 'origin': 'https://ids-goods.f6car.com'\n",
" }\n",
"\n",
" if requests.get(url = url,cookies=cookie_dict,headers=headers).json().get('data'):\n",
"\n",
" res = requests.post(f'https://ids-goods.f6car.com/f6-ids-goods/brand/addTmCustomPartBrand', \n",
" headers=headers,cookies=cookie_dict, json=data)\n",
" print(f'品牌:{new_brand_name} 新建成功')\n",
" else:\n",
" print(f'品牌:{new_brand_name} 重复,无法新建')\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## python 中的格式化字符串"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m运行具有“F6processing (Python 3.9.4)”的单元格需要ipykernel包。\n",
"\u001b[1;31m运行以下命令,将 \"ipykernel\" 安装到 Python 环境中。\n",
"\u001b[1;31m命令: \"conda install -n F6processing ipykernel --update-deps --force-reinstall\""
]
}
],
"source": [
"a = 15\n",
"b = 3.14\n",
"# 1. %\n",
"print('abc%d,%.2f'%(a,b))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'abc12ddd'"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = 12\n",
"b = 3.14\n",
"\n",
"\"abc\"+str(a)+'ddd'"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'ghjk12,3.14'"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# f字符串\n",
"\n",
"f'ghjk{a},{b:.2f}'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "F6",
"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,
"vscode": {
"interpreter": {
"hash": "59310123ccd3619229d524789fb6029e22b3ae7206c94adf033078aa9a774872"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
+246
View File
@@ -0,0 +1,246 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"\n",
"\"\"\" 处理流程开始 \"\"\"\n",
"cookies_str = 'memberSESSIONID=7b034fdc-7edd-45a5-a615-ad0033608b6e; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917188035; unp=15632739166222045268; un=15632739166222045268; _up=-NillNN-qyBEJ--t3vnSknvoOF55zvOKs8QE1X09WOVdUvTDoZHQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrE_QSqoIn0wAO-_RRv-ZNHu3M-GTc2JuzEnShr-tTi-kYkFLGPBVnrEj9nRXn_Km3UDc.; tmall=false; sensorsdata2015jssdkcross={\"distinct_id\":\"15632739166222045268\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"# 获取id\n",
"api = f'https://yunxiu.f6car.cn/member/feedback/list?searchTab=2&billIdOwnOrgList=&pageSize=100&pageNo=1'\n",
"\n",
"res = requests.get(api, headers=headers,cookies=cookie_dict)\n",
"\n",
"res_new = res.json()\n",
"\n",
"for i in range(0,100):\n",
" a_new = res_new['data']['data'][i]['id']\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'10474413'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res_new['data']['data'][0]['id']"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"167764198600\n"
]
}
],
"source": [
"import time\n",
"mkt = round(time.time())\n",
"print(str(mkt)+\"00\")"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1677642600000\n"
]
}
],
"source": [
"mkt = str(round(time.time()))[0:8]+\"00000\"\n",
"print(str(mkt))"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"# -- coding: utf-8 --\n",
"api = 'https://yunxiu.f6car.cn/member/feedback/completeAll'\n",
"\n",
"a_new = res_new['data']['data'][0]['id']\n",
"# 时间转化\n",
"mkt = str(round(time.time()))[0:8]+\"00000\"\n",
"\n",
"data= {\n",
" \"feedbackId\": a_new,\n",
" \"feedbackBaseParam\": {\n",
" \"id\": a_new,\n",
" \"scheduleDate\": mkt,\n",
" \"isEffective\": 1\n",
" },\n",
" \"feedbackProcessLogParam\": 'null',\n",
" \"feedbackQuestionResultParams\": [\n",
" {\n",
" \"feedbackId\": a_new,\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"服务态度\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": a_new,\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"施工质量\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": a_new,\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"店面环境\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": a_new,\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"对技师服务水平\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": a_new,\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"如果您的亲友也需要 {业务分类名称} 项目,您是否愿意推荐 {门店简称} \",\n",
" \"questionType\": 0\n",
" }\n",
" ]\n",
"}\n",
"res = requests.post(api, headers=headers,cookies=cookie_dict,json=data)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"''"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.text"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"{\n",
" \"feedbackId\": \"10474413\",\n",
" \"feedbackBaseParam\": {\n",
" \"id\": \"10474413\",\n",
" \"scheduleDate\": 1639958400000,\n",
" \"isEffective\": 1\n",
" },\n",
" \"feedbackProcessLogParam\": null,\n",
" \"feedbackQuestionResultParams\": [\n",
" {\n",
" \"feedbackId\": \"10474413\",\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"服务态度\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": \"10474413\",\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"施工质量\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": \"10474413\",\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"店面环境\",\n",
" \"questionType\": 0\n",
" },\n",
" {\n",
" \"feedbackId\": \"10474413\",\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"对技师服务水平\",\n",
" \"questionType\": 1\n",
" },\n",
" {\n",
" \"feedbackId\": \"10474413\",\n",
" \"questionId\": 101942,\n",
" \"questionContent\": \"如果您的亲友也需要 {业务分类名称} 项目,您是否愿意推荐 {门店简称} \",\n",
" \"questionType\": 2\n",
" }\n",
" ]\n",
"}"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,98 @@
# -*- coding:UTF-8 -*-
#修改套餐卡-永久有效-按表格中的有效期进行处理
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd
#获取基础信息
name = '15888265981'
password = 'F6123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
# 在输入框中输入账号和密码
username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[1]/div/div[1]/input')))
enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[3]/div/button')))
username.clear()
username.send_keys(name)
driver.find_element_by_xpath(r'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
enter.click()
time.sleep(15)#预设时间
file = xlwt.Workbook()
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(1,h):
try:
idMember =table.cell(i, 0).value #id
idMember1 =table.cell(i, 1).value #日期
httpas='https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-promotion/marketing/vipList'
driver.get(httpas)
time.sleep(0.5)
try:
driver.find_element_by_xpath('/html/body/div/div/div[3]/button[1]').click()
time.sleep(0.5)
except:
a = 1
https='https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-promotion/marketing/cardEdit/'+idMember #进入页面
driver.get(https)
time.sleep(0.5)
#传值转换
#driver.switch_to.frame('weixin-page-iframe')
driver.find_element_by_xpath(
'//*[@id="app"]/div[2]/div[2]/div/div[2]/div/form/div[1]/div/div/div/div/div[2]/label/span[1]/span').click() #点击永久
time.sleep(0.5)
#荣大
#time.sleep(0.1)
# 先通过日期输入框的id="train_date"来定位输入框,再通过removeAttribute方法移除"readonly"属性
#js = 'document.getElementById("train_date").removeAttribute("readonly");'
#ele = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[6]/form/div[1]/div[4]/div/div/div/div[1]/div/input')
#driver.execute_script("arguments[0].removeAttribute('readonly');", ele)
# js = """
# var date = document.getElementById('train_date').removeAttribute('readonly');
# """
# driver.execute_script(js)
#ele.click() # 先点击,清空后赋值。
#ele.clear()
#time.sleep(0.2)
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[6]/form/div[1]/div[4]/div/div/div/div[1]/div/input').send_keys(idMember1)
time.sleep(0.5)
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[6]/form/div[1]/div[3]/div/div/div/div[1]/div/input').click()
time.sleep(0.5)
driver.find_element_by_xpath('/html/body/div/div/div[3]/button[1]').click()
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="app"]/div[2]/div[2]/div/div[3]/button[1]').click() #点击保存
time.sleep(0.5)
endtime = datetime.datetime.now()
print(i,'@', idMember)
except:
print('失败')
continue
@@ -0,0 +1,89 @@
# -*- coding:UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
#获取会员卡基础信息
name = '15888265981'
password = 'F6123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#进入链接获取json
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(15)#预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
if 1==1:
he = 0
hen = 0
heng = 0
hang = 0
len = 0
#获取所有内容
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
time.sleep(0.2)
for i in range(0,h):
#try:
https='https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-member/customer/list' #进入客户信息页面
driver.get(https)
idMember =table.cell(i, 0).value #按行读取数据
idMembername =table.cell(i, 1).value #按行读取数据
#传值转换
#driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.2)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/input').send_keys(idMember) #输入手机号
time.sleep(0.2)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/div/button').click() #点击搜索
time.sleep(0.5)
input1 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[2]/div/span').text
input2 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[3]/div').text
time.sleep(0.2)
if input2 == idMember :
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[8]/div/span').click() #点击修改
time.sleep(0.5)
input_box = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/form/div[1]/div/div/div[1]/form/div[2]/div[2]/div[1]/div/div/div/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
time.sleep(0.2)
driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/form/div[1]/div/div/div[1]/form/div[2]/div[2]/div[1]/div/div/div/input').click() #点击客户名称
time.sleep(0.2)
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[8]/div/span').click() #点击客户来源
time.sleep(0.2)
driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[1]/ul/li[1]').click() #点击 主动获取
time.sleep(0.2)
driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/form/div[2]/button[1]').click() #点击保存
endtime = datetime.datetime.now()
print(i,'@', idMember,'@',input1,'@',input2 )
#except:
# print('失败')
# continue
@@ -0,0 +1,76 @@
# -*- coding:UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
#获取会员卡基础信息
name = '15888265981'
password = 'F6123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#进入链接获取json
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(15)#预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
if 1==1:
he = 0
hen = 0
heng = 0
hang = 0
len = 0
#获取所有内容
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
https='https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-member/customer/list' #进入客户信息页面
driver.get(https)
time.sleep(0.2)
for i in range(0,h):
try:
idMember =table.cell(i, 0).value #按行读取数据
#传值转换
#driver.switch_to.frame('weixin-page-iframe')
#time.sleep(0.1)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/input').send_keys(idMember) #输入手机号
#time.sleep(0.1)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/div/button').click() #点击搜索
time.sleep(0.2)
input1 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[2]/div/span').text
input2 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[3]/div').text
time.sleep(0.2)
input_box = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
endtime = datetime.datetime.now()
print(i,'@', idMember,'@',input1,'@',input2 )
except:
print('失败')
continue
@@ -0,0 +1,91 @@
# -*- coding:UTF-8 -*-
# 功能:F6系统页面会员卡退卡操作
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
# 获取会员卡基础信息
name = '15888265981'
password = 'F6123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http = 'https://m.f6car.cn/'
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(15) # 预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
if 1 == 1:
he = 0
hen = 0
heng = 0
hang = 0
len = 0
# 获取所有内容
# 打开excel文件
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s" % (h, l))
# 获取卡项目
for i in range(0, h):
try:
starttime = datetime.datetime.now()
idMember = table.cell(i, 0).value # 按行读取数据
receiveAmount = table.cell(i, 1).value # 按行读取数据
https = 'https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-goods/info/list/local'
# http = 'https://yunxiu-trial.f6car.cn/kzf6/payment/toGathering.do?idSourceBill=' + idMember + '&billType=TKD'
# 进入链接获取json
driver.get(https)
# 传值转换
#driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.2)
# driver.find_element_by_xpath(
# '//*[@id="app"]/div[2]/div[2]/div/section[2]/div[2]/div[2]/div[3]/div/div/input').send_keys(onename)
input_bos = driver.find_element_by_xpath(
'/html/body/div[1]/div[1]/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div[1]/div[1]/div[1]/div[1]/input')
input_bos.send_keys(Keys.CONTROL, 'a')
input_bos.send_keys(Keys.BACK_SPACE)
input_bos.send_keys(idMember)
time.sleep(0.2)
driver.find_element_by_xpath(
'/html/body/div[1]/div[1]/div[3]/div[2]/div/div/div/div/div/div[2]/div[3]/div[1]/div[1]/div[1]/div[1]/div/button').click()
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="table"]/div[1]/div[3]/table/tbody/tr/td[13]/div/span[2]').click()
time.sleep(0.5)
driver.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div/div[1]/form/div[3]/div[3]/div/div/div/div/form/div/div[2]/div/div/input').send_keys(receiveAmount)
time.sleep(0.5)
driver.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div/div[2]/button[1]/span').click()
time.sleep(0.5)
endtime = datetime.datetime.now()
implement = (endtime - starttime).seconds
print(i, idMember,receiveAmount,implement)
except:
print('失败')
continue
@@ -0,0 +1,134 @@
# -*- coding:UTF-8 -*-
# 功能:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
import datetime
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
# 获取会员卡基础信息
pkId = '4061359779622808474' # 手动获取
name = '15888265981'
password = 'F6123456'
zhi = 1
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
for hum in range(zhi):
# http='https://yunxiu-trial.f6car.cn/member/customer/list?pageSize=5000&pageNo=1'
httptx = 'https://yunxiu.f6car.cn'
# 初步加载处理
# chrom_opt = webdriver.ChromeOptions()
# prefs = { "profile.managed_default_content_settings.images": 2 }
# chrom_opt.add_experimental_option("prefs", prefs)
# driver = webdriver.Chrome(executable_path="E:/Python/chromedriver.exe", chrome_options=chrom_opt)
# 无显示预处理
# option=webdriver.ChromeOptions()
# option.add_argument('headless') # 设置option
# driver = webdriver.Chrome(chrome_options=option)
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(0.2)
driver.get(httptx)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
'''
try:
driver.find_element_by_xpath(
'//*[@id="app"]/div/div[1]/div[2]/div/div/div[2]/div[2]/div/div[1]/div/div[1]/p[1]').click()
except:
print('未识别到多门店')
'''
time.sleep(10) # 预设时间
print("登陆系统")
print("创建文件")
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
# 打开excel文件
print("打开文件")
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
https = 'https://yunxiu.f6car.cn/kzf6/partInfo/newPageList.do?page=view%2Fmaterial.html%23/info/list/cloud'
driver.get(https)
# 传值转换
driver.switch_to.frame('weixin-page-iframe')
# 获取卡项目
num = 0
for i in range(0, h): # 浮点型
try:
d1 = datetime.datetime.now()
receiveAmount1 = table.cell(num, 0).value # 按行品牌
receiveAmount2 = table.cell(num, 1).value # 按行零件号
receiveAmount3 = table.cell(num, 2).value # 按行自编码
# https='https://yunxiu-trial.f6car.cn/kzf6/member/index.do?page=/view/index.html%23/customer/detail/'+idMember
# 进入链接获取json
num = num + 1
time.sleep(0.2)
input_box = driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input').send_keys(
receiveAmount1)
time.sleep(0.2)
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/div/button/i').click()#确定
time.sleep(0.2)
try:
input1=driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div[2]/div[1]/div/div/ul/li/span')
if input1.text==receiveAmount1:
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/div/ul/li[1]/span').click() # 选择
time.sleep(0.2)
input_box = driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input').send_keys(receiveAmount2)
time.sleep(0.2)
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/div/button/i').click() # 确定
time.sleep(0.2)
'//*[@id="cloudTable"]/div[1]/div[3]/table/tbody/tr/td[7]/div'
input1 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[2]/div')
input2 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[3]/div')
input3 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[5]/div')
input4 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[6]/div')
input6 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[7]/div')
input5 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div[2]/span')
d3 = d1 + datetime.timedelta(hours=10)
print(num, '@', receiveAmount3, '@', input1.text, '@', input2.text, '@', input3.text, '@', input4.text, '@', input6.text,'@', input5.text)
except:
print('未识别到品牌字段')
'/html/body/div/div/div/div/div[2]/div[3]/div[2]/div[3]/div/button/span/i'
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/button/span/i').click() # 取消
'''
input1 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[1]/div')
input2 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[2]/div')
input3 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[4]/div')
input4 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[6]/div')
input5 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div[2]/span')
d3 = d1 + datetime.timedelta(hours=10)
print(num, '@', input1.text, '@', input2.text, '@', input3.text, '@', input4.text, '@', input5.text)
'''
except:
continue
@@ -0,0 +1,96 @@
# -*- coding:UTF-8 -*-
# 功能:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
import datetime
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
# 获取会员卡基础信息
name = '15888265981'
password = 'F6123456'
zhi = 1
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
for hum in range(zhi):
# http='https://yunxiu-trial.f6car.cn/member/customer/list?pageSize=5000&pageNo=1'
httptx = 'https://yunxiu.f6car.cn'
# 初步加载处理
# chrom_opt = webdriver.ChromeOptions()
# prefs = { "profile.managed_default_content_settings.images": 2 }
# chrom_opt.add_experimental_option("prefs", prefs)
# driver = webdriver.Chrome(executable_path="E:/Python/chromedriver.exe", chrome_options=chrom_opt)
# 无显示预处理
# option=webdriver.ChromeOptions()
# option.add_argument('headless') # 设置option
# driver = webdriver.Chrome(chrome_options=option)
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(0.1)
driver.get(httptx)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(10) # 预设时间
print("登陆系统")
print("创建文件")
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
# 打开excel文件
print("打开文件")
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s" % (h, l))
https = 'https://yunxiu.f6car.cn/kzf6/partInfo/newPageList.do?page=view%2Fmaterial.html%23/info/list/cloud'
driver.get(https)
# 传值转换
driver.switch_to.frame('weixin-page-iframe')
# 获取卡项目
num = 0
for i in range(0, h): # 浮点型
try:
d1 = datetime.datetime.now()
receiveAmount1 = table.cell(num, 0).value # 按行读取数据
receiveAmount2 = table.cell(num, 1).value # 按行读取数据
# https='https://yunxiu-trial.f6car.cn/kzf6/member/index.do?page=/view/index.html%23/customer/detail/'+idMember
# 进入链接获取json
num = num + 1
time.sleep(0.1)
input_box = driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/input').send_keys(
receiveAmount1)
time.sleep(0.1)
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div[2]/div/div[3]/div/button/i').click()
time.sleep(0.1)
input1 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[2]/div')
input2 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[3]/div')
input3 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[5]/div')
input4 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[6]/div')
input6 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[7]/div')
input5 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div[2]/span')
d3 = d1 + datetime.timedelta(hours=10)
print(num, '@',receiveAmount1,'@', receiveAmount2,'@', input1.text, '@', input2.text, '@', input3.text, '@', input4.text, '@', input6.text, '@', input5.text, '@',d1)
except:
print(num,receiveAmount1,':未识别到内容',d1)
@@ -0,0 +1,71 @@
# -*- coding:UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
#获取会员卡基础信息
name = '15888265981'
password = 'Ff123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#进入链接获取json
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\Users\admin\Desktop\Python脚本\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(15)#预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
if 1==1:
he = 0
hen = 0
heng = 0
hang = 0
len = 0
#获取所有内容
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\新建XLS 工作表.xls")
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
time.sleep(0.2)
for i in range(1,h):
try:
hettps1 = 'https://yunxiu.f6car.cn/cayenne/view/index.html#/index/home'
https='https://yunxiu.f6car.cn/cayenne/view/index.html#/cayenne-member/customer/list' #进入客户信息页面
driver.get(https)
idMember =table.cell(i, 0).value #按行读取数据
#传值转换
#driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/input').send_keys(idMember) #输入手机号
time.sleep(1)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div[2]/div/div[1]/div[1]/div/div/button').click() #点击搜索
time.sleep(2)
input1 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[2]/div/div/span').text
input2 = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div[3]/div[1]/div[3]/table/tbody/tr/td[4]/div').text
print(i,'@', idMember,'@',input1,'@',input2 )
except:
print('失败')
continue
@@ -0,0 +1,176 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 打开网页进行登陆"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# 导入库\n",
"import os\n",
"from selenium import webdriver\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import time\n",
"import pandas as pd\n",
"\n",
"# 账号密码 -- 需要修改\n",
"name = '15888265981'\n",
"password = 'Ff123456'\n",
"\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"\n",
"driver.maximize_window() # 最大化浏览器窗口\n",
"real_https = 'https://m.f6car.cn/' # 正式网址\n",
"fake_https = 'https://m-trial.f6car.cn/' # 测试网址\n",
"# 打开网页,根据情况更改网址变量\n",
"driver.get(real_https)\n",
"\n",
"# 在输入框中输入账号和密码\n",
"username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
"enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
"username.clear()\n",
"username.send_keys(name)\n",
"driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"enter.click()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"ename": "TimeoutException",
"evalue": "Message: \n",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTimeoutException\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-2-9042f014b2b4>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m# 点击基础资料下拉菜单\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mWebDriverWait\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdriver\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0muntil\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mEC\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0melement_to_be_clickable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mXPATH\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mr'//*[@id=\"user-nav\"]/ul/li[3]/a/span'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclick\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[0m\u001b[0;32m 5\u001b[0m \u001b[1;31m# 点击 数据导入 菜单项\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mWebDriverWait\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdriver\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0muntil\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mEC\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0melement_to_be_clickable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mXPATH\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mr'//*[@id=\"user-nav\"]/ul/li[3]/ul/li[17]/a'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclick\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\\selenium\\webdriver\\support\\wait.py\u001b[0m in \u001b[0;36muntil\u001b[1;34m(self, method, message)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[0mend_time\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 79\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 80\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mTimeoutException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mscreen\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstacktrace\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 81\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 82\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0muntil_not\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmessage\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\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;31mTimeoutException\u001b[0m: Message: \n"
]
}
],
"source": [
"# 等待一点时间,手动选择门店\n",
"\n",
"# 点击基础资料下拉菜单\n",
"WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"user-nav\"]/ul/li[3]/a/span'))).click()\n",
"# 点击 数据导入 菜单项\n",
"WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"user-nav\"]/ul/li[3]/ul/li[17]/a'))).click()\n",
"# 点击 套餐卡信息 \n",
"WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"content\"]/div/div/ul/li[5]/a'))).click()\n",
"\n",
"\n",
" # 进入框架 iframe -- weixin-page-iframe ,方法1,可行(原等待时间 2 2 1)\n",
"time.sleep(0.5)\n",
"iframe = driver.find_element_by_xpath(r'//*[@id=\"weixin-page-iframe\"]')\n",
"time.sleep(1)\n",
"driver.switch_to.frame(iframe)\n",
"time.sleep(0.5)\n",
"print('已进入iframe 框架')\n",
"\n",
"files_path = r'C:\\Users\\admin\\Downloads\\套餐卡导入模板'\n",
"\n",
"# 开始批量导入\n",
"\n",
"for file in os.listdir(files_path):\n",
" try:\n",
" # 找到按钮里的 input 标签\n",
" to_input = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/div/div/div[1]/input')\n",
" time.sleep(0.2)\n",
" upload_file = os.path.join(files_path,file)\n",
" to_input.send_keys(upload_file)\n",
" time.sleep(1)\n",
" # print(f'已经上传excel文件:{file}')\n",
" # 点击 立即导入按钮\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/button/span'))).click()\n",
" # 点击 查看导入记录 按钮\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click()\n",
" # 检查文件名\n",
" upload_file_name = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
" time.sleep(0.5)\n",
" while upload_file_name != file:\n",
" # 关闭再打开 导入记录\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() \n",
" time.sleep(1)\n",
" upload_file_name = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
"\n",
" print('导入文件已经进入导入记录中!')\n",
"\n",
" # 打印卡导入 状态 信息\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(0.5)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(0.5)\n",
" print(f'成功卡数:{succeed_cards},失败卡数:{lost_cards}')\n",
" while succeed_cards == '' or lost_cards == '':\n",
" # 不断的关闭打开 导入记录 ,刷新页面\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() # 导入记录\n",
" time.sleep(1)\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(1)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(1)\n",
" print(f'succeed_cards:{succeed_cards},lost_cards:{lost_cards}',end='-')\n",
"\n",
" print()\n",
" print('#######################可以导入下一个文件!#######################')\n",
" # 关闭 导入记录 窗口\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click()\n",
" except Exception as e :\n",
" print(f'{file} 导入出错')\n",
" print(repr(e))\n",
" continue\n",
" finally:\n",
" time.sleep(6) # 如果时间足够的话,保险起见可以多等一会\n",
"\n",
"print('所有文件上传完成!')\n",
"time.sleep(1)\n",
"# driver.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 ('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,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,341 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 打开网页进行登陆"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# 导入库\n",
"import os\n",
"from selenium import webdriver\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import time\n",
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import re\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"from io import BytesIO\n",
"\n",
"# 账号密码 -- 需要修改\n",
"name = '15888265981'\n",
"password = 'Ff123456'\n",
"\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"\n",
"driver.maximize_window() # 最大化浏览器窗口\n",
"real_https = 'https://m.f6car.cn/' # 正式网址\n",
"fake_https = 'https://m-trial.f6car.cn/' # 测试网址\n",
"# 打开网页,根据情况更改网址变量\n",
"driver.get(real_https)\n",
"# 在输入框中输入账号和密码\n",
"username = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
"enter = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
"username.clear()\n",
"username.send_keys(name)\n",
"driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"enter.click()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"files_path = r'C:\\Users\\admin\\Desktop\\锋行者三次\\套餐卡导入模板'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# 生成 token,参数不需要修改\n",
"def generateToken() -> str:\n",
"\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",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
"\n",
"def ceshi(formData)-> str:\n",
" \"\"\" 处理流程开始 \"\"\"\n",
" TOKEN = generateToken()\n",
"\n",
" \"\"\" 通过实例id 获取表单内容 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"appType\" : \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
" \"systemToken\" : \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
" \"userId\" : \"2268275546837446\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : \"FORM-UP96637151Q3XIFU9NNW9BKFUVHU2XWN0EF9L84\",\n",
" \"formDataJson\" :json.dumps(formData, cls=NpEncoder),\n",
" \"processCode\" : \"TPROC--UP96637151Q3XIFU9NNW9BKFUVHU2YWN0EF9L94\",\n",
" \"departmentId\" : \"574140511\" # 560526483 2706271\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" res_new = res.json()\n",
" print(\"生成失败预警!\")\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"已经上传excel文件:0.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1277,lost_cards:10-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:1.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1057,lost_cards:4-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:10.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1192,lost_cards:10-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:11.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1270,lost_cards:4-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:12.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1328,lost_cards:4-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:13.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1415,lost_cards:6-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:14.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1508,lost_cards:12-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:15.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1585,lost_cards:11-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:16.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1820,lost_cards:4-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:17.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2175,lost_cards:9-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:18.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:778,lost_cards:2-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:2.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1328,lost_cards:0-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:3.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1214,lost_cards:5-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:4.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1159,lost_cards:3-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:5.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:998,lost_cards:2-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:6.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:783,lost_cards:5-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:7.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:779,lost_cards:3-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:8.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:776,lost_cards:4-\n",
"#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:9.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1157,lost_cards:11-\n",
"#######################可以导入下一个文件!#######################\n",
"所有文件上传完成!\n",
"生成失败预警!\n"
]
}
],
"source": [
"# 开始批量导入\n",
"\n",
"for file in os.listdir(files_path):\n",
" try:\n",
" # 找到按钮里的 input 标签\n",
" to_input = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/div/div/div[1]/input')\n",
" time.sleep(0.2)\n",
" upload_file = os.path.join(files_path,file)\n",
" to_input.send_keys(upload_file)\n",
" time.sleep(1)\n",
" print(f'已经上传excel文件:{file}')\n",
" # 点击 立即导入按钮\n",
" WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/button/span'))).click()\n",
" # 刷新页面\n",
" time.sleep(5)\n",
" driver.refresh()\n",
" # 点击 查看导入记录 按钮\n",
" WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click()\n",
" # 检查文件名\n",
" upload_file_name = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
" time.sleep(0.5)\n",
" while upload_file_name != file:\n",
" # 关闭再打开 导入记录\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() \n",
" time.sleep(1)\n",
" upload_file_name = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
"\n",
" print('导入文件已经进入导入记录中!')\n",
"\n",
" # 打印卡导入 状态 信息\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(0.5)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(0.5)\n",
" print(f'成功卡数:{succeed_cards},失败卡数:{lost_cards}')\n",
" while succeed_cards == '' or lost_cards == '':\n",
" # 不断的关闭打开 导入记录 ,刷新页面\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() # 导入记录\n",
" time.sleep(1)\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(1)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(20)\n",
" print(f'succeed_cards:{succeed_cards},lost_cards:{lost_cards}',end='-')\n",
"\n",
" print()\n",
" print('#######################可以导入下一个文件!#######################')\n",
" # 关闭 导入记录 窗口\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click()\n",
" except Exception as e :\n",
" print(f'{file} 导入出错')\n",
" print(repr(e))\n",
" formData = {\n",
" \"textField_l9fe0uiw\": file,\n",
" \"textField_l9fe0uiv\": '套餐卡导入异常!!'\n",
" } \n",
" ceshi(formData)\n",
" continue\n",
" finally:\n",
" time.sleep(200) # 如果时间足够的话,保险起见可以多等一会\n",
"\n",
"print('所有文件上传完成!')\n",
"time.sleep(1)\n",
"formData = {\n",
" \"textField_l9fe0uiw\": '套餐卡数据导入完成!',\n",
" \"textField_l9fe0uiv\": '套餐卡数据导入完成!'\n",
" } \n",
"ceshi(formData)\n",
"# driver.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 ('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,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,303 @@
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# 打开网页进行登陆"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# 导入库\n",
"import os\n",
"from selenium import webdriver\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import time\n",
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import re\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"from io import BytesIO\n",
"\n",
"# 账号密码 -- 需要修改\n",
"name = '15888265981'\n",
"password = 'Ff123456'\n",
"\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"\n",
"driver.maximize_window() # 最大化浏览器窗口\n",
"real_https = 'https://m.f6car.cn/' # 正式网址\n",
"fake_https = 'https://m-trial.f6car.cn/' # 测试网址\n",
"# 打开网页,根据情况更改网址变量\n",
"driver.get(real_https)\n",
"# 在输入框中输入账号和密码\n",
"username = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
"enter = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
"username.clear()\n",
"username.send_keys(name)\n",
"driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"enter.click()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"files_path = r'C:\\Users\\admin\\Desktop\\202312爱义行数据迁移\\20231228F6提报数据\\最终导入文件\\套餐卡导入模板 - 已过期'"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# 生成 token,参数不需要修改\n",
"def generateToken() -> str:\n",
"\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",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
"\n",
"def ceshi(formData)-> str:\n",
" \"\"\" 处理流程开始 \"\"\"\n",
" TOKEN = generateToken()\n",
"\n",
" \"\"\" 通过实例id 获取表单内容 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"appType\" : \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
" \"systemToken\" : \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
" \"userId\" : \"2268275546837446\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : \"FORM-UP96637151Q3XIFU9NNW9BKFUVHU2XWN0EF9L84\",\n",
" \"formDataJson\" :json.dumps(formData, cls=NpEncoder),\n",
" \"processCode\" : \"TPROC--UP96637151Q3XIFU9NNW9BKFUVHU2YWN0EF9L94\",\n",
" \"departmentId\" : \"574140511\" # 560526483 2706271\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" res_new = res.json()\n",
" print(\"生成失败预警!\")\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"已经上传excel文件:65.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1823,lost_cards:13-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:66.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2051,lost_cards:29-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:67.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1823,lost_cards:24-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:68.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1884,lost_cards:20-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:69.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1771,lost_cards:26-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:7.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1755,lost_cards:16-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:70.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2217,lost_cards:17-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:71.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1847,lost_cards:28-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:72.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2096,lost_cards:31-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:73.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2064,lost_cards:20-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:74.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1923,lost_cards:23-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:75.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1278,lost_cards:25-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:8.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1902,lost_cards:25-#######################可以导入下一个文件!#######################\n",
"已经上传excel文件:9.xlsx\n",
"导入文件已经进入导入记录中!\n",
"成功卡数:,失败卡数:\n",
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1953,lost_cards:16-#######################可以导入下一个文件!#######################\n",
"所有文件上传完成!\n",
"生成失败预警!\n"
]
}
],
"source": [
"# 开始批量导入\n",
"for file in os.listdir(files_path):\n",
" try:\n",
" # 找到按钮里的 input 标签\n",
" to_input = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/div/div/div[1]/input')\n",
" time.sleep(0.2)\n",
" upload_file = os.path.join(files_path,file)\n",
" to_input.send_keys(upload_file)\n",
" time.sleep(1)\n",
" print(f'已经上传excel文件:{file}')\n",
" # 点击 立即导入按钮\n",
" WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/button/span'))).click()\n",
" # 刷新页面\n",
" time.sleep(5)\n",
" driver.refresh()\n",
" # 点击 查看导入记录 按钮\n",
" WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click()\n",
" # 检查文件名\n",
" upload_file_name = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
" time.sleep(0.5)\n",
" while upload_file_name != file:\n",
" # 关闭再打开 导入记录\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() \n",
" time.sleep(1)\n",
" upload_file_name = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
"\n",
" print('导入文件已经进入导入记录中!')\n",
"\n",
" # 打印卡导入 状态 信息\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(0.5)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(0.5)\n",
" print(f'成功卡数:{succeed_cards},失败卡数:{lost_cards}')\n",
" alen = 0\n",
" while succeed_cards == '' or lost_cards == '' or alen >=15:\n",
" alen = alen + 1\n",
" # 不断的关闭打开 导入记录 ,刷新页面\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() # 导入记录\n",
" time.sleep(1)\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(1)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(30)\n",
" print(f'succeed_cards:{succeed_cards},lost_cards:{lost_cards}',end='-')\n",
"\n",
" print('#######################可以导入下一个文件!#######################')\n",
" # 关闭 导入记录 窗口\n",
" WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click()\n",
" except Exception as e :\n",
" print(f'{file} 导入出错')\n",
" print(repr(e))\n",
" formData = {\n",
" \"textField_l9fe0uiw\": file,\n",
" \"textField_l9fe0uiv\": '套餐卡导入异常!!'\n",
" } \n",
" ceshi(formData)\n",
" continue\n",
" finally:\n",
" time.sleep(300) # 如果时间足够的话,保险起见可以多等一会\n",
"\n",
"print('所有文件上传完成!')\n",
"time.sleep(1)\n",
"formData = {\n",
" \"textField_l9fe0uiw\": '套餐卡数据导入完成!',\n",
" \"textField_l9fe0uiv\": '套餐卡数据导入完成!'\n",
" } \n",
"ceshi(formData)\n",
"driver.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 ('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,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,80 @@
# -*- coding:UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd
#获取基础信息
name = '18609901513'
password = 'Jz12345'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
# 在输入框中输入账号和密码
username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[1]/div/div[1]/input')))
enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[3]/div/button')))
username.clear()
username.send_keys(name)
driver.find_element_by_xpath(r'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
enter.click()
time.sleep(15)#预设时间
file = xlwt.Workbook()
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(1,h):
try:
idMember =table.cell(i, 0).value #id
idMember1 =table.cell(i, 1).value #日期
https='https://yunxiu.f6car.cn/kzf6/member/index.do?page=/view/index.html%23/car/edit/'+idMember #进入页面
driver.get(https)
time.sleep(2.2)
#传值转换
driver.switch_to.frame('weixin-page-iframe')
#time.sleep(0.1)
# 先通过日期输入框的id="train_date"来定位输入框,再通过removeAttribute方法移除"readonly"属性
#js = 'document.getElementById("train_date").removeAttribute("readonly");'
ele = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div/div[2]/div/div[10]/div/div[2]/div/div/div/input')
driver.execute_script("arguments[0].removeAttribute('readonly');", ele)
# js = """
# var date = document.getElementById('train_date').removeAttribute('readonly');
# """
# driver.execute_script(js)
ele.click() # 先点击,清空后赋值。
ele.clear()
time.sleep(0.2)
ele.send_keys(idMember1)
time.sleep(2.2)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div[2]/div/form/div/div[3]/button[1]/span').click() #点击保存
time.sleep(0.2)
endtime = datetime.datetime.now()
print(i,'@', idMember)
except:
print('失败')
continue
@@ -0,0 +1,196 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"# 生成 token,参数不需要修改\n",
"def generateToken() -> str:\n",
"\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",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
"\n",
"def ceshi(formData)-> str:\n",
" \"\"\" 处理流程开始 \"\"\"\n",
" TOKEN = generateToken()\n",
"\n",
" \"\"\" 通过实例id 获取表单内容 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"appType\" : \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
" \"systemToken\" : \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
" \"userId\" : \"2268275546837446\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : \"FORM-UP96637151Q3XIFU9NNW9BKFUVHU2XWN0EF9L84\",\n",
" \"formDataJson\" :json.dumps(formData, cls=NpEncoder),\n",
" \"processCode\" : \"TPROC--UP96637151Q3XIFU9NNW9BKFUVHU2YWN0EF9L94\",\n",
" \"departmentId\" : \"574140511\" # 560526483 2706271\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" res_new = res.json()\n",
" print(\"生成失败预警!\")\n",
"\n",
"cookies_str ='financialSESSIONID=e2b2d95e-3a50-4175-9e52-a0b18856ec15; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; prodOrg=11240984669917823109; unp=15730317166966239268; un=15730317166966239268; _up=-NillNN-qyBEJ--t3vnSknvoOF54zvGOscoE1X02XOFfVfjDoZHQjaZJ9Q3d-WrAAGgt60MgQHajH2BEMqCxjECoWyNjxpYEXk7xGLY883HkEvEUoY0h1gQJ-e1f6PpAWPXU62De3ZiyFHCpqOtcj-0Yk1_BOBt98xac7BTv9bbzPA..; tmall=false; sensorsdata2015jssdkcross={\"distinct_id\":\"15730317166966239268\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"#读取excel文件\n",
"data = xlrd.open_workbook(r\"C:\\Users\\admin\\Desktop\\新建XLS 工作表 (2).xls\")\n",
"\n",
"table = data.sheet_by_index(0) # 通过索引顺序获取\n",
"\n",
"h = table.nrows\n",
"\n",
"l = table.ncols\n",
"\n",
"print(u\"表数据的行数为%s,列数为%s\"%(h,l))\n",
"\n",
"for i in range(1,h):\n",
" try:\n",
" idMember =table.cell(i, 0).value #卡id\n",
" idMember1 =table.cell(i, 1).value #退款金额\n",
" idMember2 =table.cell(i, 2).value #退款金额\n",
" idOwnOrg =table.cell(i, 3).value #门店ID\n",
" employeeId =table.cell(i, 4).value #退卡服务顾问ID\n",
" #读取cardVersion信息并配置退卡data\n",
" url = 'https://yunxiu.f6car.cn/marketing/tkdBill/baseInfo?pkId={}'.format(idMember)\n",
" resget = requests.get(url,cookies=cookie_dict)\n",
" resget = json.loads(resget.text)\n",
" cardVersion = resget['data']['cardVersion']\n",
" data = {\n",
" \"cardId\": idMember, # 退卡实体id\n",
" \"cardVersion\": cardVersion,\n",
" \"employeeId\": employeeId, # 退卡服务顾问ID 手动更新\n",
" \"idOwnOrg\": idOwnOrg, # 门店ID 手动更新\n",
" \"refundAmount\": idMember1, # 退卡金额\n",
" \"remark\": \"过期保险代金券清理\" # 备注\n",
" }\n",
" #生成退卡单\n",
" res = requests.post(f'https://yunxiu.f6car.cn/marketing/tkdBill/add',\n",
" headers=headers,cookies=cookie_dict, json=data)\n",
" resdata = res.json().get('data')\n",
" #print(data)\n",
" \n",
"\n",
" #读取Version信息并配置退卡data\n",
" url1 = 'https://yunxiu.f6car.cn/marketing/tkdBill/detail/{}'.format(resdata)\n",
" resget1 = requests.get(url1,cookies=cookie_dict)\n",
" resget1 = json.loads(resget1.text)\n",
" cardVersion1 = resget1['data']['version']\n",
" #完成收款\n",
" if idMember1 != \"0\":\n",
" data = {\n",
" \"idOwnOrg\": idOwnOrg,# 门店ID 手动更新\n",
" \"idOperationOrg\": idOwnOrg,# 退卡门店ID 手动更新\n",
" \"idSourceBill\": resdata,# 退卡单ID\n",
" \"sourceBillType\": \"TKD\",#类型\n",
" \"receiptMemo\": \"过期保险代金券清理\",# 备注\n",
" \"version\": cardVersion1,\n",
" \"favourableList\": [],\n",
" \"gatheringFavourable\": 0,\n",
" \"paymentTypeGroupId\": \"\",\n",
" \"czkList\": [],\n",
" \"paymentList\": [\n",
" {\n",
" \"paymentTypeId\": \"113071\",# 各门店不同 手动更新\n",
" \"paymentType\": \"内部结算\",\n",
" \"paymentAmount\": idMember2,\n",
" \"gatheringType\": 0,\n",
" \"kind\": \"normal\"\n",
" }\n",
" ],\n",
" \"pkId\": 0,\n",
" \"billType\": \"YSF\",\n",
" \"domainCode\": \"SAAS\"\n",
" }\n",
" else:\n",
" data = {\n",
" \"idOwnOrg\": idOwnOrg,# 门店ID 手动更新\n",
" \"idOperationOrg\": idOwnOrg,# 退卡门店ID 手动更新\n",
" \"idSourceBill\": resdata,# 退卡单ID\n",
" \"sourceBillType\": \"TKD\",#类型\n",
" \"receiptMemo\": \"过期保险代金券清理\",# 备注\n",
" \"version\": cardVersion1,\n",
" \"favourableList\": [],\n",
" \"gatheringFavourable\": 0,\n",
" \"paymentTypeGroupId\": \"\",\n",
" \"czkList\": [],\n",
" \"paymentList\": [\n",
" {\n",
" \"status\": 0,\n",
" \"paymentAmount\": 0\n",
" }\n",
" ],\n",
" \"pkId\": 0,\n",
" \"billType\": \"YSF\",\n",
" \"domainCode\": \"SAAS\"\n",
" }\n",
" #print(data)\n",
" res = requests.post(f'https://yunxiu.f6car.cn/financial/advance/payment/singleGathering', \n",
" headers=headers,cookies=cookie_dict, json=data)\n",
" print(\"打印出响应信息:\",i,cardVersion,cardVersion1,resdata,idMember,res.text)\n",
" except:\n",
" formData = {\n",
" \"textField_l9fe0uiw\": idMember,\n",
" \"textField_l9fe0uiv\": '恒泰退卡异常!!'\n",
" } \n",
" ceshi(formData)\n",
" continue"
]
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,120 @@
# -*- coding:UTF-8 -*-
# 功能:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
import datetime
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from shutil import which
# 输入基础信息
name = '15888265981'
password = 'F6123456'
cycles = 1
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
for hum in range(cycles):
# 初步加载处理
# chrom_opt = webdriver.ChromeOptions()
# prefs = { "profile.managed_default_content_settings.images": 2 }
# chrom_opt.add_experimental_option("prefs", prefs)
# driver = webdriver.Chrome(executable_path="E:/Python/chromedriver.exe", chrome_options=chrom_opt)
# 无显示预处理
# option=webdriver.ChromeOptions()
# option.add_argument('headless') # 设置option
# driver = webdriver.Chrome(chrome_options=option)
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\迅雷下载\python 暂存文件\Python\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(0.2)
httptx = 'https://yunxiu.f6car.cn'
driver.get(httptx)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(10) # 预设时间
print("登陆系统")
print("创建文件")
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
# 打开excel文件
print("打开文件")
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\Excel通用存储位置.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
https = 'https://yunxiu.f6car.cn/kzf6/partInfo/newPageList.do?page=view%2Fmaterial.html%23/info/list/cloud'
driver.get(https)
# 传值转换
#driver.switch_to.frame('weixin-page-iframe')
# 获取信息
for i in range(1, h):
try:
d1 = datetime.datetime.now()
receiveAmount1 = table.cell(i, 0).value # 按行品牌
receiveAmount2 = table.cell(i, 1).value # 按行零件号
receiveAmount3 = table.cell(i, 2).value # 按行自编码
receiveAmount4 = "空值 " # 预设一个值
try:
receiveAmount5 = driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div[3]/div/button/span') # 获取一个品牌信息
receiveAmount4 = receiveAmount5.text
except:
cycles = 1
if receiveAmount1 != receiveAmount4: # 不相等则说明 需要重新选择品牌
# 判断之前是否有筛选品牌
try:
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div[3]/div/button/span/i').click()
except:
cycles = 1
# 输入品牌进行筛选
time.sleep(0.2)
input_box = driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div/div/div[3]/input').send_keys(
receiveAmount1)
time.sleep(0.2)
driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div/div/div[3]/div/button/i').click()
time.sleep(0.2)
try:
input0=driver.find_element_by_xpath('/html/body/div/div/div/div/div/div/div/div/div/div/ul/li/span')
if input0.text==receiveAmount1:
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/div/ul/li[1]/span').click()
except:
cycles = 1
# 输入零件号进行查询并记录内容
try:
time.sleep(0.2)
input_box = driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/div/div[3]/input')
input_box.send_keys(Keys.CONTROL, 'a')
input_box.send_keys(Keys.BACK_SPACE)
# input_box.send_keys(Keys.CONTROL, 'v')
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/div/div[3]/input').send_keys(receiveAmount2)
time.sleep(0.2)
driver.find_element_by_xpath(
'/html/body/div/div/div/div/div/div/div/div/div/div/div[3]/div/button/i').click() # 确定
time.sleep(0.2)
input1 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[1]/div')
input2 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[2]/div')
input3 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[4]/div')
input4 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div/div/table/tbody/tr[1]/td[6]/div')
input5 = driver.find_element_by_xpath('//*[@id="cloudTable"]/div[2]/span')
print(i, '@', receiveAmount3, '@', input1.text, '@', input2.text, '@', input3.text, '@', input4.text, '@', input5.text, '@',d1)
except:
print(i,d1)
except:
continue
@@ -0,0 +1,82 @@
# -*- coding:UTF-8 -*-
# 功能:F6系统页面会员卡退卡操作
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
# 获取会员卡基础信息
name = '15888265981'
password = 'F6123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http = 'https://m.f6car.cn/'
# 进入链接获取json
# driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\Users\admin\Desktop\Python脚本\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(15) # 预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
if 1 == 1:
he = 0
hen = 0
heng = 0
hang = 0
len = 0
# 获取所有内容
# 打开excel文件
data = xlrd.open_workbook(r'C:\Users\admin\Desktop\新建XLS 工作表 (4).xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s" % (h, l))
# 获取卡项目
for i in range(0, h):
try:
starttime = datetime.datetime.now()
idMember = table.cell(i, 0).value # 按行读取数据
receiveAmount = table.cell(i, 1).value # 按行读取数据
https = 'https://yunxiu.f6car.cn/kzf6/partInfo/newPageList.do?page=view%2Fmaterial.html%23/info/edit/'+idMember+'&idOwnOrg=11240984669917170626&manageStatus=0'
# http = 'https://yunxiu-trial.f6car.cn/kzf6/payment/toGathering.do?idSourceBill=' + idMember + '&billType=TKD'
# 进入链接获取json
driver.get(https)
# 传值转换
driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.2)
# driver.find_element_by_xpath(
# '//*[@id="app"]/div[2]/div[2]/div/section[2]/div[2]/div[2]/div[3]/div/div/input').send_keys(onename)
input_bos = driver.find_element_by_xpath(
'//*[@id="material-content"]/form/div[5]/div[2]/div/div/div/input')
input_bos.send_keys(Keys.CONTROL, 'a')
input_bos.send_keys(Keys.BACK_SPACE)
input_bos.send_keys(receiveAmount)
time.sleep(0.2)
driver.find_element_by_xpath(
'//*[@id="material-content"]/div[1]/span[1]/button/span').click()
time.sleep(0.2)
endtime = datetime.datetime.now()
implement = (endtime - starttime).seconds
print(i, implement)
except:
print('失败')
continue
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,259 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"from pprint import pprint\n",
"cookies_str = 'f6-ids-goodsSESSIONID=0b378941-65f1-4ec2-8852-fd6bc499576d; erpLanguage=zh-CN; prodOrg=11240984669917816032; unp=15721517460790206472; _up=-NillNN-qyBEJ--t3vnSknvoOF54z_CIscoB1Xs4U-dfVvfFoJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrHfsXqYkl1wEF-fFRv-ZNHu3M-GTc2ZqwEHavqutVjuIaklbFOhRtrEj90BS_prS1PQQ.; tmall=false; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215721517460790206472%22%2C%22first_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fyunxiu.f6car.com%2Ferp%2Fview%2Findex.html%22%7D%2C%22%24device_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%7D'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"#读取excel文件\n",
"\n",
"df = pd.read_excel(r'C:\\Users\\杨国栋\\Desktop\\修改.xls',sheet_name='Sheet4',dtype='string')\n",
"for item in df.index:\n",
" mid= df.loc[item,'材料ID']\n",
" Cid= df.loc[item,'材料编码']\n",
" name= df.loc[item,'材料名称']\n",
" brand= df.loc[item,'品牌']\n",
" if pd.isna(brand):\n",
" brand =''\n",
" supplierCode= df.loc[item,'零件号']\n",
" if pd.isna(supplierCode):\n",
" supplierCode =''\n",
" spec= df.loc[item,'规格型号']\n",
" if pd.isna(spec):\n",
" spec =''\n",
" applyModel= df.loc[item,'适用车型']\n",
" if pd.isna(applyModel):\n",
" applyModel =''\n",
" #get材料属性\n",
" url = 'https://ids-goods.f6car.cn/f6-ids-goods/part/getPartInfo?partId={}'.format(mid)\n",
"\n",
" res = requests.get(url,cookies=cookie_dict)\n",
" strele = res.json()\n",
" \n",
" strele['data']['name'] = name#修改内容\n",
" strele['data']['brand'] = brand#修改内容\n",
" strele['data']['supplierCode'] = supplierCode#修改内容\n",
" strele['data']['spec'] = spec#修改内容\n",
" strele['data']['applyModel'] = applyModel#修改内容\n",
"\n",
" #修改值读取\n",
" res = requests.post(f'https://ids-goods.f6car.cn/f6-ids-goods/part/updatePartInfo', timeout=None,headers=headers,cookies=cookie_dict, json=strele['data'])\n",
" re=res.json()\n",
" print(item+1,Cid,mid,re['message'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 获取材料ID"
]
},
{
"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"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)",
"\u001B[1;32m<ipython-input-1-d5eec088eb9c>\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 41\u001B[0m }\n\u001B[0;32m 42\u001B[0m \u001B[0murl\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;34m'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo'\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 43\u001B[1;33m \u001B[0mres\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mrequests\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpost\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0murl\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mcookies\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mcookie_dict\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mheaders\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mheaders\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mjson\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mjson\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 44\u001B[0m \u001B[0mstrele\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mres\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mjson\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 45\u001B[0m \u001B[0mle\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mlen\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mstrele\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;34m'data'\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;34m'records'\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\\requests\\api.py\u001B[0m in \u001B[0;36mpost\u001B[1;34m(url, data, json, **kwargs)\u001B[0m\n\u001B[0;32m 117\u001B[0m \"\"\"\n\u001B[0;32m 118\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 119\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mrequest\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;34m'post'\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0murl\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mdata\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mdata\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mjson\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mjson\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\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 120\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 121\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\requests\\api.py\u001B[0m in \u001B[0;36mrequest\u001B[1;34m(method, url, **kwargs)\u001B[0m\n\u001B[0;32m 59\u001B[0m \u001B[1;31m# cases, and look like a memory leak in others.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 60\u001B[0m \u001B[1;32mwith\u001B[0m \u001B[0msessions\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mSession\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0msession\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 61\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0msession\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrequest\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmethod\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mmethod\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0murl\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0murl\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\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 62\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 63\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\requests\\sessions.py\u001B[0m in \u001B[0;36mrequest\u001B[1;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001B[0m\n\u001B[0;32m 540\u001B[0m }\n\u001B[0;32m 541\u001B[0m \u001B[0msend_kwargs\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mupdate\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0msettings\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 542\u001B[1;33m \u001B[0mresp\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msend\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mprep\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0msend_kwargs\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 543\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 544\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mresp\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\\requests\\sessions.py\u001B[0m in \u001B[0;36msend\u001B[1;34m(self, request, **kwargs)\u001B[0m\n\u001B[0;32m 653\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 654\u001B[0m \u001B[1;31m# Send the request\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 655\u001B[1;33m \u001B[0mr\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0madapter\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msend\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mrequest\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\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 656\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 657\u001B[0m \u001B[1;31m# Total elapsed time of the request (approximately)\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\\requests\\adapters.py\u001B[0m in \u001B[0;36msend\u001B[1;34m(self, request, stream, timeout, verify, cert, proxies)\u001B[0m\n\u001B[0;32m 437\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[0;32m 438\u001B[0m \u001B[1;32mif\u001B[0m \u001B[1;32mnot\u001B[0m \u001B[0mchunked\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 439\u001B[1;33m resp = conn.urlopen(\n\u001B[0m\u001B[0;32m 440\u001B[0m \u001B[0mmethod\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mrequest\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mmethod\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 441\u001B[0m \u001B[0murl\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0murl\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\\urllib3\\connectionpool.py\u001B[0m in \u001B[0;36murlopen\u001B[1;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001B[0m\n\u001B[0;32m 697\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 698\u001B[0m \u001B[1;31m# Make the request on the httplib connection object.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 699\u001B[1;33m httplib_response = self._make_request(\n\u001B[0m\u001B[0;32m 700\u001B[0m \u001B[0mconn\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 701\u001B[0m \u001B[0mmethod\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\\urllib3\\connectionpool.py\u001B[0m in \u001B[0;36m_make_request\u001B[1;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001B[0m\n\u001B[0;32m 443\u001B[0m \u001B[1;31m# Python 3 (including for exceptions like SystemExit).\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 444\u001B[0m \u001B[1;31m# Otherwise it looks like a bug in the code.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 445\u001B[1;33m \u001B[0msix\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mraise_from\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0me\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;32mNone\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 446\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[1;33m(\u001B[0m\u001B[0mSocketTimeout\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mBaseSSLError\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mSocketError\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0me\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 447\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_raise_timeout\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0merr\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0me\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0murl\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0murl\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mtimeout_value\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mread_timeout\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\\urllib3\\packages\\six.py\u001B[0m in \u001B[0;36mraise_from\u001B[1;34m(value, from_value)\u001B[0m\n",
"\u001B[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\urllib3\\connectionpool.py\u001B[0m in \u001B[0;36m_make_request\u001B[1;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001B[0m\n\u001B[0;32m 438\u001B[0m \u001B[1;31m# Python 3\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 439\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--> 440\u001B[1;33m \u001B[0mhttplib_response\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mconn\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mgetresponse\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[0m\u001B[0;32m 441\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[0mBaseException\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0me\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 442\u001B[0m \u001B[1;31m# Remove the TypeError from the exception chain in\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\\http\\client.py\u001B[0m in \u001B[0;36mgetresponse\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m 1343\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[0;32m 1344\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-> 1345\u001B[1;33m \u001B[0mresponse\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mbegin\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[0m\u001B[0;32m 1346\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[0mConnectionError\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 1347\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mclose\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\\http\\client.py\u001B[0m in \u001B[0;36mbegin\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m 305\u001B[0m \u001B[1;31m# read until we get a non-100 response\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 306\u001B[0m \u001B[1;32mwhile\u001B[0m \u001B[1;32mTrue\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 307\u001B[1;33m \u001B[0mversion\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mstatus\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mreason\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_read_status\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[0m\u001B[0;32m 308\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mstatus\u001B[0m \u001B[1;33m!=\u001B[0m \u001B[0mCONTINUE\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 309\u001B[0m \u001B[1;32mbreak\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\http\\client.py\u001B[0m in \u001B[0;36m_read_status\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m 266\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 267\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0m_read_status\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\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;32m--> 268\u001B[1;33m \u001B[0mline\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mstr\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mfp\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mreadline\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0m_MAXLINE\u001B[0m \u001B[1;33m+\u001B[0m \u001B[1;36m1\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;34m\"iso-8859-1\"\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 269\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mlen\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mline\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;33m>\u001B[0m \u001B[0m_MAXLINE\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 270\u001B[0m \u001B[1;32mraise\u001B[0m \u001B[0mLineTooLong\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;34m\"status line\"\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\\socket.py\u001B[0m in \u001B[0;36mreadinto\u001B[1;34m(self, b)\u001B[0m\n\u001B[0;32m 702\u001B[0m \u001B[1;32mwhile\u001B[0m \u001B[1;32mTrue\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 703\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--> 704\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_sock\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrecv_into\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mb\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 705\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[0mtimeout\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 706\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_timeout_occurred\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;32mTrue\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\ssl.py\u001B[0m in \u001B[0;36mrecv_into\u001B[1;34m(self, buffer, nbytes, flags)\u001B[0m\n\u001B[0;32m 1239\u001B[0m \u001B[1;34m\"non-zero flags not allowed in calls to recv_into() on %s\"\u001B[0m \u001B[1;33m%\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 1240\u001B[0m self.__class__)\n\u001B[1;32m-> 1241\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mread\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mnbytes\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mbuffer\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 1242\u001B[0m \u001B[1;32melse\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 1243\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0msuper\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrecv_into\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbuffer\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mnbytes\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mflags\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\\ssl.py\u001B[0m in \u001B[0;36mread\u001B[1;34m(self, len, buffer)\u001B[0m\n\u001B[0;32m 1097\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[0;32m 1098\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mbuffer\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mnot\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m-> 1099\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_sslobj\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mread\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mlen\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mbuffer\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 1100\u001B[0m \u001B[1;32melse\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 1101\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_sslobj\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mread\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mlen\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;31mKeyboardInterrupt\u001B[0m: "
]
}
],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"from pprint import pprint\n",
"cookies_str = 'f6-ids-goodsSESSIONID=b6d441f0-5656-4e48-bb58-6aca41a7de08; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; prodOrg=11240984669918090119; unp=15845818048897376354; _up=-NillNN-qyBEJ--t3vnSknvoOF53yfSFscUF13M3U-BeUffCop3QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFvASoY0i3gMF-vVRv-ZNHu3M-GTc1py0HXagruldgeIdk1HFPRZrrEj9klyw8Le1Nhk.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215845818048897376354%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D; tmall=false'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"ID=[]\n",
"for a in range(1,55):\n",
" json={\n",
" \"keyWord\":\"\",\n",
" \"idOwnOrg\":\"11240984669918090119\",\n",
" \"currentPage\":a,\n",
" \"pageSize\":100,\n",
" \"name\":\"\",\n",
" \"brand\":\"\",\n",
" \"supplierCode\":\"\",\n",
" \"customCode\":\"\",\n",
" \"categoryName\":\"\",\n",
" \"categoryId\":\"\",\n",
" \"labelId\":\"\",\n",
" \"labelName\":\"\",\n",
" \"spec\":\"\",\n",
" \"applyModel\":\"\",\n",
" \"sellPurchaseStatuses\":[\n",
" 2,\n",
" 3,\n",
" 4,\n",
" 5\n",
" ]\n",
" }\n",
" url = 'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo'\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers,json=json)\n",
" strele = res.json()\n",
" le=len(strele['data']['records'])\n",
"\n",
" for i in range(0,le):\n",
" MX={}\n",
" partId=strele['data']['records'][i]['partId']\n",
" customCode=strele['data']['records'][i]['customCode']\n",
" supplierCode=strele['data']['records'][i]['supplierCode']\n",
" MX['材料编码']=customCode\n",
" MX['材料ID']=partId\n",
" MX['零件号']=supplierCode\n",
" ID.append(MX)\n",
"df=pd.DataFrame(ID)\n",
"df.to_excel(r'C:\\Users\\admin\\Desktop\\材料ID.xlsx',index=False)\n"
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 材料信息修改保存"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 根据材料编码获取材料ID"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import requests\n",
"import json\n",
"import xlrd\n",
"from pprint import pprint\n",
"cookies_str = 'f6-ids-goodsSESSIONID=fe148c9e-e01a-4a90-b1b5-d76d51cfa6af; erpLanguage=zh-CN; tmall=false; prodOrg=11240984669917891540; unp=15763324200216977433; _up=-NillNN-qyBEJ--t3vnSknvoOF54y_KOsskH03s9W-FUUfbFpJrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFPcWr44i1gYP__hRv-ZNHu3M-GTc2Z6yFnWsrO1Vi-ocmVHEOhBsrEj96Xjc98vYSjk.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215605564149906554899%22%2C%22first_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fyunxiu.f6car.com%2Ferp%2Fview%2Findex.html%22%7D%2C%22%24device_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%7D'\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
" 'origin': 'https://yunxiu.f6car.cn'\n",
"}\n",
"df = pd.read_excel(r'C:\\Users\\杨国栋\\Desktop\\材料.xlsx',sheet_name='Sheet1',dtype='string') \n",
"for item in df.index:\n",
" CLID= df.loc[item,'材料编码']\n",
" json={\n",
" \"keyWord\":CLID,\n",
" \"idOwnOrg\":\"11240984669917891540\",\n",
" \"currentPage\":1,\n",
" \"pageSize\":10,\n",
" \"name\":\"\",\n",
" \"brand\":\"\",\n",
" \"supplierCode\":\"\",\n",
" \"customCode\":\"\",\n",
" \"categoryName\":\"\",\n",
" \"categoryId\":\"\",\n",
" \"labelId\":\"\",\n",
" \"labelName\":\"\",\n",
" \"spec\":\"\",\n",
" \"applyModel\":\"\",\n",
" \"sellPurchaseStatuses\":[\n",
" 2,\n",
" 3,\n",
" 4,\n",
" 5\n",
" ]\n",
" }\n",
" url = 'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo'\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers,json=json)\n",
" re=res.json()\n",
" print(CLID,re['data']['records'][0]['partId'])\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
+25
View File
@@ -0,0 +1,25 @@
import pandas as pd
import requests
import json
import xlrd
from pprint import pprint
cookies_str = 'f6-ids-goodsSESSIONID=af571e86-4e73-4006-9c8a-255f6977165c; erpLanguage=zh-CN; tmall=false; unp=10546443564007523766; _up=-NillNN-qyBEJ--t3vnSknvoOFt6yfeJtM4A1X8_WuBYVPLGoZ_QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFPoUqI4i0wsJ9_JRv-ZNHu3M-GTZ25y3EXOrq-tRiesdlVTAORVprEj9-knQgcH6NGI.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215605564149906554899%22%2C%22first_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fyunxiu.f6car.com%2Ferp%2Fview%2Findex.html%22%7D%2C%22%24device_id%22%3A%2217e08ece80f53a-0448dc86383ae5-3e604809-1327104-17e08ece81094e%22%7D; prodOrg=11240984669917926035'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json",
'origin': 'https://yunxiu.f6car.cn'
}
url = 'https://ids-goods.f6car.com/f6-ids-goods/part/deletePartInfo'
data = pd.read_excel(r"C:\Users\admin\Desktop\新建XLS 工作表(1).xls", sheet_name='Sheet5')
for a in data.index:
infoId =data.loc[a,"材料长码"]
json={"infoIds":[str(infoId)],"idOwnOrg":"11240984669917926035"}
resquest = requests.post(url,cookies=cookie_dict,json=json)
print(resquest,json)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,131 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"data = {\n",
" \"keyWord\": \"\",\n",
" \"brand\": \"\",\n",
" \"categoryId\": \"\",\n",
" \"spec\": \"\",\n",
" \"supplierIdList\": \"\",\n",
" \"applyModel\": \"\",\n",
" \"oe\": \"\",\n",
" \"includeZeroStock\": 0,\n",
" \"partName\": \"\",\n",
" \"customCode\": \"\",\n",
" \"supplierCode\": \"\",\n",
" \"searchType\": 1,\n",
" \"defSeat\": \"\",\n",
" \"needOrgBaseInfo\": \"0\",\n",
" \"needStorageBaseInfo\": 1,\n",
" \"defSeatStorageId\": \"\",\n",
" \"idOwnOrgList\": [\n",
" \"11240984669917398647\"\n",
" ],\n",
" \"labelIds\": [],\n",
" \"sellPurchaseStatusList\": [\n",
" 2,\n",
" 3,\n",
" 4,\n",
" 5\n",
" ],\n",
" \"storageIdList\": [],\n",
" \"sorts\": [],\n",
" \"currentPage\": 1,\n",
" \"pageSize\": 100\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'code': 200,\n",
" 'data': {'storageVoList': [],\n",
" 'page': {'endRow': 0,\n",
" 'firstPage': 0,\n",
" 'hasNextPage': False,\n",
" 'hasPreviousPage': False,\n",
" 'isFirstPage': False,\n",
" 'isLastPage': False,\n",
" 'lastPage': 0,\n",
" 'list': [],\n",
" 'navigateFirstPage': 0,\n",
" 'navigateLastPage': 0,\n",
" 'navigatePages': 0,\n",
" 'navigatepageNums': None,\n",
" 'nextPage': 0,\n",
" 'orderBy': '',\n",
" 'pageNum': 0,\n",
" 'pageSize': 0,\n",
" 'pages': 0,\n",
" 'prePage': 0,\n",
" 'size': 0,\n",
" 'startRow': 0,\n",
" 'total': 0}},\n",
" 'message': 'SUCCESS'}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'stockSESSIONID=0e42a44b-1c08-4087-9cdf-4203d0611552; sensorsdata2015jssdkcross={\"distinct_id\":\"10691192243902595917\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; currMenu=工单; prodOrg=11240984669917217520; unp=15503028824961978372; un=15503028824961978372; _up=-NillNN-qyBEJ--t3vnSknvoOF56zfKNssUN0X82XOZUUfnCoJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrHfYWoYgr0gQL-vBRv-ZNHu3M-GTc25iyFXWgpu9RgO0bmVHLPRRtrEj9yXq_98vOMyM.; tmall=false; sensorsdata2015jssdkcross={\"distinct_id\":\"15503028824961978372\",\"first_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\",\"props\":{\"$latest_traffic_source_type\":\"直接流量\",\"$latest_search_keyword\":\"未取到值_直接打开\",\"$latest_referrer\":\"\"},\"$device_id\":\"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0\"}'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
"}\n",
"\n",
"#get材料属性\n",
"url = 'https://yunxiu.f6car.cn/stock/stockSearch/stockSearchInfo'\n",
"\n",
"res = requests.post(url,cookies=cookie_dict,headers=headers,json=data)\n",
"res = res.json()\n",
"res\n",
" "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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
}
@@ -0,0 +1,112 @@
# 导入库
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import time
import pandas as pd
# 账号密码 -- 需要修改
name = '15888265981'
password = 'F6123456'
driver = webdriver.Chrome(executable_path=r"C:\Users\admin\Desktop\Python脚本\chromedriver.exe")
driver.maximize_window() # 最大化浏览器窗口
real_https = 'https://yunxiu.f6car.cn/' # 正式网址
fake_https = 'https://m-trial.f6car.cn/' # 测试网址
# 打开网页,根据情况更改网址变量
driver.get(real_https)
# 在输入框中输入账号和密码
username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[1]/div/div[1]/input')))
enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[3]/div/button')))
username.clear()
username.send_keys(name)
driver.find_element_by_xpath(r'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
enter.click()
# 等待一点时间,手动选择门店
time.sleep(5)
# 点击基础资料下拉菜单
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="user-nav"]/ul/li[3]/a/span'))).click()
# 点击 数据导入 菜单项
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="user-nav"]/ul/li[3]/ul/li[17]/a'))).click()
# 点击 套餐卡信息
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="content"]/div/div/ul/li[5]/a'))).click()
# 进入框架 iframe -- weixin-page-iframe ,方法1,可行(原等待时间 2 2 1)
time.sleep(0.5)
iframe = driver.find_element_by_xpath(r'//*[@id="weixin-page-iframe"]')
time.sleep(1)
driver.switch_to.frame(iframe)
time.sleep(0.5)
print('已进入iframe 框架')
files_path = r'D:\F6_data\套餐卡导入测试数据\批量导入3'
# 开始批量导入
for file in os.listdir(files_path):
try:
# 找到按钮里的 input 标签
to_input = driver.find_element_by_xpath(r'//*[@id="app"]/div/div/div/div[2]/form/div[1]/div/div/div/div[1]/input')
time.sleep(0.2)
upload_file = os.path.join(files_path,file)
to_input.send_keys(upload_file)
time.sleep(1)
# print(f'已经上传excel文件:{file}')
# 点击 立即导入按钮
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[2]/form/div[1]/div/button/span'))).click()
# 点击 查看导入记录 按钮
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click()
# 检查文件名
upload_file_name = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id="app"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text
time.sleep(0.5)
while upload_file_name != file:
# 关闭再打开 导入记录
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮
time.sleep(1)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click()
time.sleep(1)
upload_file_name = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id="app"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text
print('导入文件已经进入导入记录中!')
# 打印卡导入 状态 信息
succeed_cards = driver.find_element_by_xpath(r'//*[@id="app"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text
time.sleep(0.5)
lost_cards = driver.find_element_by_xpath(r'//*[@id="app"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text
time.sleep(0.5)
print(f'成功卡数:{succeed_cards},失败卡数:{lost_cards}')
while succeed_cards == '' or lost_cards == '':
# 不断的关闭打开 导入记录 ,刷新页面
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮
time.sleep(1)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() # 导入记录
time.sleep(1)
succeed_cards = driver.find_element_by_xpath(r'//*[@id="app"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text
time.sleep(1)
lost_cards = driver.find_element_by_xpath(r'//*[@id="app"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text
time.sleep(1)
print(f'succeed_cards:{succeed_cards},lost_cards:{lost_cards}',end='-')
print()
print('#######################可以导入下一个文件!#######################')
# 关闭 导入记录 窗口
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="app"]/div/div/div/div[3]/div/div[1]/button/i'))).click()
except Exception as e :
print(f'{file} 导入出错')
print(repr(e))
continue
finally:
time.sleep(600) # 如果时间足够的话,保险起见可以多等一会
print('所有文件上传完成!')
time.sleep(1)
# driver.close()
@@ -0,0 +1,40 @@
from numpy import dtype
import pandas as pd
import asyncio
import aiohttp
import sqlalchemy
import time
import requests
cookies_str = 'memberSESSIONID=ae16b0e4-7de3-4de1-b719-413777250fa2; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1716516379,1716602530,1716620891,1717378558; prodOrg=11240984669918002048; unp=15818631886583914510; un=15818631886583914510; _up=-NillNN-qyBEJ--t3vnSknvoOF53zPmLs8wN2306UuRUV_XEppnQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFfQXroIq1AEO9vZRv-ZNHu3M-GTc1pm5E3SppuVTjOMZmVfHOxJvrEj9xx2wrcDUSiQ.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215818631886583914510%22%2C%22first_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0%22%7D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1717379834'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json;charset=UTF-8",
'origin': 'https://yunxiu.f6car.cn'
}
XM=[]
response = requests.get(f'https://yunxiu.f6car.com/member/customer/listForPermission?pageSize=2000&pageNo=1',cookies=cookie_dict)
res=response.json()
le=len(res['data']['data'])
for i in range(0,le):
XM1={}
kehu=res['data']['data'][i]['idCustomer']
XM1['客户ID']=kehu
XM.append(XM1)
df=pd.DataFrame(XM)
df = df.astype('string')
df.drop_duplicates(subset=['客户ID'])
num = 1
for userID in df['客户ID']:
res = requests.delete(f'https://yunxiu.f6car.cn/member/customer/{userID}',cookies=cookie_dict)
num = num + 1
print(num,userID,res.text)
@@ -0,0 +1,27 @@
from numpy import dtype
import pandas as pd
import asyncio
import aiohttp
import sqlalchemy
import time
import requests
cookies_str = 'memberSESSIONID=fdcde7d6-4315-458f-99ee-5012d3813972; sensorsdata2015jssdkcross={"distinct_id":"10691192243902595917","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917728541; unp=15661085929949384773; un=15661085929949384773; _up=-NillNN-qyBEJ--t3vnSknvoOF55y_CNuMgM0XI2Xu5eXvXGoJrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrE_oSrYMj1QUK9_ZRv-ZNHu3M-GTc2J6wFX-tp-9cgO8Tk17HORRsrEj9x2f_jLHZND8.; tmall=false; sensorsdata2015jssdkcross={"distinct_id":"15661085929949384773","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json;charset=UTF-8",
'origin': 'https://yunxiu.f6car.cn'
}
df_data = pd.read_excel(r'C:\Users\admin\Desktop\客户车辆信息.xlsx',sheet_name='Sheet3',dtype='string')
num = 1
for userID in df_data['车辆ID']:
res = requests.delete(f'https://yunxiu.f6car.cn/member/car/deleteCar/{userID}/11769977820724347538',cookies=cookie_dict)
num = num + 1
print(num,userID,res.text)
@@ -0,0 +1,82 @@
import pandas as pd
import time
import requests
import json
import xlrd
cookies_str = 'stockSESSIONID=4e48c8e9-6aad-41d0-9c40-ec0e67c5419e; sensorsdata2015jssdkcross={"distinct_id":"10691192243902595917","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}; gr_user_id=408fef1a-77ed-4e74-8f1e-31dde3446f2e; prodOrg=11240984669917337122; unp=15531725281298481155; un=15531725281298481155; _up=-NillNN-qyBEJ--t3vnSknvoOF56zvCKssgH23o9U-9ZXvDAopzQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbrEPodqY8j1wUI-_dRv-ZNHu3M-GTc25uwEnWtrOVUi-ISlF7CPxZqrEj9k0rY98uxN2Q.; currMenu=下载中心; sensorsdata2015jssdkcross={"distinct_id":"15531725281298481155","first_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"$device_id":"1750b4690af1f6-089dd3a4874eb8-3d634f03-1327104-1750b4690b09d0"}'
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
for item in cookies_str.split('; ')}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',
"Content-Type": "application/json",
'origin': 'https://yunxiu.f6car.cn'
}
#读取excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\Python脚本\图形界面自动化脚本\F6系统常用脚本\怡康街店.xls")
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(1,h):
idMember =table.cell(i, 0).value #卡id
idMember1 =table.cell(i, 1).value #退款金额
idMember2 =table.cell(i, 2).value #退款金额
#读取cardVersion信息并配置退卡data
url = 'https://yunxiu.f6car.cn/marketing/tkdBill/baseInfo?pkId={}'.format(idMember)
resget = requests.get(url,cookies=cookie_dict)
resget = json.loads(resget.text)
cardVersion = resget['data']['cardVersion']
data = {
"cardId": idMember, # 退卡实体id
"cardVersion": cardVersion,
"employeeId": "10979894419857291646", # 退卡服务顾问ID 手动更新
"idOwnOrg": "11240984669917132579", # 门店ID 手动更新
"refundAmount": idMember1, # 退卡金额
"remark": "" # 备注
}
#生成退卡单
res = requests.post(f'https://yunxiu.f6car.cn/marketing/tkdBill/add',
headers=headers,cookies=cookie_dict, json=data)
resdata = res.json().get('data')
#完成收款
data = {
"idOwnOrg": "11240984669917132579",# 门店ID 手动更新
"idOperationOrg": "11240984669917132579",# 退卡门店ID 手动更新
"idSourceBill": resdata,# 退卡单ID
"sourceBillType": "TKD",#类型
"receiptMemo": "",# 备注
"version": cardVersion,
"favourableList": [],
"gatheringFavourable": 0,
"paymentTypeGroupId": "",
"czkList": [],
"paymentList": [
{
"paymentTypeId": "9876312",# 各门店不同 手动更新
"paymentType": "现金",
"paymentAmount": idMember2,
"gatheringType": 0,
"kind": "normal"
}
],
"pkId": 0,
"billType": "YSF",
"domainCode": "SAAS"
}
res = requests.post(f'https://yunxiu.f6car.cn/financial/advance/payment/singleGathering',
headers=headers,cookies=cookie_dict, json=data)
print("打印出响应信息:",res.text)
@@ -0,0 +1,89 @@
# -*- coding:UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd
#获取基础信息
name = '15888265981'
password = 'Ff123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
A = 0
for v in range(0,1000):
try:
http='https://m.f6car.cn/'
#driver = webdriver.Chrome(chrome_options=option_chrome)
driver = webdriver.Chrome(executable_path=r"C:\Users\admin\Desktop\Python脚本\chromedriver.exe")
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
# 在输入框中输入账号和密码
username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[1]/div/div[1]/input')))
enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id="pane-username"]/form/div[3]/div/button')))
username.clear()
username.send_keys(name)
driver.find_element_by_xpath(r'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
enter.click()
time.sleep(10)#预设时间
# driver.find_element_by_xpath("//*[text()='东港市金阳汽车修理修配厂']").click() #点击公司
time.sleep(10)#预设时间
file = xlwt.Workbook()
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
#打开excel文件
data = xlrd.open_workbook(r"C:\Users\admin\Desktop\新建XLS 工作表 (2).xls")
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
for i in range(A,h):
idMember =table.cell(i, 0).value #按行读取数据
# idMembervin =table.cell(i, 1).value #按行读取数据
https='https://yunxiu.f6car.cn/kzf6/member/index.do?page=/view/index.html%23/car/edit/'+idMember #进入页面
driver.get(https)
time.sleep(3)
try:
driver.find_element_by_xpath("//*[text()=' 下一步']").click()
time.sleep(1)
driver.find_element_by_xpath("//*[text()=' 我知道了']").click()
except:
pass
#传值转换
#driver.switch_to.frame('weixin-page-iframe')
driver.find_element_by_xpath('//*[@maxlength="17"]').click() #点击VIN
time.sleep(1)
try:
driver.find_element_by_xpath('//*[@maxlength="4"]').click() #点击车牌
time.sleep(1)
driver.find_element_by_xpath('//*[@maxlength="17"]').click() #点击VIN
except:
pass
try:
driver.find_element_by_xpath(
'/html/body/div[3]/div/div[3]/button[1]/span').click() #点击确定
time.sleep(1)
except:
pass
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(1)
driver.find_element_by_xpath("//*[text()='保存']").click() #点击保存
time.sleep(2)
print(i, idMember)
A = A + 1
except:
driver.close()
A = A + 1
+731
View File
@@ -0,0 +1,731 @@
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "b461eaf2",
"metadata": {},
"source": [
"## 字符集库\n",
"+ zhon 它提供了中文文本处理中常用的常量。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b6dc3dc0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"〇一-鿿㐀-䶿豈-﫿𠀀-𪛟𪜀-𫜿𫝀-𫠟丽-𯨟\n",
""#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、 、〃〈〉《》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏﹑﹔·.!?。。\n"
]
}
],
"source": [
"from zhon import hanzi\n",
"\n",
"# 返回的是中文正则\n",
"print(hanzi.characters)\n",
"\n",
"# 返回所有中文标点符号\n",
"print(hanzi.punctuation)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "66e07ee5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'你好¥%@中文'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import re\n",
"\n",
"re.sub(f'[{hanzi.punctuation}]','','你好¥%@!中文')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "53a28e98",
"metadata": {},
"source": [
"+ string库 提供了常用 英文字符集"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "8507180e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n",
"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\n"
]
},
{
"data": {
"text/plain": [
"'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~ \\t\\n\\r\\x0b\\x0c'"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import string\n",
"\n",
"print(string.ascii_letters) # 所有的字母\n",
"print(string.punctuation) # 返回所有英文标点\n",
"string.printable # 所有可打印字符包含 数字,英文大小写,英文符号,空格,换行符等"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ac6ebde7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['你', '好', '他', '中', '文']"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import re\n",
"\n",
"re.findall(f'[{hanzi.characters}]','你好xxx hello,他中文')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "473d1970-1321-4323-9c98-78cac2d88c68",
"metadata": {},
"outputs": [],
"source": [
"import re\n",
"import pandas as pd\n",
"import numpy as np\n",
"import emoji\n",
"from zhon import hanzi\n",
"import string"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "78520850",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<>:3: SyntaxWarning: invalid escape sequence '\\S'\n",
"<>:3: SyntaxWarning: invalid escape sequence '\\S'\n",
"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\AppData\\Local\\Temp\\ipykernel_36048\\1735783563.py:3: SyntaxWarning: invalid escape sequence '\\S'\n",
" text = re.sub(':\\S+?:', '', text)\n"
]
}
],
"source": [
"def filter_emoji(text):\n",
" # 先过滤 emoji 表情\n",
" text = re.sub(':\\S+?:', '', text)\n",
" # 在过滤其他表情,只保留 数字,中英文,中英文符号,空格\n",
" return re.sub(r'[^{}^{}^{}]'.format(hanzi.characters,hanzi.punctuation,string.printable),'',text)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "2551fd66",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"',{106} 晋JBT717丰田陈平 #19《67》{56} 海湾280晋A513LR长城哈弗H6'"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 测试\n",
"s = \"😃,{106} ★♚♚晋JBT717丰田陈平 #19《67》{56} ★󾓭️海湾280晋A513LR长城哈弗H6\"\n",
"filter_emoji(s)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "dbf763b4",
"metadata": {},
"source": [
"# 处理 Excel 文件"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b8efc024",
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (332018563.py, line 1)",
"output_type": "error",
"traceback": [
"\u001b[1;36m Cell \u001b[1;32mIn[11], line 1\u001b[1;36m\u001b[0m\n\u001b[1;33m curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "282388e6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: pip in d:\\programtools\\anaconda\\lib\\site-packages (24.3.1)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install --upgrade pip"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "70e97daf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: emoji in d:\\programtools\\anaconda\\lib\\site-packages (2.14.0)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install emoji"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "e0d0887b-dbb0-4776-bf46-1ae8787c455c",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "No engine for filetype: 'xls'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mOptionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\io\\excel\\_base.py\u001b[0m in \u001b[0;36m__new__\u001b[1;34m(cls, path, engine, date_format, datetime_format, mode, storage_options, if_sheet_exists, engine_kwargs)\u001b[0m\n\u001b[0;32m 1110\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-> 1111\u001b[1;33m \u001b[0mengine\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_option\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"io.excel.{ext}.writer\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msilent\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\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 1112\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mengine\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m\"auto\"\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\\_config\\config.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwds)\u001b[0m\n\u001b[0;32m 260\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m->\u001b[0m \u001b[0mT\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 261\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__func__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwds\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 262\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\_config\\config.py\u001b[0m in \u001b[0;36m_get_option\u001b[1;34m(pat, silent)\u001b[0m\n\u001b[0;32m 134\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_get_option\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpat\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msilent\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m->\u001b[0m \u001b[0mAny\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 135\u001b[1;33m \u001b[0mkey\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_get_single_key\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msilent\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 136\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\_config\\config.py\u001b[0m in \u001b[0;36m_get_single_key\u001b[1;34m(pat, silent)\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[0m_warn_if_deprecated\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 121\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mOptionError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"No such keys(s): {repr(pat)}\"\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 122\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkeys\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mOptionError\u001b[0m: \"No such keys(s): 'io.excel.xls.writer'\"",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-5-4582534eeafe>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mcolumn\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mcolumn\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mcolumn\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mfilter_emoji\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 18\u001b[1;33m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_excel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mr\"C:\\Users\\admin\\Desktop\\大唛养车总部_Sheet1_6_去除后.xls\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36mto_excel\u001b[1;34m(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, inf_rep, freeze_panes, storage_options)\u001b[0m\n\u001b[0;32m 2250\u001b[0m \u001b[0minf_rep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0minf_rep\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2251\u001b[0m )\n\u001b[1;32m-> 2252\u001b[1;33m formatter.write(\n\u001b[0m\u001b[0;32m 2253\u001b[0m \u001b[0mexcel_writer\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2254\u001b[0m \u001b[0msheet_name\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msheet_name\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\\io\\formats\\excel.py\u001b[0m in \u001b[0;36mwrite\u001b[1;34m(self, writer, sheet_name, startrow, startcol, freeze_panes, engine, storage_options)\u001b[0m\n\u001b[0;32m 932\u001b[0m \u001b[1;31m# error: Cannot instantiate abstract class 'ExcelWriter' with abstract\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 933\u001b[0m \u001b[1;31m# attributes 'engine', 'save', 'supported_extensions' and 'write_cells'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 934\u001b[1;33m writer = ExcelWriter( # type: ignore[abstract]\n\u001b[0m\u001b[0;32m 935\u001b[0m \u001b[0mwriter\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mengine\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mengine\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstorage_options\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mstorage_options\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 936\u001b[0m )\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\pandas\\io\\excel\\_base.py\u001b[0m in \u001b[0;36m__new__\u001b[1;34m(cls, path, engine, date_format, datetime_format, mode, storage_options, if_sheet_exists, engine_kwargs)\u001b[0m\n\u001b[0;32m 1113\u001b[0m \u001b[0mengine\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mget_default_engine\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mext\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"writer\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1114\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\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-> 1115\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"No engine for filetype: '{ext}'\"\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 1116\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1117\u001b[0m \u001b[1;31m# for mypy\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: No engine for filetype: 'xls'"
]
}
],
"source": [
"import re\n",
"import pandas as pd\n",
"import numpy as np\n",
"import emoji\n",
"from zhon import hanzi\n",
"import string\n",
" \n",
"def filter_emoji(text):\n",
" # 先过滤 emoji 表情\n",
" text = re.sub(':\\S+?:', '', text)\n",
" # 在过滤其他表情,只保留 数字,中英文,中英文符号,空格\n",
" return re.sub(r'[^{}^{}^{}]'.format(hanzi.characters,hanzi.punctuation,string.printable),'',text)\n",
"\n",
"\n",
"df = pd.read_excel(r\"C:\\Users\\admin\\Desktop\\大唛养车总部_Sheet1_6.xls\", sheet_name='Sheet1', dtype='string')\n",
"for column in df.columns:\n",
" df[column]=df[column].apply(lambda x: filter_emoji(x) if isinstance(x, str) else x)\n",
"df.to_excel(r\"C:\\Users\\admin\\Desktop\\大唛养车总部_Sheet1_6_去除后.xls\",index=False)\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ff220721",
"metadata": {},
"outputs": [],
"source": [
"old = df['客户姓名']"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "802e9a09",
"metadata": {},
"outputs": [],
"source": [
"# 替换\n",
"\n",
"df['客户姓名'] = df['客户姓名'].apply(filter_emoji)\n",
"df.to_excel('output_remove_emoji.xlsx',index=False)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "55471334",
"metadata": {},
"outputs": [],
"source": [
"new = df['客户姓名']"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c13b60a8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(old != new).sum()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "fee4d084",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Series([], Name: 客户姓名, dtype: object)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"old.loc[old != new]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3dfa1b3d-dbd1-4128-95d4-ad54e43bd7ee",
"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",
" <th>手机号码</th>\n",
" <th>标签</th>\n",
" <th>VIN码</th>\n",
" <th>车身颜色</th>\n",
" <th>备注</th>\n",
" <th>车辆所有人</th>\n",
" <th>发动机号</th>\n",
" <th>...</th>\n",
" <th>会员号</th>\n",
" <th>可用积分</th>\n",
" <th>累计获取积分</th>\n",
" <th>专属门店</th>\n",
" <th>专属顾问</th>\n",
" <th>客户推广员工</th>\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>杨义林</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>宁E5E155</td>\n",
" <td>18395213630</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>LSVCG6C43LN102469</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>...</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>仁合鹏</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>宁DU0512</td>\n",
" <td>15209679692</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>...</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>苏琴</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>宁DP0726</td>\n",
" <td>18409548289</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>LSVUD60N2MN010961</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>...</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>苏彦林</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>宁D5E765</td>\n",
" <td>13995443053</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>...</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>马成</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>宁DBL138</td>\n",
" <td>14795049132</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>...</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>&lt;NA&gt;</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 37 columns</p>\n",
"</div>"
],
"text/plain": [
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 \\\n",
"0 杨义林 <NA> 宁E5E155 18395213630 <NA> LSVCG6C43LN102469 <NA> <NA> <NA> \n",
"1 仁合鹏 <NA> 宁DU0512 15209679692 <NA> <NA> <NA> <NA> <NA> \n",
"2 苏琴 <NA> 宁DP0726 18409548289 <NA> LSVUD60N2MN010961 <NA> <NA> <NA> \n",
"3 苏彦林 <NA> 宁D5E765 13995443053 <NA> <NA> <NA> <NA> <NA> \n",
"4 马成 <NA> 宁DBL138 14795049132 <NA> <NA> <NA> <NA> <NA> \n",
"\n",
" 发动机号 ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 <NA> ... <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> \n",
"1 <NA> ... <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> \n",
"2 <NA> ... <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> \n",
"3 <NA> ... <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> \n",
"4 <NA> ... <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> \n",
"\n",
"[5 rows x 37 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "17e9c41c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
"Collecting cowsay\n",
" Downloading https://pypi.tuna.tsinghua.edu.cn/packages/6b/b8/9f497fd045d74fe21d91cbe8debae0b451229989e35b539d218547d79fc6/cowsay-5.0.tar.gz (25 kB)\n",
" Preparing metadata (setup.py): started\n",
" Preparing metadata (setup.py): finished with status 'done'\n",
"Building wheels for collected packages: cowsay\n",
" Building wheel for cowsay (setup.py): started\n",
" Building wheel for cowsay (setup.py): finished with status 'done'\n",
" Created wheel for cowsay: filename=cowsay-5.0-py2.py3-none-any.whl size=25707 sha256=6f5c2b68adcfbcf789f1904146a473ad977272737279c74167e6726335c6e89a\n",
" Stored in directory: c:\\users\\杨国栋\\appdata\\local\\pip\\cache\\wheels\\26\\07\\b6\\ce0395a0094046669a36aa4995af91f543476d725b9b2baccc\n",
"Successfully built cowsay\n",
"Installing collected packages: cowsay\n",
"Successfully installed cowsay-5.0\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install cowsay"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b84d6cb7",
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'cowsay'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-1-cde26d015784>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mcowsay\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mcowsay\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdaemon\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'哈哈哈'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'cowsay'"
]
}
],
"source": [
"import cowsay\n",
"cowsay.daemon('哈哈哈111')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "c89a5d5b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
"Collecting freegames\n",
" Downloading https://pypi.tuna.tsinghua.edu.cn/packages/b9/22/3da53ac5d408c88ce53c589eb5a7a0e18cccdd6a8b0be40616635db18ca3/freegames-2.5.3-py3-none-any.whl (112 kB)\n",
" -------------------------------------- 112.8/112.8 kB 1.6 MB/s eta 0:00:00\n",
"Installing collected packages: freegames\n",
"Successfully installed freegames-2.5.3\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install freegames"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "1df1bc35",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import os\n",
"# 查看所有游戏名称\n",
"os.system('python -m freegames list')\n",
"# 运行指定游戏\n",
"os.system('python -m freegames.snake')\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9634389d",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "invalid literal for int() with base 16: 'ð\\xa0\\x93¾'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_10260/1880065888.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mencoded_str\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'\\xF0\\xA0\\x93\\xBE'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdecoded_str\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mchr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mencoded_str\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m16\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[0m\u001b[0;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdecoded_str\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: invalid literal for int() with base 16: 'ð\\xa0\\x93¾'"
]
}
],
"source": [
"encoded_str = '\\xF0\\xA0\\x93\\xBE'\n",
"decoded_str = chr(int(encoded_str, 16))\n",
"print(decoded_str)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
File diff suppressed because it is too large Load Diff
+118
View File
@@ -0,0 +1,118 @@
# -*- coding:UTF-8 -*-
# 功能:F6系统页面会员卡退卡操作
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver import ActionChains
import time
import xlrd
import xlwt
import re
from xlutils.copy import copy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import datetime
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#获取会员卡基础信息
name = '15596363210'
password = 'Aa123456'
option_chrome = webdriver.ChromeOptions()
option_chrome.add_argument('--headless')
http='https://m.f6car.cn/'
#进入链接获取json
#driver = webdriver.Chrome(chrome_options=option_chrome)
#driver = webdriver.Chrome(chrome_options=option_chrome)
chrom_dirverpath = "D:\ProgramTools\chromedriver-win64\chromedriver.exe"
# chrome_options = Options()
# chrome_options.add_argument("--headless")
service = Service(executable_path=f'{chrom_dirverpath}')
driver = Chrome(service=service)
driver.maximize_window()
driver.implicitly_wait(2)
driver.get(http)
driver.find_element(By.XPATH,'//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
driver.find_element(By.XPATH,'//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
driver.find_element(By.XPATH,'//*[@id="pane-username"]/form/div[3]/div/button/span').click()
# 多店模式需要下面一行代码
# WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div[2]/div[1]/div[1]/div[2]/div/div/div[2]/div[2]/div/div[1]/div/div[6]/p[1]'))).click()
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[3]/div/div[1]/button"))).click()
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, '//*[@id="subMain"]/div/div[3]/div[1]/div[1]/div/span[2]'))).click()
# driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[1]/div/div/input').send_keys(name)
# driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[2]/div/div[1]/input').send_keys(password)
# driver.find_element_by_xpath('//*[@id="pane-username"]/form/div[3]/div/button/span').click()
time.sleep(15)#预设时间
# 新建一个excel文件
file = xlwt.Workbook() # 注意这里的Workbook首字母是大写,无语吧
# 新建sheet
table = file.add_sheet('sheet name', cell_overwrite_ok=True)
if 1==1:
he = 0
hen = 0
heng = 0
hang = 0
len = 0
#获取所有内容
#打开excel文件
data = xlrd.open_workbook(r'D:\Idea Project\F6+宜搭+其它(1)\new\文件输出\Excel通用存储位置 - 副本.xls')
print(data)
table = data.sheet_by_index(0) # 通过索引顺序获取
h = table.nrows
l = table.ncols
print(u"表数据的行数为%s,列数为%s"%(h,l))
#获取卡项目
for i in range(0,h):
try:
starttime = datetime.datetime.now()
idMember =table.cell(i, 0).value #按行读取数据
receiveAmount = table.cell(i, 1).value # 按行读取数据
https='https://yunxiu.f6car.cn/kzf6/consumeBill/index.do?page=view/index.html%23/memberCard/tkdAdd&cardId='+idMember
#http = 'https://yunxiu-trial.f6car.cn/kzf6/payment/toGathering.do?idSourceBill=' + idMember + '&billType=TKD'
#进入链接获取json
driver.get(https)
#传值转换
#driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="app"]/div[2]/div[2]/div/section[2]/div[2]/div[2]/div[1]/div/div/input').send_keys(receiveAmount)
#driver.find_element_by_xpath(
#'//*[@id="app"]/div[2]/div[2]/div/section[2]/div[2]/div[2]/div[3]/div/div/input').send_keys(onename)
# 通过父类进行定位
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="app"]/div[2]/div[2]/div/section[2]/div[2]/div[2]/div[3]/div/div[1]/input').click()
time.sleep(0.5)
driver.find_element_by_xpath('/html/body/div[3]/div[3]/div[1]/ul/li[9]/span').click()
time.sleep(0.5)
# 进入结算
''
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/section[3]/div/button[1]/span').click()
time.sleep(1)
try:
driver.find_element_by_xpath('/html/body/div[3]/div/div[3]/button[1]/span').click()
time.sleep(0.5)
except:
len = 1
# 第四次切换
#driver.switch_to.frame('weixin-page-iframe')
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div/div/div[2]/div').click()
time.sleep(0.5)
driver.find_element_by_xpath(
'//*[@id="app"]/div/div/div/div/div/div[3]/div/div/button[1]/span').click()
time.sleep(0.5)
endtime = datetime.datetime.now()
implement = (endtime - starttime).seconds
print(i,idMember, implement )
except:
print('失败')
continue
@@ -0,0 +1,214 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 车辆信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from numpy import dtype\n",
"import pandas as pd\n",
"import asyncio\n",
"import aiohttp\n",
"import sqlalchemy\n",
"import time\n",
"import requests\n",
"headers = {\n",
" 'Accept': 'application/json, text/plain, */*',\n",
" 'Accept-Encoding' : 'gzip, deflate, br',\n",
" 'Accept-Language' : 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',\n",
" 'Authorization' : 'Jekun 0019005:n8S1k6pX0z:Q/JK0CyyM3AzyR+uI4RjR9JZI9g=',\n",
" 'Cache-Control' : 'no-cache',\n",
" 'Entity-Date' : 'Thu, 04 Jan 2024 04:02:22 GMT',\n",
" 'Entity-Length' : '0',\n",
" 'Host' : 'business-api.jekunauto.com',\n",
" 'Origin' : 'https://fnstore.jekunauto.com',\n",
" 'Postcode' : 'M021001A0144',\n",
" 'Pragma' : 'no-cache',\n",
" 'Referer' : 'https://fnstore.jekunauto.com/',\n",
" 'Sec-Ch-Ua' : '\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"',\n",
" 'Sec-Ch-Ua-Mobile' : '?0',\n",
" 'Sec-Ch-Ua-Platform' : '\"Windows\"',\n",
" 'Sec-Fetch-Dest' : 'empty',\n",
" 'Sec-Fetch-Mode' : 'cors',\n",
" 'Sec-Fetch-Site' : 'same-site',\n",
" 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'\n",
"}\n",
"# 创建一个空的dataframe\n",
"df = pd.DataFrame()\n",
"\n",
"for i in range(1,20):\n",
" api = f'https://business-api.jekunauto.com/v1/car-archive/admin-index?query=%7B%22filter%22:%7B%22and%22:[]%7D,%22perPage%22:100,%22sort%22:%22-createdAt%22,%22page%22:{i}%7D&fields=id,vendorName,vendorCode,carLicense,mobileStr,vin,carModel,carModel.carBrandName,carModel.carSeriesName,carModel.modelName,carModel.jekunModelCode,identifyFlagLabel,unitClient,unitClient.clientName,unitClient.clientName,annualCardBeautyFlagLabel,annualCardMaintainFlagLabel,insuranceFlagLabel,maintainFlagLabel,storeName,updatedAt,createdAt,jekunModelCode,identifyFlag,failureStatusLabel,failureStatus,failureCauseLabel0'\n",
" res = requests.get(api,headers=headers)\n",
" print(res.text)\n",
" # 遍历res.json()['data']中的每个元素\n",
" for a in range(0, len(res.json()['data'])):\n",
" # 将遍历的元素添加到dataframe中\n",
" df = df._append(res.json()['data'][a], ignore_index=True)\n",
" \n",
"df = df.drop_duplicates(subset='id')\n",
"df.to_excel(r\"C:\\Users\\admin\\Desktop\\车辆信息.xlsx\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 库存信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from numpy import dtype\n",
"import pandas as pd\n",
"import asyncio\n",
"import aiohttp\n",
"import sqlalchemy\n",
"import time\n",
"import requests\n",
"headers = {\n",
" 'Accept': 'application/json',\n",
" 'Accept-Encoding': 'gzip, deflate, br',\n",
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',\n",
" 'Cache-Control': 'no-cache',\n",
" 'Content-Length': '430',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Ngsw-Bypass': 'true',\n",
" 'Origin': 'https://fnstore.jekunauto.com',\n",
" 'Pragma': 'no-cache',\n",
" 'Referer': 'https://fnstore.jekunauto.com/erp/',\n",
" 'Sec-Ch-Ua': '\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"',\n",
" 'Sec-Ch-Ua-Mobile': '?0',\n",
" 'Sec-Ch-Ua-Platform': '\"Windows\"',\n",
" 'Sec-Fetch-Dest': 'empty',\n",
" 'Sec-Fetch-Mode': 'cors',\n",
" 'Sec-Fetch-Site': 'same-origin',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'\n",
"}\n",
"# 创建一个空的dataframe\n",
"df = pd.DataFrame()\n",
"\n",
"for i in range(0,30):\n",
" api = 'https://fnstore.jekunauto.com/erp/router'\n",
"\n",
" data_json = {\n",
" \"body\": \"{\\\"noSum\\\":true,\\\"condition\\\":[{\\\"field\\\":\\\"USABLE_QTY_T\\\",\\\"operator\\\":\\\"EQ\\\",\\\"value\\\":\\\"0\\\"},{\\\"field\\\":\\\"CONDI_STOP_LOCATION\\\",\\\"operator\\\":\\\"EQ\\\",\\\"value\\\":\\\"true\\\"}],\\\"size\\\":50,\\\"page\\\":\" + str(i) + \",\\\"queryid\\\":\\\"stock.query\\\",\\\"customAction\\\":false,\\\"customQuery\\\":false}\",\n",
" \"method\": \"pub.query\",\n",
" \"appKey\": \"00001\",\n",
" \"version\": \"1.0\",\n",
" \"sessionId\": \"3fc5a90b8ab46915c2d0914fe2a0cec3\",\n",
" \"sign\": \"3ADF7E1243BAAA1F731247CFDEADC71A70548D6C\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers,json=data_json)\n",
" print(res.text)\n",
" # 遍历res.json()['data']中的每个元素\n",
" for a in range(0, len(res.json()['body']['content'])):\n",
" # 将遍历的元素添加到dataframe中\n",
" df = df._append(res.json()['body']['content'][a], ignore_index=True)\n",
" \n",
"df = df.drop_duplicates(subset='ID')\n",
"df.to_excel(r\"C:\\Users\\admin\\Desktop\\库存信息.xlsx\")\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 历史维修记录"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from numpy import dtype\n",
"import pandas as pd\n",
"import asyncio\n",
"import aiohttp\n",
"import sqlalchemy\n",
"import time\n",
"import requests\n",
"headers = {\n",
" 'Accept': 'application/json',\n",
" 'Accept-Encoding': 'gzip, deflate, br',\n",
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',\n",
" 'Cache-Control': 'no-cache',\n",
" 'Content-Length': '430',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Ngsw-Bypass': 'true',\n",
" 'Origin': 'https://fnstore.jekunauto.com',\n",
" 'Pragma': 'no-cache',\n",
" 'Referer': 'https://fnstore.jekunauto.com/erp/',\n",
" 'Sec-Ch-Ua': '\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"',\n",
" 'Sec-Ch-Ua-Mobile': '?0',\n",
" 'Sec-Ch-Ua-Platform': '\"Windows\"',\n",
" 'Sec-Fetch-Dest': 'empty',\n",
" 'Sec-Fetch-Mode': 'cors',\n",
" 'Sec-Fetch-Site': 'same-origin',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'\n",
"}\n",
"\n",
"# 创建一个空的dataframe\n",
"df = pd.DataFrame()\n",
"\n",
"for i in range(0,30):\n",
" api = 'https://fnstore.jekunauto.com/erp/router'\n",
"\n",
" data_json = {\n",
" \"body\": \"{\\\"noSum\\\":true,\\\"condition\\\":[{\\\"field\\\":\\\"CREATE_DATE\\\",\\\"operator\\\":\\\"GTE\\\",\\\"value\\\":\\\"2023-12-29 00:00:00\\\",\\\"type\\\":\\\"date\\\"},{\\\"field\\\":\\\"CREATE_DATE\\\",\\\"operator\\\":\\\"LTE\\\",\\\"value\\\":\\\"2024-01-04 23:59:59\\\",\\\"type\\\":\\\"date\\\"}],\\\"size\\\":50,\\\"page\\\":\" + str(i) + \",\\\"queryid\\\":\\\"fnWorkOrder.query\\\",\\\"customAction\\\":false,\\\"customQuery\\\":false}\",\n",
" \"method\": \"pub.query\",\n",
" \"appKey\": \"00001\",\n",
" \"version\": \"1.0\",\n",
" \"sessionId\": \"60d3f8c7ffe5ca815bcd57fdb87c13b6\",\n",
" \"sign\": \"DB960DAFACF9F5CDAB1BB26BE26B989AD4D2BB92\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers,json=data_json)\n",
" print(res.text)\n",
" # 遍历res.json()['data']中的每个元素\n",
" for a in range(0, len(res.json()['body']['content'])):\n",
" # 将遍历的元素添加到dataframe中\n",
" df = df._append(res.json()['body']['content'][a], ignore_index=True)\n",
" \n",
"df.to_excel(r\"C:\\Users\\admin\\Desktop\\历史维修记录.xlsx\")\n",
" "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,750 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 获取项目信息:pkId、infoId、name"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-16T01:41:05.810989Z",
"start_time": "2025-07-16T01:41:05.508353Z"
}
},
"source": [
"# 获取项目信息:pkId、infoId、name\n",
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'f6-ids-goodsSESSIONID=9f24d30a-336b-4e88-adb3-4b183de53f2d; erpLanguage=zh-CN; prodOrg=11240984669917217520; unp=15865484595890778191; _up=-NillNN-qyBEJ--t3vnSknvoOF53y_SJuMkA2n43U-daUfnArpjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfESq4Im0wYL-_BRv-ZNHu3M-GTc1p60EX-sq-RQgeIal1HLPxpurEj9-k7898i3PR0.; tmall=false; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215865484595890778191%22%2C%22first_id%22%3A%221928984bbc1271-065c3758008fd68-4c657b58-1327104-1928984bbc213fe%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221928984bbc1271-065c3758008fd68-4c657b58-1327104-1928984bbc213fe%22%7D'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
"}\n",
"try:\n",
" url = 'https://ids-goods.f6car.cn/f6-ids-goods/service/getServiceList'\n",
" data = {\n",
" \"param\": \"\",\n",
" \"name\": \"\",\n",
" \"customCode\": \"\",\n",
" \"currentPage\": 1,\n",
" \"pageSize\": 20,\n",
" \"isDel\": 0,\n",
" \"idOwnOrg\": \"11240984669917217520\"\n",
" }\n",
" all_data = []\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers,json=data)\n",
" res = res.json()\n",
" for i in range(len(res['data']['records'])):\n",
" print(res['data']['records'][i]['name'],\"@\",res['data']['records'][i]['infoId'],\"@\",res['data']['records'][i]['pkId'])\n",
" # print(res['data']['records'][i]['name'])\n",
" all_data.append({\"name\":res['data']['records'][i]['name'],\"infoId\":res['data']['records'][i]['infoId'],\"pkId\":res['data']['records'][i]['pkId']})\n",
" df = pd.DataFrame(all_data)\n",
" df.to_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\卡id表.xlsx\",index=False)\n",
"except:\n",
" pass"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"修小灯线路 @ 14582097883002123023 @ 1307770869\n",
"更换分动箱油 @ 14582097883002122841 @ 1307770687\n",
"更换前挡风玻璃 @ 14582097883002122740 @ 1307770586\n",
"更换下摆臂球头 @ 14582097883002122870 @ 1307770716\n",
"拆装普通座垫座椅套(水洗) @ 14582097883002123033 @ 1307770879\n",
"更换倒车影像摄像头 @ 14582097883002122989 @ 1307770835\n",
"清洗车厢 @ 14582097883002122991 @ 1307770837\n",
"后门(拆装) @ 14582097883002123011 @ 1307770857\n",
"全车去污打蜡 @ 14582097883002123013 @ 1307770859\n",
"换右倒车镜支架 @ 14582097883002123017 @ 1307770863\n",
"换左右大灯灯泡 @ 14582097883002123024 @ 1307770870\n",
"拆装传动轴,修漏油 @ 14582097883002123027 @ 1307770873\n",
"右后门整形 拆装门把手 @ 14582097883002123036 @ 1307770882\n",
"全车燃油管路清洗 @ 14582097883002122967 @ 1307770813\n",
"钢圈修复喷漆 @ 14582097883002122968 @ 1307770814\n",
"右前叶子板钣金 油漆 @ 14582097883002122973 @ 1307770819\n",
"更换钢圈4只 @ 14582097883002122974 @ 1307770820\n",
"后骨架(修复) @ 14582097883002122979 @ 1307770825\n",
"去厂里开车,换半轴螺丝 @ 14582097883002122985 @ 1307770831\n",
"更换前刹车感应线 @ 14582097883002122987 @ 1307770833\n"
]
}
],
"execution_count": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 判断项目是否可以停用"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-16T01:33:19.557223Z",
"start_time": "2025-07-16T01:33:19.513454Z"
}
},
"source": [
"# 判断项目是否可以停用\n",
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'f6-ids-goodsSESSIONID=9f24d30a-336b-4e88-adb3-4b183de53f2d; erpLanguage=zh-CN; prodOrg=11240984669917217520; unp=15865484595890778191; _up=-NillNN-qyBEJ--t3vnSknvoOF53y_SJuMkA2n43U-daUfnArpjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfESq4Im0wYL-_BRv-ZNHu3M-GTc1p60EX-sq-RQgeIal1HLPxpurEj9-k7898i3PR0.; tmall=false; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215865484595890778191%22%2C%22first_id%22%3A%221928984bbc1271-065c3758008fd68-4c657b58-1327104-1928984bbc213fe%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221928984bbc1271-065c3758008fd68-4c657b58-1327104-1928984bbc213fe%22%7D'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
"}\n",
"try:\n",
" df = pd.read_excel(r'C:\\Users\\admin\\Desktop\\项目信息.xls',sheet_name='Sheet1',dtype='string')\n",
" url = 'https://ids-goods.f6car.cn/f6-ids-goods/service/validateDisableBatch'\n",
" for da in df.values:\n",
" data = {\n",
" \"infoId\": da[1],\n",
" \"orgIdList\": [\n",
" \"11240984669917217520\",\n",
" \"11240984669917400547\"\n",
" ],\n",
" \"idOwnOrg\": \"11240984669917217520\"\n",
" }\n",
"\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers,json=data)\n",
" res = res.json()\n",
" print(res['data']['message'],\"@\",da[1],\"@\",da[0])\n",
"except:\n",
" pass"
],
"outputs": [],
"execution_count": 3
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"项目被占用(),无法停用。 @ 10545724654279931712 @ 右后轮眉更换\n",
"项目被占用(),无法停用。 @ 14582097882948268689 @ 洗车19.9\n",
"项目被占用(),无法停用。 @ 14582097882906592123 @ 更换左后上弯臂\n",
"项目被占用(),无法停用。 @ 14582097882956021695 @ 右前轮毂喷漆\n",
"项目被占用(),无法停用。 @ 10545055918001050943 @ 更换右前减震\n",
"项目被占用(),无法停用。 @ 10545511425564168145 @ 更换前轮刹车片\n",
"项目被占用(),无法停用。 @ 10545511425557031323 @ 前杠左侧喷漆\n",
"项目被占用(),无法停用。 @ 10545724654275399828 @ 更换传动轴轴承\n",
"项目被占用(),无法停用。 @ 14582097882985597617 @ 更换右后座位头枕\n",
"项目被占用(),无法停用。 @ 14582097882982161528 @ 更换前大梁头\n",
"项目被占用(),无法停用。 @ 14582097882981542129 @ 更换左前钢圈\n",
"项目被占用(),无法停用。 @ 14582097882979756450 @ 前桥左右和二桥右边轮子保养\n",
"项目被占用(),无法停用。 @ 14582097882979757927 @ 更换前轮左右轮芯工时\n",
"项目被占用(),无法停用。 @ 14582097882976982509 @ 右后尾灯底座修复\n",
"项目被占用(),无法停用。 @ 14582097882975656435 @ 左后钢圈喷漆\n",
"项目被占用(),无法停用。 @ 14582097882975369529 @ 换发动机胶垫\n",
"项目被占用(),无法停用。 @ 14582097882974004876 @ 更换行驶记录仪\n",
"项目被占用(),无法停用。 @ 14582097882973941047 @ 铆刹车片工时\n",
"项目被占用(),无法停用。 @ 14582097882973361505 @ 修复车门工时\n",
"项目被占用(),无法停用。 @ 14582097882972520656 @ 更换柴滤工时\n",
"项目被占用(),无法停用。 @ 14582097882972382531 @ 外请临时工\n",
"项目被占用(),无法停用。 @ 14582097882971272962 @ 离合器总泵\n",
"项目被占用(),无法停用。 @ 14582097882971249425 @ 更换节温器总成\n",
"项目被占用(),无法停用。 @ 14582097882971246520 @ 政策外出路费\n",
"项目被占用(),无法停用。 @ 14582097882971247383 @ 更换钢圈总成\n",
"项目被占用(),无法停用。 @ 14582097882971193450 @ 更换继动阀工时\n",
"项目被占用(),无法停用。 @ 14582097882969231004 @ 左后门亮条喷漆\n",
"项目被占用(),无法停用。 @ 14582097882969230951 @ 左前门亮条喷漆\n",
"项目被占用(),无法停用。 @ 14582097882969136754 @ 更换右前门升降器\n",
"项目被占用(),无法停用。 @ 14582097882968621426 @ 左前钢盆修复\n",
"项目被占用(),无法停用。 @ 14582097882968472255 @ 更换差速器分总成\n",
"项目被占用(),无法停用。 @ 14582097882968472851 @ 更换横拉杆总成\n",
"项目被占用(),无法停用。 @ 14582097882968468778 @ 更换继电器总成\n",
"项目被占用(),无法停用。 @ 14582097882968463673 @ 更换点火开关壳体\n",
"项目被占用(),无法停用。 @ 14582097882968459140 @ 更换转向闪光器\n",
"项目被占用(),无法停用。 @ 14582097882968460029 @ 更换积水杯部件\n",
"项目被占用(),无法停用。 @ 14582097882968384576 @ 修复差速器锁工时\n",
"项目被占用(),无法停用。 @ 14582097882966191574 @ 做后防撞梁\n",
"项目被占用(),无法停用。 @ 14582097882965544115 @ 更换脚制动开关\n",
"项目被占用(),无法停用。 @ 14582097882965512273 @ 修复电动加热泵工时\n",
"项目被占用(),无法停用。 @ 14582097882965505399 @ 更换转向油罐工时\n",
"项目被占用(),无法停用。 @ 14582097882965255628 @ 更换左前轮毂\n",
"项目被占用(),无法停用。 @ 14582097882963564165 @ 左前门饰板拆装\n",
"项目被占用(),无法停用。 @ 14582097882963518124 @ 拔左右后轮及铆刹车片\n",
"项目被占用(),无法停用。 @ 14582097882963520133 @ 后轮保养及铆左右刹车片\n",
"项目被占用(),无法停用。 @ 14582097882963459588 @ 吊货箱更换横梁 修复货箱边门及尾门\n",
"项目被占用(),无法停用。 @ 14582097882963305841 @ 轮毂修复\n",
"项目被占用(),无法停用。 @ 10545724654281037397 @ 模块数据匹配(外修陈勇))\n",
"项目被占用(),无法停用。 @ 10545724654281153604 @ 更换水箱(含拆装龙门架)\n",
"项目被占用(),无法停用。 @ 10545724654290317154 @ 更换倒车灯泡\n",
"项目被占用(),无法停用。 @ 10545724654296806216 @ 右后墙板修复\n",
"项目被占用(),无法停用。 @ 10545724654300811872 @ 二级维护\n",
"项目被占用(),无法停用。 @ 10546172455157840560 @ 四轮定位(十月活动)\n",
"项目被占用(),无法停用。 @ 10546443563727748428 @ 更换右前饰条\n",
"项目被占用(),无法停用。 @ 10546443563727752088 @ 更换方向内拉杆\n",
"项目被占用(),无法停用。 @ 10546443563727930419 @ 拆装阳角\n",
"项目被占用(),无法停用。 @ 14582097882805684427 @ 右后尾灯折装\n",
"项目被占用(),无法停用。 @ 14582097882946038161 @ 更换点火锁\n",
"项目被占用(),无法停用。 @ 14582097882950757235 @ 拖车费,吊车费\n",
"项目被占用(),无法停用。 @ 14582097882952862328 @ 外出费\n",
"项目被占用(),无法停用。 @ 14582097882952871921 @ 更换中间下支架\n",
"项目被占用(),无法停用。 @ 10545511425566832670 @ 前杠左角补漆\n",
"项目被占用(),无法停用。 @ 10545724654285346340 @ 左前杠点漆\n",
"项目被占用(),无法停用。 @ 10546443563663149539 @ 清理蒸发箱树叶\n",
"项目被占用(),无法停用。 @ 10546443563729948343 @ 更换左前玻璃外压条\n",
"项目被占用(),无法停用。 @ 10545511425560665495 @ 更换暖风水管\n",
"项目被占用(),无法停用。 @ 10545724654290833880 @ 配钥匙\n",
"项目被占用(),无法停用。 @ 14582097882903317285 @ 洗车(240会员卡)\n",
"项目被占用(),无法停用。 @ 14582097882912817587 @ 享洗车会员价19.9/每次\n",
"项目被占用(),无法停用。 @ 10545511425557736542 @ 更换变速箱脚胶\n",
"项目被占用(),无法停用。 @ 10545724654281665851 @ 更换左右后尾灯灯泡\n",
"项目被占用(),无法停用。 @ 10545724654289174771 @ 右前叶子板调校\n",
"项目被占用(),无法停用。 @ 10546172455199439157 @ 更换发动机右下机脚㬵\n",
"项目被占用(),无法停用。 @ 10546172455215192927 @ 更换左后缓冲胶\n",
"项目被占用(),无法停用。 @ 10546443563730705973 @ 拆装冷疑器(定损)\n",
"项目被占用(),无法停用。 @ 10546443563847477189 @ 更换前左右上支臂\n",
"项目被占用(),无法停用。 @ 10691192243930556310 @ 更换叶子板亮条60\n",
"项目被占用(),无法停用。 @ 14582097882805897089 @ 四轮调换\n",
"项目被占用(),无法停用。 @ 14582097882946632271 @ 左前缸盆修复\n",
"项目被占用(),无法停用。 @ 10907434497424391401 @ 检查ABS泵\n",
"项目被占用(),无法停用。 @ 10545511425557443579 @ 更换前油封\n",
"项目被占用(),无法停用。 @ 10545724654274589427 @ 右前喷水盖喷漆\n",
"项目被占用(),无法停用。 @ 10545724654278623763 @ 左后门喷漆(大地钣喷)\n",
"项目被占用(),无法停用。 @ 10545724654280586397 @ 更换波箱脚胶\n",
"项目被占用(),无法停用。 @ 10545724654282888439 @ 更换右前轮包\n",
"项目被占用(),无法停用。 @ 10545724654282888951 @ 右A柱更换\n",
"项目被占用(),无法停用。 @ 10545724654285115446 @ 水箱盖待检\n",
"项目被占用(),无法停用。 @ 10545724654292005396 @ 更换发动机线束\n",
"项目被占用(),无法停用。 @ 10546443563659258275 @ 保养(十月活动)\n",
"项目被占用(),无法停用。 @ 10546443563737692103 @ 左门坎装饰条喷漆\n",
"项目被占用(),无法停用。 @ 10546443563797174405 @ 后围修复\n",
"项目被占用(),无法停用。 @ 10546443563960950345 @ 车内消毒杀菌\n",
"项目被占用(),无法停用。 @ 10546443563839261387 @ 更换暖水管\n",
"项目被占用(),无法停用。 @ 10545511425564195980 @ 更换左右后减震\n",
"项目被占用(),无法停用。 @ 10545724654274296923 @ 更换两前减震\n",
"项目被占用(),无法停用。 @ 14582097882929661289 @ 更换仪表台面板\n",
"项目被占用(),无法停用。 @ 10545724654282553613 @ 代办审车(含租胎)\n",
"项目被占用(),无法停用。 @ 10545724654282883895 @ 右B柱喷漆\n",
"项目被占用(),无法停用。 @ 14582097882893098531 @ 更换右前转向内外拉杆\n",
"项目被占用(),无法停用。 @ 10545511425556138510 @ 拆装排气管\n",
"项目被占用(),无法停用。 @ 10545724654288792038 @ 更换变速箱电脑版\n",
"项目被占用(),无法停用。 @ 10545724654289173305 @ 修复右龙门架\n",
"项目被占用(),无法停用。 @ 10545724654289176812 @ 右龙门架补漆\n",
"项目被占用(),无法停用。 @ 10545724654299965084 @ 铆钉\n",
"项目被占用(),无法停用。 @ 10546172455187761276 @ 更换左右内衬\n",
"项目被占用(),无法停用。 @ 10546172455194884265 @ 更换前半轴防尘套\n",
"项目被占用(),无法停用。 @ 10546172455200788745 @ 更换大灯喷水电机\n",
"项目被占用(),无法停用。 @ 10546172455216858006 @ 钢圈外修\n",
"项目被占用(),无法停用。 @ 10546443563727750760 @ 更换方向外拉杆\n",
"项目被占用(),无法停用。 @ 14582097882952663941 @ 更换缓速器油\n",
"项目被占用(),无法停用。 @ 10545724654280341945 @ 更换钥匙\n",
"项目被占用(),无法停用。 @ 10546443563667541586 @ 玻璃水(会员卡)\n",
"项目被占用(),无法停用。 @ 10546443563915445219 @ 更换涡轮增压\n",
"项目被占用(),无法停用。 @ 14582097882883443000 @ 更换转向节\n",
"项目被占用(),无法停用。 @ 14582097882954197588 @ 更换方向机防尘套\n",
"项目被占用(),无法停用。 @ 10545724654278307702 @ 更换发动机脚胶\n",
"项目被占用(),无法停用。 @ 14582097882806418579 @ 更换左后侧围\n",
"项目被占用(),无法停用。 @ 10545360218999990120 @ 更换平衡杆胶套\n",
"项目被占用(),无法停用。 @ 10545724654282883743 @ 右门框喷漆\n",
"项目被占用(),无法停用。 @ 10545724654278616972 @ 左门框修复\n",
"项目被占用(),无法停用。 @ 14582097882887653489 @ 更换前杠下骨架\n",
"项目被占用(),无法停用。 @ 14582097882954423221 @ 做底盘首保工时费\n",
"项目被占用(),无法停用。 @ 14582097882954427268 @ 夜间补助\n",
"项目被占用(),无法停用。 @ 14582097882958827366 @ 更换牙箱\n",
"项目被占用(),无法停用。 @ 10545724654281885857 @ 右后门磨砂板喷漆\n",
"项目被占用(),无法停用。 @ 10546172455176614123 @ 更换左右前减震角胶\n",
"项目被占用(),无法停用。 @ 10546172455199439867 @ 更换发动机左下机脚㬵\n",
"项目被占用(),无法停用。 @ 10546172455200904062 @ 更换变速箱壳体\n",
"项目被占用(),无法停用。 @ 10546443563728391493 @ 更换蒸发箱温度传感器\n",
"项目被占用(),无法停用。 @ 10546443563840519154 @ 更换前杠中段\n",
"项目被占用(),无法停用。 @ 14582097882917655347 @ 更换防冻液水管\n",
"项目被占用(),无法停用。 @ 14582097882917956976 @ 右前钢盆拆装\n",
"项目被占用(),无法停用。 @ 14582097882948252576 @ 洗车(开业活动)\n",
"项目被占用(),无法停用。 @ 14582097882950538956 @ 右前雾灯框喷漆\n",
"项目被占用(),无法停用。 @ 14582097882950743187 @ 更换 轴乘\n",
"项目被占用(),无法停用。 @ 14582097882952865425 @ 更换中后桥支架\n",
"项目被占用(),无法停用。 @ 14582097882952865820 @ 更换后挡泥板\n",
"项目被占用(),无法停用。 @ 10545478359239208540 @ 右前大梁修复\n",
"项目被占用(),无法停用。 @ 10545511425564206671 @ 更换方向助力油管\n",
"项目被占用(),无法停用。 @ 10545724654279296729 @ 更换电磁阀工时\n",
"项目被占用(),无法停用。 @ 10545724654280341631 @ 年审代办\n",
"项目被占用(),无法停用。 @ 10545724654282891356 @ 右后纵梁修复\n",
"项目被占用(),无法停用。 @ 10546443563659794320 @ 更换前平面轴承和顶胶\n",
"项目被占用(),无法停用。 @ 10546443563904136506 @ 更换左前遮阳板\n",
"项目被占用(),无法停用。 @ 10546443563951183841 @ 更换风圈\n",
"项目被占用(),无法停用。 @ 10546443563960947625 @ 臭氧消毒\n",
"项目被占用(),无法停用。 @ 14582097882802599425 @ 更换右前座椅\n",
"项目被占用(),无法停用。 @ 10545491164348667828 @ 更换右前门内拉手\n",
"项目被占用(),无法停用。 @ 10546443563730058429 @ 加冷媒\n",
"项目被占用(),无法停用。 @ 10545511425560717426 @ 更换右后门玻璃开关\n",
"项目被占用(),无法停用。 @ 10545511425555031987 @ 拆装右前悬挂\n",
"项目被占用(),无法停用。 @ 14582097882919614037 @ 更换右后门拉手\n",
"项目被占用(),无法停用。 @ 10545724654283293657 @ 拆装水箱框架\n",
"项目被占用(),无法停用。 @ 10545724654289177082 @ 右A柱补漆\n",
"项目被占用(),无法停用。 @ 10545478359238987446 @ 更换左右后减缓冲胶\n",
"项目被占用(),无法停用。 @ 10545724654286519455 @ 右后门拆装外压条\n",
"项目被占用(),无法停用。 @ 10545724654289284925 @ 脚步空间传感器外修\n",
"项目被占用(),无法停用。 @ 10546443563725016449 @ 更换前后护杠(自带)\n",
"项目被占用(),无法停用。 @ 10546443563727467465 @ 检查天窗关不起\n",
"项目被占用(),无法停用。 @ 10546443563727853642 @ 更换前支背座子\n",
"项目被占用(),无法停用。 @ 14582097882933769633 @ 左后围挡板喷漆\n",
"项目被占用(),无法停用。 @ 10545724654283299580 @ 拆装中冷器\n",
"项目被占用(),无法停用。 @ 10546443563661874782 @ 更换油泵控制器\n",
"项目被占用(),无法停用。 @ 10546443563667540091 @ 毛巾(会员卡)\n",
"项目被占用(),无法停用。 @ 10546443563740488093 @ 更换左右机脚\n",
"项目被占用(),无法停用。 @ 10546443563798707549 @ 发动机机舱清洗\n",
"项目被占用(),无法停用。 @ 14582097882799094750 @ 左后门下部补漆\n",
"项目被占用(),无法停用。 @ 14582097882902030084 @ 更换分动向传动轴十字节\n",
"项目被占用(),无法停用。 @ 10546172455221636590 @ 车内改装\n",
"项目被占用(),无法停用。 @ 10546443563792975115 @ 更换外拉杆\n",
"项目被占用(),无法停用。 @ 10545724654285162045 @ 检查水箱\n",
"项目被占用(),无法停用。 @ 10545491164348465318 @ 更换钥匙电池\n",
"项目被占用(),无法停用。 @ 10545511425557771724 @ 外出急救\n",
"项目被占用(),无法停用。 @ 10545724654273942571 @ 处理机油格漏油\n",
"项目被占用(),无法停用。 @ 10545724654276830079 @ 更换前减(材料自备)\n",
"项目被占用(),无法停用。 @ 10545724654276831259 @ 拆焊元宝梁螺丝\n",
"项目被占用(),无法停用。 @ 10545724654281166219 @ 更换后刹盘\n",
"项目被占用(),无法停用。 @ 10545724654282590030 @ 更换右进光灯\n",
"项目被占用(),无法停用。 @ 10545724654285912667 @ 发动机更换\n",
"项目被占用(),无法停用。 @ 10545724654289159164 @ 加装导航\n",
"项目被占用(),无法停用。 @ 10546172455172359390 @ 修复左右大粱\n",
"项目被占用(),无法停用。 @ 10546443563730921360 @ 拆装主副气囊(定损)\n",
"项目被占用(),无法停用。 @ 10546443563736646016 @ 更换消音器吊耳胶\n",
"项目被占用(),无法停用。 @ 10546443563736724126 @ 检查后轮漏油\n",
"项目被占用(),无法停用。 @ 10546443563737592369 @ 更换空调格盖板\n",
"项目被占用(),无法停用。 @ 10546443563812333798 @ 拆装顶灯\n",
"项目被占用(),无法停用。 @ 10691192243905179178 @ 以上喷漆\n",
"项目被占用(),无法停用。 @ 10691192243944396489 @ 更换牙包总成\n",
"项目被占用(),无法停用。 @ 14582097882933769494 @ 后围挡板喷漆\n",
"项目被占用(),无法停用。 @ 14582097882934287573 @ 更换左前机脚\n",
"项目被占用(),无法停用。 @ 14582097882950743659 @ 外出服务费\n",
"项目被占用(),无法停用。 @ 14582097882951040035 @ 四轮定位外修工时\n",
"项目被占用(),无法停用。 @ 10545724654282888717 @ 右前墙板修复\n",
"项目被占用(),无法停用。 @ 10545724654282967633 @ 拆装后杠更换倒车雷达\n",
"项目被占用(),无法停用。 @ 10545724654284712221 @ 机修试车检查底盘异响\n",
"项目被占用(),无法停用。 @ 10545724654285115170 @ 压缩机更换\n",
"项目被占用(),无法停用。 @ 10546443563691090109 @ 修复行李箱\n",
"项目被占用(),无法停用。 @ 14582097882887654242 @ 左后D柱喷漆\n",
"项目被占用(),无法停用。 @ 14582097882954405588 @ 更换中支座工时费\n",
"项目被占用(),无法停用。 @ 10545511425554879462 @ 左右门槛修复\n",
"项目被占用(),无法停用。 @ 10545724654282027828 @ 更换空调出风口\n",
"项目被占用(),无法停用。 @ 10907434497320748830 @ 右前轮毂修复\n",
"项目被占用(),无法停用。 @ 10545724654280390111 @ 更换刹车感应线\n",
"项目被占用(),无法停用。 @ 10546443563960948216 @ 空调管道清洗\n",
"项目被占用(),无法停用。 @ 10545724654280725032 @ 更换左后刹车灯泡\n",
"项目被占用(),无法停用。 @ 10545511425560678698 @ 左前轮眉喷漆\n",
"项目被占用(),无法停用。 @ 14582097882928596865 @ 更换机油(全店通用套餐)\n",
"项目被占用(),无法停用。 @ 14582097882963014096 @ 维修电机\n",
"项目被占用(),无法停用。 @ 14582097882961738680 @ 租新胎工时\n",
"项目被占用(),无法停用。 @ 14582097882961174421 @ 修随车吊工时\n",
"项目被占用(),无法停用。 @ 14582097882958865412 @ 发动机缸体积碳清洗\n",
"项目被占用(),无法停用。 @ 14582097882957066999 @ 更换右后胎压传感器\n",
"项目被占用(),无法停用。 @ 14582097882956663948 @ 喷油嘴清洗\n",
"项目被占用(),无法停用。 @ 14582097882956663900 @ 更换前刹车片报警线\n",
"项目被占用(),无法停用。 @ 14582097882956663876 @ 更换后刹车片报警线\n",
"项目被占用(),无法停用。 @ 14582097882956663843 @ 更换发动机油底壳放油螺丝\n",
"项目被占用(),无法停用。 @ 14582097882956658468 @ 更换空调滤清器(外置)\n",
"项目被占用(),无法停用。 @ 14582097882956565450 @ 修复顺风顶\n",
"项目被占用(),无法停用。 @ 14582097882955145490 @ 冷藏箱前挡板修复\n",
"项目被占用(),无法停用。 @ 14582097882948733988 @ 拆装后尾盖\n",
"项目被占用(),无法停用。 @ 14582097882947662220 @ 全车玻璃贴膜\n",
"项目被占用(),无法停用。 @ 14582097882946125763 @ 牌照板喷漆\n",
"项目被占用(),无法停用。 @ 14582097882940817371 @ 左侧围更换\n",
"项目被占用(),无法停用。 @ 14582097882940771918 @ 更换左右前下叉臂\n",
"项目被占用(),无法停用。 @ 14582097882932125604 @ 挖补右后叶子板\n",
"项目被占用(),无法停用。 @ 14582097882929684316 @ 拆装左前叶子板内衬\n",
"项目被占用(),无法停用。 @ 14582097882929684224 @ 散热器框架调校\n",
"项目被占用(),无法停用。 @ 14582097882917085203 @ 【免费 】搭电救援\n",
"项目被占用(),无法停用。 @ 14582097882925165695 @ 再生\n",
"项目被占用(),无法停用。 @ 14582097882919516710 @ 后机盖下段喷漆\n",
"项目被占用(),无法停用。 @ 14582097882919029777 @ 99元保养卡兑换券\n",
"项目被占用(),无法停用。 @ 14582097882917091866 @ 【20】更换雨刷代金券\n",
"项目被占用(),无法停用。 @ 14582097882917088872 @ 【免费】空调管路杀菌劵\n",
"项目被占用(),无法停用。 @ 14582097882915657086 @ 【免费】排水孔检查\n",
"项目被占用(),无法停用。 @ 14582097882912817802 @ 送一次打蜡\n",
"项目被占用(),无法停用。 @ 14582097882912817779 @ 送雾化杀菌一次\n",
"项目被占用(),无法停用。 @ 14582097882912817754 @ 享全车32项免费检查\n",
"项目被占用(),无法停用。 @ 14582097882912817711 @ 享全年无限次数免费加玻璃水\n",
"项目被占用(),无法停用。 @ 14582097882912817696 @ 享全年无限次数免费补胎/加气\n",
"项目被占用(),无法停用。 @ 14582097882912817657 @ 享维修工时85折\n",
"项目被占用(),无法停用。 @ 14582097882912817634 @ 享美容装饰85折\n",
"项目被占用(),无法停用。 @ 14582097882912565753 @ 赠送价值150元免费全年无次数补胎/加气(胶皮补胎)\n",
"项目被占用(),无法停用。 @ 14582097882912565728 @ 赠送价值150元全年免费加玻璃水\n",
"项目被占用(),无法停用。 @ 14582097882912565376 @ 赠送价值150元打蜡一次\n",
"项目被占用(),无法停用。 @ 14582097882912562363 @ 赠送价值150元雾化杀菌一次\n",
"项目被占用(),无法停用。 @ 14582097882901191097 @ 免费车辆安全检测\n",
"项目被占用(),无法停用。 @ 14582097882908822073 @ 一个面喷漆---合资漆(不含钣金)\n",
"项目被占用(),无法停用。 @ 14582097882908821511 @ 大桶油嘉实多金嘉护小保养套餐\n",
"项目被占用(),无法停用。 @ 14582097882908641830 @ 右后钢盆修复\n",
"项目被占用(),无法停用。 @ 14582097882907424612 @ 更换左前门装饰板\n",
"项目被占用(),无法停用。 @ 14582097882905708664 @ 贴尾门标\n",
"项目被占用(),无法停用。 @ 14582097882904234358 @ 更换玻璃卡槽\n",
"项目被占用(),无法停用。 @ 14582097882902361593 @ 右后视镜喷漆\n",
"项目被占用(),无法停用。 @ 14582097882902361529 @ 右后后视镜喷漆\n",
"项目被占用(),无法停用。 @ 14582097882901194948 @ 保养、维修、钣金、喷漆、洗车、美容、装饰8折优惠\n",
"项目被占用(),无法停用。 @ 14582097882901190799 @ 全年免费补胎/加气\n",
"项目被占用(),无法停用。 @ 14582097882898746198 @ 更换水箱下支架\n",
"项目被占用(),无法停用。 @ 14582097882898122022 @ 左右叶子板调校\n",
"项目被占用(),无法停用。 @ 14582097882898121931 @ 更换上盖板左右\n",
"项目被占用(),无法停用。 @ 14582097882895128313 @ 洗车(赠送)\n",
"项目被占用(),无法停用。 @ 14582097882892577721 @ 更换刹车液\n",
"项目被占用(),无法停用。 @ 14582097882889317226 @ 右后门外拉手喷漆\n",
"项目被占用(),无法停用。 @ 14582097882886137282 @ 更换前杠右侧亮条\n",
"项目被占用(),无法停用。 @ 14582097882886137057 @ 更换空气谐振器\n",
"项目被占用(),无法停用。 @ 14582097882885468616 @ 更换前杠上饰板\n",
"项目被占用(),无法停用。 @ 14582097882877231943 @ 更换排污阀\n",
"项目被占用(),无法停用。 @ 10545491164348556817 @ 更换油浮子\n",
"项目被占用(),无法停用。 @ 14582097882869868463 @ 拆装后减震气袋\n",
"项目被占用(),无法停用。 @ 14582097882868257241 @ 更换真空管\n",
"项目被占用(),无法停用。 @ 14582097882846595219 @ 更换左右前驱离合器\n",
"项目被占用(),无法停用。 @ 14582097882821642894 @ 更换助力油油压开关\n",
"项目被占用(),无法停用。 @ 14582097882812585423 @ 右后门装饰板喷漆\n",
"项目被占用(),无法停用。 @ 14582097882801200375 @ 喷漆一面(限合资)\n",
"项目被占用(),无法停用。 @ 14582097882801199875 @ 796更换机油\n",
"项目被占用(),无法停用。 @ 14582097882801197849 @ 398更换机油\n",
"项目被占用(),无法停用。 @ 14582097882801197820 @ 198更换机油\n",
"项目被占用(),无法停用。 @ 14582097882799628212 @ 左前杠灯罩喷漆\n",
"项目被占用(),无法停用。 @ 14582097882799211818 @ 全车改色\n",
"项目被占用(),无法停用。 @ 14582097882798575134 @ 更换暖水泵\n",
"项目被占用(),无法停用。 @ 10907434497474864905 @ 左侧A柱整形修复\n",
"项目被占用(),无法停用。 @ 10907434497462102788 @ 更换方向盘盖\n",
"项目被占用(),无法停用。 @ 10907434497460263415 @ 更换增压机油管\n",
"项目被占用(),无法停用。 @ 10907434497376202118 @ 拆装发动机电脑板\n",
"项目被占用(),无法停用。 @ 10907434497374354497 @ 车内杀菌(总厂活动)\n",
"项目被占用(),无法停用。 @ 10907434497374040637 @ 车内杀菌(工会)\n",
"项目被占用(),无法停用。 @ 10907434497353031582 @ 左后门装饰板修复\n",
"项目被占用(),无法停用。 @ 10907434497353030933 @ 左前门装饰板修复\n",
"项目被占用(),无法停用。 @ 10545511425556840079 @ 加液体黄金\n",
"项目被占用(),无法停用。 @ 10545511425558256343 @ 更换左前杠灯框\n",
"项目被占用(),无法停用。 @ 10907434497345200213 @ 右门槛内侧修复\n",
"项目被占用(),无法停用。 @ 10907434497345197038 @ 右门槛内侧喷漆\n",
"项目被占用(),无法停用。 @ 10907434497340920757 @ 更换右后减震气管\n",
"项目被占用(),无法停用。 @ 10907434497334753373 @ 刷系统隐藏功能\n",
"项目被占用(),无法停用。 @ 10691192243947120750 @ 左后门装饰板喷漆\n",
"项目被占用(),无法停用。 @ 10691192243924209738 @ 右前门装饰板喷漆\n",
"项目被占用(),无法停用。 @ 10546443563998297957 @ 香水\n",
"项目被占用(),无法停用。 @ 10546443563983014160 @ 喷底盘装甲\n",
"项目被占用(),无法停用。 @ 10546443563868238641 @ 安装电瓶正极板(材料自带)\n",
"项目被占用(),无法停用。 @ 10545511425559992766 @ 更换外球笼\n",
"项目被占用(),无法停用。 @ 10546443563862953144 @ 处理ABS传感器线路\n",
"项目被占用(),无法停用。 @ 10546443563862948437 @ 电脑编程\n",
"项目被占用(),无法停用。 @ 10546443563851109039 @ 一次车内甲醛及空气质量检测(舒研团队联盟会员)\n",
"项目被占用(),无法停用。 @ 10546443563851106319 @ 更换机油(舒研团队联盟会员)\n",
"项目被占用(),无法停用。 @ 10546443563837777722 @ 拆装修复下护板\n",
"项目被占用(),无法停用。 @ 10546443563829114111 @ 检漏加氟及处理低尾管漏气\n",
"项目被占用(),无法停用。 @ 10546443563817896566 @ 更换离合器踏板\n",
"项目被占用(),无法停用。 @ 10545435426612136631 @ 更换真空泵\n",
"项目被占用(),无法停用。 @ 10546443563805218131 @ 拆装固定右半轴\n",
"项目被占用(),无法停用。 @ 10545511425555673563 @ 更换差速器油\n",
"项目被占用(),无法停用。 @ 10545511425561597477 @ 更换碳罐电磁阀\n",
"项目被占用(),无法停用。 @ 10546443563799897478 @ 处理风扇\n",
"项目被占用(),无法停用。 @ 10546443563799743387 @ 固定排气管\n",
"项目被占用(),无法停用。 @ 10546443563792335338 @ 调刹车 拆马鞍\n",
"项目被占用(),无法停用。 @ 10546443563789420383 @ 更换右后小吊杆\n",
"项目被占用(),无法停用。 @ 10546443563789267678 @ 更换安全气囊电脑板\n",
"项目被占用(),无法停用。 @ 10546443563777735856 @ 拆装蒸发箱\n",
"项目被占用(),无法停用。 @ 10546443563747880733 @ 毛巾(电销部活动)\n",
"项目被占用(),无法停用。 @ 10546443563736730985 @ 检查右后门玻璃\n",
"项目被占用(),无法停用。 @ 10546443563681899307 @ 在我公司办理保险,可抵商业险198元,其他优惠不变\n",
"项目被占用(),无法停用。 @ 10546443563681897917 @ 一年内保养,每次送2升机油,价值250,不限保养次数\n",
"项目被占用(),无法停用。 @ 10546443563668271352 @ 推荐朋友办卡可送价值130元1升机油可累计(会员卡)\n",
"项目被占用(),无法停用。 @ 10546443563667766875 @ 推荐朋友办卡可送价值115元1升机油可累计(会员卡)\n",
"项目被占用(),无法停用。 @ 10546443563667765343 @ 现金维修享95折优惠(会员卡)\n",
"项目被占用(),无法停用。 @ 10545055918001019185 @ 更换右大灯\n",
"项目被占用(),无法停用。 @ 10546172455160594476 @ 检查ABS故障灯\n",
"项目被占用(),无法停用。 @ 10546172455228337161 @ 更换左后玻璃\n",
"项目被占用(),无法停用。 @ 10546172455228131945 @ 检查刹车片报警\n",
"项目被占用(),无法停用。 @ 10546172455228115649 @ 右后叶子板更换\n",
"项目被占用(),无法停用。 @ 10546172455187193319 @ 固定右后门装饰板\n",
"项目被占用(),无法停用。 @ 10546172455187128733 @ 拆装右后门玻璃开关\n",
"项目被占用(),无法停用。 @ 10546172455187104102 @ 后杠装饰板补漆\n",
"项目被占用(),无法停用。 @ 10546172455184750627 @ 添加助力油\n",
"项目被占用(),无法停用。 @ 10546172455183761753 @ 更换排气管总成\n",
"项目被占用(),无法停用。 @ 10546172455181854737 @ 拆装右前叶子板内衬\n",
"项目被占用(),无法停用。 @ 10546172455174942187 @ 右前A柱装饰板固定\n",
"项目被占用(),无法停用。 @ 10546172455174941680 @ 检查充电系统故障\n",
"项目被占用(),无法停用。 @ 10545055918000863129 @ 前杠补漆\n",
"项目被占用(),无法停用。 @ 10546172455171138973 @ 前杠装饰板修复\n",
"项目被占用(),无法停用。 @ 10546172455171138744 @ 前杠装饰板补漆\n",
"项目被占用(),无法停用。 @ 10546172455169874048 @ 调雨刮喷水嘴\n",
"项目被占用(),无法停用。 @ 10546172455169873530 @ 检查右前轮异响\n",
"项目被占用(),无法停用。 @ 10546172455169871612 @ 空调右边不出风\n",
"项目被占用(),无法停用。 @ 10546172455166234412 @ 修复机盖\n",
"项目被占用(),无法停用。 @ 10546172455164697175 @ 更换高位传感器\n",
"项目被占用(),无法停用。 @ 10546172455162474544 @ 三十六项检查\n",
"项目被占用(),无法停用。 @ 10546172455162474103 @ 空调消毒\n",
"项目被占用(),无法停用。 @ 10546172455160688840 @ 更换左后轮芯\n",
"项目被占用(),无法停用。 @ 10546172455159278289 @ 更换拉杆球头外(左前)\n",
"项目被占用(),无法停用。 @ 10546172455159277877 @ 更换拉杆内球头(左前)\n",
"项目被占用(),无法停用。 @ 10546172455158243383 @ 拆装右后门玻璃\n",
"项目被占用(),无法停用。 @ 10546172455158086984 @ 贴右后门膜\n",
"项目被占用(),无法停用。 @ 10546172455157296884 @ 固定下护板\n",
"项目被占用(),无法停用。 @ 10546172455157126384 @ 检查尾门打不开\n",
"项目被占用(),无法停用。 @ 10546172455156993415 @ 检查踩刹车发抖\n",
"项目被占用(),无法停用。 @ 10546172455155225350 @ 测试001\n",
"项目被占用(),无法停用。 @ 10546172455154436051 @ 检查后牌照灯\n",
"项目被占用(),无法停用。 @ 10546172455154326008 @ 前下护板固定\n",
"项目被占用(),无法停用。 @ 10546172455153122961 @ 拆装变速箱阀体\n",
"项目被占用(),无法停用。 @ 10546172455152890233 @ 免费三十六项检查\n",
"项目被占用(),无法停用。 @ 10546172455152173985 @ 修理碟机\n",
"项目被占用(),无法停用。 @ 10546172455151708060 @ 检修左前头枕故障\n",
"项目被占用(),无法停用。 @ 10546172455149187698 @ 拆装波箱调整差速器\n",
"项目被占用(),无法停用。 @ 10546172455149183431 @ 更换前下悬挂弯臂和球头\n",
"项目被占用(),无法停用。 @ 10546172455149182808 @ 更换下悬挂直臂\n",
"项目被占用(),无法停用。 @ 10546172455148628620 @ 拆装后杠亮条\n",
"项目被占用(),无法停用。 @ 10546050787360738479 @ 检查左后刹车分泵\n",
"项目被占用(),无法停用。 @ 10546050787360738254 @ 检查后减震缓冲胶\n",
"项目被占用(),无法停用。 @ 10546050787360738084 @ 检查下支臂\n",
"项目被占用(),无法停用。 @ 10546050787360737784 @ 检查后刹车片\n",
"项目被占用(),无法停用。 @ 10546050787360367619 @ 检查防冻液缺少\n",
"项目被占用(),无法停用。 @ 10546050787358654506 @ 检查发电机皮带\n",
"项目被占用(),无法停用。 @ 10546050787358558833 @ 更换前下支臂胶套\n",
"项目被占用(),无法停用。 @ 10546050787358164242 @ 检查机油量够不够\n",
"项目被占用(),无法停用。 @ 10546050787358050940 @ 检查油表不动\n",
"项目被占用(),无法停用。 @ 10546050787357960391 @ 更换发动机正时上盖\n",
"项目被占用(),无法停用。 @ 10546050787357937259 @ 固定后装饰\n",
"项目被占用(),无法停用。 @ 10546050787357934496 @ 左后装饰板拆装\n",
"项目被占用(),无法停用。 @ 10546050787356358123 @ 检查喷水嘴\n",
"项目被占用(),无法停用。 @ 10546050787356357399 @ 检查雨刮喷水嘴\n",
"项目被占用(),无法停用。 @ 10546050787356340531 @ 调校后尾盖\n",
"项目被占用(),无法停用。 @ 10546050787356340123 @ 检查动力差\n",
"项目被占用(),无法停用。 @ 10546050787356339829 @ 检查后底盘有异响\n",
"项目被占用(),无法停用。 @ 10546050787355831524 @ 右前门装饰板固定\n",
"项目被占用(),无法停用。 @ 10546050787354826581 @ 固定左后门槛装饰板\n",
"项目被占用(),无法停用。 @ 10546050787354500491 @ 拆装左前杠灯罩\n",
"项目被占用(),无法停用。 @ 10546050787354413677 @ 外加工轮胎修复\n",
"项目被占用(),无法停用。 @ 10546050787353455166 @ 清洗助力油道\n",
"项目被占用(),无法停用。 @ 10546050787352830192 @ 检查方向机助力泵异响\n",
"项目被占用(),无法停用。 @ 10546050787351779448 @ 检查左右门\n",
"项目被占用(),无法停用。 @ 10546050787351473824 @ 检查右前玻璃异响\n",
"项目被占用(),无法停用。 @ 10546050787350773068 @ 检查发动机故障灯\n",
"项目被占用(),无法停用。 @ 10546050787350772866 @ 检查车身自动升降故障\n",
"项目被占用(),无法停用。 @ 10546050787350772750 @ 检查三元催化故障\n",
"项目被占用(),无法停用。 @ 10546050787350772633 @ 检查气囊故障灯\n",
"项目被占用(),无法停用。 @ 10546050787350772403 @ 检查右前门玻璃不能升降\n",
"项目被占用(),无法停用。 @ 10546050787350772161 @ 更换机油,机油格。\n",
"项目被占用(),无法停用。 @ 10546050787350771704 @ 更换空气格,空调格\n",
"项目被占用(),无法停用。 @ 10545724654301002017 @ 更换左右平衡杆小吊杆\n",
"项目被占用(),无法停用。 @ 10545360219000043431 @ 右前叶子板抛光\n",
"项目被占用(),无法停用。 @ 10545511425555954104 @ 添加波箱油\n",
"项目被占用(),无法停用。 @ 10545724654290896537 @ 前杠右侧漂漆\n",
"项目被占用(),无法停用。 @ 10545724654289087862 @ 右边门坎喷漆\n",
"项目被占用(),无法停用。 @ 10545724654289087755 @ 修复右边门坎\n",
"项目被占用(),无法停用。 @ 10545055918001257335 @ 更换左后门玻璃\n",
"项目被占用(),无法停用。 @ 10545724654288508679 @ 检查无导航\n",
"项目被占用(),无法停用。 @ 10545724654288504838 @ 更换后杠装饰条\n",
"项目被占用(),无法停用。 @ 10545724654288504387 @ 左前大灯抛光\n",
"项目被占用(),无法停用。 @ 10545724654287580139 @ EPC灯亮\n",
"项目被占用(),无法停用。 @ 10545724654287315649 @ 维修敞篷车顶\n",
"项目被占用(),无法停用。 @ 10545724654286270081 @ 右后门边缘处补漆\n",
"项目被占用(),无法停用。 @ 10545724654286269507 @ 检查仪表台右侧异响\n",
"项目被占用(),无法停用。 @ 10545724654285896053 @ 左后门左后叶子板抛光\n",
"项目被占用(),无法停用。 @ 10545724654285895282 @ 后机盖点漆\n",
"项目被占用(),无法停用。 @ 10545724654285537264 @ 更换后装饰条\n",
"项目被占用(),无法停用。 @ 10545724654284839739 @ 检查发动机故障\n",
"项目被占用(),无法停用。 @ 10545724654282887621 @ 左前轮包校正\n",
"项目被占用(),无法停用。 @ 10545724654282882989 @ 机盖喷漆(内外)\n",
"项目被占用(),无法停用。 @ 10545724654281776326 @ 更换前杠雷达\n",
"项目被占用(),无法停用。 @ 10545724654280437758 @ 更换发动机机脚\n",
"项目被占用(),无法停用。 @ 10545724654280207812 @ 更换雾灯框\n",
"项目被占用(),无法停用。 @ 10545724654278197965 @ 以上自带配件更换工时\n",
"项目被占用(),无法停用。 @ 10545724654278197346 @ 更换左前缓冲胶\n",
"项目被占用(),无法停用。 @ 10545724654274617979 @ 清洗汽油格\n",
"项目被占用(),无法停用。 @ 10545724654274555451 @ 左前喷漆\n",
"项目被占用(),无法停用。 @ 10545724654274555387 @ 左前修复\n",
"项目被占用(),无法停用。 @ 10545724654274416695 @ 更换右轮鼓刹车片\n",
"项目被占用(),无法停用。 @ 10545724654274416548 @ 更换右分泵\n",
"项目被占用(),无法停用。 @ 10545724654274243787 @ 方向盘数据校准\n",
"项目被占用(),无法停用。 @ 10545724654274204593 @ 检查线路\n",
"项目被占用(),无法停用。 @ 10545724654274194142 @ 更换ABS线\n",
"项目被占用(),无法停用。 @ 10545724654274120973 @ 灯罩喷漆\n",
"项目被占用(),无法停用。 @ 10545724654273993032 @ 修复座子\n",
"项目被占用(),无法停用。 @ 10545724654273988898 @ 更换前大灯\n",
"项目被占用(),无法停用。 @ 10545724654273976954 @ 更换门拉手\n",
"项目被占用(),无法停用。 @ 10545724654273556880 @ 维修左前门开关\n",
"项目被占用(),无法停用。 @ 10545724654273144135 @ 修复装饰灯\n",
"项目被占用(),无法停用。 @ 10545724654273144028 @ 修复前杠\n",
"项目被占用(),无法停用。 @ 10545511425566832572 @ 后杠左角补漆\n",
"项目被占用(),无法停用。 @ 10545511425566155400 @ 更换三元催化器(材料自备)\n",
"项目被占用(),无法停用。 @ 10545511425566053371 @ 更换水箱盖\n",
"项目被占用(),无法停用。 @ 10545511425565789404 @ 挡泥胶前左右\n",
"项目被占用(),无法停用。 @ 10545511425565721885 @ 更换出风口(左)\n",
"项目被占用(),无法停用。 @ 10545511425565484488 @ 更换压板片子轴承(材料自带)\n",
"项目被占用(),无法停用。 @ 10545511425565484178 @ 更换离合器\n",
"项目被占用(),无法停用。 @ 10545511425565484066 @ 更换抬牙箱\n",
"项目被占用(),无法停用。 @ 10545511425565210225 @ 刹车养护\n",
"项目被占用(),无法停用。 @ 10545511425565132891 @ 更换手刹拉链\n",
"项目被占用(),无法停用。 @ 10545511425565035735 @ 更换方向机助力油\n",
"项目被占用(),无法停用。 @ 10545511425564831481 @ 右前门更换\n",
"项目被占用(),无法停用。 @ 10545511425564816207 @ 拆装压箱\n",
"项目被占用(),无法停用。 @ 10545511425564788602 @ 后杠右角补漆\n",
"项目被占用(),无法停用。 @ 10545511425564788517 @ 左前钣金补漆\n",
"项目被占用(),无法停用。 @ 10545511425564788495 @ 左侧钣金修复\n",
"项目被占用(),无法停用。 @ 10545511425564788380 @ 左前钢盆喷漆\n",
"项目被占用(),无法停用。 @ 10545511425564630926 @ 右门槛钣金修复\n",
"项目被占用(),无法停用。 @ 10545511425564306959 @ 右前叶子板修复喷漆\n",
"项目被占用(),无法停用。 @ 10545511425564148792 @ 更换轮芯轴承总成\n",
"项目被占用(),无法停用。 @ 10545511425564148600 @ 更换轮芯轴承总成带传感器\n",
"项目被占用(),无法停用。 @ 10545511425564114669 @ 左前后门钣金喷漆\n",
"项目被占用(),无法停用。 @ 10545511425563993549 @ 检查方向盘发抖\n",
"项目被占用(),无法停用。 @ 10545511425563133522 @ 更换后备箱锁\n",
"项目被占用(),无法停用。 @ 10545511425563080047 @ 左前翼子板喷漆\n"
]
}
],
"source": [
"# 判断项目是否可以停用\n",
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'f6-ids-goodsSESSIONID=a2fd5941-2e84-436f-bcd0-038b3f725aeb; sajssdk_2015_cross_new_user=1; erpLanguage=zh-CN; prodOrg=10545055918000198357; unp=10546443564005201400; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210546443564005201400%22%2C%22first_id%22%3A%221900fa6310ff15-01dad8bd5944325-26001c51-2073600-1900fa6311010ba%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221900fa6310ff15-01dad8bd5944325-26001c51-2073600-1900fa6311010ba%22%7D; tmall=false; _up=-NillNN-qyBEJ--t3vnSknvoOFt6yfeJtM4A1X8_WuJfVvDFp5nQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqFfsWrIsi1AoL__NRv-ZNHu3M-GTZ25y3EXOrq-tRiesfklbCOhNvrEj9mUS6hszRMWM.'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
"}\n",
"try:\n",
" df = pd.read_excel(r'C:\\Users\\admin\\Desktop\\项目信息.xls',sheet_name='Sheet1',dtype='string')\n",
" url = 'https://ids-goods.f6car.cn/f6-ids-goods/service/validateDisable?pkId='+da[2]\n",
" for da in df.values:\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers)\n",
" res = res.json()\n",
" print(res['data']['message'],\"@\",da[1],\"@\",da[0])\n",
"except:\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 停用项目"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-16T01:42:03.686565Z",
"start_time": "2025-07-16T01:41:56.772597Z"
}
},
"source": [
"# 停用项目\n",
"import pandas as pd\n",
"import time\n",
"import requests\n",
"import json\n",
"\n",
"cookies_str = 'f6-ids-goodsSESSIONID=9f24d30a-336b-4e88-adb3-4b183de53f2d; erpLanguage=zh-CN; prodOrg=11240984669917217520; unp=15865484595890778191; _up=-NillNN-qyBEJ--t3vnSknvoOF53y_SJuMkA2n43U-daUfnArpjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfESq4Im0wYL-_BRv-ZNHu3M-GTc1p60EX-sq-RQgeIal1HLPxpurEj9-k7898i3PR0.; tmall=false; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215865484595890778191%22%2C%22first_id%22%3A%221928984bbc1271-065c3758008fd68-4c657b58-1327104-1928984bbc213fe%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221928984bbc1271-065c3758008fd68-4c657b58-1327104-1928984bbc213fe%22%7D'\n",
"\n",
"cookies_str = cookies_str.encode('utf-8').decode('latin-1')\n",
"\n",
"cookie_dict = {item.split('=')[0]: item.split('=')[1]\n",
" for item in cookies_str.split('; ')}\n",
"headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40',\n",
" \"Content-Type\": \"application/json\",\n",
"}\n",
"try:\n",
" df = pd.read_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\卡id表.xlsx\",sheet_name='Sheet1',dtype='string')\n",
" url = 'https://ids-goods.f6car.cn/f6-ids-goods/service/editAttributeByType'\n",
" for da in df.values:\n",
" data = {\n",
" \"orgIdList\": [\n",
" \"11240984669917217520\",\n",
" \"11240984669917400547\",\n",
" ],\n",
" \"isDel\": 1,\n",
" \"infoId\": da[1],\n",
" \"pkId\": da[2],\n",
" \"type\": 1,\n",
" \"idOwnOrg\": \"11240984669917217520\"\n",
" }\n",
"\n",
" res = requests.post(url,cookies=cookie_dict,headers=headers,json=data)\n",
" res = res.json()\n",
" print(res['message'],\"@\",da[0],\"@\",da[1],\"@\",da[2])\n",
"except:\n",
" pass"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SUCCESS @ 修小灯线路 @ 14582097883002123023 @ 1307770869\n",
"项目被占用(绑定了会员卡),无法停用。 @ 更换分动箱油 @ 14582097883002122841 @ 1307770687\n",
"项目被占用(绑定了会员卡),无法停用。 @ 更换前挡风玻璃 @ 14582097883002122740 @ 1307770586\n",
"项目被占用(绑定了会员卡),无法停用。 @ 更换下摆臂球头 @ 14582097883002122870 @ 1307770716\n",
"SUCCESS @ 拆装普通座垫座椅套(水洗) @ 14582097883002123033 @ 1307770879\n",
"SUCCESS @ 更换倒车影像摄像头 @ 14582097883002122989 @ 1307770835\n",
"SUCCESS @ 清洗车厢 @ 14582097883002122991 @ 1307770837\n",
"SUCCESS @ 后门(拆装) @ 14582097883002123011 @ 1307770857\n",
"SUCCESS @ 全车去污打蜡 @ 14582097883002123013 @ 1307770859\n",
"SUCCESS @ 换右倒车镜支架 @ 14582097883002123017 @ 1307770863\n",
"SUCCESS @ 换左右大灯灯泡 @ 14582097883002123024 @ 1307770870\n",
"SUCCESS @ 拆装传动轴,修漏油 @ 14582097883002123027 @ 1307770873\n",
"SUCCESS @ 右后门整形 拆装门把手 @ 14582097883002123036 @ 1307770882\n",
"SUCCESS @ 全车燃油管路清洗 @ 14582097883002122967 @ 1307770813\n",
"SUCCESS @ 钢圈修复喷漆 @ 14582097883002122968 @ 1307770814\n",
"SUCCESS @ 右前叶子板钣金 油漆 @ 14582097883002122973 @ 1307770819\n",
"SUCCESS @ 更换钢圈4只 @ 14582097883002122974 @ 1307770820\n",
"SUCCESS @ 后骨架(修复) @ 14582097883002122979 @ 1307770825\n",
"SUCCESS @ 去厂里开车,换半轴螺丝 @ 14582097883002122985 @ 1307770831\n",
"SUCCESS @ 更换前刹车感应线 @ 14582097883002122987 @ 1307770833\n"
]
}
],
"execution_count": 8
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+75
View File
@@ -0,0 +1,75 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "re",
"id": "9100b86a92c5dc60"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-10-20T06:26:47.364635Z",
"start_time": "2025-10-20T06:26:47.327525Z"
}
},
"cell_type": "code",
"source": [
"import re\n",
"\n",
"with open (\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\text.txt\",\"r\",encoding=\"utf-8\") as f:\n",
" text = f.read()\n",
" print(re.findall(r\"/{[^}]*}\",text))"
],
"id": "2d9dc300d83e2ff3",
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<>:3: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:3: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\zy187\\AppData\\Local\\Temp\\ipykernel_27692\\3995594842.py:3: SyntaxWarning: invalid escape sequence '\\I'\n",
" with open (\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\text.txt\",\"r\",encoding=\"utf-8\") as f:\n",
"C:\\Users\\zy187\\AppData\\Local\\Temp\\ipykernel_27692\\3995594842.py:3: SyntaxWarning: invalid escape sequence '\\I'\n",
" with open (\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\text.txt\",\"r\",encoding=\"utf-8\") as f:\n"
]
},
{
"ename": "OSError",
"evalue": "[Errno 22] Invalid argument: 'D:\\\\Idea Project\\\\F6+宜搭+其它(1)\\\\张阳脚本\\text.txt'",
"output_type": "error",
"traceback": [
"\u001B[31m---------------------------------------------------------------------------\u001B[39m",
"\u001B[31mOSError\u001B[39m Traceback (most recent call last)",
"\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[3]\u001B[39m\u001B[32m, line 3\u001B[39m\n\u001B[32m 1\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mre\u001B[39;00m\n\u001B[32m----> \u001B[39m\u001B[32m3\u001B[39m \u001B[38;5;28;01mwith\u001B[39;00m \u001B[38;5;28mopen\u001B[39m (\u001B[33m\"\u001B[39m\u001B[33mD:\u001B[39m\u001B[33m\\\u001B[39m\u001B[33mIdea Project\u001B[39m\u001B[33m\\\u001B[39m\u001B[33mF6+宜搭+其它(1)\u001B[39m\u001B[33m\\\u001B[39m\u001B[33m张阳脚本\u001B[39m\u001B[38;5;130;01m\\t\u001B[39;00m\u001B[33mext.txt\u001B[39m\u001B[33m\"\u001B[39m,\u001B[33m\"\u001B[39m\u001B[33mr\u001B[39m\u001B[33m\"\u001B[39m,encoding=\u001B[33m\"\u001B[39m\u001B[33mutf-8\u001B[39m\u001B[33m\"\u001B[39m) \u001B[38;5;28;01mas\u001B[39;00m f:\n\u001B[32m 4\u001B[39m text = f.read()\n\u001B[32m 5\u001B[39m \u001B[38;5;28mprint\u001B[39m(re.findall(\u001B[33mr\u001B[39m\u001B[33m\"\u001B[39m\u001B[33m/\u001B[39m\u001B[33m{\u001B[39m\u001B[33m[^}]*}\u001B[39m\u001B[33m\"\u001B[39m,text))\n",
"\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:326\u001B[39m, in \u001B[36m_modified_open\u001B[39m\u001B[34m(file, *args, **kwargs)\u001B[39m\n\u001B[32m 319\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m file \u001B[38;5;129;01min\u001B[39;00m {\u001B[32m0\u001B[39m, \u001B[32m1\u001B[39m, \u001B[32m2\u001B[39m}:\n\u001B[32m 320\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[32m 321\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mIPython won\u001B[39m\u001B[33m'\u001B[39m\u001B[33mt let you open fd=\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfile\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m by default \u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 322\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mas it is likely to crash IPython. If you know what you are doing, \u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 323\u001B[39m \u001B[33m\"\u001B[39m\u001B[33myou can use builtins\u001B[39m\u001B[33m'\u001B[39m\u001B[33m open.\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 324\u001B[39m )\n\u001B[32m--> \u001B[39m\u001B[32m326\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m io_open(file, *args, **kwargs)\n",
"\u001B[31mOSError\u001B[39m: [Errno 22] Invalid argument: 'D:\\\\Idea Project\\\\F6+宜搭+其它(1)\\\\张阳脚本\\text.txt'"
]
}
],
"execution_count": 3
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+29
View File
@@ -0,0 +1,29 @@
#-------------------------------------------------------------------------------#
# Qodana analysis is configured by qodana.yaml file #
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
#-------------------------------------------------------------------------------#
version: "1.0"
#Specify inspection profile for code analysis
profile:
name: qodana.starter
#Enable inspections
#include:
# - name: <SomeEnabledInspectionId>
#Disable inspections
#exclude:
# - name: <SomeDisabledInspectionId>
# paths:
# - <path/where/not/run/inspection>
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
#bootstrap: sh ./prepare-qodana.sh
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
#plugins:
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
linter: jetbrains/qodana-jvm-community:latest
+34
View File
@@ -0,0 +1,34 @@
aiohttp==3.13.2
apscheduler==3.11.2
beautifulsoup4==4.14.3
chardet==5.2.0
cpca==0.5.5
emoji==2.15.0
Flask==3.1.2
holidays==0.87
matplotlib==3.10.8
numpy==2.4.0
openpyxl==3.1.5
pandas==2.3.3
Pillow==12.0.0
playwright==1.57.0
psycopg2==2.9.11
pyautogui==0.9.54
pydes==2.0.1
pydotplus==2.0.2
pyexcel==0.7.4
pyexcel_io==0.6.7
PySimpleGUI==5.0.8.3
pytesseract==0.3.13
python_dateutil==2.9.0.post0
Requests==2.32.5
scikit_learn==1.8.0
selenium==4.39.0
SQLAlchemy==2.0.45
sympy==1.14.0
tqdm==4.67.1
xgboost==3.1.2
xlrd==2.0.2
xlutils==2.0.0
xlwt==1.3.0
zhon==2.1.1
+30
View File
@@ -0,0 +1,30 @@
import requests
import json
import json
import xlrd
import xlwt
import pandas as pd
from pprint import pprint
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '81',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'JSESSIONID=52DB78DAB54F9F8154968A66B1316389',
'Host': 'www.idsz.xin:7070',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer':'http://www.idsz.xin:7070/Sale_Order',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
for a in range(0,1):
url='http://www.idsz.xin:7070/posapi_invoke?apiname=kpi_memberVerifiAndSurplusQuery&detailtype=4&startTime=2010-01-01&endTime=2022-02-18&key=totalCount&sshopId=&timesCardId=&option=&page={}&pageSize=50'.format(a)
response = requests.get(url=url,headers=headers)
res = response.json()
# for record in response:
# df=pd.DataFrame(KH)
# df.to_excel('流失客户.xlsx',index=False)
+805
View File
@@ -0,0 +1,805 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-43)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_NGV = pd.DataFrame(list(rows),columns=col)\n",
"# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"\n",
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_NGV_new = pd.DataFrame(list(rows),columns=col)\n",
"# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"\n",
"# 使用isin方法筛选出A表中id_own_org字段不在B表中的行\n",
"c_data = data_NGV_new[~data_NGV_new['id_own_org'].isin(data_NGV['id_own_org'])]\n",
"\n",
"# 输出C表内容\n",
"c_data = c_data.reset_index()\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0&systemToken=HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92&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() "
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"新建第 99 条数据! {'result': ['FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLXE', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLYE', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLZE', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL0F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL1F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL2F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL3F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL4F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL5F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL6F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL7F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL8F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL9F', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLAF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLBF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLCF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLDF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLEF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLFF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLGF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLHF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLIF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLJF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLKF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLLF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLMF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLNF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLOF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLPF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLQF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLRF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLSF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLTF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLUF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLVF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLWF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLXF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLYF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLZF', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL0G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL1G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL2G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL3G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL4G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL5G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL6G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL7G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL8G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KL9G', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLAG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLBG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLCG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLDG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLEG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLFG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLGG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLHG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLIG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLJG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLKG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLLG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLMG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLNG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLOG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLPG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLQG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLRG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLSG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLTG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLUG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1HPHC08KLVG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLWG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLXG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLYG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLZG', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL0H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL1H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL2H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL3H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL4H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL5H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL6H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL7H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL8H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KL9H', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLAH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLBH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLCH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLDH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLEH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLFH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLGH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLHH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLIH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLJH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLKH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLLH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLMH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLNH', 'FINST-8K966U7190LCMIA36G9DH8RMXX5Z1IPHC08KLOH']}\n",
"新建第 199 条数据! {'result': ['FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLW2', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLX2', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLY2', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLZ2', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL03', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL13', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL23', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL33', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL43', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL53', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL63', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL73', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL83', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL93', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLA3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLB3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLC3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLD3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLE3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLF3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLG3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLH3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLI3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLJ3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLK3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLL3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLM3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLN3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLO3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLP3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLQ3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLR3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLS3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLT3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLU3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLV3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLW3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLX3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLY3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLZ3', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL04', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL14', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL24', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL34', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL44', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL54', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL64', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL74', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL84', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KL94', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLA4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3XZHC08KLB4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLC4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLD4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLE4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLF4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLG4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLH4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLI4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLJ4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLK4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLL4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLM4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLN4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLO4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLP4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLQ4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLR4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLS4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLT4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLU4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLV4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLW4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLX4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLY4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLZ4', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL05', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL15', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL25', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL35', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL45', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL55', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL65', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL75', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL85', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KL95', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLA5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLB5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLC5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLD5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLE5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLF5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLG5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLH5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLI5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLJ5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLK5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLL5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLM5', 'FINST-7X866C817YKCELIUD3N7S49XJKER3YZHC08KLN5']}\n",
"新建第 299 条数据! {'result': ['FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLB5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLC5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLD5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLE5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLF5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLG5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLH5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLI5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLJ5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLK5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLL5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLM5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLN5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLO5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLP5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLQ5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLR5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLS5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLT5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLU5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLV5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLW5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLX5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLY5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLZ5', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL06', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL16', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL26', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL36', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL46', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL56', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL66', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL76', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL86', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL96', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLA6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLB6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLC6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLD6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLE6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLF6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLG6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLH6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLI6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLJ6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLK6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLL6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLM6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLN6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLO6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLP6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLQ6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLR6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLS6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLT6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLU6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLV6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLW6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLX6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLY6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KLZ6', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL07', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL17', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL27', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL37', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL47', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL57', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3N9IC08KL67', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KL77', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KL87', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KL97', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLA7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLB7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLC7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLD7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLE7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLF7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLG7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLH7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLI7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLJ7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLK7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLL7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLM7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLN7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLO7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLP7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLQ7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLR7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLS7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLT7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLU7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLV7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLW7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLX7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLY7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KLZ7', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KL08', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KL18', 'FINST-9X866BD1SOLCY4CXCPEIR5YI12TA3O9IC08KL28']}\n",
"新建第 399 条数据! {'result': ['FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLE', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLF', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLG', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLH', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLI', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLJ', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLK', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLL', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLM', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLN', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLO', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLP', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLQ', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLR', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLS', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLT', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLU', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLV', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLW', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLX', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLY', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLZ', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL01', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL11', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL21', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL31', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL41', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL51', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL61', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL71', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL81', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL91', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLA1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLB1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLC1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLD1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLE1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLF1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLG1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLH1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLI1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLJ1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLK1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLL1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLM1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLN1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLO1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLP1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLQ1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLR1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLS1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLT1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLU1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLV1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLW1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLX1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLY1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KLZ1', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL02', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2DIIC08KL12', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL22', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL32', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL42', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL52', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL62', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL72', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL82', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL92', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLA2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLB2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLC2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLD2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLE2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLF2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLG2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLH2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLI2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLJ2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLK2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLL2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLM2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLN2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLO2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLP2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLQ2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLR2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLS2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLT2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLU2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLV2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLW2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLX2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLY2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KLZ2', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL03', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL13', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL23', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL33', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL43', 'FINST-RA766M91HOLCZ2QHEFL268U64SHD2EIIC08KL53']}\n",
"新建第 499 条数据! {'result': ['FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL45', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL55', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL65', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL75', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL85', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL95', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLA5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLB5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLC5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLD5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLE5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLF5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLG5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLH5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLI5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLJ5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLK5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLL5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLM5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLN5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLO5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLP5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLQ5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLR5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLS5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLT5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLU5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLV5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLW5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLX5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLY5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLZ5', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL06', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL16', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL26', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL36', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL46', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL56', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL66', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL76', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL86', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL96', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLA6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLB6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLC6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLD6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLE6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLF6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLG6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLH6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLI6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLJ6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLK6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLL6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLM6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLN6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLO6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLP6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLQ6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLR6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLS6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLT6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLU6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLV6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLW6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLX6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLY6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLZ6', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL07', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL17', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL27', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL37', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL47', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL57', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL67', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL77', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL87', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KL97', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLA7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLB7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLC7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLD7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLE7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLF7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLG7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLH7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLI7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLJ7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLK7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLL7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLM7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLN7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLO7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLP7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLQ7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLR7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLS7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLT7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLU7', 'FINST-UT866MB1SLLC5NKH7GLGK7YN0OW133RIC08KLV7']}\n",
"新建第 599 条数据! {'result': ['FINST-FE8668B1KHLC3WJG6527Z42BTFS53KYIC08KL8C', 'FINST-FE8668B1KHLC3WJG6527Z42BTFS53KYIC08KL9C', 'FINST-FE8668B1KHLC3WJG6527Z42BTFS53KYIC08KLAC', 'FINST-FE8668B1KHLC3WJG6527Z42BTFS53KYIC08KLBC', 'FINST-FE8668B1KHLC3WJG6527Z42BTFS53KYIC08KLCC']}\n"
]
}
],
"source": [
"'''遍历数据进行新建'''\n",
"c_data = c_data.astype('string')\n",
"c_data = c_data.fillna('',inplace=False)\n",
"for a in range(0,len(c_data[\"date_fmt\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(c_data[\"date_fmt\"])):\n",
" try:\n",
" formData = {\n",
" 'textField_kwcwsccn': c_data[\"group_name\"][i], # 公司名称\n",
" 'textField_kwcwsccj': c_data[\"org_name\"][i], # 门店名称\n",
" 'textField_kwcwscci': c_data[\"org_code\"][i], # 门店编码\n",
" 'textField_kwcwsccm': c_data[\"group_grade\"][i], # 公司等级\n",
" 'textField_kwcwy3tw': c_data[\"saas_use_year\"][i], # 使用时间\n",
" 'textField_kwcwscck': c_data[\"org_size\"][i], # 门店规模\n",
" 'textField_kwcwy3tx': c_data[\"org_stage\"][i], # 门店阶段\n",
" 'textField_kwcwsccl': c_data[\"saas_customer_type\"][i] # 门店分层\n",
" }\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass\n",
" FORMID = \"FORM-NC966W8174MVWULSY88ZN2WHTF6J3JTWRWCWK2\" \n",
" res_new = Batch_creation(FORMID,TOKEN,ALL_formData)\n",
" print(\"新建第\",i,\"条数据!\",res_new)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ces "
]
},
{
"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": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_NGV = pd.DataFrame(list(rows),columns=col)\n",
"# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"\n",
"\n",
"# 基础函数配置\n",
"import pandas as pd\n",
"import 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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92\",\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_FE5IWP670JPRC5ZA6HK0&systemToken=HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92&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"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"25278\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n",
"读取到表单中 100 条数据!\n"
]
}
],
"source": [
"'''批量删除NGV数据'''\n",
"for i in range(0,10):\n",
" default = True\n",
" while default:\n",
" FORMID = \"FORM-NC966W8174MVWULSY88ZN2WHTF6J3JTWRWCWK2\" \n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" PAGES = form_data.get('totalCount')//100 +1 \n",
" PAGES = PAGES * 2\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} 数据!')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"'''遍历数据进行新建'''\n",
"data_NGV = data_NGV.astype('string')\n",
"data_NGV = data_NGV.fillna('',inplace=False)\n",
"for a in range(0,len(data_NGV[\"date_fmt\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" formData = {\n",
" 'textField_kwcwsccn': data_NGV[\"group_name\"][i], # 公司名称\n",
" 'textField_kwcwsccj': data_NGV[\"org_name\"][i], # 门店名称\n",
" 'textField_kwcwscci': data_NGV[\"org_code\"][i], # 门店编码\n",
" 'textField_kwcwsccm': data_NGV[\"group_grade\"][i], # 公司等级\n",
" 'textField_kwcwy3tw': data_NGV[\"saas_use_year\"][i], # 使用时间\n",
" 'textField_kwcwscck': data_NGV[\"org_size\"][i], # 门店规模\n",
" 'textField_kwcwy3tx': data_NGV[\"org_stage\"][i], # 门店阶段\n",
" 'textField_kwcwsccl': data_NGV[\"saas_customer_type\"][i] # 门店分层\n",
" }\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass\n",
" FORMID = \"FORM-NC966W8174MVWULSY88ZN2WHTF6J3JTWRWCWK2\" \n",
" res_new = Batch_creation(FORMID,TOKEN,ALL_formData)\n",
" print(\"新建第\",i,\"条数据!\",res_new)"
]
}
],
"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
}
@@ -0,0 +1,646 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas64__v0.3.21-gcc_10_3_0.dll\n",
" warnings.warn(\"loaded more than 1 DLL from .libs:\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"距离今天还有120天的日期是:2024-03-06\n",
"读取到省市小六技术专家区域客服区域客成表单中 347 条数据!\n",
"{'result': '5ce89321-8e14-4016-9b55-ac6da3a03f8c'}\n",
"822nD4EbxXditOPJubTmbIvyxEi+COcZaBRldfuxFsnKAkPyXtJN96KdyJl7cOQcxpADdZpNsuSMoeq1uL63E0M7iZKv/3CFUhhmSg+44e/UW/r/ScVimB/IhawLrONxwkMMi/wWvdX+cWTv8C7Fc4oJKDgf3aNd\n",
"数据新建成功!\n",
"{'result': '4dba907e-ccc1-4afc-b1dd-461add579fae'}\n",
"biLXruec3L6UiEULuRxpjVp82qHniLOkSpQKyK49bQM3ftKoIyQkX3DqZIrRj4FSlMWlFb73RYT+D6G+HyXmeOeJbm/2BbzlgK5egXVNolgEI4cOPy+takTuKnxsYFV3Dle0nDZWOrCLj/Q2+LlFnMJrhOz4fjwJ\n",
"数据新建成功!\n",
"{'result': '8f840e95-8494-47bf-b901-553c87082a7e'}\n",
"ZvZTULI5JDia+KZ24gbQKJQMHx22ldUiaMH+S5CUtoYeqyRGJiVBc8dXfwEMFrki1XFigdkP+/rddI07MiCUTfE6Ka1p8gYpw2H6oSdrXsQ54GRB97D3PKsAIBk0BFUJTVfaHEI319y2QU+C958769x2v1EJCVei\n",
"数据新建成功!\n",
"{'result': '46e8da0c-122d-4c6a-9ff8-179b2080f485'}\n",
"HS1mUBmKrfJ+LabI/KEo2CvHz74dy+u4QqjD/zcDEiJbc8fR0OwwFLDaCHiJsWy1s6SAl8nRr/btZzBz9dReYENFIiisx8olCqzW1nbZVHyNHnBLmDbWMZXEy8EIy20Rp4PMm/O00nj2erk+j+CU5ByDV6nQMn+D\n",
"数据新建成功!\n",
"{'result': '3c0829e7-2087-4471-b660-625c816f1ffe'}\n",
"WSYW+js1pkNj/nWMvN5iYY/nlbIquZj6qlK45Q1dlFwlhNkkEY9mIYyJj3eT/uHxSMnD04oAW8vxjt49iSk8DlwZK50bS8nQDZbR1DNrOoIJGvLCwK23HJTo6Tv7vAcjr4CChUa9K2KAofFxaaBuJfjSPF4jn8l3\n",
"数据新建成功!\n",
"{'result': 'aa4c2ec4-5d4b-4561-aad1-0d41cc399975'}\n",
"ymWUIxkJ0OBw3KLOT+NLSXfnkU0RgS9GXCIui4Ff7fZ0qpfkfR0zbixab7RzzXH6+7XeskLicG0n9QSdMDJWarWHLFeQvjYs7F8soTnNlHTk1Iwh7yifShunDIRWMesam743uKG6yEA4AWQP1NKpUbi5kQZc6H7o\n",
"数据新建成功!\n",
"{'result': 'f3923ce1-dcdd-4e55-a6be-fa6592c72eee'}\n",
"VC85mF8oXumLAr+iii37x42SrGVOde1sW7qfU8M3+ccFSHvdpf2YQnBaSvxFXWDtYTP5OVOuZHMkrv5ThFbRF5inX9yST3fDYwxjSlkfjFIIXjXq4jjn45ot+uW4eaf+ERiafQd43La4b9I9ZFmvWRFPVC/bWsp6\n",
"数据新建成功!\n",
"{'result': '7624615b-4d8a-4c54-a03d-54e240f77e9e'}\n",
"WNoQlr/OnJGAyXK38XpK9JEKuzqKodsvwhAaFvHi4RW+AOkt6LEp6U0aPTx884YF4Q+FXBLxVomRs/uG2iKY4//xDB9CwAq4B+7crJMsKrOLl2wFUpggv+BD5Vv1hTMmwvnC3FUJllq8A3szFBaU9cTZDjo7pnbo\n",
"数据新建成功!\n",
"{'result': '15cfa17e-393a-4141-bf54-aedd9e18641b'}\n",
"ZlIvORb0WqZPxCw+fIxakRsCixvAvfsEVhsFnypPEcDnJUPxulqvfNwZnWttJW4UZdu8yxFSQkQK3/VxUsuiUVtj87DvgPq/7LLA4awG6SJtTpGTToqZsYK+nghBhHr+YhkRHezg3W9up8DSGWjqcT/aSVI5Nnaf\n",
"数据新建成功!\n",
"{'result': '73d1729d-c51f-4d7e-8c5b-c1c2c66178aa'}\n",
"lUImzsoHx7qI5AZOGPapFgY27gINa/UB9G2bHVtSexxrU9jQwqfstW1kIF/3kKTW6GAEmibu9uaOqkBpAjD1MHqUCmbBES3FARpaII9yZXOnIG2o+D4SgdgcwV2Uw70aaOYg7x0eX1XJ/ET8YqtUBg9CqNNJw0dT\n",
"数据新建成功!\n",
"{'result': 'db5a8a19-ec97-401c-b624-dc07b53009b2'}\n",
"ZyG1udQrPlJ29D3wWERKOa/MAi+lsHoLKJvawKvM3L+ewc80COFPymiiTUhwKAwJKMcWmy0J/tX7C4I1fPxyaV9qvDmi9f+QNALssF7FcgVo/hEYuf5xJm1LMDatt1SkfCnOSYWgDdidvAVlO4BLnbbwMHWm8XQQ\n",
"数据新建成功!\n",
"{'result': '2b9c4d8f-db00-4ecd-8ba5-e9a4769ce855'}\n",
"0UxjQrJM06bnJDB6QlflN+2ilcDMC1iS5+tbSXFSSqaSSBjv4lOvAoF/aqAXRQgejic33brBMsID6oLP1POg4UbLL5GsUd3dEBrZ8reXn39f05SDv2uFRLyHYWu+LZNmxMYuDTUYzSVp9XO2tBVECB1HisI4dvOD\n",
"数据新建成功!\n",
"{'result': '69db386d-4ab7-4fa0-8a32-907e42658ae2'}\n",
"WuQMK2XXKgQtyejein8KQuTeomOOGmr8YXH0/VrxNTWGdtM65arSzzQRFwgD9EkJZWMiDqR16ViyRTMvu1IMDuHfKzs+JU7mLNZNuotLP8CRthZr1YgOfR/z1Ewp6zNYDlzONKJMNH1kUUf3KqYOH94bucfeRorV\n",
"数据新建成功!\n",
"{'result': '7fac1b7d-9c8f-43de-879c-7d5bda2fe50b'}\n",
"z6PCc+2vQde5UO47TLB/4fkVXoGs0s2/Vl16+zZ/HfnVEjI6jsmoqVDIZQigDyGHP0ElfEdLk5DlOudtcCFzJODccSYp90xJH3dujg9Tg4PY/VVMSmfFmv4ZdwtK2zmhmLbkb6pWa2u4HzhEq+OvOvEvRb2qlv3g\n",
"数据新建成功!\n",
"{'result': 'bc927e89-467f-4253-a1be-ab6997eb4b56'}\n",
"9VKzvxSXHrtcxp4xzcC0npJxZqEpGZVNvgy2eI95dUivppHVnfz0431kuURxJ75You2s8A4FVBYoHfKVx2kEjT9yQHF7WMAFGHS8GgOJUVORCG9pn9rBwKHBkQqJWRf0kj1RekC1DX3nZrxNJLONyCQIA6veiCMG\n",
"数据新建成功!\n",
"{'result': 'cbf11b36-3727-40b6-af70-1aa11768ae41'}\n",
"a8Cc9to5p4NMZdQ9+5ZP4PnXuZU2GzFaza05ocEaadI8iYwO0+u/MM25kJJdYXSEpugfQtR02+Ex6rgQVpZ1UbEftZ+XpUhncR+XP32sRdt5H0uoUBCEDIk7a5REDBpGODCBbjUasblsdSMYtsf5BL7v2RiSgnGL\n",
"数据新建成功!\n",
"{'result': '4ae91c77-7181-4817-bad3-2b8cc2647c29'}\n",
"2cwjAMQfVN18Z7a7S4zV0IEef2LL5KfGc1eHaD7ewiTAy9KNgXkPAoiVA+tmQ34sXhg/oHjzKcHlVzTJmCf2E7uddrrYvUoWqifunRpEslDVDJaeE9PR1gPs2UQJpuv0PHWYaSPIHojLcKn7HintaiYEDDxc7gUj\n",
"数据新建成功!\n",
"{'result': 'a83aa44f-4a5c-45ce-8915-ec6a47dc0410'}\n",
"0KfgiCYFf7OKL/uPWK2ZGbGSLu5R0Naj6xTjUT9xqdz/+gucRkiD8Jol/yYcnM9H3WxGRR8CtKrECdepMwkjWgAJHddBRnLhely9ZYYg6yp1epmz0PfliaeLh3Ffc83E7y2ju47+/TW0a1N0CkQCnBDe5kv5hw/D\n",
"数据新建成功!\n",
"{'result': '6192b72c-9a7d-4baa-8884-52823ca0f1a7'}\n",
"6TvpLPHBFlUBjrnyWqAjq8Y7BnXaIDxDTm5jzT45m35xX+FaXwt/Z/O0oSyLwi61pfsAWgRcTq1ft4SKuCMsxv0tSQH5e5C8S5D2XZSTCj6NXlhdh27pDeA9HlLllu+iW8q6EdFrEynv9p3K8kJFtxkM10U5O08T\n",
"数据新建成功!\n",
"{'result': 'c3680f75-6968-4488-87e7-a071c3499f24'}\n",
"e3Dgoq7Gk47Czmk596NFrbEqUOTzVZdlRXOz/ooVVOWk1emls0TagrOscybZILeXfvv0w42IkfTzwGgFdrr4G7hHfBHv3lW7rrF7lruwL2WElbcRQUtfRkcVF3lv/vi7cDPX3ggbnGWGf54UPkb4el4KxfzmdZZX\n",
"数据新建成功!\n",
"{'result': 'c1139d67-a673-4759-be79-59360f058397'}\n",
"qBXdbTi6NFgKO6qBhXSz1yHmVaPbwLk0LqsRXE92ff66HOpmpA4VX21cUkQnNl3KxmYpO4yRJm/LZ/7g47giH7RXSI1SqP2YNJQjPzutbV1ivTd91Nkv+bS0iamdnk8EdwtPAyYBi9rpIxIW+D8EOTtl8uBGCCDR\n",
"数据新建成功!\n",
"{'result': '44250c2e-5379-441d-b570-97bfb403b653'}\n",
"Gzx54m1v6lZFYUbHBQDldPFQesrbay2TsQbao0EOhD3neeAr5NwOVhZiDgDAbTefKwLxg4OXR7WQnRyrhzg4hntgyKzEULAZ0JuGJbATep7fC1YPmZzj3pWXi7V53a9nkGFihH0wXY0+6pEpbuAsirt3TcNbvP0k\n",
"数据新建成功!\n",
"{'result': 'f2dfbe7c-1660-404b-a2aa-bacd68711b25'}\n",
"I5Y7t6zYO4gp2ezeBKCPkpW9su8/dUbql99PUXDBuvjRR8kHTK7O1PstnzVGw98D/jcd0k0T3fHd1o2N9QYHsdcBkVEX6bybbEUTKLNPeSbMCKJaEAeWpmBZ+ssMVQFs9yFobFufBdyaQmGsz5pOhiXKPmoB9QZQ\n",
"数据新建成功!\n",
"{'result': '41cfb243-2dbf-49d4-9fe1-5d89ae27f618'}\n",
"OBy5m79v6w3BMSsJTCvKaq3RDn6u+5tfs+5H4tRB7ZzQknbDHQwnbJW6ur+nrXHqgt7cV8dF5KyBQyBBrA9yM7uVfwR7C+m4TYPjLrtdR1HzoVBMsLeev7kgLCdH7xI0A3S4FX9Nd+tjaksQUCX9ycf3CzSx8d54\n",
"数据新建成功!\n",
"{'result': '71fd6f1b-dce6-4274-b182-07c978223254'}\n",
"+YDyhLGF2xSsPUmNbiZRaKKJsK64nyxSYOnNVeklP7VP6hb9ToiSfnQ4XG/ggmg7Hr5rzTossYIW3AaIDnwoMmpu5NaR/BjzXMWfMOo7Go9RQetZ4X6p+q4PmNAC57m1VP2iBDnO6mTJBIMqupQHMcMFU1Bi90OV\n",
"数据新建成功!\n",
"{'result': 'c46b75c4-3a06-439c-b46b-47c4c2b24613'}\n",
"YO8872zuAncd+24CGdKkJH7xJ6DJyqUyyF8P7Eu5oz9A1F0iQbbOX/Xf/5IprzvHFlwmo/fOXCk9bUlxfup+rlhyrAptBKk1s/3qS99ElWNyBKztujn6CGx2KRqsTKwtOUK/Hmi5e84Nj4MhLvQWmWIKR4S4ZZU7\n",
"数据新建成功!\n",
"{'result': '0d28935c-8320-4d5c-9e57-cc1443eb4c83'}\n",
"D1EabFjV+CleVZX3HrxaoZmGQxKyWmqmTvMoMBg3cNMPROAStj/Ox5KyKPmyClljJWSCqZDFrkaVeMnXegAuxvBs91VpXADF3K5qigTjVqXvegPWSvDYvypEat7hxL9LIpGuc5qzmUqR6CiTPMLm9ttggEQE2qcv\n",
"数据新建成功!\n",
"{'result': 'a4154f9a-fd17-4035-9b45-16f6a00ffc97'}\n",
"DIiDjfnUufelcORkchmwJnmDbSqIw+6Op3x+KMIrTIbLGwV7ExyalB+o7nwqbu5U0dk8wvScfryKkjGgnuq3dyjaCoVD2yMX6cItTszj+C6dSRuGl710290efH/vBc9mZOtnOs38IVkCyIcrRO3WjwJNvfsaV8Mc\n",
"数据新建成功!\n",
"{'result': '020363e7-b42c-4ed1-aa96-fe27c9593eb0'}\n",
"GUA0jP3WlnYlAQrbMg5bjmG2HqH3vOrg6Sc5gc2MHvaduTGeySc/HpvT423u72ZpEQjY8fRMWVplSCGWedD/hGbK3CxnHdZtAilP4uzAVg9aVl/D0oM5RQpp5t+k6Be7EZRXoipechvACI64m8TVVYv+NUHzvdc2\n",
"数据新建成功!\n"
]
}
],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"from datetime import date, timedelta\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-2)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"\n",
"today = date.today()\n",
"days_to_add = 120\n",
"future_date = str(today + timedelta(days=days_to_add))\n",
"# 输出结果\n",
"print(\"距离今天还有{}天的日期是:{}\".format(days_to_add, future_date))\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}' and \"expiry_time\" like '%{future_date}%';\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_NGV = pd.DataFrame(list(rows),columns=col)\n",
"# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"\n",
"# 基础函数配置\n",
"import pandas as pd\n",
"import pandas as pd\n",
"import requests\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"import json\n",
"import numpy as np\n",
"import time\n",
"from datetime import date, timedelta\n",
"\n",
"ROOT = Path('.').absolute() # 当前工作目录\n",
"\n",
"def generateToken() -> str:\n",
" \"\"\" 生成 token \"\"\"\n",
"\n",
" token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'\n",
"\n",
" # 该信息在钉钉开放应用中\n",
" data = {\n",
" \"appKey\": \"ding5kqocon5s9oph5uq\",\n",
" \"appSecret\": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'\n",
" }\n",
"\n",
" res = requests.post(token_api, json=data)\n",
" token = res.json()['accessToken']\n",
"\n",
" return token\n",
"\n",
"def read_instances(token, formUuid, page, n):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"def read_delete(token, formInstanceId):\n",
" \"\"\" 函数功能:调用本接口删除表单数据。 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formInstanceId\" : formInstanceId\n",
" }\n",
"\n",
" res = requests.delete(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"def read_new(FORMID,formData):\n",
" \"\"\" 通过实例id 获取表单内容 \"\"\"\n",
" api = f'https://api.dingtalk.com/v1.0/yida/forms/instances'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"language\" : \"zh_CN\",\n",
" \"userId\" : \"yida_pub_account\"\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" print(res.json())\n",
"\n",
" return res.json()\n",
"\n",
"\n",
"def component(FORMID,TOKEN):\n",
" \"\"\" 获取组件信息 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/formFields'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" # \"language\" : \"zh_CN\",\n",
" \"userId\" : \"yida_pub_account\"\n",
" }\n",
"\n",
" res = requests.get(api, headers=headers, json=payload)\n",
"\n",
" return res.json()\n",
"def initiate_process(TOKEN,formData):\n",
" \"\"\" 发起宜搭审批流程 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : \"FORM-PE866MD1MJMU0WGLYRFLYEN5YN9L1I55Z7ZUK22\",\n",
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"processCode\" : \"TPROC--PE866MD1MJMU0WGLYRFLYEN5YN9L1885Z7ZUK32\",\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" return res.json()\n",
"\n",
"def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):\n",
" \"\"\" 批量删除表单实例 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
"\n",
" payload = {\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"true\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"formInstanceIdList\" : json.dumps(ALL_DATA_instance, cls=NpEncoder),\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"executeExpression\" : \"false\" # 不触发\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" return res.json()\n",
"\n",
"def delete_in(TOKEN,formInstanceIdList):\n",
" \"\"\" 逐条删除表单实例 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" res = requests.delete(api, headers=headers)\n",
" return res.json()\n",
"\n",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
" \n",
"import binascii\n",
"import time\n",
"import random\n",
"from pyDes import des, CBC, PAD_PKCS5\n",
"import requests\n",
"\n",
"def des_encrypt(s):\n",
" \"\"\"\n",
" DES 加密\n",
" :param s: 原始字符串\n",
" :return: 加密后字符串,16进制\n",
" \"\"\"\n",
" secret_key = 'HwdMBW8o'\n",
" iv = secret_key\n",
" k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)\n",
" en = k.encrypt(s, padmode=PAD_PKCS5)\n",
" return binascii.b2a_base64(en, newline=False)\n",
"\n",
"\n",
"def des_descrypt(s):\n",
" \"\"\"\n",
" DES 解密\n",
" :param s: 加密后的字符串,16进制\n",
" :return: 解密后的字符串\n",
" \"\"\"\n",
" secret_key = 'HwdMBW8o'\n",
" iv = secret_key\n",
" k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)\n",
" de = k.decrypt(binascii.a2b_base64(s), padmode=PAD_PKCS5)\n",
" return de\n",
"\n",
"TOKEN = generateToken() \n",
"'''读取省市小六技术专家区域客服区域客成 '''\n",
"FORMID = \"FORM-TP866D918DFCA4FW79YZU5X43FO32QZJQDZJL7\" #省市小六技术专家区域客服区域客成\n",
"try:\n",
" # 读取流程表单数据\n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
" PAGES = form_data.get('totalCount')//100 + 1\n",
" textField_gif29wy = {}\n",
" textField_3athky8 = {}\n",
" textField_3hgho1m = {}\n",
" textField_nc7gskc = {}\n",
" \"\"\" 获取全量数据 \"\"\"\n",
" for i in range(1, PAGES+1):\n",
" # form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})\n",
" form_data = read_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" textField_gif29wy[data['formData']['textField_m3hchxc']]=data['formData']['textField_gif29wy'] #区域客成id\n",
" textField_3athky8[data['formData']['textField_m3hchxc']]=data['formData']['textField_3athky8'] #区域客服id\n",
" textField_3hgho1m[data['formData']['textField_3hgho1m']]=data['formData']['textField_3hgho1m'] #小六id\n",
" textField_nc7gskc[data['formData']['textField_nc7gskc']]=data['formData']['textField_nc7gskc'] #技术专家id\n",
" print(f'读取到省市小六技术专家区域客服区域客成表单中 {len(textField_gif29wy)} 条数据!')\n",
"\n",
"\n",
" '''遍历数据进行新建'''\n",
" data_NGV = data_NGV.astype('string')\n",
" data_NGV = data_NGV.fillna('',inplace=False)\n",
" group_grade = {\n",
" \"普通客户(VIP\":10,\n",
" \"重要客户(SVIP\":20,\n",
" \"区域KAMVP\":30,\n",
" \"全国KAFMVP\":50\n",
" }\n",
" # 过滤数据\n",
" for i in range(0,len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" t = time.time()\n",
" ts = int(round(t * 1000))\n",
" randint = random.randint(100000000, 999999999)\n",
" req = data_NGV['id_own_org'][i] + \"_\" + str(ts) + \"_\" + str(randint)\n",
" str_en = des_encrypt(req)\n",
" req_new = str_en.decode('utf-8')\n",
"\n",
" url = f\"http://manage.f6yc.com/hive-admin/py/yida/renewal/orgInfo\"\n",
" data = {\n",
" 'req':req_new,\n",
" 't':ts,\n",
" 'r':randint\n",
" }\n",
" res = requests.post(url,data=data)\n",
" formData = res.json()['data']['yidaFormData']\n",
" # 过期日期的时间戳\n",
" expire_timestamp = int(formData['dateField_ksirro5l'])/1000\n",
"\n",
" # 获取距离过期日期前120天,前90天,前60天,前30天的日期\n",
" expire_date = datetime.datetime.fromtimestamp(expire_timestamp)\n",
" before_90_days = expire_date - datetime.timedelta(days=90)\n",
" before_60_days = expire_date - datetime.timedelta(days=60)\n",
" before_30_days = expire_date - datetime.timedelta(days=30)\n",
" # print(formData)\n",
" formData['dateField_ljzefdm4'] = str(int(before_90_days.timestamp()*1000)) # 90天限制日期\n",
" formData['dateField_ljzefdm5'] = str(int(before_60_days.timestamp()*1000)) # 60天限制日期\n",
" formData['dateField_ljzefdm6'] = str(int(before_30_days.timestamp()*1000)) # 30天限制日期\n",
"\n",
"\n",
" employeeField_kykw5ege = str(formData['employeeField_kykw5ege'])\n",
" employeeField_ksydghrd = str(formData['employeeField_ksydghrd'])\n",
" formData['employeeField_ljz6gvwc'] = f\"['{textField_gif29wy[formData['textField_kuj8nx01']]}', '{textField_3athky8[formData['textField_kuj8nx01']]}']\" # 区域客成+区域客服\n",
" # formData['employeeField_ljz6416i'] = f\"[{textField_gif29wy[formData['textField_kuj8nx01']]}, {employeeField_kykw5ege}]\" # 区域客成+小六\n",
" formData['employeeField_ljz6416i'] = f\"['{textField_gif29wy[formData['textField_kuj8nx01']]}', '{employeeField_kykw5ege}']\" # 区域客成+小六\n",
" formData['employeeField_ljz6416j'] = f\"['{textField_gif29wy[formData['textField_kuj8nx01']]}', '{employeeField_ksydghrd}']\" # 区域客成+技术专家\n",
" formData['employeeField_ljz6gvwd'] = textField_3athky8[formData['textField_kuj8nx01']] # 区域客服\n",
" formData['employeeField_ksydght0'] = textField_gif29wy[formData['textField_kuj8nx01']] # 区域客成\n",
"\n",
" if employeeField_kykw5ege ==\"1824534815658365\" or employeeField_kykw5ege ==\"0627252740652855\": \n",
" if employeeField_ksydghrd ==\"\":\n",
" employeeField_kykw5ege = '0627252740652855'\n",
" formData['employeeField_ljz6gvwc'] = '0627252740652855' # 区域客成+区域客服\n",
" formData['employeeField_ljz6416i'] = '0627252740652855' # 区域客成+小六\n",
" formData['employeeField_ljz6416j'] = '0627252740652855' # 区域客成+技术专家\n",
" formData['employeeField_ljz6gvwd'] = '0627252740652855' # 区域客服\n",
" formData['employeeField_ksydght0'] = '0627252740652855' # 区域客成\n",
" formData['employeeField_kykw5ege'] = '0627252740652855' # 专属运营顾问\n",
" formData['employeeField_ksirro5o'] = '0627252740652855' # 续约绩效归属人\n",
" else:\n",
" employeeField_kykw5ege = employeeField_ksydghrd\n",
" formData['employeeField_ljz6gvwc'] = employeeField_ksydghrd # 区域客成+区域客服\n",
" formData['employeeField_ljz6416i'] = employeeField_ksydghrd # 区域客成+小六\n",
" formData['employeeField_ljz6416j'] = employeeField_ksydghrd # 区域客成+技术专家\n",
" formData['employeeField_ljz6gvwd'] = employeeField_ksydghrd # 区域客服\n",
" formData['employeeField_ksydght0'] = employeeField_ksydghrd # 区域客成\n",
" formData['employeeField_kykw5ege'] = employeeField_ksydghrd # 专属运营顾问\n",
" formData['employeeField_ksirro5o'] = employeeField_ksydghrd # 续约绩效归属人\n",
" if formData['textField_kycfic6o'] == \"区域KAMVP\" or formData['textField_kycfic6o'] == \"全国KAFMVP\":\n",
" formData['employeeField_ljz6gvwc'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n",
" formData['employeeField_ljz6416i'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n",
" formData['employeeField_ljz6416j'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n",
" formData['employeeField_ljz6gvwd'] = f\"['{employeeField_kykw5ege}', '{employeeField_ksydghrd}']\" # 小六+技术专家\n",
" try:\n",
" formData['textField_ksirro5g'] = group_grade[data_NGV['group_grade'][i]]\n",
" formData['textField_kycfic6o'] = data_NGV['group_grade'][i]\n",
" except:\n",
" pass\n",
" res_new = initiate_process(TOKEN,formData)\n",
" time.sleep(2)\n",
" print(res_new)\n",
"\n",
" # 回传信息-------------------------------------------------------------------------------------------------------------\n",
" default_new = True\n",
" a_len = 1\n",
" while default_new:\n",
" t = time.time()\n",
" ts = int(round(t * 1000))\n",
" randint = random.randint(100000000, 999999999)\n",
" req = res_new['result'] + \"|\" + formData['textField_kuntp6fk'] + \"|\" + formData['textField_kuntp6fl']+ \"|\" + formData['employeeField_kykw5ege'] + \"_\" + str(ts) + \"_\" + str(randint)\n",
" str_en = des_encrypt(req)\n",
" print(str_en.decode('utf-8'))\n",
" req_new = str_en.decode('utf-8')\n",
" url = f\"http://manage.f6yc.com/hive-admin/py/yida/renewal/insertRenewalFormsData\"\n",
" data = {\n",
" 'req':req_new,\n",
" 't':ts,\n",
" 'r':randint\n",
" }\n",
" res = requests.post(url,data=data)\n",
" res.json()\n",
" \n",
" if res.json()['message'] == \"SUCCESS\":\n",
" default_new = False\n",
" a_len = a_len + 1\n",
" if a_len > 5:\n",
" default_new = False\n",
" time.sleep(1)\n",
" '''校验是否新建正常'''\n",
" FORMID = \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\" \n",
"\n",
" if a_len < 5:\n",
" print(\"数据新建成功!\")\n",
" else:\n",
" def start_instance_process(token: str, name):\n",
"\n",
" \"\"\"发送宜搭表单 -- 发起流程表单\n",
"\n",
" Args:\n",
" token \n",
" data:需要发送的数据字典\n",
" \"\"\"\n",
"\n",
" yida_api = \"https://api.dingtalk.com/v1.0/yida/processes/instances/start\"\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" send_data = {\n",
" \"textField_l9fe0uiw\": name,\n",
" \"textField_l9fe0uiv\": name\n",
" }\n",
"\n",
" payload = {\n",
" \"appType\": \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
" \"systemToken\": \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
" \"userId\": \"yida_pub_account\",# 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formUuid\": \"FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2\",\n",
" \"formDataJson\": json.dumps(send_data),\n",
" \"processCode\":\"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2\"\n",
" }\n",
"\n",
" res = requests.post(yida_api, headers=headers, json=payload)\n",
" return res\n",
" try:\n",
" name = f\"[流程]续约服务流程 新建后接口回传失败,请检查!{data_NGV['id_own_org'][i]}\"\n",
" res_yujing = start_instance_process(TOKEN,name)\n",
" except:\n",
" pass\n",
" except:\n",
" '''校验是否新建正常'''\n",
" FORMID = \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\" \n",
" def start_instance_process(token: str, name):\n",
"\n",
" \"\"\"发送宜搭表单 -- 发起流程表单\n",
"\n",
" Args:\n",
" token \n",
" data:需要发送的数据字典\n",
" \"\"\"\n",
"\n",
" yida_api = \"https://api.dingtalk.com/v1.0/yida/processes/instances/start\"\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" send_data = {\n",
" \"textField_l9fe0uiw\": name,\n",
" \"textField_l9fe0uiv\": name\n",
" }\n",
"\n",
" payload = {\n",
" \"appType\": \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
" \"systemToken\": \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
" \"userId\": \"yida_pub_account\",# 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formUuid\": \"FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2\",\n",
" \"formDataJson\": json.dumps(send_data),\n",
" \"processCode\":\"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2\"\n",
" }\n",
"\n",
" res = requests.post(yida_api, headers=headers, json=payload)\n",
" return res\n",
" try:\n",
" name = f\"[流程]续约服务流程 未成功新建,请检查!{data_NGV['id_own_org'][i]}\"\n",
" res_yujing = start_instance_process(TOKEN,name)\n",
" except:\n",
" pass\n",
"except:\n",
" '''校验是否新建正常'''\n",
" FORMID = \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\" \n",
" def start_instance_process(token: str, name):\n",
"\n",
" \"\"\"发送宜搭表单 -- 发起流程表单\n",
"\n",
" Args:\n",
" token \n",
" data:需要发送的数据字典\n",
" \"\"\"\n",
"\n",
" yida_api = \"https://api.dingtalk.com/v1.0/yida/processes/instances/start\"\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" send_data = {\n",
" \"textField_l9fe0uiw\": name,\n",
" \"textField_l9fe0uiv\": name\n",
" }\n",
"\n",
" payload = {\n",
" \"appType\": \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
" \"systemToken\": \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
" \"userId\": \"yida_pub_account\",# 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formUuid\": \"FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2\",\n",
" \"formDataJson\": json.dumps(send_data),\n",
" \"processCode\":\"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2\"\n",
" }\n",
"\n",
" res = requests.post(yida_api, headers=headers, json=payload)\n",
" return res\n",
" try:\n",
" name = f\"[流程]续约服务流程 表单数据读取失败,请检查!{data_NGV['id_own_org'][i]}\"\n",
" res_yujing = start_instance_process(TOKEN,name)\n",
" except:\n",
" pass"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
+531
View File
@@ -0,0 +1,531 @@
# -*- 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_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_new = pd.DataFrame(list(rows),columns=col)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 基础函数配置
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_put(token, formInstanceId,data_new):
""" 函数功能:读取普通表单的所有数据 """
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" : "2268275546837446", # 曹伟 id
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : formInstanceId,
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder)
}
res = requests.put(api, headers=headers, json=formData)
return res.json()
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()
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" : "true",
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "false",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "false",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
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}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
return res.json()
def read_form_instances(token, formUuid, page=1, n=100, searchField={},createFromTimeGMT='',createToTimeGMT=''):
""" 函数功能:读取普通表单的所有数据 -- 应用:F6客户服务 """
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/search'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
'currentPage': page,
'pageSize': n,
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
'createFromTimeGMT':createFromTimeGMT,
'createToTimeGMT':createToTimeGMT,
"searchFieldJson": json.dumps(searchField)
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def create_form_instances(token, formUuid, formData={}):
""" 函数功能:创建普通表单实例 -- 应用:F6客户服务 """
api = 'https://api.dingtalk.com/v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
"formDataJson": json.dumps(formData)
}
res = requests.post(api, headers=headers, json=payload)
return res
def read_instances_1108(token, formUuid, page, n,formatted_today,formatted_today_two):
""" 函数功能:读取普通表单的所有数据 """
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,
"createFromTimeGMT" : formatted_today,
"createToTimeGMT" : formatted_today_two,
"currentPage" : page,
"pageSize" : n
}
res = requests.post(api, headers=headers, json=formData)
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)
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
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[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
'''获取表内控件信息 '''
# FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
# component_list = component(FORMID,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_NGV[",name_value,"][i],")
'''读取市-技术专家id '''
FORMID = "FORM-A8666NA1FJDEVPBB6VVTOCMP47UP2J2L6SPML2" #市-技术专家id
# 读取流程表单数据
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
textField_lmps6q39 = {}
""" 获取全量数据 """
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'):
textField_lmps6q39[data['formData']['textField_lmps6q38']]=data['formData']['textField_lmps6q39'] #技术专家id
print(f'读取到市-技术专家id表单中 {len(textField_lmps6q39)} 条数据!')
import datetime
now_time = datetime.datetime.now()
yes_time = now_time + datetime.timedelta(days=-2)
yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前2天日期
searchField={'textField_nnyw1ge':str(yes_time_nyr)} # 'textField_nnyw1ge':str(yes_time_nyr)
res = read_form_instances(token=TOKEN, formUuid='FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91',searchField=searchField)
data_NGV_new = data_NGV_new.astype('string')
data_NGV_new = data_NGV_new.fillna('',inplace=False)
for i in range(0,len(res['data'])):
res['data'][i]['formData']['textField_nnyw1ge']
index = ""
index = len(data_NGV_new[data_NGV_new['org_code'] == res['data'][i]['formData']['textField_zc1iowp']]) # 门店编码
print(i,":",index,res['data'][i]['formData']['textField_zc1iowp'])
if index > 0:
# 更新
try:
formData = {
'textField_nnyw1ge': data_NGV_new["date_id"][index],
'dateField_e9jt02o': int(time.mktime(time.strptime(data_NGV_new["date_fmt"][index], "%Y-%m-%d"))*1000) if data_NGV_new["date_fmt"][index] !='' else '',
'textField_ek9jnne': data_NGV_new["id_own_group"][index],
'textField_35i6110': data_NGV_new["group_name"][index],
'textField_l8nc9f2': data_NGV_new["id_own_org"][index],
'textField_tdn6hsy': data_NGV_new["org_name"][index],
'textField_zc1iowp': data_NGV_new["org_code"][index],
'textField_2rulk5e': data_NGV_new["group_grade"][index],
'textField_c54tztg': data_NGV_new["org_type"][index],
'textField_qrtnel7': data_NGV_new["org_status"][index],
'textField_7xgxe9g': data_NGV_new["saas_version"][index],
'textField_pnig1i1': data_NGV_new["is_wechat"][index],
'textField_qiovtdj': data_NGV_new["is_mini_app"][index],
'textField_i0h0iqa': data_NGV_new["is_wx_shop"][index],
'textField_qczj9vq': data_NGV_new["is_camera_service"][index],
'textField_jouovty': data_NGV_new["is_maintenance_service"][index],
'dateField_o1v1emn': int(time.mktime(time.strptime(data_NGV_new["saas_create_time"][index], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["saas_create_time"][index] !='' else '',
'dateField_6zdcfnf': int(time.mktime(time.strptime(data_NGV_new["expiry_time"][index], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["expiry_time"][index] !='' else '',
'textField_8uae70x': data_NGV_new["saas_use_days"][index],
'textField_cjkvqpn': data_NGV_new["saas_use_year"][index],
'textField_yhtmsxx': data_NGV_new["is_main_org"][index],
'textField_gfigtpn': data_NGV_new["license_code"][index],
'textField_662foev': data_NGV_new["license_name"][index],
'textField_lco27te': data_NGV_new["org_crm_id"][index],
'textField_1tygbmq': data_NGV_new["province_id"][index],
'textField_z2rntja': data_NGV_new["city_id"][index],
'textField_ohybc2g': data_NGV_new["city_name"][index],
'textField_9oupoal': data_NGV_new["area_id"][index],
'textField_m0rzgwb': data_NGV_new["area_name"][index],
'textField_69po7o9': data_NGV_new["region_name"][index],
'textField_vqxr0d9': data_NGV_new["region_short_name"][index],
'textField_5wr3tj9': data_NGV_new["branch_name"][index],
'textField_6hz7i81': data_NGV_new["carzone_store_id"][index],
'textField_86wu9qm': data_NGV_new["carzone_store_name"][index],
'textField_129quhy': data_NGV_new["customer_carzone_id"][index],
'textField_j7i4mhn': data_NGV_new["salesmen"][index],
'textField_qms107e': data_NGV_new["area_manager"][index],
'textField_qc3blb5': data_NGV_new["service_salesmen"][index],
'textField_vk0hf2u': data_NGV_new["impl_principal"][index],
'textField_3lfom9a': data_NGV_new["service_impl_principal"][index],
'textField_1ud1o2l': data_NGV_new["active_user_count"][index],
'textField_kpdh7qc': data_NGV_new["active_user_type"][index],
'textField_n2y4bmf': data_NGV_new["limit_user_count"][index],
'textField_k5o5u2d': data_NGV_new["limit_user_type"][index],
'textField_729y7jp': data_NGV_new["is_n"][index],
'textField_six7heq': data_NGV_new["is_g"][index],
'textField_tipmhx4': data_NGV_new["is_v"][index],
'textField_qclt1dm': data_NGV_new["is_visited"][index],
'textField_0sk94f9': data_NGV_new["is_active"][index],
'textField_bzszf71': data_NGV_new["active_status_fmt"][index],
'textField_c061ojt': data_NGV_new["bill_count_last_30_day"][index],
'textField_07zkoii': data_NGV_new["bill_day_count_last_30_day"][index],
'textField_3vnzvsx': data_NGV_new["bill_day_count_this_month"][index],
'textField_3mxwdc4': data_NGV_new["bill_count_last_7_day"][index],
'textField_4q3bh5w': data_NGV_new["bill_day_count_last_7_day"][index],
'textField_u0rgodd': data_NGV_new["pv_count"][index],
'textField_eau5xx6': data_NGV_new["uv_count"][index],
'textField_tayz1vv': data_NGV_new["bill_count_1d"][index],
'textField_k4b1a7x': data_NGV_new["bill_count_2d"][index],
'textField_7lfqnm3': data_NGV_new["bill_count_3d"][index],
'textField_g24x9fv': data_NGV_new["bill_count_4d"][index],
'textField_0v3pm0r': data_NGV_new["bill_count_5d"][index],
'textField_1nxvats': data_NGV_new["bill_count_6d"][index],
'textField_vylq7uh': data_NGV_new["bill_count_7d"][index],
'textField_0n1zd7o': data_NGV_new["bill_count_8d"][index],
'textField_uuatjx7': data_NGV_new["bill_count_9d"][index],
'textField_e16m62c': data_NGV_new["bill_count_10d"][index],
'textField_anv4rco': data_NGV_new["bill_count_11d"][index],
'textField_pz5cg65': data_NGV_new["bill_count_12d"][index],
'textField_hamkvor': data_NGV_new["bill_count_13d"][index],
'textField_kw9nvef': data_NGV_new["bill_count_14d"][index],
'textField_ujbyern': data_NGV_new["bill_count_15d"][index],
'textField_uqp3072': data_NGV_new["bill_count_16d"][index],
'textField_2qsei19': data_NGV_new["bill_count_17d"][index],
'textField_p5x4u8t': data_NGV_new["bill_count_18d"][index],
'textField_2lv8ksl': data_NGV_new["bill_count_19d"][index],
'textField_unl61g8': data_NGV_new["bill_count_20d"][index],
'textField_cvtamin': data_NGV_new["bill_count_21d"][index],
'textField_z0hs1c4': data_NGV_new["bill_count_22d"][index],
'textField_9jln7lp': data_NGV_new["bill_count_23d"][index],
'textField_jlst4j8': data_NGV_new["bill_count_24d"][index],
'textField_ct6z2pu': data_NGV_new["bill_count_25d"][index],
'textField_6s2qy9p': data_NGV_new["bill_count_26d"][index],
'textField_l9lyxnr': data_NGV_new["bill_count_27d"][index],
'textField_sz5xht3': data_NGV_new["bill_count_28d"][index],
'textField_ccodrkd': data_NGV_new["bill_count_29d"][index],
'textField_dy7c14l': data_NGV_new["bill_count_30d"][index],
'textField_delij7o': data_NGV_new["bill_count_31d"][index],
'dateField_4vp44kc': int(time.mktime(time.strptime(data_NGV_new["etl_time"][index], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["etl_time"][index] !='' else '',
'textField_0d97bpy': data_NGV_new["maintain_bill_count_last_30_day"][index],
'textField_3nbi33y': data_NGV_new["washing_bill_count_last_30_day"][index],
'textField_17yhr79': data_NGV_new["maintain_bill_day_count_last_30_day"][index],
'textField_e1mrwvb': data_NGV_new["washing_bill_day_count_last_30_day"][index],
'textField_8s47o64': data_NGV_new["retail_bill_count_last_30_day"][index],
'textField_jr9otam': data_NGV_new["retail_bill_day_count_last_30_day"][index],
'textField_mtg1zn1': data_NGV_new["purchase_bill_count_last_30_day"][index],
'textField_96ggfjo': data_NGV_new["purchase_bill_day_count_last_30_day"][index],
'textField_hk7pe9z': data_NGV_new["card_bill_count_last_30_day"][index],
'textField_yj3vbwq': data_NGV_new["card_bill_day_count_last_30_day"][index],
'textField_n2hdr45': data_NGV_new["gd_sales_bill_count_last_30_day"][index],
'textField_p7xgdah': data_NGV_new["gd_sales_bill_day_count_last_30_day"][index],
'textField_7xr2ar8': data_NGV_new["g_change_flag"][index],
'textField_gpzxxmk': data_NGV_new["saas_package"][index],
'textField_tq9g8in': data_NGV_new["manage_model"][index],
'textField_zzchgop': data_NGV_new["contacts"][index],
'textField_a2znmfb': data_NGV_new["contact_number"][index],
'textField_0sadows': data_NGV_new["contact_mobile"][index],
'textField_hz3ujlo': data_NGV_new["g_month_count"][index],
'textField_m1gdeaa': data_NGV_new["g_month_percentage"][index],
'textField_y7ds4oo': data_NGV_new["is_install_service"][index],
'dateField_hiuaj0y': int(time.mktime(time.strptime(data_NGV_new["install_create_time"][index], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["install_create_time"][index] !='' else '',
'dateField_yubgpmy': int(time.mktime(time.strptime(data_NGV_new["last_end_date"][index], "%Y-%m-%d"))*1000) if data_NGV_new["last_end_date"][index] !='' else '',
'dateField_8st5q1a': int(time.mktime(time.strptime(data_NGV_new["renew_date"][index], "%Y-%m-%d"))*1000) if data_NGV_new["renew_date"][index] !=''else '',
'textField_u8h91r2': data_NGV_new["is_chain_owner"][index],
'textField_qzzz8ux': data_NGV_new["group_org_count"][index],
'textField_qzjf8mc': data_NGV_new["recent_bill_warning_days"][index],
'textField_lvyu7z2': data_NGV_new["g_change_flag_d"][index],
'textField_d72wy3d': data_NGV_new["g_lost_warning_days"][index],
'textField_11ebiwp': data_NGV_new["saas_edition_fmt"][index],
'textField_4yu5vlq': data_NGV_new["g_flag_1m"][index],
'textField_8ydk27g': data_NGV_new["g_flag_2m"][index],
'textField_ysoij3v': data_NGV_new["g_flag_3m"][index],
'textField_a4t6iwp': data_NGV_new["g_flag_4m"][index],
'textField_z1xfteb': data_NGV_new["g_flag_5m"][index],
'textField_56x8u44': data_NGV_new["g_flag_6m"][index],
'textField_zscafbj': data_NGV_new["g_flag_day_count"][index],
'textField_4c0rpdd': data_NGV_new["add_org_flag"][index],
'textField_14we48g': data_NGV_new["pt"][index],
'textField_gukslqe': data_NGV_new["org_size"][index],
'textField_y0tw39j': data_NGV_new["qualification_type_fmt"][index],
'textField_3euralk': data_NGV_new["business_scope_fmt"][index],
'textField_4jji26g': data_NGV_new["store_type_fmt"][index],
'textField_z2mrvyk': data_NGV_new["area"][index],
'textField_e7qmeix': data_NGV_new["station_number"][index],
'textField_x9q5k8p': data_NGV_new["header_type_fmt"][index],
'textField_h423ob8': data_NGV_new["org_stage"][index],
'textField_w6dk6au': data_NGV_new["g_count_this_month"][index],
'textField_67sllhy': data_NGV_new["saas_customer_type"][index]
}
try:
if data_NGV_new["province_name"][index]=="":
formData['textField_1q6dt9a'] = ""
else:
formData['textField_1q6dt9a'] = data_NGV_new["province_name"][index]
except:
formData['textField_1q6dt9a'] = ""
try:
formData['employeeField_llc00m15'] = ALL_DATA_staff[data_NGV_new["service_impl_principal"][index]] # 运营负责人_成员字段
except:
formData['employeeField_llc00m15'] = ""
try:
formData['employeeField_llc00m16'] = ALL_DATA_staff[data_NGV_new["area_manager"][index]] # 区域经理_成员字段
except:
formData['employeeField_llc00m16'] = ""
try:
formData['employeeField_lmpsfc04'] = textField_lmps6q39[data_NGV_new["city_name"][index]] # 技术专家_成员字段
except:
formData['employeeField_lmpsfc04'] = ""
read_instances_put(TOKEN, res['data'][i]['formInstanceId'],formData)
print("更新",res['data'][i]['formInstanceId'],res['data'][i]['formData']['textField_zc1iowp'])
except:
pass
else:
# 删除这条数据
try:
read_delete(TOKEN, res['data'][i]['formInstanceId'])
print("删除",res['data'][i]['formInstanceId'],res['data'][i]['formData']['textField_zc1iowp'])
except:
pass
+736
View File
@@ -0,0 +1,736 @@
# -*- 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_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_new = pd.DataFrame(list(rows),columns=col)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 基础函数配置
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_put(token, formInstanceId,data_new):
""" 函数功能:读取普通表单的所有数据 """
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" : "2268275546837446", # 曹伟 id
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : formInstanceId,
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder)
}
res = requests.put(api, headers=headers, json=formData)
return res.json()
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()
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" : "true",
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "false",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "false",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
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}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
return res.json()
def read_form_instances(token, formUuid, page=1, n=100, searchField={},createFromTimeGMT='',createToTimeGMT=''):
""" 函数功能:读取普通表单的所有数据 -- 应用:F6客户服务 """
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/search'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
'currentPage': page,
'pageSize': n,
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
'createFromTimeGMT':createFromTimeGMT,
'createToTimeGMT':createToTimeGMT,
"searchFieldJson": json.dumps(searchField)
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def create_form_instances(token, formUuid, formData={}):
""" 函数功能:创建普通表单实例 -- 应用:F6客户服务 """
api = 'https://api.dingtalk.com/v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
"formDataJson": json.dumps(formData)
}
res = requests.post(api, headers=headers, json=payload)
return res
def read_instances_1108(token, formUuid, page, n,formatted_today,formatted_today_two):
""" 函数功能:读取普通表单的所有数据 """
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,
"createFromTimeGMT" : formatted_today,
"createToTimeGMT" : formatted_today_two,
"currentPage" : page,
"pageSize" : n
}
res = requests.post(api, headers=headers, json=formData)
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)
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
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[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
'''获取表内控件信息 '''
# FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
# component_list = component(FORMID,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_NGV[",name_value,"][i],")
'''读取市-技术专家id '''
FORMID = "FORM-A8666NA1FJDEVPBB6VVTOCMP47UP2J2L6SPML2" #市-技术专家id
# 读取流程表单数据
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
textField_lmps6q39 = {}
""" 获取全量数据 """
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'):
textField_lmps6q39[data['formData']['textField_lmps6q38']]=data['formData']['textField_lmps6q39'] #技术专家id
print(f'读取到市-技术专家id表单中 {len(textField_lmps6q39)} 条数据!')
NAME_LIST = ["","江苏省","河南省","浙江省","陕西省","河北省","山东省","辽宁省","湖南省","四川省","广东省","上海市","贵州省","云南省","安徽省","湖北省","重庆市","新疆维吾尔自治区","内蒙古自治区","北京市","天津市","山西省","甘肃省","福建省","吉林省","广西壮族自治区","黑龙江省","江西省","宁夏回族自治区","青海省","海南省","西藏自治区","中华人民共和国","香港特别行政区"]
data_new = {}
FormDatas = []
# 1.读取普通表单数据
for name in NAME_LIST:
searchField={'textField_1q6dt9a':name}
res = read_form_instances(token=TOKEN, formUuid='FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91',searchField=searchField)
totalCount = res.get('totalCount')
if totalCount>5000:
# 创建一个异常提醒
create_form_instances(token=TOKEN,formUuid='FORM-5Q966D91S1B8C9PP76L2O5BS9C2L3TXQ4JGELZ',formData={'textField_legj59bj':'NGV数据同步读取数据超过5000异常提醒。'})
break
else:
PAGES = totalCount//100 + 1
for page in range(1,PAGES+1):
# print(name,page)
res = read_form_instances(token=TOKEN, formUuid='FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91',searchField=searchField,page=page,n=100)
FormDatas.extend(res.get('data'))
for v in range(0,len(FormDatas)):
data_new[FormDatas[v]['formData']['textField_zc1iowp']] = FormDatas[v]['formInstanceId']
print(f"表单数据共{len(data_new)}条!") #耗时7分钟左右
data_new
# 将字典转换为DataFrame
df_data_new = pd.DataFrame(list(data_new.items()), columns=['org_code', 'Value'])
df_data_new
# 使用isin方法筛选出A表中id_own_org字段不在B表中的行
c_data = data_NGV_new[~data_NGV_new['org_code'].isin(df_data_new['org_code'])]
# 输出C表内容
c_data = c_data.reset_index()
data_NGV = c_data.copy()
try:
alen_ong = []
for c in range(0,len(data_NGV["date_fmt"])):
searchField={'textField_zc1iowp':data_NGV["org_code"][c]}
res = read_form_instances(token=TOKEN, formUuid='FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91',searchField=searchField)
totalCount = res.get('totalCount')
if totalCount > 0:
alen_ong.extend(str(c))
print(f"表单数据{totalCount}条!",data_NGV["org_code"][c])
if len(alen_ong) > 0:
for d in range(0,len(alen_ong)):
data_NGV = data_NGV.drop(int(alen_ong[d]))
except:
print("data_NGV:",len(data_NGV))
data_NGV.reset_index(drop=True, inplace=True)
'''遍历数据进行新建'''
data_NGV = data_NGV.astype('string')
data_NGV = data_NGV.fillna('',inplace=False)
for a in range(0,len(data_NGV["date_fmt"]),100):
ALL_formData = []
for i in range(a,a+100): # for i in range(len(data_NGV["date_fmt"])):
try:
formData = {
'textField_nnyw1ge': data_NGV["date_id"][i],
'dateField_e9jt02o': int(time.mktime(time.strptime(data_NGV["date_fmt"][i], "%Y-%m-%d"))*1000) if data_NGV["date_fmt"][i] !='' else '',
'textField_ek9jnne': data_NGV["id_own_group"][i],
'textField_35i6110': data_NGV["group_name"][i],
'textField_l8nc9f2': data_NGV["id_own_org"][i],
'textField_tdn6hsy': data_NGV["org_name"][i],
'textField_zc1iowp': data_NGV["org_code"][i],
'textField_2rulk5e': data_NGV["group_grade"][i],
'textField_c54tztg': data_NGV["org_type"][i],
'textField_qrtnel7': data_NGV["org_status"][i],
'textField_7xgxe9g': data_NGV["saas_version"][i],
'textField_pnig1i1': data_NGV["is_wechat"][i],
'textField_qiovtdj': data_NGV["is_mini_app"][i],
'textField_i0h0iqa': data_NGV["is_wx_shop"][i],
'textField_qczj9vq': data_NGV["is_camera_service"][i],
'textField_jouovty': data_NGV["is_maintenance_service"][i],
'dateField_o1v1emn': int(time.mktime(time.strptime(data_NGV["saas_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["saas_create_time"][i] !='' else '',
'dateField_6zdcfnf': int(time.mktime(time.strptime(data_NGV["expiry_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["expiry_time"][i] !='' else '',
'textField_8uae70x': data_NGV["saas_use_days"][i],
'textField_cjkvqpn': data_NGV["saas_use_year"][i],
'textField_yhtmsxx': data_NGV["is_main_org"][i],
'textField_gfigtpn': data_NGV["license_code"][i],
'textField_662foev': data_NGV["license_name"][i],
'textField_lco27te': data_NGV["org_crm_id"][i],
'textField_1tygbmq': data_NGV["province_id"][i],
'textField_z2rntja': data_NGV["city_id"][i],
'textField_ohybc2g': data_NGV["city_name"][i],
'textField_9oupoal': data_NGV["area_id"][i],
'textField_m0rzgwb': data_NGV["area_name"][i],
'textField_69po7o9': data_NGV["region_name"][i],
'textField_vqxr0d9': data_NGV["region_short_name"][i],
'textField_5wr3tj9': data_NGV["branch_name"][i],
'textField_6hz7i81': data_NGV["carzone_store_id"][i],
'textField_86wu9qm': data_NGV["carzone_store_name"][i],
'textField_129quhy': data_NGV["customer_carzone_id"][i],
'textField_j7i4mhn': data_NGV["salesmen"][i],
'textField_qms107e': data_NGV["area_manager"][i],
'textField_qc3blb5': data_NGV["service_salesmen"][i],
'textField_vk0hf2u': data_NGV["impl_principal"][i],
'textField_3lfom9a': data_NGV["service_impl_principal"][i],
'textField_1ud1o2l': data_NGV["active_user_count"][i],
'textField_kpdh7qc': data_NGV["active_user_type"][i],
'textField_n2y4bmf': data_NGV["limit_user_count"][i],
'textField_k5o5u2d': data_NGV["limit_user_type"][i],
'textField_729y7jp': data_NGV["is_n"][i],
'textField_six7heq': data_NGV["is_g"][i],
'textField_tipmhx4': data_NGV["is_v"][i],
'textField_qclt1dm': data_NGV["is_visited"][i],
'textField_0sk94f9': data_NGV["is_active"][i],
'textField_bzszf71': data_NGV["active_status_fmt"][i],
'textField_c061ojt': data_NGV["bill_count_last_30_day"][i],
'textField_07zkoii': data_NGV["bill_day_count_last_30_day"][i],
'textField_3vnzvsx': data_NGV["bill_day_count_this_month"][i],
'textField_3mxwdc4': data_NGV["bill_count_last_7_day"][i],
'textField_4q3bh5w': data_NGV["bill_day_count_last_7_day"][i],
'textField_u0rgodd': data_NGV["pv_count"][i],
'textField_eau5xx6': data_NGV["uv_count"][i],
'textField_tayz1vv': data_NGV["bill_count_1d"][i],
'textField_k4b1a7x': data_NGV["bill_count_2d"][i],
'textField_7lfqnm3': data_NGV["bill_count_3d"][i],
'textField_g24x9fv': data_NGV["bill_count_4d"][i],
'textField_0v3pm0r': data_NGV["bill_count_5d"][i],
'textField_1nxvats': data_NGV["bill_count_6d"][i],
'textField_vylq7uh': data_NGV["bill_count_7d"][i],
'textField_0n1zd7o': data_NGV["bill_count_8d"][i],
'textField_uuatjx7': data_NGV["bill_count_9d"][i],
'textField_e16m62c': data_NGV["bill_count_10d"][i],
'textField_anv4rco': data_NGV["bill_count_11d"][i],
'textField_pz5cg65': data_NGV["bill_count_12d"][i],
'textField_hamkvor': data_NGV["bill_count_13d"][i],
'textField_kw9nvef': data_NGV["bill_count_14d"][i],
'textField_ujbyern': data_NGV["bill_count_15d"][i],
'textField_uqp3072': data_NGV["bill_count_16d"][i],
'textField_2qsei19': data_NGV["bill_count_17d"][i],
'textField_p5x4u8t': data_NGV["bill_count_18d"][i],
'textField_2lv8ksl': data_NGV["bill_count_19d"][i],
'textField_unl61g8': data_NGV["bill_count_20d"][i],
'textField_cvtamin': data_NGV["bill_count_21d"][i],
'textField_z0hs1c4': data_NGV["bill_count_22d"][i],
'textField_9jln7lp': data_NGV["bill_count_23d"][i],
'textField_jlst4j8': data_NGV["bill_count_24d"][i],
'textField_ct6z2pu': data_NGV["bill_count_25d"][i],
'textField_6s2qy9p': data_NGV["bill_count_26d"][i],
'textField_l9lyxnr': data_NGV["bill_count_27d"][i],
'textField_sz5xht3': data_NGV["bill_count_28d"][i],
'textField_ccodrkd': data_NGV["bill_count_29d"][i],
'textField_dy7c14l': data_NGV["bill_count_30d"][i],
'textField_delij7o': data_NGV["bill_count_31d"][i],
'dateField_4vp44kc': int(time.mktime(time.strptime(data_NGV["etl_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["etl_time"][i] !='' else '',
'textField_0d97bpy': data_NGV["maintain_bill_count_last_30_day"][i],
'textField_3nbi33y': data_NGV["washing_bill_count_last_30_day"][i],
'textField_17yhr79': data_NGV["maintain_bill_day_count_last_30_day"][i],
'textField_e1mrwvb': data_NGV["washing_bill_day_count_last_30_day"][i],
'textField_8s47o64': data_NGV["retail_bill_count_last_30_day"][i],
'textField_jr9otam': data_NGV["retail_bill_day_count_last_30_day"][i],
'textField_mtg1zn1': data_NGV["purchase_bill_count_last_30_day"][i],
'textField_96ggfjo': data_NGV["purchase_bill_day_count_last_30_day"][i],
'textField_hk7pe9z': data_NGV["card_bill_count_last_30_day"][i],
'textField_yj3vbwq': data_NGV["card_bill_day_count_last_30_day"][i],
'textField_n2hdr45': data_NGV["gd_sales_bill_count_last_30_day"][i],
'textField_p7xgdah': data_NGV["gd_sales_bill_day_count_last_30_day"][i],
'textField_7xr2ar8': data_NGV["g_change_flag"][i],
'textField_gpzxxmk': data_NGV["saas_package"][i],
'textField_tq9g8in': data_NGV["manage_model"][i],
'textField_zzchgop': data_NGV["contacts"][i],
'textField_a2znmfb': data_NGV["contact_number"][i],
'textField_0sadows': data_NGV["contact_mobile"][i],
'textField_hz3ujlo': data_NGV["g_month_count"][i],
'textField_m1gdeaa': data_NGV["g_month_percentage"][i],
'textField_y7ds4oo': data_NGV["is_install_service"][i],
'dateField_hiuaj0y': int(time.mktime(time.strptime(data_NGV["install_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["install_create_time"][i] !='' else '',
'dateField_yubgpmy': int(time.mktime(time.strptime(data_NGV["last_end_date"][i], "%Y-%m-%d"))*1000) if data_NGV["last_end_date"][i] !='' else '',
'dateField_8st5q1a': int(time.mktime(time.strptime(data_NGV["renew_date"][i], "%Y-%m-%d"))*1000) if data_NGV["renew_date"][i] !=''else '',
'textField_u8h91r2': data_NGV["is_chain_owner"][i],
'textField_qzzz8ux': data_NGV["group_org_count"][i],
'textField_qzjf8mc': data_NGV["recent_bill_warning_days"][i],
'textField_lvyu7z2': data_NGV["g_change_flag_d"][i],
'textField_d72wy3d': data_NGV["g_lost_warning_days"][i],
'textField_11ebiwp': data_NGV["saas_edition_fmt"][i],
'textField_4yu5vlq': data_NGV["g_flag_1m"][i],
'textField_8ydk27g': data_NGV["g_flag_2m"][i],
'textField_ysoij3v': data_NGV["g_flag_3m"][i],
'textField_a4t6iwp': data_NGV["g_flag_4m"][i],
'textField_z1xfteb': data_NGV["g_flag_5m"][i],
'textField_56x8u44': data_NGV["g_flag_6m"][i],
'textField_zscafbj': data_NGV["g_flag_day_count"][i],
'textField_4c0rpdd': data_NGV["add_org_flag"][i],
'textField_14we48g': data_NGV["pt"][i],
'textField_gukslqe': data_NGV["org_size"][i],
'textField_y0tw39j': data_NGV["qualification_type_fmt"][i],
'textField_3euralk': data_NGV["business_scope_fmt"][i],
'textField_4jji26g': data_NGV["store_type_fmt"][i],
'textField_z2mrvyk': data_NGV["area"][i],
'textField_e7qmeix': data_NGV["station_number"][i],
'textField_x9q5k8p': data_NGV["header_type_fmt"][i],
'textField_h423ob8': data_NGV["org_stage"][i],
'textField_w6dk6au': data_NGV["g_count_this_month"][i],
'textField_67sllhy': data_NGV["saas_customer_type"][i]
}
try:
if data_NGV["province_name"][i]=="":
formData['textField_1q6dt9a'] = ""
else:
formData['textField_1q6dt9a'] = data_NGV["province_name"][i]
except:
formData['textField_1q6dt9a'] = ""
try:
formData['employeeField_llc00m15'] = ALL_DATA_staff[data_NGV["service_impl_principal"][i]] # 运营负责人_成员字段
except:
formData['employeeField_llc00m15'] = ""
try:
formData['employeeField_llc00m16'] = ALL_DATA_staff[data_NGV["area_manager"][i]] # 区域经理_成员字段
except:
formData['employeeField_llc00m16'] = ""
try:
formData['employeeField_lmpsfc04'] = textField_lmps6q39[data_NGV["city_name"][i]] # 技术专家_成员字段
except:
formData['employeeField_lmpsfc04'] = ""
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
except:
pass
FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print("新建第",i,"条数据!")
'''遍历数据进行更新'''
data_NGV_new = data_NGV_new.astype('string')
data_NGV_new = data_NGV_new.fillna('',inplace=False)
for a in range(0,len(data_NGV_new["date_fmt"]),100):
for i in range(a,a+100): # for i in range(len(data_NGV_new["date_fmt"])):
try:
formData = {
'textField_nnyw1ge': data_NGV_new["date_id"][i],
'dateField_e9jt02o': int(time.mktime(time.strptime(data_NGV_new["date_fmt"][i], "%Y-%m-%d"))*1000) if data_NGV_new["date_fmt"][i] !='' else '',
'textField_ek9jnne': data_NGV_new["id_own_group"][i],
'textField_35i6110': data_NGV_new["group_name"][i],
'textField_l8nc9f2': data_NGV_new["id_own_org"][i],
'textField_tdn6hsy': data_NGV_new["org_name"][i],
'textField_zc1iowp': data_NGV_new["org_code"][i],
'textField_2rulk5e': data_NGV_new["group_grade"][i],
'textField_c54tztg': data_NGV_new["org_type"][i],
'textField_qrtnel7': data_NGV_new["org_status"][i],
'textField_7xgxe9g': data_NGV_new["saas_version"][i],
'textField_pnig1i1': data_NGV_new["is_wechat"][i],
'textField_qiovtdj': data_NGV_new["is_mini_app"][i],
'textField_i0h0iqa': data_NGV_new["is_wx_shop"][i],
'textField_qczj9vq': data_NGV_new["is_camera_service"][i],
'textField_jouovty': data_NGV_new["is_maintenance_service"][i],
'dateField_o1v1emn': int(time.mktime(time.strptime(data_NGV_new["saas_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["saas_create_time"][i] !='' else '',
'dateField_6zdcfnf': int(time.mktime(time.strptime(data_NGV_new["expiry_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["expiry_time"][i] !='' else '',
'textField_8uae70x': data_NGV_new["saas_use_days"][i],
'textField_cjkvqpn': data_NGV_new["saas_use_year"][i],
'textField_yhtmsxx': data_NGV_new["is_main_org"][i],
'textField_gfigtpn': data_NGV_new["license_code"][i],
'textField_662foev': data_NGV_new["license_name"][i],
'textField_lco27te': data_NGV_new["org_crm_id"][i],
'textField_1tygbmq': data_NGV_new["province_id"][i],
'textField_z2rntja': data_NGV_new["city_id"][i],
'textField_ohybc2g': data_NGV_new["city_name"][i],
'textField_9oupoal': data_NGV_new["area_id"][i],
'textField_m0rzgwb': data_NGV_new["area_name"][i],
'textField_69po7o9': data_NGV_new["region_name"][i],
'textField_vqxr0d9': data_NGV_new["region_short_name"][i],
'textField_5wr3tj9': data_NGV_new["branch_name"][i],
'textField_6hz7i81': data_NGV_new["carzone_store_id"][i],
'textField_86wu9qm': data_NGV_new["carzone_store_name"][i],
'textField_129quhy': data_NGV_new["customer_carzone_id"][i],
'textField_j7i4mhn': data_NGV_new["salesmen"][i],
'textField_qms107e': data_NGV_new["area_manager"][i],
'textField_qc3blb5': data_NGV_new["service_salesmen"][i],
'textField_vk0hf2u': data_NGV_new["impl_principal"][i],
'textField_3lfom9a': data_NGV_new["service_impl_principal"][i],
'textField_1ud1o2l': data_NGV_new["active_user_count"][i],
'textField_kpdh7qc': data_NGV_new["active_user_type"][i],
'textField_n2y4bmf': data_NGV_new["limit_user_count"][i],
'textField_k5o5u2d': data_NGV_new["limit_user_type"][i],
'textField_729y7jp': data_NGV_new["is_n"][i],
'textField_six7heq': data_NGV_new["is_g"][i],
'textField_tipmhx4': data_NGV_new["is_v"][i],
'textField_qclt1dm': data_NGV_new["is_visited"][i],
'textField_0sk94f9': data_NGV_new["is_active"][i],
'textField_bzszf71': data_NGV_new["active_status_fmt"][i],
'textField_c061ojt': data_NGV_new["bill_count_last_30_day"][i],
'textField_07zkoii': data_NGV_new["bill_day_count_last_30_day"][i],
'textField_3vnzvsx': data_NGV_new["bill_day_count_this_month"][i],
'textField_3mxwdc4': data_NGV_new["bill_count_last_7_day"][i],
'textField_4q3bh5w': data_NGV_new["bill_day_count_last_7_day"][i],
'textField_u0rgodd': data_NGV_new["pv_count"][i],
'textField_eau5xx6': data_NGV_new["uv_count"][i],
'textField_tayz1vv': data_NGV_new["bill_count_1d"][i],
'textField_k4b1a7x': data_NGV_new["bill_count_2d"][i],
'textField_7lfqnm3': data_NGV_new["bill_count_3d"][i],
'textField_g24x9fv': data_NGV_new["bill_count_4d"][i],
'textField_0v3pm0r': data_NGV_new["bill_count_5d"][i],
'textField_1nxvats': data_NGV_new["bill_count_6d"][i],
'textField_vylq7uh': data_NGV_new["bill_count_7d"][i],
'textField_0n1zd7o': data_NGV_new["bill_count_8d"][i],
'textField_uuatjx7': data_NGV_new["bill_count_9d"][i],
'textField_e16m62c': data_NGV_new["bill_count_10d"][i],
'textField_anv4rco': data_NGV_new["bill_count_11d"][i],
'textField_pz5cg65': data_NGV_new["bill_count_12d"][i],
'textField_hamkvor': data_NGV_new["bill_count_13d"][i],
'textField_kw9nvef': data_NGV_new["bill_count_14d"][i],
'textField_ujbyern': data_NGV_new["bill_count_15d"][i],
'textField_uqp3072': data_NGV_new["bill_count_16d"][i],
'textField_2qsei19': data_NGV_new["bill_count_17d"][i],
'textField_p5x4u8t': data_NGV_new["bill_count_18d"][i],
'textField_2lv8ksl': data_NGV_new["bill_count_19d"][i],
'textField_unl61g8': data_NGV_new["bill_count_20d"][i],
'textField_cvtamin': data_NGV_new["bill_count_21d"][i],
'textField_z0hs1c4': data_NGV_new["bill_count_22d"][i],
'textField_9jln7lp': data_NGV_new["bill_count_23d"][i],
'textField_jlst4j8': data_NGV_new["bill_count_24d"][i],
'textField_ct6z2pu': data_NGV_new["bill_count_25d"][i],
'textField_6s2qy9p': data_NGV_new["bill_count_26d"][i],
'textField_l9lyxnr': data_NGV_new["bill_count_27d"][i],
'textField_sz5xht3': data_NGV_new["bill_count_28d"][i],
'textField_ccodrkd': data_NGV_new["bill_count_29d"][i],
'textField_dy7c14l': data_NGV_new["bill_count_30d"][i],
'textField_delij7o': data_NGV_new["bill_count_31d"][i],
'dateField_4vp44kc': int(time.mktime(time.strptime(data_NGV_new["etl_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["etl_time"][i] !='' else '',
'textField_0d97bpy': data_NGV_new["maintain_bill_count_last_30_day"][i],
'textField_3nbi33y': data_NGV_new["washing_bill_count_last_30_day"][i],
'textField_17yhr79': data_NGV_new["maintain_bill_day_count_last_30_day"][i],
'textField_e1mrwvb': data_NGV_new["washing_bill_day_count_last_30_day"][i],
'textField_8s47o64': data_NGV_new["retail_bill_count_last_30_day"][i],
'textField_jr9otam': data_NGV_new["retail_bill_day_count_last_30_day"][i],
'textField_mtg1zn1': data_NGV_new["purchase_bill_count_last_30_day"][i],
'textField_96ggfjo': data_NGV_new["purchase_bill_day_count_last_30_day"][i],
'textField_hk7pe9z': data_NGV_new["card_bill_count_last_30_day"][i],
'textField_yj3vbwq': data_NGV_new["card_bill_day_count_last_30_day"][i],
'textField_n2hdr45': data_NGV_new["gd_sales_bill_count_last_30_day"][i],
'textField_p7xgdah': data_NGV_new["gd_sales_bill_day_count_last_30_day"][i],
'textField_7xr2ar8': data_NGV_new["g_change_flag"][i],
'textField_gpzxxmk': data_NGV_new["saas_package"][i],
'textField_tq9g8in': data_NGV_new["manage_model"][i],
'textField_zzchgop': data_NGV_new["contacts"][i],
'textField_a2znmfb': data_NGV_new["contact_number"][i],
'textField_0sadows': data_NGV_new["contact_mobile"][i],
'textField_hz3ujlo': data_NGV_new["g_month_count"][i],
'textField_m1gdeaa': data_NGV_new["g_month_percentage"][i],
'textField_y7ds4oo': data_NGV_new["is_install_service"][i],
'dateField_hiuaj0y': int(time.mktime(time.strptime(data_NGV_new["install_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV_new["install_create_time"][i] !='' else '',
'dateField_yubgpmy': int(time.mktime(time.strptime(data_NGV_new["last_end_date"][i], "%Y-%m-%d"))*1000) if data_NGV_new["last_end_date"][i] !='' else '',
'dateField_8st5q1a': int(time.mktime(time.strptime(data_NGV_new["renew_date"][i], "%Y-%m-%d"))*1000) if data_NGV_new["renew_date"][i] !=''else '',
'textField_u8h91r2': data_NGV_new["is_chain_owner"][i],
'textField_qzzz8ux': data_NGV_new["group_org_count"][i],
'textField_qzjf8mc': data_NGV_new["recent_bill_warning_days"][i],
'textField_lvyu7z2': data_NGV_new["g_change_flag_d"][i],
'textField_d72wy3d': data_NGV_new["g_lost_warning_days"][i],
'textField_11ebiwp': data_NGV_new["saas_edition_fmt"][i],
'textField_4yu5vlq': data_NGV_new["g_flag_1m"][i],
'textField_8ydk27g': data_NGV_new["g_flag_2m"][i],
'textField_ysoij3v': data_NGV_new["g_flag_3m"][i],
'textField_a4t6iwp': data_NGV_new["g_flag_4m"][i],
'textField_z1xfteb': data_NGV_new["g_flag_5m"][i],
'textField_56x8u44': data_NGV_new["g_flag_6m"][i],
'textField_zscafbj': data_NGV_new["g_flag_day_count"][i],
'textField_4c0rpdd': data_NGV_new["add_org_flag"][i],
'textField_14we48g': data_NGV_new["pt"][i],
'textField_gukslqe': data_NGV_new["org_size"][i],
'textField_y0tw39j': data_NGV_new["qualification_type_fmt"][i],
'textField_3euralk': data_NGV_new["business_scope_fmt"][i],
'textField_4jji26g': data_NGV_new["store_type_fmt"][i],
'textField_z2mrvyk': data_NGV_new["area"][i],
'textField_e7qmeix': data_NGV_new["station_number"][i],
'textField_x9q5k8p': data_NGV_new["header_type_fmt"][i],
'textField_h423ob8': data_NGV_new["org_stage"][i],
'textField_w6dk6au': data_NGV_new["g_count_this_month"][i],
'textField_67sllhy': data_NGV_new["saas_customer_type"][i]
}
try:
if data_NGV_new["province_name"][i]=="":
formData['textField_1q6dt9a'] = ""
else:
formData['textField_1q6dt9a'] = data_NGV_new["province_name"][i]
except:
formData['textField_1q6dt9a'] = ""
try:
formData['employeeField_llc00m15'] = ALL_DATA_staff[data_NGV_new["service_impl_principal"][i]] # 运营负责人_成员字段
except:
formData['employeeField_llc00m15'] = ""
try:
formData['employeeField_llc00m16'] = ALL_DATA_staff[data_NGV_new["area_manager"][i]] # 区域经理_成员字段
except:
formData['employeeField_llc00m16'] = ""
try:
formData['employeeField_lmpsfc04'] = textField_lmps6q39[data_NGV_new["city_name"][i]] # 技术专家_成员字段
except:
formData['employeeField_lmpsfc04'] = ""
read_instances_put(TOKEN, data_new[data_NGV_new["org_code"][i]],formData)
print("更新第",i,"条数据!")
except:
pass
+485
View File
@@ -0,0 +1,485 @@
# -*- 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_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)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 基础函数配置
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()
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" : "true",
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "true",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "true",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
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}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
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)
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
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[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
'''获取表内控件信息 '''
# FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
# component_list = component(FORMID,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_NGV[",name_value,"][i],")
'''读取市-技术专家id '''
FORMID = "FORM-A8666NA1FJDEVPBB6VVTOCMP47UP2J2L6SPML2" #市-技术专家id
# 读取流程表单数据
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
textField_lmps6q39 = {}
""" 获取全量数据 """
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'):
textField_lmps6q39[data['formData']['textField_lmps6q38']]=data['formData']['textField_lmps6q39'] #技术专家id
print(f'读取到市-技术专家id表单中 {len(textField_lmps6q39)} 条数据!')
'''批量删除NGV数据'''
for i in range(0,10):
default = True
while default:
FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 +1
print(form_data.get('totalCount'))
if form_data.get('totalCount')<=0:
default = False
for i in range(PAGES, 1,-1):
ALL_DATA_instance = []
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
for data in form_data.get('data'):
ALL_DATA_instance.append(data['formInstanceId'])
print(f'读取到表单中 {len(ALL_DATA_instance)} 条数据!')
red_delete = delete_in_batches(FORMID,TOKEN,ALL_DATA_instance)
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
for data in form_data.get('data'):
formInstanceId = data['formInstanceId']
delete_in(TOKEN,formInstanceId)
print(f'单条删除 {formInstanceId} 数据!')
'''遍历数据进行新建'''
data_NGV = data_NGV.astype('string')
data_NGV = data_NGV.fillna('',inplace=False)
for a in range(0,len(data_NGV["date_fmt"]),100):
ALL_formData = []
for i in range(a,a+100): # for i in range(len(data_NGV["date_fmt"])):
try:
formData = {
'textField_nnyw1ge': data_NGV["date_id"][i],
'dateField_e9jt02o': int(time.mktime(time.strptime(data_NGV["date_fmt"][i], "%Y-%m-%d"))*1000) if data_NGV["date_fmt"][i] !='' else '',
'textField_ek9jnne': data_NGV["id_own_group"][i],
'textField_35i6110': data_NGV["group_name"][i],
'textField_l8nc9f2': data_NGV["id_own_org"][i],
'textField_tdn6hsy': data_NGV["org_name"][i],
'textField_zc1iowp': data_NGV["org_code"][i],
'textField_2rulk5e': data_NGV["group_grade"][i],
'textField_c54tztg': data_NGV["org_type"][i],
'textField_qrtnel7': data_NGV["org_status"][i],
'textField_7xgxe9g': data_NGV["saas_version"][i],
'textField_pnig1i1': data_NGV["is_wechat"][i],
'textField_qiovtdj': data_NGV["is_mini_app"][i],
'textField_i0h0iqa': data_NGV["is_wx_shop"][i],
'textField_qczj9vq': data_NGV["is_camera_service"][i],
'textField_jouovty': data_NGV["is_maintenance_service"][i],
'dateField_o1v1emn': int(time.mktime(time.strptime(data_NGV["saas_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["saas_create_time"][i] !='' else '',
'dateField_6zdcfnf': int(time.mktime(time.strptime(data_NGV["expiry_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["expiry_time"][i] !='' else '',
'textField_8uae70x': data_NGV["saas_use_days"][i],
'textField_cjkvqpn': data_NGV["saas_use_year"][i],
'textField_yhtmsxx': data_NGV["is_main_org"][i],
'textField_gfigtpn': data_NGV["license_code"][i],
'textField_662foev': data_NGV["license_name"][i],
'textField_lco27te': data_NGV["org_crm_id"][i],
'textField_1tygbmq': data_NGV["province_id"][i],
'textField_1q6dt9a': data_NGV["province_name"][i],
'textField_z2rntja': data_NGV["city_id"][i],
'textField_ohybc2g': data_NGV["city_name"][i],
'textField_9oupoal': data_NGV["area_id"][i],
'textField_m0rzgwb': data_NGV["area_name"][i],
'textField_69po7o9': data_NGV["region_name"][i],
'textField_vqxr0d9': data_NGV["region_short_name"][i],
'textField_5wr3tj9': data_NGV["branch_name"][i],
'textField_6hz7i81': data_NGV["carzone_store_id"][i],
'textField_86wu9qm': data_NGV["carzone_store_name"][i],
'textField_129quhy': data_NGV["customer_carzone_id"][i],
'textField_j7i4mhn': data_NGV["salesmen"][i],
'textField_qms107e': data_NGV["area_manager"][i],
'textField_qc3blb5': data_NGV["service_salesmen"][i],
'textField_vk0hf2u': data_NGV["impl_principal"][i],
'textField_3lfom9a': data_NGV["service_impl_principal"][i],
'textField_1ud1o2l': data_NGV["active_user_count"][i],
'textField_kpdh7qc': data_NGV["active_user_type"][i],
'textField_n2y4bmf': data_NGV["limit_user_count"][i],
'textField_k5o5u2d': data_NGV["limit_user_type"][i],
'textField_729y7jp': data_NGV["is_n"][i],
'textField_six7heq': data_NGV["is_g"][i],
'textField_tipmhx4': data_NGV["is_v"][i],
'textField_qclt1dm': data_NGV["is_visited"][i],
'textField_0sk94f9': data_NGV["is_active"][i],
'textField_bzszf71': data_NGV["active_status_fmt"][i],
'textField_c061ojt': data_NGV["bill_count_last_30_day"][i],
'textField_07zkoii': data_NGV["bill_day_count_last_30_day"][i],
'textField_3vnzvsx': data_NGV["bill_day_count_this_month"][i],
'textField_3mxwdc4': data_NGV["bill_count_last_7_day"][i],
'textField_4q3bh5w': data_NGV["bill_day_count_last_7_day"][i],
'textField_u0rgodd': data_NGV["pv_count"][i],
'textField_eau5xx6': data_NGV["uv_count"][i],
'textField_tayz1vv': data_NGV["bill_count_1d"][i],
'textField_k4b1a7x': data_NGV["bill_count_2d"][i],
'textField_7lfqnm3': data_NGV["bill_count_3d"][i],
'textField_g24x9fv': data_NGV["bill_count_4d"][i],
'textField_0v3pm0r': data_NGV["bill_count_5d"][i],
'textField_1nxvats': data_NGV["bill_count_6d"][i],
'textField_vylq7uh': data_NGV["bill_count_7d"][i],
'textField_0n1zd7o': data_NGV["bill_count_8d"][i],
'textField_uuatjx7': data_NGV["bill_count_9d"][i],
'textField_e16m62c': data_NGV["bill_count_10d"][i],
'textField_anv4rco': data_NGV["bill_count_11d"][i],
'textField_pz5cg65': data_NGV["bill_count_12d"][i],
'textField_hamkvor': data_NGV["bill_count_13d"][i],
'textField_kw9nvef': data_NGV["bill_count_14d"][i],
'textField_ujbyern': data_NGV["bill_count_15d"][i],
'textField_uqp3072': data_NGV["bill_count_16d"][i],
'textField_2qsei19': data_NGV["bill_count_17d"][i],
'textField_p5x4u8t': data_NGV["bill_count_18d"][i],
'textField_2lv8ksl': data_NGV["bill_count_19d"][i],
'textField_unl61g8': data_NGV["bill_count_20d"][i],
'textField_cvtamin': data_NGV["bill_count_21d"][i],
'textField_z0hs1c4': data_NGV["bill_count_22d"][i],
'textField_9jln7lp': data_NGV["bill_count_23d"][i],
'textField_jlst4j8': data_NGV["bill_count_24d"][i],
'textField_ct6z2pu': data_NGV["bill_count_25d"][i],
'textField_6s2qy9p': data_NGV["bill_count_26d"][i],
'textField_l9lyxnr': data_NGV["bill_count_27d"][i],
'textField_sz5xht3': data_NGV["bill_count_28d"][i],
'textField_ccodrkd': data_NGV["bill_count_29d"][i],
'textField_dy7c14l': data_NGV["bill_count_30d"][i],
'textField_delij7o': data_NGV["bill_count_31d"][i],
'dateField_4vp44kc': int(time.mktime(time.strptime(data_NGV["etl_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["etl_time"][i] !='' else '',
'textField_0d97bpy': data_NGV["maintain_bill_count_last_30_day"][i],
'textField_3nbi33y': data_NGV["washing_bill_count_last_30_day"][i],
'textField_17yhr79': data_NGV["maintain_bill_day_count_last_30_day"][i],
'textField_e1mrwvb': data_NGV["washing_bill_day_count_last_30_day"][i],
'textField_8s47o64': data_NGV["retail_bill_count_last_30_day"][i],
'textField_jr9otam': data_NGV["retail_bill_day_count_last_30_day"][i],
'textField_mtg1zn1': data_NGV["purchase_bill_count_last_30_day"][i],
'textField_96ggfjo': data_NGV["purchase_bill_day_count_last_30_day"][i],
'textField_hk7pe9z': data_NGV["card_bill_count_last_30_day"][i],
'textField_yj3vbwq': data_NGV["card_bill_day_count_last_30_day"][i],
'textField_n2hdr45': data_NGV["gd_sales_bill_count_last_30_day"][i],
'textField_p7xgdah': data_NGV["gd_sales_bill_day_count_last_30_day"][i],
'textField_7xr2ar8': data_NGV["g_change_flag"][i],
'textField_gpzxxmk': data_NGV["saas_package"][i],
'textField_tq9g8in': data_NGV["manage_model"][i],
'textField_zzchgop': data_NGV["contacts"][i],
'textField_a2znmfb': data_NGV["contact_number"][i],
'textField_0sadows': data_NGV["contact_mobile"][i],
'textField_hz3ujlo': data_NGV["g_month_count"][i],
'textField_m1gdeaa': data_NGV["g_month_percentage"][i],
'textField_y7ds4oo': data_NGV["is_install_service"][i],
'dateField_hiuaj0y': int(time.mktime(time.strptime(data_NGV["install_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["install_create_time"][i] !='' else '',
'dateField_yubgpmy': int(time.mktime(time.strptime(data_NGV["last_end_date"][i], "%Y-%m-%d"))*1000) if data_NGV["last_end_date"][i] !='' else '',
'dateField_8st5q1a': int(time.mktime(time.strptime(data_NGV["renew_date"][i], "%Y-%m-%d"))*1000) if data_NGV["renew_date"][i] !=''else '',
'textField_u8h91r2': data_NGV["is_chain_owner"][i],
'textField_qzzz8ux': data_NGV["group_org_count"][i],
'textField_qzjf8mc': data_NGV["recent_bill_warning_days"][i],
'textField_lvyu7z2': data_NGV["g_change_flag_d"][i],
'textField_d72wy3d': data_NGV["g_lost_warning_days"][i],
'textField_11ebiwp': data_NGV["saas_edition_fmt"][i],
'textField_4yu5vlq': data_NGV["g_flag_1m"][i],
'textField_8ydk27g': data_NGV["g_flag_2m"][i],
'textField_ysoij3v': data_NGV["g_flag_3m"][i],
'textField_a4t6iwp': data_NGV["g_flag_4m"][i],
'textField_z1xfteb': data_NGV["g_flag_5m"][i],
'textField_56x8u44': data_NGV["g_flag_6m"][i],
'textField_zscafbj': data_NGV["g_flag_day_count"][i],
'textField_4c0rpdd': data_NGV["add_org_flag"][i],
'textField_14we48g': data_NGV["pt"][i],
'textField_gukslqe': data_NGV["org_size"][i],
'textField_y0tw39j': data_NGV["qualification_type_fmt"][i],
'textField_3euralk': data_NGV["business_scope_fmt"][i],
'textField_4jji26g': data_NGV["store_type_fmt"][i],
'textField_z2mrvyk': data_NGV["area"][i],
'textField_e7qmeix': data_NGV["station_number"][i],
'textField_x9q5k8p': data_NGV["header_type_fmt"][i],
'textField_h423ob8': data_NGV["org_stage"][i],
'textField_w6dk6au': data_NGV["g_count_this_month"][i],
'textField_67sllhy': data_NGV["saas_customer_type"][i]
}
try:
formData['employeeField_llc00m15'] = ALL_DATA_staff[data_NGV["service_impl_principal"][i]] # 运营负责人_成员字段
except:
formData['employeeField_llc00m15'] = ""
try:
formData['employeeField_llc00m16'] = ALL_DATA_staff[data_NGV["area_manager"][i]] # 区域经理_成员字段
except:
formData['employeeField_llc00m16'] = ""
try:
formData['employeeField_lmpsfc04'] = textField_lmps6q39[data_NGV["city_name"][i]] # 技术专家_成员字段
except:
formData['employeeField_lmpsfc04'] = ""
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
except:
pass
FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print("新建第",i,"条数据!")
'''校验是否新建正常'''
time.sleep(120)
FORMID = "FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91"
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
if int(form_data.get('totalCount')) ==len(data_NGV):
print("数据新建成功!")
else:
def start_instance_process(token: str, name):
"""发送宜搭表单 -- 发起流程表单
Args:
token
data:需要发送的数据字典
"""
yida_api = "https://api.dingtalk.com/v1.0/yida/processes/instances/start"
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
send_data = {
"textField_l9fe0uiw": name,
"textField_l9fe0uiv": name
}
payload = {
"appType": "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account",# 超级管理员账号
"language": "zh_CN",
"formUuid": "FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2",
"formDataJson": json.dumps(send_data),
"processCode":"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2"
}
res = requests.post(yida_api, headers=headers, json=payload)
return res
try:
name = "NGV明细数据新建条数不正确!"
res_yujing = start_instance_process(TOKEN,name)
except:
pass
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,24 @@
#! python3
import pyautogui, sys,time
#功能说明:用于记录需要操作的位置信息
#输入:鼠标移动到需要记录信息的位置
#输出:位置代表的含义,位置x,y坐标信息
print('程序说明:三秒后程序开始记录位置,每次位置记录间隔为5秒')
# try:
# while True:
# x, y = pyautogui.position()
# positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
# print(positionStr, end='')
# print('\b' * len(positionStr), end='', flush=True)
# except KeyboardInterrupt:
# print('\n')
time.sleep(3)
try:
while True:
print('请移动鼠标至需要的位置!')
Point = pyautogui.position()
str = input("请输入位置代表的含义:")
print(str,'',Point)
time.sleep(5)
except:
print('\n')
@@ -0,0 +1,441 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"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": [
"' textField_fcjh3jf ': data_details[ \"org_id\" ][i], # \"org_id\"\n",
"' textField_1xjn97l ': data_details[ \"org_code\" ][i], # \"org_code\"\n",
"' textField_qeygkxz ': data_details[ \"org_name\" ][i], # \"org_name\"\n",
"' textField_f02mhxz ': data_details[ \"org_type\" ][i], # \"org_type\"\n",
"' textField_pd4rfu2 ': data_details[ \"org_stage\" ][i], # \"org_stage\"\n",
"' textField_7u9b0m6 ': data_details[ \"group_name\" ][i], # \"group_name\"\n",
"' textField_pepcc25 ': data_details[ \"group_grade\" ][i], # \"group_grade\"\n",
"' dateField_hbdaida ': data_details[ \"saas_create_time\" ][i], # \"saas_create_time\"\n",
"' textField_kk5nt1o ': data_details[ \"saas_version_fmt\" ][i], # \"saas_version_fmt\"\n",
"' textField_xip14eb ': data_details[ \"saas_edition_fmt\" ][i], # \"saas_edition_fmt\"\n",
"' textField_neha4cj ': data_details[ \"saas_customer_type\" ][i], # \"saas_customer_type\"\n",
"' textField_nyoo8tc ': data_details[ \"contacts\" ][i], # \"contacts\"\n",
"' textField_q9tl2ku ': data_details[ \"contact_mobile\" ][i], # \"contact_mobile\"\n",
"' textField_ibhi8pf ': data_details[ \"region_name\" ][i], # \"region_name\"\n",
"' textField_sxj46ug ': data_details[ \"branch_name\" ][i], # \"branch_name\"\n",
"' employeeField_li8nejio ': data_details[ \"service_impl_principal\" ][i], # \"service_impl_principal\"\n",
"' employeeField_li8nejip ': data_details[ \"area_manager\" ][i], # \"area_manager\"\n",
"' textField_wsl56u7 ': data_details[ \"init_day\" ][i], # \"init_day\"\n",
"' textField_w77lwkc ': data_details[ \"init_label_value\" ][i], # \"init_label_value\"\n",
"' textField_hltglzr ': data_details[ \"init_label_code\" ][i], # \"init_label_code\"\n",
"' textField_tar1oks ': data_details[ \"push_day\" ][i], # \"push_day\"\n",
"' textField_6kppyas ': data_details[ \"push_label_value\" ][i], # \"push_label_value\"\n",
"' textField_gkqdsug ': data_details[ \"push_label_code\" ][i], # \"push_label_code\"\n",
"' textField_jrq7ztt ': data_details[ \"health_warning_info\" ][i], # \"health_warning_info\"\n",
"' dateField_u67kc7t ': data_details[ \"etl_time\" ][i], # \"etl_time\"\n",
"' textField_ltyul74 ': data_details[ \"province_name\" ][i], # \"province_name\"\n",
"' textField_4mqbb1x ': data_details[ \"city_name\" ][i], # \"city_name\"\n",
"' textField_t8u2y3u ': data_details[ \"pt\" ][i], # \"pt\"\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"0\n",
"新建第 99 条数据! {'result': ['FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL1C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL2C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL3C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL4C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL5C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL6C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL7C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL8C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8IL9C', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8ILAC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8ILBC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8ILCC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8ILDC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72I8EUN8ILEC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILFC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILGC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILHC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILIC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILJC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILKC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILLC', 'FINST-YI866S91BM6B4LTO8NOFRCPQK0T72J8EUN8ILMC']}\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",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_dataservice_saas_org_health_warning\" WHERE \"pt\" = '{yes_time_nyr}';\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_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",
"\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",
"\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')//10 + 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-6L9661712H0BQUQD6M2Q4818NY803GGSDN8ILI\"\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",
"\n",
"# '''批量删除NGV数据'''\n",
"for i in range(0,10):\n",
" default = True\n",
" while default:\n",
" FORMID = \"FORM-6L9661712H0BQUQD6M2Q4818NY803GGSDN8ILI\" \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[\"pt\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" formData = {\n",
" 'textField_fcjh3jf':data_details[\"org_id\"][i],#\"org_id\"\n",
" 'textField_1xjn97l':data_details[\"org_code\"][i],#\"org_code\"\n",
" 'textField_qeygkxz':data_details[\"org_name\"][i],#\"org_name\"\n",
" 'textField_f02mhxz':data_details[\"org_type\"][i],#\"org_type\"\n",
" 'textField_pd4rfu2':data_details[\"org_stage\"][i],#\"org_stage\"\n",
" 'textField_7u9b0m6':data_details[\"group_name\"][i],#\"group_name\"\n",
" 'textField_pepcc25':data_details[\"group_grade\"][i],#\"group_grade\"\n",
" 'dateField_hbdaida':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_kk5nt1o':data_details[\"saas_version_fmt\"][i],#\"saas_version_fmt\"\n",
" 'textField_xip14eb':data_details[\"saas_edition_fmt\"][i],#\"saas_edition_fmt\"\n",
" 'textField_neha4cj':data_details[\"saas_customer_type\"][i],#\"saas_customer_type\"\n",
" 'textField_nyoo8tc':data_details[\"contacts\"][i],#\"contacts\"\n",
" 'textField_q9tl2ku':data_details[\"contact_mobile\"][i],#\"contact_mobile\"\n",
" 'textField_ibhi8pf':data_details[\"region_name\"][i],#\"region_name\"\n",
" 'textField_sxj46ug':data_details[\"branch_name\"][i],#\"branch_name\"\n",
" 'employeeField_li8nejio':ALL_DATA_staff[data_details[\"service_impl_principal\"][i]]if data_details[\"service_impl_principal\"][i]!=''else'',#\"service_impl_principal\"\n",
" 'employeeField_li8nejip':ALL_DATA_staff[data_details[\"area_manager\"][i]]if data_details[\"area_manager\"][i]!=''else'',#\"area_manager\"\n",
" 'textField_wsl56u7':data_details[\"init_day\"][i],#\"init_day\"\n",
" 'textField_w77lwkc':data_details[\"init_label_value\"][i],#\"init_label_value\"\n",
" 'textField_hltglzr':data_details[\"init_label_code\"][i],#\"init_label_code\"\n",
" 'textField_tar1oks':data_details[\"push_day\"][i],#\"push_day\"\n",
" 'textField_6kppyas':data_details[\"push_label_value\"][i],#\"push_label_value\"\n",
" 'textField_gkqdsug':data_details[\"push_label_code\"][i],#\"push_label_code\"\n",
" 'textField_jrq7ztt':data_details[\"health_warning_info\"][i],#\"health_warning_info\"\n",
" 'dateField_u67kc7t':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_ltyul74':data_details[\"province_name\"][i],#\"province_name\"\n",
" 'textField_4mqbb1x':data_details[\"city_name\"][i],#\"city_name\"\n",
" 'textField_t8u2y3u':data_details[\"pt\"][i]#\"pt\"\n",
" }\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass\n",
" FORMID = \"FORM-6L9661712H0BQUQD6M2Q4818NY803GGSDN8ILI\" \n",
" res_new = Batch_creation(FORMID,TOKEN,ALL_formData)\n",
" print(\"新建第\",i,\"条数据!\",res_new)\n",
" time.sleep(10)\n",
"\n",
"'''校验是否新建正常'''\n",
"time.sleep(120)\n",
"FORMID = \"FORM-6L9661712H0BQUQD6M2Q4818NY803GGSDN8ILI\" \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 = \"holo_ads_dataservice_saas_org_health_warning 新建条数不正确!\"\n",
" res_yujing = start_instance_process(TOKEN,name)\n",
" except:\n",
" pass"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

+372
View File
@@ -0,0 +1,372 @@
import pandas as pd
import pandas as pd
import numpy as np
import requests
import json
import time
import re
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pathlib import Path
from urllib.parse import quote
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, createFromTimeGMT, createToTimeGMT, 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_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account", # 超级管理员账号
"language": "zh_CN",
"formUuid": formUuid,
"createFromTimeGMT": createFromTimeGMT,
"createToTimeGMT": createToTimeGMT,
# "searchFieldJson": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储
"instanceStatus": "RUNNING"
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def read_instances(token, formUuid, page, n):
""" 函数功能:读取流程表单的所有数据 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search?pageNumber={page}&pageSize={n}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
"appType": "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"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 timeStamp(timeNum):
""" 函数功能:将时间戳(毫秒) 转化为时间日期格式"""
timeStamp = float(timeNum/1000)
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return otherStyleTime
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 get_approval_records(token: str, processInstanceId: str):
""" 函数功能:获取流程表单的审批记录 --F6客户服务 应用 """
appType = "APP_TNVBVZ3K8G56HG03Z45Q"
systemToken = "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1"
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 forms_isDone(TOKEN: str, FORMID: str, CREATE_FROM, CREATE_TO,PAGES,processInstanceId,isDone_id):
'''
返回isDone_id 对应的控件内容
'''
for i in range(1, PAGES+1):
form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)
for data in form_data.get('data'):
processInstanceId_1 = data.get('processInstanceId')
if processInstanceId_1 == processInstanceId:
isDone = data.get('data').get(isDone_id)
return isDone
def aggree_approval(token: str, taskId: str, processInstanceId: str, formData: dict):
""" 函数功能:同意审批节点 --F6客户服务 应用 """
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_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"remark": "同意(接口自动)",
"formDataJson": json.dumps(formData, cls=NpEncoder),
"processInstanceId": processInstanceId,
# "userId": "yida_pub_account",
"userId": "2268275546837446",
"language": "zh_CN",
"taskId": int(taskId)
}
res = requests.post(api, headers=headers, json=payload)
print('同意审批节点')
return res
def switch(token: str, processInstanceId: str, formData: dict):
""" 函数说明:
开关 程序调用时避免 重复进行(执行间隔 小于 单次执行时间时 发送 重复处理)
"""
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"appType" : "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken" : "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId" : "yida_pub_account", # 管理员
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : processInstanceId,
"updateFormDataJson" : json.dumps(formData, cls=NpEncoder),
}
res = requests.put(api, headers=headers, json=payload)
print('开关 程序调用时避免 重复进行(执行间隔 小于 单次执行时间时 发送 重复处理)')
def update_form_staff(TOKEN: str,processInstanceId,staff_id,ModifiedField_value):
""" 函数功能:员工更新表单内容 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
data_new = {
ModifiedField_value:[staff_id]
}
payload = {
"appType" : "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken" : "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId" : "yida_pub_account", # 曹伟 id
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : processInstanceId,
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder),
}
res = requests.put(api, headers=headers, json=payload)
print('员工更新表单内容')
return res
def get_staffID(TOKEN: str,staff_name):
""" 函数功能:通过员工名称获取员工id"""
# 读取员工对应关系:宜搭员工-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)
res_new = [v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== staff_name]
print('通过员工名称获取员工id')
return res_new
def get_type(TOKEN: str,ModifiedField_value,Form_id):
""" 函数功能:通过唯一标识获取控件类型"""
api = f'https://api.dingtalk.com/v1.0/yida/forms/formFields?appType=APP_TNVBVZ3K8G56HG03Z45Q&systemToken=CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1&formUuid='+Form_id+'&userId=yida_pub_account'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.get(api, headers=headers)
cnew = res.json().get('result')
componentName = [i.get('componentName') for i in cnew if i.get('fieldId')== ModifiedField_value ]
print('通过唯一标识获取控件类型')
return componentName
def update_text(TOKEN: str, processInstanceId, formData):
""" 函数说明:更新单行文本控件内容
"""
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"appType" : "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken" : "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId" : "yida_pub_account", # 管理员
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : processInstanceId,
"updateFormDataJson" : json.dumps(formData, cls=NpEncoder),
}
res = requests.put(api, headers=headers, json=payload)
print('更新单行文本控件内容')
return res
def read_instances_V2(token, formUuid, createFromTimeGMT, createToTimeGMT, 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_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account", # 超级管理员账号
"language": "zh_CN",
"formUuid": formUuid,
'pageNumber':page,
'pageSize':n,
# "searchFieldJson": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储
"instanceStatus": "RUNNING"
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def pass_on(TOKEN: str,taskId, processInstanceId, staffid):
""" 函数功能:转交审批节点 """
api = f'https://api.dingtalk.com//v1.0/yida/tasks/redirect'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"processInstanceId" : processInstanceId,
"byManager" : "y",
"appType" : "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken" : "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"language": "zh_CN",
"remark" : "转交(接口自动)",
"nowActionExecutorId" : staffid,
"userId" : "2268275546837446",
"taskId" : int(taskId)
}
res = requests.post(api, headers=headers, json=payload)
print('转交审批节点')
return res
def read_instances_new(token, formUuid, createFromTimeGMT, createToTimeGMT, 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_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account", # 超级管理员账号
"language": "zh_CN",
"formUuid": formUuid,
# "searchFieldJson": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储
'currentPage':page,
'pageSize':n
}
res = requests.post(api, headers=headers, json=formData)
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)
""" 处理流程开始 """
TOKEN = generateToken()
FORMID2 = "FORM-W46663A1DNH4EKZI6WCEZCQNPZXQ2ZZB92I9LZ"
# 10分钟时间间隔
CREATE_FROM, CREATE_TO = [timeStamp(t) for t in get_time_range_minute(100000)]
# 读取修改明细表全量数据
form_data = read_instances_V2(token=TOKEN, formUuid=FORMID2, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
LIST_DATA = []
""" 获取全量数据 """
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_new(token=TOKEN, formUuid=FORMID2, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100)
for v in range(0,len(form_data.get('data'))):
pass
if form_data.get('data')[v]['formData']['textField_l2zx3p5q'] =="0" and form_data.get('data')[v]['formData']['textField_l90wwpsz'] !="v423(auto_update)":
formData = {'textField_l90wwpsz':'v423(auto_update)'}
formInstanceId = form_data.get('data')[v]['formInstanceId']
update_text(TOKEN, formInstanceId, formData)
+354
View File
@@ -0,0 +1,354 @@
# -*- 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_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)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 基础函数配置
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_RTPWHV37ENXPQUZHTL25",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"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_instances_TEBIE(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_RTPWHV37ENXPQUZHTL25",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"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_RTPWHV37ENXPQUZHTL25",
"formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"language" : "zh_CN",
"userId" : "yida_pub_account"
}
res = requests.post(api, headers=headers, json=payload)
print(res.json())
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_RTPWHV37ENXPQUZHTL25",
# "formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
# "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" : "true",
"formUuid" : FORMID,
"appType" : "APP_RTPWHV37ENXPQUZHTL25",
"asynchronousExecution" : "true",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_RTPWHV37ENXPQUZHTL25",
"asynchronousExecution" : "true",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_RTPWHV37ENXPQUZHTL25&systemToken=IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
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)
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
FORMID = "FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6
# 读取流程表单数据
form_data = read_instances_TEBIE(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_TEBIE(token=TOKEN, formUuid=FORMID, page=i, n=100)
for data in form_data.get('data'):
ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
'''批量删除NGV数据'''
for i in range(0,10):
default = True
while default:
FORMID = "FORM-08866RA1DJ2EILGD9AVPY3VCL8OD3N68R7AML5"
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 +1
PAGES = PAGES * 2
print(form_data.get('totalCount'))
if form_data.get('totalCount')<=0:
default = False
for i in range(PAGES, 1,-1):
ALL_DATA_instance = []
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
for data in form_data.get('data'):
ALL_DATA_instance.append(data['formInstanceId'])
print(f'读取到表单中 {len(ALL_DATA_instance)} 条数据!')
red_delete = delete_in_batches(FORMID,TOKEN,ALL_DATA_instance)
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
for data in form_data.get('data'):
formInstanceId = data['formInstanceId']
delete_in(TOKEN,formInstanceId)
print(f'单条删除 {formInstanceId} 数据!')
time.sleep(60)
'''遍历数据进行新建'''
data_NGV = data_NGV.astype('string')
data_NGV = data_NGV.fillna('',inplace=False)
for a in range(0,len(data_NGV["date_fmt"]),100):
try:
ALL_formData = []
for i in range(a,a+100): # for i in range(len(data_NGV["date_fmt"])):
try:
formData = {
'textField_11ebiwp': data_NGV["saas_edition_fmt"][i],
'dateField_yubgpmy': int(time.mktime(time.strptime(data_NGV["last_end_date"][i], "%Y-%m-%d"))*1000) if data_NGV["last_end_date"][i] !='' else '',
'dateField_o1v1emn': int(time.mktime(time.strptime(data_NGV["saas_create_time"][i], "%Y-%m-%d %H:%M:%S"))*1000) if data_NGV["saas_create_time"][i] !='' else '',
'textField_cjkvqpn': data_NGV["saas_use_year"][i],
'textField_lma7s24z': data_NGV["group_name"][i],
'textField_lma7s24y': data_NGV["org_name"][i],
'textField_lma7s24x': data_NGV["org_code"][i]
}
try:
formData['employeeField_lma7s255'] = ALL_DATA_staff[data_NGV["service_impl_principal"][i]] # 运营负责人_成员字段
except:
formData['employeeField_lma7s255'] = ""
try:
formData['employeeField_lma7s253'] = ALL_DATA_staff[data_NGV["area_manager"][i]] # 区域经理_成员字段
except:
formData['employeeField_lma7s253'] = ""
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
except:
pass
FORMID = "FORM-08866RA1DJ2EILGD9AVPY3VCL8OD3N68R7AML5"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print("新建第",i,"条数据!")
time.sleep(10)
except:
pass
'''校验是否新建正常'''
time.sleep(120)
FORMID = "FORM-08866RA1DJ2EILGD9AVPY3VCL8OD3N68R7AML5"
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
if int(form_data.get('totalCount')) ==len(data_NGV):
print("数据新建成功!")
else:
def start_instance_process(token: str, name):
"""发送宜搭表单 -- 发起流程表单
Args:
token
data:需要发送的数据字典
"""
yida_api = "https://api.dingtalk.com/v1.0/yida/processes/instances/start"
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
send_data = {
"textField_l9fe0uiw": name,
"textField_l9fe0uiv": name
}
payload = {
"appType": "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account",# 超级管理员账号
"language": "zh_CN",
"formUuid": "FORM-UX866Q61GNLAZBCIEDF77BGVIIR83K82WYPHLH2",
"formDataJson": json.dumps(send_data),
"processCode":"TPROC--UX866Q61GNLAZBCIEDF77BGVIIR83M92WYPHLI2"
}
res = requests.post(yida_api, headers=headers, json=payload)
return res
try:
name = "XINQIAN_XUYUE_NGV明细数据新建条数不正确!"
res_yujing = start_instance_process(TOKEN,name)
except:
pass
File diff suppressed because it is too large Load Diff
+298
View File
@@ -0,0 +1,298 @@
# -*- 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_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)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 基础函数配置
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_RTPWHV37ENXPQUZHTL25",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"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_instances_TEBIE(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_RTPWHV37ENXPQUZHTL25",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"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_RTPWHV37ENXPQUZHTL25",
"formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"language" : "zh_CN",
"userId" : "yida_pub_account"
}
res = requests.post(api, headers=headers, json=payload)
print(res.json())
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_RTPWHV37ENXPQUZHTL25",
# "formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
# "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" : "true",
"formUuid" : FORMID,
"appType" : "APP_RTPWHV37ENXPQUZHTL25",
"asynchronousExecution" : "true",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_RTPWHV37ENXPQUZHTL25",
"asynchronousExecution" : "true",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_RTPWHV37ENXPQUZHTL25&systemToken=IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
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)
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
FORMID = "FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6
# 读取流程表单数据
form_data = read_instances_TEBIE(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_TEBIE(token=TOKEN, formUuid=FORMID, page=i, n=100)
for data in form_data.get('data'):
ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
'''批量删除NGV数据'''
for i in range(0,10):
default = True
while default:
FORMID = "FORM-08866RA1DJ2EILGD9AVPY3VCL8OD3N68R7AML5"
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 +1
print(form_data.get('totalCount'))
if form_data.get('totalCount')<=0:
default = False
for i in range(PAGES, 1,-1):
ALL_DATA_instance = []
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
for data in form_data.get('data'):
ALL_DATA_instance.append(data['formInstanceId'])
print(f'读取到表单中 {len(ALL_DATA_instance)} 条数据!')
red_delete = delete_in_batches(FORMID,TOKEN,ALL_DATA_instance)
form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)
for data in form_data.get('data'):
formInstanceId = data['formInstanceId']
delete_in(TOKEN,formInstanceId)
print(f'单条删除 {formInstanceId} 数据!')
'''遍历数据进行新建'''
data_NGV = data_NGV.astype('string')
data_NGV = data_NGV.fillna('',inplace=False)
for a in range(0,len(data_NGV["date_fmt"]),100):
ALL_formData = []
for i in range(a,a+100): # for i in range(len(data_NGV["date_fmt"])):
try:
formData = {
'textField_lma7s24z': data_NGV["group_name"][i],
'textField_lma7s24y': data_NGV["org_name"][i],
'textField_lma7s24x': data_NGV["org_code"][i]
}
try:
formData['employeeField_lma7s255'] = ALL_DATA_staff[data_NGV["service_impl_principal"][i]] # 运营负责人_成员字段
except:
formData['employeeField_lma7s255'] = ""
try:
formData['employeeField_lma7s253'] = ALL_DATA_staff[data_NGV["area_manager"][i]] # 区域经理_成员字段
except:
formData['employeeField_lma7s253'] = ""
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
except:
pass
FORMID = "FORM-08866RA1DJ2EILGD9AVPY3VCL8OD3N68R7AML5"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print("新建第",i,"条数据!")
+311
View File
@@ -0,0 +1,311 @@
# -*- 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=-2)
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)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# -*- 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_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_new = pd.DataFrame(list(rows),columns=col)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 使用isin方法筛选出A表中id_own_org字段不在B表中的行
c_data = data_NGV_new[~data_NGV_new['id_own_org'].isin(data_NGV['id_own_org'])]
# 输出C表内容
c_data = c_data.reset_index()
# 基础函数配置
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_RTPWHV37ENXPQUZHTL25",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"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_instances_TEBIE(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_RTPWHV37ENXPQUZHTL25",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"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_RTPWHV37ENXPQUZHTL25",
"formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"language" : "zh_CN",
"userId" : "yida_pub_account"
}
res = requests.post(api, headers=headers, json=payload)
print(res.json())
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_RTPWHV37ENXPQUZHTL25",
# "formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
# "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" : "true",
"formUuid" : FORMID,
"appType" : "APP_RTPWHV37ENXPQUZHTL25",
"asynchronousExecution" : "true",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_RTPWHV37ENXPQUZHTL25",
"asynchronousExecution" : "true",
"systemToken" : "IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_RTPWHV37ENXPQUZHTL25&systemToken=IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
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)
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
FORMID = "FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6
# 读取流程表单数据
form_data = read_instances_TEBIE(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_TEBIE(token=TOKEN, formUuid=FORMID, page=i, n=100)
for data in form_data.get('data'):
ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
'''遍历数据进行新建'''
data_NGV = c_data.astype('string')
data_NGV = data_NGV.fillna('',inplace=False)
for a in range(0,len(data_NGV["date_fmt"]),100):
ALL_formData = []
for i in range(a,a+100): # for i in range(len(data_NGV["date_fmt"])):
try:
formData = {
'textField_lma7s24z': data_NGV["group_name"][i],
'textField_lma7s24y': data_NGV["org_name"][i],
'textField_lma7s24x': data_NGV["org_code"][i]
}
try:
formData['employeeField_lma7s255'] = ALL_DATA_staff[data_NGV["service_impl_principal"][i]] # 运营负责人_成员字段
except:
formData['employeeField_lma7s255'] = ""
try:
formData['employeeField_lma7s253'] = ALL_DATA_staff[data_NGV["area_manager"][i]] # 区域经理_成员字段
except:
formData['employeeField_lma7s253'] = ""
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
except:
pass
FORMID = "FORM-08866RA1DJ2EILGD9AVPY3VCL8OD3N68R7AML5"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print("新建第",i,"条数据!")
@@ -0,0 +1,724 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"' tableField_ljcfpjg4 ': data[ \"【导入】申请优惠券明细\" ][i],# \"【导入】申请优惠券明细\"\n",
"' tableField_ljibuzgq ': data[ \"【check】申请优惠券明细\" ][i],# \"【check】申请优惠券明细\"\n",
"' textField_ljcfpjgd ': data[ \"发券结果\" ][i],# \"发券结果\"\n",
"开始处理发券!\n",
"读取到 [[流程]自动化优惠券(+多年)表中 101 条数据!\n",
"CHS201911260043499 18795561919 {'result': ['FINST-DOC66I91U7YOGXM8EUV9TBSR19WG240LQDK1MZ9']}\n",
"CHS202108070135068 18112840707 {'result': ['FINST-ENC66381YZXO70SS7LVKVDJVDFOR27YMQDK1MZA1']}\n",
"CHS201909220038177 13401251100 {'result': ['FINST-N9866581GAXOTEKYDFWHBAVR46ZB3ZSOQDK1MDL2']}\n",
"CHS202210100189938 18061129944 {'result': ['FINST-57B66W91K7YOHIB0EN5RX64FW9H13ANQQDK1M0B']}\n",
"CHS202109040139995 13812444401 {'result': ['FINST-KIC66X7167YOJ60UET60YC4AZR5A37JSQDK1MIB']}\n",
"CHS202106220130205 13913803740 {'result': ['FINST-QRC66Q71B6YOCAYUA4I346MU3CJH34FUQDK1MUJ']}\n",
"CHS201912300049618 15370049198 {'result': ['FINST-N9866581F6XOPN05B6E2A7V8LAJD3FBWQDK1M135']}\n",
"CHS202106090128927 18360729265 {'result': ['FINST-PS666N71X7YOTBLQ6YAUW9CUOQN42W6YQDK1MIK']}\n",
"CHS201906260031641 15852031790 {'result': ['FINST-QRC66Q71B1YOHEEA8PMME6KIDI7H3F30RDK1M69']}\n",
"a0be439e-fc9c-4d90-9e50-61d8b36e01e6 {}\n"
]
}
],
"source": [
"# 基础信息\n",
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import re\n",
"import sys\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"from datetime import date, timedelta\n",
"import datetime\n",
"from io import BytesIO\n",
"\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_processes_instances(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",
"\n",
"def queryLastSaasInfo(cellPhone):\n",
" \"\"\" 函数功能:手机号查询最近一次购买saas明细 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/order/queryLastSaasInfo?cellPhone=' + cellPhone\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def get_approval_records(token: str, processInstanceId: str):\n",
" \"\"\" 函数功能:获取流程表单的审批记录 \"\"\"\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",
"\n",
"\n",
"def aggree_approval(token: str, taskId: str, processInstanceId: str,res_new,formDataJson):\n",
" \"\"\" 函数功能:同意审批节点 \"\"\"\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(formDataJson),\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",
"\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 queryCompanies(cellPhone):\n",
" \"\"\" 函数功能:自动发券查询手机号所处公司 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/account/query?cellPhone=' + cellPhone\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"def queryDetailByOrgId(orgId):\n",
" \"\"\" 函数功能:自动发券查询门店上次成交价 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/org/queryDetailByOrgId?orgId=' + orgId\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\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",
"\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\" : \"false\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"false\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"true\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"formDataJsonList\" : ALL_formData,\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 queryskuList():\n",
" \"\"\" 函数功能:按照商品分类查询商品列表接口 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/sku/category/query?category=4'\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def couponAvailableQuery(cellPhone,groupId,skuList,passportId):\n",
" \"\"\" 函数功能:在当前选择场景下查询手机号可以使用的优惠券 http://manage.f6yc.com/hive-admin/ \"\"\"\n",
"\n",
" api = f'http://manage.f6yc.com/hive-admin/yida/coupon/available/query?passportId={passportId}&cellPhone={cellPhone}&groupId={groupId}&skuList' + str(skuList)\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def queryPriceInfoBySkuId(orgId,skuId,saasUpdate):\n",
" \"\"\" 函数功能:商品价格查询\"\"\"\n",
"\n",
" api = f'http://manage.f6yc.com/hive-admin/yida/sku/queryPriceInfoBySkuId?orgId={orgId}&skuId={skuId}&saasUpdate={saasUpdate}'\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def read_instances_new(token, formUuid, page, n,CREATE_FROM, CREATE_TO):\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_RTPWHV37ENXPQUZHTL25\",\n",
" \"systemToken\": \"IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6\",\n",
" \"userId\": \"yida_pub_account\", # 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formUuid\": formUuid,\n",
" \"createFromTimeGMT\":CREATE_FROM,\n",
" \"createToTimeGMT\":CREATE_TO\n",
" # \"searchFieldJson\": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储\n",
" # \"instanceStatus\": \"RUNNING\"\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"def updateFormDataJson (token, formUuid, updateFormDataJson):\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_RTPWHV37ENXPQUZHTL25\",\n",
" \"systemToken\": \"IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6\",\n",
" \"userId\": \"yida_pub_account\", # 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formInstanceId\": formUuid,\n",
" \"updateFormDataJson\":updateFormDataJson\n",
" }\n",
"\n",
" res = requests.put(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"from datetime import datetime\n",
"import time\n",
"def get_time_range_minute(n):\n",
" \"\"\" 获取近n分钟的时间戳(单位是毫秒)\"\"\"\n",
"\n",
" def delay_time(time_str, years=0, months=0, days=0, hours=0, minutes=0, seconds=0):\n",
" if type(time_str) == str:\n",
" time_str = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')\n",
" ret = time_str + relativedelta(years=years, months=months, days=days, hours=hours, minutes=minutes, seconds=seconds)\n",
" return ret\n",
"\n",
" # 获得当前时间\n",
" now_time = datetime.now()\n",
" endTime = int(time.mktime(time.strptime(now_time.strftime('%Y/%m/%d %H:%M:%S'), '%Y/%m/%d %H:%M:%S'))) * 1000 - 1000\n",
" # n小时前的时间\n",
" ret2 = delay_time(now_time, minutes=-n)\n",
" startTime = int(time.mktime(time.strptime(ret2.strftime('%Y/%m/%d %H:%M:%S'), '%Y/%m/%d %H:%M:%S'))) * 1000\n",
"\n",
" # print(f'时间区间:[{startTime}-{endTime}]')\n",
" return startTime, endTime\n",
"\n",
"def timeStamp(timeNum):\n",
" \"\"\" 函数功能:将时间戳(毫秒) 转化为时间日期格式\"\"\"\n",
" timeStamp = float(timeNum/1000)\n",
" timeArray = time.localtime(timeStamp)\n",
" otherStyleTime = time.strftime(\"%Y-%m-%d %H:%M:%S\", timeArray)\n",
" return otherStyleTime\n",
"# 4320分钟时间间隔\n",
"CREATE_FROM, CREATE_TO = [timeStamp(t) for t in get_time_range_minute(4320)]\n",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
" \n",
"'''获取表内控件信息 '''\n",
"TOKEN = generateToken()\n",
"FORMID_NEW = \"FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9\"\n",
"component_list = component(FORMID_NEW,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[\",name_value,\"][i],#\",name_value)\n",
"\n",
"\"\"\" 处理流程开始 \"\"\"\n",
"FORMID = \"FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9\" # 【测试版本】批量自动发券\n",
"# 读取续约流程表单\n",
"form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for v in range(0,len(form_data.get('data'))):\n",
" \n",
" # 获取当前所处节点\n",
" res_new = get_approval_records(token=TOKEN, processInstanceId=form_data['data'][v]['processInstanceId'])\n",
" records_new = res_new.get('result')\n",
" # 获取审批节点的 taskId\n",
" records_new = [item for item in records_new if item.get('type') == \"TODO\"]\n",
" taskId_new = records_new[0]['activityId']\n",
" taskId = records_new[0]['taskId']\n",
" if taskId_new==\"sid-6470221a-82ec-4bdd-a873-245ee47a5605\": # check\n",
" print(\"开始处理!\")\n",
" # 读取NGV明细\n",
" import psycopg2\n",
" import pandas as pd\n",
" # 获得连接\n",
" conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
" # 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
" cursor = conn.cursor()\n",
" import datetime\n",
" now_time = datetime.datetime.now()\n",
" yes_time = now_time + datetime.timedelta(days=-1)\n",
" yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
" # sql语句 建表\n",
" sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
" # 执行语句\n",
" cursor.execute(sql)\n",
" # 获取结果集的每一行\n",
" rows = cursor.fetchall()\n",
" # 获取所有字段名\n",
" all_fields = cursor.description\n",
" #执行结果转化为dataframe\n",
" col = []\n",
" for i in all_fields:\n",
" col.append(i[0])\n",
" data_NGV = pd.DataFrame(list(rows),columns=col)\n",
" # 关闭数据库连接\n",
" cursor.close()\n",
" conn.close()\n",
" \n",
" '''读取商品和券信息'''\n",
" FORMID_TWO = \"FORM-6L966171O3RB70TJDB75R6RBI31V2NNACKCJLF1\" # 商品ID券ID关系表\n",
" all_skuId = {}\n",
" all_couponTemplateId = {}\n",
" textField_ljwon3vt = {}\n",
" textField_ljxv26ip = {}\n",
" list_new = 0\n",
" tableField_data_new = {}\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=1, n=100)\n",
" PAGES_TWO = form_data_TWO.get('totalCount')//100 + 1\n",
" for a in range(1, PAGES_TWO+1):\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=a, n=100)\n",
" for data_TWO in form_data_TWO.get('data'):\n",
" all_skuId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_nt0h72h']\n",
" all_couponTemplateId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_47og525']\n",
" textField_ljwon3vt[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljwon3vt']\n",
" textField_ljxv26ip[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljxv26ip']\n",
" \"\"\" 开始分别读取数据并填充数据进行创建 \"\"\"\n",
" for data in form_data['data'][v]['data']['tableField_ljcfpjg4']:\n",
" # 基础字段预设\n",
" data_new = {}\n",
" data_new['textField_ljibuzgd'] = \"\"\n",
" data_new['textField_ljibuzge'] = \"\"\n",
" try:\n",
" # 获取门店编码对应的信息\n",
" result = data_NGV[data_NGV['org_code'] == data['textField_ljcfpjg6']]\n",
" result = result.reset_index()\n",
" # 获取手机号+判断手机号是否在公司名下\n",
" # 获取手机号+判断手机号是否在公司名下\n",
" if data[\"textField_ljcfpjg8\"] ==\"\": # 手机号未填写,默认填充ngv中对应的手机号\n",
" data_new['textField_ljibuzgl'] = result['contact_mobile'][0]\n",
" else:\n",
" data_new['textField_ljibuzgl'] = data[\"textField_ljcfpjg8\"]\n",
" cellPhone_group_name = queryCompanies(data_new['textField_ljibuzgl'])\n",
" groupName_all = {}\n",
" for data_two in cellPhone_group_name['data']['groupList']:\n",
" groupName_all[data_two[\"groupName\"]]=data_two[\"groupId\"]\n",
" try:\n",
" if len(cellPhone_group_name['data']['groupList']) > 0:\n",
" pass\n",
" else:\n",
" data_new['textField_ljibuzgl'] = data[\"textField_ljcfpjg8\"] \n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"F6中不存在该手机号;\"\n",
" except:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"F6中不存在该手机号;\"\n",
" \n",
" if result['group_name'][0] not in groupName_all:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"联系电话与门店编码关系错误;\"\n",
" # # 本次成交年限(1、2、3 selectField_ljicmdwn\n",
" # if data[\"selectField_ljicmdwn\"] ==\"1\" or data[\"selectField_ljicmdwn\"] ==\"2\" or data[\"selectField_ljicmdwn\"] ==\"3\":\n",
" # data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"本次成交年限填写错误,请填写【1、2、3】;\"\n",
" # 获取公司名称+门店名称+门店版本+到期日+门店编码\n",
" data_new['textField_ljibuzgm'] = result['group_name'][0]\n",
" data_new['textField_ljibuzgh'] = result['org_name'][0]\n",
" data_new['textField_ljibuzgi'] = result['saas_edition_fmt'][0]\n",
" data_new['textField_ljibuzgf'] = result['expiry_time'][0]\n",
" data_new['textField_ljibuzgn'] = result['org_code'][0]\n",
" # 获取上次成交价 textField_ljibuzgg\n",
" OrgId_list = queryDetailByOrgId(result['id_own_org'][0])\n",
" data_new['textField_ljibuzgg'] = OrgId_list['data']['lastSaasOrderPrice']/OrgId_list['data']['lastTransactionYear']\n",
" # 获取提前续约立减额 textField_ljibuzgj\n",
" try:\n",
" queryPriceInfoBySkuIdnew = queryPriceInfoBySkuId(result['id_own_org'][0],all_skuId[result['saas_edition_fmt'][0] + \"1\"],\"false\")\n",
" data_new['textField_ljibuzgj'] = queryPriceInfoBySkuIdnew['data']['renewalDiscountAmount']\n",
" except:\n",
" data_new['textField_ljibuzgj'] = \"0\"\n",
" # 版本续约金额\n",
" data_new['textField_lk6g6e2l'] = textField_ljwon3vt[result['saas_edition_fmt'][0] + \"1\"] # 版本续约金额\n",
" # 申请优惠券金额 numberField_ljwn6n7w_value 判断优惠券申请金额是否填写,如果没有填写则进行填充\n",
" # 本次成交价 numberField_ljwn6n7w_value 判断本次成交价是否填写,如果没有填写则进行填充 \n",
" if data[\"numberField_ljwn6n7w_value\"] != \"\":\n",
" data_new['textField_ljibuzgk'] = data[\"numberField_ljwn6n7w_value\"]\n",
" if int(data[\"numberField_ljwn6n7w_value\"]) <= 0:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"本次成交价需要大于0,或者为空;\"\n",
" elif data[\"numberField_ljwn6n7w_value\"] == \"\": # 判断本次成交价是否填写,如果没有填写则进行填充 默认取 上次成交价\n",
" data_new['textField_ljibuzgk'] = data_new['textField_ljibuzgg']\n",
" else:\n",
" data_new['textField_ljibuzgk'] =data[\"numberField_ljwn6n7w_value\"]\n",
" \n",
" # 获取申请优惠券金额 textField_ljibuzgp 申请优惠券金额= 版本价格-提前立减额-本次成交价\n",
" data_new['textField_ljibuzgp'] = int(data_new['textField_lk6g6e2l']) - int(data_new['textField_ljibuzgj']) - int(data_new['textField_ljibuzgk'])\n",
"\n",
" # # 获取本次成交价格 textField_ljibuzgk\n",
" # if data[\"numberField_ljwn6n7w_value\"] ==\"\":\n",
" # data_new['textField_ljibuzgk'] = int(textField_ljwon3vt[result['saas_edition_fmt'][0] + \"1\"]) - int(data_new['textField_ljibuzgp'])- int(data_new['textField_ljibuzgj'])\n",
" # else:\n",
" # data_new['textField_ljibuzgk'] = int(textField_ljwon3vt[result['saas_edition_fmt'][0] + \"1\"]) - int(data_new['textField_ljibuzgp']) - int(data_new['textField_ljibuzgj'])\n",
" # 获取已有优惠券\n",
" passportId=int(cellPhone_group_name['data']['passportId'])\n",
" cellPhone=int(data_new['textField_ljibuzgl'])\n",
" groupId = int(result['id_own_group'][0])\n",
" skuList = queryskuList()\n",
" # 过滤 仅入参对应版本的\n",
" filtered_data = [item for item in skuList[\"data\"] if item['saasEditionName'] == result['saas_edition_fmt'][0]]\n",
" filtered_data_skuList={'code': 200,\n",
" 'data': filtered_data,\n",
" 'message': 'SUCCESS'}\n",
" couponAvailableQuery_list = couponAvailableQuery(cellPhone,groupId,filtered_data_skuList,passportId)\n",
" for data_ONE in couponAvailableQuery_list['data']:\n",
" data_new['textField_ljibuzge'] = data_new['textField_ljibuzge'] + data_ONE ['couponName'] + \"\"+ str(data_ONE ['couponValue']) +\"\"\n",
" if \"优惠券\" in data_ONE ['couponName']:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] +\"存在未使用的优惠券;\"\n",
" \n",
" # 是否低于限价 radioField_ljxz9ho5 是否发券 radioField_ljibuzgc 版本限价 textField_lk6hj6sw\n",
" data_new['textField_lk6hj6sw'] = textField_ljxv26ip[result['saas_edition_fmt'][0] + \"1\"]\n",
" if int(data_new['textField_ljibuzgk']) < int(textField_ljxv26ip[result['saas_edition_fmt'][0] + \"1\"]):\n",
" data_new['radioField_ljxz9ho5'] = \"是\"\n",
" # data_new['radioField_ljibuzgc'] = \"否\"\n",
" else:\n",
" data_new['radioField_ljxz9ho5'] = \"否\"\n",
" # 是否的低于上次成交价 radioField_ljxz9ho6 是否发券 radioField_ljibuzgc\n",
" if int(data_new['textField_ljibuzgk']) < int(data_new['textField_ljibuzgg']):\n",
" data_new['radioField_ljxz9ho6'] = \"是\"\n",
" # data_new['radioField_ljibuzgc'] = \"否\"\n",
" else:\n",
" data_new['radioField_ljxz9ho6'] = \"否\"\n",
" # if int(data_new['textField_ljibuzgj']) > 0:\n",
" # data_new['textField_ljibuzgd'] = \"存在提前续约立减额,不是30天内过期客户!\"\n",
" # if int(data_new['textField_ljibuzgp']) <= 0:\n",
" # data_new['textField_ljibuzgd'] = \"申请优惠金额需要大于0元!\"\n",
" # # 集合 textField_ljy172na\n",
" # data_new['textField_ljy172na'] = str({\n",
" # \"cellPhone\":data_new[\"textField_ljibuzgl\"], # 收劵人手机号码\n",
" # \"dingDingId\":form_data['data'][v]['originator']['userId'], # 申请人钉钉ID\n",
" # \"stage\":2, # 所属阶段(新签:1,续约:2\n",
" # \"couponApplyType\":1, # 优惠券申请类型;新签:saas优惠劵申请:1,短信优惠劵申请:2,人工服务优惠劵申请:3;续约:saas续约优惠劵申请:1,saas升级优惠劵申请:2,短信优惠劵申请:3,人工服务优惠劵申请:4(暂不支持)\n",
" # \"detailList\":[{ # 发劵明细列表\n",
" # \"couponTemplateId\":all_couponTemplateId[result['saas_edition_fmt'][0] + \"1\"], # 劵模板ID\n",
" # \"couponAmount\":int(data_new[\"textField_ljibuzgp\"]), # 劵金额,>0\n",
" # \"grantGroup\":1, # 1:发送到公司+人,0:发送到人\n",
" # \"groupId\":result['id_own_group'][0], # 发放公司ID,发在公司下=true是有值\n",
" # \"skuId\":all_skuId[result['saas_edition_fmt'][0] + \"1\"], # 商品id \n",
" # \"orgId\":result['id_own_org'][0], # 门店ID,(申请续约劵并且降级时必填)\n",
" # \"demotion\":0, # 降级(是:1,否:0\n",
" # \"demotionSaaSEdition\":0 # 降级版本,门店降级时必填\n",
" # }]\n",
" # })\n",
" # data_new['textField_ljy172na'] = data_new['textField_ljy172na'].replace(\"'\", '\"')\n",
"\n",
" # data_new['textField_ljy172na'] = data_new['textField_ljy172na'].replace(\" \", \"\")\n",
" except:\n",
" data_new['textField_ljibuzgd'] = \"数据读取异常:\" + data_new['textField_ljibuzgd']\n",
" # CHECK结果校验 textField_ljibuzgd\n",
" if data_new['textField_ljibuzgd'] == \"\":\n",
" data_new['textField_ljibuzgd'] = \"正确\"\n",
" list_new = list_new + 1\n",
" # 回传结果\n",
" if list_new == 1:\n",
" tableField_data_new['tableField_ljibuzgq'] = [data_new]\n",
" else:\n",
" tableField_data_new['tableField_ljibuzgq'].append(data_new)\n",
" res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new =\"2268275546837446\",formDataJson=tableField_data_new)\n",
" print(form_data['data'][v]['processInstanceId'],res.json())\n",
" time.sleep(2)\n",
" elif taskId_new==\"sid-23822834-234a-b12a-dfea-a6ad1acc8c1b\": # API自动发券\n",
" print(\"开始处理发券!\")\n",
" # 读取NGV明细\n",
" import psycopg2\n",
" import pandas as pd\n",
" # 获得连接\n",
" conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
" # 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
" cursor = conn.cursor()\n",
" import datetime\n",
" now_time = datetime.datetime.now()\n",
" yes_time = now_time + datetime.timedelta(days=-1)\n",
" yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
" # sql语句 建表\n",
" sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
" # 执行语句\n",
" cursor.execute(sql)\n",
" # 获取结果集的每一行\n",
" rows = cursor.fetchall()\n",
" # 获取所有字段名\n",
" all_fields = cursor.description\n",
" #执行结果转化为dataframe\n",
" col = []\n",
" for i in all_fields:\n",
" col.append(i[0])\n",
" data_NGV = pd.DataFrame(list(rows),columns=col)\n",
" # 关闭数据库连接\n",
" cursor.close()\n",
" conn.close()\n",
" '''读取商品和券信息'''\n",
" FORMID_TWO = \"FORM-6L966171O3RB70TJDB75R6RBI31V2NNACKCJLF1\" # 商品ID券ID关系表\n",
" all_skuId = {}\n",
" all_couponTemplateId = {}\n",
" textField_ljwon3vt = {}\n",
" textField_ljxv26ip = {}\n",
" list_new = 0\n",
" succeed_all = 0\n",
" all_all= 0\n",
" tableField_data_new = {}\n",
" data_new = {}\n",
" data_check = {}\n",
" formDataJson_check = {}\n",
" code_new = \"\"\n",
" formDataJson_check['textField_ljcfpjgd'] = \"\"\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=1, n=100)\n",
" PAGES_TWO = form_data_TWO.get('totalCount')//100 + 1\n",
" for a in range(1, PAGES_TWO+1):\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=a, n=100)\n",
" for data_TWO in form_data_TWO.get('data'):\n",
" all_skuId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_nt0h72h']\n",
" all_couponTemplateId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_47og525']\n",
" textField_ljwon3vt[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljwon3vt']\n",
" textField_ljxv26ip[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljxv26ip']\n",
" FORMID = \"FORM-XHA66881FHMAR0F07GT4Y59GGA972DD6B5OHLB\" # [流程]自动化优惠券(+多年)\n",
" # 读取[流程]自动化优惠券(+多年)\n",
" form_data_new = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,CREATE_FROM=CREATE_FROM, CREATE_TO=CREATE_TO)\n",
" PAGES = form_data_new.get('totalCount')//100 + 1\n",
" ALL_DATA_code = []\n",
" \"\"\" 获取全量数据 \"\"\"\n",
" for i in range(1, PAGES+1):\n",
" form_data_new = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,CREATE_FROM=CREATE_FROM, CREATE_TO=CREATE_TO)\n",
" for data_one in form_data_new.get('data'):\n",
" try:\n",
" for j in range(0,len(data_one['data']['tableField_l1w05znp'])):\n",
" ALL_DATA_code.append(str(data_one['data']['tableField_l1w05znp'][j]['selectField_l1wxjd8l']) + \"+\" + str(data_one['data']['tableField_l1w05znp'][j]['textField_l5j0ym23']))\n",
" except:\n",
" pass\n",
" print(f'读取到 [[流程]自动化优惠券(+多年)表中 {len(ALL_DATA_code)} 条数据!')\n",
" for data in form_data['data'][v]['data']['tableField_ljibuzgq']: # -----------------------------------------------\n",
" updateFormDataJson_check = {}\n",
" # 获取门店编码对应的信息\n",
" result = data_NGV[data_NGV['org_code'] == data['textField_ljibuzgn']]\n",
" result = result.reset_index()\n",
" # 读取[流程]自动化优惠券(+多年)中存在该门店发券流程,避免重复发券\n",
" if str(data['textField_ljibuzgn']) + \"+\" + str(all_couponTemplateId[result['saas_edition_fmt'][0] + \"1\"]) in ALL_DATA_code:\n",
" # updateFormDataJson_check['textField_ljibuzgd'] = data['textField_ljibuzgd'] + \"[流程]自动化优惠券(+多年)中存在该门店发券流程!;\"\n",
" # updateFormDataJson_check['radioField_ljxz9ho5'] = \"否\"\n",
" # FORMID = \"FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9\" # 【测试版本】批量自动发券\n",
" # res=updateFormDataJson(TOKEN, FORMID, updateFormDataJson_check)\n",
" # print(res.json)\n",
" code_new = code_new + data[\"textField_ljibuzgl\"] + \"\"\n",
" else:\n",
" # res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new =\"2268275546837446\",formDataJson=tableField_data_new)\n",
" # print(form_data['data'][v]['processInstanceId'],res.json())\n",
" # for data_ONE in couponAvailableQuery_list['data']:\n",
" # if \"续约优惠券\" in data_ONE ['couponName']:\n",
" # data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] +\"存在未使用的续约优惠券;\"\n",
" # data_new['textField_ljibuzge'] = data_new['textField_ljibuzge'] + data_ONE ['couponName'] + \"\"+ str(data_ONE ['couponValue']) +\"\"\n",
" # check_all = check_all + 1\n",
" \n",
" data_new['textField_ljy172na'] = str({\n",
" \"cellPhone\":data[\"textField_ljibuzgl\"], # 收劵人手机号码\n",
" \"dingDingId\":form_data['data'][v]['originator']['userId'], # 申请人钉钉ID\n",
" \"stage\":2, # 所属阶段(新签:1,续约:2\n",
" \"couponApplyType\":1, # 优惠券申请类型;新签:saas优惠劵申请:1,短信优惠劵申请:2,人工服务优惠劵申请:3;续约:saas续约优惠劵申请:1,saas升级优惠劵申请:2,短信优惠劵申请:3,人工服务优惠劵申请:4(暂不支持)\n",
" \"detailList\":[{ # 发劵明细列表\n",
" \"couponTemplateId\":all_couponTemplateId[result['saas_edition_fmt'][0] + \"1\"], # 劵模板ID\n",
" \"couponAmount\":int(float(data[\"textField_ljibuzgp\"])), # 劵金额,>0\n",
" \"grantGroup\":1, # 1:发送到公司+人,0:发送到人\n",
" \"groupId\":result['id_own_group'][0], # 发放公司ID,发在公司下=true是有值\n",
" \"skuId\":all_skuId[result['saas_edition_fmt'][0] + \"1\"], # 商品id \n",
" \"orgId\":result['id_own_org'][0], # 门店ID,(申请续约劵并且降级时必填)\n",
" \"demotion\":0, # 降级(是:1,否:0\n",
" \"demotionSaaSEdition\":0 # 降级版本,门店降级时必填\n",
" }]\n",
" })\n",
" data_list = {\n",
" 'textField_ljchgz1f':data['textField_ljibuzgn'], # 门店编码\n",
" 'textField_ljchgz1i':data_new['textField_ljy172na'], # 数据集\n",
" 'textField_ljchgz1h':data['textField_ljibuzgd'], # check结果\n",
" 'textField_ljy1x9kb':form_data['data'][v]['processInstanceId'], # 关联表单id\n",
" 'textField_ljf6nf7s':data['radioField_ljibuzgc'] # 是否发券\n",
" }\n",
" ALL_formData = []\n",
" ALL_formData.append(json.dumps(data_list, cls=NpEncoder)) \n",
" FORMID_NEW = \"FORM-JD8668C1MFBC3ND4BWO736T7G5Q7318IC0YJLA\" # 【测试版本】自动触发明细表\n",
" res = Batch_creation(FORMID_NEW,TOKEN,ALL_formData)\n",
" print(data['textField_ljibuzgn'],data[\"textField_ljibuzgl\"],res)\n",
" time.sleep(2)\n",
" all_all = all_all + 1\n",
" if data['textField_ljibuzgd'] == \"正确\" and data['radioField_ljibuzgc'] == \"是\":\n",
" succeed_all = succeed_all + 1\n",
" fail_all = all_all - succeed_all\n",
" if len(code_new)>0:\n",
" txt_all = f\"发送成功:{succeed_all}条;发送失败:{fail_all}条;{code_new}在[流程]自动化优惠券(+多年)中有申请记录!\"\n",
" else:\n",
" txt_all = f\"发送成功:{succeed_all}条;发送失败:{fail_all}条;\"\n",
" formDataJson_check = {\n",
" 'textField_ljcfpjgd':txt_all\n",
" }\n",
" res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new =\"2268275546837446\",formDataJson=formDataJson_check)\n",
" print(form_data['data'][v]['processInstanceId'],res.json())\n",
" time.sleep(2)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,91 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll\n",
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas64__v0.3.21-gcc_10_3_0.dll\n",
" warnings.warn(\"loaded more than 1 DLL from .libs:\"\n",
"<ipython-input-1-66fb43067687>:45: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n",
" df_list.to_excel(r'C:\\Users\\admin\\Desktop\\打印单模板{}.xlsx'.format(data_time))\n"
]
}
],
"source": [
"import requests\n",
"import pandas as pd\n",
"import time\n",
"\n",
"session = requests.Session()\n",
"login_url = 'https://print.f6yc.com/print-server/template/getTemplate?clsId=&tempCode=&tempName=&currentPage=1&pageSize=100'\n",
"\n",
"headers = {\n",
" 'Accept':'application/json, text/plain, */*',\n",
" 'Accept-Encoding':'gzip, deflate, br, zstd',\n",
" 'Accept-Language':'zh-CN,zh;q=0.9',\n",
" 'Authorization':'Basic NjAyMzg6Q3dAMzQwODI2',\n",
" 'Cache-Control':'no-cache',\n",
" 'Cookie':'print-serverSESSIONID=fV0OqIJhtIhjaZD2Way9jN7FkvCnJP63o8p924DT; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%222268275546837446%22%2C%22first_id%22%3A%221753edeb75a603-0155d23aa05675-3d634f03-1327104-1753edeb75b347%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221753edeb75a603-0155d23aa05675-3d634f03-1327104-1753edeb75b347%22%7D',\n",
" 'Pragma':'no-cache',\n",
" 'Referer':'https://print.f6yc.com/print-server/ui/index.html',\n",
" 'Sec-Ch-Ua':'\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"122\"',\n",
" 'Sec-Ch-Ua-Mobile':'?0',\n",
" 'Sec-Ch-Ua-Platform':'\"Windows\"',\n",
" 'Sec-Fetch-Dest':'empty',\n",
" 'Sec-Fetch-Mode':'cors',\n",
" 'Sec-Fetch-Site':'same-origin',\n",
" 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'\n",
"}\n",
"\n",
"response = session.get(login_url,headers=headers)\n",
"response = response.json()\n",
"total = response['data']['total'] //100 + 2\n",
"ALL_DATA_service = []\n",
"for i in range(1,total):\n",
" login_url = 'https://print.f6yc.com/print-server/template/getTemplate?clsId=&tempCode=&tempName=&currentPage='+ str(i) +'&pageSize=100'\n",
" form_data = session.get(login_url,headers=headers)\n",
" form_data = form_data.json()\n",
" for data in form_data.get('data').get('list'):\n",
" list = {\n",
" 'rowId': data['rowId'],\n",
" 'tempName': data['tempName'],\n",
" 'tempCode': data['tempCode']\n",
" }\n",
" # print(i,list)\n",
" ALL_DATA_service.append(list)\n",
"df_list = pd.DataFrame(ALL_DATA_service)\n",
"data_time = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n",
"data_time = data_time.replace(':', '-')\n",
"df_list.to_excel(r'C:\\Users\\admin\\Desktop\\打印单模板{}.xlsx'.format(data_time))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,649 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"8\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-3-d4648c6f35ad>:30: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n",
" data_details.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细123123123.xlsx')\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",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-4)\n",
"yes_time_new = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr1 = yes_time_new.strftime('%Y%m%d')\n",
"yes_time_nyr2 = yes_time.strftime('%Y%m%d')# 获取前7天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_dataservice_saas_org_health_warning\" WHERE \"pt\" = '20230820';\"\"\"\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_details.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细123123123.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"print(len(data_details))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 霍创业\n",
"1 魏元盟\n",
"2 赵旭伟\n",
"3 曾令成\n",
"4 王斌\n",
"5 胡楠\n",
"6 杨挺\n",
"7 邢恒岭\n",
"Name: service_impl_principal, dtype: object"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_details['service_impl_principal']"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13\n",
"' textField_l8ceppnl ': data_details[ \"活跃健康状态变化\" ][i], # \"活跃健康状态变化\"\n",
"' textField_l8ceppnm ': data_details[ \"客户状态变化日期\" ][i], # \"客户状态变化日期\"\n",
"' dateField_l9dy6f8g ': data_details[ \"初始日\" ][i], # \"初始日\"\n",
"' dateField_l9dy6f8h ': data_details[ \"推进日\" ][i], # \"推进日\"\n",
"' textField_l8ceppo5 ': data_details[ \"公司名称\" ][i], # \"公司名称\"\n",
"' textField_lief8uqx ': data_details[ \"门店类型\" ][i], # \"门店类型\"\n",
"' textField_lief8ur1 ': data_details[ \"SaaS版本名称\" ][i], # \"SaaS版本名称\"\n",
"' textField_lief8ur2 ': data_details[ \"saas客户类型\" ][i], # \"saas客户类型\"\n",
"' textField_l8ceppo9 ': data_details[ \"公司等级\" ][i], # \"公司等级\"\n",
"' textField_lief8uqy ': data_details[ \"门店阶段\" ][i], # \"门店阶段\"\n",
"' textField_lief8ur0 ': data_details[ \"系统版本名称:E.L/E.S\" ][i], # \"系统版本名称:E.L/E.S\"\n",
"' dateField_lief8uqz ': data_details[ \"SaaS门店开户时间\" ][i], # \"SaaS门店开户时间\"\n",
"' textField_l8ceppo4 ': data_details[ \"门店编码\" ][i], # \"门店编码\"\n",
"' textField_l8ceppo6 ': data_details[ \"门店名称\" ][i], # \"门店名称\"\n",
"' textField_l8ceppo7 ': data_details[ \"联系人\" ][i], # \"联系人\"\n",
"' textField_l8ceppo8 ': data_details[ \"联系方式\" ][i], # \"联系方式\"\n",
"' textField_l8ceppoi ': data_details[ \"大区\" ][i], # \"大区\"\n",
"' textField_l8ceppoj ': data_details[ \"省\" ][i], # \"省\"\n",
"' employeeField_l8cepppu ': data_details[ \"运营负责人\" ][i], # \"运营负责人\"\n",
"' textField_lief8ur3 ': data_details[ \"区域经理\" ][i], # \"区域经理\"\n",
"' textField_lief8ur4 ': data_details[ \"城市\" ][i], # \"城市\"\n",
"' textareaField_l8ceppop ': data_details[ \"跟进记录描述\" ][i], # \"跟进记录描述\"\n",
"' radioField_l8ceppr2 ': data_details[ \"正常使用\" ][i], # \"正常使用\"\n",
"' multiSelectField_l8cepprp ': data_details[ \"仅部分业务登记具体项\" ][i], # \"仅部分业务登记具体项\"\n",
"' multiSelectField_l8cepprq ': data_details[ \"仅用部分功能具体项\" ][i], # \"仅用部分功能具体项\"\n",
"' multiSelectField_l8cepprr ': data_details[ \"非目标客户具体项\" ][i], # \"非目标客户具体项\"\n",
"' multiSelectField_l8cepprs ': data_details[ \"非主系统具体项\" ][i], # \"非主系统具体项\"\n",
"' textField_l8cepps5 ': data_details[ \"正常使用其他\" ][i], # \"正常使用其他\"\n",
"' radioField_l8ceppr4 ': data_details[ \"门店原因\" ][i], # \"门店原因\"\n",
"' selectField_l8ceppru ': data_details[ \"愿意用没时间用具体项\" ][i], # \"愿意用没时间用具体项\"\n",
"' selectField_l8cepprv ': data_details[ \"愿意用没专人用具体项\" ][i], # \"愿意用没专人用具体项\"\n",
"' selectField_l8cepprw ': data_details[ \"不愿意使用具体项\" ][i], # \"不愿意使用具体项\"\n",
"' selectField_l8cepprx ': data_details[ \"暂时不用系统具体项\" ][i], # \"暂时不用系统具体项\"\n",
"' selectField_l8ceppry ': data_details[ \"没有购买诉求具体项\" ][i], # \"没有购买诉求具体项\"\n",
"' selectField_l8cepprz ': data_details[ \"加盟其他连锁具体项\" ][i], # \"加盟其他连锁具体项\"\n",
"' textField_l8ceppr5 ': data_details[ \"门店原因其他\" ][i], # \"门店原因其他\"\n",
"' radioField_l8cepprd ': data_details[ \"服务原因\" ][i], # \"服务原因\"\n",
"' selectField_l8cepps0 ': data_details[ \"培训后不会用具体项\" ][i], # \"培训后不会用具体项\"\n",
"' selectField_l8cepps1 ': data_details[ \"培训后未使用具体项\" ][i], # \"培训后未使用具体项\"\n",
"' selectField_l8cepps2 ': data_details[ \"无人培训具体项\" ][i], # \"无人培训具体项\"\n",
"' selectField_l8cepps3 ': data_details[ \"已培训使用少具体项\" ][i], # \"已培训使用少具体项\"\n",
"' textField_l8ceppri ': data_details[ \"服务原因其他\" ][i], # \"服务原因其他\"\n",
"' radioField_l8cepprg ': data_details[ \"产品原因\" ][i], # \"产品原因\"\n",
"' textField_l8jwaxkh ': data_details[ \"具体功能不满足项\" ][i], # \"具体功能不满足项\"\n",
"' textField_l8cepprj ': data_details[ \"产品原因其他\" ][i], # \"产品原因其他\"\n",
"' radioField_l8cepprh ': data_details[ \"未正式切换\" ][i], # \"未正式切换\"\n",
"' textField_l8cepps4 ': data_details[ \"未正式切换其他\" ][i], # \"未正式切换其他\"\n",
"' employeeField_l8ceppp4 ': data_details[ \"跟进人\" ][i], # \"跟进人\"\n",
"' dateField_l8cepppi ': data_details[ \"跟进时间\" ][i], # \"跟进时间\"\n",
"' radioField_l8ceppq7 ': data_details[ \"状态\" ][i], # \"状态\"\n",
"' radioField_l8cepppr ': data_details[ \"跟进后的结果\" ][i], # \"跟进后的结果\"\n",
"' employeeField_lbfwxou1 ': data_details[ \"区域客服\" ][i], # \"区域客服\"\n",
"' textField_lifbrlco ': data_details[ \"门店类型\" ][i], # \"门店类型\"\n",
"' textField_lifbrlcp ': data_details[ \"门店阶段\" ][i], # \"门店阶段\"\n",
"' dateField_lifbrld1 ': data_details[ \"Saas门店开户时间\" ][i], # \"Saas门店开户时间\"\n",
"' textField_lifbrlcr ': data_details[ \"系统版本名称:E.L/E.S\" ][i], # \"系统版本名称:E.L/E.S\"\n",
"' textField_lifbrlcx ': data_details[ \"SaaS版本名称\" ][i], # \"SaaS版本名称\"\n",
"' textField_lifbrlcy ': data_details[ \"saas客户类型\" ][i], # \"saas客户类型\"\n",
"' employeeField_lifbrld2 ': data_details[ \"区域经理\" ][i], # \"区域经理\"\n",
"' textField_lifbrld0 ': data_details[ \"城市\" ][i], # \"城市\"\n",
"新建第 99 条数据! {'result': ['FINST-DK866Z9100GB9HXC7DODT43NSWNL27CIOFLILWO', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2PKIOFLIL0P', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2FTIOFLIL4P', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2Y0JOFLIL8P', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2Y8JOFLILCP', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2RGJOFLILGP', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2WOJOFLILKP', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2TWJOFLILOP', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2B4KOFLILSP', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2TBKOFLILWP', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2EJKOFLIL0Q', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL2ORKOFLIL4Q', 'FINST-DK866Z9100GB9HXC7DODT43NSWNL27ZKOFLIL8Q']}\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",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-4)\n",
"yes_time_new = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr1 = yes_time_new.strftime('%Y%m%d')\n",
"yes_time_nyr2 = yes_time.strftime('%Y%m%d')# 获取前7天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_dataservice_saas_org_health_warning\" WHERE \"pt\" = '{yes_time_nyr2}' or \"pt\" = '{yes_time_nyr1}';\"\"\"\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",
"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\" : \"false\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"false\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"false\",\n",
" \"userId\" : \"2268275546837446\",\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",
"\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",
"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-CP766081P0BBRV2AEB645ATM0KO62IHOWBFIL1\"\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",
"'''读取 运营负责人-区域客服 '''\n",
"FORMID = \"FORM-YZ9664D1DM8BX1PV7MUGU9ZOBQ3I36PI8DFILB\" # 运营负责人-区域客服 FORM-YZ9664D1DM8BX1PV7MUGU9ZOBQ3I36PI8DFILB\n",
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//10 + 1\n",
"ALL_DATA_service = {}\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_service[data['formData']['textField_lifdgt27']]=data['formData']['textField_lifdgt26']\n",
" \n",
"'''批量删除数据'''\n",
"# for i in range(0,10):\n",
"# default = True\n",
"# while default:\n",
"# FORMID = \"FORM-CP766081P0BBRV2AEB645ATM0KO62IHOWBFIL1\" \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",
"'''遍历数据进行新建'''\n",
"data_details = data_details.astype('string')\n",
"data_details = data_details.fillna('',inplace=False)\n",
"for a in range(0,len(data_details[\"pt\"]),100):\n",
" ALL_formData = []\n",
" for i in range(a,a+100): # for i in range(len(data_NGV[\"date_fmt\"])):\n",
" try:\n",
" date_obj1 = datetime.datetime.strptime(data_details[\"init_day\"][i], \"%Y%m%d\").strftime(\"%Y-%m-%d\")\n",
" date_obj2 = datetime.datetime.strptime(data_details[\"push_day\"][i], \"%Y%m%d\").strftime(\"%Y-%m-%d\")\n",
" formData = {\n",
" 'textField_l8ceppnl':data_details[\"health_warning_info\"][i],#\"活跃健康状态变化\"\n",
" 'dateField_l9dy6f8g':int(time.mktime(time.strptime(date_obj1, \"%Y-%m-%d\"))*1000) if data_details[\"init_day\"][i] !='' else '',#\"初始日\"\n",
" 'dateField_l9dy6f8h':int(time.mktime(time.strptime(date_obj2, \"%Y-%m-%d\"))*1000) if data_details[\"push_day\"][i] !='' else '',#\"推进日\"\n",
" 'textField_l8ceppo5':data_details[\"group_name\"][i],#\"公司名称\"\n",
" 'textField_lief8uqx':data_details[\"org_type\"][i],#\"门店类型\"\n",
" 'textField_lief8ur1':data_details[\"saas_edition_fmt\"][i],#\"SaaS版本名称\"\n",
" 'textField_lief8ur2':data_details[\"saas_customer_type\"][i],#\"saas客户类型\"\n",
" 'textField_l8ceppo9':data_details[\"group_grade\"][i],#\"公司等级\"\n",
" 'textField_lief8uqy':data_details[\"org_stage\"][i],#\"门店阶段\"\n",
" 'textField_lief8ur0':data_details[\"saas_version_fmt\"][i],#\"系统版本名称:E.L/E.S\"\n",
" 'dateField_lief8uqz':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门店开户时间\"\n",
" 'textField_l8ceppo4':data_details[\"org_code\"][i],#\"门店编码\"\n",
" 'textField_l8ceppo6':data_details[\"org_name\"][i],#\"门店名称\"\n",
" 'textField_l8ceppo7':data_details[\"contacts\"][i],#\"联系人\"\n",
" 'textField_l8ceppo8':data_details[\"contact_mobile\"][i],#\"联系方式\"\n",
" 'textField_l8ceppoi':data_details[\"region_name\"][i],#\"大区\"\n",
" 'textField_l8ceppoj':data_details[\"province_name\"][i],#\"省\"\n",
" # 'employeeField_l8cepppu':ALL_DATA_staff[data_details[\"service_impl_principal\"][i]],#\"运营负责人\"\n",
" 'textField_lief8ur3':data_details[\"area_manager\"][i],#\"区域经理\"\n",
" 'textField_lief8ur4':data_details[\"city_name\"][i],#\"城市\"\n",
" # 'employeeField_l8ceppp4':ALL_DATA_staff[ALL_DATA_service[data_details[\"service_impl_principal\"][i]]],#\"跟进人\"\n",
" # 'employeeField_lbfwxou1':ALL_DATA_staff[ALL_DATA_service[data_details[\"service_impl_principal\"][i]]],#\"区域客服\"\n",
" }\n",
" try:\n",
" formData['employeeField_l8cepppu'] = ALL_DATA_staff[data_details[\"service_impl_principal\"][i]]\n",
" formData['employeeField_l8ceppp4'] = ALL_DATA_staff[ALL_DATA_service[data_details[\"service_impl_principal\"][i]]]\n",
" formData['employeeField_lbfwxou1'] = ALL_DATA_staff[ALL_DATA_service[data_details[\"service_impl_principal\"][i]]]\n",
" except:\n",
" formData['employeeField_l8cepppu'] = \"\"\n",
" formData['employeeField_l8ceppp4'] = \"\"\n",
" formData['employeeField_lbfwxou1'] = \"\"\n",
"\n",
" ALL_formData.append(json.dumps(formData, cls=NpEncoder)) \n",
" except:\n",
" pass\n",
" FORMID = \"FORM-33666CB1XDU37AU57RKPK990C79S2YMOEEC8LS\" \n",
" res_new = Batch_creation(FORMID,TOKEN,ALL_formData)\n",
" print(\"新建第\",i,\"条数据!\",res_new)\n",
" time.sleep(10)\n",
"\n",
"# '''校验是否新建正常'''\n",
"# time.sleep(30)\n",
"# FORMID = \"FORM-CP766081P0BBRV2AEB645ATM0KO62IHOWBFIL1\" \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 = \"[表单]异常服务跟进待办2023 新建条数不正确!\"\n",
"# res_yujing = start_instance_process(TOKEN,name)\n",
"# except:\n",
"# pass"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'data': [{'rank': 1,\n",
" 'appItem': {'icon': 'https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png',\n",
" 'name': '考勤打卡'},\n",
" 'pv': '433',\n",
" 'uv': '324'},\n",
" {'rank': 2,\n",
" 'appItem': {'icon': 'https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png',\n",
" 'name': '智能人事'},\n",
" 'pv': '354',\n",
" 'uv': '350'},\n",
" {'rank': 3,\n",
" 'appItem': {'icon': 'https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png',\n",
" 'name': '日志'},\n",
" 'pv': '322',\n",
" 'uv': '189'}],\n",
" 'meta': [{'aliasName': '排名', 'alias': 'rank', 'dataType': 'STRING'},\n",
" {'aliasName': '应用', 'alias': 'appItem', 'dataType': 'MICROAPP'},\n",
" {'aliasName': '点击次数', 'alias': 'pv', 'dataType': 'STRING'},\n",
" {'aliasName': '点击人数', 'alias': 'uv', 'dataType': 'STRING'}]}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"{\n",
" \"data\": [\n",
" {\n",
" \"rank\": 1,\n",
" \"appItem\": {\n",
" \"icon\": \"https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png\",\n",
" \"name\": \"考勤打卡\"\n",
" },\n",
" \"pv\": \"433\",\n",
" \"uv\": \"324\",\n",
" },\n",
" {\n",
" \"rank\": 2,\n",
" \"appItem\": {\n",
" \"icon\": \"https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png\",\n",
" \"name\": \"智能人事\"\n",
" },\n",
" \"pv\": \"354\",\n",
" \"uv\": \"350\",\n",
" },\n",
" {\n",
" \"rank\": 3,\n",
" \"appItem\": {\n",
" \"icon\": \"https://static.dingtalk.com/media/lALPDeC2uGvNwy3NArzNArw_700_700.png\",\n",
" \"name\": \"日志\"\n",
" },\n",
" \"pv\": \"322\",\n",
" \"uv\": \"189\",\n",
" }\n",
" ],\n",
" \"meta\": [\n",
" {\n",
" \"aliasName\": \"排名\",\n",
" \"alias\": \"rank\",\n",
" \"dataType\": \"STRING\"\n",
" },\n",
" {\n",
" \"aliasName\": \"应用\",\n",
" \"alias\": \"appItem\",\n",
" \"dataType\": \"MICROAPP\"\n",
" },\n",
" {\n",
" \"aliasName\": \"点击次数\",\n",
" \"alias\": \"pv\",\n",
" \"dataType\": \"STRING\"\n",
" },\n",
" {\n",
" \"aliasName\": \"点击人数\",\n",
" \"alias\": \"uv\",\n",
" \"dataType\": \"STRING\"\n",
" }\n",
" ]\n",
"}"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
+1
View File
@@ -0,0 +1 @@
[{"domain": ".f6yc.com", "expiry": 1745026715, "httpOnly": false, "name": "sensorsdata2015jssdkcross", "path": "/", "sameSite": "Lax", "secure": false, "value": "%7B%22distinct_id%22%3A%2218e3fc2cfb1573-0870412de10397-26001b51-1327104-18e3fc2cfb2b42%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218e3fc2cfb1573-0870412de10397-26001b51-1327104-18e3fc2cfb2b42%22%7D"}, {"domain": ".f6yc.com", "expiry": 1710518399, "httpOnly": false, "name": "sajssdk_2015_cross_new_user", "path": "/", "sameSite": "Lax", "secure": false, "value": "1"}, {"domain": "print.f6yc.com", "httpOnly": false, "name": "print-serverSESSIONID", "path": "/print-server", "sameSite": "Lax", "secure": false, "value": "6o-J91-4uUmy9r1nC6m-TvqHRtOk-1VgJV7y90je"}]
@@ -0,0 +1,748 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"' tableField_ljcfpjg4 ': data[ \"【导入】申请优惠券明细\" ][i],# \"【导入】申请优惠券明细\"\n",
"' tableField_ljibuzgq ': data[ \"【check】申请优惠券明细\" ][i],# \"【check】申请优惠券明细\"\n",
"' textField_ljcfpjgd ': data[ \"发券结果\" ][i],# \"发券结果\"\n",
"开始处理发券!\n",
"读取到 [[流程]自动化优惠券(+多年)表中 152 条数据!\n",
"CHS202108060134956 13577991101 {'result': ['FINST-PTA66DA120ANSFLMF8C069PZVGN63ELEWMAZLHH8']}\n",
"CHS202208110186407 15894498555 {'result': ['FINST-3RB66I91Q8BNHUE19SH5XC3QOID131KGWMAZLEA1']}\n",
"CHS202008160104161 13888058615 {'result': ['FINST-G0A66Z81X6ANA4J7F4OZF68QOHSM2OFIWMAZLHD8']}\n",
"CHS202201140148849 13095343326 {'result': ['FINST-EPB66191RZ9NKSOSFMSFNDQHC1SO3OBKWMAZLHQH']}\n",
"CHS202307200237693 18787262310 {'result': ['FINST-DOC66I91N7BNUIGI7P3YM60AX2NZ2U6MWMAZLQSD']}\n",
"CHS202108210138519 15125606365 {'result': ['FINST-GFA66U91L0ANYA1PA8J5QCZ995QD2S2OWMAZLUH7']}\n",
"CHS202304230226238 15687189309 {'result': ['FINST-N98665810Z9ND2YN6P6VJ42E76V839ZPWMAZLM49']}\n",
"CHS202108250138924 15096625841 {'result': ['FINST-5W966981FZBNIIBL7O06TAFV54Q62EYRWMAZLZZ']}\n",
"CHS202105270127195 18608753030 {'result': ['FINST-K7D66L910ZANR6FMEDNEXDB6VC263GTTWMAZLH45']}\n",
"CHS202208300187832 13378868887 {'result': ['FINST-9V7669A1VD9NP9XL6Z1P19A84A1S3COVWMAZLXEV']}\n",
"CHS201902280009312 18987298767 {'result': ['FINST-83D66TA11CBNCSEXCYB3NBQZZLPS32JXWMAZLO9C']}\n",
"CHS202211150191707 18287205610 {'result': ['FINST-ENC663810Z9N1FH2ECMF6868OLJA20EZWMAZL6Z6']}\n",
"CHS202308030239090 13577272535 {'result': ['FINST-9S966871B0ANGCLSA0HUL413WIXP3H91XMAZLQJJ']}\n",
"CHS202308080239543 13759020642 {'result': ['FINST-MX966DD1HE9NEVH971R3ABSEDZFU2G63XMAZL7WU']}\n",
"CHS202308250240999 13988878866 {'result': ['FINST-KL766581J7ANF8O3FQ5RA9CKGWWZ2A25XMAZLZCG']}\n",
"CHS201902280007000 15925128106 {'result': ['FINST-MBD66F9150CNR9RKE99YR4YENZ0L3AX6XMAZL5O']}\n",
"CHS201906030030064 18608753030 {'result': ['FINST-9CC66GD1PH9NT19FAM51JCSOTXEE2GK9XMAZL33L']}\n",
"CHS201912070044730 13529282875 {'result': ['FINST-LTC66R81PY9NK10Q86ORCD9A63AJ3QIBXMAZLOGA']}\n",
"CHS202207120184270 13759105925 {'result': ['FINST-MT566TB1RZ9NZXZGETNYN4W3DMM33FFDXMAZLCR7']}\n",
"CHS202308110239896 13700661283 {'result': ['FINST-6JA66W91EXBNLM79BOYSYC3YXNXQ3FAFXMAZLA52']}\n",
"CHS202308110239915 14769361898 {'result': ['FINST-LTC66R81YZ9NNBZF8K5JD8GAVIJE3H6HXMAZLNZM']}\n",
"CHS202108100137208 13658776660 {'result': ['FINST-DC666GC1K7AN2R9GAF53H9Q1PWM13K1JXMAZLZJ5']}\n",
"CHS201909240038589 13759409759 {'result': ['FINST-H7D667C108ANDYDZDNXL47W9MOCA30YKXMAZLD8F']}\n",
"CHS202004130066222 18687845850 {'result': ['FINST-W9D66Q612AAN4H4RB1RGO7PXHH1D29TMXMAZLVGE']}\n",
"CHS202308220240771 13708438038 {'result': ['FINST-5U866VA1WABNJGEMC7G2JAEQEB932JPOXMAZLCX1']}\n",
"CHS202108060134958 18213188288 {'result': ['FINST-9BB66681FY9NT6FZ5MN245VGRGE23ONQXMAZL8FA']}\n",
"CHS201908310036569 13700658352 {'result': ['FINST-9BB66681GG9NPHCG9GPG1C5KBM3Q28JSXMAZL2FJ']}\n",
"CHS202003210057221 13608852511 {'result': ['FINST-J8966HD1OZ9NDJIR63OCZ5Q5S49P2WJUXMAZLBQO']}\n",
"CHS202208030185802 18786196199 {'result': ['FINST-I5D66NB1OBANQS8472SJYC6RZY4L3EFWXMAZLBCD']}\n",
"CHS202208040185823 18286944574 {'result': ['FINST-TCC66771VY9NPLSUA4G2B7UD79GG2DEYXMAZL939']}\n",
"CHS202308070239389 15185005373 {'result': ['FINST-SNB667B15CBNUDXTBU85ND71EWQT33A0YMAZLLA']}\n",
"CHS202008100103255 18216690259 {'result': ['FINST-ENC66381XXANS81D8KF6P9SHB3IC3362YMAZLHGH']}\n",
"CHS202108100135470 17385904666 {'result': ['FINST-TM966BD1HZBNT66690SQE6Z788P53V14YMAZLBN']}\n",
"CHS202110090142521 18084298828 {'result': ['FINST-VBD66H81UG9N4YKN8Y0UGABSYYTB2DY5YMAZLI38']}\n"
]
}
],
"source": [
"# 基础信息\n",
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import re\n",
"import sys\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"from datetime import date, timedelta\n",
"import datetime\n",
"from io import BytesIO\n",
"\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_processes_instances(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",
"\n",
"def queryLastSaasInfo(cellPhone):\n",
" \"\"\" 函数功能:手机号查询最近一次购买saas明细 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/order/queryLastSaasInfo?cellPhone=' + cellPhone\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def get_approval_records(token: str, processInstanceId: str):\n",
" \"\"\" 函数功能:获取流程表单的审批记录 \"\"\"\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",
"\n",
"\n",
"def aggree_approval(token: str, taskId: str, processInstanceId: str,res_new,formDataJson):\n",
" \"\"\" 函数功能:同意审批节点 \"\"\"\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(formDataJson),\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",
"\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 queryCompanies(cellPhone):\n",
" \"\"\" 函数功能:自动发券查询手机号所处公司 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/account/query?cellPhone=' + cellPhone\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"def queryDetailByOrgId(orgId):\n",
" \"\"\" 函数功能:自动发券查询门店上次成交价 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/org/queryDetailByOrgId?orgId=' + orgId\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\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",
"\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\" : \"false\",\n",
" \"formUuid\" : FORMID,\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"asynchronousExecution\" : \"false\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"keepRunningAfterException\" : \"true\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"formDataJsonList\" : ALL_formData,\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 queryskuList():\n",
" \"\"\" 函数功能:按照商品分类查询商品列表接口 \"\"\"\n",
"\n",
" api = 'http://manage.f6yc.com/hive-admin/yida/sku/category/query?category=4'\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def couponAvailableQuery(cellPhone,groupId,skuList,passportId):\n",
" \"\"\" 函数功能:在当前选择场景下查询手机号可以使用的优惠券 http://manage.f6yc.com/hive-admin/ \"\"\"\n",
"\n",
" api = f'http://manage.f6yc.com/hive-admin/yida/coupon/available/query?passportId={passportId}&cellPhone={cellPhone}&groupId={groupId}&skuList' + str(skuList)\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def queryPriceInfoBySkuId(orgId,skuId,saasUpdate):\n",
" \"\"\" 函数功能:商品价格查询\"\"\"\n",
"\n",
" api = f'http://manage.f6yc.com/hive-admin/yida/sku/queryPriceInfoBySkuId?orgId={orgId}&skuId={skuId}&saasUpdate={saasUpdate}'\n",
"\n",
" headers = {\n",
" \"token\":\"af88h9KvLQrdvVhFhS8zD1yWx9cu\"\n",
" }\n",
"\n",
" res = requests.post(api,headers=headers)\n",
" return res.json()\n",
"\n",
"def read_instances_new(token, formUuid, page, n,CREATE_FROM, CREATE_TO):\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_RTPWHV37ENXPQUZHTL25\",\n",
" \"systemToken\": \"IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6\",\n",
" \"userId\": \"yida_pub_account\", # 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formUuid\": formUuid,\n",
" \"createFromTimeGMT\":CREATE_FROM,\n",
" \"createToTimeGMT\":CREATE_TO\n",
" # \"searchFieldJson\": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储\n",
" # \"instanceStatus\": \"RUNNING\"\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"def updateFormDataJson (token, formUuid, updateFormDataJson):\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_RTPWHV37ENXPQUZHTL25\",\n",
" \"systemToken\": \"IA766O61SHFZT6UB0WNOB58GI5RW2K58KCU1LL6\",\n",
" \"userId\": \"yida_pub_account\", # 超级管理员账号\n",
" \"language\": \"zh_CN\",\n",
" \"formInstanceId\": formUuid,\n",
" \"updateFormDataJson\":updateFormDataJson\n",
" }\n",
"\n",
" res = requests.put(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"from datetime import datetime\n",
"import time\n",
"def get_time_range_minute(n):\n",
" \"\"\" 获取近n分钟的时间戳(单位是毫秒)\"\"\"\n",
"\n",
" def delay_time(time_str, years=0, months=0, days=0, hours=0, minutes=0, seconds=0):\n",
" if type(time_str) == str:\n",
" time_str = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')\n",
" ret = time_str + relativedelta(years=years, months=months, days=days, hours=hours, minutes=minutes, seconds=seconds)\n",
" return ret\n",
"\n",
" # 获得当前时间\n",
" now_time = datetime.now()\n",
" endTime = int(time.mktime(time.strptime(now_time.strftime('%Y/%m/%d %H:%M:%S'), '%Y/%m/%d %H:%M:%S'))) * 1000 - 1000\n",
" # n小时前的时间\n",
" ret2 = delay_time(now_time, minutes=-n)\n",
" startTime = int(time.mktime(time.strptime(ret2.strftime('%Y/%m/%d %H:%M:%S'), '%Y/%m/%d %H:%M:%S'))) * 1000\n",
"\n",
" # print(f'时间区间:[{startTime}-{endTime}]')\n",
" return startTime, endTime\n",
"\n",
"def timeStamp(timeNum):\n",
" \"\"\" 函数功能:将时间戳(毫秒) 转化为时间日期格式\"\"\"\n",
" timeStamp = float(timeNum/1000)\n",
" timeArray = time.localtime(timeStamp)\n",
" otherStyleTime = time.strftime(\"%Y-%m-%d %H:%M:%S\", timeArray)\n",
" return otherStyleTime\n",
"# 4320分钟时间间隔\n",
"CREATE_FROM, CREATE_TO = [timeStamp(t) for t in get_time_range_minute(4320)]\n",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
" \n",
"'''获取表内控件信息 '''\n",
"TOKEN = generateToken()\n",
"FORMID_NEW = \"FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9\"\n",
"component_list = component(FORMID_NEW,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[\",name_value,\"][i],#\",name_value)\n",
"\n",
"\"\"\" 处理流程开始 \"\"\"\n",
"FORMID = \"FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9\" # 【测试版本】批量自动发券\n",
"# 读取续约流程表单\n",
"form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for v in range(0,len(form_data.get('data'))):\n",
" \n",
" # 获取当前所处节点\n",
" res_new = get_approval_records(token=TOKEN, processInstanceId=form_data['data'][v]['processInstanceId'])\n",
" records_new = res_new.get('result')\n",
" # 获取审批节点的 taskId\n",
" records_new = [item for item in records_new if item.get('type') == \"TODO\"]\n",
" taskId_new = records_new[0]['activityId']\n",
" taskId = records_new[0]['taskId']\n",
" if taskId_new==\"sid-6470221a-82ec-4bdd-a873-245ee47a5605\": # check\n",
" print(\"开始处理!\")\n",
" # 读取NGV明细\n",
" import psycopg2\n",
" import pandas as pd\n",
" # 获得连接\n",
" conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
" # 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
" cursor = conn.cursor()\n",
" import datetime\n",
" now_time = datetime.datetime.now()\n",
" yes_time = now_time + datetime.timedelta(days=-1)\n",
" yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
" # sql语句 建表\n",
" sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
" # 执行语句\n",
" cursor.execute(sql)\n",
" # 获取结果集的每一行\n",
" rows = cursor.fetchall()\n",
" # 获取所有字段名\n",
" all_fields = cursor.description\n",
" #执行结果转化为dataframe\n",
" col = []\n",
" for i in all_fields:\n",
" col.append(i[0])\n",
" data_NGV = pd.DataFrame(list(rows),columns=col)\n",
" # 关闭数据库连接\n",
" cursor.close()\n",
" conn.close()\n",
" \n",
" '''读取商品和券信息'''\n",
" FORMID_TWO = \"FORM-6L966171O3RB70TJDB75R6RBI31V2NNACKCJLF1\" # 商品ID券ID关系表\n",
" all_skuId = {}\n",
" all_couponTemplateId = {}\n",
" textField_ljwon3vt = {}\n",
" textField_ljxv26ip = {}\n",
" list_new = 0\n",
" tableField_data_new = {}\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=1, n=100)\n",
" PAGES_TWO = form_data_TWO.get('totalCount')//100 + 1\n",
" for a in range(1, PAGES_TWO+1):\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=a, n=100)\n",
" for data_TWO in form_data_TWO.get('data'):\n",
" all_skuId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_nt0h72h']\n",
" all_couponTemplateId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_47og525']\n",
" textField_ljwon3vt[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljwon3vt']\n",
" textField_ljxv26ip[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljxv26ip']\n",
" \"\"\" 开始分别读取数据并填充数据进行创建 \"\"\"\n",
" for data in form_data['data'][v]['data']['tableField_ljcfpjg4']:\n",
" # 基础字段预设\n",
" data_new = {}\n",
" data_new['textField_ljibuzgd'] = \"\"\n",
" data_new['textField_ljibuzge'] = \"\"\n",
" try:\n",
" # 获取门店编码对应的信息\n",
" result = data_NGV[data_NGV['org_code'] == data['textField_ljcfpjg6']]\n",
" result = result.reset_index()\n",
" # 获取手机号+判断手机号是否在公司名下\n",
" # 获取手机号+判断手机号是否在公司名下\n",
" if data[\"textField_ljcfpjg8\"] ==\"\": # 手机号未填写,默认填充ngv中对应的手机号\n",
" data_new['textField_ljibuzgl'] = result['contact_mobile'][0]\n",
" else:\n",
" data_new['textField_ljibuzgl'] = data[\"textField_ljcfpjg8\"]\n",
" cellPhone_group_name = queryCompanies(data_new['textField_ljibuzgl'])\n",
" groupName_all = {}\n",
" for data_two in cellPhone_group_name['data']['groupList']:\n",
" groupName_all[data_two[\"groupName\"]]=data_two[\"groupId\"]\n",
" try:\n",
" if len(cellPhone_group_name['data']['groupList']) > 0:\n",
" pass\n",
" else:\n",
" data_new['textField_ljibuzgl'] = data[\"textField_ljcfpjg8\"] \n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"F6中不存在该手机号;\"\n",
" except:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"F6中不存在该手机号;\"\n",
" \n",
" if result['group_name'][0] not in groupName_all:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"联系电话与门店编码关系错误;\"\n",
" # # 本次成交年限(1、2、3 selectField_ljicmdwn\n",
" # if data[\"selectField_ljicmdwn\"] ==\"1\" or data[\"selectField_ljicmdwn\"] ==\"2\" or data[\"selectField_ljicmdwn\"] ==\"3\":\n",
" # data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"本次成交年限填写错误,请填写【1、2、3】;\"\n",
" # 获取公司名称+门店名称+门店版本+到期日+门店编码\n",
" data_new['textField_ljibuzgm'] = result['group_name'][0]\n",
" data_new['textField_ljibuzgh'] = result['org_name'][0]\n",
" data_new['textField_ljibuzgi'] = result['saas_edition_fmt'][0]\n",
" data_new['textField_ljibuzgf'] = result['expiry_time'][0]\n",
" data_new['textField_ljibuzgn'] = result['org_code'][0]\n",
" # 获取上次成交价 textField_ljibuzgg\n",
" OrgId_list = queryDetailByOrgId(result['id_own_org'][0])\n",
" data_new['textField_ljibuzgg'] = OrgId_list['data']['lastSaasOrderPrice']/OrgId_list['data']['lastTransactionYear']\n",
" # 获取提前续约立减额 textField_ljibuzgj\n",
" try:\n",
" queryPriceInfoBySkuIdnew = queryPriceInfoBySkuId(result['id_own_org'][0],all_skuId[result['saas_edition_fmt'][0] + \"1\"],\"false\")\n",
" data_new['textField_ljibuzgj'] = queryPriceInfoBySkuIdnew['data']['renewalDiscountAmount']\n",
" except:\n",
" data_new['textField_ljibuzgj'] = \"0\"\n",
" # 版本续约金额\n",
" data_new['textField_lk6g6e2l'] = textField_ljwon3vt[result['saas_edition_fmt'][0] + \"1\"] # 版本续约金额\n",
" # 申请优惠券金额 numberField_ljwn6n7w_value 判断优惠券申请金额是否填写,如果没有填写则进行填充\n",
" # 本次成交价 numberField_ljwn6n7w_value 判断本次成交价是否填写,如果没有填写则进行填充 \n",
" if data[\"numberField_ljwn6n7w_value\"] != \"\":\n",
" data_new['textField_ljibuzgk'] = data[\"numberField_ljwn6n7w_value\"]\n",
" if int(data[\"numberField_ljwn6n7w_value\"]) <= 0:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] + \"本次成交价需要大于0,或者为空;\"\n",
" elif data[\"numberField_ljwn6n7w_value\"] == \"\": # 判断本次成交价是否填写,如果没有填写则进行填充 默认取 上次成交价\n",
" data_new['textField_ljibuzgk'] = data_new['textField_ljibuzgg']\n",
" else:\n",
" data_new['textField_ljibuzgk'] =data[\"numberField_ljwn6n7w_value\"]\n",
" \n",
" # 获取申请优惠券金额 textField_ljibuzgp 申请优惠券金额= 版本价格-提前立减额-本次成交价\n",
" data_new['textField_ljibuzgp'] = int(data_new['textField_lk6g6e2l']) - int(data_new['textField_ljibuzgj']) - int(data_new['textField_ljibuzgk'])\n",
"\n",
" # # 获取本次成交价格 textField_ljibuzgk\n",
" # if data[\"numberField_ljwn6n7w_value\"] ==\"\":\n",
" # data_new['textField_ljibuzgk'] = int(textField_ljwon3vt[result['saas_edition_fmt'][0] + \"1\"]) - int(data_new['textField_ljibuzgp'])- int(data_new['textField_ljibuzgj'])\n",
" # else:\n",
" # data_new['textField_ljibuzgk'] = int(textField_ljwon3vt[result['saas_edition_fmt'][0] + \"1\"]) - int(data_new['textField_ljibuzgp']) - int(data_new['textField_ljibuzgj'])\n",
" # 获取已有优惠券\n",
" passportId=int(cellPhone_group_name['data']['passportId'])\n",
" cellPhone=int(data_new['textField_ljibuzgl'])\n",
" groupId = int(result['id_own_group'][0])\n",
" skuList = queryskuList()\n",
" # 过滤 仅入参对应版本的\n",
" filtered_data = [item for item in skuList[\"data\"] if item['saasEditionName'] == result['saas_edition_fmt'][0]]\n",
" filtered_data_skuList={'code': 200,\n",
" 'data': filtered_data,\n",
" 'message': 'SUCCESS'}\n",
" couponAvailableQuery_list = couponAvailableQuery(cellPhone,groupId,filtered_data_skuList,passportId)\n",
" for data_ONE in couponAvailableQuery_list['data']:\n",
" data_new['textField_ljibuzge'] = data_new['textField_ljibuzge'] + data_ONE ['couponName'] + \"\"+ str(data_ONE ['couponValue']) +\"\"\n",
" if \"优惠券\" in data_ONE ['couponName']:\n",
" data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] +\"存在未使用的优惠券;\"\n",
" \n",
" # 是否低于限价 radioField_ljxz9ho5 是否发券 radioField_ljibuzgc 版本限价 textField_lk6hj6sw\n",
" data_new['textField_lk6hj6sw'] = textField_ljxv26ip[result['saas_edition_fmt'][0] + \"1\"]\n",
" if int(data_new['textField_ljibuzgk']) < int(textField_ljxv26ip[result['saas_edition_fmt'][0] + \"1\"]):\n",
" data_new['radioField_ljxz9ho5'] = \"是\"\n",
" # data_new['radioField_ljibuzgc'] = \"否\"\n",
" else:\n",
" data_new['radioField_ljxz9ho5'] = \"否\"\n",
" # 是否的低于上次成交价 radioField_ljxz9ho6 是否发券 radioField_ljibuzgc\n",
" if int(data_new['textField_ljibuzgk']) < int(data_new['textField_ljibuzgg']):\n",
" data_new['radioField_ljxz9ho6'] = \"是\"\n",
" # data_new['radioField_ljibuzgc'] = \"否\"\n",
" else:\n",
" data_new['radioField_ljxz9ho6'] = \"否\"\n",
" # if int(data_new['textField_ljibuzgj']) > 0:\n",
" # data_new['textField_ljibuzgd'] = \"存在提前续约立减额,不是30天内过期客户!\"\n",
" # if int(data_new['textField_ljibuzgp']) <= 0:\n",
" # data_new['textField_ljibuzgd'] = \"申请优惠金额需要大于0元!\"\n",
" # # 集合 textField_ljy172na\n",
" # data_new['textField_ljy172na'] = str({\n",
" # \"cellPhone\":data_new[\"textField_ljibuzgl\"], # 收劵人手机号码\n",
" # \"dingDingId\":form_data['data'][v]['originator']['userId'], # 申请人钉钉ID\n",
" # \"stage\":2, # 所属阶段(新签:1,续约:2\n",
" # \"couponApplyType\":1, # 优惠券申请类型;新签:saas优惠劵申请:1,短信优惠劵申请:2,人工服务优惠劵申请:3;续约:saas续约优惠劵申请:1,saas升级优惠劵申请:2,短信优惠劵申请:3,人工服务优惠劵申请:4(暂不支持)\n",
" # \"detailList\":[{ # 发劵明细列表\n",
" # \"couponTemplateId\":all_couponTemplateId[result['saas_edition_fmt'][0] + \"1\"], # 劵模板ID\n",
" # \"couponAmount\":int(data_new[\"textField_ljibuzgp\"]), # 劵金额,>0\n",
" # \"grantGroup\":1, # 1:发送到公司+人,0:发送到人\n",
" # \"groupId\":result['id_own_group'][0], # 发放公司ID,发在公司下=true是有值\n",
" # \"skuId\":all_skuId[result['saas_edition_fmt'][0] + \"1\"], # 商品id \n",
" # \"orgId\":result['id_own_org'][0], # 门店ID,(申请续约劵并且降级时必填)\n",
" # \"demotion\":0, # 降级(是:1,否:0\n",
" # \"demotionSaaSEdition\":0 # 降级版本,门店降级时必填\n",
" # }]\n",
" # })\n",
" # data_new['textField_ljy172na'] = data_new['textField_ljy172na'].replace(\"'\", '\"')\n",
"\n",
" # data_new['textField_ljy172na'] = data_new['textField_ljy172na'].replace(\" \", \"\")\n",
" except:\n",
" data_new['textField_ljibuzgd'] = \"数据读取异常:\" + data_new['textField_ljibuzgd']\n",
" # CHECK结果校验 textField_ljibuzgd\n",
" if data_new['textField_ljibuzgd'] == \"\":\n",
" data_new['textField_ljibuzgd'] = \"正确\"\n",
" list_new = list_new + 1\n",
" # 回传结果\n",
" if list_new == 1:\n",
" tableField_data_new['tableField_ljibuzgq'] = [data_new]\n",
" else:\n",
" tableField_data_new['tableField_ljibuzgq'].append(data_new)\n",
" res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new =\"2268275546837446\",formDataJson=tableField_data_new)\n",
" print(form_data['data'][v]['processInstanceId'],res.json())\n",
" time.sleep(2)\n",
" elif taskId_new==\"sid-23822834-234a-b12a-dfea-a6ad1acc8c1b\": # API自动发券\n",
" print(\"开始处理发券!\")\n",
" # 读取NGV明细\n",
" import psycopg2\n",
" import pandas as pd\n",
" # 获得连接\n",
" conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
" # 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
" cursor = conn.cursor()\n",
" import datetime\n",
" now_time = datetime.datetime.now()\n",
" yes_time = now_time + datetime.timedelta(days=-1)\n",
" yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
" # sql语句 建表\n",
" sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}';\"\"\"\n",
" # 执行语句\n",
" cursor.execute(sql)\n",
" # 获取结果集的每一行\n",
" rows = cursor.fetchall()\n",
" # 获取所有字段名\n",
" all_fields = cursor.description\n",
" #执行结果转化为dataframe\n",
" col = []\n",
" for i in all_fields:\n",
" col.append(i[0])\n",
" data_NGV = pd.DataFrame(list(rows),columns=col)\n",
" # 关闭数据库连接\n",
" cursor.close()\n",
" conn.close()\n",
" '''读取商品和券信息'''\n",
" FORMID_TWO = \"FORM-6L966171O3RB70TJDB75R6RBI31V2NNACKCJLF1\" # 商品ID券ID关系表\n",
" all_skuId = {}\n",
" all_couponTemplateId = {}\n",
" textField_ljwon3vt = {}\n",
" textField_ljxv26ip = {}\n",
" list_new = 0\n",
" succeed_all = 0\n",
" all_all= 0\n",
" tableField_data_new = {}\n",
" data_new = {}\n",
" data_check = {}\n",
" formDataJson_check = {}\n",
" code_new = \"\"\n",
" formDataJson_check['textField_ljcfpjgd'] = \"\"\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=1, n=100)\n",
" PAGES_TWO = form_data_TWO.get('totalCount')//100 + 1\n",
" for a in range(1, PAGES_TWO+1):\n",
" form_data_TWO = read_instances(token=TOKEN, formUuid=FORMID_TWO, page=a, n=100)\n",
" for data_TWO in form_data_TWO.get('data'):\n",
" all_skuId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_nt0h72h']\n",
" all_couponTemplateId[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_47og525']\n",
" textField_ljwon3vt[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljwon3vt']\n",
" textField_ljxv26ip[data_TWO['formData']['textField_vmqmrm1'] + data_TWO['formData']['textField_cfm11ut']] = data_TWO['formData']['textField_ljxv26ip']\n",
" FORMID = \"FORM-XHA66881FHMAR0F07GT4Y59GGA972DD6B5OHLB\" # [流程]自动化优惠券(+多年)\n",
" # 读取[流程]自动化优惠券(+多年)\n",
" form_data_new = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,CREATE_FROM=CREATE_FROM, CREATE_TO=CREATE_TO)\n",
" PAGES = form_data_new.get('totalCount')//100 + 1\n",
" ALL_DATA_code = []\n",
" \"\"\" 获取全量数据 \"\"\"\n",
" for i in range(1, PAGES+1):\n",
" form_data_new = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,CREATE_FROM=CREATE_FROM, CREATE_TO=CREATE_TO)\n",
" for data_one in form_data_new.get('data'):\n",
" try:\n",
" for j in range(0,len(data_one['data']['tableField_l1w05znp'])):\n",
" ALL_DATA_code.append(str(data_one['data']['tableField_l1w05znp'][j]['selectField_l1wxjd8l']) + \"+\" + str(data_one['data']['tableField_l1w05znp'][j]['textField_l5j0ym23']))\n",
" except:\n",
" pass\n",
" print(f'读取到 [[流程]自动化优惠券(+多年)表中 {len(ALL_DATA_code)} 条数据!')\n",
" for data in form_data['data'][v]['data']['tableField_ljibuzgq']: # -----------------------------------------------\n",
" updateFormDataJson_check = {}\n",
" # 获取门店编码对应的信息\n",
" result = data_NGV[data_NGV['org_code'] == data['textField_ljibuzgn']]\n",
" result = result.reset_index()\n",
" # 读取[流程]自动化优惠券(+多年)中存在该门店发券流程,避免重复发券\n",
" if str(data['textField_ljibuzgn']) + \"+\" + str(all_couponTemplateId[result['saas_edition_fmt'][0] + \"1\"]) in ALL_DATA_code:\n",
" # updateFormDataJson_check['textField_ljibuzgd'] = data['textField_ljibuzgd'] + \"[流程]自动化优惠券(+多年)中存在该门店发券流程!;\"\n",
" # updateFormDataJson_check['radioField_ljxz9ho5'] = \"否\"\n",
" # FORMID = \"FORM-0A966I81N40CV1B48U18UBZAA8R92STJC7IJL9\" # 【测试版本】批量自动发券\n",
" # res=updateFormDataJson(TOKEN, FORMID, updateFormDataJson_check)\n",
" # print(res.json)\n",
" code_new = code_new + data[\"textField_ljibuzgl\"] + \"\"\n",
" else:\n",
" # res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new =\"2268275546837446\",formDataJson=tableField_data_new)\n",
" # print(form_data['data'][v]['processInstanceId'],res.json())\n",
" # for data_ONE in couponAvailableQuery_list['data']:\n",
" # if \"续约优惠券\" in data_ONE ['couponName']:\n",
" # data_new['textField_ljibuzgd'] = data_new['textField_ljibuzgd'] +\"存在未使用的续约优惠券;\"\n",
" # data_new['textField_ljibuzge'] = data_new['textField_ljibuzge'] + data_ONE ['couponName'] + \"\"+ str(data_ONE ['couponValue']) +\"\"\n",
" # check_all = check_all + 1\n",
" \n",
" data_new['textField_ljy172na'] = str({\n",
" \"cellPhone\":data[\"textField_ljibuzgl\"], # 收劵人手机号码\n",
" \"dingDingId\":form_data['data'][v]['originator']['userId'], # 申请人钉钉ID\n",
" \"stage\":2, # 所属阶段(新签:1,续约:2\n",
" \"couponApplyType\":1, # 优惠券申请类型;新签:saas优惠劵申请:1,短信优惠劵申请:2,人工服务优惠劵申请:3;续约:saas续约优惠劵申请:1,saas升级优惠劵申请:2,短信优惠劵申请:3,人工服务优惠劵申请:4(暂不支持)\n",
" \"detailList\":[{ # 发劵明细列表\n",
" \"couponTemplateId\":all_couponTemplateId[result['saas_edition_fmt'][0] + \"1\"], # 劵模板ID\n",
" \"couponAmount\":int(float(data[\"textField_ljibuzgp\"])), # 劵金额,>0\n",
" \"grantGroup\":1, # 1:发送到公司+人,0:发送到人\n",
" \"groupId\":result['id_own_group'][0], # 发放公司ID,发在公司下=true是有值\n",
" \"skuId\":all_skuId[result['saas_edition_fmt'][0] + \"1\"], # 商品id \n",
" \"orgId\":result['id_own_org'][0], # 门店ID,(申请续约劵并且降级时必填)\n",
" \"demotion\":0, # 降级(是:1,否:0\n",
" \"demotionSaaSEdition\":0 # 降级版本,门店降级时必填\n",
" }]\n",
" })\n",
" data_list = {\n",
" 'textField_ljchgz1f':data['textField_ljibuzgn'], # 门店编码\n",
" 'textField_ljchgz1i':data_new['textField_ljy172na'], # 数据集\n",
" 'textField_ljchgz1h':data['textField_ljibuzgd'], # check结果\n",
" 'textField_ljy1x9kb':form_data['data'][v]['processInstanceId'], # 关联表单id\n",
" 'textField_ljf6nf7s':data['radioField_ljibuzgc'] # 是否发券\n",
" }\n",
" ALL_formData = []\n",
" ALL_formData.append(json.dumps(data_list, cls=NpEncoder)) \n",
" FORMID_NEW = \"FORM-JD8668C1MFBC3ND4BWO736T7G5Q7318IC0YJLA\" # 【测试版本】自动触发明细表\n",
" res = Batch_creation(FORMID_NEW,TOKEN,ALL_formData)\n",
" print(data['textField_ljibuzgn'],data[\"textField_ljibuzgl\"],res)\n",
" time.sleep(2)\n",
" all_all = all_all + 1\n",
" if data['textField_ljibuzgd'] == \"正确\" and data['radioField_ljibuzgc'] == \"是\":\n",
" succeed_all = succeed_all + 1\n",
" fail_all = all_all - succeed_all\n",
" if len(code_new)>0:\n",
" txt_all = f\"发送成功:{succeed_all}条;发送失败:{fail_all}条;{code_new}在[流程]自动化优惠券(+多年)中有申请记录!\"\n",
" else:\n",
" txt_all = f\"发送成功:{succeed_all}条;发送失败:{fail_all}条;\"\n",
" formDataJson_check = {\n",
" 'textField_ljcfpjgd':txt_all\n",
" }\n",
" res=aggree_approval(token=TOKEN, taskId=taskId, processInstanceId=form_data['data'][v]['processInstanceId'],res_new =\"2268275546837446\",formDataJson=formDataJson_check)\n",
" print(form_data['data'][v]['processInstanceId'],res.json())\n",
" time.sleep(2)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,414 @@
# 基础函数配置
import pandas as pd
import requests
from pathlib import Path
from urllib.parse import quote
import json
import numpy as np
import time
from datetime import date, timedelta
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 transcation(token,FORMID,data_new):
""" 函数功能:更新表单内容 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId" : "2268275546837446", # 曹伟 id
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : FORMID,
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder),
}
res = requests.put(api, headers=headers, json=payload)
return res.json()
def aggree_approval(token: str, taskId: str, processInstanceId: str, formData: dict,res_new):
""" 函数功能:同意审批节点 --F6客户服务 应用 """
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(formData, cls=NpEncoder),
"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_new(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 get_approval_records(token: str, processInstanceId: str):
""" 函数功能:获取流程表单的审批记录 --F6客户服务 应用 """
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 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_instances_pt(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_processes(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 instances_id(TOKEN,id):
""" 函数功能:查询表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/{id}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.get(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 component_id(id,TOKEN):
api = f'https://api.dingtalk.com/v1.0/yida/processes/instancesInfos/{id}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.get(api, headers=headers)
return res.json()
def find_indexes(daichuli_mendian_name,i_two):
indexes = [i for i, x in enumerate(daichuli_mendian_name) if x == i_two]
return indexes
def get_staffID(TOKEN: str,ALL_DATA_staff,staff_name):
res_new = [v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== staff_name]
# print('通过员工名称获取员工id')
return res_new
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 delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"asynchronousExecution" : "true",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
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}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
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" : "false",
"userId" : "2268275546837446",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
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)
# -*- coding: utf-8 -*-
import psycopg2
import pandas as pd
TOKEN = generateToken()
'''读取员工对应关系:宜搭员工-ID对应表 '''
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[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']
import datetime
now_time = datetime.datetime.now()
yes_time = now_time + datetime.timedelta(days=-2)
yes_time_nyr = yes_time.strftime('%Y-%m-%d')# 获取日期
import binascii
import time
import random
from pyDes import des, CBC, PAD_PKCS5
import requests
def des_encrypt(s):
"""
DES 加密
:param s: 原始字符串
:return: 加密后字符串16进制
"""
secret_key = 'HwdMBW8o'
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s, padmode=PAD_PKCS5)
return binascii.b2a_base64(en, newline=False)
t = time.time()
ts = int(round(t * 1000))
randint = random.randint(100000000, 999999999)
# req = "1|2000|"+ "2020-01-01" + "|" + yes_time_nyr + "_" + str(ts) + "_" + str(randint)
req = f"1|20|{yes_time_nyr}|{yes_time_nyr}" + "_" + str(ts) + "_" + str(randint)
str_en = des_encrypt(req)
req_new = str_en.decode('utf-8')
url = f"http://manage.f6yc.com/hive-admin/py/yida/renewal/coupons/fetch"
data = {
'req':req_new,
't':ts,
'r':randint
}
res = requests.post(url,data=data)
merged_df = res.json()
pang = int(merged_df["data"]['total']/20) + 1
for a in range(1,pang):
t = time.time()
ts = int(round(t * 1000))
randint = random.randint(100000000, 999999999)
req = f"{a}|20|{yes_time_nyr}|{yes_time_nyr}" + "_" + str(ts) + "_" + str(randint)
str_en = des_encrypt(req)
req_new = str_en.decode('utf-8')
url = f"http://manage.f6yc.com/hive-admin/py/yida/renewal/coupons/fetch"
data = {
'req':req_new,
't':ts,
'r':randint
}
res = requests.post(url,data=data)
merged_df = res.json()
# 遍历数据进行新建
for i in range(0,len(merged_df["data"]['list'])):
if merged_df["data"]['list'][i]["takeSourceCode"] == "yidaApproveAutoGrantCoupon":
ALL_formData = []
formData = {
'textField_llungzvc':merged_df["data"]['list'][i]['couponName'],#"券名称"
'numberField_llungzvf':merged_df["data"]['list'][i]['couponValue'],#"券金额"
'dateField_llxgj2t0':merged_df["data"]['list'][i]['validityBegin'],#"券有效期"
'dateField_llxgj2t1':merged_df["data"]['list'][i]['validityEnd'],#"券有效期"
'dateField_llungzvi':merged_df["data"]['list'][i]['takeTime'],#"发券时间"
'textField_llym1q8j':merged_df["data"]['list'][i]['createBy'],#"发券人id"
'textField_llym1q8k':merged_df["data"]['list'][i]['createName'],#"发券人姓名"
'textField_llungzvj':merged_df["data"]['list'][i]['customerGroupName'],#"领券人公司"
'textField_llungzvk':merged_df["data"]['list'][i]['cellPhone'],#"领券人手机号"
'textField_llungzvl':merged_df["data"]['list'][i]['conditionValue'],#"使用门槛"
'textField_llungzvm':str(merged_df["data"]['list'][i]['spuList']),#"适用商品"
'textField_llungzvn':"宜搭审批自动发劵",#"券来源"
}
try:
formData['employeeField_llungzvp'] = ALL_DATA_staff[merged_df["data"]['list'][i]['couponValue']]#"技术专家"
except:
formData['employeeField_llungzvp'] = ""
try:
formData['employeeField_llungzvh'] = ALL_DATA_staff[merged_df["data"]['list'][i]['createName']]#"发券人"
except:
formData['employeeField_llungzvh'] = "0627252740652855"
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
FORMID = "FORM-A8666NA1BDNDLTRV6ASGDD4J2YMW3FHOGNULLE"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print(res_new)
time.sleep(1)
@@ -0,0 +1,186 @@
import pandas as pd
import numpy as np
import requests
import json
import time
import re
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pathlib import Path
from urllib.parse import quote
from io import BytesIO
ROOT = Path('.').absolute() # 当前工作目录
# 生成 token,参数不需要修改
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 instances(TOKEN,formInstanceId,data_new) -> str:
""" 函数功能:更新表单内容 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"appType" : "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken" : "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId" : "2268275546837446", # 曹伟 id
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : formInstanceId,
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder),
}
res = requests.put(api, headers=headers, json=payload)
return res.json()
def read_form_instances(token,formUuid,createFromTimeGMT,createToTimeGMT,page=1,n = 100,searchField={}):
""" 函数功能:读取普通表单的所有数据 """
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/search'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
'currentPage':page,
'pageSize':n,
"appType": "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
"createFromTimeGMT":createFromTimeGMT,
"createToTimeGMT":createToTimeGMT,
"searchFieldJson":json.dumps(searchField)
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def read_form_instancesV2(token,formUuid,page=1,n = 100,searchField={}):
""" 函数功能:读取普通表单的所有数据 """
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/search'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
'currentPage':page,
'pageSize':n,
"appType": "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
"searchFieldJson":json.dumps(searchField)
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def timeStamp(timeNum):
""" 函数功能:将时间戳(毫秒) 转化为时间日期格式"""
timeStamp = float(timeNum/1000)
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return otherStyleTime
def get_time_range_hour(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, hours=-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 remove_duplicates(data):
new_data = {}
for key, value in data.items():
if value not in new_data.values():
new_data[key] = value
return new_data
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 = 'FORM-JD8668C1CAC7X39ND7GNN4O8D2UA3L21P3ODL22' # 普通表单
stting = {
'材料数据':['材料名称','品牌','零件号','规格型号','库存数量','采购均价','计量单位'],
'材料销售历史数据':['源单号','材料名称','数量','金额','材料备注'],
'储值卡数据':['卡名称','持卡人手机号','绑定车牌号','卡号','剩余面额','剩余实额','卡有效期'],
'单据历史数据':['工单号','车牌号','里程','金额','开单时间','工单备注'],
'供应商信息数据':['供应商名称','联系人','手机','联系电话'],
'客户车辆信息':['客户姓名','车牌号','手机号码','VIN码'],
'套餐卡数据':['卡名称','持卡人姓名','持卡人手机号','绑定车牌号','卡号','卡有效期','内容名称','剩余次数','单次面额','单次实额','卡说明'],
'项目施工历史数据':['源单号','项目名称','工时数','工时费'],
'项目信息数据':['项目名称','所需工时1','工时单价1']
}
""" 24小时读取一遍数据 """
# 获取全量公有
form_data = read_form_instancesV2(token=TOKEN, formUuid=FORMID, page=1, n=100,searchField={'selectField_ldo3qxal': '公有'})
PAGES = form_data.get('totalCount')//100 + 1
ALL_DATA_staff = {}
""" 获取全量数据 """
for i in range(1, PAGES+1):
form_data = read_form_instancesV2(token=TOKEN, formUuid=FORMID, page=i, n=100,searchField={'selectField_ldo3qxal': '公有'})
for data in form_data.get('data'):
ALL_DATA_staff[data['formData']['textField_ldo3qxao'] + data['formData']['textField_ldo3qxap']]=data['formInstanceId']
# 获取前一天私有
TIME_RANGE = {'24小时内':[timeStamp(t) for t in get_time_range_hour(24)]} # 当前时刻向前推1个小时
data_siyou = read_form_instances(token=TOKEN,formUuid=FORMID,page=1,n=100,createFromTimeGMT=[*TIME_RANGE['24小时内']][0],createToTimeGMT=[*TIME_RANGE['24小时内']][1],searchField={'selectField_ldo3qxal': '私有'})
ALL_DATA_staff_V2 = {}
for i in range(0,len(data_siyou['data'])):
if set(stting[data_siyou['data'][i]['formData']['textField_ldo3qxao']]).issubset(set(json.loads(data_siyou['data'][i]['formData']['textField_ldo3qxaq']))):
ALL_DATA_staff_V2[data_siyou['data'][i]['formInstanceId']]=data_siyou['data'][i]['formData']['textField_ldo3qxao']+data_siyou['data'][i]['formData']['textField_ldo3qxap']
ALL_DATA_staff_V3 = remove_duplicates(ALL_DATA_staff_V2)
for id in ALL_DATA_staff_V3:
data_new = {
'selectField_ldo3qxal':'公有',
'textField_ldo3qxan':'区域公用'
}
res = instances(TOKEN,id,data_new)
print(res,id)
time.sleep(0.5)
+271
View File
@@ -0,0 +1,271 @@
# -*- 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=-2)
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)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# -*- 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_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_new = pd.DataFrame(list(rows),columns=col)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
# 使用isin方法筛选出A表中id_own_org字段不在B表中的行
c_data = data_NGV_new[~data_NGV_new['id_own_org'].isin(data_NGV['id_own_org'])]
# 输出C表内容
c_data = c_data.reset_index()
# 基础函数配置
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_FE5IWP670JPRC5ZA6HK0",
"systemToken" : "HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92",
"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_FE5IWP670JPRC5ZA6HK0",
"systemToken" : "HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92",
"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_FE5IWP670JPRC5ZA6HK0",
"formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92",
"language" : "zh_CN",
"userId" : "yida_pub_account"
}
res = requests.post(api, headers=headers, json=payload)
print(res.json())
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_FE5IWP670JPRC5ZA6HK0",
# "formDataJson" : json.dumps(formData, cls=NpEncoder),
"systemToken" : "HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92",
# "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" : "true",
"formUuid" : FORMID,
"appType" : "APP_FE5IWP670JPRC5ZA6HK0",
"asynchronousExecution" : "true",
"systemToken" : "HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92",
"keepRunningAfterException" : "true",
"userId" : "yida_pub_account",
"formDataJsonList" : json.dumps(ALL_formData, cls=NpEncoder),
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):
""" 批量删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"formUuid" : FORMID,
"appType" : "APP_FE5IWP670JPRC5ZA6HK0",
"asynchronousExecution" : "true",
"systemToken" : "HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92",
"formInstanceIdList" : json.dumps(ALL_DATA_instance, cls=NpEncoder),
"userId" : "yida_pub_account",
"executeExpression" : "false" # 不触发
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def delete_in(TOKEN,formInstanceIdList):
""" 逐条删除表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_FE5IWP670JPRC5ZA6HK0&systemToken=HP666C71ZLASJ0MPWC5ZOUA4AGDP17QU7TPRK92&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.delete(api, headers=headers)
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)
TOKEN = generateToken()
'''遍历数据进行新建'''
c_data = c_data.astype('string')
c_data = c_data.fillna('',inplace=False)
for a in range(0,len(c_data["date_fmt"]),100):
ALL_formData = []
for i in range(a,a+100): # for i in range(len(c_data["date_fmt"])):
try:
formData = {
'textField_kwcwsccn': c_data["group_name"][i], # 公司名称
'textField_kwcwsccj': c_data["org_name"][i], # 门店名称
'textField_kwcwscci': c_data["org_code"][i], # 门店编码
'textField_kwcwsccm': c_data["group_grade"][i], # 公司等级
'textField_kwcwy3tw': c_data["saas_use_year"][i], # 使用时间
'textField_kwcwscck': c_data["org_size"][i], # 门店规模
'textField_kwcwy3tx': c_data["org_stage"][i], # 门店阶段
'textField_kwcwsccl': c_data["saas_customer_type"][i] # 门店分层
}
ALL_formData.append(json.dumps(formData, cls=NpEncoder))
except:
pass
FORMID = "FORM-NC966W8174MVWULSY88ZN2WHTF6J3JTWRWCWK2"
res_new = Batch_creation(FORMID,TOKEN,ALL_formData)
print("新建第",i,"条数据!",res_new)
@@ -0,0 +1,971 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"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",
"def read_form_instances_v2(token, formInstanceId):\n",
" \"\"\" 函数功能:调用本接口通过表单实例ID查询表单数据。 -- 应用:F6客户服务 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/{formInstanceId}?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",
" return res.json()\n",
"def timeStamp(timeNum):\n",
" \"\"\" 函数功能:将时间戳(毫秒) 转化为时间日期格式\"\"\"\n",
" timeStamp = float(timeNum/1000)\n",
" timeArray = time.localtime(timeStamp)\n",
" otherStyleTime = time.strftime(\"%Y-%m-%d %H:%M:%S\", timeArray)\n",
" return otherStyleTime\n",
"\n",
"def read_form_instances(token, formUuid, page=1, n=100, searchField={},createFromTimeGMT='',createToTimeGMT=''):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 -- 应用:F6客户服务 \"\"\"\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",
" 'currentPage': page,\n",
" 'pageSize': n,\n",
" \"appType\": \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\": \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\": \"yida_pub_account\",\n",
" \"language\": \"zh_CN\",\n",
" \"formUuid\": formUuid,\n",
" 'createFromTimeGMT':createFromTimeGMT,\n",
" 'createToTimeGMT':createToTimeGMT,\n",
" \"searchFieldJson\": json.dumps(searchField)\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\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": 65,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"时间戳: 2023-08-22 2023-08-21\n",
"时间戳: 2023-08-21 2023-08-20\n",
"时间戳: 2023-08-20 2023-08-19\n",
"时间戳: 2023-08-19 2023-08-18\n",
"时间戳: 2023-08-18 2023-08-17\n",
"时间戳: 2023-08-17 2023-08-16\n",
"时间戳: 2023-08-16 2023-08-15\n",
"时间戳: 2023-08-15 2023-08-14\n",
"时间戳: 2023-08-14 2023-08-13\n",
"时间戳: 2023-08-13 2023-08-12\n",
"时间戳: 2023-08-12 2023-08-11\n",
"时间戳: 2023-08-11 2023-08-10\n",
"时间戳: 2023-08-10 2023-08-09\n",
"时间戳: 2023-08-09 2023-08-08\n",
"时间戳: 2023-08-08 2023-08-07\n",
"时间戳: 2023-08-07 2023-08-06\n",
"时间戳: 2023-08-06 2023-08-05\n",
"时间戳: 2023-08-05 2023-08-04\n",
"时间戳: 2023-08-04 2023-08-03\n",
"时间戳: 2023-08-03 2023-08-02\n",
"时间戳: 2023-08-02 2023-08-01\n",
"时间戳: 2023-08-01 2023-07-31\n",
"时间戳: 2023-07-31 2023-07-30\n",
"时间戳: 2023-07-30 2023-07-29\n",
"时间戳: 2023-07-29 2023-07-28\n",
"时间戳: 2023-07-28 2023-07-27\n",
"时间戳: 2023-07-27 2023-07-26\n",
"时间戳: 2023-07-26 2023-07-25\n",
"时间戳: 2023-07-25 2023-07-24\n",
"时间戳: 2023-07-24 2023-07-23\n",
"时间戳: 2023-07-23 2023-07-22\n",
"表单数据共8878条!\n"
]
}
],
"source": [
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-0)\n",
"yes_time_nyr = yes_time.strftime('%Y/%m/%d %H:%M:%S')# 获取前一天日期\n",
"\n",
"# 指定日期和时间\n",
"date_str = yes_time_nyr\n",
"\n",
"# 将字符串转换为datetime对象\n",
"date_obj = datetime.datetime.strptime(date_str, '%Y/%m/%d %H:%M:%S')\n",
"\n",
"# 获取当前时间戳(单位为秒)\n",
"current_timestamp = int(date_obj.timestamp())\n",
"\n",
"data_new = []\n",
"FormDatas = []\n",
"\n",
"TOKEN = generateToken()\n",
"for i in range(0,31):\n",
" try:\n",
" a = 86400 * i\n",
" b = 86400 * (i + 1)\n",
" # 获取-1天的时间戳(单位为秒)\n",
" yesterday_timestamp_1 = current_timestamp - a\n",
"\n",
" # 获取-2天的时间戳(单位为秒)\n",
" yesterday_timestamp_2 = current_timestamp - b\n",
"\n",
" # 将时间戳转换为 datetime 对象\n",
" dt_1 = datetime.datetime.fromtimestamp(yesterday_timestamp_1)\n",
"\n",
" # 格式化日期字符串\n",
" date_str_1 = dt_1.strftime(\"%Y-%m-%d\")\n",
"\n",
" # 将时间戳转换为 datetime 对象\n",
" dt_2 = datetime.datetime.fromtimestamp(yesterday_timestamp_2)\n",
"\n",
" # 格式化日期字符串\n",
" date_str_2 = dt_2.strftime(\"%Y-%m-%d\")\n",
"\n",
" print(\"时间戳:\", date_str_1, date_str_2)\n",
"\n",
" res = read_form_instances(token=TOKEN, formUuid='FORM-GP666M71TNE9GFK57V2O85NLM04I34CSG1TFLC',createFromTimeGMT=date_str_2,createToTimeGMT=date_str_1)\n",
" totalCount = res.get('totalCount')\n",
" PAGES = totalCount//100 + 1\n",
" for page in range(1,PAGES+1):\n",
" res = read_form_instances(token=TOKEN, formUuid='FORM-GP666M71TNE9GFK57V2O85NLM04I34CSG1TFLC',page=page,n=100,createFromTimeGMT=date_str_2,createToTimeGMT=date_str_1)\n",
" FormDatas.extend(res.get('data'))\n",
" for v in range(0,len(res.get('data'))):\n",
" abc = res['data'][v]['formInstanceId']+\",\"+res['data'][v]['formData']['textField_dfvhslm']\n",
" data_new.append(abc)\n",
" except:\n",
" pass\n",
"\n",
"print(f\"表单数据共{len(data_new)}条!\") #耗时1分钟左右\n",
"# # 创建DataFrame对象\n",
"# df = pd.DataFrame({'ID': data_new})\n",
"# # 将DataFrame对象写入Excel文件中\n",
"# df.to_excel(r'C:\\Users\\admin\\Desktop\\data0821.xlsx', index=False)\n"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_sales_saas_commission_info_d\" WHERE \"org_type\" LIKE '%一般%' ;\"\"\"\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_F6 = pd.DataFrame(list(rows),columns=col)\n",
"# data_F6.to_excel(r'C:\\Users\\admin\\Desktop\\小六提成明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"data_F6 = data_F6.drop_duplicates(subset='org_code')\n",
"data_F6 = data_F6[data_F6['franchise_group_name'].notnull()]\n",
"data_F6 = data_F6.reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{} FINST-WD766Z61L2HDCWWZD0VS1D6BZW8R320INOILL88J {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-96766PB13IGD10D3FE2AKBQ5PAOC2Y1W79HLLANF {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLPH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL7H2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLFH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLZG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLLH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLQG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLRG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLQH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLRH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLNG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLHH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL9H2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLJG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLXG2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL6L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLFI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL8I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLJI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLDJ2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLUJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLNL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLHM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLAN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL6O2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLDG2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL7I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL9J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLPN2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLZN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL3I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLCI2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL4L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLUM2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLTM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL6J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLAJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLGL2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLTN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL4J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL2L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLLM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLSN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLSF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLRI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLAI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLYI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL5N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL4O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLEI2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL2J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL9L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLIM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLMM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL9O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLYH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL5I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLBI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL8L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLRL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLKN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLJM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLTE2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLUF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLLJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLLK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLFN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLNF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL3J2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLOM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLXM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL0M2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL2N2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL3F2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLKI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLIJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLJJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLIK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLQK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLXK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLTL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLRF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLJK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLFM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLWH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLPF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLQF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLTI2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL8J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLXJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLZL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL5M2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL7M2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLAM2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLQN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLXN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLIF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLHI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLLI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLMJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL6N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLAO2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL7G2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLWE2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL4I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLHJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLTK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLUL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL4M2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLCG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLZI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL5J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLQM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL3G2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLSI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLQJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLPL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLNN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLMF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLEG2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL1I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLOI2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLZK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL0O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLVM2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL8O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVE2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLYE2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL2F2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLXH2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLSK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL1M2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLJN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLHN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL3O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL0G2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL6G2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLTH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLVN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLWF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLOJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL3L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLYL2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLMI2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLSJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLZJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLEL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL1L2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL1J2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL1K2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLDL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL1N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLDF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLGI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLMK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLSM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLON2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLBJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLXI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLGN2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL7N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL9F2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLIG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLUK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLCL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLLN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL9G2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLKJ2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL3M2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLYN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL8N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLEN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLOF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLYF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLFJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL0N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLDN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLHL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLEF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLAG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLEM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLNM2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLZH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL2I2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLVL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVF2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL6I2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL7L2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLFF2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLDI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL2O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLWN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLPE2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLYJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLWK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLFL2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLKF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLPI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLYK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLOL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLPM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLBL2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL9M2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLML2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLXL2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLBO2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL5F2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLBF2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLZF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLGJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLNJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL6M2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLCM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL0L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLRN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLSL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLWM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLHG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLNI2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLPJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLKK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLGM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLYM2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL3N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLCF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLUH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLTJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLLL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL4N2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLIN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLMN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL5O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLSE2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLAF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL7J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLJL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL9N2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLUN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLNK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLRK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLXF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLCJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLWJ2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLRJ2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLIL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL8M2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLGF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL5G2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLJF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLVH2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLUI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL5L2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLAL2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL1O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLKL2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL7F2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLHF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL0J2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLFG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL9I2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLLF2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLPK2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLWI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL0K2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLRM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLCN2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLL7O2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLQI2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLDM2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLZM2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL8G2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLGG2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLII2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32IN0OBGLLCO2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLDK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL8K2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLBK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL2K2 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL4K2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL3K2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLHK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLFK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLL9K2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLAK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLGK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-KW866BB1VUGDES3KARKSC6SQWFB32HN0OBGLLCK2 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-SE766NA1U8FDT6O9B41I84SR9W893S1LCEELLMU6 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-8R766CD1MZEDLMLOFLVCMAW385QT3DJ9CEELLI0A {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-96766PB10YED1CV4AAAL99CRA4W63V69CEELL383 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-DK866Z9100FDWYXGDRI07AV0XOMW2GO8CEELLJMA {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLRIT1 {'textField_lld2doy7': '中威车饰'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLVET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL0FT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL8DT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLZET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL1FT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLLCT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLXET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLZAT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL5DT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLWET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLJCT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLYET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLKCT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLTET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL7DT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLXAT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLADT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLUET1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL3BT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL9DT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL1BT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL6DT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL0BT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL2BT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL3DT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLDCT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLQCT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL5GT1 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLL6BT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3PDV5CDLLODT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLHOS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL9NS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL1QS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLWZS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL6RS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL20T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLYYS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLXOS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLYOS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL2PS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLPQS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLOPS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLAKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLDQS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLWPS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLVRS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL1KS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLD7T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLA4T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL4PS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLEOS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL2NS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLD0T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL3RS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLMMS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLMYS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLNLS1 {'textField_lld2doy7': '领检精修连锁(加盟商)'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLMQS1 {'textField_lld2doy7': '领检精修连锁(加盟商)'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLO7T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLBVS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLOQS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLYKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLJNS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLSWS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLTZS1 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLHMS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL12T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLZ1T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLTXS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLV0T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLH5T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLAUS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLJ2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL64T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL8YS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLI2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLSTS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLV1T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL02T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLWRS1 {'textField_lld2doy7': '轮胎事业部鸳鸯计划'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLG5T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLTMS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLX8T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLE2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL8KS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL54T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLPNS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL4AT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLT8T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL9US1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL4VS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLS2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLU8T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLUTS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLCKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLJKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL28T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLY8T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLF2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLX0T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL8RS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL8US1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLH2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLW0T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL7RS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL4KS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLSMS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL8JS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLG2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL5VS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLT2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLW1T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLRTS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLRMS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLIKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL38T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL3AT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLUXS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLI5T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL6VS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLDYS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLBYS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLWXS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLHKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLONS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLCYS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLBKS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLAYS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL6JS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL5JS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL9JS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLZ8T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLXRS1 {'textField_lld2doy7': '轮胎事业部鸳鸯计划'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL9RS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLW8T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL9YS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLBQS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLL9QS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL18T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLR2T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL2AT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL44T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLNNS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLAQS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLY1T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLOTS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLFOS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLT6T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL79T1 {'textField_lld2doy7': '中威车饰'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLFSS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLFYS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL2VS1 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLHUS1 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLOVS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLA3T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLRQS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLZLS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLYLS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL1YS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLNRS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL56T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLFVS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLIZS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLJOS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLK7T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLX7T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLLAT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLV3T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLO4T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLO9T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLRAT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLVUS1 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLYUS1 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLNYS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLJJS1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLN7T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLA2T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLTJS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLXNS1 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLI9T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLINS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLQ3T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL95T1 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLV2T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLEAT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLP0T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLO2T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLWKS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLTAT1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL5AT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLW5T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL47T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLSAT1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLA1T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL45T1 {'textField_lld2doy7': 'CC养车'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLHJS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3NDV5CDLLIJS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLGWS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL5YS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL69T1 {'textField_lld2doy7': '中威车饰'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLK3T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLORS1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLK6T1 {'textField_lld2doy7': '零公里精英门店运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLLL6T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-F1666YC1FU7D40P76KT6J5JCPO8P3ODV5CDLL24T1 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-NGA66WA1GKEDOL3W58JCBDIH17NJ25PQXYCLLNK2 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-DK866Z91FIEDK96R6HRP2B504ZX83GE6WYCLL2I3 {'textField_lld2doy7': '金铁橡全国运营中心'}\n",
"{} FINST-96766PB1B59DWITX5MNU57XM5W9I32SQGJBLLJK71 {'textField_lld2doy7': '修工坊全国运营中心'}\n",
"{} FINST-BTA66F718T8DQH56A0VKF9H6I6HJ24U8GJBLL5QD {'textField_lld2doy7': '修工坊全国运营中心'}\n"
]
}
],
"source": [
"for i in range(0,len(data_new)):\n",
" result = data_new[i].split(\",\")\n",
" row_numbers = data_F6.index[data_F6['org_code'] == result[1]].tolist()\n",
" if len(row_numbers) > 0:\n",
" data= {\n",
" \"textField_lld2doy7\":data_F6.loc[row_numbers,\"franchise_group_name\"].values[0]\n",
" }\n",
" res = transcation(TOKEN,result[0],data)\n",
" print(res,result[0],data)"
]
}
],
"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
}
@@ -0,0 +1,362 @@
# 基础函数配置
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
from datetime import date, timedelta
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 transcation(token,FORMID,data_new):
""" 函数功能:更新表单内容 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId" : "2268275546837446", # 曹伟 id
"language" : "zh_CN",
"useLatestVersion" : "false",
"formInstanceId" : FORMID,
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder),
}
res = requests.put(api, headers=headers, json=payload)
return res.json()
def aggree_approval(token: str, taskId: str, processInstanceId: str, formData: dict,res_new):
""" 函数功能:同意审批节点 --F6客户服务 应用 """
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(formData, cls=NpEncoder),
"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_new(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 get_approval_records(token: str, processInstanceId: str):
""" 函数功能:获取流程表单的审批记录 --F6客户服务 应用 """
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 read_instances_pt(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_processes(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 instances_id(TOKEN,id):
""" 函数功能:查询表单实例 """
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/{id}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.get(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 component_id(id,TOKEN):
api = f'https://api.dingtalk.com/v1.0/yida/processes/instancesInfos/{id}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
res = requests.get(api, headers=headers)
return res.json()
def find_indexes(daichuli_mendian_name,i_two):
indexes = [i for i, x in enumerate(daichuli_mendian_name) if x == i_two]
return indexes
def get_staffID(TOKEN: str,ALL_DATA_staff,staff_name):
res_new = [v['formData']['textField_lfrw3u59'] for v in ALL_DATA_staff if v['formData']['textField_lfrw3u58']== staff_name]
# print('通过员工名称获取员工id')
return res_new
def read_form_instances_v2(token, formInstanceId):
""" 函数功能:调用本接口通过表单实例ID查询表单数据。 -- 应用:F6客户服务 """
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/{formInstanceId}?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
res = requests.get(api, headers=headers)
return res.json()
def timeStamp(timeNum):
""" 函数功能:将时间戳(毫秒) 转化为时间日期格式"""
timeStamp = float(timeNum/1000)
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return otherStyleTime
def read_form_instances(token, formUuid, page=1, n=100, searchField={},createFromTimeGMT='',createToTimeGMT=''):
""" 函数功能:读取普通表单的所有数据 -- 应用:F6客户服务 """
api = f'https://api.dingtalk.com/v1.0/yida/forms/instances/search'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
formData = {
'currentPage': page,
'pageSize': n,
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId": "yida_pub_account",
"language": "zh_CN",
"formUuid": formUuid,
'createFromTimeGMT':createFromTimeGMT,
'createToTimeGMT':createToTimeGMT,
"searchFieldJson": json.dumps(searchField)
}
res = requests.post(api, headers=headers, json=formData)
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)
import datetime
now_time = datetime.datetime.now()
yes_time = now_time + datetime.timedelta(days=-0)
yes_time_nyr = yes_time.strftime('%Y/%m/%d %H:%M:%S')# 获取前一天日期
# 指定日期和时间
date_str = yes_time_nyr
# 将字符串转换为datetime对象
date_obj = datetime.datetime.strptime(date_str, '%Y/%m/%d %H:%M:%S')
# 获取当前时间戳(单位为秒)
current_timestamp = int(date_obj.timestamp())
data_new = []
FormDatas = []
TOKEN = generateToken()
for i in range(0,31):
try:
a = 86400 * i
b = 86400 * (i + 1)
# 获取-1天的时间戳(单位为秒)
yesterday_timestamp_1 = current_timestamp - a
# 获取-2天的时间戳(单位为秒)
yesterday_timestamp_2 = current_timestamp - b
# 将时间戳转换为 datetime 对象
dt_1 = datetime.datetime.fromtimestamp(yesterday_timestamp_1)
# 格式化日期字符串
date_str_1 = dt_1.strftime("%Y-%m-%d")
# 将时间戳转换为 datetime 对象
dt_2 = datetime.datetime.fromtimestamp(yesterday_timestamp_2)
# 格式化日期字符串
date_str_2 = dt_2.strftime("%Y-%m-%d")
print("时间戳:", date_str_1, date_str_2)
res = read_form_instances(token=TOKEN, formUuid='FORM-GP666M71TNE9GFK57V2O85NLM04I34CSG1TFLC',createFromTimeGMT=date_str_2,createToTimeGMT=date_str_1)
totalCount = res.get('totalCount')
PAGES = totalCount//100 + 1
for page in range(1,PAGES+1):
res = read_form_instances(token=TOKEN, formUuid='FORM-GP666M71TNE9GFK57V2O85NLM04I34CSG1TFLC',page=page,n=100,createFromTimeGMT=date_str_2,createToTimeGMT=date_str_1)
FormDatas.extend(res.get('data'))
for v in range(0,len(res.get('data'))):
abc = res['data'][v]['formInstanceId']+","+res['data'][v]['formData']['textField_dfvhslm']
data_new.append(abc)
except:
pass
print(f"表单数据共{len(data_new)}条!") #耗时1分钟左右
# # 创建DataFrame对象
# df = pd.DataFrame({'ID': data_new})
# # 将DataFrame对象写入Excel文件中
# df.to_excel(r'C:\Users\admin\Desktop\data0821.xlsx', index=False)
# -*- 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 "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()
data_F6 = data_F6.drop_duplicates(subset='org_code')
data_F6 = data_F6[data_F6['franchise_group_name'].notnull()]
data_F6 = data_F6.reset_index()
for i in range(0,len(data_new)):
result = data_new[i].split(",")
row_numbers = data_F6.index[data_F6['org_code'] == result[1]].tolist()
if len(row_numbers) > 0:
data= {
"textField_lld2doy7":data_F6.loc[row_numbers,"franchise_group_name"].values[0]
}
res = transcation(TOKEN,result[0],data)
print(res,result[0],data)
@@ -0,0 +1,467 @@
import datetime
starttime = datetime.datetime.now()
import holidays
from datetime import date
# 创建一个中国节假日对象
cn_holidays = holidays.China()
# 获取当前日期
input_date = date.today()
switch = ""
# 判断日期是否为节假日
if input_date in cn_holidays:
switch = "节假日"
print(f"{input_date} 是节假日")
else:
switch = "非节假日"
print(f"{input_date} 不是节假日")
date_list = []
for data in cn_holidays:
date_list.append(str(data))
from datetime import date, timedelta
def get_saturdays(year):
start_date = date(year, 1, 1)
end_date = date(year, 12, 31)
saturdays = []
while start_date <= end_date:
if start_date.weekday() == 6: # 周日的weekday值为6
saturdays.append(start_date)
start_date += timedelta(days=1)
return saturdays
current_year = date.today().year
saturdays = get_saturdays(current_year)
print(saturdays)
for data in saturdays:
date_list.append(str(data))
date_list = list(set(date_list))
date_list = sorted(date_list, reverse=False)
# -*- 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_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_j = pd.DataFrame(list(rows),columns=col)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
import pandas as pd
import pandas as pd
import numpy as np
import requests
import json
import time
import re
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pathlib import Path
from urllib.parse import quote
from io import BytesIO
ROOT = Path('.').absolute() # 当前工作目录
textField_lrzoowld = "正常" # 运行状态
textField_lrzoowlb = "" # 信息说明
# 生成 token,参数不需要修改
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,formatted_today,formatted_today_two):
""" 函数功能:读取普通表单的所有数据 """
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,
"createFromTimeGMT" : formatted_today,
"createToTimeGMT" : formatted_today_two,
"currentPage" : page,
"pageSize" : n
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def initiate_process(TOKEN,formUuid,processCode,formData):
""" 发起宜搭审批流程 """
api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId" : "yida_pub_account",
"language" : "zh_CN",
"formUuid" : formUuid,
"formDataJson" : json.dumps(formData, cls=NpEncoder),
"processCode" : processCode,
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def read_instances_new(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_instances_ngv(token, formUuid, page, n,searchField):
""" 函数功能:读取普通表单的所有数据 """
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,
"searchFieldJson": json.dumps(searchField),
"currentPage" : page,
"pageSize" : n
}
res = requests.post(api, headers=headers, json=formData)
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)
TOKEN = generateToken()
import datetime
kaishiriqi = 173
kaishiriqi_1 = 172
date_one = 1
now_time = datetime.datetime.now()
# now_time = now_time + datetime.timedelta(days=+3)
if now_time.strftime("%Y-%m-%d") in date_list:
date_one = 0
print("开始次数:",date_one)
print("当前日期:",now_time)
for i in range(1,10):
new_date = now_time + datetime.timedelta(days=-i)
new_date = new_date.strftime("%Y-%m-%d")
print("遍历日期:",new_date)
if new_date in date_list:
date_one = date_one + 1
print("节假日期:",new_date)
else:
break
print("遍历次数:",date_one)
# now_time = datetime.datetime.now()
for i in range(0,date_one):
import datetime
now_time = now_time + datetime.timedelta(days=-i)
today = now_time + datetime.timedelta(days=-kaishiriqi) # 根据周日和法定节假日 输出每日需要筛选的日期范围
formatted_today = today.strftime("%Y-%m-%d")
today_two = now_time + datetime.timedelta(days=-kaishiriqi_1)
formatted_today_two = today_two.strftime("%Y-%m-%d")
print(formatted_today,formatted_today_two)
timestamp_ms = int(time.time() * 1000) # 当然日期时间戳 毫秒级
'''读取省市小六技术专家区域客服区域客成 '''
FORMID = "FORM-TP866D918DFCA4FW79YZU5X43FO32QZJQDZJL7" #省市小六技术专家区域客服区域客成
# 读取流程表单数据
form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
textField_gif29wy = {}
textField_3athky8 = {}
textField_3hgho1m = {}
textField_nc7gskc = {}
textField_qk1e5di = {}
textField_m3hchxc = {} # 市
""" 获取全量数据 """
for i in range(1, PAGES+1):
form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)
for data in form_data.get('data'):
textField_gif29wy[data['formData']['textField_3hgho1m']]=data['formData']['textField_gif29wy'] #区域客成id
textField_3athky8[data['formData']['textField_3hgho1m']]=data['formData']['textField_3athky8'] #区域客服id
textField_3hgho1m[data['formData']['textField_3hgho1m']]=data['formData']['textField_3hgho1m'] #小六id
textField_nc7gskc[data['formData']['textField_3hgho1m']]=data['formData']['textField_nc7gskc'] #技术专家id
textField_qk1e5di[data['formData']['textField_3hgho1m']]=data['formData']['textField_lntniove'] #区域经理id
textField_m3hchxc[data['formData']['textField_m3hchxc']]=data['formData']['textField_3hgho1m'] #小六id-市
print(f'读取到省市小六技术专家区域客服区域客成表单中 {len(textField_gif29wy)} 条数据!')
# [流程]新签服务流程 读取待处理数据
json_data = []
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", 1, 100,formatted_today,formatted_today_two)
PAGES = read_data.get('totalCount')//100 + 1
print(formatted_today,read_data.get('totalCount'))
for a in range(1,PAGES + 1):
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", a, 100,formatted_today,formatted_today_two)
for i in range(0,len(read_data["data"])):
json_data.append(read_data["data"][i]['formData'])
# [流程]新签服务流程 读取待处理数据
json_data_all = []
for i in range(0,1000,100):
now_time = datetime.datetime.now()
today = now_time + datetime.timedelta(days=-(i+100))
formatted_today = today.strftime("%Y-%m-%d")
today_two = now_time + datetime.timedelta(days=-i)
formatted_today_two = today_two.strftime("%Y-%m-%d")
timestamp_ms = int(time.time() * 1000) # 当然日期时间戳 毫秒级
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", 1, 100,formatted_today,formatted_today_two)
PAGES = read_data.get('totalCount')//100 + 1
print(formatted_today,formatted_today_two,read_data.get('totalCount'))
for a in range(1,PAGES + 1):
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", a, 100,formatted_today,formatted_today_two)
for i in range(0,len(read_data["data"])):
json_data_all.append(read_data["data"][i]['formData'])
df = pd.DataFrame(json_data_all)
# 将所有字段设置为字符串类型
df = df.astype(str)
data_NGV = data_NGV_j[['org_code', 'id_own_group']]
data_NGV = data_NGV.rename(columns={'org_code': 'orgCode'})
result = pd.merge(df, data_NGV, on='orgCode', how='left')
data_details_not_null = result.sort_values(by='openTime', ascending=True).drop_duplicates(subset='id_own_group')
# 重置索引
data_details_not_null = data_details_not_null.reset_index(drop=True)
data_details_all = data_details_not_null.copy() # 替换名称 v2
# 获取待回访人员信息+去重
name_list = []
for data in json_data:
name_list.append(data['employeeField_kyi1dqth_id'])
unique_arr = []
[unique_arr.append(x) for x in name_list if x not in unique_arr]
print(unique_arr)
# 每日工作计划
formUuid = "FORM-4V966N81OMEEH85QDP8XW4AH1AIZ2GKRLZTML21"
processCode = "TPROC--4V966N81OMEEH85QDP8XW4AH1AIZ21ORLZTML31"
# 遍历数据并进行创建
from datetime import datetime
for name in unique_arr:
tableField_lnsi0v71 = {}
tableField_lnsi0v71['dateField_lmelabb1'] = ""
tableField_lnsi0v71['employeeField_lmeqk429'] = ""
for data in json_data:
try:
if data['employeeField_kyi1dqth_id'] == name and data['orgCode'] in data_details_all['orgCode'].values:
# 过滤近7天有派发记录的数据
# 获取当前日期
today = datetime.now()
# 计算前7天的日期
seven_days_ago = today - timedelta(days=7)
# 过滤近7天有派发记录的数据
form_data_ces = read_instances_ngv(token=TOKEN, formUuid="FORM-KW766OD13WEEDPB6DSRTSD3IC2S131YMYKSML2", page=1, n=100, searchField={'textField_lmeqk42b': data["orgCode"]})
if form_data_ces['totalCount'] == 0:
date_string = today.strftime("%Y-%m-%dT%H:%MZ")
else:
date_string = form_data_ces['data'][0]['createdTimeGMT']
date_format = "%Y-%m-%dT%H:%MZ"
date_object = datetime.strptime(date_string, date_format)
if date_object > seven_days_ago:
print("近7天内有派发记录,不重复派发!",data["orgCode"])
else:
print(textField_m3hchxc[data['city']])
data_one = {} # 子表单
data_two = {} # 主表单
# 子表单
data_one['textField_lnsi0v72'] = data['orgName']
data_one['textField_lnsi0v6s'] = data["saasEdition"] # 销售版本
try:
data_one['employeeField_lnsi0v6u'] = textField_nc7gskc[name[0]] # 技术专家
data_one['employeeField_lnsi0v6v'] = textField_qk1e5di[name[0]] # 区域经理
if textField_3hgho1m[name[0]] =="":
data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data['city']] # 运营顾问
else:
data_one['employeeField_lnsi0v6w'] = textField_3hgho1m[name[0]] # 运营顾问
except:
data_one['employeeField_lnsi0v6u'] = data['technician_id'][0] # 技术专家
data_one['employeeField_lnsi0v6v'] = data['manager_id'][0] # 区域经理
data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data['city']] # 运营顾问
data_one['dateField_lnsi0v6x'] = str(timestamp_ms) # 计划日期
data_one['textField_lnsi0v6y'] = data["orgName"] # 门店名称-拷贝
data_one['textField_lnsi0v6z'] = data["orgCode"] # 门店编码
data_one['selectField_lnsi0v6q'] = "强化培训" # 拜访目的
# data_one['textField_lnsi0v70'] = data_result.loc[i,"id_own_group"] # 公司id
data_one['textareaField_lnsi0v6r'] = '''
新签180天后
1.客户日常使用问题解答
2.跟客户查看主营分析推荐进销存功能深度使用
3.跟客户查看车辆分析推荐短信及其他营销功能
4.说明转介绍政策索要转介绍''' # 拜访目的说明
# 加入数据
tableField_lnsi0v71['tableField_lnsi0v71'] = [data_one]
# 主表单
# data_two['dateField_lmelabb1'] = str(timestamp_ms)
# data_two['employeeField_lmeqk429'] = name
tableField_lnsi0v71['dateField_lmelabb1'] = str(timestamp_ms)
try:
if name[0] =="":
tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data['city']] # 运营顾问
else:
tableField_lnsi0v71['employeeField_lmeqk429'] = name[0]
tableField_lnsi0v71['employeeField_lmeqk423'] = textField_qk1e5di[name[0]] # 区域经理
tableField_lnsi0v71['employeeField_lmeqk424'] = textField_nc7gskc[name[0]] # 技术专家
except:
tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data['city']] # 运营顾问
tableField_lnsi0v71['employeeField_lmeqk423'] = data['manager_id'][0] # 区域经理
tableField_lnsi0v71['employeeField_lmeqk424'] = data['technician_id'][0] # 技术专家
tableField_lnsi0v71['textField_lmu0523h'] = "自动派发回访计划" # 状态备用
# 富文本 超链接 NGV
try:
form_data_ngv = read_instances_ngv(token=TOKEN, formUuid="FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91", page=1, n=100, searchField={'textField_zc1iowp': data["orgCode"]})
tableField_lnsi0v71['editorField_lodoplg0'] = ["root",{},["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},""]],["a",{"href":"https://f6car.aliwork.com/APP_UYZ0KG6L0CCNV80GZ66O/formDetail/FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91?formInstId="+form_data_ngv['data'][0]['formInstanceId']+"&isAdmin=true"},["span",{"data-type":"text"},["span",{"unlink":{},"data-type":"leaf"},"点击查看门店NGV"]]],["span",{"data-type":"text"},["span",{"unlink":{},"data-type":"leaf"},""]]]] # 富文本 超链接 NGV
except:
pass
res=initiate_process(TOKEN,formUuid,processCode,tableField_lnsi0v71)
print(res,tableField_lnsi0v71)
except Exception as e:
textField_lrzoowld = "异常" # 运行状态
textField_lrzoowlb = str(e) # 信息说明
try:
import requests
import json
import numpy as np
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 start_instance_process(token: str, send_data):
"""发送宜搭表单 -- 发起流程表单
Args:
token
data:需要发送的数据字典
"""
yida_api = "https://api.dingtalk.com/v1.0/yida/processes/instances/start"
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": token
}
payload = {
"appType": "APP_TNVBVZ3K8G56HG03Z45Q",
"systemToken": "CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1",
"userId": "yida_pub_account",# 超级管理员账号
"language": "zh_CN",
"formUuid": "FORM-96D58EF2219240C7B1F55F9CA463CD2D4MGC",
"formDataJson": json.dumps(send_data),
"processCode":"TPROC--5Q966D918T1I1AZM68NASC6TS13P3QOL3PZRLC"
}
res = requests.post(yida_api, headers=headers, json=payload)
return res
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()
import datetime
endtime = datetime.datetime.now()
implement = (endtime - starttime).seconds
send_data = {
"textField_ls01al4o": implement, #运行耗时
"textField_lrzoowl8": "huifang_xinqian_180", # 程序名称
"textField_lrzoowl9": "新签回访180天派发", # 功能简述
"textField_lrzoowld": textField_lrzoowld, # 运行状态
"textField_lrzoowlb": textField_lrzoowlb # 信息说明
}
res_yujing = start_instance_process(TOKEN,send_data)
except:
pass
+398
View File
@@ -0,0 +1,398 @@
import holidays
from datetime import date
# 创建一个中国节假日对象
cn_holidays = holidays.China()
# 获取当前日期
input_date = date.today()
switch = ""
# 判断日期是否为节假日
if input_date in cn_holidays:
switch = "节假日"
print(f"{input_date} 是节假日")
else:
switch = "非节假日"
print(f"{input_date} 不是节假日")
date_list = []
for data in cn_holidays:
date_list.append(str(data))
from datetime import date, timedelta
def get_saturdays(year):
start_date = date(year, 1, 1)
end_date = date(year, 12, 31)
saturdays = []
while start_date <= end_date:
if start_date.weekday() == 6: # 周日的weekday值为6
saturdays.append(start_date)
start_date += timedelta(days=1)
return saturdays
current_year = date.today().year
saturdays = get_saturdays(current_year)
print(saturdays)
for data in saturdays:
date_list.append(str(data))
date_list = list(set(date_list))
date_list = sorted(date_list, reverse=False)
# -*- 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_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_j = pd.DataFrame(list(rows),columns=col)
# data_NGV.to_excel(r'C:\Users\admin\Desktop\NGV明细.xlsx')
# 关闭数据库连接
cursor.close()
conn.close()
import pandas as pd
import pandas as pd
import numpy as np
import requests
import json
import time
import re
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pathlib import Path
from urllib.parse import quote
from io import BytesIO
ROOT = Path('.').absolute() # 当前工作目录
# 生成 token,参数不需要修改
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,formatted_today,formatted_today_two):
""" 函数功能:读取普通表单的所有数据 """
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,
"createFromTimeGMT" : formatted_today,
"createToTimeGMT" : formatted_today_two,
"currentPage" : page,
"pageSize" : n
}
res = requests.post(api, headers=headers, json=formData)
return res.json()
def initiate_process(TOKEN,formUuid,processCode,formData):
""" 发起宜搭审批流程 """
api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'
headers = {
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": TOKEN
}
payload = {
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
"userId" : "yida_pub_account",
"language" : "zh_CN",
"formUuid" : formUuid,
"formDataJson" : json.dumps(formData, cls=NpEncoder),
"processCode" : processCode,
}
res = requests.post(api, headers=headers, json=payload)
return res.json()
def read_instances_new(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_instances_ngv(token, formUuid, page, n,searchField):
""" 函数功能:读取普通表单的所有数据 """
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,
"searchFieldJson": json.dumps(searchField),
"currentPage" : page,
"pageSize" : n
}
res = requests.post(api, headers=headers, json=formData)
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)
TOKEN = generateToken()
import datetime
kaishiriqi = 173
kaishiriqi_1 = 172
date_one = 1
now_time = datetime.datetime.now()
# now_time = now_time + datetime.timedelta(days=+3)
if now_time.strftime("%Y-%m-%d") in date_list:
date_one = 0
print("开始次数:",date_one)
print("当前日期:",now_time)
for i in range(1,10):
new_date = now_time + datetime.timedelta(days=-i)
new_date = new_date.strftime("%Y-%m-%d")
print("遍历日期:",new_date)
if new_date in date_list:
date_one = date_one + 1
print("节假日期:",new_date)
else:
break
print("遍历次数:",date_one)
# now_time = datetime.datetime.now()
for i in range(0,date_one):
now_time = now_time + datetime.timedelta(days=-i)
today = now_time + datetime.timedelta(days=-kaishiriqi) # 根据周日和法定节假日 输出每日需要筛选的日期范围
formatted_today = today.strftime("%Y-%m-%d")
today_two = now_time + datetime.timedelta(days=-kaishiriqi_1)
formatted_today_two = today_two.strftime("%Y-%m-%d")
print(formatted_today,formatted_today_two)
timestamp_ms = int(time.time() * 1000) # 当然日期时间戳 毫秒级
'''读取省市小六技术专家区域客服区域客成 '''
FORMID = "FORM-TP866D918DFCA4FW79YZU5X43FO32QZJQDZJL7" #省市小六技术专家区域客服区域客成
# 读取流程表单数据
form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)
PAGES = form_data.get('totalCount')//100 + 1
textField_gif29wy = {}
textField_3athky8 = {}
textField_3hgho1m = {}
textField_nc7gskc = {}
textField_qk1e5di = {}
textField_m3hchxc = {} # 市
""" 获取全量数据 """
for i in range(1, PAGES+1):
form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)
for data in form_data.get('data'):
textField_gif29wy[data['formData']['textField_m3hchxc']]=data['formData']['textField_gif29wy'] #区域客成id
textField_3athky8[data['formData']['textField_3hgho1m']]=data['formData']['textField_3athky8'] #区域客服id
textField_3hgho1m[data['formData']['textField_3hgho1m']]=data['formData']['textField_3hgho1m'] #小六id
textField_nc7gskc[data['formData']['textField_3hgho1m']]=data['formData']['textField_nc7gskc'] #技术专家id
textField_qk1e5di[data['formData']['textField_3hgho1m']]=data['formData']['textField_lntniove'] #区域经理id
textField_m3hchxc[data['formData']['textField_m3hchxc']]=data['formData']['textField_3hgho1m'] #小六id-市
print(f'读取到省市小六技术专家区域客服区域客成表单中 {len(textField_gif29wy)} 条数据!')
# [流程]新签服务流程 读取待处理数据
json_data = []
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", 1, 100,formatted_today,formatted_today_two)
PAGES = read_data.get('totalCount')//100 + 1
print(formatted_today,read_data.get('totalCount'))
for a in range(1,PAGES + 1):
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", a, 100,formatted_today,formatted_today_two)
for i in range(0,len(read_data["data"])):
json_data.append(read_data["data"][i]['formData'])
# [流程]新签服务流程 读取待处理数据
json_data_all = []
for i in range(0,1000,100):
now_time = datetime.datetime.now()
today = now_time + datetime.timedelta(days=-(i+100))
formatted_today = today.strftime("%Y-%m-%d")
today_two = now_time + datetime.timedelta(days=-i)
formatted_today_two = today_two.strftime("%Y-%m-%d")
timestamp_ms = int(time.time() * 1000) # 当然日期时间戳 毫秒级
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", 1, 100,formatted_today,formatted_today_two)
PAGES = read_data.get('totalCount')//100 + 1
print(formatted_today,formatted_today_two,read_data.get('totalCount'))
for a in range(1,PAGES + 1):
read_data = read_instances(TOKEN, "FORM-9X766NA1SOATBRSH2K42D8BJCX7L326HI64TKG5", a, 100,formatted_today,formatted_today_two)
for i in range(0,len(read_data["data"])):
json_data_all.append(read_data["data"][i]['formData'])
df = pd.DataFrame(json_data_all)
# 将所有字段设置为字符串类型
df = df.astype(str)
data_NGV = data_NGV_j[['org_code', 'id_own_group']]
data_NGV = data_NGV.rename(columns={'org_code': 'orgCode'})
result = pd.merge(df, data_NGV, on='orgCode', how='left')
data_details_not_null = result.sort_values(by='openTime', ascending=True).drop_duplicates(subset='id_own_group')
# 重置索引
data_details_not_null = data_details_not_null.reset_index(drop=True)
data_details_all = data_details_not_null.copy() # 替换名称 v2
# 获取待回访人员信息+去重
name_list = []
for data in json_data:
name_list.append(data['employeeField_kyi1dqth_id'])
unique_arr = []
[unique_arr.append(x) for x in name_list if x not in unique_arr]
print(unique_arr)
# 每日工作计划
formUuid = "FORM-4V966N81OMEEH85QDP8XW4AH1AIZ2GKRLZTML21"
processCode = "TPROC--4V966N81OMEEH85QDP8XW4AH1AIZ21ORLZTML31"
# 遍历数据并进行创建
from datetime import datetime, timedelta
for name in unique_arr:
tableField_lnsi0v71 = {}
tableField_lnsi0v71['dateField_lmelabb1'] = ""
tableField_lnsi0v71['employeeField_lmeqk429'] = ""
for data in json_data:
if data['employeeField_kyi1dqth_id'] == name and data['orgCode'] in data_details_all['orgCode'].values:
# 过滤近7天有派发记录的数据
# 获取当前日期
today = datetime.now()
# 计算前7天的日期
seven_days_ago = today - timedelta(days=7)
# 计算前8天的日期
seven_days_8 = today - timedelta(days=8)
# 过滤近7天有派发记录的数据
form_data_ces = read_instances_ngv(token=TOKEN, formUuid="FORM-KW766OD13WEEDPB6DSRTSD3IC2S131YMYKSML2", page=1, n=100, searchField={'textField_lmeqk42b': data["orgCode"]})
if form_data_ces['totalCount'] == 0:
date_string = seven_days_8.strftime("%Y-%m-%dT%H:%MZ")
else:
date_string = form_data_ces['data'][0]['createdTimeGMT']
date_format = "%Y-%m-%dT%H:%MZ"
date_object = datetime.strptime(date_string, date_format)
if date_object > seven_days_ago:
print("近7天内有派发记录,不重复派发!",data["orgCode"])
else:
print(textField_m3hchxc[data['city']])
data_one = {} # 子表单
data_two = {} # 主表单
# 子表单
data_one['textField_lnsi0v72'] = data['orgName']
data_one['textField_lnsi0v6s'] = data["saasEdition"] # 销售版本
try:
data_one['employeeField_lnsi0v6u'] = textField_nc7gskc[name[0]] # 技术专家
data_one['employeeField_lnsi0v6v'] = textField_qk1e5di[name[0]] # 区域经理
if textField_3hgho1m[name[0]] =="":
data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data['city']] # 运营顾问
else:
data_one['employeeField_lnsi0v6w'] = textField_3hgho1m[name[0]] # 运营顾问
except:
data_one['employeeField_lnsi0v6u'] = data['technician_id'][0] # 技术专家
data_one['employeeField_lnsi0v6v'] = data['manager_id'][0] # 区域经理
data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data['city']] # 运营顾问
data_one['dateField_lnsi0v6x'] = str(timestamp_ms) # 计划日期
data_one['textField_lnsi0v6y'] = data["orgName"] # 门店名称-拷贝
data_one['textField_lnsi0v6z'] = data["orgCode"] # 门店编码
data_one['selectField_lnsi0v6q'] = "强化培训" # 拜访目的
# data_one['textField_lnsi0v70'] = data_result.loc[i,"id_own_group"] # 公司id
data_one['textareaField_lnsi0v6r'] = '''
新签180天后
1.客户日常使用问题解答
2.跟客户查看主营分析推荐进销存功能深度使用
3.跟客户查看车辆分析推荐短信及其他营销功能
4.说明转介绍政策索要转介绍''' # 拜访目的说明
# 加入数据
tableField_lnsi0v71['tableField_lnsi0v71'] = [data_one]
# 主表单
# data_two['dateField_lmelabb1'] = str(timestamp_ms)
# data_two['employeeField_lmeqk429'] = name
tableField_lnsi0v71['dateField_lmelabb1'] = str(timestamp_ms)
try:
if name[0] =="":
tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data['city']] # 运营顾问
else:
tableField_lnsi0v71['employeeField_lmeqk429'] = name[0]
tableField_lnsi0v71['employeeField_lmeqk423'] = textField_qk1e5di[name[0]] # 区域经理
tableField_lnsi0v71['employeeField_lmeqk424'] = textField_nc7gskc[name[0]] # 技术专家
except:
tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data['city']] # 运营顾问
tableField_lnsi0v71['employeeField_lmeqk423'] = data['manager_id'][0] # 区域经理
tableField_lnsi0v71['employeeField_lmeqk424'] = data['technician_id'][0] # 技术专家
# 开户时间 大于3年派发给技术专家
try:
timestamp = data['openTime']
date_obj = datetime.fromtimestamp(timestamp / 1000)
current_date = datetime.now()
time_difference = current_date - date_obj
if time_difference > timedelta(days=365 * 3):
tableField_lnsi0v71['employeeField_lmeqk429'] = f"['{textField_gif29wy[data['city']]}', '{tableField_lnsi0v71['employeeField_lmeqk424']}']"
except:
pass
tableField_lnsi0v71['textField_lmu0523h'] = "自动派发回访计划" # 状态备用
# 富文本 超链接 NGV
try:
form_data_ngv = read_instances_ngv(token=TOKEN, formUuid="FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91", page=1, n=100, searchField={'textField_zc1iowp': data["orgCode"]})
tableField_lnsi0v71['editorField_lodoplg0'] = ["root",{},["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},""]],["a",{"href":"https://f6car.aliwork.com/APP_UYZ0KG6L0CCNV80GZ66O/formDetail/FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91?formInstId="+form_data_ngv['data'][0]['formInstanceId']+"&isAdmin=true"},["span",{"data-type":"text"},["span",{"unlink":{},"data-type":"leaf"},"点击查看门店NGV"]]],["span",{"data-type":"text"},["span",{"unlink":{},"data-type":"leaf"},""]]]] # 富文本 超链接 NGV
except:
pass
res=initiate_process(TOKEN,formUuid,processCode,tableField_lnsi0v71)
print(res,tableField_lnsi0v71)

Some files were not shown because too many files have changed in this diff Show More