7qiaoPlus_update_address_list.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. # -*- codeing = utf-8 -*-
  2. # @Time : 2022/7/21 16:32
  3. # @Author : Clown
  4. # @File : 7qiaoPlus_update_address_list.py
  5. # @Software : PyCharm
  6. import pymysql
  7. import json
  8. import requests
  9. import csv
  10. import os
  11. import time
  12. from datetime import datetime,timedelta
  13. import sys
  14. import traceback
  15. import random
  16. from all_key_table import update_key_value_pair_7qiaoPlus
  17. def linkTomySql(host,passwd,db_name):
  18. '''连接至数据库返回【db】,v2新增local_infile=1 打开文件导入权限'''
  19. try:
  20. #本地连接为:localhost 服务器连接为:124.222.188.59
  21. db = pymysql.connect(
  22. host=host, user="root",
  23. passwd=passwd,
  24. db=db_name,
  25. charset='utf8mb4',
  26. local_infile=1)
  27. print('\nconnect to mysql server 成功')
  28. print('---------------------------------------')
  29. except:
  30. print("\ncould not connect to mysql server")
  31. db = "连接失败"
  32. return db
  33. def read_key_value_pair(db,brand_name,wm_plate,owner):
  34. '''按条件读取,数据库中all_key_table表里的key_value_pair字段中的值,以键值对的形式输出
  35. db:数据库,
  36. brand_name:品牌名,
  37. wm_plate:外卖平台MEITUAN或ELEME,
  38. owner:账号权限all或one
  39. '''
  40. cursor = db.cursor()
  41. sql = f'SELECT key_value_pair FROM all_key_table WHERE brand_name = "{brand_name}" AND wm_plate = "{wm_plate}" AND owner = "{owner}";'
  42. cursor.execute(sql)
  43. pair = json.loads(cursor.fetchall()[0][0])
  44. return pair
  45. def loadDataInfile(file_path ,csv_name,db,table_name):
  46. '''v2新增 执行csv文件导入数据库,注意ENCLOSED BY '"' 防止误判'''
  47. cursor = db.cursor()
  48. sql0 = f"SET global local_infile = 1;"
  49. cursor.execute(sql0)
  50. db.commit()
  51. sql1 = f'''LOAD DATA LOCAL INFILE '{file_path+'/'+csv_name}' REPLACE INTO TABLE {table_name} FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES ;'''
  52. cursor.execute(sql1)
  53. db.commit()
  54. sql2= f"SET global local_infile = 0;"
  55. cursor.execute(sql2)
  56. db.commit()
  57. cursor.close()
  58. def update_scriptrunninglogs(log_date,log_time,running_Time,operation_results,table_name,db):
  59. '''将脚本执行情况发送至【脚本执行日志】表
  60. 配套内容
  61. from datetime import datetime
  62. import sys
  63. import traceback
  64. time_begin = time.time()
  65. log_date = datetime.now().strftime("%Y-%m-%d") # 日志记录日期
  66. log_time = datetime.now().strftime('%H:%M:%S') # 日志记录时间
  67. df_name = '数据库表名'
  68. try:
  69. operation_results = '执行成功'
  70. except Exception as e:
  71. operation_results = traceback.format_exc()
  72. running_Time = time.time() - time_begin # 脚本运行时长
  73. '''
  74. try:
  75. sql = "INSERT INTO scriptrunninglogs VALUES (%s,%s,%s,%s,%s,%s,%s)"#date, time, running_Time, script_name, operation_results, table_name, id
  76. script_name = os.path.basename(sys.argv[0])
  77. value = (log_date,log_time,running_Time,script_name,operation_results,table_name,0)
  78. cursor = db.cursor()
  79. cursor.execute(sql, value) # 执行sql语句
  80. db.commit()
  81. cursor.close()
  82. except:
  83. result = "数据库连接失败"
  84. print(result)
  85. def update_address_list_7qiaoPlus(file_path, key_json, applicationId, formModelId, key):
  86. '''
  87. :param file_path: csv输出路径
  88. :param key_json: 密钥键值对
  89. :param applicationId: 应用id
  90. :param formModelId: 表单id
  91. :param key: 组件id
  92. :return: csv_name(xxx.csv)
  93. '''
  94. csv_name = 'address_list_7qiaoPlus.csv'
  95. title = ['key', 'search_name', 'address_list', 'level', 'update_date']
  96. update_date = datetime.now().strftime("%Y-%m-%d")
  97. #生成基础表单文件
  98. f = open(file_path + '/' + csv_name, mode='w', encoding='utf-8-sig', newline="")
  99. writer = csv.writer(f)
  100. writer.writerow(title)
  101. #解析密钥键值对
  102. Token = key_json['data']
  103. #定义请求头
  104. headers_api = {
  105. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36',
  106. "Content-type": "application/json",
  107. "X-Auth0-Token": Token}
  108. #执行请求
  109. try:
  110. url_addr_level1 = f'https://qy.do1.com.cn/qiqiao2/runtime/api/v1/bpms-runtime/forms/{formModelId}/form_fields/address/{key}/options?applicationId={applicationId}&displayAll=false'
  111. resp_addr1 = requests.get(url_addr_level1, headers=headers_api).json()
  112. for addr_level1 in resp_addr1['data']:
  113. addr1 = {'id': addr_level1['id'],
  114. 'value': addr_level1['value']}
  115. l = {'code':200,'data':[]}
  116. l['data']=[addr1]
  117. row1 = [key, addr_level1['value'], json.dumps(l, ensure_ascii=False).replace('\\t',''), 1, update_date]
  118. writer.writerow(row1)
  119. parentId1 = addr_level1['id']
  120. url_addr_level2 = f'https://qy.do1.com.cn/qiqiao2/runtime/api/v1/bpms-runtime/forms/{formModelId}/form_fields/address/{key}/options?applicationId={applicationId}&parentId={parentId1}&displayAll=false'
  121. resp_addr2 = requests.get(url_addr_level2, headers=headers_api).json()
  122. for addr_level2 in resp_addr2['data']:
  123. addr2 = {'id': addr_level2['id'],
  124. 'value': addr_level2['value']}
  125. l['data']=[addr1,addr2]
  126. row2 = [key, addr_level2['value'], json.dumps(l, ensure_ascii=False).replace('\\t',''), 2, update_date]
  127. writer.writerow(row2)
  128. parentId2 = addr_level2['id']
  129. url_addr_level3 = f'https://qy.do1.com.cn/qiqiao2/runtime/api/v1/bpms-runtime/forms/{formModelId}/form_fields/address/{key}/options?applicationId={applicationId}&parentId={parentId2}&displayAll=false'
  130. resp_addr3 = requests.get(url_addr_level3, headers=headers_api).json()
  131. for addr_level3 in resp_addr3['data']:
  132. addr3 = {'id': addr_level3['id'],
  133. 'value': addr_level3['value']}
  134. l['data']=[addr1,addr2,addr3]
  135. row3 = [key, addr_level3['value'], json.dumps(l, ensure_ascii=False).replace('\\t',''), 3, update_date]
  136. writer.writerow(row3)
  137. except Exception as e:
  138. print(e)
  139. return csv_name
  140. if __name__ == '__main__':
  141. # 日志参数
  142. time_begin = time.time()
  143. log_date = datetime.now().strftime("%Y-%m-%d") # 日志记录日期
  144. log_time = datetime.now().strftime('%H:%M:%S') # 日志记录时间
  145. host = 'localhost'
  146. passwd = '111???clown'
  147. db_name = 'hexingxing'
  148. db = linkTomySql(host, passwd, db_name)
  149. brand_name = '道一云'
  150. wm_plate = '7qiaoPlus'
  151. owner = 'all'
  152. key_name = ''
  153. headers_api = {
  154. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36',
  155. "Content-type": "application/json",
  156. "X-Auth0-Token": ""}
  157. file_path = 'C:/Users/ClownHe/Desktop/goods' # csv保存路径
  158. applicationId = 'c10510196559404b99b0f8591e8baa5b' # 门店服务中心
  159. formModelId = '62d8cd1eff61c87eae935a2f' # 门店平台信息表
  160. key = 'key_1658380104096_247482' # 控件编号
  161. table_name = 'address_list_7qiaoplus'
  162. operation_results = '执行成功'
  163. try:
  164. try:
  165. key_json = read_key_value_pair(db, brand_name, wm_plate, owner)
  166. Token = key_json['data']
  167. headers_api["X-Auth0-Token"] = Token
  168. csv_name = update_address_list_7qiaoPlus(file_path, key_json, applicationId, formModelId, key)
  169. except:
  170. print('重载关键表')
  171. update_key_value_pair_7qiaoPlus(db, brand_name, wm_plate, owner, key_name)
  172. key_json = read_key_value_pair(db, brand_name, wm_plate, owner)
  173. Token = key_json['data']
  174. headers_api["X-Auth0-Token"] = Token
  175. csv_name = update_address_list_7qiaoPlus(file_path, key_json, applicationId, formModelId, key)
  176. operation_results = operation_results + f',更新【{brand_name}】【{wm_plate}】【all_key_table】'
  177. loadDataInfile(file_path, csv_name, db, table_name)
  178. print(f'【{csv_name}】导入成功')
  179. except Exception as e:
  180. operation_results = traceback.format_exc()
  181. print(operation_results)
  182. print(f'本次脚本执行总用时{(time.time() - time_begin) / 60} min')
  183. running_Time = time.time() - time_begin # 脚本运行时长
  184. db = linkTomySql(host, passwd, db_name)
  185. update_scriptrunninglogs(log_date, log_time, running_Time, operation_results, table_name, db)