基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现
🍅 作者主頁:Java李楊勇?
🍅 簡介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者🏆、【java李楊勇】公號作者? ?簡歷模板、學(xué)習(xí)資料、面試題庫【關(guān)注我,都給你】
🍅文末獲取源碼聯(lián)系和送書🍅
前言:
隨著社會的進步和科技的發(fā)展,越來越多的人追求新穎獨特,實用的居住和工作學(xué)習(xí)環(huán)境。因此,在如今的建筑裝飾工程中,既要考慮到客戶的需求和與建筑結(jié)構(gòu)的協(xié)調(diào)統(tǒng)一又要考慮到成本和施工組織的安排,所以說現(xiàn)代裝飾工程是一件相對繁瑣卻又必須要做好的事情。在保質(zhì)保量完成工作內(nèi)容的同時,還要確保施工施工驗收的各項標(biāo)準(zhǔn)數(shù)據(jù)、通過一段時間對Java相關(guān)開發(fā)知識的學(xué)習(xí),基本了解了施工過程中的各種工藝流程和特點,利用JavaSpringboot+layui簡單做個一個裝修驗收管理系統(tǒng)、適用于簡單學(xué)習(xí)參考使用。
主要設(shè)計:
主要功能:
(1)列表查詢
功能:查詢、添加、修改、刪除、導(dǎo)出。
查詢字段:序號、項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(2)業(yè)務(wù)單據(jù)
功能:添加水電考核內(nèi)容
操作字段:項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(1)列表查詢
功能:查詢、添加、修改、刪除、導(dǎo)出。
查詢字段:序號、項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(2)業(yè)務(wù)單據(jù)
功能:添加瓦工考核內(nèi)容
操作字段:項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(1)列表查詢
功能:查詢、添加、修改、刪除、導(dǎo)出。
查詢字段:序號、項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(2)業(yè)務(wù)單據(jù)
功能:添加木工考核內(nèi)容
操作字段:項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(1)列表查詢
功能:查詢、添加、修改、刪除、導(dǎo)出。
查詢字段:序號、項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(2)業(yè)務(wù)單據(jù)
功能:添加油漆考核內(nèi)容
操作字段:項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(1)列表查詢
功能:查詢、添加、修改、刪除、導(dǎo)出。
查詢字段:序號、項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
(2)業(yè)務(wù)單據(jù)
功能:添加施工結(jié)束考核內(nèi)容
操作字段:項目名稱、項目類型、項目地址、錄入人、錄入日期、工地負(fù)責(zé)人、設(shè)計師、監(jiān)理人員、合同金額、施工日期、結(jié)束日期、材料品牌、施工人員、考核結(jié)果、備注。
功能截圖:
管理員登錄:?
系統(tǒng)首頁:?
?用戶管理:
?角色管理:
?菜單管理:
SQL監(jiān)控:
?水電驗收:
?數(shù)據(jù)導(dǎo)出:
木工驗收:
修改密碼:
代碼實現(xiàn):
?裝修驗收controller:
@RestController @RequestMapping("/sys/ysWater") public class YsWaterController extends AbstractController {@Autowiredprivate YsWaterService ysWaterervice;@Autowiredprivate 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","水電業(yè)務(wù)單據(jù)");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","瓦工業(yè)務(wù)單據(jù)");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","木工業(yè)務(wù)單據(jù)");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","油漆工業(yè)務(wù)單據(jù)");PageUtils page = ysWaterervice.queryPage(params);return R.ok().put("page", page);}@RequestMapping("/sgjsList")public R sgjsList(@RequestParam Map<String, Object> params){params.put("ysType","施工結(jié)束驗收");PageUtils page = ysWaterervice.queryPage(params);return R.ok().put("page", page);}@RequestMapping("/sgjsDjList")public R sgjsDjList(@RequestParam Map<String, Object> params){params.put("ysType","施工結(jié)束業(yè)務(wù)單據(jù)");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();}/*** 將所有參數(shù)組裝成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();} }用戶權(quán)限攔截放行:
/*** Shiro的配置文件**/ @Configuration public class ShiroConfig {/*** 單機環(huán)境,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;}/*** 集群環(huán)境,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();}@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();advisor.setSecurityManager(securityManager);return advisor;} }數(shù)據(jù)庫設(shè)計:
數(shù)據(jù)庫名:renren_zxys
文檔版本:V1.0.0
文檔描述:裝修驗收數(shù)據(jù)庫表設(shè)計描述
表sys_config (系統(tǒng)配置信息表)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 狀態(tài) ??0:隱藏 ??1:顯示 |
| 5 | remark | varchar | 500 | 0 | Y | N | 備注 |
表sys_dept (部門管理)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 (數(shù)據(jù)字典表)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 刪除標(biāo)記 ?-1:已刪除 ?0:正常 |
表sys_log (系統(tǒng)日志)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 請求參數(shù) |
| 6 | time | bigint | 20 | 0 | N | N | 執(zhí)行時長(毫秒) |
| 7 | ip | varchar | 64 | 0 | Y | N | IP地址 |
| 8 | create_date | datetime | 19 | 0 | Y | N | 創(chuàng)建時間 |
表sys_menu (菜單管理)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 授權(quán)(多個用逗號分隔,如:user:list,user:create) |
| 6 | type | int | 10 | 0 | Y | N | 類型 ??0:目錄 ??1:菜單 ??2:按鈕 |
| 7 | icon | varchar | 50 | 0 | Y | N | 菜單圖標(biāo) |
| 8 | order_num | int | 10 | 0 | Y | N | 排序 |
表sys_role (角色)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 創(chuàng)建時間 |
表sys_role_dept (角色與部門對應(yīng)關(guān)系)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 (角色與菜單對應(yīng)關(guān)系)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 默認(rèn)值 | 說明 |
| 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 (系統(tǒng)用戶)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 狀態(tài) ?0:禁用 ??1:正常 |
| 8 | dept_id | bigint | 20 | 0 | Y | N | 部門ID |
| 9 | create_time | datetime | 19 | 0 | Y | N | 創(chuàng)建時間 |
表sys_user_role (用戶與角色對應(yīng)關(guān)系)
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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
| 編號 | 名稱 | 數(shù)據(jù)類型 | 長度 | 小數(shù)位 | 允許空值 | 主鍵 | 說明 |
| 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 | 工地負(fù)責(zé)人 |
| 8 | sjs | varchar | 255 | 0 | Y | N | 設(shè)計師 |
| 9 | jlry | varchar | 255 | 0 | Y | N | 監(jiā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 | 考核結(jié)果 |
| 16 | remark | varchar | 255 | 0 | Y | N | |
| 17 | ys_type | varchar | 255 | 0 | Y | N | 驗收類型(水電 瓦工 木工 油漆工) |
個人總結(jié):
?經(jīng)過近期對 java 面向?qū)ο蟪绦蛟O(shè)計、前端知識以及JAVA 框架的掌握和學(xué)習(xí),以及這段時間本教育教學(xué)系統(tǒng)的開發(fā),讓我更加了解到 java 學(xué)習(xí)的重要性。在開發(fā)這個系統(tǒng)是哪個,我完成了多個實驗以及地塊管理管理平臺的功能測試,階段的系統(tǒng)開發(fā)學(xué)習(xí)當(dāng)中,我從認(rèn)識到熟悉java,而后到能夠自主運用相關(guān)技術(shù),我發(fā)現(xiàn)了它確實有很多方便之處,比如java集抽象性和封裝性以及繼承性和多態(tài)性于一體,實現(xiàn)了對代碼重用和代碼擴充功能,提高了整體軟件開發(fā)的速度和效率。比如管理員添加用戶的時候報java.lang.NullPointException、解決的方法:查看控制臺打印信息、發(fā)現(xiàn)添加的時候未填寫相關(guān)信息、報java.lang.NullPointException、通過斷電調(diào)試發(fā)現(xiàn)用戶信息為空的數(shù)據(jù)項、在前端保存的時候必須填寫用戶完整相關(guān)信息或者數(shù)據(jù)庫設(shè)置字段可以為空都可以解決、 我學(xué)習(xí)程序設(shè)計的主要目的就是提高自己實際問題的程序解決方案的關(guān)鍵技能和技術(shù)。
源碼獲取:
?大家點贊、收藏、關(guān)注、評論啦 、查看👇🏻👇🏻👇🏻微信公眾號獲取聯(lián)系方式👇🏻👇🏻👇🏻
打卡 文章 更新?156/? 365天
?精彩專欄推薦訂閱:在下方專欄👇🏻👇🏻👇🏻👇🏻
Java項目精品實戰(zhàn)案例《100套》
web前端期末大作業(yè)網(wǎng)頁實戰(zhàn)《100套》
?🥇 評論區(qū)抽粉絲送書啦
? ? ? ? ? ? ? ? ? 💌 歡迎大家在評論區(qū)提出意見和建議! (優(yōu)質(zhì)評論點贊送書三本,實物圖如下)💌
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?內(nèi)容簡介:
《Java多線程與大數(shù)據(jù)處理實戰(zhàn)》對 Java 的多線程及主流大數(shù)據(jù)中間件對數(shù)據(jù)的處理進行了較為詳細(xì)的講解。本書主要講了 Java 的線程創(chuàng)建方法和線程的生命周期,方便我們管理多線程的線程組和線程池,設(shè)置線程的優(yōu)先級,設(shè)置守護線程,學(xué)習(xí)多線程的并發(fā)、同步和異步操作,了解 Java 的多線程并發(fā)處理工具(如信號量、多線程計數(shù)器)等內(nèi)容。同時,本書還引入了 Spring Boot、Spring Batch、Quartz、Kafka 等大數(shù)據(jù)中間件。這為學(xué)習(xí)Java 多線程和大數(shù)據(jù)處理的讀者提供了良好的參考。多線程和大數(shù)據(jù)的處理是許多開發(fā)崗位面試中容易被問到的知識點,一些一線開發(fā)的重要崗位面試會將多線程作為壓軸問題或重要的考察點。所以,學(xué)好多線程的知識點,無論是對于日后的開發(fā)工作,還是正要前往一線開發(fā)崗位的面試準(zhǔn)備,都是非常有用的。
本書既適合高等院校的計算機類專業(yè)的學(xué)生學(xué)習(xí),也適合從事軟件開發(fā)相關(guān)行業(yè)的初級和中級開發(fā)人員
京東自營購買鏈接:
《Java多線程與大數(shù)據(jù)處理實戰(zhàn)》(李建平)【摘要 書評 試讀】- 京東圖書
當(dāng)當(dāng)自營購買鏈接:
《Java多線程與大數(shù)據(jù)處理實戰(zhàn)》(李建平)【簡介_書評_在線閱讀】 - 當(dāng)當(dāng)圖書
總結(jié)
以上是生活随笔為你收集整理的基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8a 中断 传感器采集_加速度传感器的安
- 下一篇: 基于Java+jsp+servlet的养