一个基于SpringBoot的在线教育系统「源码开源」

   日期:2024-12-26    作者:hubinusb 浏览:79    移动:http://w.yusign.com/mobile/quote/6221.html

3.4 商品兑换

========

3.5 课程发布

========

在课程发布页面可以提交发布的课程资料

在我的发布页面可以查看所有已经发布的课程相关信息,查看审核状态

4. 后端

======

4.1 登录

======

4.2 系统管理

========

包括用户管理,角色管理,菜单管理,可以查看对应的信息并添加,导入,修改或删除

角色管理界面可以为角色分配权限

4.3 课程管理

========

可以添加课程,对课程进行分类管理:公共课程,专业课程,免费课程等

在类别管理中可以添加课程的分类信息

在审核功能处可以对上传的视频进行审核

4.4 教师管理

========

4.5 导航菜单

========

4.6 轮播管理

========

4.7 通知管理

========

4.8 礼品管理

========

5,系统的核心代码

=========

@Target({ElementType.TYPE, ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface OperLog {

String value();

String desc();

boolean param() default true;

boolean result() default false;

}*

*/

@Target({ElementType.TYPE, ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface OperLog {

String value();

String desc();

boolean param() default true;

boolean result() default false;

@Aspect

@Component

public class OperLogAspect {

private ThreadLocal startTime = new ThreadLocal<>();

@Autowired

private OperRecordService operRecordService;

@Pointcut(“@annotation(com.egao.common.core.annotation.OperLog)”)

public void operLog() {

}

@Before(“operLog()”)

public void doBefore(JoinPoint joinPoint) throws Throwable {

startTime.set(System.currentTimeMillis());

}

@AfterReturning(pointcut = “operLog()”, returning = “result”)

public void doAfterReturning(JoinPoint joinPoint, Object result) {

saveLog(joinPoint, result, null);

}

@AfterThrowing(value = “operLog()”, throwing = “e”)

public void doAfterThrowing(JoinPoint joinPoint, Exception e) {

saveLog(joinPoint, null, e);

}

private void saveLog(JoinPoint joinPoint, Object result, Exception e) {

// 获取reques对象

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request = (attributes == null ? null : attributes.getRequest());

// 构建操作日志

OperRecord operRecord = new OperRecord();

operRecord.setUserId(getLoginUserId());

if (startTime.get() != null) operRecord.setSpendTime(System.currentTimeMillis() - startTime.get());

if (request != null) {

operRecord.setRequestMethod(request.getMethod());

operRecord.setUrl(request.getRequestURI());

operRecord.setIp(UserAgentGetter.getIp(request));

}

// 记录异常信息

if (e != null) {

operRecord.setState(1);

operRecord.setComments(StrUtil.sub(e.toString(), 0, 2000));

}

public class BaseController {

public User getLoginUser() {

Subject subject = SecurityUtils.getSubject();

if (subject == null) return null;

Object object = subject.getPrincipal();

if (object != null) return (User) object;

return null;

}

public Integer getLoginUserId() {

User loginUser = getLoginUser();

return loginUser == null ? null : loginUser.getUserId();

}

}

@Controller

@RequestMapping(“/sys/user”)

public class UserController extends BaseController {

@Autowired

private UserService userService;

@Autowired

private DictionaryDataService dictionaryDataService;

@Autowired

private RoleService roleService;

@Autowired

private OrganizationService organizationService;

@RequiresPermissions(“sys:user:view”)

@RequestMapping()

public String view(Model model) {

model.addAttribute(“sexList”, dictionaryDataService.listByDictCode(“sex”));

model.addAttribute(“organizationTypeList”, dictionaryDataService.listByDictCode(“organization_type”));

model.addAttribute(“rolesJson”, JSON.toJSONString(roleService.list()));

return “system/user.html”;

}

@RequestMapping(“/info”)

public String userInfo(Model model) {

model.addAttribute(“user”, userService.getFullById(getLoginUserId()));

model.addAttribute(“sexList”, dictionaryDataService.listByDictCode(“sex”));

return “index/user-info.html”;

}

@OperLog(value = “用户管理”, desc = “分页查询”)

@RequiresPermissions(“sys:user:list”)

@ResponseBody

@RequestMapping(“/page”)

public PageResult page(HttpServletRequest request) {

PageParam pageParam = new PageParam<>(request);

pageParam.setDefaultOrder(null, new String[]{“create_time”});

return userService.listPage(pageParam);

}

@OperLog(value = “用户管理”, desc = “查询全部”)

@RequiresPermissions(“sys:user:list”)

@ResponseBody

@RequestMapping(“/list”)

public JsonResult list(HttpServletRequest request) {

PageParam pageParam = new PageParam<>(request);

List records = userService.listAll(pageParam.getNoPageParam());

return JsonResult.ok().setData(pageParam.sortRecords(records));

}

@OperLog(value = “用户管理”, desc = “根据id查询”)

@RequiresPermissions(“sys:user:list”)

@ResponseBody

@RequestMapping(“/get”)

public JsonResult get(Integer id) {

PageParam pageParam = new PageParam<>();

pageParam.put(“userId”, id);

List records = userService.listAll(pageParam.getNoPageParam());

return JsonResult.ok().setData(pageParam.getOne(records));

}

@Controller

@RequestMapping(“/sys/user”)

public class UserController extends BaseController {

@Autowired

private UserService userService;

@Autowired

private DictionaryDataService dictionaryDataService;

@Autowired

private RoleService roleService;

@Autowired

private OrganizationService organizationService;

@RequiresPermissions(“sys:user:view”)

@RequestMapping()

public String view(Model model) {

model.addAttribute(“sexList”, dictionaryDataService.listByDictCode(“sex”));

model.addAttribute(“organizationTypeList”, dictionaryDataService.listByDictCode(“organization_type”));

model.addAttribute(“rolesJson”, JSON.toJSONString(roleService.list()));

return “system/user.html”;

}

@RequestMapping(“/info”)

public String userInfo(Model model) {

model.addAttribute(“user”, userService.getFullById(getLoginUserId()));

model.addAttribute(“sexList”, dictionaryDataService.listByDictCode(“sex”));

return “index/user-info.html”;

}

@OperLog(value = “用户管理”, desc = “分页查询”)

@RequiresPermissions(“sys:user:list”)

@ResponseBody

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

互联网工程师必备的面试1000题

而且从上面三家来看算法与数据结构是必备不可少的,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取
src=“https://i-blog.csdnimg.cn/blog_migrate/6ea70dde22bc9df3b819ff6af2313717.jpeg” alt=“img” style=“zoom: 33%;” />

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

[外链图片转存中…(img-sQnpDQFK-1713429945068)]

互联网工程师必备的面试1000题

而且从上面三家来看算法与数据结构是必备不可少的,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-9LXCOy94-1713429945068)]

本文地址:http://w.yusign.com/quote/6221.html    述古往 http://w.yusign.com/static/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关行情
推荐行情
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号