{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7aa426df",
   "metadata": {},
   "outputs": [],
   "source": [
    "from requests import get,post,put\n",
    "import pandas as pd\n",
    "import time\n",
    "import os\n",
    "\n",
    "teamId = 106\n",
    "ip = \"http://10.143.25.3:8090\"\n",
    "param = {\n",
    "    \"username\": \"tangchao\",\n",
    "    \"password\": \"123456a\",\n",
    "    \"client_id\": \"client\",\n",
    "    \"grant_type\": \"password\",\n",
    "    \"client_secret\": \"123456\",\n",
    "}\n",
    "data = get(url=f\"{ip}/oauth/token\",params=param).json()\n",
    "token = data[\"access_token\"]\n",
    "header = {\n",
    "    \"content-type\": \"application/json\",\n",
    "    \"authorization\": f\"Bearer {token}\",\n",
    "}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "d790454a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "文件: 丁真泽仁.jpg\n",
      "响应: {'success': True, 'msg': 'http://10.143.25.3:9000/iot-school/2025-11-06/e286b47e3c9d4db396400167b77b4b1b.JPG', 'code': 0, 'data': None}\n"
     ]
    }
   ],
   "source": [
    "with open(\"./students/丁云钻.JPG\", \"rb\") as formFile:\n",
    "    # 正确的方式创建文件上传数据\n",
    "    mu_files = {\n",
    "        \"file\": (\"丁云钻.JPG\", formFile, \"application/octet-stream\")\n",
    "    }\n",
    "    \n",
    "    # 使用 files 参数而不是 data\n",
    "    response = post(\n",
    "        url=f\"{ip}/school/device/content/upload\",\n",
    "        headers={\n",
    "            \"authorization\": f\"Bearer {token}\"\n",
    "            },\n",
    "        files=mu_files\n",
    "    )\n",
    "    print(f\"文件: 丁真泽仁.jpg\")\n",
    "    print(f\"响应: {response.json()}\")\n",
    "                "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "68b6d980",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9d2f61cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def getStudentInfo(name):\n",
    "    data = get(f\"{ip}/school/stuface/list?teamId=106&page=1&pageSize=15&gradeId=&classId=&stuName={name}&stuNo=&pageNumber=0&sortField=create_time&sortOrder=asc&access_token=908c0ba4-ead2-44a3-a3c4-6aaf0cfbeb8a\",headers=header).json()\n",
    "    if data['success']:\n",
    "        students = data['data']['records']\n",
    "        if len(students)==1:\n",
    "            return students[0]\n",
    "        elif len(students)>1:\n",
    "            count = 0\n",
    "            for stu in students:\n",
    "                if name == stu['stuName']:\n",
    "                    count += 1\n",
    "            if count == 0:\n",
    "                return f\"姓名{name}没有学生，请检查\"  \n",
    "            elif count > 1:\n",
    "                return f\"姓名{name}有{count}个学生，请检查\"\n",
    "            else:\n",
    "                for stu in students:\n",
    "                    if name == stu['stuName']:\n",
    "                        return stu\n",
    "        else:\n",
    "            return f\"姓名{name}有{len(students)}个学生，请检查\"\n",
    "def uploadFace(file_path):\n",
    "    with open(file_path, \"rb\") as formFile:\n",
    "        mu_files = {\n",
    "            \"file\": (Path(file_path).name, formFile,\"application/octet-stream\")\n",
    "        }\n",
    "        response = post(f\"{ip}/school/device/content/upload\",\n",
    "                        headers={\n",
    "                            \"authorization\": f\"Bearer {token}\"\n",
    "                            },\n",
    "                        files=mu_files\n",
    "                        ).json()\n",
    "        if response['success']:\n",
    "            return response\n",
    "        else:\n",
    "            return f\"上传失败{response['msg']}\"\n",
    "def updateFaceInfo(stuInfo,files):\n",
    "    data = put(f\"{ip}/school/stuface/save\",\n",
    "               headers=header,\n",
    "               json={\n",
    "                   \"studentId\": stuInfo['studentId'],\n",
    "                   \"files\": files\n",
    "                   }\n",
    "               ).json()\n",
    "    if data['success']:\n",
    "        print(\"更新成功\")\n",
    "        return data\n",
    "    else:\n",
    "        print(f\"更新失败{data['msg']}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "97d03b64",
   "metadata": {},
   "outputs": [],
   "source": [
    "count = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b27da758",
   "metadata": {},
   "outputs": [],
   "source": [
    "fail_student=[]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4eb1025d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "丁真 更新成功\n",
      "丁真仁真 更新成功\n",
      "丁真拥青 更新成功\n",
      "丁真月登 姓名丁真月登有0个学生，请检查\n",
      "丁真罗布 更新成功\n",
      "丹增拥西 更新成功\n",
      "丹增拥西.jpg.temp 姓名丹增拥西.jpg.temp有0个学生，请检查\n",
      "丹真珠扎 更新成功\n",
      "久美郎加 更新成功\n",
      "于焜豪 更新成功\n",
      "仁真曲珍 更新成功\n",
      "仁青彭措 更新成功\n",
      "付森林 更新成功\n",
      "代子浩 更新成功\n",
      "伍金次仁 更新成功\n",
      "何奥雪 更新成功\n",
      "何子健 更新成功\n",
      "何瑞林 更新成功\n",
      "何绮琪 更新成功\n",
      "何雨洁 更新成功\n",
      "佘芯欣 更新成功\n",
      "余帅 更新成功\n",
      "佟诗佳 更新成功\n",
      "倪杰博文 更新成功\n",
      "其麦 更新成功\n",
      "冯文童 更新成功\n",
      "冯星宇 更新成功\n",
      "刘佳 更新成功\n",
      "刘冬晨 更新成功\n",
      "刘宸驿 更新成功\n",
      "刘峻熙 更新成功\n",
      "刘志欣 更新成功\n",
      "刘权 更新成功\n",
      "刘杰 姓名刘杰有3个学生，请检查\n",
      "刘玉婷 姓名刘玉婷有2个学生，请检查\n",
      "刘王昊杰 更新成功\n",
      "刘肖 更新成功\n",
      "刘芮 更新成功\n",
      "刘芸汐 更新成功\n",
      "刘萭菡 更新成功\n",
      "卓玛曲忠 更新成功\n",
      "单孜扎巴 更新成功\n",
      "单真赤里 更新成功\n",
      "卢朝亭 更新成功\n",
      "古绒曲珍 更新成功\n",
      "向雨涵 更新成功\n",
      "吴瑞鑫 更新成功\n",
      "吴雪 更新成功\n",
      "周杰 更新成功\n",
      "呷松泽仁 更新成功\n",
      "呷绒拉姆 更新成功\n",
      "呷绒拉姆.jpg.temp 姓名呷绒拉姆.jpg.temp有0个学生，请检查\n",
      "唐越 更新成功\n",
      "唐雨轩 姓名唐雨轩有0个学生，请检查\n",
      "唐韵玲 更新成功\n",
      "四郎吉称 更新成功\n",
      "四郎娜姆 更新成功\n",
      "四郎志玛 更新成功\n",
      "四郎降村 更新成功\n",
      "土登称来 更新成功\n",
      "夏处 更新成功\n",
      "夏宁静 姓名夏宁静有0个学生，请检查\n",
      "夏思乐 更新成功\n",
      "央珠尼玛 更新成功\n",
      "姜唯怡 更新成功\n",
      "姜唯怡.jpg.temp 姓名姜唯怡.jpg.temp有0个学生，请检查\n",
      "娄源 更新成功\n",
      "孙婧仪 更新成功\n",
      "尹荣强 更新成功\n",
      "尼玛拉姆 姓名尼玛拉姆有2个学生，请检查\n",
      "巩天姚 更新成功\n",
      "巴措 姓名巴措有2个学生，请检查\n",
      "巴桑 更新成功\n",
      "巴桑卓玛 更新成功\n",
      "帅紫欣 更新成功\n",
      "廖爽 更新成功\n",
      "张世鑫 更新成功\n",
      "张健霖 更新成功\n",
      "张勇 姓名张勇有2个学生，请检查\n",
      "张友林 更新成功\n",
      "张康萌 更新成功\n",
      "张旭东 更新成功\n",
      "张明瑞 更新成功\n",
      "张林丰 更新成功\n",
      "张永科 更新成功\n",
      "张澜 更新成功\n",
      "张鑫雨 更新成功\n",
      "张雨歆 更新成功\n",
      "彭嘉妮 更新成功\n",
      "彭小青 更新成功\n",
      "彭徐馨 更新成功\n",
      "彭馨怡 更新成功\n",
      "徐宇奇 更新成功\n",
      "德青巴姆 更新成功\n",
      "德青翁姆 更新成功\n",
      "志玛拥忠 更新成功\n",
      "成宇轩 更新成功\n",
      "戚昕钰 更新成功\n",
      "房明勇 更新成功\n",
      "扎西 更新成功\n",
      "扎西华本 更新成功\n",
      "扎西多吉 姓名扎西多吉有3个学生，请检查\n",
      "扎西巴拥 姓名扎西巴拥有2个学生，请检查\n",
      "扎西彭措 更新成功\n",
      "扎西翁姆 姓名扎西翁姆有2个学生，请检查\n",
      "扎西邓珠 姓名扎西邓珠有3个学生，请检查\n",
      "拉热 更新成功\n",
      "拥吉拉姆 更新成功\n",
      "措姆 更新成功\n",
      "斯朗让步 姓名斯朗让步有0个学生，请检查\n",
      "斯郎泽仁 更新成功\n",
      "方思淇 更新成功\n",
      "昂翁落珠 更新成功\n",
      "普布 更新成功\n",
      "普灯 更新成功\n",
      "曲云登降措 更新成功\n",
      "曲巴降措 更新成功\n",
      "曲机卓玛 更新成功\n",
      "曲登志玛 更新成功\n",
      "更扎 更新成功\n",
      "曹正怡甫 姓名曹正怡甫有0个学生，请检查\n",
      "曹海龙 更新成功\n",
      "曹芮瑞 更新成功\n",
      "曹青川 更新成功\n",
      "曾佳佳 更新成功\n",
      "曾昊然 更新成功\n",
      "曾英杰 更新成功\n",
      "朱俊 更新成功\n",
      "朱杨成程 更新成功\n",
      "朱绿红 更新成功\n",
      "李东生 更新成功\n",
      "李作浩 更新成功\n",
      "李俊希 更新成功\n",
      "李偌熙 已上传照片\n",
      "李子浩 更新成功\n",
      "李想 更新成功\n",
      "李杨杨 更新成功\n",
      "李杰 更新成功\n",
      "李梦雪 更新成功\n",
      "李洋 更新成功\n",
      "李艾灵 更新成功\n",
      "李茹茜 更新成功\n",
      "李雨萱 更新成功\n",
      "李雯静 更新成功\n",
      "杜芸熙 更新成功\n",
      "杨健鑫 更新成功\n",
      "杨博为 更新成功\n",
      "杨帆 姓名杨帆有2个学生，请检查\n",
      "杨慧怡 更新成功\n",
      "杨明高 更新成功\n",
      "杨淞琳 更新成功\n",
      "杨美玲 更新成功\n",
      "杨钦城 更新成功\n",
      "杨雪丽 更新成功\n",
      "松安丁真 更新成功\n",
      "林菲儿 更新成功\n",
      "柔门 更新成功\n",
      "根秋泽措 更新成功\n",
      "格绒曲初 更新成功\n",
      "梁湘怡 更新成功\n",
      "梅宝文 更新成功\n",
      "樊林钰 更新成功\n",
      "次乃曲觉 更新成功\n",
      "欧炤彬 更新成功\n",
      "欧韦博 更新成功\n",
      "段芸凯 更新成功\n",
      "母林苹 更新成功\n",
      "母玉洁 更新成功\n",
      "毛滢 姓名毛滢有0个学生，请检查\n",
      "毛雨荨 姓名毛雨荨有0个学生，请检查\n",
      "江若溪 更新成功\n",
      "汪彦丞 更新成功\n",
      "汪秦川 更新成功\n",
      "沈俊 更新成功\n",
      "泽仁拥忠 姓名泽仁拥忠有2个学生，请检查\n",
      "泽仁拥珍 更新成功\n",
      "泽仁林波 更新成功\n",
      "泽仁桑珠 更新成功\n",
      "泽仁正呷 更新成功\n",
      "泽仁邓珠 更新成功\n",
      "泽绒拥桌 姓名泽绒拥桌有0个学生，请检查\n",
      "泽翁拉姆 更新成功\n",
      "洛绒刀登 姓名洛绒刀登有2个学生，请检查\n",
      "洛绒央宗 更新成功\n",
      "洛绒曲西 更新成功\n",
      "洛绒银登 更新成功\n",
      "洛让普错 更新成功\n",
      "淳思琴 更新成功\n",
      "熊建 更新成功\n",
      "熊鑫豪 更新成功\n",
      "牛泽浩 更新成功\n",
      "王子轩 姓名王子轩有4个学生，请检查\n",
      "王宇希杨 更新成功\n",
      "王忠翔 更新成功\n",
      "王思函 更新成功\n",
      "王思涵 更新成功\n",
      "王怡之 更新成功\n",
      "王成鹏 更新成功\n",
      "王星怡 更新成功\n",
      "王浩 更新成功\n",
      "王羌宇 更新成功\n",
      "王羽 更新成功\n",
      "王艺 姓名王艺有2个学生，请检查\n",
      "王艺小 姓名王艺小有0个学生，请检查\n",
      "王营凯 更新成功\n",
      "王薛文 更新成功\n",
      "王诗语 更新成功\n",
      "王辛如 更新成功\n",
      "王陈俊祎 更新成功\n",
      "王雪瑞 更新成功\n",
      "王震太 更新成功\n",
      "王静煊 更新成功\n",
      "珍珠拉姆 更新成功\n",
      "班志 更新成功\n",
      "生呷 更新成功\n",
      "田文涛 更新成功\n",
      "田玉峰 更新成功\n",
      "登真翁姆 更新成功\n",
      "登镇降措 姓名登镇降措有0个学生，请检查\n",
      "白浩洋 更新成功\n",
      "白玛泽真 姓名白玛泽真有0个学生，请检查\n",
      "白马恩珠 姓名白马恩珠有0个学生，请检查\n",
      "石雨鑫 更新成功\n",
      "秀雯 更新成功\n",
      "罗得 姓名罗得有0个学生，请检查\n",
      "罗湘缘 更新成功\n",
      "罗琛 更新成功\n",
      "罗绒多吉 更新成功\n",
      "肖宇欣 更新成功\n",
      "胡仟军 更新成功\n",
      "蒋刘杨吉 更新成功\n",
      "蒋苏豪 更新成功\n",
      "薛佳佳 更新成功\n",
      "许博文 更新成功\n",
      "谢佳心 更新成功\n",
      "谢晓丽 更新成功\n",
      "谢耀辉 更新成功\n",
      "谭明涛 更新成功\n",
      "贾馥嫣 更新成功\n",
      "赵亚军豪 更新成功\n",
      "赵元兵 更新成功\n",
      "赵星宇 更新成功\n",
      "赵欢 更新成功\n",
      "赵瑛杰 更新成功\n",
      "赵禹婷 更新成功\n",
      "达瓦泽仁 更新成功\n",
      "邓丽君 更新成功\n",
      "邓婉麟 更新成功\n",
      "邓曹华 更新成功\n",
      "邓汶汶 更新成功\n",
      "邓玉 更新成功\n",
      "邓蔡清 更新成功\n",
      "邱明辉 更新成功\n",
      "邱骏熙 更新成功\n",
      "邹志栋 更新成功\n",
      "邹晞 更新成功\n",
      "邹铭洋 姓名邹铭洋有0个学生，请检查\n",
      "郑丁山 更新成功\n",
      "郑霜侨 更新成功\n",
      "钟渝萍 更新成功\n",
      "错日娜 姓名错日娜有0个学生，请检查\n",
      "阳志 更新成功\n",
      "阿布 更新成功\n",
      "陈峰 更新成功\n",
      "陈新幻 更新成功\n",
      "陈新摇 更新成功\n",
      "陈爽 更新成功\n",
      "陈琳 更新成功\n",
      "陈雪梅 更新成功\n",
      "陈静 更新成功\n",
      "降批所郎 更新成功\n",
      "降拥巴姆 姓名降拥巴姆有2个学生，请检查\n",
      "陶茂宇 更新成功\n",
      "青美泽仁 更新成功\n",
      "青麦翁姆 更新成功\n",
      "韩思月 更新成功\n",
      "韩艺菱 更新成功\n",
      "马博俊 更新成功\n",
      "高唐德胜 更新成功\n",
      "高让桑章 更新成功\n",
      "魏佳莉 更新成功\n",
      "鲁绒珍珠 姓名鲁绒珍珠有0个学生，请检查\n",
      "黄俊豪 更新成功\n",
      "黄友诚 更新成功\n",
      "黄定瑞 更新成功\n",
      "黄若翔 更新成功\n",
      "龙凤辛迪 更新成功\n"
     ]
    }
   ],
   "source": [
    "for root, dirs, files in os.walk(\"./students/\"):\n",
    "    for index,file in enumerate(files):\n",
    "        file_path = os.path.join(root, file)\n",
    "        stuName = Path(file_path).stem\n",
    "        print(stuName ,end=\" \")\n",
    "        stuInfo = getStudentInfo(stuName)\n",
    "        if isinstance(stuInfo, str):\n",
    "            print(stuInfo)\n",
    "            count += 1\n",
    "            continue\n",
    "        if stuInfo[\"files\"] and 'http' in stuInfo[\"files\"]:\n",
    "            print(f\"已上传照片\")\n",
    "            continue\n",
    "        if count > index:\n",
    "            print(f\"已上传张照片\")\n",
    "            continue\n",
    "        res = uploadFace(file_path)\n",
    "        if isinstance(res, str):\n",
    "            print(f\"上传图片失败{res}\")\n",
    "            count += 1\n",
    "            fail_student.append(stuInfo)\n",
    "            continue\n",
    "        updateFaceInfo(stuInfo, [{\"url\":res['msg'],\"name\":file}])\n",
    "        count+=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6f4fcfcf",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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
}
