ソースコードを入手する:ブログのホームページの「リソース」からダウンロードしてください。
プロジェクト紹介
このシステムのユーザーは、管理者、教師、学生の3つのタイプに分けることができます。3つの役割がログインした後、さまざまなメニューインターフェイスが表示されます。
管理者の主な機能:
情報管理
学生情報管理、教師情報管理、生産実践情報管理、実践後情報管理;
生産実践生産
実践アプリケーション、私の生産実践、私の成績、私のアプリケーション結果、私のアプリケーションインターンシップ管理生産インターンシップ管理生産インターンシッププロセス管理生産インターンシップスコア統計ポストインターンシップレビューポストインターンシッププロセス管理ポストポストインターンシップスコア統計共有システム管理ユーザー管理メニュー管理役割情報管理
教師の主な機能:
情報管理
学生情報管理;
インターンシップ管理
プロダクションインターンシップレビュー
プロダクションインターンシッププロセス管理
プロダクションインターンシップスコア統計
ポストインターンシップレビュー
ポストインターンシッププロセス管理
ポストインターンシップスコア統計
共有
情報レビュー;
私の共有、ディスカッションエリア;
学生の主な機能:
プロダクションインターンシップ:
プロダクションインターンシップアプリケーション;
マイプロダクションインターンシップ;
マイグレード;
マイアプリケーション;
ポストプラクティス:
ポストインターンシップアプリケーション;
マイポストインターンシップ;
マイグレード;
マイアプリケーション;
シェア:
マイシェア;
ディスカッションフォーラム;
環境ニーズ
1.動作環境:できればjava jdk 1.8、このプラットフォームで実行しています。他のバージョンも理論的には可能です。
2. IDE環境:IDEA、Eclipse、Myeclipseを使用できます。IDEAをお勧めします;
3。Tomcat環境:Tomcat 7.x、8.x、9.xバージョンが利用可能です
4.ハードウェア環境:1G以上のメモリを搭載したWindows7/8/10;またはMacOS;
5. Mavenプロジェクト:はい;pom.xmlがソースコードディレクトリに含まれているかどうかを確認します。含まれている場合はmavenプロジェクトであり、含まれていない場合は非mavenプロジェクトです。
6.データベース:MySqlバージョン5.7;
テクノロジースタック
1.コアフレームワーク:SpringBoot。
2.セキュリティフレームワーク:ApacheShiro。
3.テンプレートエンジン:Thymeleaf。
4.永続層フレームワーク:MyBatis。
5.スケジュールされたタスク:Quartz。
6.データベース接続プール:Druid。
7.ツールクラス:Fastjson。
8.フロントエンド:Thymeleaf + html + JQuery + bootstrap
使用説明書
1. Navicatまたは他のツールを使用して、mysqlに対応する名前のデータベースを作成し
、プロジェクトのsqlファイルをインポートします。2。ruoyi-admin / src / main / resources/application-druid.yml構成でデータベースを構成します。プロジェクト内のファイル独自の構成に変更します
。3。IDEA/Eclipse /MyEclipseを使用してプロジェクトをインポートします。Eclipse/MyEclipseからインポートする場合、mavenプロジェクトの場合は、mavenを選択してください。mavenプロジェクトの場合は、インポートが成功しました。mavenclean;maveninstallコマンドを実行してtomcatを構成してから、実行してください
。4.プロジェクトを実行し、localhost:8092と入力してログインします。
管理者情報フロントコントローラー:
/**
* <p>
* 管理员信息 前端控制器
* </p>
*
* @author yy
*/
@RestController
@RequestMapping("/stu-user")
public class StuUserController {
@Autowired
private Producer producer;
@Autowired
private IStuUserService iStuUserService;
@Autowired
private AuthenticationManager authenticationManager;
private final Logger log = Logger.getLogger(StuUserController.class);
@GetMapping("/user-list")
public HttpResponse getUserList(NormalQueryInfo normalQueryInfo){
return HttpResponse.success(iStuUserService.getUserList(normalQueryInfo));
}
@PostMapping("/edit")
public HttpResponse editUser(@RequestBody StuUser stuUser){
return HttpResponse.success(iStuUserService.editUser(stuUser));
}
@DeleteMapping("/del")
public HttpResponse delUser(@RequestBody StuUser stuUser){
return HttpResponse.success(iStuUserService.deleteUser(stuUser));
}
/**
* 验证码
*/
@GetMapping("/captcha.jpg")
public void captcha(HttpServletResponse response, HttpServletRequest request) throws IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
// 生成文字验证码
String text = producer.createText();
// 生成图片验证码
BufferedImage image = producer.createImage(text);
// 保存到验证码到 session
request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, text);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
IOUtils.closeQuietly(out);
}
/**
* 登录接口
*/
@PostMapping(value = "/login")
public HttpResponse login(@RequestBody LoginRequest loginRequest, HttpServletRequest request) throws IOException {
String username = loginRequest.getAccount();
String password = loginRequest.getPassword();
// String captcha = loginBean.getCaptcha();
// 从session中获取之前保存的验证码跟前台传来的验证码进行匹配
// Object kaptcha = request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
// if(kaptcha == null){
// return HttpResult.error("验证码已失效");
// }
// if(!captcha.equals(kaptcha)){
// return HttpResult.error("验证码不正确");
// }
// // 用户信息
// System.out.println(username+"|"+password+"|"+captcha+" ");
StuUser user = iStuUserService.findByName(username);
// 账号不存在、密码错误
if (user == null) {
return HttpResponse.error("账号不存在");
}
if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
return HttpResponse.error("密码不正确");
}
JwtAuthenticatioToken token = SecurityUtils.login(request, username, password, authenticationManager);
log.info("user:"+token.getName()+"login Success! [In "+token.getDetails().toString()+"]");
return HttpResponse.success(new LoginResponse(token.getName(),token.getToken(),"OK!"));
}
@PostMapping(value="/save")
public HttpResponse addUser(@RequestBody StuUser stuUser) {
return HttpResponse.success(iStuUserService.addUser(stuUser));
}
@GetMapping(value="/findByName")
public HttpResponse findByUserName(@RequestParam String name) {
return HttpResponse.success(iStuUserService.findByName(name));
}
}
教師の個人情報フロントコントローラー:
/**
* <p>
* 教师个人详细信息 前端控制器
* </p>
*
* @author yy
*/
@RestController
@RequestMapping("/stu-teacher-info")
public class StuTeacherInfoController {
@Autowired
private IStuTeacherInfoService iStuTeacherInfoService;
@GetMapping("/get")
public HttpResponse getTeacherInfosList(NormalQueryInfo normalQueryInfo){
return HttpResponse.success(iStuTeacherInfoService.getTeacherInfosList(normalQueryInfo));
}
@PostMapping("/add")
public HttpResponse addTeacherInfosList(@RequestBody StuTeacherInfo stuTeacherInfo){
String res = iStuTeacherInfoService.addTeacherInfosList(stuTeacherInfo);
return res == null ? HttpResponse.success() : HttpResponse.error(res) ;
}
@PostMapping("/edit")
public HttpResponse editTeacherInfosList(@RequestBody StuTeacherInfo stuTeacherInfo){
return HttpResponse.success(iStuTeacherInfoService.editTeacherInfosList(stuTeacherInfo));
}
@DeleteMapping("/del")
public HttpResponse delTeacherInfosList(@RequestBody StuTeacherInfo stuTeacherInfo){
return HttpResponse.success(iStuTeacherInfoService.delTeacherInfosList(stuTeacherInfo));
}
@GetMapping("/remove-course-teacher")
public HttpResponse delCourse(@RequestParam("teacherId") Integer teacherId){
return HttpResponse.success(iStuTeacherInfoService.setCourseTeacherById(teacherId,-1));
}
@GetMapping("/get-no-course")
public HttpResponse getAllTeacherInfosListNoCourse(){
return HttpResponse.success(iStuTeacherInfoService.getAllTeacherInfosListNoCourse());
}
@GetMapping("/set-course")
public HttpResponse setCourseTeacher(@RequestParam(value = "teacherId") Integer teacherId,
@RequestParam(value = "courseId") Integer courseId){
return HttpResponse.success(iStuTeacherInfoService.setCourseTeacherById(teacherId,courseId));
}
}
学生情報フロントコントローラー:
/**
* <p>
* 学生信息 前端控制器
* </p>
*
* @author yy
*/
@RestController
@RequestMapping("/stu-info")
public class StuInfoController {
@Autowired
private IStuInfoService iStuInfoService;
/**
* 分页查询全部信息
* */
@GetMapping("/get")
public HttpResponse getPageStudentInfo(QueryStuInfoListRequest queryStuInfoListRequest){
return HttpResponse.success(iStuInfoService.getPageStudentInfo(
queryStuInfoListRequest.getPageNum(), queryStuInfoListRequest.getPageSize()
));
}
/**
* 对基本信息进行高级查询
* */
@GetMapping("/get-test")
public HttpResponse getPageStudentInfoByCondition(QueryStuInfoListRequest queryStuInfoListRequest){
iStuInfoService.getStudentInfoByCondition(queryStuInfoListRequest);
QueryListResponse<StuInfo> queryStuInfoListResponse = iStuInfoService.getStudentInfoByCondition(queryStuInfoListRequest);
//如果stuInfoListResponse.getNumOfTotalRecord() < 0 ,则表明输入类型和预期不符且发生异常,则返回错误
return queryStuInfoListResponse.getNumOfTotalRecord() < 0 ?
HttpResponse.error("输入信息类型错误!") : HttpResponse.success(queryStuInfoListResponse);
}
/**
* 添加学生信息
* */
@PostMapping("/add")
public HttpResponse addStudentInfo(@RequestBody StuInfo stuInfo){
String res = iStuInfoService.addStudentInfo(stuInfo);
//返回信息的长度大于0,则表示有错误或有提示信息
return res.length() > 0 ? HttpResponse.error(res) : HttpResponse.success("成功插入一条记录") ;
}
/**
* 编辑学生性别或手机号信息
* */
@PostMapping("/edit")
public HttpResponse editStudentSexOrPhoneInfo(@RequestBody StuInfo stuInfo){
return HttpResponse.success(iStuInfoService.editStudentInfo(stuInfo));
}
/**
* 根据学号删除学生信息
* */
@DeleteMapping("/delete")
public HttpResponse deleteStudentInfoByNumber(@RequestBody StuInfo stuInfo){
return HttpResponse.success(iStuInfoService.deleteStudentInfo(stuInfo));
}
/**
* 修改学生违纪状态
* */
@PostMapping("/change")
public HttpResponse changeStudentStatus(@RequestBody StuInfo stuInfo){
return HttpResponse.success(iStuInfoService.changeStudentStatus(stuInfo));
}
}
ソースコードを入手する:ブログのホームページの「リソース」からダウンロードしてください。