🍅 作者主页:Java李杨勇
🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】
🍅文末获取源码联系和送书🍅
前言:
随着社会的进步和科技的发展,越来越多的人追求新颖独特,实用的居住和工作学习环境。因此,在如今的建筑装饰工程中,既要考虑到客户的需求和与建筑结构的协调统一又要考虑到成本和施工组织的安排,所以说现代装饰工程是一件相对繁琐却又必须要做好的事情。在保质保量完成工作内容的同时,还要确保施工施工验收的各项标准数据、通过一段时间对Java相关开发知识的学习,基本了解了施工过程中的各种工艺流程和特点,利用JavaSpringboot+layui简单做个一个装修验收管理系统、适用于简单学习参考使用。
主要设计:
- 水电验收
主要功能:
(1)列表查询
功能:查询、添加、修改、删除、导出。
查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
(2)业务单据
功能:添加水电考核内容
操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
- 瓦工验收
(1)列表查询
功能:查询、添加、修改、删除、导出。
查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
(2)业务单据
功能:添加瓦工考核内容
操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
- 木工验收
(1)列表查询
功能:查询、添加、修改、删除、导出。
查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
(2)业务单据
功能:添加木工考核内容
操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
- 油漆工验收
(1)列表查询
功能:查询、添加、修改、删除、导出。
查询字段:序号、项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
(2)业务单据
功能:添加油漆考核内容
操作字段:项目名称、项目类型、项目地址、录入人、录入日期、工地负责人、设计师、监理人员、合同金额、施工日期、结束日期、材料品牌、施工人员、考核结果、备注。
- 施工结束验收
(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 |
|
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、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。
源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻
打卡 文章 更新 156/ 365天
精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻
Java项目精品实战案例《100套》
web前端期末大作业网页实战《100套》
🥇 评论区抽粉丝送书啦
💌 欢迎大家在评论区提出意见和建议! (优质评论点赞送书三本,实物图如下)💌
内容简介:
《Java多线程与大数据处理实战》对 Java 的多线程及主流大数据中间件对数据的处理进行了较为详细的讲解。本书主要讲了 Java 的线程创建方法和线程的生命周期,方便我们管理多线程的线程组和线程池,设置线程的优先级,设置守护线程,学习多线程的并发、同步和异步操作,了解 Java 的多线程并发处理工具(如信号量、多线程计数器)等内容。同时,本书还引入了 Spring Boot、Spring Batch、Quartz、Kafka 等大数据中间件。这为学习Java 多线程和大数据处理的读者提供了良好的参考。多线程和大数据的处理是许多开发岗位面试中容易被问到的知识点,一些一线开发的重要岗位面试会将多线程作为压轴问题或重要的考察点。所以,学好多线程的知识点,无论是对于日后的开发工作,还是正要前往一线开发岗位的面试准备,都是非常有用的。
本书既适合高等院校的计算机类专业的学生学习,也适合从事软件开发相关行业的初级和中级开发人员
京东自营购买链接:
《Java多线程与大数据处理实战》(李建平)【摘要 书评 试读】- 京东图书
当当自营购买链接:
《Java多线程与大数据处理实战》(李建平)【简介_书评_在线阅读】 - 当当图书
转载请注明:基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现 | 胖虎的工具箱-编程导航