{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "def find_java_files(directory):\n",
    "    java_files = []\n",
    "    file_type=['java']\n",
    "    for root, dirs, files in os.walk(directory):\n",
    "        for file in files:\n",
    "            for item in file_type:\n",
    "                if file.endswith(\".\"+item):\n",
    "                    java_files.append(os.path.join(root, file))\n",
    "    return java_files\n",
    "\n",
    "# 使用示例\n",
    "directory_path = r'F:\\java\\ai-video\\web\\src\\main\\java\\com\\hongxing\\web\\culum\\controller' \n",
    "java_files = find_java_files(directory_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\ClassAttendNewController.java',\n",
       " 'F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\ClassAttendStuController.java',\n",
       " 'F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\ClassTypeController.java',\n",
       " 'F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\CulumAttendController.java',\n",
       " 'F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\CulumNewController.java',\n",
       " 'F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\CulumPlanNewController.java',\n",
       " 'F:\\\\java\\\\ai-video\\\\web\\\\src\\\\main\\\\java\\\\com\\\\hongxing\\\\web\\\\culum\\\\controller\\\\CulumWeekController.java']"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "java_files"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "content = \"\"\n",
    "for item in java_files:\n",
    "    with open(item, 'r', encoding='utf-8') as f:\n",
    "        content = content + f.read()+\"\\n\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "70797"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(content)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "\n",
    "pattern = r\"\\*\\*(?:\\s*\\*.*?\\n)*\\s*\\*\"#匹配多行注释\n",
    "pattern1 = r\"\\/\\/.*\"#匹配单行注释\n",
    "pattern2 =r'^\\n'\n",
    "pattern3 =r'import .*'\n",
    "pattern4 =r'package .*'\n",
    "pattern5 = r\"\\/\\*.*?\\*\\/\"#匹配多行注释\n",
    "pattern6 = r\"<--.*?-->\"#匹配单行注释\n",
    "pattern7=r\"^\\s*$\"\n",
    "pattern6 = r\"<!--.*?-->\"#匹配单行注释\n",
    "patterns = [pattern, pattern1,pattern2, pattern3,pattern4,pattern5,pattern6]\n",
    "# 替换每一行的\"rain\"为\"rainy\"\n",
    "# new_text = re.sub(pattern,content, \"\", flags=re.S|re.M)\n",
    "new_text = content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "for item in patterns:\n",
    "    new_text = re.sub(item, \"\", new_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "lines = [line for line in new_text.splitlines() if line.strip() != '']\n",
    "result = '\\n'.join(lines)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'@Api(value = \"走班考勤考勤接口\", tags = {\"走班考勤管理相关接口\"})\\n@RestController\\n@RequestMapping(\"/classAttend\")\\npublic class ClassAttendNewController extends BaseController {\\n    @Autowired\\n    private ClassAttendNewService classAttendService;\\n    @Autowired\\n    private StudentService studentService;\\n    @Autowired\\n    private SchoolRuleService schoolRuleService;\\n    @Autowired\\n    private CulumWeekService culumWeekService;\\n    @Autowired\\n    private RedisCacheUtils redisCacheUtils;\\n    @Autowired\\n    private ICameraService iCameraService;\\n    @ApiOperation(value = \"分页查询学生列表\")\\n    @GetMapping(\"/list\")\\n    public Result<?> getPageList(String name, @ApiParam(value = \"分组id\") Long teamId, @ApiParam(value = \"年级id\") Long gradeId, @ApiParam(value = \"系部Id\") Integer departmentId, @ApiParam(value = \"班级id\") Long classId, @ApiParam(value = \"专业Id\") String majorId) {\\n        Page<Map<String, Object>> data = studentService.selectStudentCheckWorks(name, teamId, gradeId, classId, departmentId,majorId,0, false, null, this.getPagination());\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"学生课程考勤信息\")\\n    @GetMapping(value = \"/getAttend\")\\n    public Result<?> getAttendByIdAndDate(@ApiParam(value = \"id\") Long id, @ApiParam(value = \"时间\") Date date) {\\n        return this.success(classAttendService.getAttendByIdAndDate(id, date));\\n    }\\n    @ApiOperation(value = \"根据id查询课堂考勤信息\")\\n    @GetMapping(value = \"/get/{id}\")\\n    public Result<?> getAttendById(@ApiParam(value = \"根据id查询课堂考勤信息\", required = true) @PathVariable Long id) {\\n        return this.success(classAttendService.findAttendById(id));\\n    }\\n    @ApiOperation(value = \"根据gradeid查询课堂考勤信息\")\\n    @GetMapping(value = \"/get/pre\")\\n    public Result<?> getAttendPreById(Long gradeId, Long dateTime) {\\n        return this.success(classAttendService.getAttendPreById(gradeId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据Serial查询课堂考勤信息\")\\n    @GetMapping(value = \"/serial/pre\")\\n    public Result<?> getAttendPreBySerial(Long gradeId, Long dateTime, Integer serial) {\\n        return this.success(classAttendService.getAttendPreBySerial(gradeId, dateTime, serial));\\n    }\\n    @ApiOperation(value = \"根据年级id查询教师\")\\n    @GetMapping(value = \"/teacher/list\")\\n    public Result<?> getListByGradeId(Long gradeId) {\\n        return this.success(classAttendService.getListByGradeId(gradeId));\\n    }\\n    @ApiOperation(value = \"根据教师及年级id查询课程\")\\n    @GetMapping(value = \"/course/list\")\\n    public Result<?> getCouseListByGradeId(Long gradeId, String teaName) {\\n        return this.success(classAttendService.getCouseListByGradeId(gradeId, teaName));\\n    }\\n    @ApiOperation(value = \"根据教师课程信息\")\\n    @GetMapping(value = \"/teacher/course\")\\n    public Result<?> getTeacherCourseById(Long gradeId, String teaName, String courseName, Long dateTime) {\\n        return this.success(classAttendService.getClassAttendPreById(gradeId, teaName, courseName, dateTime));\\n    }\\n    @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/timeSlot/pre\")\\n    public Result<?> getAttendPreByTimeSlot(Long gradeId, Long dateTime, String timeSlot, String courseName, String teaName) {\\n        return this.success(classAttendService.getAttendPreByTimeSlot(gradeId, dateTime, timeSlot, courseName, teaName));\\n    }\\n    @ApiOperation(value = \"根据serial查询课堂考勤信息\")\\n    @GetMapping(value = \"/serial/list\")\\n    public Result<?> getAttendPreBySerialAndCourName(Long gradeId, Long dateTime, Integer serial, String courseTea) {\\n        return this.success(classAttendService.getAttendPreBySerialAndCourName(gradeId, dateTime, serial, courseTea));\\n    }\\n    @ApiOperation(value = \"根据分组id查询教室下拉列表\")\\n    @GetMapping(value = \"/classRoom/list\")\\n    public Result<?> getClassRoomByTeamId(Long teamId, Long dateTime) {\\n        List<String> list = classAttendService.getCurrentWeekClassRoomByTeamId(teamId, dateTime);\\n        ArrayList<String> listNew = new ArrayList<>();\\n        for (String s : list) {\\n            if (StringUtils.isNotEmpty(s)) {\\n                listNew.add(s.trim());\\n            }\\n        }\\n        Collections.sort(listNew);\\n        return this.success(listNew);\\n    }\\n    @ApiOperation(value = \"根据教室和时间查询课堂考勤信息\")\\n    @GetMapping(value = \"/classRoom/pre\")\\n    public Result<?> getAttendPreByClassRoom(Long teamId, String classRoom, Long dateTime) {\\n        return this.success(classAttendService.getAttendPreByClassRoom(teamId, classRoom, dateTime));\\n    }\\n    @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/classRoom/info\")\\n    public Result<?> getAttendPreByClassRoomInfo(String classRoom, Long dateTime, String timeSlot, String courseName, String teaName) {\\n        return this.success(classAttendService.getAttendPreByClassRoomInfo(classRoom, dateTime, timeSlot, courseName, teaName));\\n    }\\n    @ApiOperation(value = \"根据分组id查询课堂考勤信息\")\\n    @GetMapping(value = \"/teamId/pre\")\\n    public Result<?> getAttendPreByTeamId(Long teamId, Long dateTime) {\\n        return this.success(classAttendService.getAttendPreByTeamId(teamId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据年级id查询课堂考勤信息\")\\n    @GetMapping(value = \"/gradeId/pre\")\\n    public Result<?> getAttendPreByGradeId(Long gradeId, Long dateTime) {\\n        return this.success(classAttendService.getAttendPreByGradeId(gradeId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据班级id查询课堂考勤信息\")\\n    @GetMapping(value = \"/classId/pre\")\\n    public Result<?> getAttendPreByClassId(Long classId, Long dateTime) {\\n        return this.success(classAttendService.getAttendPreByClassId(classId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据分组id查询年级走班考勤情况\")\\n    @GetMapping(value = \"/teamId/classAttendpre\")\\n    public Result<?> getClassAttendPreByTeamId(Long teamId, Long dateTime, Integer timeSlot) {\\n        return this.success(classAttendService.getClassAttendPreByTeamId(teamId, dateTime, timeSlot));\\n    }\\n    @ApiOperation(value = \"根据年级id查询班级走班考勤情况\")\\n    @GetMapping(value = \"/gradeId/classAttendpre\")\\n    public Result<?> getClassAttendPreByGradeId(Long gradeId, Long dateTime, Integer timeSlot) {\\n        return this.success(classAttendService.getClassAttendPreByGradeId(gradeId, dateTime, timeSlot));\\n    }\\n    @ApiOperation(value = \"根据班级id查询学生走班考勤情况\")\\n    @GetMapping(value = \"/classId/classAttendpre\")\\n    public Result<?> getClassAttendPreByClassId(Long classId, Long dateTime, Integer timeSlot) {\\n        return this.success(classAttendService.getClassAttendPreByClassId(classId, dateTime, timeSlot));\\n    }\\n    @ApiOperation(value = \"根据年级id查询学生课程考勤情况\")\\n    @GetMapping(value = \"/gradeId/course/classAttendpre\")\\n    public Result<?> getClassAttendPreByCourseGradeId(Long gradeId, Long dateTime, Integer timeSlot) {\\n        return this.success(classAttendService.getClassAttendPreByCourseGradeId(gradeId, dateTime, timeSlot));\\n    }\\n    @ApiOperation(value = \"根据教室查看学生课程考勤情况\")\\n    @GetMapping(value = \"/classRooom/classAttendpre\")\\n    public Result<?> getClassAttendPreByClassRooom(String classRoom, String timeSlot, Long dateTime, String courseName, String teaName) {\\n        return this.success(classAttendService.getClassAttendPreByClassRooom(classRoom, timeSlot, dateTime, courseName, teaName));\\n    }\\n    @ApiOperation(value = \"任课教师权限下根据教师课程信息\")\\n    @GetMapping(value = \"/teacher/coursepre\")\\n    public Result<?> getClassAttendPreTByTeaName(Long teamId, Long gradeId, String teaName, Long dateTime) {\\n        return this.success(classAttendService.getClassAttendPreTByTeaName(teamId, gradeId, teaName, dateTime));\\n    }\\n    @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/timeSlot/classAttendpre\")\\n    public Result<?> getClassAttendAttendPreByTimeSlot(Long teamId, Long gradeId, Long dateTime, String timeSlot, String courseName, String teaName) {\\n        return this.success(classAttendService.getClassAttendAttendPreByTimeSlot(teamId, gradeId, dateTime, timeSlot, courseName, teaName));\\n    }\\n    @ApiOperation(value = \"根据courname查询课堂考勤信息\")\\n    @GetMapping(value = \"/courname/classAttendpre\")\\n    public Result<?> getPageList(String name, @ApiParam(value = \"分组id\") Long teamId, @ApiParam(value = \"年级id\") Long gradeId, @ApiParam(value = \"班级id\") Long classId, String teaName, Long dateTime, String orderSort, String orderAsc) {\\n        Pageable pageable = this.getPagination();\\n        Map<String, Object> data = classAttendService.getPageAttendList(name, teamId, gradeId, classId, teaName, dateTime, orderSort, orderAsc, pageable);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"根据courname查询课堂考勤信息\")\\n    @GetMapping(value = \"/courname/classAttendInfo\")\\n    public Result<?> getInfoList(Long teamId, String courseName, String classRoom, String teaName, Long dateTime) {\\n        Map<String, Object> data = classAttendService.getInfoLists(teamId, courseName, classRoom, teaName, dateTime);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"根据教查看课程信息\")\\n    @GetMapping(value = \"/teacher\")\\n    public Result<?> getTeacherById(Long teamId, String teaName, Long dateTime) {\\n        return this.success(classAttendService.getTeacherById(teamId, teaName, dateTime));\\n    }\\n    @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/timeSlot/preNew\")\\n    public Result<?> getAttendPreByTimeSlotNew(Long teamId, Long dateTime, String timeSlot, String courseName, String teaName) {\\n        return this.success(classAttendService.getAttendPreByTimeSlotNew(teamId, dateTime, timeSlot, courseName, teaName));\\n    }\\n    @ApiOperation(value = \"根据分组id查询课堂考勤信息\")\\n    @GetMapping(value = \"/teamId/preNew\")\\n    public Result<?> getAttendPreByTeamIdNew(Long teamId, Long dateTime, String classRoom, String teaName) {\\n        return this.success(classAttendService.getAttendPreByTeamIdNew(teamId, dateTime, classRoom, teaName));\\n    }\\n    @ApiOperation(value = \"根据年级id查询课堂考勤信息\")\\n    @GetMapping(value = \"/gradeId/preNew\")\\n    public Result<?> getAttendPreByGradeIdNew(Long gradeId, Long dateTime, String classRoom, String teaName) {\\n        return this.success(classAttendService.getAttendPreByGradeIdNew(gradeId, dateTime, classRoom, teaName));\\n    }\\n    @ApiOperation(value = \"根据班级id查询课堂考勤信息\")\\n    @GetMapping(value = \"/classId/preNew\")\\n    public Result<?> getAttendPreByClassIdNew(Long classId, Long dateTime, String classRoom, String teaName) {\\n        return this.success(classAttendService.getAttendPreByClassIdNew(classId, dateTime, classRoom, teaName));\\n    }\\n    @ApiOperation(value = \"根据班级id导出课堂考勤信息\")\\n    @PostMapping(value = \"/classId/exportExcel\")\\n    public void getAttendPreByClassIdExcel(Long classId, Long dateTime, HttpServletResponse response) {\\n        List<Map<String, Object>> data = classAttendService.getAttendPreByClassIdClassIdExcel(classId, dateTime);\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0, 0, 0, 9);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"备注：该模板是可创建用户导入的情况\");\\n        String[] title;\\n        title = new String[]{\"学号\", \"姓名\", \"手环号\", \"年级\", \"班级\", \"课程\", \"教室\", \"上课时间\", \"实际上课时间\", \"日期\"};\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < title.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title[i]);\\n        }\\n        if (data.size() != 0) {\\n            for (int j = 0; j < data.size(); j++) {\\n                nRow = sheet.createRow(j + 2);\\n              /*  for (int k = 0; k < studentKeyList.size(); k++) {\\n                    nCell = nRow.createCell(k);\\n                    nCell.setCellValue(getNullString(data.get(j).get(studentKeyList.get(k))));\\n                }*/\\n                nCell = nRow.createCell(0);\\n                nCell.setCellValue(data.get(j).get(\"stuNo\").toString());\\n                nCell = nRow.createCell(1);\\n                nCell.setCellValue(data.get(j).get(\"name\").toString());\\n                nCell = nRow.createCell(2);\\n                nCell.setCellValue(data.get(j).get(\"bandNo\").toString());\\n                nCell = nRow.createCell(3);\\n                nCell.setCellValue(data.get(j).get(\"gradeName\").toString());\\n                nCell = nRow.createCell(4);\\n                nCell.setCellValue(data.get(j).get(\"className\").toString());\\n                nCell = nRow.createCell(5);\\n                Object userName = data.get(j).get(\"courseName\");\\n                nCell.setCellValue(userName == null ? \"\" : userName.toString());\\n                nCell = nRow.createCell(6);\\n                Object seralNo = data.get(j).get(\"classRoom\");\\n                nCell.setCellValue(seralNo == null ? \"\" : seralNo.toString());\\n                nCell = nRow.createCell(7);\\n                nCell.setCellValue(data.get(j).get(\"timeSlot\").toString());\\n                nCell = nRow.createCell(8);\\n                if (data.get(j).get(\"startTime\") != null && data.get(j).get(\"endTime\") != null) {\\n                    nCell.setCellValue(DateToolUtil.getTimeToStringNew(data.get(j).get(\"startTime\").toString()) + \"-\" + DateToolUtil.getTimeToStringNew(data.get(j).get(\"endTime\").toString()));\\n                } else {\\n                    nCell.setCellValue(\"\");\\n                }\\n                nCell = nRow.createCell(9);\\n                nCell.setCellValue(data.get(j).get(\"attendDate\").toString());\\n            }\\n        }\\n        String excelName = \"课堂考勤信息表\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @ApiOperation(value = \"根据学生id查看课程信息\")\\n    @GetMapping(value = \"/getClassByStuId\")\\n    public Result<?> getClassByStuId(Long stuId, Long dateTime) {\\n        return this.success(classAttendService.getClassByStuId(stuId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据教查看课程信息\")\\n    @GetMapping(value = \"/getTeacherClass\")\\n    public Result<?> getTeacherClass(Long teamId, Long teaId, Long dateTime) {\\n        return this.success(classAttendService.getTeacherDateById(teamId, teaId, dateTime));\\n    }\\n    @ApiOperation(value = \"课堂考勤详情\")\\n    @GetMapping(value = \"/getAttendByTeacherInfo\")\\n    public Result<?> getAttendByTeacherInfo(Long teamId, Long teaId, String dateTime, Integer serial) {\\n        List<Map<String, Object>> data = classAttendService.getAttendByTeacherInfo(teamId, teaId, dateTime, serial);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"课堂考勤详情\")\\n    @GetMapping(value = \"/createUpdateCulumStu\")\\n    public Result<?> createUpdateCulumStu(Long dateTime) {\\n        culumWeekService.createUpdateCulumStu(dateTime);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"根据教室和时间查询课堂考勤信息\")\\n    @GetMapping(value = \"/classRoom/pres\")\\n    public Result<?> getAttendPreByClassRooms(Long teamId, Long roomId, Long dateTime) {\\n        return this.success(classAttendService.getAttendPreByClassRooms(teamId, roomId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据教查看课程信息\")\\n    @GetMapping(value = \"/teachers\")\\n    public Result<?> getTeachesById(Long teamId, Long teaId, Long dateTime) {\\n        return this.success(classAttendService.getTeacherByIds(teamId, teaId, dateTime));\\n    }\\n    @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/getInfo\")\\n    public Result<?> getAttendPreByInfo(Long roomId, Long dateTime, String timeSlot, String courseName, Long teaId) {\\n        return this.success(classAttendService.getAttendPreByInfo(roomId, dateTime, timeSlot, courseName, teaId));\\n    }\\n  /*  @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/createClassAttend\")\\n    public Result<?> createClassAttend(Long stuId,Long dateTime,String attendFile) {\\n        classAttendService.createClassAttend(stuId,DateToolUtil.dateTimeToDate(dateTime),attendFile);\\n        return this.success();\\n    }*/\\n    @ApiOperation(value = \"根据time_slot查询课堂考勤信息\")\\n    @GetMapping(value = \"/createClassAttendRedis\")\\n    public void createClassAttend() {\\n        System.out.println(\"4444\");\\n        redisCacheUtils.clearClassAttend();\\n        redisCacheUtils.cacheClassAttend();\\n    }\\n    @ApiOperation(value = \"导出教师课堂考勤统计\")\\n    @PostMapping(\"/exportExcelPre\")\\n    public void exportExcelCulumAttendList(Long roomId, Long dateTime, String timeSlot, String courseName, Long teaId, HttpServletResponse response) {\\n        List<Map<String, Object>> data = classAttendService.findAttendListByRoomIdAndDateInfo(roomId, timeSlot,dateTime, courseName, teaId);\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0, 0, 0, 10);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"上课出勤信息表\");\\n        String[] title;\\n        title = new String[]{\"学号\", \"姓名\", \"年级\", \"班级\", \"课程名称\",\"教师\", \"教室\", \"上课时间\",\"考勤时间\", \"状态\",\"日期\"};\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < title.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title[i]);\\n        }\\n        if (data.size() != 0) {\\n            for (int j = 0; j < data.size(); j++) {\\n                nCell = nRow.createCell(0);\\n                nCell.setCellValue(data.get(j).get(\"stuNo\").toString());\\n                nCell = nRow.createCell(1);\\n                nCell.setCellValue(data.get(j).get(\"name\").toString());\\n                nCell = nRow.createCell(2);\\n                nCell.setCellValue(data.get(j).get(\"gradeName\").toString());\\n                nCell = nRow.createCell(3);\\n                nCell.setCellValue(data.get(j).get(\"className\").toString());\\n                nCell = nRow.createCell(4);\\n                Object userName = data.get(j).get(\"courseName\");\\n                nCell.setCellValue(userName == null ? \"\" : userName.toString());\\n                nCell = nRow.createCell(5);\\n                Object teaName = data.get(j).get(\"teaName\");\\n                nCell.setCellValue(teaName == null ? \"\" : teaName.toString());\\n                nCell = nRow.createCell(6);\\n                Object seralNo = data.get(j).get(\"classRoom\");\\n                nCell.setCellValue(seralNo == null ? \"\" : seralNo.toString());\\n                nCell = nRow.createCell(7);\\n                nCell.setCellValue(data.get(j).get(\"timeSlot\").toString());\\n                nCell = nRow.createCell(8);\\n                if (data.get(j).get(\"startTime\") != null) {\\n                    nCell.setCellValue(DateToolUtil.getTimeToStringNew(data.get(j).get(\"startTime\").toString()));\\n                } else {\\n                    nCell.setCellValue(\"\");\\n                }\\n                nCell = nRow.createCell(9);\\n                Integer state = Integer.valueOf(data.get(j).get(\"state\").toString());\\n                nCell.setCellValue(state==1?\"出勤\":\"缺勤\");\\n                nCell = nRow.createCell(9);\\n                nCell.setCellValue(data.get(j).get(\"attendDate\").toString());\\n            }\\n        }\\n        String excelName = \"上课出勤信息表\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @ApiOperation(value = \"传输学生信息到摄像头\")\\n    @GetMapping(value = \"/sendImgInfo\")\\n    public Result<?> sendImgInfo(Long roomId, Long dateTime, String timeSlot, String courseName, Long teaId) {\\n        TCamera tCamera = iCameraService.selectCameraByRoomId(roomId);\\n        if(tCamera ==null){\\n            return this.failure(\"教室未绑定摄像头！\");\\n        }\\n        return this.success(classAttendService.sendImgInfo(roomId, dateTime, timeSlot, courseName, teaId));\\n    }\\n    @ApiOperation(value = \"教师修改考勤信息\")\\n    @PostMapping(value = \"/update\")\\n    public Result<?> updateClassAttend(@RequestBody ClassAttendStateDto classAttendStateDto) {\\n       if(classAttendStateDto.getState()==1 && classAttendStateDto.getDateTime()==null){\\n           return this.success(\"考勤时间不能为空\");\\n       }\\n       classAttendService.updateClassAttend(classAttendStateDto);\\n        return this.success();\\n    }\\n}\\n@Api(value = \"走班考勤考勤接口\", tags = {\"走班考勤管理相关接口\"})\\n@RestController\\n@RequestMapping(\"/classAttendStu\")\\npublic class ClassAttendStuController extends BaseController {\\n    @Autowired\\n    private ClassAttendStuService classAttendStuService;\\n    @Autowired\\n    private CulumPlanNewService culumPlanNewService;\\n    @Autowired\\n    private SynchronizationStudentService synchronizationStudentService;\\n    @ApiOperation(value = \"同步课程表\")\\n    @PostMapping(\"/synchron\")\\n    public Result<?> create(Long teamId,Integer planId) {\\n        synchronizationStudentService.getSynchronizationStudentByTeamIdAndPlanId(teamId,planId);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"同步学生课程表\")\\n    @PostMapping(\"/synchronStu\")\\n    public Result<?> synchronStu(Long teamId,Long stuId) {\\n        synchronizationStudentService.getSynchronizationStudentByTeamIdAndStuId(teamId,stuId);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"生成本周课程表\")\\n    @PostMapping(\"/createThisWeek\")\\n    public Result<?> createThisWeek(Integer planId) {\\n        classAttendStuService.createThisWeek(planId);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"生成学生本周课程表\")\\n    @PostMapping(\"/createThisWeekStu\")\\n    public Result<?> createThisStuWeek(Long stuId) {\\n        classAttendStuService.createThisWeekStu(stuId);\\n        return this.success();\\n    }\\n}\\n@Api(value = \"课程大类接口\", tags = {\"课程大类相关接口\"})\\n@RestController\\n@RequestMapping(\"/culum/type\")\\npublic class ClassTypeController extends BaseController {\\n    @Autowired\\n    private ClassTypeService classTypService;\\n    @Autowired\\n    private TeamService teamService;\\n    @ApiOperation(value = \"分页查询课程大类\")\\n    @GetMapping(\"/list\")\\n    public Result<?> getPageList(@ApiParam(value = \"分组id\") Long teamId,@ApiParam(value = \"名称\") String coursesName) {\\n        Pageable pageable = this.getPagination();\\n        Page<ClassType> data  = classTypService.getPageClassTypeList(teamId,coursesName,pageable);\\n        Page<ClassTypeDto> data2 = data.map(classTyp -> {\\n            ClassTypeDto dto = new ClassTypeDto();\\n            BeanUtils.copyProperties(classTyp,dto);\\n            if (classTyp.getTeamId() != null) {\\n                dto.setTeamName(teamService.findById(classTyp.getTeamId()).getName());\\n            }\\n            return dto;\\n        });\\n        return this.success(data2);\\n    }\\n    @ApiOperation(value = \"新增\")\\n    @PostMapping(\"/add\")\\n    public Result<?> add(@RequestBody ClassTypeRequest classTypeRequest) {\\n        List<ClassType> list = classTypService.findAllByName(classTypeRequest.getName(),classTypeRequest.getTeamId());\\n        if(list.size()>0){\\n            return this.failure(\"名称已存在\");\\n        }\\n        ClassType culumPlanNew = new ClassType();\\n        BeanUtils.copyProperties(classTypeRequest, culumPlanNew);\\n        classTypService.insert(culumPlanNew);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"修改\")\\n    @PostMapping(\"/update\")\\n    public Result<?> update(@RequestBody ClassTypeRequest classTypeRequest) {\\n        ClassType culumPlanNew = classTypService.findById(classTypeRequest.getId());\\n        if(culumPlanNew.getName().equals(classTypeRequest.getName())){\\n            return this.failure(\"名称未改动\");\\n        }\\n        List<ClassType> list = classTypService.findAllByName(classTypeRequest.getName(),classTypeRequest.getTeamId());\\n        if(list.size()>0){\\n            return this.failure(\"名称已存在\");\\n        }\\n        culumPlanNew.setCourseNames(classTypeRequest.getCourseNames());\\n        culumPlanNew.setName(classTypeRequest.getName());\\n        classTypService.update(culumPlanNew);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"删除\")\\n    @PostMapping(\"/delete\")\\n    public Result<?> delete(@RequestParam Integer id) {\\n        classTypService.deleteById(id);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"根据id查询课程大类信息\")\\n    @GetMapping(value = \"/get\")\\n    public Result<?> getClassTypeById(@RequestParam Integer id) {\\n        return this.success(classTypService.findById(id));\\n    }\\n    @ApiOperation(value = \"根据id查询大类下的课程信息\")\\n    @GetMapping(value = \"/course\")\\n    public Result<?> getCourseById(Integer id,Long teamId) {\\n        return this.success(classTypService.getCourseById(id,teamId));\\n    }\\n    @ApiOperation(value = \"根据id添加课程\")\\n    @PostMapping(value = \"/add/course\")\\n    public Result<?> saveCulumById(@RequestBody ClassTypeRequest classTypeRequest) {\\n        classTypService.saveCourseById(classTypeRequest);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"根据teamId查看所有分组下课程大类\")\\n    @GetMapping(value = \"/listSelect\")\\n    public Result<?> listSelect(Long teamId) {\\n        return this.success( classTypService.listSelect(teamId));\\n    }\\n}\\n@Api(value = \"课程接口\", tags = {\"课程相关接口\"})\\n@RestController\\n@RequestMapping(\"/culumAttend\")\\npublic class CulumAttendController extends BaseController {\\n    @Autowired\\n    private CulumAttendService culumAttendService;\\n    @ApiOperation(value = \"分页查询教师课堂考勤统计\")\\n    @GetMapping(\"/listPage\")\\n    public Result<?> getPageCulumAttendList(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) Long teaId,\\n            @RequestParam(required = false) String teaName,\\n            @RequestParam(required = false) String courseName,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime,\\n            @RequestParam(required = false) Integer type,\\n            @RequestParam(defaultValue = \"1\") Integer pageNumber,\\n            @RequestParam(defaultValue = \"10\") Integer pageSize,\\n            @RequestParam(required = false) String sortField,\\n            @RequestParam(required = false, defaultValue = \"asc\") String sortOrder) {\\n        Page<CulumAttend> page = new Page<>(pageNumber, pageSize);\\n        if (StringUtils.isNotBlank(sortField)) {\\n            boolean isDesc = \"desc\".equalsIgnoreCase(sortOrder);\\n            page.addOrder(new OrderItem(sortField, isDesc));\\n        }\\n        IPage<CulumAttend> data = culumAttendService.getPageCulumAttendList(\\n                page, teaId, courseName, startTime, endTime, teamId, type,teaName);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"查询科目堂出勤统计\")\\n    @GetMapping(\"/courseName/countPre\")\\n    public Result<?> getCulumAttendCourseNamePre(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) String courseName,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime) {\\n        Map<String,Object> data = culumAttendService.getCulumAttendCourseNamePre(courseName, startTime, endTime, teamId);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"查询科目堂出勤统计对比\")\\n    @GetMapping(\"/courseName/countPreTop\")\\n    public Result<?> getCulumAttendCourseNamePreTop(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) String courseName,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime) {\\n        Map<String,Object> data = culumAttendService.getCulumAttendCourseNamePreTop(courseName, startTime, endTime, teamId);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"查询教师课堂出勤统计\")\\n    @GetMapping(\"/countPre\")\\n    public Result<?> getCulumAttendPre(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) Long teaId,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime) {\\n        Map<String,Object> data = culumAttendService.getCulumAttendPre(teaId, startTime, endTime, teamId);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"查询教师出勤统计\")\\n    @GetMapping(\"/teacher/countPre\")\\n    public Result<?> getCulumAttendCourseNamePre(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) Long teaId,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime) {\\n        Map<String,Object> data = culumAttendService.getCulumAttendTeaPre(teaId, startTime, endTime, teamId);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"查询学生出勤统计\")\\n    @GetMapping(\"/stu/countPre\")\\n    public Result<?> getCulumAttendStuPre(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) Long stuId,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime) {\\n        Map<String,Object> data = culumAttendService.getCulumAttendStuPre(stuId, startTime, endTime, teamId);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"查询全校课堂出勤统计\")\\n    @GetMapping(\"/allPre\")\\n    public Result<?> getCulumAttendAllPre(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime) {\\n        Map<String,Object> data = culumAttendService.getCulumAttendAllPre( startTime, endTime, teamId);\\n        return this.success(data);\\n    }\\n    @Log(title = \"课堂出勤记录\",businessType = BusinessType.EXPORT)\\n    @ApiOperation(value = \"导出教师课堂考勤统计\")\\n    @PostMapping(\"/exportExcel\")\\n    public void exportExcelCulumAttendList(\\n            @RequestParam(required = false) Long teamId,\\n            @RequestParam(required = false) Long teaId,\\n            @RequestParam(required = false) String teaName,\\n            @RequestParam(required = false) String courseName,\\n            @RequestParam(required = false) Long startTime,\\n            @RequestParam(required = false) Long endTime,\\n            @RequestParam(required = false) Integer type, HttpServletResponse response) {\\n        List<CulumAttend> data = culumAttendService.getCulumAttendList(teaId, courseName, startTime, endTime, teamId, type,teaName);\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0, 0, 0, 8);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"课堂考勤信息表\");\\n        String[] title;\\n        title = new String[]{\"课程名称\", \"教师\", \"教室\", \"上课日期\", \"上课时间\",\"出勤率\", \"应到人数\", \"出勤人数\", \"缺勤人数\"};\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < title.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title[i]);\\n        }\\n        if (data.size() != 0) {\\n            for (int j = 0; j < data.size(); j++) {\\n                nRow = sheet.createRow(j + 2);\\n                nCell = nRow.createCell(0);\\n                nCell.setCellValue(data.get(j).getCourseName());\\n                nCell = nRow.createCell(1);\\n                nCell.setCellValue(data.get(j).getTeaName());\\n                nCell = nRow.createCell(2);\\n                nCell.setCellValue(data.get(j).getClassRoom());\\n                nCell = nRow.createCell(3);\\n                nCell.setCellValue(DateToolUtil.getDateTimeToString(data.get(j).getAttendDate()));\\n                nCell = nRow.createCell(4);\\n                nCell.setCellValue(data.get(j).getTimeSlot());\\n                nCell = nRow.createCell(5);\\n                nCell.setCellValue(data.get(j).getAttendPre());\\n                nCell = nRow.createCell(6);\\n                nCell.setCellValue(data.get(j).getStuSum());\\n                nCell = nRow.createCell(7);\\n                nCell.setCellValue(data.get(j).getAttendStu());\\n                nCell = nRow.createCell(8);\\n                nCell.setCellValue(data.get(j).getAttendNostu());\\n            }\\n        }\\n        String excelName = \"课堂考勤信息表\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @ApiOperation(value = \"教师修改考勤信息\")\\n    @GetMapping(value = \"/test\")\\n    public Result<?> updateTest() {\\n        DateToolUtil.dateToDate(System.currentTimeMillis());\\n        culumAttendService.updateClassAttend(241L,\"13:45-14:25\",DateToolUtil.dateToDate(new Date().getTime()),\"数学\",86L);\\n        return this.success();\\n    }\\n}\\n@Api(value = \"课程接口\", tags = {\"课程相关接口\"})\\n@RestController\\n@RequestMapping(\"/culum\")\\npublic class CulumNewController extends BaseController {\\n    @Autowired\\n    private CulumNewService culumNewService;\\n    @Autowired\\n    private CulumStuService culumStuService;\\n    @Autowired\\n    private AccountService accountService;\\n    @Autowired\\n    private CulumPlanNewService culumPlanService;\\n    @Autowired\\n    private StudentService studentService;\\n    @Autowired\\n    private ClassAttendNewService classAttendService;\\n    @Autowired\\n    private ClassTypeService classTypService;\\n    @PostMapping(\"/inExcel\")\\n    @ApiOperation(value = \"excel批量导入值班表\")\\n    public Result<?> inExcel(@RequestParam(value=\"file\",required=false) MultipartFile file, @RequestParam Integer id, HttpServletRequest request, HttpServletResponse response) throws Exception{\\n        if(file==null) {\\n            return null;\\n        }\\n        String name=file.getOriginalFilename();\\n        String filePath = request.getSession().getServletContext().getRealPath(\"/\") + \"upload\"+\"\\\\\\\\\"\\n                + file.getOriginalFilename();\\n        long size=file.getSize();\\n        if(name==null || (\"\").equals(name) && size==0) {\\n            return this.failure(\"导入失败\",500);\\n        }\\n        int i=0;\\n        try {\\n            InputStream in = file.getInputStream();\\n            i=culumNewService.inExcel(filePath,file,id);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n        if(i>0){\\n            return this.success();\\n        }else{\\n            return this.failure(\"导入失败\",500);\\n        }\\n    }\\n    @ApiOperation(value = \"根据id查询课程表信息\")\\n    @GetMapping(value = \"/get/{id}\")\\n    public Result<?> getCulumByPlanId(@ApiParam(value = \"根据id查询课程表信息\",required = true) @PathVariable Integer id) {\\n        return this.success(culumNewService.findCulumNewById(id));\\n    }\\n    @ApiOperation(value = \"根据id查询课程表信息\")\\n    @GetMapping(value = \"/get/culum\")\\n    public Result<?> getCulumById(Long gradeId,Long classId, Integer id,Integer serial,String week) {\\n        return this.success(culumNewService.getCulumById(gradeId,classId,id,serial,week));\\n    }\\n    @ApiOperation(value = \"根据id添加学生\")\\n    @PostMapping(value = \"/add/culum\")\\n    public Result<?> saveCulumById(@RequestBody CulumStuRequest culumStuRequest) {\\n        culumNewService.saveCulumById(culumStuRequest);\\n        return this.success();\\n    }\\n    @PostMapping(\"/inExcelStudent\")\\n    @ApiOperation(value = \"excel批量导入课程学生\")\\n    public Result<?> inExcelStudent(@RequestParam(value=\"file\",required=false) MultipartFile file, @RequestParam Integer id,@RequestParam Long gradeId,@RequestParam Integer serial,@RequestParam Integer planId,Integer stuNum,@RequestParam String week,HttpServletRequest request, HttpServletResponse response) throws Exception{\\n        if(file==null) {\\n            return null;\\n        }\\n        String name=file.getOriginalFilename();\\n        String filePath = request.getSession().getServletContext().getRealPath(\"/\") + \"upload\"+\"\\\\\\\\\"\\n                + file.getOriginalFilename();\\n        long size=file.getSize();\\n        if(name==null || (\"\").equals(name) && size==0) {\\n            return this.failure(\"导入失败\",500);\\n        }\\n        List<CulumStuAddRequest> list=new ArrayList<>();\\n        try {\\n            InputStream in = file.getInputStream();\\n            list=culumStuService.inExcelStudent(filePath,file,id,gradeId,serial,planId,stuNum,week);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n            return this.success(list);\\n    }\\n    @ApiOperation(value = \"根据id查询修改课程上课人数限制\")\\n    @PostMapping(value = \"/update/culum\")\\n    public Result<?> updateCulumById(@RequestParam String courseName,@RequestParam Long gradeId,@RequestParam String classRoom,@RequestParam Integer planId,@RequestParam String teaName,@RequestParam String stuNum) {\\n        return this.success(culumNewService.updateCulumById(courseName,gradeId,classRoom,planId,teaName,stuNum));\\n    }\\n    @ApiOperation(value = \"根据id查询课程上课人数限制\")\\n    @GetMapping(value = \"/get/culumNum\")\\n    public Result<?> getCulumNumById(Integer id) {\\n        return this.success(culumNewService.findById(id));\\n    }\\n    @PostMapping(\"/inExcelStudentNew\")\\n    @ApiOperation(value = \"excel批量导入课程学生\")\\n    public Result<?> inExcelStudentNew(@RequestParam(value=\"file\",required=false) MultipartFile file, @RequestParam String courseName,@RequestParam Long gradeId,@RequestParam String classRoom,@RequestParam Integer planId,@RequestParam String teaName,HttpServletRequest request, HttpServletResponse response) throws Exception{\\n        if(file==null) {\\n            return null;\\n        }\\n        String name=file.getOriginalFilename();\\n        String filePath = request.getSession().getServletContext().getRealPath(\"/\") + \"upload\"+\"\\\\\\\\\"\\n                + file.getOriginalFilename();\\n        long size=file.getSize();\\n        if(name==null || (\"\").equals(name) && size==0) {\\n            return this.failure(\"导入失败\",500);\\n        }\\n        List<CulumStuAddNewRequest> list=new ArrayList<>();\\n        try {\\n            InputStream in = file.getInputStream();\\n            list=culumStuService.inExcelStudentNew(filePath,file,courseName,gradeId,classRoom,planId,teaName);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n        return this.success(list);\\n    }\\n    @PostMapping(\"/inExcelNew\")\\n    @ApiOperation(value = \"excel批量导入值班表\")\\n    public Result<?> inExcelNew(@RequestParam(value=\"file\",required=false) MultipartFile file, @RequestParam Integer id,@RequestParam Integer rows,@RequestParam Integer type, HttpServletRequest request, HttpServletResponse response) throws Exception{\\n        if(file==null) {\\n            return null;\\n        }\\n        String name=file.getOriginalFilename();\\n        String filePath = request.getSession().getServletContext().getRealPath(\"/\") + \"upload\"+\"\\\\\\\\\"\\n                + file.getOriginalFilename();\\n        long size=file.getSize();\\n        if(name==null || (\"\").equals(name) && size==0) {\\n            return this.failure(\"导入失败\",500);\\n        }\\n        int i=0;\\n        i=culumNewService.inExcelNew(filePath,file,id,rows,type);\\n        try {\\n            InputStream in = file.getInputStream();\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n        if(i>0){\\n            return this.success();\\n        }else{\\n            return this.failure(\"导入失败\",500);\\n        }\\n    }\\n    @PostMapping(\"/inExcelStudentNewTwo\")\\n    @ApiOperation(value = \"excel批量导入课程学生新逻辑2\")\\n    public Result<?> inExcelStudentNewTwo(@RequestParam(value=\"file\",required=false) MultipartFile file, @RequestParam Long gradeId,@RequestParam Integer planId,HttpServletRequest request, HttpServletResponse response) throws Exception{\\n        if(file==null) {\\n            return null;\\n        }\\n        String name=file.getOriginalFilename();\\n        String filePath = request.getSession().getServletContext().getRealPath(\"/\") + \"upload\"+\"\\\\\\\\\"\\n                + file.getOriginalFilename();\\n        long size=file.getSize();\\n        if(name==null || (\"\").equals(name) && size==0) {\\n            return this.failure(\"导入失败\",500);\\n        }\\n        List<CulumStuAddTwoRequest> list=new ArrayList<>();\\n        try {\\n            InputStream in = file.getInputStream();\\n            list=culumStuService.inExcelStudentNewTwo(filePath,file,gradeId,planId);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n        return this.success(list);\\n    }\\n    @ApiOperation(value = \"导出课程表模板一 \")\\n    @GetMapping(\"/exportExcelOne\")\\n    public void downLoadPayerCreditInfoExcel(HttpServletResponse response) {\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,7);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"课程表样式一\");\\n        String[] title;\\n        title = new String[]{\"上课时间\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"};\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < title.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title[i]);\\n        }\\n        String[] title1;\\n        title1 = new String[]{\"第一节/9:00-9:45\", \"初中语文-13/江雪雯/301/32;初中语文-14/刘昭华/312A/32;初中语文-15/王然/303/32\", \"初中语文-13/江雪雯/301/32;初中语文-14/刘昭华/312A/32;初中语文-15/王然/303/32\", \"初中语文-13/江雪雯/301/32;初中语文-14/刘昭华/312A/32;初中语文-15/王然/303/32\", \"初中语文-13/江雪雯/301/32;初中语文-14/刘昭华/312A/32;初中语文-15/王然/303/32\", \"初中语文-13/江雪雯/301/32;初中语文-14/刘昭华/312A/32;初中语文-15/王然/303/32\"};\\n        nRow = sheet.createRow(2);\\n        for (int i = 0; i < title1.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title1[i]);\\n        }\\n        String excelName = \"课程表样式一\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @ApiOperation(value = \"导出课程表模板二 \")\\n    @GetMapping(\"/exportExcelTwo\")\\n    public void exportTwo(HttpServletResponse response) throws Exception {\\n        String[] tiles = {\"上课时间\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"};\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        HSSFCellStyle style = wb.createCellStyle();\\n        style.setWrapText(true);\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0, 0, 0, 7);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"课程表样式二\");\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < tiles.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(tiles[i]);\\n        }\\n        nRow = sheet.createRow( 3);\\n        nCell = nRow.createCell(0);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"第一节/9:00-9:40\");\\n        sheet.addMergedRegion(new CellRangeAddress( 3,  4, 0, 0));\\n        nCell = nRow.createCell(1);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(2);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(3);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(4);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(5);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nRow = sheet.createRow(4);\\n        nCell = nRow.createCell(1);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(2);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(3);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(4);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(5);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nRow = sheet.createRow( 5);\\n        nCell = nRow.createCell(0);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"第一节/9:00-9:40\");\\n        sheet.addMergedRegion(new CellRangeAddress( 5,  6, 0, 0));\\n        nCell = nRow.createCell(1);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(2);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(3);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(4);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(5);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nRow = sheet.createRow(6);\\n        nCell = nRow.createCell(1);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(2);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(3);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(4);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        nCell = nRow.createCell(5);\\n        nCell.setCellStyle(style);\\n        nCell.setCellValue(\"初中数学I-2/佘珺彤/308/19\");\\n        String excelName = \"课程表样式二\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @ApiOperation(value = \"导出学生选课模板一 \")\\n    @GetMapping(\"/exportExcelStudentOne\")\\n    public void exportExcelStudentOne(HttpServletResponse response) {\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,1);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"学生选课表样式\");\\n        String[] title;\\n        title = new String[]{\"学号\",\"姓名\"};\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < title.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title[i]);\\n        }\\n        String[] title1;\\n        title1 = new String[]{\"20210001\",\"张三\" };\\n        nRow = sheet.createRow(2);\\n        for (int i = 0; i < title1.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title1[i]);\\n        }\\n        String excelName = \"课程表样式\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @ApiOperation(value = \"导出学生选课模板二 \")\\n    @GetMapping(\"/exportExcelStudentTwo\")\\n    public void exportExcelStudentTwo(HttpServletResponse response) {\\n        HSSFWorkbook wb = new HSSFWorkbook();\\n        HSSFSheet sheet = wb.createSheet();\\n        CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,5);\\n        sheet.addMergedRegion(callRangeAddress);\\n        HSSFRow nRow = sheet.createRow(0);\\n        HSSFCell nCell = nRow.createCell(0);\\n        nCell.setCellValue(\"学生选课表样式\");\\n        String[] title;\\n        title = new String[]{\"课程名\",\"教师\",\"教室\",\"上课时间\",\"学生人数\",\"学生名单\"};\\n        nRow = sheet.createRow(1);\\n        for (int i = 0; i < title.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title[i]);\\n        }\\n        String[] title1;\\n        title1 = new String[]{\"地理-11\",\"刘艳\",\"206\",\"周一/9:00-9:40,周四/9:00-9:40,周五/9:50-10:30\",\"36\",\"测试1/20220163,测试2/20220242,测试3/20220341,测试4/19081403,测试5/20220300,测试6/20220210,测试7/20220393,测试8/20220360\" };\\n        nRow = sheet.createRow(2);\\n        for (int i = 0; i < title1.length; i++) {\\n            nCell = nRow.createCell(i);\\n            nCell.setCellValue(title1[i]);\\n        }\\n        String excelName = \"课程表样式\";\\n        try {\\n            ExelUtil.loadResponse(excelName, response, wb);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n    }\\n    @PostMapping(\"/chearStudentNew\")\\n    @ApiOperation(value = \"批量清除课程学生\")\\n    public Result<?> chearStudentNew(@RequestParam String courseName,@RequestParam String classRoom,@RequestParam Integer planId,@RequestParam String teaName){\\n        culumStuService.chearStudentNew(courseName,classRoom,planId,teaName);\\n        return this.success();\\n    }\\n    @PostMapping(\"/createClassStu\")\\n    @ApiOperation(value = \"立即生成学生本周课程表\")\\n    public Result<?> createNewBand(@RequestParam Integer planId) {\\n        SimpleDateFormat def = new SimpleDateFormat(\"yyyy-MM-dd\");\\n        Date date = new Date();\\n        Date createTime = null;\\n        try {\\n            createTime = def.parse(def.format(date));\\n        } catch (ParseException e) {\\n            e.printStackTrace();\\n        }\\n        Map<String, Date> map = DateToolUtil.findNewWeekDates(createTime);\\n        CulumPlanNew culumPlan = culumPlanService.findById(planId);\\n        if (culumPlan.getStartDate().getTime() <= createTime.getTime() && createTime.getTime() <= culumPlan.getEndDate().getTime()) {\\n            List<CulumNew> listC = culumNewService.findAllCulumNewByPlanId(culumPlan.getId());\\n            Long teamId = culumPlan.getTeamId();\\n            if (!listC.isEmpty()) {\\n                ExecutorService executorService = Executors.newFixedThreadPool(100); \\n                for (CulumNew culum : listC) {\\n                    List<Long> listStu1 = culumStuService.findStuIdsById(culum.getId());\\n                    if (!listStu1.isEmpty()) {\\n                        List<String> result = Arrays.asList(culum.getTimeSlot().split(\"-\"));\\n                        Date attendDate = map.get(culum.getWeek());\\n                        Date stateTime = DateToolUtil.getStringToDate(def.format(attendDate) + \" \" + result.get(0) + \":00\");\\n                        Date endTime = DateToolUtil.getStringToDate(def.format(attendDate) + \" \" + result.get(1) + \":00\");\\n                        String classRoom = culum.getClassRoom();\\n                        classAttendService.deleteByAttendDateAndTeamId(attendDate, culum.getTeamId(), culum.getSerial(), listStu1);\\n                        for (Long stuId : listStu1) {\\n                            executorService.submit(() -> {\\n                                Student student = studentService.findById(stuId);\\n                                ClassAttend classAttendence = new ClassAttend();\\n                                classAttendence.setAttendDate(attendDate);\\n                                classAttendence.setClassETime(endTime);\\n                                classAttendence.setClassRoom(classRoom);\\n                                classAttendence.setClassSTime(stateTime);\\n                                classAttendence.setName(student.getStuName());\\n                                classAttendence.setStudentId(student.getId());\\n                                classAttendence.setTeamId(teamId);\\n                                classAttendence.setState(0);\\n                                classAttendence.setTeaId(culum.getTeaId());\\n                                classAttendence.setRoomId(culum.getRoomId());\\n                                classAttendence.setSerial(culum.getSerial());\\n                                classAttendence.setTimeSlot(culum.getTimeSlot());\\n                                classAttendence.setCourseName(culum.getCourseName());\\n                                classAttendence.setBandNo(student.getSeralNo());\\n                                classAttendence.setStuNo(student.getStuNo());\\n                                classAttendence.setTeaName(culum.getTeaName());\\n                                classAttendence.setClassSTimes(new Date(stateTime.getTime() - 120000L));\\n                                classAttendence.setClassETimes(new Date(endTime.getTime() + 120000L));\\n                                classAttendence.setMajorId(student.getMajorId());\\n                                classAttendence.setMajorName(student.getMajorName());\\n                                classAttendence.setAttendType(0);\\n                                classAttendService.insert(classAttendence);\\n                            });\\n                        }\\n                    }\\n                }\\n            }\\n        }\\n        return success();\\n    }\\n    @PostMapping(\"/inExcelStudentTwo\")\\n    @ApiOperation(value = \"excel批量导入课程学生\")\\n    public Result<?> inExcelStudentTwo(@RequestParam(value=\"file\",required=false) MultipartFile file, @RequestParam String courseName,@RequestParam Long gradeId,@RequestParam String classRoom,@RequestParam Integer planId,@RequestParam String teaName,HttpServletRequest request, HttpServletResponse response) throws Exception{\\n        if(file==null) {\\n            return null;\\n        }\\n        String name=file.getOriginalFilename();\\n        String filePath = request.getSession().getServletContext().getRealPath(\"/\") + \"upload\"+\"\\\\\\\\\"\\n                + file.getOriginalFilename();\\n        long size=file.getSize();\\n        if(name==null || (\"\").equals(name) && size==0) {\\n            return this.failure(\"导入失败\",500);\\n        }\\n        List<CulumStuAddNewRequest> list=new ArrayList<>();\\n        try {\\n            InputStream in = file.getInputStream();\\n            list=culumStuService.inExcelStudentTwo(filePath,file,courseName,gradeId,classRoom,planId,teaName);\\n        } catch (IOException e) {\\n            e.printStackTrace();\\n        }\\n        return this.success(list);\\n    }\\n    @ApiOperation(value = \"根据课程大类id查询所有教师\")\\n    @GetMapping(value = \"/get/teacher\")\\n    public Result<?> getTeacherById(Integer id) {\\n        return this.success(classTypService.getTeacherById(id));\\n    }\\n    @ApiOperation(value = \"生成本周课程表\")\\n    @PostMapping(value = \"/generateWeekCurriculum\")\\n    public Result<?> generateWeekCurriculum(Long teamId,Long gradeId,Integer plainId) {\\n        List<CulumNew> findCulumNewList = culumNewService.findAllCulumNewByByTeamIdAndGradeIdAndPlainId(teamId,gradeId,plainId);\\n        if (!findCulumNewList.isEmpty()) {\\n            return this.failure(\"本周课程表已存在！\");\\n        }\\n        List<Map<String, Object>> attendList = classAttendService.getAttendByTeamIdAndGradeIdAndAttendDate(teamId, gradeId);\\n        if (attendList.isEmpty()) {\\n            return this.failure(\"学生课程表没有课程，请同步课程！\");\\n        }\\n        List<CulumNew> culumNewList = reflexObjList(attendList, CulumNew.class);\\n        ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10, 20, 1, TimeUnit.MINUTES, new LinkedBlockingDeque<>(culumNewList.size()));\\n        for (CulumNew culumNew : culumNewList) {\\n            culumNew.setPlanId(plainId);\\n            SaveEntityTask<CulumNew, CulumNewService> saveTask = new SaveEntityTask<>(culumNew, culumNewService);\\n            poolExecutor.submit(saveTask);\\n        }\\n        poolExecutor.shutdown();\\n        return this.success(\"生成本周课程表成功！\");\\n    }\\n    @ApiOperation(value = \"根据teamId查询课目\")\\n    @GetMapping(value = \"/courseName\")\\n    public Result<?> getCourseNameByTeamId(Long teamId) {\\n        return this.success(culumNewService.getCourseNameByTeamId(teamId));\\n    }\\n}\\n@Api(value = \"课程计划接口\", tags = {\"课程计划相关接口\"})\\n@RestController\\n@RequestMapping(\"/culum/planNew\")\\npublic class CulumPlanNewController extends BaseController {\\n    @Autowired\\n    private CulumPlanNewService culumPlanNewService;\\n    @ApiOperation(value = \"分页查询课程计划\")\\n    @GetMapping(    \"/list\")\\n    public Result<?> getPageList(@ApiParam(value = \"分组id\") Long teamId,@ApiParam(value = \"年级id\") Long gradeId) {\\n        Page<Map<String,Object>> data  = culumPlanNewService.getPageCulumPlanNewList(teamId, gradeId,this.getPagination());\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"启用课程计划\")\\n    @PostMapping(\"/start\")\\n    public Result<?> setStartUsing(@ApiParam(value = \"id\") Integer id,@ApiParam(value = \"状态\") Integer state) {\\n        culumPlanNewService.setStartUsing(id,state);\\n        return this.success();\\n    }\\n    @Log(title = \"学期课表\",businessType = BusinessType.INSERT)\\n    @ApiOperation(value = \"新增\")\\n    @PostMapping(\"/add\")\\n    public Result<?> add(@RequestBody CulumPlanNewRequest culumPlanNewRequest) {\\n        CulumPlanNew culumPlanNew = new CulumPlanNew();\\n        BeanUtils.copyProperties(culumPlanNewRequest, culumPlanNew);\\n        culumPlanNew.setState(0);\\n        CulumPlanNew save = culumPlanNewService.save(culumPlanNew);\\n        if(save !=null){\\n            return this.success(save.getId());\\n        }\\n        return this.failure();\\n    }\\n    @Log(title = \"学期课表\",businessType = BusinessType.UPDATE)\\n    @ApiOperation(value = \"修改\")\\n    @PostMapping(\"/update/{id}\")\\n    public Result<?> update(@PathVariable @ApiParam(value = \"id\", required = true) Integer id, @RequestBody CulumPlanNewRequest culumPlanNewRequest) {\\n        culumPlanNewService.updateCulumPlanNew(id,culumPlanNewRequest);\\n        return this.success();\\n    }\\n    @Log(title = \"学期课表\",businessType = BusinessType.DELETE)\\n    @ApiOperation(value = \"删除\")\\n    @PostMapping(\"/delete/{id}\")\\n    public Result<?> delete(@PathVariable @ApiParam(value = \"id\", required = true) Integer id) {\\n        culumPlanNewService.deleteById(id);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"根据id查询课程计划信息\")\\n    @GetMapping(value = \"/get/{id}\")\\n    public Result<?> getCulumPlanNewById(@ApiParam(value = \"课程计划id\",required = true) @PathVariable Integer id) {\\n        return this.success(culumPlanNewService.findById(id));\\n    }\\n}\\n@Api(value = \"课程接口\", tags = {\"课程相关接口\"})\\n@RestController\\n@RequestMapping(\"/culum/week\")\\npublic class CulumWeekController extends BaseController {\\n    @Autowired\\n    private CulumWeekService culumWeekService;\\n    @ApiOperation(value = \"分页查询周几修改节数列表\")\\n    @GetMapping(\"/list\")\\n    public Result<?> getPageList(Long gradeId,String week) {\\n        Pageable pageable = this.getPagination();\\n        Page<CulumWeek> data  = culumWeekService.getPageCulumWeekList(gradeId,week,pageable);\\n        return this.success(data);\\n    }\\n    @ApiOperation(value = \"新增\")\\n    @PostMapping(\"/add\")\\n    public Result<?> add(@RequestBody CulumWeekRequest culumWeekRequest) {\\n        CulumWeek culumWeek1 = culumWeekService.findAllByGradeIdAndWeek(culumWeekRequest.getSerial(),culumWeekRequest.getGradeId(),culumWeekRequest.getWeek());\\n        if(culumWeek1 !=null){\\n            return this.failure(\"该节数已存在\");\\n        }\\n        CulumWeek culumWeek = new CulumWeek();\\n        BeanUtils.copyProperties(culumWeekRequest, culumWeek);\\n        culumWeekService.insert(culumWeek);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"修改\")\\n    @PostMapping(\"/update\")\\n    public Result<?> update(@RequestBody CulumWeekRequest culumWeekRequest) {\\n        CulumWeek culumWeek1 = culumWeekService.findAllByGradeIdAndWeek(culumWeekRequest.getSerial(),culumWeekRequest.getGradeId(),culumWeekRequest.getWeek());\\n        if(culumWeek1 !=null && culumWeek1.getId() !=culumWeekRequest.getId()){\\n            return this.failure(\"该节数已存在\");\\n        }\\n        CulumWeek culumWeek = new CulumWeek();\\n        BeanUtils.copyProperties(culumWeekRequest, culumWeek);\\n        culumWeekService.update(culumWeek);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"修改启用状态\")\\n    @PostMapping(\"/updateState\")\\n    public Result<?> update(Integer id, Integer state) {\\n        CulumWeek culumWeek = culumWeekService.findById(id);\\n        culumWeek.setState(state);\\n        culumWeekService.update(culumWeek);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"删除\")\\n    @PostMapping(\"/delete\")\\n    public Result<?> delete(@RequestParam Integer id) {\\n        culumWeekService.deleteById(id);\\n        return this.success();\\n    }\\n    @ApiOperation(value = \"根据id查询\")\\n    @GetMapping(value = \"/get\")\\n    public Result<?> getClassTypeById(@RequestParam Integer id) {\\n        return this.success(culumWeekService.findById(id));\\n    }\\n}'"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('finally.txt', 'w', encoding='utf-8') as file:\n",
    "    file.write(result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "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": 2
}
