🍅 作者主页:
🍅 简介:Java定制开发领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】
🍅定制开发文末获取源码联系🍅
定制开发临近学期结束,定制开发还是毕业设计,你还在做java程序,期末作业,定制开发老师的作业要求觉得大了吗?定制开发不知道毕业设计该怎么办?定制开发网页功能的数量是否太多?定制开发没有合适的类型或系统?等等。这里,定制开发你想解决的问题,在这专栏👇🏻👇🏻👇🏻👇🏻
定制开发都能满足你的需求。原始Jsp、SSM、SpringBoot、以及HTML+CSS+JS页面设计, web定制开发大学生网页设计作业源码等等都可以参考得到解决。话不多说直接拿一个学科竞赛项目来举例
视频演示 :
论文设计参考:
系统功能设计
(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=InnoDB
- DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
- COMMENT='系统用户'
- AUTO_INCREMENT=3
- ROW_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=InnoDB
- DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
- COMMENT='菜单管理'
- AUTO_INCREMENT=69
- ROW_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=InnoDB
- DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
- ROW_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=InnoDB
- DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
- AUTO_INCREMENT=12
- ROW_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=InnoDB
- DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
- AUTO_INCREMENT=10
- ROW_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+Jiayan
- subject.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@gmail.com
- */
- @RestControllerAdvice
- public 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 io.renren.common.utils;
-
- import com.baomidou.mybatisplus.core.metadata.OrderItem;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import io.renren.common.xss.SQLFilter;
- import org.apache.commons.lang.StringUtils;
-
- import java.util.Map;
-
- /**
- * 查询参数
- *
- * @author Mark sunlightcs@gmail.com
- */
- 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;
- }
- }
好了,今天就到这儿吧,我是小奥、下期见~~
获取完整源码:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系👇🏻👇🏻👇🏻
打卡 文章 更新 70/ 100天
精彩专栏推荐: