diff --git a/.gitignore b/.gitignore index 549e00a..b3ed8f6 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ build/ ### VS Code ### .vscode/ +/web/node_modules/ diff --git a/pom.xml b/pom.xml index 54b4b8d..58c237d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,16 +5,16 @@ org.springframework.boot spring-boot-starter-parent - 3.1.0 - + 2.7.3 + com.sdut LabEx-Server - 0.0.1-SNAPSHOT + 0.0.1 LabEx-Server LabEx-Server - 17 + 8 diff --git a/src/main/java/com/sdut/labex/config/MVBConfig.java b/src/main/java/com/sdut/labex/config/MVBConfig.java index a302d4b..52c7749 100644 --- a/src/main/java/com/sdut/labex/config/MVBConfig.java +++ b/src/main/java/com/sdut/labex/config/MVBConfig.java @@ -21,6 +21,7 @@ public class MVBConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(tokenInterceptor) - .excludePathPatterns("/user/login/**"); + .excludePathPatterns("/login/**") + .excludePathPatterns("/register/**"); } } diff --git a/src/main/java/com/sdut/labex/controller/BorrowInfoController.java b/src/main/java/com/sdut/labex/controller/BorrowInfoController.java new file mode 100644 index 0000000..714193e --- /dev/null +++ b/src/main/java/com/sdut/labex/controller/BorrowInfoController.java @@ -0,0 +1,11 @@ +package com.sdut.labex.controller; + +/** + * File: BorrowInfoController + * Created: 2023/6/12 + * Author: springforest + * Description: + */ + +public class BorrowInfoController { +} diff --git a/src/main/java/com/sdut/labex/controller/ExperimentsController.java b/src/main/java/com/sdut/labex/controller/ExperimentsController.java new file mode 100644 index 0000000..f70b49a --- /dev/null +++ b/src/main/java/com/sdut/labex/controller/ExperimentsController.java @@ -0,0 +1,72 @@ +package com.sdut.labex.controller; + +import com.alibaba.fastjson.JSONObject; +import com.sdut.labex.entity.Experiment; +import com.sdut.labex.service.ExperimentsService; +import com.sdut.labex.utils.ResVo; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +/** + * File: ExpermimentsController + * Created: 2023/6/12 + * Author: springforest + * Description: + */ +@RestController +@CrossOrigin +public class ExperimentsController { + @Resource + private ExperimentsService experimentsService; + + @PostMapping("/experiment") + public ResVo applyExperiment(@RequestBody JSONObject jsonObject) { + Experiment experiment = new Experiment(); + experiment.setName(jsonObject.getString("name")); + experiment.setTime(jsonObject.getString("time")); + experiment.setDate(jsonObject.getDate("date")); + experiment.setClassName(jsonObject.getString("className")); + experiment.setRoomName(jsonObject.getString("roomName")); + //获取当前时间 + LocalDateTime currentDateTime = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String formattedDateTime = currentDateTime.format(formatter); + Date date = new Date(); + try { + date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(formattedDateTime); + } catch (ParseException e) { + e.printStackTrace(); + } + experiment.setApplyTime(date); + experiment.setStatus(0); + return experimentsService.applyExperiment(experiment); + } + + @PutMapping("/experiment") + public ResVo updateExperiment(@RequestBody JSONObject jsonObject) { + Experiment experiment = jsonObject.toJavaObject(Experiment.class); + return experimentsService.updateExperiment(experiment); + } + + @DeleteMapping("/experiment/{id}") + public ResVo deleteExperiment(@PathVariable String id) { + return experimentsService.deleteExperiment(id); + } + + @GetMapping("/unreviewed") + public ResVo getUnreviewedExperiments() { + return experimentsService.getUnreviewedExperiments(); + } + + @PutMapping("/isAdmitted/{id}{status}") + public ResVo isAdmit(@PathVariable Integer id, @PathVariable Integer status) { + return experimentsService.isAdmitted(id, status); + } + +} diff --git a/src/main/java/com/sdut/labex/controller/RoomController.java b/src/main/java/com/sdut/labex/controller/RoomController.java new file mode 100644 index 0000000..75207f3 --- /dev/null +++ b/src/main/java/com/sdut/labex/controller/RoomController.java @@ -0,0 +1,11 @@ +package com.sdut.labex.controller; + +/** + * File: RoomController + * Created: 2023/6/12 + * Author: springforest + * Description: + */ + +public class RoomController { +} diff --git a/src/main/java/com/sdut/labex/controller/TimeOptionController.java b/src/main/java/com/sdut/labex/controller/TimeOptionController.java new file mode 100644 index 0000000..ad6996d --- /dev/null +++ b/src/main/java/com/sdut/labex/controller/TimeOptionController.java @@ -0,0 +1,14 @@ +package com.sdut.labex.controller; + +import org.springframework.stereotype.Controller; + +/** + * File: TimeOptionController + * Created: 2023/6/12 + * Author: springforest + * Description: + */ +@Controller +public class TimeOptionController { + +} diff --git a/src/main/java/com/sdut/labex/controller/UserController.java b/src/main/java/com/sdut/labex/controller/UserController.java new file mode 100644 index 0000000..b2392ac --- /dev/null +++ b/src/main/java/com/sdut/labex/controller/UserController.java @@ -0,0 +1,39 @@ +package com.sdut.labex.controller; + +import com.alibaba.fastjson.JSONObject; +import com.sdut.labex.service.UserService; +import com.sdut.labex.utils.ResVo; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * File: UserController + * Created: 2023/6/12 + * Author: springforest + * Description: + */ +@RestController +@CrossOrigin +public class UserController { + @Resource + private UserService userService; + + @PostMapping("/login") + public ResVo login(@RequestBody JSONObject jsonObject) { + return userService.login(jsonObject.getString("id"), jsonObject.getString("password")); + } + + @PostMapping("/register") + public ResVo register(@RequestBody JSONObject jsonObject) { + return userService.register(jsonObject.toJavaObject(com.sdut.labex.entity.User.class)); + } + + @PutMapping("/changePassword") + public ResVo changePassword(@RequestBody JSONObject jsonObject) { + String id = jsonObject.getString("id"); + String oldPassword = jsonObject.getString("oldPassword"); + String newPassword = jsonObject.getString("newPassword"); + return userService.changePassword(id, oldPassword, newPassword); + } +} diff --git a/src/main/java/com/sdut/labex/entity/BorrowInfo.java b/src/main/java/com/sdut/labex/entity/BorrowInfo.java new file mode 100644 index 0000000..51ac19c --- /dev/null +++ b/src/main/java/com/sdut/labex/entity/BorrowInfo.java @@ -0,0 +1,58 @@ +package com.sdut.labex.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 借用记录 + * + * @TableName borrowInfo + */ +@TableName(value = "borrowInfo") +@Data +public class BorrowInfo implements Serializable { + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 借用人 + */ + private String name; + + /** + * 时间 + */ + private String time; + + /** + * 日期 + */ + private Date date; + + /** + * 申请时间 + */ + private Date applyDate; + + /** + * 是否通过(0未审,1通过,2拒绝) + */ + private Integer isAdmit; + + /** + * + */ + private Integer roomId; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/sdut/labex/entity/Experiment.java b/src/main/java/com/sdut/labex/entity/Experiment.java new file mode 100644 index 0000000..0b724da --- /dev/null +++ b/src/main/java/com/sdut/labex/entity/Experiment.java @@ -0,0 +1,63 @@ +package com.sdut.labex.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 实验 + * + * @TableName experiments + */ +@TableName(value = "experiments") +@Data +public class Experiment implements Serializable { + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 项目名 + */ + private String name; + + /** + * 上课时间 + */ + private String time; + + /** + * 上课日期 + */ + private Date date; + + /** + * 上课教室 + */ + private String roomName; + + /** + * 审核状态(0未审,1通过,2拒绝) + */ + private Integer status; + + /** + * 上课班级 + */ + private String className; + + /** + * 申请时间 + */ + private Date applyTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/sdut/labex/entity/Room.java b/src/main/java/com/sdut/labex/entity/Room.java new file mode 100644 index 0000000..92d3dca --- /dev/null +++ b/src/main/java/com/sdut/labex/entity/Room.java @@ -0,0 +1,42 @@ +package com.sdut.labex.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + * 房间 + * + * @TableName room + */ +@TableName(value = "room") +@Data +public class Room implements Serializable { + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 描述 + */ + private String description; + + /** + * 状态(1正常,2维护) + */ + private Integer status; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/sdut/labex/entity/TimeOption.java b/src/main/java/com/sdut/labex/entity/TimeOption.java new file mode 100644 index 0000000..b3ab1b8 --- /dev/null +++ b/src/main/java/com/sdut/labex/entity/TimeOption.java @@ -0,0 +1,32 @@ +package com.sdut.labex.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + * 时间 + * + * @TableName timeOption + */ +@TableName(value = "timeOption") +@Data +public class TimeOption implements Serializable { + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * + */ + private String name; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/sdut/labex/entity/User.java b/src/main/java/com/sdut/labex/entity/User.java index 2b0c1e3..377417e 100644 --- a/src/main/java/com/sdut/labex/entity/User.java +++ b/src/main/java/com/sdut/labex/entity/User.java @@ -1,13 +1,57 @@ package com.sdut.labex.entity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import java.io.Serializable; + /** * File: User * Created: 2023/6/11 * Author: springforest * Description: */ +@TableName(value = "user") @Data -public class User { +public class User implements Serializable { + /** + * id; + */ + @TableId + private String id; + + /** + * 用户名 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * 班级ID + */ + private String classId; + + /** + * 邮箱 + */ + private String email; + + /** + * 学院 + */ + private String department; + + /** + * 身份(student,teacher,admin) + */ + private String role; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; } diff --git a/src/main/java/com/sdut/labex/interceptor/TokenInterceptor.java b/src/main/java/com/sdut/labex/interceptor/TokenInterceptor.java index 479e9b2..49f75b3 100644 --- a/src/main/java/com/sdut/labex/interceptor/TokenInterceptor.java +++ b/src/main/java/com/sdut/labex/interceptor/TokenInterceptor.java @@ -4,14 +4,14 @@ import com.sdut.labex.entity.User; import com.sdut.labex.mapper.UserMapper; import com.sdut.labex.utils.JWTUtil; import com.sdut.labex.utils.UserHolder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * File: TokenInterceptor @@ -30,7 +30,7 @@ public class TokenInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token = request.getHeader(AUTH_HEADER); - if (request.getMethod().equals("OPTIONS")||request.getRequestURI().equals("/error")) { + if (request.getMethod().equals("OPTIONS") || request.getRequestURI().equals("/error")) { return true; } @@ -41,17 +41,17 @@ public class TokenInterceptor implements HandlerInterceptor { // 输出请求URI log.info("请求URI: " + request.getRequestURI()); // 输出token - if (token != null){ + if (token != null) { log.info("token: " + token); } log.info("----------------------------------------------------"); if (token != null && !JWTUtil.isExpired(token)) { - //todo:访问记录 User user = usersMapper.selectById(JWTUtil.decode(token).getClaim("id").asString()); if (user == null) { return false; } + //保存到本线程 UserHolder.saveUser(user); response.setStatus(HttpServletResponse.SC_OK); return true; diff --git a/src/main/java/com/sdut/labex/mapper/BorrowInfoMapper.java b/src/main/java/com/sdut/labex/mapper/BorrowInfoMapper.java new file mode 100644 index 0000000..6148d37 --- /dev/null +++ b/src/main/java/com/sdut/labex/mapper/BorrowInfoMapper.java @@ -0,0 +1,20 @@ +package com.sdut.labex.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sdut.labex.entity.BorrowInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author springforest + * @description 针对表【borrowInfo(借用记录)】的数据库操作Mapper + * @createDate 2023-06-12 08:07:15 + * @Entity com.sdut.labex.entity.Borrowinfo + */ +@Mapper +public interface BorrowInfoMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/sdut/labex/mapper/ExperimentsMapper.java b/src/main/java/com/sdut/labex/mapper/ExperimentsMapper.java new file mode 100644 index 0000000..9ef36fb --- /dev/null +++ b/src/main/java/com/sdut/labex/mapper/ExperimentsMapper.java @@ -0,0 +1,20 @@ +package com.sdut.labex.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sdut.labex.entity.Experiment; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author springforest + * @description 针对表【experiments(实验)】的数据库操作Mapper + * @createDate 2023-06-12 08:07:15 + * @Entity com.sdut.labex.entity.Experiments + */ +@Mapper +public interface ExperimentsMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/sdut/labex/mapper/RoomMapper.java b/src/main/java/com/sdut/labex/mapper/RoomMapper.java new file mode 100644 index 0000000..4770416 --- /dev/null +++ b/src/main/java/com/sdut/labex/mapper/RoomMapper.java @@ -0,0 +1,20 @@ +package com.sdut.labex.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sdut.labex.entity.Room; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author springforest + * @description 针对表【room(房间)】的数据库操作Mapper + * @createDate 2023-06-12 08:07:15 + * @Entity com.sdut.labex.entity.Room + */ +@Mapper +public interface RoomMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/sdut/labex/mapper/TimeOptionMapper.java b/src/main/java/com/sdut/labex/mapper/TimeOptionMapper.java new file mode 100644 index 0000000..d826a1e --- /dev/null +++ b/src/main/java/com/sdut/labex/mapper/TimeOptionMapper.java @@ -0,0 +1,20 @@ +package com.sdut.labex.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sdut.labex.entity.TimeOption; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author springforest + * @description 针对表【timeOption(时间)】的数据库操作Mapper + * @createDate 2023-06-12 08:07:15 + * @Entity com.sdut.labex.entity.Timeoption + */ +@Mapper +public interface TimeOptionMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/sdut/labex/service/BorrowInfoService.java b/src/main/java/com/sdut/labex/service/BorrowInfoService.java new file mode 100644 index 0000000..2cfecad --- /dev/null +++ b/src/main/java/com/sdut/labex/service/BorrowInfoService.java @@ -0,0 +1,13 @@ +package com.sdut.labex.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdut.labex.entity.BorrowInfo; + +/** + * @author springforest + * @description 针对表【borrowInfo(借用记录)】的数据库操作Service + * @createDate 2023-06-12 08:07:15 + */ +public interface BorrowInfoService extends IService { + +} diff --git a/src/main/java/com/sdut/labex/service/ExperimentsService.java b/src/main/java/com/sdut/labex/service/ExperimentsService.java new file mode 100644 index 0000000..9e9705f --- /dev/null +++ b/src/main/java/com/sdut/labex/service/ExperimentsService.java @@ -0,0 +1,26 @@ +package com.sdut.labex.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdut.labex.entity.Experiment; +import com.sdut.labex.utils.ResVo; + +/** + * @author springforest + * @description 针对表【experiments(实验)】的数据库操作Service + * @createDate 2023-06-12 08:07:15 + */ +public interface ExperimentsService extends IService { + public ResVo applyExperiment(Experiment experiment); + + public ResVo deleteExperiment(String id); + + public ResVo updateExperiment(Experiment experiment); + + public ResVo getExperiment(String id); + + public ResVo getExperiments(); + + public ResVo getUnreviewedExperiments(); + + public ResVo isAdmitted(int id, int status); +} diff --git a/src/main/java/com/sdut/labex/service/RoomService.java b/src/main/java/com/sdut/labex/service/RoomService.java new file mode 100644 index 0000000..1a1d0dc --- /dev/null +++ b/src/main/java/com/sdut/labex/service/RoomService.java @@ -0,0 +1,13 @@ +package com.sdut.labex.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdut.labex.entity.Room; + +/** + * @author springforest + * @description 针对表【room(房间)】的数据库操作Service + * @createDate 2023-06-12 08:07:15 + */ +public interface RoomService extends IService { + +} diff --git a/src/main/java/com/sdut/labex/service/TimeOptionService.java b/src/main/java/com/sdut/labex/service/TimeOptionService.java new file mode 100644 index 0000000..1b2029c --- /dev/null +++ b/src/main/java/com/sdut/labex/service/TimeOptionService.java @@ -0,0 +1,13 @@ +package com.sdut.labex.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdut.labex.entity.TimeOption; + +/** + * @author springforest + * @description 针对表【timeOption(时间)】的数据库操作Service + * @createDate 2023-06-12 08:07:15 + */ +public interface TimeOptionService extends IService { + +} diff --git a/src/main/java/com/sdut/labex/service/UserService.java b/src/main/java/com/sdut/labex/service/UserService.java index 01b6416..a710f54 100644 --- a/src/main/java/com/sdut/labex/service/UserService.java +++ b/src/main/java/com/sdut/labex/service/UserService.java @@ -1,5 +1,9 @@ package com.sdut.labex.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdut.labex.entity.User; +import com.sdut.labex.utils.ResVo; + /** * File: UserService * Created: 2023/6/11 @@ -7,5 +11,10 @@ package com.sdut.labex.service; * Description: */ -public interface UserService { +public interface UserService extends IService { + public ResVo login(String id, String password); + + public ResVo register(User user); + + public ResVo changePassword(String id, String oldPassword, String newPassword); } diff --git a/src/main/java/com/sdut/labex/service/impl/BorrowInfoServiceImpl.java b/src/main/java/com/sdut/labex/service/impl/BorrowInfoServiceImpl.java new file mode 100644 index 0000000..5377f66 --- /dev/null +++ b/src/main/java/com/sdut/labex/service/impl/BorrowInfoServiceImpl.java @@ -0,0 +1,22 @@ +package com.sdut.labex.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdut.labex.entity.BorrowInfo; +import com.sdut.labex.mapper.BorrowInfoMapper; +import com.sdut.labex.service.BorrowInfoService; +import org.springframework.stereotype.Service; + +/** + * @author springforest + * @description 针对表【borrowInfo(借用记录)】的数据库操作Service实现 + * @createDate 2023-06-12 08:07:15 + */ +@Service +public class BorrowInfoServiceImpl extends ServiceImpl + implements BorrowInfoService { + +} + + + + diff --git a/src/main/java/com/sdut/labex/service/impl/ExperimentsServiceImpl.java b/src/main/java/com/sdut/labex/service/impl/ExperimentsServiceImpl.java new file mode 100644 index 0000000..1ce29e5 --- /dev/null +++ b/src/main/java/com/sdut/labex/service/impl/ExperimentsServiceImpl.java @@ -0,0 +1,97 @@ +package com.sdut.labex.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdut.labex.entity.Experiment; +import com.sdut.labex.mapper.ExperimentsMapper; +import com.sdut.labex.service.ExperimentsService; +import com.sdut.labex.utils.ResVo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * @author springforest + * @description 针对表【experiments(实验)】的数据库操作Service实现 + * @createDate 2023-06-12 08:07:15 + */ +@Service +public class ExperimentsServiceImpl extends ServiceImpl + implements ExperimentsService { + @Resource + private ExperimentsMapper experimentsMapper; + + @Override + public ResVo applyExperiment(Experiment experiment) { + try { + experimentsMapper.insert(experiment); + } catch (Exception e) { + e.printStackTrace(); + return ResVo.error(); + } + return ResVo.ok(); + } + + @Override + public ResVo deleteExperiment(String id) { + if (experimentsMapper.selectById(id) == null) + return ResVo.error("该实验不存在"); + + try { + experimentsMapper.deleteById(id); + } catch (Exception e) { + e.printStackTrace(); + return ResVo.error(); + } + return ResVo.ok(); + } + + @Override + public ResVo updateExperiment(Experiment experiment) { + if (experimentsMapper.selectById(experiment.getId()) == null) + return ResVo.error("该实验不存在"); + + try { + experimentsMapper.updateById(experiment); + } catch (Exception e) { + e.printStackTrace(); + return ResVo.error(); + } + return ResVo.ok(); + } + + @Override + public ResVo getExperiment(String id) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("id", id); + + Experiment experiment = experimentsMapper.selectOne(queryWrapper); + if (experiment == null) + return ResVo.error("该实验不存在"); + Map map = new HashMap<>(); + map.put("experiment", experiment); + return ResVo.ok(map); + + } + + @Override + public ResVo getExperiments() { + + } + + @Override + public ResVo getUnreviewedExperiments() { + return null; + } + + @Override + public ResVo isAdmitted(int id, int status) { + return null; + } +} + + + + diff --git a/src/main/java/com/sdut/labex/service/impl/RoomServiceImpl.java b/src/main/java/com/sdut/labex/service/impl/RoomServiceImpl.java new file mode 100644 index 0000000..47ab6ba --- /dev/null +++ b/src/main/java/com/sdut/labex/service/impl/RoomServiceImpl.java @@ -0,0 +1,22 @@ +package com.sdut.labex.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdut.labex.entity.Room; +import com.sdut.labex.mapper.RoomMapper; +import com.sdut.labex.service.RoomService; +import org.springframework.stereotype.Service; + +/** + * @author springforest + * @description 针对表【room(房间)】的数据库操作Service实现 + * @createDate 2023-06-12 08:07:15 + */ +@Service +public class RoomServiceImpl extends ServiceImpl + implements RoomService { + +} + + + + diff --git a/src/main/java/com/sdut/labex/service/impl/TimeOptionServiceImpl.java b/src/main/java/com/sdut/labex/service/impl/TimeOptionServiceImpl.java new file mode 100644 index 0000000..c9645cc --- /dev/null +++ b/src/main/java/com/sdut/labex/service/impl/TimeOptionServiceImpl.java @@ -0,0 +1,22 @@ +package com.sdut.labex.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdut.labex.entity.TimeOption; +import com.sdut.labex.mapper.TimeOptionMapper; +import com.sdut.labex.service.TimeOptionService; +import org.springframework.stereotype.Service; + +/** + * @author springforest + * @description 针对表【timeOption(时间)】的数据库操作Service实现 + * @createDate 2023-06-12 08:07:15 + */ +@Service +public class TimeOptionServiceImpl extends ServiceImpl + implements TimeOptionService { + +} + + + + diff --git a/src/main/java/com/sdut/labex/service/impl/UserServiceImpl.java b/src/main/java/com/sdut/labex/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..149a38f --- /dev/null +++ b/src/main/java/com/sdut/labex/service/impl/UserServiceImpl.java @@ -0,0 +1,79 @@ +package com.sdut.labex.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdut.labex.entity.User; +import com.sdut.labex.mapper.UserMapper; +import com.sdut.labex.service.UserService; +import com.sdut.labex.utils.JWTUtil; +import com.sdut.labex.utils.ResVo; +import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * File: UserServiceImpl + * Created: 2023/6/11 + * Author: springforest + * Description: + */ +@Service +public class UserServiceImpl extends ServiceImpl + implements UserService { + + @Resource + private UserMapper userMapper; + + @Override + public ResVo login(String id, String password) { + User user = userMapper.selectById(id); + if (user == null) { + return ResVo.error("用户不存在"); + } + + + if (password.equals(user.getPassword()) || DigestUtils.md5DigestAsHex(password.getBytes()).equals(user.getPassword())) { + Map map = new HashMap<>(); + map.put("id", user.getId()); + map.put("role", user.getRole()); + map.put("username", user.getUsername()); + map.put("classId", user.getClassId()); + map.put("department", user.getDepartment()); + String token = JWTUtil.getTokenByMap(map); + map.put("token", token); + return ResVo.ok(map); + } else { + return ResVo.error("密码错误"); + } + } + + @Override + public ResVo register(User user) { + try { + user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes())); + userMapper.insert(user); + } catch (Exception e) { + e.printStackTrace(); + return ResVo.error(); + } + return ResVo.ok(); + } + + @Override + public ResVo changePassword(String id, String oldPassword, String newPassword) { + User user = userMapper.selectById(id); + if (user == null) { + return ResVo.error("用户不存在"); + } + + if (oldPassword.equals(user.getPassword()) || DigestUtils.md5DigestAsHex(oldPassword.getBytes()).equals(user.getPassword())) { + user.setPassword(DigestUtils.md5DigestAsHex(newPassword.getBytes())); + userMapper.updateById(user); + } else { + return ResVo.error("密码错误"); + } + return ResVo.ok(); + } +} diff --git a/src/main/java/com/sdut/labex/utils/ExcelUtils.java b/src/main/java/com/sdut/labex/utils/ExcelUtils.java new file mode 100644 index 0000000..1743be3 --- /dev/null +++ b/src/main/java/com/sdut/labex/utils/ExcelUtils.java @@ -0,0 +1,131 @@ +package com.sdut.labex.utils; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DecimalFormat; + +/** + * File: ExcelUtils + * Created: 2023/6/12 + * Author: springforest + * Description: + */ + + +public class ExcelUtils { + public Workbook workbook; + public Sheet sheet; + public boolean isEmpty;//判断文件是不是有内容 + public int totalRows;//总行数/最后一行的位置 + + public ExcelUtils(File file, String fileType) throws IOException { + this.isEmpty = false; + this.createWorkbook(file, fileType); + } + + private void createWorkbook(File excelFile, String fileType) throws IOException { + + FileInputStream fileInputStream = null; + + try { + fileInputStream = new FileInputStream(excelFile); + if (fileType.equalsIgnoreCase("xls")) { + this.workbook = new HSSFWorkbook(fileInputStream); //生成.xls的excel + } else if (fileType.equalsIgnoreCase("xlsx")) { + this.workbook = new XSSFWorkbook(fileInputStream); //生成.xlsx的excel + } + if (this.workbook == null) { + this.isEmpty = true; + return; + } + + this.checkWorkbook(this.workbook); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (workbook != null) { + workbook.close(); //关闭流 + } + if (fileInputStream != null) { + fileInputStream.close(); //关闭流 + } + } + } + + //读取数据 + public void checkWorkbook(Workbook workbook) { + + int sheetNum = 0; + this.sheet = workbook.getSheetAt(sheetNum); // 获取sheet + + // 校验sheet是否合法 + if (sheet == null) { + this.isEmpty = true; + return; + } + + Row firstRow = sheet.getRow(sheet.getFirstRowNum()); // 获取第一行,一般是表头 + + if (null == firstRow) { + this.isEmpty = true; + return; + } + + this.totalRows = sheet.getPhysicalNumberOfRows();//获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m; + } + + //读取Cell内容并转换成String + public static String getCellToString(Cell cell) { + if (cell == null) { + return null; + } + String content = null; + try { + switch (cell.getCellType()) { + case NUMERIC: //数字或者时间 + Double doubleValue = cell.getNumericCellValue(); + // todo:格式化科学计数法,取一位整数(待定) + DecimalFormat decimalFormat = new DecimalFormat("0"); + content = decimalFormat.format(doubleValue); + break; + case STRING: //字符串 + content = cell.getStringCellValue(); + break; + case BOOLEAN: //布尔 + Boolean booleanValue = cell.getBooleanCellValue(); + content = booleanValue.toString(); + break; + case BLANK: // 空值 + break; + case FORMULA: // 公式 + content = cell.getCellFormula(); + break; + case ERROR: // 故障 + break; + default: + break; + } + } catch (Exception e) { + e.printStackTrace(); + } + return content; + } + + //读取指定位置的单元格 + public String getCertainCell(int rowNum, int columnNum) { + Row row = this.sheet.getRow(rowNum);//获取行 + Cell cell = row.getCell(columnNum);//获取列 + + return getCellToString(cell); + } +} + diff --git a/src/main/java/com/sdut/labex/utils/Params.java b/src/main/java/com/sdut/labex/utils/Params.java new file mode 100644 index 0000000..2382a6e --- /dev/null +++ b/src/main/java/com/sdut/labex/utils/Params.java @@ -0,0 +1,11 @@ +package com.sdut.labex.utils; + +/** + * File: Params + * Created: 2023/6/12 + * Author: springforest + * Description: + */ + +public class Params { +} diff --git a/src/main/java/com/sdut/labex/utils/ResVo.java b/src/main/java/com/sdut/labex/utils/ResVo.java new file mode 100644 index 0000000..db4ba6b --- /dev/null +++ b/src/main/java/com/sdut/labex/utils/ResVo.java @@ -0,0 +1,57 @@ +package com.sdut.labex.utils; + +import java.util.HashMap; +import java.util.Map; + +/** + * File: ResultVo + * Created: 2023/6/12 + * Author: springforest + * Description: + */ + + +public class ResVo extends HashMap { + private static final long serialVersionUID = 1L; + + public ResVo() { + put("code", 200); + } + + public static ResVo error() { + return error(500, "未知异常,请联系管理员"); + } + + public static ResVo error(String msg) { + return error(500, msg); + } + + public static ResVo error(int code, String msg) { + ResVo resVo = new ResVo(); + resVo.put("code", code); + resVo.put("msg", msg); + return resVo; + } + + public static ResVo ok(String msg) { + ResVo resVo = new ResVo(); + resVo.put("msg", msg); + return resVo; + } + + public static ResVo ok(Map map) { + ResVo resVo = new ResVo(); + resVo.putAll(map); + return resVo; + } + + public static ResVo ok() { + return new ResVo(); + } + + public ResVo put(String key, Object value) { + super.put(key, value); + return this; + } +} + diff --git a/src/main/java/com/sdut/labex/utils/SFFileUtils.java b/src/main/java/com/sdut/labex/utils/SFFileUtils.java new file mode 100644 index 0000000..3a523da --- /dev/null +++ b/src/main/java/com/sdut/labex/utils/SFFileUtils.java @@ -0,0 +1,70 @@ +package com.sdut.labex.utils; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; + +/** + * File: SFFileUtils + * Created: 2023/6/12 + * Author: springforest + * Description: + */ + + +public class SFFileUtils { + private String FileName; + private String endName; + private MultipartFile multipartFile; + private File file; + + public SFFileUtils(MultipartFile rawFile) { + this.FileName = rawFile.getOriginalFilename(); + this.endName = creatFileEndName(rawFile); + this.multipartFile = rawFile; + + //选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。 + /** + * MultipartFile 转 File + */ + File file = null; + try { + String originalFilename = multipartFile.getOriginalFilename(); + String[] filename = originalFilename.split("\\."); + file = File.createTempFile(filename[0], filename[1] + "."); + multipartFile.transferTo(file); + file.deleteOnExit(); + } catch (IOException e) { + e.printStackTrace(); + } + this.file = file; + } + + public File getFile() { + return file; + } + + public String getFileName() { + return this.FileName; + } + + public String getEndName() { + return this.endName; + } + + public String getPostfix() { + return this.endName; + } + + /* + * 获取文件后缀 + * */ + private String creatFileEndName(MultipartFile file) { + String fileName = file.getOriginalFilename(); + String[] temp = fileName.split("\\."); + int strL = temp.length; + return temp[strL - 1]; + } +} + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 47fbb02..5236151 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,2 +1,28 @@ server: - port: 8080 \ No newline at end of file + port: 8080 + +spring: + # Redis + redis: + host: 8.219.96.16 + # 端口,默认为6379 + port: 6379 + # 密码 + password: 123456 + # 连接超时时间 + timeout: 5s + lettuce: + pool: + max-active: 8 #最大连接数据库连接数,设 0 为没有限制 + max-idle: 8 #最大等待连接中的数量,设 0 为没有限制 + max-wait: 100ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 + min-idle: 0 #最小等待连接中的数量,设 0 为没有限制 + # MySQL + datasource: + url: jdbc:mysql://106.15.196.199:3306/labex?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8 + username: root + password: Udkklzxc123. + +logging: + level: + root: info diff --git a/src/main/resources/mapper/BorrowInfoMapper.xml b/src/main/resources/mapper/BorrowInfoMapper.xml new file mode 100644 index 0000000..b6d265e --- /dev/null +++ b/src/main/resources/mapper/BorrowInfoMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + id + ,name,time, + date,apply_date,is_admit, + room_id + + diff --git a/src/main/resources/mapper/ExperimentsMapper.xml b/src/main/resources/mapper/ExperimentsMapper.xml new file mode 100644 index 0000000..b7d383c --- /dev/null +++ b/src/main/resources/mapper/ExperimentsMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + id + ,name,time, + date,room_name,status, + class_name + + diff --git a/src/main/resources/mapper/RoomMapper.xml b/src/main/resources/mapper/RoomMapper.xml new file mode 100644 index 0000000..ef84840 --- /dev/null +++ b/src/main/resources/mapper/RoomMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + id + ,name,description, + status + + diff --git a/src/main/resources/mapper/TimeOptionMapper.xml b/src/main/resources/mapper/TimeOptionMapper.xml new file mode 100644 index 0000000..0e7dcce --- /dev/null +++ b/src/main/resources/mapper/TimeOptionMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + id + ,name + + diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..ea3a47b --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + +