5.18脚本更新
This commit is contained in:
+282
-126
@@ -9,7 +9,7 @@ token = "Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN"
|
||||
|
||||
|
||||
class API:
|
||||
def entry_data_list(self, data: dict, replace: bool = False, max_retries: int = 20) -> Dict: # 获取多条表单数据
|
||||
def entry_data_list(self, data: dict, replace: bool = False, max_retries: int = 5) -> Dict: # 获取多条表单数据
|
||||
"""
|
||||
获取多条表单数据
|
||||
:param max_retries: 最大重试次数
|
||||
@@ -69,7 +69,7 @@ class API:
|
||||
return final_data
|
||||
|
||||
@staticmethod
|
||||
def workflow_instance_get(data: dict, max_retries: int = 20) -> dict:
|
||||
def workflow_instance_get(data: dict, max_retries: int = 5) -> dict:
|
||||
"""
|
||||
查询实例流程信息
|
||||
:param max_retries:
|
||||
@@ -185,7 +185,7 @@ class API:
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def entry_data_update(data: dict, max_retries: int = 20) -> dict: # 修改数据
|
||||
def entry_data_update(data: dict, max_retries: int = 5) -> dict: # 修改数据
|
||||
"""
|
||||
修改数据
|
||||
:param max_retries: 最大重试次数,此处设置100次
|
||||
@@ -324,14 +324,10 @@ class BossPermissionAutoApproval:
|
||||
# 在df1中查找匹配的所有功能
|
||||
matched_functions = df1[df1['权限功能'] == perm_functions] # 假设df1中有'权限功能'列
|
||||
|
||||
# 如果没有匹配项,至少添加权限功能本身
|
||||
# 如果没有匹配项,跳过这条记录
|
||||
if matched_functions.empty:
|
||||
all_data.append({
|
||||
"数据id": data_id,
|
||||
"门店编码": org_code,
|
||||
"权限功能": perm_functions,
|
||||
"一级分类": None # 或者可以设为perm本身
|
||||
})
|
||||
print(f"跳过:权限功能 '{perm_functions}' 在映射表中找不到匹配")
|
||||
continue
|
||||
else:
|
||||
# 添加所有匹配的功能
|
||||
for _, func_row in matched_functions.iterrows():
|
||||
@@ -424,6 +420,12 @@ class BossPermissionAutoApproval:
|
||||
'containTest': True,
|
||||
}
|
||||
|
||||
# 跳过空门店编码
|
||||
if not code or str(code).strip() == "" or pd.isna(code):
|
||||
print(f"跳过空门店编码")
|
||||
code_to_company_id[code] = None
|
||||
continue
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
|
||||
@@ -434,8 +436,12 @@ class BossPermissionAutoApproval:
|
||||
)
|
||||
response.raise_for_status() # 检查请求是否成功
|
||||
|
||||
response_json = response.json()
|
||||
data = response_json.get("data", {})
|
||||
records = data.get("records", [])
|
||||
|
||||
# 兼容废弃与停用门店
|
||||
if len(response.json().get("data").get("records",[]))==0:
|
||||
if len(records) == 0:
|
||||
json_data['orgStatus'] = 1 # 停用
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
|
||||
@@ -444,7 +450,11 @@ class BossPermissionAutoApproval:
|
||||
json=json_data,
|
||||
timeout=10
|
||||
)
|
||||
if len(response.json().get("data").get("records",[]))==0:
|
||||
response_json = response.json()
|
||||
data = response_json.get("data", {})
|
||||
records = data.get("records", [])
|
||||
|
||||
if len(records) == 0:
|
||||
json_data['orgStatus'] = 2 # 废弃
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
|
||||
@@ -453,11 +463,22 @@ class BossPermissionAutoApproval:
|
||||
json=json_data,
|
||||
timeout=10
|
||||
)
|
||||
response_json = response.json()
|
||||
data = response_json.get("data", {})
|
||||
records = data.get("records", [])
|
||||
|
||||
# 提取company_id并存储到字典
|
||||
company_id = response.json()['data']['records'][0]['groupId']
|
||||
code_to_company_id[code] = company_id
|
||||
print(f"成功查询: 门店编码 {code} -> company_id {company_id}")
|
||||
if len(records) > 0:
|
||||
company_id = records[0].get('groupId')
|
||||
if company_id:
|
||||
code_to_company_id[code] = company_id
|
||||
print(f"成功查询: 门店编码 {code} -> company_id {company_id}")
|
||||
else:
|
||||
print(f"查询结果异常: 门店编码 {code}, groupId为空")
|
||||
code_to_company_id[code] = None
|
||||
else:
|
||||
print(f"查询失败: 门店编码 {code}, 未找到匹配的公司(可能已注销)")
|
||||
code_to_company_id[code] = None
|
||||
|
||||
except Exception as e:
|
||||
print(f"查询失败: 门店编码 {code}, 错误: {str(e)}")
|
||||
@@ -583,10 +604,20 @@ class BossPermissionAutoApproval:
|
||||
print(e)
|
||||
|
||||
def update_permission(self, df):
|
||||
"""优化版:按门店聚合,减少请求频率"""
|
||||
if df is None or df.empty:
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
# 检查 cookies 数据是否存在
|
||||
if not self.get_cookies or len(self.get_cookies) == 0:
|
||||
print("错误:cookies 数据为空")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
cookie_str = self.get_cookies[0].get("_widget_1757558743223")
|
||||
if not cookie_str:
|
||||
print("错误:cookie 字符串为空")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
cookies = {}
|
||||
items = cookie_str.split('; ')
|
||||
for item in items:
|
||||
@@ -607,146 +638,271 @@ class BossPermissionAutoApproval:
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0',
|
||||
'x-requested-with': 'XMLHttpRequest',
|
||||
# 'cookie': 'hive-adminSESSIONID=531d2ecb-893b-471c-8cf9-e76a9dcfa789; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%221989d4783646e1-07c9f1a149173e8-4c657b58-2073600-1989d4783651ade%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%221989d4783646e1-07c9f1a149173e8-4c657b58-2073600-1989d4783651ade%22%7D; _yg_prod=EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG-4XSfqBfYzvRdjXVIjT2D3fZ7X80GeyA8J24qvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpZXbli5aTRA; _oauth2_proxy=GdOm_1P1BJAoCcjMngUI40McDBpFqkL2vO_GTniJq-QGX6z9l3MieVkOjJJVJiDbEh5U-j6h3SmxsEjWuaOlfsJyWPx6muVdQOPavFTnd8TCr5-0Hz5xYOQncD1IqIGILgkejOJ3127iUvvu--dYjyqKiDwbtEGCN-Gb21Ik6hkb61C4OBppUra1XbJQ7kOXJnZdlBMe8FiMnlkYVOL8zJ1ZDLIzUcsyzq2s1ACRdVZFT8WU7JLhXKRvoiQSSm6qkCYPsuxGLudtHMeJibtvT8IGNp-jdvv8SF5gzomGhd1Abt_4YfCjiGznNbu421biQI866hEiPTjAZPai0EC-5E0VOi8NmfrBIxaqWx4ecIEGM6Z_8G-4ZWJVBNIv3v9AfUPANYR37yC-w8rOYYv9X2FV0YMkGqFoOKJWBnw4JbdxtdI-8UodAIQGUYVeJGLt6zOWWRNdzKeK57Z8X3Aki0CmLaP0SSUjoGW1pMJayMar94eQpzXszBVQxX_-_buXoDtXYg-u5q5jnQrXX3SLXC8W5JNY_sbDWm2ix7H2ezcxp2gypyyPnFMA5gRneE9wcLAWFtkb_YwT3Q_1KD4rUltqNBBV85KCOR77lxGXMYSEANPvJRW8mC9jg9ARD0JyvA1ZHWefjNU_Y_6RsKSiHrH5Cg5k8QU8skF-KgQrFUKGVfjWfpRfDO6IpR_z2lD-6qfwAshliwrFKyqJi1M91bdZuLR1dXubkgSNVXzyKkgjnGZ-4Ma9K8M3iLQwgBE1DoCRv92C-ie7sI3MmJ58vwu3OllkcOkiz7NjYzv1LKIIKTVEU7wgGe0SGKuEoRO2vRBOZcw_NUUW6s9SbwKleCXdsHkth2EFigiF9E7CGGdyw2G5qO1nx5nKIgEhhqPEBs6yq1uPEcza_BT_J5BauG_ffjpWrRR8TaoMFrmJFPdOf4JDON6FPukb4sbo_uANPG3tSpwNiefTv0E4QV7jNyNNOeGlhLxhcWyN2E6LZTOWH8lnVNUl6oLbSnrkcDGAV9Q76nebHhn5Yf6qJY4S1CceJwFlpIlooiz1bUWzt906c1UUcrFgxEydHMKbmScaG2S_dSjvfB76ZFgozWIGQiiZnd1bt8G7pc2VxMVW-szebBoeUf0HzPpzkej-ILRunt-E9Mpq-3afCOtbda0RfZWqR8cQsAt-cABPIdi4WT5v-Cg_jrjxBb8mueXbWZ5Q4gNPjsVmkfnpW5svBf8bKdChTbNyq_KOm2NV9itI6RSAVkIo6ANUBe9npnCs66v6hSQmmqjqbZ3H4GX1HiyT6VlFpTxT1xDry3tZsTZqw9lzvnT7Tin1lIxArQc0LnlZAoVbbLDJJlbfrXXcIF1kcClfXw5d_Smy_tfGOo5kYE9iTmfMOMh-8ZfhhjA43P4kMgSrYdQAvW1fHFMVQtqtHTmUiCSsKQ78Phh3-ampoI83iJooVzH34Yg21cv5wHpAJAn_wVC_Weto-bol3XXZkDHG0DWmoMGROViNkxc0vKxpMubwiG36E-U-1tQXsyhqqa6VqE_Vnn3fizk9m-ZgozyN-VlS5ALV6djm1wa-ISaLv9juHjQlfA0joY6ZLOxM6mcGsZliw9ZQ-mhiy1C9c3vOuPLW3ZWRCeJUX96BaA-5am-3Z3bjK1mp391cXle3idTEPFlMCKNVUUANNFwxeH0W6CKL4rcRkgiEnhWuBEADySvpfCFuYxojH2uOSfS8mCERpZ7KNEgPCIVs9VumX68w8QonxClCQLWG6JRAmfmCfYKi6UeeWWvsqQDPqQiMkowThSv_TmLgFh5baZsB9bJwFqojc6pOzM3ogHuHuY_67VsA8E_cmeeWvBzqWBV9umeciWq5fbC3Cqe_fAsHxtKb39D2vQyqWVjRk9qukzxBmcd8bXzKUV1r6lg0QgVm2PG8dyfAV_ymsR6Y4b_gtPWcVx83J5H8RgN43ofGXwdUFsqi5xnc_Bf-KO_psGgYImKnqU25ftV8eX0ss0K7jsyhafsWDwPSg2k7qHPNK2AbtLGZIQcRcjXe7efTICAeHOn9AJ4vUbU1UpO53WsY8gic1I7tEH0LKkg7Pz7rR7drDuYkDg200gXiO7y5FXl1dqGa-tilF9IL57hx3UcuM7mLZa5zU0bPprhmCelSA4CwG8la5yGUdpvBqBSz22-X-DgkrwCzLpchi_LnpAkx2_jza2yTO5PtCSjn7hFbvuNFm6Neb_AuRg6-TpolwGfl-Bu3nUySmnCoCH8IvAoA4BpXzFH7o21cAlEHdKAndnoEljtyoyxa6DAZoG5Osttn71tbudyEFh26eOiA-wGAbpHJnsg3Slp35gicLgAepJ8oDFAaqdhtyP7-jizBCCB-Bt29hqvWwH22J30wgoXKnJgjFl6F9L4hxmvRi2QHWKV35ITGA1JqrS0VayT9DIrbTUKoRIKzTme0Z5deBxB8YFmiINAEqdS86PCbQi28-tK2RYuvFJ4O_RWxrMxD1fnDhbPWhnDGiY9dGmDjPgWB70vtIVaikGr_M_Bwm_3oa7ec00eTaSnjmX1qzLCLdvX_Ie6hBFgDii7ZU-KrQndqcbLYU9KtkI2yVwXWMihlLzdxNukzuxnU4IK334Mtebpz6ykLX8e8UfvbHJx4D_JgQQKB7Gfoxb-O02owUY6bvR-tgTp8n9-Mic9osDWeBgmmPHmvyNjcWbi4SXdBSVVIML12iS7qvjHlekG01r_EalttUe000hU1MLqE_Kd1XcINRq0vZaed5m6fXEUVcPchVYN9GC7e36HMo7ZlgE0fGNsWY6pFr-seXI2_23UJW9l_edhMqpvJJh5CAJYMRQ-Rtvzfbe8n|1757554489|NPRgqlI6umo48ScNrekwcxSuAvgFZbVOWWnkmHcAJww=',
|
||||
}
|
||||
|
||||
result_list = []
|
||||
df.to_csv(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\门店含id权限功能映射.csv", index=False)
|
||||
|
||||
print(f"=== update_permission 调试信息 ===")
|
||||
print(f"原始数据行数: {len(df)}")
|
||||
print(f"数据列名: {df.columns.tolist()}")
|
||||
|
||||
if "开关" not in df.columns:
|
||||
print("错误:数据中没有'开关'列")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
df.dropna(subset=['开关'], inplace=True)
|
||||
for index, row in df.iterrows():
|
||||
print(row)
|
||||
if row["company_id"] is None:
|
||||
continue
|
||||
if row["门店编码"] == "空门店编码" or row["门店编码"] is None:
|
||||
result_list.append(
|
||||
{
|
||||
|
||||
df_filtered = df.dropna(subset=['开关']).copy()
|
||||
print(f"过滤空开关后的数据行数: {len(df_filtered)}")
|
||||
|
||||
if len(df_filtered) == 0:
|
||||
print("警告:过滤后没有数据需要处理")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
# ========== 核心优化:按company_id聚合 ==========
|
||||
# 过滤掉company_id为空的行
|
||||
df_valid = df_filtered[df_filtered['company_id'].notna()].copy()
|
||||
|
||||
if len(df_valid) == 0:
|
||||
print("没有有效的company_id,跳过所有处理")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
# 按 company_id 分组
|
||||
grouped = df_valid.groupby('company_id')
|
||||
|
||||
print(f"开始处理 {len(grouped)} 个门店的权限...")
|
||||
|
||||
for company_id, group in grouped:
|
||||
print(f"\n===== 处理门店 company_id: {company_id},共 {len(group)} 条权限 =====")
|
||||
|
||||
# 1. 获取当前门店的菜单状态(只请求一次)
|
||||
params = {'groupId': company_id}
|
||||
|
||||
try:
|
||||
response = requests.get(
|
||||
'https://manage.f6yc.com/hive-admin/company/role/getGroupAdminRoleMenusScope',
|
||||
params=params,
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
timeout=10
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"错误:获取菜单状态失败,状态码: {response.status_code}")
|
||||
# 该门店所有权限都标记为失败
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": f"获取菜单状态失败 {response.status_code}",
|
||||
})
|
||||
continue # 跳过这个门店,处理下一个
|
||||
|
||||
response_json = response.json()
|
||||
data = response_json.get("data")
|
||||
if not data:
|
||||
# 可能是cookie过期,发送预警
|
||||
payload = {
|
||||
"api_key": "6694d3c4fcb69ca9a111a6c4",
|
||||
"entry_id": "68cb745753594c2570ba4f70",
|
||||
"data": {
|
||||
"_widget_1758164058473": {"value": "Boss权限自动审批"},
|
||||
"_widget_1758164058474": {"value": f"cookies信息失效,请更新cookie"}
|
||||
},
|
||||
"is_start_workflow": "true"
|
||||
}
|
||||
API().data_batch_create(payload)
|
||||
|
||||
# 标记所有行为cookie失效
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "cookies失效",
|
||||
})
|
||||
continue
|
||||
|
||||
menus_list = data.get("menus", [])
|
||||
print(f"菜单项数: {len(menus_list)}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"获取菜单状态异常: {str(e)}")
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "空门店编码跳过执行",
|
||||
}
|
||||
)
|
||||
"状态": f"获取菜单异常: {str(e)}",
|
||||
})
|
||||
continue
|
||||
if row["一级分类"] is not None:
|
||||
params = {
|
||||
'groupId': row["company_id"],
|
||||
}
|
||||
|
||||
response = requests.get(
|
||||
'https://manage.f6yc.com/hive-admin/company/role/getGroupAdminRoleMenusScope',
|
||||
params=params,
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
)
|
||||
# print(response.json())
|
||||
if response.status_code == 200:
|
||||
pkId = response.json().get("data").get("role").get("id")
|
||||
user_name = response.json().get("data").get("role").get("name")
|
||||
menus_list = response.json().get("data").get("menus")
|
||||
for menu in menus_list:
|
||||
if menu.get("name") == row["一级分类"]:
|
||||
nodes_list = menu.get("nodes")
|
||||
if row["开关"] == "开": # 确保一级权限为开
|
||||
menu["isChecked"] = 1
|
||||
# 2. 在同一个menus_list上应用该门店的所有权限变更
|
||||
has_modification = False # 标记是否有实际修改
|
||||
|
||||
for node in nodes_list:
|
||||
if node.get("name") == row["二级分类"]:
|
||||
child_nodes_list = node.get("nodes", [])
|
||||
print(row["二级分类"], row["权限"], row["开关"])
|
||||
if row["开关"] == "开": # 确保二级权限为开
|
||||
for _, row in group.iterrows():
|
||||
print(f" 应用权限: {row['一级分类']} > {row['二级分类']} > {row['权限']} = {row['开关']}")
|
||||
|
||||
if row['一级分类'] is None:
|
||||
continue
|
||||
|
||||
for menu in menus_list:
|
||||
if menu.get("name") == row["一级分类"]:
|
||||
# 处理一级分类
|
||||
if row["开关"] == "开":
|
||||
menu["isChecked"] = 1
|
||||
has_modification = True
|
||||
print(f" 开启一级分类: {row['一级分类']}")
|
||||
|
||||
for node in menu.get("nodes", []):
|
||||
if node.get("name") == row["二级分类"]:
|
||||
# 处理二级分类
|
||||
if row["开关"] == "开":
|
||||
if node.get("isChecked") != 1:
|
||||
node["isChecked"] = 1
|
||||
has_modification = True
|
||||
print(f" 开启二级分类: {row['二级分类']}")
|
||||
|
||||
if row["权限"] != "无":
|
||||
# 处理有三级权限的情况
|
||||
for child_node in child_nodes_list:
|
||||
if child_node.get("name") == row["权限"]:
|
||||
if row["开关"] == "开":
|
||||
print("更新权限:", child_node["id"], "为开")
|
||||
child_node["isChecked"] = 1
|
||||
else:
|
||||
child_node["isChecked"] = 0
|
||||
break # 找到对应的权限后跳出循环
|
||||
else:
|
||||
print(row["二级分类"], row["权限"], row["开关"], 11111111111)
|
||||
# 处理只有二级权限的情况
|
||||
if row["开关"] == "开":
|
||||
node["isChecked"] = 1
|
||||
else:
|
||||
node["isChecked"] = 0
|
||||
# 同时更新所有子节点的状态
|
||||
for child_node in child_nodes_list:
|
||||
child_node["isChecked"] = node["isChecked"]
|
||||
if row["权限"] != "无":
|
||||
# 处理三级权限
|
||||
for child_node in node.get("nodes", []):
|
||||
if child_node.get("name") == row["权限"]:
|
||||
new_value = 1 if row["开关"] == "开" else 0
|
||||
if child_node.get("isChecked") != new_value:
|
||||
child_node["isChecked"] = new_value
|
||||
has_modification = True
|
||||
print(f" {'开启' if new_value else '关闭'}三级权限: {row['权限']}")
|
||||
break
|
||||
else:
|
||||
# 无三级权限时,统一设置二级及子节点
|
||||
new_value = 1 if row["开关"] == "开" else 0
|
||||
if node.get("isChecked") != new_value:
|
||||
node["isChecked"] = new_value
|
||||
has_modification = True
|
||||
for child_node in node.get("nodes", []):
|
||||
if child_node.get("isChecked") != new_value:
|
||||
child_node["isChecked"] = new_value
|
||||
has_modification = True
|
||||
break # 找到匹配的二级分类后跳出
|
||||
break # 找到匹配的一级分类后跳出
|
||||
|
||||
# 查询isChecked为1的id
|
||||
checked_ids = []
|
||||
# 3. 如果没有实际修改,直接标记该门店所有权限为成功
|
||||
if not has_modification:
|
||||
print(f" 门店 {company_id} 无实际权限变更,跳过更新请求")
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "无需更新(权限已生效)",
|
||||
})
|
||||
continue
|
||||
|
||||
def collect_checked_ids(items):
|
||||
for item in items:
|
||||
if item.get("isChecked") == 1:
|
||||
checked_ids.append(str(item.get("id")))
|
||||
if "nodes" in item:
|
||||
collect_checked_ids(item["nodes"])
|
||||
# 4. 收集所有选中ID并发送更新请求(只发送一次)
|
||||
checked_ids = []
|
||||
|
||||
collect_checked_ids(menus_list)
|
||||
def collect_checked_ids(items):
|
||||
for item in items:
|
||||
if item.get("isChecked") == 1:
|
||||
checked_ids.append(str(item.get("id")))
|
||||
if "nodes" in item:
|
||||
collect_checked_ids(item["nodes"])
|
||||
|
||||
checked_ids_str = ",".join(checked_ids)
|
||||
print(f"更新后选中项的ID: {checked_ids_str}")
|
||||
collect_checked_ids(menus_list)
|
||||
checked_ids_str = ",".join(checked_ids)
|
||||
print(f" 选中ID数量: {len(checked_ids)}")
|
||||
|
||||
new_json_data = {
|
||||
"pkId": pkId,
|
||||
"name": user_name,
|
||||
'isValid': 1,
|
||||
"menuStr": checked_ids_str,
|
||||
}
|
||||
# 5. 发送POST更新请求
|
||||
role = data.get("role", {})
|
||||
pk_id = role.get("id")
|
||||
user_name = role.get("name")
|
||||
|
||||
if not pk_id or not user_name:
|
||||
print(f" 错误:无法获取pkId或user_name")
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "响应数据异常",
|
||||
})
|
||||
continue
|
||||
|
||||
new_json_data = {
|
||||
"pkId": pk_id,
|
||||
"name": user_name,
|
||||
'isValid': 1,
|
||||
"menuStr": checked_ids_str,
|
||||
}
|
||||
|
||||
# 添加重试机制
|
||||
max_retries = 3
|
||||
update_success = False
|
||||
update_error_msg = ""
|
||||
|
||||
for retry in range(max_retries):
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/company/role/update',
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
json=new_json_data,
|
||||
timeout=30 # 增加超时时间,因为参数可能很长
|
||||
)
|
||||
time.sleep(0.5)
|
||||
print(f"请求结果:{response.json()}")
|
||||
if response.json().get("code", 1000) == 200:
|
||||
result_list.append(
|
||||
{
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "更新成功",
|
||||
}
|
||||
)
|
||||
result = response.json()
|
||||
print(f" 更新请求结果 (重试{retry + 1}/{max_retries}): {result}")
|
||||
|
||||
if result.get("code") == 200:
|
||||
update_success = True
|
||||
break
|
||||
elif result.get("code") == 500:
|
||||
update_error_msg = f"服务器内部错误 (500)"
|
||||
if retry < max_retries - 1:
|
||||
wait_time = (retry + 1) * 2 # 递增等待时间:2s, 4s, 6s
|
||||
print(f" 500错误,{wait_time}秒后重试...")
|
||||
time.sleep(wait_time)
|
||||
else:
|
||||
result_list.append(
|
||||
{
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "更新失败",
|
||||
}
|
||||
)
|
||||
else:
|
||||
payload = {
|
||||
"api_key": "6694d3c4fcb69ca9a111a6c4",
|
||||
"entry_id": "68cb745753594c2570ba4f70",
|
||||
"data": {"_widget_1758164058473": {"value": "Boss权限自动审批"}, # 预警类型
|
||||
"_widget_1758164058474": {"value": f"cookies信息失效,请更新cookie"}
|
||||
# 预警内容
|
||||
},
|
||||
"is_start_workflow": "true"
|
||||
}
|
||||
res = API().data_batch_create(payload)
|
||||
update_error_msg = f"更新失败 code={result.get('code')}: {result.get('message')}"
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
update_error_msg = f"更新异常: {str(e)}"
|
||||
if retry < max_retries - 1:
|
||||
wait_time = (retry + 1) * 2
|
||||
print(f" 请求异常,{wait_time}秒后重试...")
|
||||
time.sleep(wait_time)
|
||||
|
||||
# 6. 记录该门店所有权限的结果
|
||||
status = "更新成功" if update_success else f"更新失败: {update_error_msg}"
|
||||
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": status,
|
||||
})
|
||||
|
||||
# 7. 门店之间添加延时,避免请求过快
|
||||
time.sleep(1)
|
||||
|
||||
result_df = pd.DataFrame(result_list)
|
||||
return result_df
|
||||
|
||||
|
||||
Reference in New Issue
Block a user