Browse Source

课表接口基本完成

soft5566 3 years ago
parent
commit
e674c9be7d

+ 6 - 0
pom.xml

@@ -26,6 +26,12 @@
 			<artifactId>jjwt</artifactId>
 			<artifactId>jjwt</artifactId>
 			<version>0.9.1</version>
 			<version>0.9.1</version>
 		</dependency>
 		</dependency>
+		<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
+		<dependency>
+			<groupId>javax.xml.bind</groupId>
+			<artifactId>jaxb-api</artifactId>
+			<version>2.3.1</version>
+		</dependency>
 		<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
 		<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
 		<dependency>
 		<dependency>
 			<groupId>com.baomidou</groupId>
 			<groupId>com.baomidou</groupId>

+ 166 - 14
src/main/java/com/ch/jiaoxuelou_houtai/controller/ApiController.java

@@ -1,27 +1,179 @@
 package com.ch.jiaoxuelou_houtai.controller;
 package com.ch.jiaoxuelou_houtai.controller;
 
 
-import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.ch.jiaoxuelou_houtai.core.ResponseResult;
 import com.ch.jiaoxuelou_houtai.core.ResponseResult;
-import com.ch.jiaoxuelou_houtai.service.ApiService;
+import com.ch.jiaoxuelou_houtai.entity.Course;
+import com.ch.jiaoxuelou_houtai.entity.User;
+import com.ch.jiaoxuelou_houtai.service.CourseService;
+import com.ch.jiaoxuelou_houtai.service.UserService;
+import com.ch.jiaoxuelou_houtai.util.DateTimeUtil;
+import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.swing.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
-import java.io.IOException;
 
 
 @RestController
 @RestController
-@RequestMapping("/thapi")
+@RequestMapping("/api")
 public class ApiController {
 public class ApiController {
 
 
     @Autowired
     @Autowired
-    private ApiService apiService;
+    private CourseService courseService;
+
+    /**
+     * 教室使用情况
+     * @param jsonObject
+     * @return
+     */
+    @RequestMapping(value = "/theClassrooms", method = RequestMethod.GET)
+    public ResponseResult getNumOfUsingClassRoom(@RequestBody JSONObject jsonObject) {
+        // 如:博学楼
+        String building = jsonObject.getString("building");
+        // 获取必要的参数
+        Map<String, String> params = getParams();
+        String schoolYear = params.get("schoolYear");
+        String semester = params.get("semester");
+        String weeks = params.get("weeks");
+        String week = params.get("week");
+
+        DateTimeUtil dateTimeUtil = new DateTimeUtil();
+        // 获取第几节课
+        String section;
+        if (dateTimeUtil.campareTime("8:50", "9:30"))
+            section = "1-";
+        else if (dateTimeUtil.campareTime("9:35", "10:15"))
+            section = "-2";
+        else if (dateTimeUtil.campareTime("10:30", "11:20"))
+            section = "3-";
+        else if (dateTimeUtil.campareTime("11:20", "12:05"))
+            section = "-4";
+        else if (dateTimeUtil.campareTime("14:00", "14:40"))
+            section = "5-";
+        else if (dateTimeUtil.campareTime("14:45", "15:25"))
+            section = "-6";
+        else if (dateTimeUtil.campareTime("15:40", "16:20"))
+            section = "7-";
+        else if (dateTimeUtil.campareTime("16:25", "17:05"))
+            section = "-8";
+        else if (dateTimeUtil.campareTime("18:30", "20:40"))
+            section = "9-";
+        else
+            section = "未使用";
+        // 获取正在使用的教室总数量
+        int numOfUsingClassRoom = courseService.getNumOfUsingClassRoom(building, schoolYear, semester, weeks, week, section);
+        // 获取教室总数量
+        int totalOfClassRoom = courseService.getTotalOfClassRoom(building);
+        // 使用中的教室百分比
+        double totalUsingPercent = (numOfUsingClassRoom / (double) totalOfClassRoom) * 100;
+        totalUsingPercent = (double) Math.round(totalUsingPercent * 100) / 100;
+        // 未使用的百分比
+        double totalUnusingPercent = ((totalOfClassRoom - numOfUsingClassRoom) / (double) totalOfClassRoom) * 100;
+        totalUnusingPercent = (double) Math.round(totalUnusingPercent * 100) / 100;
+
+        Map<String, Double> returnMap = new HashMap<>();
+        returnMap.put("total", (double) totalOfClassRoom);
+        returnMap.put("totalUsing", (double) numOfUsingClassRoom);
+        returnMap.put("totalUsingPercent", totalUsingPercent);
+        returnMap.put("totalUnusing", (double) (totalOfClassRoom - numOfUsingClassRoom));
+        returnMap.put("totalUnusingPercent", totalUnusingPercent);
+
+        return ResponseResult.success(returnMap);
+    }
+
+    /**
+     * 教室排课表
+     * @param jsonObject
+     * @return
+     */
+    @RequestMapping(value = "/listCourse", method = RequestMethod.GET)
+    public ResponseResult listCourse(@RequestBody JSONObject jsonObject) {
+        int pageNum = jsonObject.getInteger("pageNum");
+        int pageSize = jsonObject.getInteger("pageSize");
+        // 如:博学楼
+        String building = jsonObject.getString("building");
+        // 获取必要的参数
+        Map<String, String> params = getParams();
+        String schoolYear = params.get("schoolYear");
+        String semester = params.get("semester");
+        String weeks = params.get("weeks");
+        String week = params.get("week");
+
+        DateTimeUtil dateTimeUtil = new DateTimeUtil();
+        // 获取第几节课
+        String section;
+        if (dateTimeUtil.campareTime("0:00", "9:30"))
+            section = "1-";
+        else if (dateTimeUtil.campareTime("9:30", "10:15"))
+            section = "-2";
+        else if (dateTimeUtil.campareTime("10:15", "11:15"))
+            section = "3-";
+        else if (dateTimeUtil.campareTime("11:15", "12:05"))
+            section = "-4";
+        else if (dateTimeUtil.campareTime("12:05", "14:40"))
+            section = "5-";
+        else if (dateTimeUtil.campareTime("14:40", "15:25"))
+            section = "-6";
+        else if (dateTimeUtil.campareTime("15:25", "16:20"))
+            section = "7-";
+        else if (dateTimeUtil.campareTime("16:20", "17:05"))
+            section = "-8";
+        else
+            section = "9-";
 
 
-    @GetMapping("/api")
-    public ResponseResult callApi(@RequestParam(value = "page", defaultValue = "1") int page,
-                          @RequestParam(value = "rows", defaultValue = "10") int rows) throws IOException {
-        String url = "https://chtech.ncjti.edu.cn/air-conditioner-control/airManage/buildqueryEnergyRank.action";
-        return ResponseResult.success(JSON.parse(apiService.callApi(url, page, rows)));
+        // 执行查询获取结果
+        PageInfo<Course> courses = courseService.listCourse(pageNum, pageSize, building, schoolYear, semester, weeks, week, section);
+
+        return ResponseResult.success(courses);
     }
     }
+
+    private Map<String, String> getParams() {
+        Map<String, String> map = new HashMap<>();
+        // 获取开学时间
+        String termBeginsTime = courseService.getTermBeginsTime();
+
+        // 获取年月日周
+        DateTimeUtil dateTimeUtil = new DateTimeUtil();
+        Map<String, Integer> dateTime = dateTimeUtil.getDateTime(termBeginsTime);
+        int year = dateTime.get("year");
+        int month = dateTime.get("month");
+        int weeks = dateTime.get("weeks");
+        int week = dateTime.get("week");
+
+        // 获取学年、学期
+        String schoolYear, semester;
+        if (month >= 2 && month <= 7) {
+            schoolYear = (year - 1) + "-" + year;
+            semester = "2";
+        } else {
+            schoolYear = year + "-" + (year + 1);
+            semester = "1";
+        }
+
+        map.put("schoolYear", schoolYear);
+        map.put("semester", semester);
+        map.put("weeks", String.valueOf(weeks));
+        map.put("week", String.valueOf(week));
+
+        return map;
+    }
+
+    /**
+     * 调整开学日期,用于获取当前是第几周
+     * @param jsonObject
+     * @return
+     */
+    @RequestMapping(value = "/updateTermBeginsDate", method = RequestMethod.GET)
+    public ResponseResult updateTermBeginsDate(@RequestBody JSONObject jsonObject) {
+        String date = jsonObject.getString("termBeginsDate");
+        int row = courseService.updateTermBeginsDate(date);
+        if (row > 0)
+            return ResponseResult.success("开学日期更新成功!");
+
+        return ResponseResult.failed("开学日期更新失败!");
+    }
+
 }
 }

+ 6 - 7
src/main/java/com/ch/jiaoxuelou_houtai/controller/TestController.java

@@ -12,13 +12,12 @@ import java.util.Map;
 
 
 
 
 @RestController
 @RestController
-@RequestMapping("/api")
+@RequestMapping("/test")
 public class TestController {
 public class TestController {
 
 
     @Autowired
     @Autowired
     private UserService userService;
     private UserService userService;
 
 
-
     @RequestMapping(value = "/hello", method = RequestMethod.GET)
     @RequestMapping(value = "/hello", method = RequestMethod.GET)
     public ResponseResult hello(@RequestBody JSONObject jsonObject) {
     public ResponseResult hello(@RequestBody JSONObject jsonObject) {
         int pageNum = jsonObject.getInteger("pageNum");
         int pageNum = jsonObject.getInteger("pageNum");
@@ -27,7 +26,7 @@ public class TestController {
         return ResponseResult.success(userService.findAll(pageNum, pageSize));
         return ResponseResult.success(userService.findAll(pageNum, pageSize));
     }
     }
 
 
-    /*
+    /**
      * 第一种:以RequestParam接收
      * 第一种:以RequestParam接收
      * http://localhost:8080/test1?id=1
      * http://localhost:8080/test1?id=1
      * */
      * */
@@ -38,7 +37,7 @@ public class TestController {
         return ResponseResult.success(userService.findAll(pageNum, pageSize));
         return ResponseResult.success(userService.findAll(pageNum, pageSize));
     }
     }
 
 
-    /*
+    /**
      * 第二种:以实体类接收
      * 第二种:以实体类接收
      * {"username": "zhangsan","id":"2"}
      * {"username": "zhangsan","id":"2"}
      * */
      * */
@@ -47,7 +46,7 @@ public class TestController {
         System.out.println("username:" + user.getUsername());
         System.out.println("username:" + user.getUsername());
     }
     }
 
 
-    /*
+    /**
      * 第三种:以Map接收
      * 第三种:以Map接收
      * {"username": "zhangsan","id":"2"}
      * {"username": "zhangsan","id":"2"}
      * */
      * */
@@ -56,7 +55,7 @@ public class TestController {
         System.out.println("username:" + map.get("username"));
         System.out.println("username:" + map.get("username"));
     }
     }
 
 
-    /*
+    /**
      * 第四种:以List接收
      * 第四种:以List接收
      * [{"username": "zhangsan","id":"2"},{"username": "lisi","id":"1"}]
      * [{"username": "zhangsan","id":"2"},{"username": "lisi","id":"1"}]
      * */
      * */
@@ -67,7 +66,7 @@ public class TestController {
         }
         }
     }
     }
 
 
-    /*
+    /**
      * 第五种:以JSON对象接收
      * 第五种:以JSON对象接收
      * {"username": "zhangsan","id":"2","role":{"rolename":"admin"}}
      * {"username": "zhangsan","id":"2","role":{"rolename":"admin"}}
      * */
      * */

+ 3 - 1
src/main/java/com/ch/jiaoxuelou_houtai/mapper/UserMapper.java

@@ -1,14 +1,16 @@
 package com.ch.jiaoxuelou_houtai.mapper;
 package com.ch.jiaoxuelou_houtai.mapper;
 
 
 import com.ch.jiaoxuelou_houtai.entity.User;
 import com.ch.jiaoxuelou_houtai.entity.User;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Select;
 
 
 import java.util.List;
 import java.util.List;
 
 
+@Mapper
 public interface UserMapper {
 public interface UserMapper {
     @Select("SELECT * FROM user")
     @Select("SELECT * FROM user")
     List<User> findAll();
     List<User> findAll();
 
 
-    @Select("SELECT username, password FROM user WHERE username = #{username} limit 1")
+    @Select("SELECT username, password FROM user WHERE username=#{username} limit 1")
     List<User> login(User user);
     List<User> login(User user);
 }
 }

+ 9 - 0
src/main/java/com/ch/jiaoxuelou_houtai/mapper/VideoMapper.java

@@ -0,0 +1,9 @@
+package com.ch.jiaoxuelou_houtai.mapper;
+
+
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface VideoMapper {
+
+}

+ 23 - 0
src/main/java/com/ch/jiaoxuelou_houtai/service/CourseService.java

@@ -0,0 +1,23 @@
+package com.ch.jiaoxuelou_houtai.service;
+
+import com.ch.jiaoxuelou_houtai.entity.Course;
+import com.github.pagehelper.PageInfo;
+
+public interface CourseService {
+    // 排课表列表查询
+    PageInfo<Course> listCourse(int pageNum, int pageSize, String building, String schoolYear, String semester, String weeks, String week, String section);
+
+    // 获取学期开学日期
+    String getTermBeginsTime();
+
+    // 获取教学班人数
+    int getNumberOfClass(String classId);
+
+    // 获取正在使用的教室数量
+    int getNumOfUsingClassRoom(String building, String schoolYear, String semester, String weeks, String week, String section);
+
+    // 获取教室总数量
+    int getTotalOfClassRoom(String building);
+
+    int updateTermBeginsDate(String date);
+}

+ 89 - 0
src/main/java/com/ch/jiaoxuelou_houtai/service/impl/CourseServiceImpl.java

@@ -0,0 +1,89 @@
+package com.ch.jiaoxuelou_houtai.service.impl;
+
+import com.ch.jiaoxuelou_houtai.entity.Course;
+import com.ch.jiaoxuelou_houtai.mapper.CourseMapper;
+import com.ch.jiaoxuelou_houtai.service.CourseService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class CourseServiceImpl implements CourseService {
+
+    @Autowired
+    private CourseMapper courseMapper;
+
+    // 排课表列表查询
+    @Override
+    public PageInfo<Course> listCourse(int pageNum, int pageSize, String building, String schoolYear, String semester, String weeks, String week, String section) {
+        // 分页
+        PageHelper.startPage(pageNum, pageSize);
+        // 当前日期时间
+        LocalDateTime currentDateTime = LocalDateTime.now();
+        Timestamp timestamp = Timestamp.valueOf(currentDateTime);
+        // 查询数据库,获取结果
+        List<Course> courses = courseMapper.listCourse(building, schoolYear, semester, weeks, week, section);
+        for (Course course: courses) {
+            int numberOfClass = getNumberOfClass(course.getPushJxbid());
+            course.setClassSize(numberOfClass);
+            course.setTimestamp(timestamp);
+        }
+
+        return new PageInfo<>(courses);
+    }
+
+    // 获取学期开学日期
+    @Override
+    public String getTermBeginsTime() {
+        return courseMapper.getTermBeginsTime();
+    }
+
+    // 获取教学班人数
+    @Override
+    public int getNumberOfClass(String classId) {
+        int num = 0;
+        Integer numberOfClass = courseMapper.getNumberOfClass(classId);
+        if (numberOfClass != null)
+            num = numberOfClass;
+
+        return num;
+    }
+
+    // 获取正在使用的教室数量
+    @Override
+    public int getNumOfUsingClassRoom(String building, String schoolYear, String semester, String weeks, String week, String section) {
+        int num = 0;
+        Integer numOfUsingClassRoom = courseMapper.getNumOfUsingClassRoom(building, schoolYear, semester, weeks, week, section);
+        if (numOfUsingClassRoom != null)
+            num = numOfUsingClassRoom;
+
+        return num;
+    }
+
+    // 获取教室总数量
+    @Override
+    public int getTotalOfClassRoom(String building) {
+        int num = 0;
+        Integer totalOfClassRoom = courseMapper.getTotalOfClassRoom(building);
+        if (totalOfClassRoom != null)
+            num = totalOfClassRoom;
+
+        return num;
+    }
+
+    @Override
+    public int updateTermBeginsDate(String date) {
+        int num = 0;
+        Integer integer = courseMapper.updateTermBeginsDate(date);
+        if (integer != null)
+            num = integer;
+
+        return num;
+    }
+
+}

+ 85 - 0
src/main/java/com/ch/jiaoxuelou_houtai/util/DateTimeUtil.java

@@ -0,0 +1,85 @@
+package com.ch.jiaoxuelou_houtai.util;
+
+import java.time.*;
+import java.time.format.TextStyle;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public class DateTimeUtil {
+
+    /**
+     * 获取年月日时分秒周
+     *
+     * @param startDate
+     * @return
+     */
+    public Map<String, Integer> getDateTime(String startDate) {
+        LocalDateTime now = LocalDateTime.now();
+        int year = now.getYear();
+        int month = now.getMonthValue();
+        int day = now.getDayOfMonth();
+        int hour = now.getHour();
+        int minute = now.getMinute();
+        int second = now.getSecond();
+        Map<String, Integer> map = new HashMap<>();
+        map.put("year", year);
+        map.put("month", month);
+        map.put("day", day);
+        map.put("hour", hour);
+        map.put("minute", minute);
+        map.put("second", second);
+        // 星期几
+        String chineseDayOfWeek = now.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
+        if ("星期一".equals(chineseDayOfWeek))
+            map.put("week", 1);
+        else if ("星期二".equals(chineseDayOfWeek))
+            map.put("week", 2);
+        else if ("星期三".equals(chineseDayOfWeek))
+            map.put("week", 3);
+        else if ("星期四".equals(chineseDayOfWeek))
+            map.put("week", 4);
+        else if ("星期五".equals(chineseDayOfWeek))
+            map.put("week", 5);
+        else if ("星期六".equals(chineseDayOfWeek))
+            map.put("week", 6);
+        else
+            map.put("week", 7);
+
+        // 分割年月日
+        String[] sDate = startDate.split("-");
+        LocalDate firstDayOfSemester = LocalDate.of(Integer.parseInt(sDate[0]), Integer.parseInt(sDate[1]), Integer.parseInt(sDate[2]));
+        LocalDate dateToCheck = LocalDate.of(year, month, day);
+        // 根据两个时间算出第几周
+        int weeks = (int) ((dateToCheck.toEpochDay() - firstDayOfSemester.toEpochDay()) / 7) + 1;
+        map.put("weeks", weeks);
+
+        return map;
+    }
+
+
+    /**
+     * 比较时间
+     *
+     * @param stime
+     * @param etime
+     * @return
+     */
+    public boolean campareTime(String stime, String etime) {
+        LocalDateTime now = LocalDateTime.now();
+        int h = now.getHour();
+        int m = now.getMinute();
+
+        String[] sTime = stime.split(":");
+        String[] eTime = etime.split(":");
+
+        // 指定开始时间
+        LocalTime startTime = LocalTime.of(Integer.parseInt(sTime[0]), Integer.parseInt(sTime[1]));
+        // 指定结束时间
+        LocalTime endTime = LocalTime.of(Integer.parseInt(eTime[0]), Integer.parseInt(eTime[1]));
+        // 现在时间
+        LocalTime timeToCheck = LocalTime.of(h, m);
+
+        return timeToCheck.isAfter(startTime) && timeToCheck.isBefore(endTime);
+    }
+}

+ 12 - 4
src/main/resources/application.yml

@@ -3,14 +3,16 @@ server:
     context-path: /
     context-path: /
     session:
     session:
       timeout: 1440m
       timeout: 1440m
-  port: 8080
+  port: 8088
 
 
 
 
 spring:
 spring:
   datasource:
   datasource:
-    username: root
-    password: 123456
-    url: jdbc:mysql://localhost:3306/jiaoxuelou?allowPublicKeyRetrieval=true&useSSL=false&connectTimeout=10000&socketTimeout=10000&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+#    username: root
+#    password: 123456
+    username: memdb
+    password: 6RHZJYjrT83Ri88C
+    url: jdbc:mysql://172.16.20.77:3306/memdb?allowPublicKeyRetrieval=true&useSSL=false&connectTimeout=10000&socketTimeout=10000&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
     driver-class-name: com.mysql.cj.jdbc.Driver
     driver-class-name: com.mysql.cj.jdbc.Driver
     #spring官方推荐 性能最强,没有之一
     #spring官方推荐 性能最强,没有之一
     hikari:
     hikari:
@@ -25,6 +27,7 @@ spring:
   jackson:
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
     time-zone: GMT+8
+    default-property-inclusion: non_null
 
 
   devtools:
   devtools:
     restart:
     restart:
@@ -40,4 +43,9 @@ pagehelper:
   pageSizeZero: true
   pageSizeZero: true
 
 
 
 
+mybatis:
+  # spring boot集成mybatis的方式打印sql
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+