1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于java实现学科竞赛管理系统「Springboot+mybatis+lyaui」

基于java实现学科竞赛管理系统「Springboot+mybatis+lyaui」

时间:2019-09-06 14:26:31

相关推荐

基于java实现学科竞赛管理系统「Springboot+mybatis+lyaui」

系统功能设计

(1)登录:输入账号密码和验证码登录;(2)用户信息模块(3)菜单模块(4)角色模块(5)项目竞赛活动申请模块(6)项目竞赛经费申请模块(7)项目竞赛活动管理审批模块(8)项目个人赛报名模块(9)项目团队赛报名模块(10)项目结题统计模块(11)通知公告模块

主要功能截图:

用户登录:输入帐号密码和验证码登录。登录后,根据用户权限显示不同的菜单,灵活控制角色。

管理员功能模块:用户管理、竞赛报名信息管理、经费申请信息和x审核信息管理、项目结题信息、管理角色管理、菜单管理、权限管理、、立项申请管理等具体模块管理

用户管理:用户列表显示,数据的添加,以及删除修改等。

角色管理:将角色与用户绑定,灵活控制角色菜单,显示菜单权限。可以创建多个角色

菜单消息管理:

系统日志监控:aop切面编程。实现日志记录操作。

业务模块功能

立项申请功能

立项审核:

活动经费、预算申请

项目结题管理信息:

项目结题统计:

数据库表设计:

用户表:

CREATE TABLE `NewTable` (`user_id` bigint(20) NOT NULL AUTO_INCREMENT ,`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名' ,`salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '盐' ,`email` varchar(1`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码' ,00) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱' ,`mobile` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号' ,`status` tinyint(4) NULL DEFAULT NULL COMMENT '状态 0:禁用 1:正常' ,`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间' ,PRIMARY KEY (`user_id`),UNIQUE INDEX `username` (`username`) USING BTREE )ENGINE=InnoDBDEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ciCOMMENT='系统用户'AUTO_INCREMENT=3ROW_FORMAT=COMPACT

菜单表:

CREATE TABLE `NewTable` (`menu_id` bigint(20) NOT NULL AUTO_INCREMENT ,`parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父菜单ID,一级菜单为0' ,`name` varchar(50) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单名称' ,`url` varchar(200) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单URL' ,`perms` varchar(500) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:user:list,user:create)' ,`type` int(11) NULL DEFAULT NULL COMMENT '类型 0:目录 1:菜单 2:按钮' ,`icon` varchar(50) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标' ,`order_num` int(11) NULL DEFAULT NULL COMMENT '排序' ,PRIMARY KEY (`menu_id`))ENGINE=InnoDBDEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ciCOMMENT='菜单管理'AUTO_INCREMENT=69ROW_FORMAT=COMPACT;

立项申请:

CREATE TABLE `NewTable` (`id` int(11) NOT NULL AUTO_INCREMENT ,`name` varchar(255) SET utf8 COLLATE NULL NULL ,`zsdw` varchar(255) SET utf8 COLLATE NULL ,`type` varchar(255) SET utf8 COLLATE utf8_general_ci NULL NULL ,`principal` varchar(255) SET utf8 COLLATE NULL DEFAULT NULL ,`phone` varchar(255) SET utf8 COLLATE NULL NULL ,`start_time` datetime NULL DEFAULT NULL ,`ent_time` datetime NULL DEFAULT NULL ,`majozhuban` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`sponsor` varchar(255) SET utf8 COLLATE utf8_general_ci NULL NULL ,`undertaeker` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL NULL ,`remark` varchar(255) SET utf8 COLLATE utf8_general_ci NULL NULL ,`audit_stu` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL NULL ,PRIMARY KEY (`id`))ENGINE=InnoDBDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciROW_FORMAT=COMPACT;

个人赛:

CREATE TABLE `NewTable` (`id` int(11) NOT NULL AUTO_INCREMENT ,`name` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`college` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`class_name` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`grade` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`major` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`email` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`phone` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`title` varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,PRIMARY KEY (`id`))ENGINE=InnoDBDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciAUTO_INCREMENT=12ROW_FORMAT=COMPACT;

经费申请:

CREATE TABLE `NewTable` (`id` int(11) NOT NULL AUTO_INCREMENT ,`zhuche` double NULL NULL ,`rate` double NULL NULL ,`train` double NULL NULL ,`guidance` double NULL NULL ,`haocai` double NULL NULL ,`bonus` double NULL NULL ,`other` double NULL ,`total` double NULL NULL ,`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL NULL ,PRIMARY KEY (`id`))ENGINE=InnoDBDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciAUTO_INCREMENT=10ROW_FORMAT=COMPACT;

主要代码实现:

用户权限过滤:

@Bean("shiroFilter")public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();shiroFilter.setSecurityManager(securityManager);shiroFilter.setLoginUrl("/login.html");shiroFilter.setUnauthorizedUrl("/");filterMap.put("/statics/**", "anon");filterMap.put("/login.html", "anon");filterMap.put("/sys/login", "anon");filterMap.put("/favicon.ico", "anon");filterMap.put("/captcha.jpg", "anon");filterMap.put("/**", "authc");shiroFilter.setFilterChainDefinitionMap(filterMap);Map<String, String> filterMap = new LinkedHashMap<>();filterMap.put("/swagger/**", "anon");filterMap.put("/v2/api-docs", "anon");filterMap.put("/swagger-ui.html", "anon");filterMap.put("/webjars/**", "anon");filterMap.put("/swagger-resources/**", "anon");return shiroFilter;}

登录模块验证:

/*** 登录*/@ResponseBody@RequestMapping(value = "/sys/login")public R login(String username, String password, String captcha) {String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);if(!captcha.equalsIgnoreCase(kaptcha)){return R.error("验证码不正确。。。。。。");}try{Subject subject = ShiroUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken(username, password);//md5+Jiayansubject.login(token);}catch (UnknownAccountException e) {return R.error(e.getMessage());}catch (IncorrectCredentialsException e) {return R.error("账号或密码不正确。。。。");}catch (LockedAccountException e) {return R.error("账号已被锁定,请联系管理。。。员");}catch (AuthenticationException e) {return R.error("账户验证失败。。。。");}return R.ok();}

统一异常处理:/*** 异常处理器** @author Mark sunlightcs@*/@RestControllerAdvicepublic class RRExceptionHandler {private Logger logger = LoggerFactory.getLogger(getClass());/*** 处理自定义异常*/@ExceptionHandler(RRException.class)public R handleRRException(RRException e){R r = new R();r.put("code", e.getCode());r.put("msg", e.getMessage());return r;}@ExceptionHandler(AuthorizationException.class)public R handleAuthorizationException(AuthorizationException e){logger.error(e.getMessage(), e);return R.error("没有权限,请联系管理员授权");}@ExceptionHandler(Exception.class)public R handleException(Exception e){logger.error(e.getMessage(), e);return R.error();}@ExceptionHandler(DuplicateKeyException.class)public R handleDuplicateKeyException(DuplicateKeyException e){logger.error(e.getMessage(), e);return R.error("数据库中已存在该记录");}}

分页查询

package mon.utils;import com.baomidou.mybatisplus.core.metadata.OrderItem;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import mon.xss.SQLFilter;import mons.lang.StringUtils;import java.util.Map;/*** 查询参数** @author Mark sunlightcs@*/public class Query<T> {public IPage<T> getPage(Map<String, Object> params) {return this.getPage(params, null, false);}public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {//分页参数long curPage = 1;long limit = 10;//分页对象Page<T> page = new Page<>(curPage, limit);//分页参数params.put(Constant.PAGE, page);if(params.get(Constant.PAGE) != null){curPage = Long.parseLong((String)params.get(Constant.PAGE));}if(params.get(Constant.LIMIT) != null){limit = Long.parseLong((String)params.get(Constant.LIMIT));}//排序字段//防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));String order = (String)params.get(Constant.ORDER);//前端字段排序if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){if(Constant.ASC.equalsIgnoreCase(order)) {return page.addOrder(OrderItem.asc(orderField));}else {return page.addOrder(OrderItem.desc(orderField));}}//没有排序字段,则不排序if(StringUtils.isBlank(defaultOrderField)){return page;}//默认排序if(isAsc) {page.addOrder(OrderItem.asc(defaultOrderField));}else {page.addOrder(OrderItem.desc(defaultOrderField));}return page;}}package mon.utils;import com.baomidou.mybatisplus.core.metadata.OrderItem;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import mon.xss.SQLFilter;import mons.lang.StringUtils;import java.util.Map;/*** 查询参数** @author Mark sunlightcs@*/public class Query<T> {public IPage<T> getPage(Map<String, Object> params) {return this.getPage(params, null, false);}public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {//分页参数long curPage = 1;long limit = 10;//分页对象Page<T> page = new Page<>(curPage, limit);//分页参数params.put(Constant.PAGE, page);if(params.get(Constant.PAGE) != null){curPage = Long.parseLong((String)params.get(Constant.PAGE));}if(params.get(Constant.LIMIT) != null){limit = Long.parseLong((String)params.get(Constant.LIMIT));}//排序字段//防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));String order = (String)params.get(Constant.ORDER);//前端字段排序if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){if(Constant.ASC.equalsIgnoreCase(order)) {return page.addOrder(OrderItem.asc(orderField));}else {return page.addOrder(OrderItem.desc(orderField));}}//没有排序字段,则不排序if(StringUtils.isBlank(defaultOrderField)){return page;}//默认排序if(isAsc) {page.addOrder(OrderItem.asc(defaultOrderField));}else {page.addOrder(OrderItem.desc(defaultOrderField));}return page;}}

获取完整源码:

大家点赞、收藏、关注、评论啦,头条后台私信回复【666】即刻免费获取到相关学习资料

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。