Java技能树-毕业设计--每日一练-基于javaSpringboot+mybatis+layui实现装修验收管理系统

前言:

随着社会的进步和科技的发展,越来越多的人追求新颖独特,实用的居住和工作学习环境。因此,在如今的建筑装饰工程中,既要考虑到客户的需求和与建筑结构的协调统一又要考虑到成本和施工组织的安排,所以说现代装饰工程是一件相对繁琐却又必须要做好的事情。在保质保量完成工作内容的同时,还要确保施工施工验收的各项标准数据、通过一段时间对Java相关开发知识的学习,基本了解了施工过程中的各种工艺流程和特点,利用JavaSpringboot+layui简单做个一个装修验收管理系统、适用于简单学习参考使用。

主要设计:

  1. 水电验收

主要功能:

(1)列表查询

功能:查询、添加、修改、删除、导出。

查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

(2)业务单据

功能:添加水电考核内容

操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

  1. 瓦工验收

(1)列表查询

功能:查询、添加、修改、删除、导出。

查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

(2)业务单据

功能:添加瓦工考核内容

操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

  1. 木工验收

(1)列表查询

功能:查询、添加、修改、删除、导出。

查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

(2)业务单据

功能:添加木工考核内容

操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

  1. 油漆工验收

(1)列表查询

功能:查询、添加、修改、删除、导出。

查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

(2)业务单据

功能:添加油漆考核内容

操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

  1. 施工结束验收

(1)列表查询

功能:查询、添加、修改、删除、导出。

查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

(2)业务单据

功能:添加施工结束考核内容

操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。

功能截图:

管理员登录: 

系统首页: 

 用户管理:

 角色管理:

 菜单管理:

SQL监控:

 水电验收:

 数据导出:

木工验收:

修改密码:

代码实现:

装修验收controller:


@RestController
@RequestMapping("/sys/ysWater")
public class YsWaterController extends AbstractController {
    @Autowired
    private YsWaterService ysWaterervice;

    @Autowired
    private YsWaterServiceImpl ysWaterServiceImpl;
    @RequestMapping("/waterList")
    public R waterList(@RequestParam Map<String, Object> params){
        params.put("ysType","水电装修验收");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }
    @RequestMapping("/waterDjList")
    public R waterDjList(@RequestParam Map<String, Object> params){
        params.put("ysType","水电业务单据");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }

    @RequestMapping("/wgList")
    public R wgList(@RequestParam Map<String, Object> params){
        params.put("ysType","瓦工装修验收");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }

    @RequestMapping("/wgDjList")
    public R wgDjList(@RequestParam Map<String, Object> params){
        params.put("ysType","瓦工业务单据");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }

    @RequestMapping("/mgList")
    public R mgList(@RequestParam Map<String, Object> params){
        params.put("ysType","木工装修验收");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }
    @RequestMapping("/mgDjList")
    public R mgDjList(@RequestParam Map<String, Object> params){
        params.put("ysType","木工业务单据");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }
    @RequestMapping("/yqgList")
    public R yqgList(@RequestParam Map<String, Object> params){
        params.put("ysType","油漆工装修验收");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }

    @RequestMapping("/yqgDjList")
    public R yqgDjList(@RequestParam Map<String, Object> params){
        params.put("ysType","油漆工业务单据");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }
    @RequestMapping("/sgjsList")
    public R sgjsList(@RequestParam Map<String, Object> params){
        params.put("ysType","施工结束验收");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }

    @RequestMapping("/sgjsDjList")
    public R sgjsDjList(@RequestParam Map<String, Object> params){
        params.put("ysType","施工结束业务单据");
        PageUtils page = ysWaterervice.queryPage(params);
        return R.ok().put("page", page);
    }

    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        YsWater ysWater = ysWaterervice.getById(id);
        return R.ok().put("ysWater", ysWater);
    }
    @RequestMapping("/export")
    public R save(HttpServletResponse response, HttpServletRequest request){
        try {
            ysWaterServiceImpl.outExcelByMealOrReserve(getParametersMap(request),response);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return R.ok();
    }


    /**
     * 将所有参数组装成Map
     * @return
     */
    private   Map<String, String> getParametersMap(HttpServletRequest request) throws UnsupportedEncodingException {
        Map<String, String> map = new HashMap<String, String>();
        Enumeration<String> paramNames = request.getParameterNames();
        String encoding = request.getCharacterEncoding();
        while (paramNames.hasMoreElements()) {
            String paramName = paramNames.nextElement();

            String[] paramValues = request.getParameterValues(paramName);
            if (paramValues.length == 1) {
                String paramValue = paramValues[0];
                if (paramValue.length() != 0) {
                    if (!encoding.toUpperCase().equals("UTF-8")) {
                        map.put(paramName, new String(paramValue.getBytes("ISO-8859-1"),"UTF-8"));
                    } else {
                        map.put(paramName, paramValue);
                    }
                }
            }
        }
        return map;
    }

    @RequestMapping("/save")
    public R save(@RequestBody YsWater ysWater){
        ysWaterervice.save(ysWater);
        return R.ok();
    }
    @RequestMapping("/update")
    public R update(@RequestBody YsWater ysWater){
        ysWaterervice.updateById(ysWater);
        return R.ok();
    }
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        ysWaterervice.removeByIds(Arrays.asList(ids));
        return R.ok();
    }
}
复制代码

用户权限拦截放行:


/**
 * Shiro的配置文件
 *
 */
@Configuration
public class ShiroConfig {

    /**
     * 单机环境,session交给shiro管理
     */
    @Bean
    @ConditionalOnProperty(prefix = "renren", name = "cluster", havingValue = "false")
    public DefaultWebSessionManager sessionManager(@Value("${renren.globalSessionTimeout:3600}") long globalSessionTimeout){
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setSessionValidationSchedulerEnabled(true);
        sessionManager.setSessionIdUrlRewritingEnabled(false);
        sessionManager.setSessionValidationInterval(globalSessionTimeout * 1000);
        sessionManager.setGlobalSessionTimeout(globalSessionTimeout * 1000);

        return sessionManager;
    }

    /**
     * 集群环境,session交给spring-session管理
     */
    @Bean
    @ConditionalOnProperty(prefix = "renren", name = "cluster", havingValue = "true")
    public ServletContainerSessionManager servletContainerSessionManager() {
        return new ServletContainerSessionManager();
    }

    @Bean("securityManager")
    public SecurityManager securityManager(UserRealm userRealm, SessionManager sessionManager) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setCacheManager(new EhCacheManager());
        securityManager.setRealm(userRealm);
        securityManager.setSessionManager(sessionManager);
        securityManager.setRememberMeManager(null);

        return securityManager;
    }


    @Bean("shiroFilter")
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        shiroFilter.setSecurityManager(securityManager);
        shiroFilter.setLoginUrl("/login.html");
        shiroFilter.setUnauthorizedUrl("/");

        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");

        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);

        return shiroFilter;
    }

    @Bean("lifecycleBeanPostProcessor")
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
        advisor.setSecurityManager(securityManager);
        return advisor;
    }
}

复制代码

数据库设计:

**数据库名: **renren_zxys

**文档版本: **V1.0.0

**文档描述: **装修验收数据库表设计描述

表sys_config (系统配置信息表)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 id bigint 20 0 N Y
2 param_key varchar 50 0 Y N key
3 param_value varchar 2000 0 Y N value
4 status tinyint 4 0 Y N 状态   0:隐藏   1:显示
5 remark varchar 500 0 Y N 备注

表sys_dept (部门管理)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 dept_id bigint 20 0 N Y
2 parent_id bigint 20 0 Y N 上级部门ID,一级部门为0
3 name varchar 50 0 Y N 部门名称
4 order_num int 10 0 Y N 排序
5 del_flag tinyint 4 0 Y N 是否删除  -1:已删除  0:正常

表sys_dict (数据字典表)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 id bigint 20 0 N Y
2 name varchar 100 0 N N 字典名称
3 type varchar 100 0 Y N 字典类型
4 code varchar 100 0 Y N 字典码
5 value varchar 1000 0 Y N 字典值
6 order_num int 10 0 Y N 排序
7 remark varchar 255 0 Y N 备注
8 del_flag tinyint 4 0 Y N 删除标记  -1:已删除  0:正常

表sys_log (系统日志)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 id bigint 20 0 N Y
2 username varchar 50 0 Y N 用户名
3 operation varchar 50 0 Y N 用户操作
4 method varchar 200 0 Y N 请求方法
5 params varchar 5000 0 Y N 请求参数
6 time bigint 20 0 N N 执行时长(毫秒)
7 ip varchar 64 0 Y N IP地址
8 create_date datetime 19 0 Y N 创建时间

表sys_menu (菜单管理)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 menu_id bigint 20 0 N Y
2 parent_id bigint 20 0 Y N 父菜单ID,一级菜单为0
3 name varchar 50 0 Y N 菜单名称
4 url varchar 200 0 Y N 菜单URL
5 perms varchar 500 0 Y N 授权(多个用逗号分隔,如:user:list,user:create)
6 type int 10 0 Y N 类型   0:目录   1:菜单   2:按钮
7 icon varchar 50 0 Y N 菜单图标
8 order_num int 10 0 Y N 排序

表sys_role (角色)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 role_id bigint 20 0 N Y
2 role_name varchar 100 0 Y N 角色名称
3 remark varchar 100 0 Y N 备注
4 dept_id bigint 20 0 Y N 部门ID
5 create_time datetime 19 0 Y N 创建时间

表sys_role_dept (角色与部门对应关系)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 id bigint 20 0 N Y
2 role_id bigint 20 0 Y N 角色ID
3 dept_id bigint 20 0 Y N 部门ID

表sys_role_menu (角色与菜单对应关系)

编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id bigint 20 0 N Y
2 role_id bigint 20 0 Y N 角色ID
3 menu_id bigint 20 0 Y N 菜单ID

表sys_user (系统用户)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 user_id bigint 20 0 N Y
2 username varchar 50 0 N N 用户名
3 password varchar 100 0 Y N 密码
4 salt varchar 20 0 Y N
5 email varchar 100 0 Y N 邮箱
6 mobile varchar 100 0 Y N 手机号
7 status tinyint 4 0 Y N 状态  0:禁用   1:正常
8 dept_id bigint 20 0 Y N 部门ID
9 create_time datetime 19 0 Y N 创建时间

表sys_user_role (用户与角色对应关系)

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 id bigint 20 0 N Y
2 user_id bigint 20 0 Y N 用户ID
3 role_id bigint 20 0 Y N 角色ID

表ys_water

编号 名称 数据类型 长度 小数位 允许空值 主键 说明
1 id int 10 0 N Y
2 name varchar 255 0 Y N 项目名称
3 xm_type varchar 255 0 Y N 项目类型
4 xm_dizhi varchar 255 0 Y N 项目地址
5 username varchar 255 0 Y N 录入人
6 lr_time datetime 19 0 Y N 录入日期
7 gz_username varchar 255 0 Y N 工地负责人
8 sjs varchar 255 0 Y N 设计师
9 jlry varchar 255 0 Y N 监理人员
10 money varchar 255 0 Y N
11 sg_time datetime 19 0 Y N
12 js_time datetime 19 0 Y N
13 clpp varchar 255 0 Y N 材料品牌
14 sg_username varchar 255 0 Y N 施工人员
15 khjg varchar 255 0 Y N 考核结果
16 remark varchar 255 0 Y N
17 ys_type varchar 255 0 Y N 验收类型(水电 瓦工 木工 油漆工)

个人总结:

 经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间本教育教学系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及地块管理管理平台的功能测试,阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。比如管理员添加用户的时候报java.lang.NullPointException、解决的方法:查看控制台打印信息、发现添加的时候未填写相关信息、报java.lang.NullPointException、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。

源码获取:

 大家点赞、收藏、关注、评论啦 、感兴趣的和我交流吧

打卡 文章 更新 178/  365天

おすすめ

転載: juejin.im/post/7054822673636917256