ai_member_xiaoxi/scripts/fix_beijing_pilot_finance.py
2026-06-21 08:00:01 +08:00

128 lines
4.3 KiB
Python

#!/usr/bin/env python3
"""
北京试点财务表 4m6Ejm 全表复核修正
列映射: N=GMV, O=退款金额, P=GSV, X=订单号, Y=有效订单, Z=渠道归属
"""
import json, time, requests, os
CRED_DIR = "/root/.openclaw/credentials/xiaoxi"
SPREADSHEET_TOKEN = "NoZqsFi47hIOHEt9j8WcfRtbnug"
SHEET_ID = "4m6Ejm"
def get_token():
with open(os.path.join(CRED_DIR, "config.json")) as f:
cfg = json.load(f)
resp = requests.post(
"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
json={"app_id": cfg["apps"][0]["appId"], "app_secret": cfg["apps"][0]["appSecret"]},
timeout=15
)
return resp.json()["tenant_access_token"]
def put_values(token, sheet_id, range_str, values):
url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{SPREADSHEET_TOKEN}/values"
body = {"valueRange": {"range": f"{sheet_id}!{range_str}", "values": values}}
for attempt in range(3):
r = requests.put(url, headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}, json=body, timeout=30)
result = r.json()
if result.get("code") == 0:
return True
print(f" Retry {attempt+1}: {result.get('msg','')}")
time.sleep(1)
print(f" FAILED {range_str}")
return False
def main():
token = get_token()
fixes = []
# === 已退费: Y=0, P→0 (GSV=0) ===
# r3 陈kelly: status=4, refund=1999
fixes.append((3, "P", [[0]]))
# r9 xhx: status=4, refund=1999
fixes.append((9, "P", [[0]]))
# r10 跳跳糖: status=4, refund=1999
fixes.append((10, "P", [[0]]))
# r25 琪-建筑: status=4, refund=599
fixes.append((25, "P", [[0]]))
# === 有效订单: Y=0→1, O→0, P→GSV, 补Z ===
# r11 Cathy: status=3, 1999, 直购
fixes.append((11, "N", [["1999"]]))
fixes.append((11, "O", [[0]]))
fixes.append((11, "P", [["1999"]]))
fixes.append((11, "Y", [[1]]))
fixes.append((11, "Z", [["直购"]]))
# r12 tingting: status=3, 599, 端内
fixes.append((12, "N", [["599"]]))
fixes.append((12, "O", [[0]]))
fixes.append((12, "P", [["599"]]))
fixes.append((12, "Y", [[1]]))
fixes.append((12, "Z", [["端内"]]))
# r17 MIYU: status=3, 1999, 直购
fixes.append((17, "N", [["1999"]]))
fixes.append((17, "O", [[0]]))
fixes.append((17, "P", [["1999"]]))
fixes.append((17, "Y", [[1]]))
fixes.append((17, "Z", [["直购"]]))
# r18 💋👩👧💋: status=3, 1999, 端内 (已确认)
fixes.append((18, "O", [[0]]))
fixes.append((18, "Y", [[1]]))
# r19 心安就好: status=3, 1999, 直购 (已确认)
fixes.append((19, "O", [[0]]))
fixes.append((19, "Y", [[1]]))
# r20 木木: status=3, 1999, 直购
fixes.append((20, "N", [["1999"]]))
fixes.append((20, "O", [[0]]))
fixes.append((20, "P", [["1999"]]))
fixes.append((20, "Y", [[1]]))
fixes.append((20, "Z", [["直购"]]))
# r21 柏文: 2026010422001499951430352915, status=3, 1999, 端内
fixes.append((21, "N", [["1999"]]))
fixes.append((21, "O", [[0]]))
fixes.append((21, "P", [["1999"]]))
fixes.append((21, "X", [["2026010422001499951430352915"]]))
fixes.append((21, "Y", [[1]]))
fixes.append((21, "Z", [["端内"]]))
# r22 琉璃仙: status=3, 1999, 直购
fixes.append((22, "O", [[0]]))
fixes.append((22, "Y", [[1]]))
# r24 悦宝爱阳光: status=3, 1999, 直购
fixes.append((24, "O", [[0]]))
fixes.append((24, "Y", [[1]]))
# r27 coco: status=3, 599, 端内
fixes.append((27, "N", [["599"]]))
fixes.append((27, "O", [[0]]))
fixes.append((27, "P", [["599"]]))
fixes.append((27, "Y", [[1]]))
fixes.append((27, "Z", [["端内"]]))
print(f"{len(fixes)} 处修正")
for row, col, vals in fixes:
rng = f"{col}{row}:{col}{row}"
if put_values(token, SHEET_ID, rng, vals):
print(f"{rng} = {vals[0]}")
else:
print(f"{rng} FAILED")
time.sleep(0.15)
print("\n=== 修正完成 ===")
print("\n⚠️ r13 笑看风云(UID 11824): 表内 trade_no=4200002979202510051839311872 DB不存在")
print(" 该账号实际: 4200002979202512297931190703(599, 12/29) + 4200003119202604279087832566(1499, 4/27)")
print(" 请确认正确订单号后手动修正")
if __name__ == "__main__":
main()