package com.jevon.controller; import com.alibaba.fastjson.JSONObject; import com.jevon.model.*; import com.jevon.service.*; import com.jevon.utils.HttpClientUtils; import com.jevon.vo.BaseVo; import com.jevon.vo.rep.InitRepVo; import com.jevon.vo.rep.ScheduleRepVo; import com.jevon.vo.req.CreateScheduleReqVo; import com.jevon.vo.req.InitTeacherCourseReqVo; import com.jevon.vo.req.ScheduleIdReqVo; import com.jevon.vo.req.UpdateScheduleReqVo; import com.sun.xml.bind.v2.runtime.unmarshaller.IntArrayData; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.*; @RestController @RequestMapping(value = "/init") @Api(value = "排课表") public class ScheduleInitController { @Autowired ClassModelService classModelService; @Autowired TeacherClassService teacherClassService; @Autowired CourseService courseService ; @Autowired TeacherService teacherService; @Autowired ScheduleService scheduleService; @Autowired TeacherCourseService teacherCourseService; @Autowired JoinClassService joinClassService; @Autowired ClassCourseService classCourseService; @Value("${remoting.url}") private String url ; @ApiOperation("创建排课计划 ") @RequestMapping(value = "createSchedule", method = RequestMethod.POST) public ScheduleRepVo createSchedule(HttpServletRequest request){ ScheduleRepVo baseVo = new ScheduleRepVo(); Schedule schedule = new Schedule(); schedule.setTeam(request.getParameter("team")); schedule.setScheduleName(request.getParameter("scheduleName")); schedule.setSchoolId(Integer.valueOf(request.getParameter("schoolId"))); Schedule temp = scheduleService.selectBySchoolAndTeam(schedule); if(temp == null){ scheduleService.insert(schedule); }else { baseVo.setSuccess(false); baseVo.setMessage("该学校该学年学期已创建了排课计划"); return baseVo; } temp = scheduleService.selectBySchoolAndTeam(schedule); initMessage(schedule.getSchoolId()); baseVo.setScheduleId(temp.getId()); return baseVo; } @ApiOperation("更新计划") @RequestMapping(value = "updateSchedule", method = RequestMethod.POST) public BaseVo updateSchedule(@RequestBody UpdateScheduleReqVo updateScheduleReqVo){ BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(updateScheduleReqVo.getScheduleId()); schedule.setScheduleName(updateScheduleReqVo.getScheduleName()); schedule.setTeam(updateScheduleReqVo.getTeam()); scheduleService.update(schedule); return baseVo; } @ApiOperation("复制") @RequestMapping(value = "copySchedule", method = RequestMethod.POST) public BaseVo copySchedule(@RequestBody UpdateScheduleReqVo updateScheduleReqVo){ BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(updateScheduleReqVo.getScheduleId()); if(schedule == null){ baseVo.setMessage("原始课表不存在"); baseVo.setSuccess(false); return baseVo; } Schedule temp = new Schedule(); temp.setSchoolId(schedule.getSchoolId()); temp.setTeam(updateScheduleReqVo.getTeam()); Schedule result = scheduleService.selectBySchoolAndTeam(temp); if(result != null){ baseVo.setMessage("该学年学期已创建课表计划"); baseVo.setSuccess(false); return baseVo; } temp.setScheduleName(updateScheduleReqVo.getScheduleName()); scheduleService.insert(temp); Date date = new Date(); //复制 classCourse teacherClass teacherCourse List classCourses = classCourseService.copyClassCourse(schedule.getSchoolId(),schedule.getTeam()); for(ClassCourse classCourse :classCourses){ classCourse.setSchoolId(temp.getSchoolId()); classCourse.setTeam(temp.getTeam()); classCourse.setCreateTime(date); } classCourseService.insertBatch(classCourses); TeacherClass teacherClass = new TeacherClass(); teacherClass.setSchoolId(schedule.getSchoolId()); teacherClass.setTeam(schedule.getTeam()); List teacherClasses = teacherClassService.selectBySchoolAndTeam(teacherClass); for(TeacherClass teacherClass1 :teacherClasses){ teacherClass1.setSchoolId(temp.getSchoolId()); teacherClass1.setTeam(temp.getTeam()); teacherClass1.setCreateTime(date); } teacherClassService.insertBatch(teacherClasses); List teacherCourses = teacherCourseService.selectBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); for(TeacherCourse teacherCourse : teacherCourses){ teacherCourse.setSchoolId(temp.getSchoolId()); teacherCourse.setTeam(temp.getTeam()); teacherCourse.setCreateTime(date); } teacherCourseService.insertBatch(teacherCourses); return baseVo; } @ApiOperation("删除排课计划") @RequestMapping(value = "deleteSchedule", method = RequestMethod.POST) public BaseVo deleteSchedule(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(scheduleIdReqVo.getScheduleId()); if(schedule == null){ baseVo.setSuccess(false); baseVo.setMessage("无排课计划"); return baseVo; } teacherCourseService.deleteBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); joinClassService.deleteBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); classCourseService.deleteBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); TeacherClass teacherClass = new TeacherClass(); teacherClass.setSchoolId(schedule.getSchoolId()); teacherClass.setTeam(schedule.getTeam()); teacherClassService.deleteBySchoolAndTeam(teacherClass); courseService.initSchoolId(schedule.getSchoolId()); scheduleService.deleteBySchedule(schedule.getId()); return baseVo; } @ApiOperation("获取基础信息") @RequestMapping(value = "getInitMessage", method = RequestMethod.POST) public InitRepVo getInitMessage(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ InitRepVo initRepVo = new InitRepVo(); Schedule schedule = scheduleService.selectById(scheduleIdReqVo.getScheduleId()); if(schedule == null){ initRepVo.setSuccess(false); initRepVo.setMessage("没有改排课计划"); return initRepVo; } List courses = courseService.selectBySchoolId2(schedule.getSchoolId()); List teachers = teacherService.selectBySchoolId(schedule.getSchoolId()); List classModels = classModelService.selectBySchoolId(schedule.getSchoolId()); initRepVo.setClassNumber(classModels.size()); initRepVo.setCourseNumber(courses.size()); initRepVo.setTeacherNumber(teachers.size()); return initRepVo; } @Transactional @ApiOperation("教师授课信息") @RequestMapping(value = "initTeacherCourse", method = RequestMethod.POST) public BaseVo initTeacherCourse(@RequestBody InitTeacherCourseReqVo initTeacherCourseReqVo){ BaseVo baseVo = new BaseVo(); Date date = new Date(); try{ TeacherClass temp = new TeacherClass(); Schedule schedule = scheduleService.selectById(initTeacherCourseReqVo.getScheduleId()); if(schedule != null && schedule.getSpeed() == 2) { temp.setSchoolId(schedule.getSchoolId()); temp.setTeam(schedule.getTeam()); List list = teacherClassService.selectBySchoolAndTeam(temp); if (list != null && list.size() > 0) { teacherClassService.deleteBySchoolAndTeam(temp); } String fileUrl = initTeacherCourseReqVo.getUrl(); File excelFile = new File(fileUrl); // 获得工作簿 Workbook workbook = null; String file = excelFile.getName(); InputStream inputStream = HttpClientUtils.GetFileInputStream(initTeacherCourseReqVo.getUrl()); if(inputStream == null){ baseVo.setMessage("路径不存在"); baseVo.setSuccess(false); return baseVo; } if (file.endsWith("xls")) { workbook = new HSSFWorkbook(inputStream); } else { workbook = new XSSFWorkbook(inputStream); } // 获得工作表 Sheet sheet = workbook.getSheetAt(0); int rows = sheet.getPhysicalNumberOfRows(); Map courseTeacherMap = new HashMap<>(); int courseNumber = 0; List teacherClasses = new ArrayList<>(); for (int i = 0; i < rows; i++) { // 获取第i行数据 Row sheetRow = sheet.getRow(i); if (i == 0) { //获取表头 int j = 1; while (sheetRow.getCell(2 * j) != null && StringUtils.isNotBlank(sheetRow.getCell(2 * j).getStringCellValue().trim())) { Course course = courseService.selectBySchoolIdAndCourseName(schedule.getSchoolId(), sheetRow.getCell(2 * j).getStringCellValue().trim()); courseTeacherMap.put(j, course); j++; } courseNumber = j - 1; } else { if(sheetRow.getCell(0) != null){ if (StringUtils.isBlank(sheetRow.getCell(0).getStringCellValue().trim())) { continue; } String className = sheetRow.getCell(1).getStringCellValue().trim(); ClassModel classModel = new ClassModel(); classModel.setSchoolId(schedule.getSchoolId()); classModel.setClassName(className); classModel.setGrade(sheetRow.getCell(0).getStringCellValue().trim()); ClassModel resultClass = classModelService.selectBySchoolIdAndClassNameAndGrade(classModel); for (int j = 1; j <= courseNumber; j++) { Cell cell = sheetRow.getCell(2 * j); if (cell != null) { cell.setCellType(CellType.STRING); String times = sheetRow.getCell(2 * j).getStringCellValue().trim(); if (StringUtils.isNotBlank((times))) { Course course = courseTeacherMap.get(j); String teacherName = sheetRow.getCell(2 * j + 1).getStringCellValue().trim(); Teacher teacher = new Teacher(); teacher.setTeacherName(teacherName); teacher.setSchoolId(schedule.getSchoolId()); Teacher resultTeacher = teacherService.selectByTeacher(teacher); if (course != null && resultTeacher != null) { TeacherClass teacherClass = new TeacherClass(); teacherClass.setTeam(schedule.getTeam()); teacherClass.setSchoolId(schedule.getSchoolId()); teacherClass.setCourseName(course.getCourseName()); teacherClass.setTeacherName(resultTeacher.getTeacherName()); teacherClass.setTeacherId(resultTeacher.getTeacherId()); teacherClass.setGrade(sheetRow.getCell(0).getStringCellValue().trim()); teacherClass.setClassId(resultClass.getClassId()); String[] msg = times.split("\\+"); if (msg.length > 1) { //有联课 teacherClass.setJoinTimes(Integer.valueOf(msg[1])); teacherClass.setTimes(Integer.valueOf(msg[1]) * 2 + Integer.valueOf(msg[0])); } else { teacherClass.setJoinTimes(0); teacherClass.setTimes(Integer.valueOf(msg[0])); } teacherClass.setStatus(0); teacherClass.setCreateTime(date); teacherClasses.add(teacherClass); } else { baseVo.setMessage("课程或老师缺失"); baseVo.setSuccess(false); return baseVo; } } } } } } } teacherClassService.insertBatch(teacherClasses); schedule.setSpeed(3); scheduleService.updateSpeed(schedule); }else { baseVo.setMessage("排课计划不存在或已导入"); baseVo.setSuccess(false); } }catch (Exception e){ e.printStackTrace(); baseVo.setSuccess(false); } return baseVo; } private void initMessage(int schoolId){ JSONObject teacherList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolTeacher?SchoolId="+schoolId); List openTeacherList = (List)teacherList.get("data"); List teachers = new ArrayList<>(); for(JSONObject json :openTeacherList){ Teacher teacher = new Teacher(); teacher.setSchoolId(Integer.valueOf(json.get("school_id").toString())); teacher.setTeacherId(Integer.valueOf(json.get("teacher_id").toString())); teacher.setTeacherName(json.get("name").toString()); teachers.add(teacher); } initTeacher(teachers,schoolId); JSONObject classList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolClass?SchoolId="+schoolId); List openClasses = (List)classList.get("data"); List classModels = new ArrayList<>(); for(JSONObject json :openClasses){ ClassModel classModel = new ClassModel(); classModel.setSchoolId(Integer.valueOf(json.get("school_id").toString())); classModel.setClassId(Integer.valueOf(json.get("class_id").toString())); classModel.setGrade(json.get("gardeName").toString()); classModel.setClassName(json.get("class_name").toString()); classModels.add(classModel); } initClass(classModels,schoolId); JSONObject courseList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolSubject?SchoolId="+schoolId); List openCourses = (List)courseList.get("data"); List courses = new ArrayList<>(); for(JSONObject json :openCourses){ Course course = new Course(); course.setSchoolId(Integer.valueOf(json.get("school_id").toString())); course.setCourseId(Integer.valueOf(json.get("subject_id").toString())); course.setCourseName(json.get("subject_name").toString()); course.setCourseType(0); courses.add(course); } initCourse(courses,schoolId); } public BaseVo initCourse(List courseList ,int schoolId){ BaseVo baseVo = new BaseVo(); courseService.deleteSchoolId(schoolId); for(Course course : courseList){ if(course.getCourseId() == 0 || StringUtils.isBlank(course.getCourseName())){ baseVo.setSuccess(false); baseVo.setMessage("缺少参数"); break; } } if(baseVo.isSuccess()){ courseService.insertBatch(courseList); baseVo.setSuccess(true); return baseVo; }else { return baseVo; } } public BaseVo initClass(List classList , int schoolId){ BaseVo baseVo = new BaseVo(); classModelService.deleteSchool(schoolId); for(ClassModel classModel : classList){ if(classModel.getClassId() == 0 || StringUtils.isBlank(classModel.getClassName()) || StringUtils.isBlank(classModel.getGrade()) || classModel.getSchoolId() == 0){ baseVo.setSuccess(false); baseVo.setMessage("缺少参数"); break; } } if(baseVo.isSuccess()){ classModelService.insertBatch(classList); baseVo.setSuccess(true); return baseVo; }else { return baseVo; } } public BaseVo initTeacher(List teacherList , int schoolId){ List result = new ArrayList<>(); for(Teacher teacher : teacherList){ boolean isExist = false; for(Teacher t : result){ if(t.getTeacherName().equals(teacher.getTeacherName())){ isExist = true; } } if(!isExist && StringUtils.isNotBlank(teacher.getTeacherName())){ result.add(teacher); } } BaseVo baseVo = new BaseVo(); teacherService.deleteSchool(schoolId); for(Teacher teacher : result){ if(teacher.getSchoolId() == 0 || StringUtils.isBlank(teacher.getTeacherName()) || teacher.getTeacherId() == 0){ baseVo.setSuccess(false); baseVo.setMessage("缺少参数"); break; } } if(baseVo.isSuccess()){ teacherService.insertBatch(result); baseVo.setSuccess(true); return baseVo; }else { return baseVo; } } }