Forráskód Böngészése

RFID酒店管理系统初步提交

LinWuTai 1 éve
commit
5021a877bc
100 módosított fájl, 9705 hozzáadás és 0 törlés
  1. 1 0
      .github/FUNDING.yml
  2. 47 0
      .gitignore
  3. 20 0
      LICENSE
  4. 97 0
      README.md
  5. 12 0
      bin/clean.bat
  6. 12 0
      bin/package.bat
  7. 14 0
      bin/run.bat
  8. BIN
      doc/若依环境使用手册.docx
  9. 226 0
      pom.xml
  10. 96 0
      ruoyi-admin/pom.xml
  11. 30 0
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  12. 18 0
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
  13. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetAdjustmentController.java
  14. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetCategoryController.java
  15. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetInformationController.java
  16. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbLocationController.java
  17. 135 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbAssetAdjustment.java
  18. 70 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbAssetCategory.java
  19. 636 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbAssetInformation.java
  20. 84 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbLocation.java
  21. 62 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbAssetAdjustmentMapper.java
  22. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbAssetCategoryMapper.java
  23. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbAssetInformationMapper.java
  24. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbLocationMapper.java
  25. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbAssetAdjustmentService.java
  26. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbAssetCategoryService.java
  27. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbAssetInformationService.java
  28. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbLocationService.java
  29. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetAdjustmentServiceImpl.java
  30. 96 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetCategoryServiceImpl.java
  31. 96 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetInformationServiceImpl.java
  32. 96 0
      ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbLocationServiceImpl.java
  33. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetAllocationController.java
  34. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetAllocationDetailController.java
  35. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetLendController.java
  36. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetOrderController.java
  37. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetOrderDetailController.java
  38. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetReturnController.java
  39. 237 0
      ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetAllocation.java
  40. 121 0
      ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetAllocationDetail.java
  41. 208 0
      ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetLend.java
  42. 180 0
      ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetOrder.java
  43. 66 0
      ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetOrderDetail.java
  44. 126 0
      ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetReturn.java
  45. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetAllocationDetailMapper.java
  46. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetAllocationMapper.java
  47. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetLendMapper.java
  48. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetOrderDetailMapper.java
  49. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetOrderMapper.java
  50. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetReturnMapper.java
  51. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetAllocationDetailService.java
  52. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetAllocationService.java
  53. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetLendService.java
  54. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetOrderDetailService.java
  55. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetOrderService.java
  56. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetReturnService.java
  57. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetAllocationDetailServiceImpl.java
  58. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetAllocationServiceImpl.java
  59. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetLendServiceImpl.java
  60. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetOrderDetailServiceImpl.java
  61. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetOrderServiceImpl.java
  62. 93 0
      ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetReturnServiceImpl.java
  63. 94 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
  64. 163 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  65. 120 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
  66. 27 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
  67. 82 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  68. 69 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  69. 83 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  70. 133 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  71. 132 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  72. 121 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  73. 131 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  74. 29 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
  75. 86 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  76. 142 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
  77. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  78. 129 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  79. 141 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  80. 38 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  81. 262 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  82. 251 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  83. 183 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  84. 125 0
      ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
  85. 1 0
      ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties
  86. 61 0
      ruoyi-admin/src/main/resources/application-druid.yml
  87. 131 0
      ruoyi-admin/src/main/resources/application.yml
  88. 24 0
      ruoyi-admin/src/main/resources/banner.txt
  89. 38 0
      ruoyi-admin/src/main/resources/i18n/messages.properties
  90. 93 0
      ruoyi-admin/src/main/resources/logback.xml
  91. 86 0
      ruoyi-admin/src/main/resources/mapper/asset/TbAssetAdjustmentMapper.xml
  92. 81 0
      ruoyi-admin/src/main/resources/mapper/asset/TbAssetCategoryMapper.xml
  93. 281 0
      ruoyi-admin/src/main/resources/mapper/asset/TbAssetInformationMapper.xml
  94. 86 0
      ruoyi-admin/src/main/resources/mapper/asset/TbLocationMapper.xml
  95. 81 0
      ruoyi-admin/src/main/resources/mapper/change/TbAssetAllocationDetailMapper.xml
  96. 118 0
      ruoyi-admin/src/main/resources/mapper/change/TbAssetAllocationMapper.xml
  97. 108 0
      ruoyi-admin/src/main/resources/mapper/change/TbAssetLendMapper.xml
  98. 65 0
      ruoyi-admin/src/main/resources/mapper/change/TbAssetOrderDetailMapper.xml
  99. 98 0
      ruoyi-admin/src/main/resources/mapper/change/TbAssetOrderMapper.xml
  100. 85 0
      ruoyi-admin/src/main/resources/mapper/change/TbAssetReturnMapper.xml

+ 1 - 0
.github/FUNDING.yml

@@ -0,0 +1 @@
+custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html

+ 47 - 0
.gitignore

@@ -0,0 +1,47 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### JRebel ###
+rebel.xml
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml

+ 20 - 0
LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 RuoYi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 97 - 0
README.md

@@ -0,0 +1,97 @@
+<p align="center">
+	<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
+</p>
+<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.5</h1>
+<h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4>
+<p align="center">
+	<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
+	<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.5-brightgreen.svg"></a>
+	<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
+</p>
+
+## 平台简介
+
+若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
+
+* 前端采用Vue、Element UI。
+* 后端采用Spring Boot、Spring Security、Redis & Jwt。
+* 权限认证使用Jwt,支持多终端认证系统。
+* 支持加载动态权限菜单,多方式轻松权限控制。
+* 高效率开发,使用代码生成器可以一键生成前后端代码。
+* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
+* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
+* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
+* 特别鸣谢:[element](https://github.com/ElemeFE/element),[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin),[eladmin-web](https://github.com/elunez/eladmin-web)。
+* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
+* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;
+
+## 内置功能
+
+1.  用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+2.  部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
+3.  岗位管理:配置系统用户所属担任职务。
+4.  菜单管理:配置系统菜单,操作权限,按钮权限标识等。
+5.  角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
+6.  字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+7.  参数管理:对系统动态配置常用参数。
+8.  通知公告:系统通知公告信息发布维护。
+9.  操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+10. 登录日志:系统登录日志记录查询包含登录异常。
+11. 在线用户:当前系统中活跃用户状态监控。
+12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
+13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
+14. 系统接口:根据业务代码自动生成相关的api接口文档。
+15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
+16. 缓存监控:对系统的缓存信息查询,命令统计等。
+17. 在线构建器:拖动表单元素生成相应的HTML代码。
+18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
+
+## 在线体验
+
+- admin/admin123  
+- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
+
+演示地址:http://vue.ruoyi.vip  
+文档地址:http://doc.ruoyi.vip
+
+## 演示图
+
+<table>
+    <tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
+    </tr>
+    <tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
+    </tr>
+    <tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
+    </tr>
+	<tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
+    </tr>	 
+    <tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
+    </tr>
+	<tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
+    </tr>
+	<tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
+    </tr>
+    <tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
+    </tr>
+</table>
+
+
+## 若依前后端分离交流群
+
+QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/已满-167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [![加入QQ群](https://img.shields.io/badge/已满-104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [![加入QQ群](https://img.shields.io/badge/已满-160110482-blue.svg)](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [![加入QQ群](https://img.shields.io/badge/已满-170801498-blue.svg)](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [![加入QQ群](https://img.shields.io/badge/已满-108482800-blue.svg)](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [![加入QQ群](https://img.shields.io/badge/已满-101046199-blue.svg)](https://jq.qq.com/?_wv=1027&k=SpyH2875) [![加入QQ群](https://img.shields.io/badge/136919097-blue.svg)](https://jq.qq.com/?_wv=1027&k=tKEt51dz) 点击按钮入群。

+ 12 - 0
bin/clean.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 清理工程target生成路径。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean
+
+pause

+ 12 - 0
bin/package.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 打包Web工程,生成war/jar包文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean package -Dmaven.test.skip=true
+
+pause

+ 14 - 0
bin/run.bat

@@ -0,0 +1,14 @@
+@echo off
+echo.
+echo [信息] 使用Jar命令运行Web工程。
+echo.
+
+cd %~dp0
+cd ../ruoyi-admin/target
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% ruoyi-admin.jar
+
+cd bin
+pause

BIN
doc/若依环境使用手册.docx


+ 226 - 0
pom.xml

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+    <groupId>com.ruoyi</groupId>
+    <artifactId>ruoyi</artifactId>
+    <version>3.8.5</version>
+
+    <name>ruoyi</name>
+    <url>http://www.ruoyi.vip</url>
+    <description>若依管理系统</description>
+    
+    <properties>
+        <ruoyi.version>3.8.5</ruoyi.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
+        <druid.version>1.2.16</druid.version>
+        <bitwalker.version>1.21</bitwalker.version>
+        <swagger.version>3.0.0</swagger.version>
+        <kaptcha.version>2.3.3</kaptcha.version>
+        <pagehelper.boot.version>1.4.6</pagehelper.boot.version>
+        <fastjson.version>2.0.25</fastjson.version>
+        <oshi.version>6.4.0</oshi.version>
+        <commons.io.version>2.11.0</commons.io.version>
+        <commons.collections.version>3.2.2</commons.collections.version>
+        <poi.version>4.1.2</poi.version>
+        <velocity.version>2.3</velocity.version>
+        <jwt.version>0.9.1</jwt.version>
+    </properties>
+	
+    <!-- 依赖声明 -->
+    <dependencyManagement>
+        <dependencies>
+
+            <!-- SpringBoot的依赖配置-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.5.14</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- 阿里数据库连接池 -->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>druid-spring-boot-starter</artifactId>
+                <version>${druid.version}</version>
+            </dependency>
+
+            <!-- 解析客户端操作系统、浏览器等 -->
+            <dependency>
+                <groupId>eu.bitwalker</groupId>
+                <artifactId>UserAgentUtils</artifactId>
+                <version>${bitwalker.version}</version>
+            </dependency>
+
+            <!-- pagehelper 分页插件 -->
+            <dependency>
+                <groupId>com.github.pagehelper</groupId>
+                <artifactId>pagehelper-spring-boot-starter</artifactId>
+                <version>${pagehelper.boot.version}</version>
+            </dependency>
+
+            <!-- 获取系统信息 -->
+            <dependency>
+                <groupId>com.github.oshi</groupId>
+                <artifactId>oshi-core</artifactId>
+                <version>${oshi.version}</version>
+            </dependency>
+
+            <!-- Swagger3依赖 -->
+            <dependency>
+                <groupId>io.springfox</groupId>
+                <artifactId>springfox-boot-starter</artifactId>
+                <version>${swagger.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>io.swagger</groupId>
+                        <artifactId>swagger-models</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
+            <!-- io常用工具类 -->
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons.io.version}</version>
+            </dependency>
+
+            <!-- excel工具 -->
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml</artifactId>
+                <version>${poi.version}</version>
+            </dependency>
+
+            <!-- velocity代码生成使用模板 -->
+            <dependency>
+                <groupId>org.apache.velocity</groupId>
+                <artifactId>velocity-engine-core</artifactId>
+                <version>${velocity.version}</version>
+            </dependency>
+
+            <!-- collections工具类 -->
+            <dependency>
+                <groupId>commons-collections</groupId>
+                <artifactId>commons-collections</artifactId>
+                <version>${commons.collections.version}</version>
+            </dependency>
+
+            <!-- 阿里JSON解析器 -->
+            <dependency>
+                <groupId>com.alibaba.fastjson2</groupId>
+                <artifactId>fastjson2</artifactId>
+                <version>${fastjson.version}</version>
+            </dependency>
+
+            <!-- Token生成与解析-->
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt</artifactId>
+                <version>${jwt.version}</version>
+            </dependency>
+
+            <!-- 验证码 -->
+            <dependency>
+                <groupId>pro.fessional</groupId>
+                <artifactId>kaptcha</artifactId>
+                <version>${kaptcha.version}</version>
+            </dependency>
+
+            <!-- 定时任务-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-quartz</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 代码生成-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-generator</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 核心模块-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-framework</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 系统模块-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-system</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 通用工具-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-common</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+        <module>ruoyi-admin</module>
+        <module>ruoyi-framework</module>
+        <module>ruoyi-system</module>
+        <module>ruoyi-quartz</module>
+        <module>ruoyi-generator</module>
+        <module>ruoyi-common</module>
+    </modules>
+    <packaging>pom</packaging>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+</project>

+ 96 - 0
ruoyi-admin/pom.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.8.5</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>ruoyi-admin</artifactId>
+
+    <description>
+        web服务入口
+    </description>
+
+    <dependencies>
+
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 表示依赖不会传递 -->
+        </dependency>
+
+        <!-- swagger3-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-models</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+
+         <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+
+        <!-- 定时任务-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-quartz</artifactId>
+        </dependency>
+
+        <!-- 代码生成-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-generator</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>   
+                <groupId>org.apache.maven.plugins</groupId>   
+                <artifactId>maven-war-plugin</artifactId>   
+                <version>3.1.0</version>   
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>   
+           </plugin>   
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 30 - 0
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@@ -0,0 +1,30 @@
+package com.ruoyi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+/**
+ * 启动程序
+ * 
+ * @author ruoyi
+ */
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+public class RuoYiApplication
+{
+    public static void main(String[] args)
+    {
+        // System.setProperty("spring.devtools.restart.enabled", "false");
+        SpringApplication.run(RuoYiApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +
+                " .-------.       ____     __        \n" +
+                " |  _ _   \\      \\   \\   /  /    \n" +
+                " | ( ' )  |       \\  _. /  '       \n" +
+                " |(_ o _) /        _( )_ .'         \n" +
+                " | (_,_).' __  ___(_ o _)'          \n" +
+                " |  |\\ \\  |  ||   |(_,_)'         \n" +
+                " |  | \\ `'   /|   `-'  /           \n" +
+                " |  |  \\    /  \\      /           \n" +
+                " ''-'   `'-'    `-..-'              ");
+    }
+}

+ 18 - 0
ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java

@@ -0,0 +1,18 @@
+package com.ruoyi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ * 
+ * @author ruoyi
+ */
+public class RuoYiServletInitializer extends SpringBootServletInitializer
+{
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(RuoYiApplication.class);
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetAdjustmentController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.asset.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.asset.domain.TbAssetAdjustment;
+import com.ruoyi.asset.service.ITbAssetAdjustmentService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产调整Controller
+ * 
+ * @author yuandongli
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/asset/adjustment")
+public class TbAssetAdjustmentController extends BaseController
+{
+    @Autowired
+    private ITbAssetAdjustmentService tbAssetAdjustmentService;
+
+    /**
+     * 查询资产调整列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:adjustment:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetAdjustment tbAssetAdjustment)
+    {
+        startPage();
+        List<TbAssetAdjustment> list = tbAssetAdjustmentService.selectTbAssetAdjustmentList(tbAssetAdjustment);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产调整列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:adjustment:export')")
+    @Log(title = "资产调整", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetAdjustment tbAssetAdjustment)
+    {
+        List<TbAssetAdjustment> list = tbAssetAdjustmentService.selectTbAssetAdjustmentList(tbAssetAdjustment);
+        ExcelUtil<TbAssetAdjustment> util = new ExcelUtil<TbAssetAdjustment>(TbAssetAdjustment.class);
+        util.exportExcel(response, list, "资产调整数据");
+    }
+
+    /**
+     * 获取资产调整详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:adjustment:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetAdjustmentService.selectTbAssetAdjustmentById(id));
+    }
+
+    /**
+     * 新增资产调整
+     */
+    @PreAuthorize("@ss.hasPermi('asset:adjustment:add')")
+    @Log(title = "资产调整", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetAdjustment tbAssetAdjustment)
+    {
+        return toAjax(tbAssetAdjustmentService.insertTbAssetAdjustment(tbAssetAdjustment));
+    }
+
+    /**
+     * 修改资产调整
+     */
+    @PreAuthorize("@ss.hasPermi('asset:adjustment:edit')")
+    @Log(title = "资产调整", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetAdjustment tbAssetAdjustment)
+    {
+        return toAjax(tbAssetAdjustmentService.updateTbAssetAdjustment(tbAssetAdjustment));
+    }
+
+    /**
+     * 删除资产调整
+     */
+    @PreAuthorize("@ss.hasPermi('asset:adjustment:remove')")
+    @Log(title = "资产调整", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetAdjustmentService.deleteTbAssetAdjustmentByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetCategoryController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.asset.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.asset.domain.TbAssetCategory;
+import com.ruoyi.asset.service.ITbAssetCategoryService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产分类Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/asset/category")
+public class TbAssetCategoryController extends BaseController
+{
+    @Autowired
+    private ITbAssetCategoryService tbAssetCategoryService;
+
+    /**
+     * 查询资产分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:category:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetCategory tbAssetCategory)
+    {
+        startPage();
+        List<TbAssetCategory> list = tbAssetCategoryService.selectTbAssetCategoryList(tbAssetCategory);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:category:export')")
+    @Log(title = "资产分类", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetCategory tbAssetCategory)
+    {
+        List<TbAssetCategory> list = tbAssetCategoryService.selectTbAssetCategoryList(tbAssetCategory);
+        ExcelUtil<TbAssetCategory> util = new ExcelUtil<TbAssetCategory>(TbAssetCategory.class);
+        util.exportExcel(response, list, "资产分类数据");
+    }
+
+    /**
+     * 获取资产分类详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:category:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetCategoryService.selectTbAssetCategoryById(id));
+    }
+
+    /**
+     * 新增资产分类
+     */
+    @PreAuthorize("@ss.hasPermi('asset:category:add')")
+    @Log(title = "资产分类", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetCategory tbAssetCategory)
+    {
+        return toAjax(tbAssetCategoryService.insertTbAssetCategory(tbAssetCategory));
+    }
+
+    /**
+     * 修改资产分类
+     */
+    @PreAuthorize("@ss.hasPermi('asset:category:edit')")
+    @Log(title = "资产分类", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetCategory tbAssetCategory)
+    {
+        return toAjax(tbAssetCategoryService.updateTbAssetCategory(tbAssetCategory));
+    }
+
+    /**
+     * 删除资产分类
+     */
+    @PreAuthorize("@ss.hasPermi('asset:category:remove')")
+    @Log(title = "资产分类", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetCategoryService.deleteTbAssetCategoryByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetInformationController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.asset.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.asset.domain.TbAssetInformation;
+import com.ruoyi.asset.service.ITbAssetInformationService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产信息Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/asset/information")
+public class TbAssetInformationController extends BaseController
+{
+    @Autowired
+    private ITbAssetInformationService tbAssetInformationService;
+
+    /**
+     * 查询资产信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:information:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetInformation tbAssetInformation)
+    {
+        startPage();
+        List<TbAssetInformation> list = tbAssetInformationService.selectTbAssetInformationList(tbAssetInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:information:export')")
+    @Log(title = "资产信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetInformation tbAssetInformation)
+    {
+        List<TbAssetInformation> list = tbAssetInformationService.selectTbAssetInformationList(tbAssetInformation);
+        ExcelUtil<TbAssetInformation> util = new ExcelUtil<TbAssetInformation>(TbAssetInformation.class);
+        util.exportExcel(response, list, "资产信息数据");
+    }
+
+    /**
+     * 获取资产信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:information:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetInformationService.selectTbAssetInformationById(id));
+    }
+
+    /**
+     * 新增资产信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:information:add')")
+    @Log(title = "资产信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetInformation tbAssetInformation)
+    {
+        return toAjax(tbAssetInformationService.insertTbAssetInformation(tbAssetInformation));
+    }
+
+    /**
+     * 修改资产信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:information:edit')")
+    @Log(title = "资产信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetInformation tbAssetInformation)
+    {
+        return toAjax(tbAssetInformationService.updateTbAssetInformation(tbAssetInformation));
+    }
+
+    /**
+     * 删除资产信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:information:remove')")
+    @Log(title = "资产信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetInformationService.deleteTbAssetInformationByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbLocationController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.asset.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.asset.domain.TbLocation;
+import com.ruoyi.asset.service.ITbLocationService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 所属位置Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/asset/location")
+public class TbLocationController extends BaseController
+{
+    @Autowired
+    private ITbLocationService tbLocationService;
+
+    /**
+     * 查询所属位置列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:location:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbLocation tbLocation)
+    {
+        startPage();
+        List<TbLocation> list = tbLocationService.selectTbLocationList(tbLocation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出所属位置列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:location:export')")
+    @Log(title = "所属位置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbLocation tbLocation)
+    {
+        List<TbLocation> list = tbLocationService.selectTbLocationList(tbLocation);
+        ExcelUtil<TbLocation> util = new ExcelUtil<TbLocation>(TbLocation.class);
+        util.exportExcel(response, list, "所属位置数据");
+    }
+
+    /**
+     * 获取所属位置详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:location:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbLocationService.selectTbLocationById(id));
+    }
+
+    /**
+     * 新增所属位置
+     */
+    @PreAuthorize("@ss.hasPermi('asset:location:add')")
+    @Log(title = "所属位置", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbLocation tbLocation)
+    {
+        return toAjax(tbLocationService.insertTbLocation(tbLocation));
+    }
+
+    /**
+     * 修改所属位置
+     */
+    @PreAuthorize("@ss.hasPermi('asset:location:edit')")
+    @Log(title = "所属位置", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbLocation tbLocation)
+    {
+        return toAjax(tbLocationService.updateTbLocation(tbLocation));
+    }
+
+    /**
+     * 删除所属位置
+     */
+    @PreAuthorize("@ss.hasPermi('asset:location:remove')")
+    @Log(title = "所属位置", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbLocationService.deleteTbLocationByIds(ids));
+    }
+}

+ 135 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbAssetAdjustment.java

@@ -0,0 +1,135 @@
+package com.ruoyi.asset.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产调整对象 tb_asset_adjustment
+ * 
+ * @author yuandongli
+ * @date 2023-05-15
+ */
+public class TbAssetAdjustment extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 资产编号 */
+    @Excel(name = "资产编号")
+    private String assetNumber;
+
+    /** 资产原信息,以JSON字符串格式存入提取 */
+    @Excel(name = "资产原信息,以JSON字符串格式存入提取")
+    private String originalAssetInfo;
+
+    /** 调整原因 */
+    @Excel(name = "调整原因")
+    private String reason;
+
+    /** 调整单号 */
+    @Excel(name = "调整单号")
+    private String orderNumber;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String preparedBy;
+
+    /** 制单部门 */
+    @Excel(name = "制单部门")
+    private String preparedDepartment;
+
+    /** 记录状态,0:未提交,1:已提交 */
+    @Excel(name = "记录状态,0:未提交,1:已提交")
+    private Long recordStatus;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setAssetNumber(String assetNumber) 
+    {
+        this.assetNumber = assetNumber;
+    }
+
+    public String getAssetNumber() 
+    {
+        return assetNumber;
+    }
+    public void setOriginalAssetInfo(String originalAssetInfo) 
+    {
+        this.originalAssetInfo = originalAssetInfo;
+    }
+
+    public String getOriginalAssetInfo() 
+    {
+        return originalAssetInfo;
+    }
+    public void setReason(String reason) 
+    {
+        this.reason = reason;
+    }
+
+    public String getReason() 
+    {
+        return reason;
+    }
+    public void setOrderNumber(String orderNumber) 
+    {
+        this.orderNumber = orderNumber;
+    }
+
+    public String getOrderNumber() 
+    {
+        return orderNumber;
+    }
+    public void setPreparedBy(String preparedBy) 
+    {
+        this.preparedBy = preparedBy;
+    }
+
+    public String getPreparedBy() 
+    {
+        return preparedBy;
+    }
+    public void setPreparedDepartment(String preparedDepartment) 
+    {
+        this.preparedDepartment = preparedDepartment;
+    }
+
+    public String getPreparedDepartment() 
+    {
+        return preparedDepartment;
+    }
+    public void setRecordStatus(Long recordStatus) 
+    {
+        this.recordStatus = recordStatus;
+    }
+
+    public Long getRecordStatus() 
+    {
+        return recordStatus;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("assetNumber", getAssetNumber())
+            .append("originalAssetInfo", getOriginalAssetInfo())
+            .append("reason", getReason())
+            .append("orderNumber", getOrderNumber())
+            .append("preparedBy", getPreparedBy())
+            .append("preparedDepartment", getPreparedDepartment())
+            .append("recordStatus", getRecordStatus())
+            .toString();
+    }
+}

+ 70 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbAssetCategory.java

@@ -0,0 +1,70 @@
+package com.ruoyi.asset.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产分类对象 tb_asset_category
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetCategory extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 分类编号 */
+    @Excel(name = "分类编号")
+    private String number;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setNumber(String number) 
+    {
+        this.number = number;
+    }
+
+    public String getNumber() 
+    {
+        return number;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("number", getNumber())
+            .append("name", getName())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 636 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbAssetInformation.java

@@ -0,0 +1,636 @@
+package com.ruoyi.asset.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产信息对象 tb_asset_information
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetInformation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 资产条码 */
+    @Excel(name = "资产条码")
+    private String code;
+
+    /** 资产名称 */
+    @Excel(name = "资产名称")
+    private String name;
+
+    /** 资产编号 */
+    @Excel(name = "资产编号")
+    private String number;
+
+    /** 图片路径 */
+    @Excel(name = "图片路径")
+    private String imageUrl;
+
+    /** 资产分类编号 */
+    @Excel(name = "资产分类编号")
+    private String categoryNumber;
+
+    /** 规格型号 */
+    @Excel(name = "规格型号")
+    private String specificationsModel;
+
+    /** ABC分类 */
+    @Excel(name = "ABC分类")
+    private String abcCategory;
+
+    /** 管理状态,0:闲置 */
+    @Excel(name = "管理状态,0:闲置")
+    private Long manageStatus;
+
+    /** 使用部门 */
+    @Excel(name = "使用部门")
+    private String userDepartment;
+
+    /** 管理部门 */
+    @Excel(name = "管理部门")
+    private String department;
+
+    /** 责任人 */
+    @Excel(name = "责任人")
+    private String responsiblePerson;
+
+    /** 所在位置编号 */
+    @Excel(name = "所在位置编号")
+    private String locationNumber;
+
+    /** 资产性质 */
+    @Excel(name = "资产性质")
+    private String property;
+
+    /** 购置日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "购置日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date purchaseDate;
+
+    /** 启用日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "启用日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date commissioningDate;
+
+    /** 原值(元) */
+    @Excel(name = "原值", readConverterExp = "元=")
+    private String originalValue;
+
+    /** 使用年限 */
+    @Excel(name = "使用年限")
+    private Long durableYears;
+
+    /** 净值(元) */
+    @Excel(name = "净值", readConverterExp = "元=")
+    private String netValue;
+
+    /** 残值(元) */
+    @Excel(name = "残值", readConverterExp = "元=")
+    private String residualValue;
+
+    /** 累计折旧(元) */
+    @Excel(name = "累计折旧", readConverterExp = "元=")
+    private String accumulatedDepreciation;
+
+    /** 最近折旧日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "最近折旧日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date lastDepreciationDate;
+
+    /** 折旧方式,0:其他 */
+    @Excel(name = "折旧方式,0:其他")
+    private Long depreciationMethod;
+
+    /** 合同编号 */
+    @Excel(name = "合同编号")
+    private String contractNumber;
+
+    /** 出厂编号 */
+    @Excel(name = "出厂编号")
+    private String factoryNumber;
+
+    /** 制造商 */
+    @Excel(name = "制造商")
+    private String manufacturer;
+
+    /** 供应商 */
+    @Excel(name = "供应商")
+    private String supplier;
+
+    /** 资产用途 */
+    @Excel(name = "资产用途")
+    private String purpose;
+
+    /** 维保到期日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "维保到期日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date maintenanceDate;
+
+    /** 维修电话 */
+    @Excel(name = "维修电话")
+    private String maintenanceTel;
+
+    /** 维修人员 */
+    @Excel(name = "维修人员")
+    private String maintenanceUser;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private String corporation;
+
+    /** 记录状态,0:未提交,1:已提交 */
+    @Excel(name = "记录状态,0:未提交,1:已提交")
+    private Long recordStatus;
+
+    /** 预留字段a */
+    @Excel(name = "预留字段a")
+    private String reservedColumnA;
+
+    /** 预留字段b */
+    @Excel(name = "预留字段b")
+    private String reservedColumnB;
+
+    /** 预留字段c */
+    @Excel(name = "预留字段c")
+    private String reservedColumnC;
+
+    /** 预留字段d */
+    @Excel(name = "预留字段d")
+    private String reservedColumnD;
+
+    /** 预留字段e */
+    @Excel(name = "预留字段e")
+    private String reservedColumnE;
+
+    /** 预留字段f */
+    @Excel(name = "预留字段f")
+    private String reservedColumnF;
+
+    /** 预留字段g */
+    @Excel(name = "预留字段g")
+    private String reservedColumnG;
+
+    /** 预留字段h */
+    @Excel(name = "预留字段h")
+    private String reservedColumnH;
+
+    /** 预留字段i */
+    @Excel(name = "预留字段i")
+    private String reservedColumnI;
+
+    /** 预留字段j */
+    @Excel(name = "预留字段j")
+    private String reservedColumnJ;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setCode(String code) 
+    {
+        this.code = code;
+    }
+
+    public String getCode() 
+    {
+        return code;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setNumber(String number) 
+    {
+        this.number = number;
+    }
+
+    public String getNumber() 
+    {
+        return number;
+    }
+    public void setImageUrl(String imageUrl) 
+    {
+        this.imageUrl = imageUrl;
+    }
+
+    public String getImageUrl() 
+    {
+        return imageUrl;
+    }
+    public void setCategoryNumber(String categoryNumber) 
+    {
+        this.categoryNumber = categoryNumber;
+    }
+
+    public String getCategoryNumber() 
+    {
+        return categoryNumber;
+    }
+    public void setSpecificationsModel(String specificationsModel) 
+    {
+        this.specificationsModel = specificationsModel;
+    }
+
+    public String getSpecificationsModel() 
+    {
+        return specificationsModel;
+    }
+    public void setAbcCategory(String abcCategory) 
+    {
+        this.abcCategory = abcCategory;
+    }
+
+    public String getAbcCategory() 
+    {
+        return abcCategory;
+    }
+    public void setManageStatus(Long manageStatus) 
+    {
+        this.manageStatus = manageStatus;
+    }
+
+    public Long getManageStatus() 
+    {
+        return manageStatus;
+    }
+    public void setUserDepartment(String userDepartment) 
+    {
+        this.userDepartment = userDepartment;
+    }
+
+    public String getUserDepartment() 
+    {
+        return userDepartment;
+    }
+    public void setDepartment(String department) 
+    {
+        this.department = department;
+    }
+
+    public String getDepartment() 
+    {
+        return department;
+    }
+    public void setResponsiblePerson(String responsiblePerson) 
+    {
+        this.responsiblePerson = responsiblePerson;
+    }
+
+    public String getResponsiblePerson() 
+    {
+        return responsiblePerson;
+    }
+    public void setLocationNumber(String locationNumber) 
+    {
+        this.locationNumber = locationNumber;
+    }
+
+    public String getLocationNumber() 
+    {
+        return locationNumber;
+    }
+    public void setProperty(String property) 
+    {
+        this.property = property;
+    }
+
+    public String getProperty() 
+    {
+        return property;
+    }
+    public void setPurchaseDate(Date purchaseDate) 
+    {
+        this.purchaseDate = purchaseDate;
+    }
+
+    public Date getPurchaseDate() 
+    {
+        return purchaseDate;
+    }
+    public void setCommissioningDate(Date commissioningDate) 
+    {
+        this.commissioningDate = commissioningDate;
+    }
+
+    public Date getCommissioningDate() 
+    {
+        return commissioningDate;
+    }
+    public void setOriginalValue(String originalValue) 
+    {
+        this.originalValue = originalValue;
+    }
+
+    public String getOriginalValue() 
+    {
+        return originalValue;
+    }
+    public void setDurableYears(Long durableYears) 
+    {
+        this.durableYears = durableYears;
+    }
+
+    public Long getDurableYears() 
+    {
+        return durableYears;
+    }
+    public void setNetValue(String netValue) 
+    {
+        this.netValue = netValue;
+    }
+
+    public String getNetValue() 
+    {
+        return netValue;
+    }
+    public void setResidualValue(String residualValue) 
+    {
+        this.residualValue = residualValue;
+    }
+
+    public String getResidualValue() 
+    {
+        return residualValue;
+    }
+    public void setAccumulatedDepreciation(String accumulatedDepreciation) 
+    {
+        this.accumulatedDepreciation = accumulatedDepreciation;
+    }
+
+    public String getAccumulatedDepreciation() 
+    {
+        return accumulatedDepreciation;
+    }
+    public void setLastDepreciationDate(Date lastDepreciationDate) 
+    {
+        this.lastDepreciationDate = lastDepreciationDate;
+    }
+
+    public Date getLastDepreciationDate() 
+    {
+        return lastDepreciationDate;
+    }
+    public void setDepreciationMethod(Long depreciationMethod) 
+    {
+        this.depreciationMethod = depreciationMethod;
+    }
+
+    public Long getDepreciationMethod() 
+    {
+        return depreciationMethod;
+    }
+    public void setContractNumber(String contractNumber) 
+    {
+        this.contractNumber = contractNumber;
+    }
+
+    public String getContractNumber() 
+    {
+        return contractNumber;
+    }
+    public void setFactoryNumber(String factoryNumber) 
+    {
+        this.factoryNumber = factoryNumber;
+    }
+
+    public String getFactoryNumber() 
+    {
+        return factoryNumber;
+    }
+    public void setManufacturer(String manufacturer) 
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer() 
+    {
+        return manufacturer;
+    }
+    public void setSupplier(String supplier) 
+    {
+        this.supplier = supplier;
+    }
+
+    public String getSupplier() 
+    {
+        return supplier;
+    }
+    public void setPurpose(String purpose) 
+    {
+        this.purpose = purpose;
+    }
+
+    public String getPurpose() 
+    {
+        return purpose;
+    }
+    public void setMaintenanceDate(Date maintenanceDate) 
+    {
+        this.maintenanceDate = maintenanceDate;
+    }
+
+    public Date getMaintenanceDate() 
+    {
+        return maintenanceDate;
+    }
+    public void setMaintenanceTel(String maintenanceTel) 
+    {
+        this.maintenanceTel = maintenanceTel;
+    }
+
+    public String getMaintenanceTel() 
+    {
+        return maintenanceTel;
+    }
+    public void setMaintenanceUser(String maintenanceUser) 
+    {
+        this.maintenanceUser = maintenanceUser;
+    }
+
+    public String getMaintenanceUser() 
+    {
+        return maintenanceUser;
+    }
+    public void setCorporation(String corporation) 
+    {
+        this.corporation = corporation;
+    }
+
+    public String getCorporation() 
+    {
+        return corporation;
+    }
+    public void setRecordStatus(Long recordStatus) 
+    {
+        this.recordStatus = recordStatus;
+    }
+
+    public Long getRecordStatus() 
+    {
+        return recordStatus;
+    }
+    public void setReservedColumnA(String reservedColumnA) 
+    {
+        this.reservedColumnA = reservedColumnA;
+    }
+
+    public String getReservedColumnA() 
+    {
+        return reservedColumnA;
+    }
+    public void setReservedColumnB(String reservedColumnB) 
+    {
+        this.reservedColumnB = reservedColumnB;
+    }
+
+    public String getReservedColumnB() 
+    {
+        return reservedColumnB;
+    }
+    public void setReservedColumnC(String reservedColumnC) 
+    {
+        this.reservedColumnC = reservedColumnC;
+    }
+
+    public String getReservedColumnC() 
+    {
+        return reservedColumnC;
+    }
+    public void setReservedColumnD(String reservedColumnD) 
+    {
+        this.reservedColumnD = reservedColumnD;
+    }
+
+    public String getReservedColumnD() 
+    {
+        return reservedColumnD;
+    }
+    public void setReservedColumnE(String reservedColumnE) 
+    {
+        this.reservedColumnE = reservedColumnE;
+    }
+
+    public String getReservedColumnE() 
+    {
+        return reservedColumnE;
+    }
+    public void setReservedColumnF(String reservedColumnF) 
+    {
+        this.reservedColumnF = reservedColumnF;
+    }
+
+    public String getReservedColumnF() 
+    {
+        return reservedColumnF;
+    }
+    public void setReservedColumnG(String reservedColumnG) 
+    {
+        this.reservedColumnG = reservedColumnG;
+    }
+
+    public String getReservedColumnG() 
+    {
+        return reservedColumnG;
+    }
+    public void setReservedColumnH(String reservedColumnH) 
+    {
+        this.reservedColumnH = reservedColumnH;
+    }
+
+    public String getReservedColumnH() 
+    {
+        return reservedColumnH;
+    }
+    public void setReservedColumnI(String reservedColumnI) 
+    {
+        this.reservedColumnI = reservedColumnI;
+    }
+
+    public String getReservedColumnI() 
+    {
+        return reservedColumnI;
+    }
+    public void setReservedColumnJ(String reservedColumnJ) 
+    {
+        this.reservedColumnJ = reservedColumnJ;
+    }
+
+    public String getReservedColumnJ() 
+    {
+        return reservedColumnJ;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("code", getCode())
+            .append("name", getName())
+            .append("number", getNumber())
+            .append("imageUrl", getImageUrl())
+            .append("categoryNumber", getCategoryNumber())
+            .append("specificationsModel", getSpecificationsModel())
+            .append("abcCategory", getAbcCategory())
+            .append("manageStatus", getManageStatus())
+            .append("userDepartment", getUserDepartment())
+            .append("department", getDepartment())
+            .append("responsiblePerson", getResponsiblePerson())
+            .append("locationNumber", getLocationNumber())
+            .append("property", getProperty())
+            .append("purchaseDate", getPurchaseDate())
+            .append("commissioningDate", getCommissioningDate())
+            .append("originalValue", getOriginalValue())
+            .append("durableYears", getDurableYears())
+            .append("netValue", getNetValue())
+            .append("residualValue", getResidualValue())
+            .append("accumulatedDepreciation", getAccumulatedDepreciation())
+            .append("lastDepreciationDate", getLastDepreciationDate())
+            .append("depreciationMethod", getDepreciationMethod())
+            .append("contractNumber", getContractNumber())
+            .append("factoryNumber", getFactoryNumber())
+            .append("manufacturer", getManufacturer())
+            .append("supplier", getSupplier())
+            .append("purpose", getPurpose())
+            .append("maintenanceDate", getMaintenanceDate())
+            .append("maintenanceTel", getMaintenanceTel())
+            .append("maintenanceUser", getMaintenanceUser())
+            .append("corporation", getCorporation())
+            .append("recordStatus", getRecordStatus())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("reservedColumnA", getReservedColumnA())
+            .append("reservedColumnB", getReservedColumnB())
+            .append("reservedColumnC", getReservedColumnC())
+            .append("reservedColumnD", getReservedColumnD())
+            .append("reservedColumnE", getReservedColumnE())
+            .append("reservedColumnF", getReservedColumnF())
+            .append("reservedColumnG", getReservedColumnG())
+            .append("reservedColumnH", getReservedColumnH())
+            .append("reservedColumnI", getReservedColumnI())
+            .append("reservedColumnJ", getReservedColumnJ())
+            .toString();
+    }
+}

+ 84 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/domain/TbLocation.java

@@ -0,0 +1,84 @@
+package com.ruoyi.asset.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 所属位置对象 tb_location
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbLocation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 位置编号 */
+    @Excel(name = "位置编号")
+    private String number;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private String company;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setNumber(String number) 
+    {
+        this.number = number;
+    }
+
+    public String getNumber() 
+    {
+        return number;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setCompany(String company) 
+    {
+        this.company = company;
+    }
+
+    public String getCompany() 
+    {
+        return company;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("number", getNumber())
+            .append("name", getName())
+            .append("company", getCompany())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 62 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbAssetAdjustmentMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.asset.mapper;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbAssetAdjustment;
+
+/**
+ * 资产调整Mapper接口
+ * 
+ * @author yuandongli
+ * @date 2023-05-15
+ */
+
+public interface TbAssetAdjustmentMapper 
+{
+    /**
+     * 查询资产调整
+     * 
+     * @param id 资产调整主键
+     * @return 资产调整
+     */
+    public TbAssetAdjustment selectTbAssetAdjustmentById(Long id);
+
+    /**
+     * 查询资产调整列表
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 资产调整集合
+     */
+    public List<TbAssetAdjustment> selectTbAssetAdjustmentList(TbAssetAdjustment tbAssetAdjustment);
+
+    /**
+     * 新增资产调整
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 结果
+     */
+    public int insertTbAssetAdjustment(TbAssetAdjustment tbAssetAdjustment);
+
+    /**
+     * 修改资产调整
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 结果
+     */
+    public int updateTbAssetAdjustment(TbAssetAdjustment tbAssetAdjustment);
+
+    /**
+     * 删除资产调整
+     * 
+     * @param id 资产调整主键
+     * @return 结果
+     */
+    public int deleteTbAssetAdjustmentById(Long id);
+
+    /**
+     * 批量删除资产调整
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetAdjustmentByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbAssetCategoryMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.mapper;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbAssetCategory;
+
+/**
+ * 资产分类Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetCategoryMapper 
+{
+    /**
+     * 查询资产分类
+     * 
+     * @param id 资产分类主键
+     * @return 资产分类
+     */
+    public TbAssetCategory selectTbAssetCategoryById(Long id);
+
+    /**
+     * 查询资产分类列表
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 资产分类集合
+     */
+    public List<TbAssetCategory> selectTbAssetCategoryList(TbAssetCategory tbAssetCategory);
+
+    /**
+     * 新增资产分类
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 结果
+     */
+    public int insertTbAssetCategory(TbAssetCategory tbAssetCategory);
+
+    /**
+     * 修改资产分类
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 结果
+     */
+    public int updateTbAssetCategory(TbAssetCategory tbAssetCategory);
+
+    /**
+     * 删除资产分类
+     * 
+     * @param id 资产分类主键
+     * @return 结果
+     */
+    public int deleteTbAssetCategoryById(Long id);
+
+    /**
+     * 批量删除资产分类
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetCategoryByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbAssetInformationMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.mapper;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbAssetInformation;
+
+/**
+ * 资产信息Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetInformationMapper 
+{
+    /**
+     * 查询资产信息
+     * 
+     * @param id 资产信息主键
+     * @return 资产信息
+     */
+    public TbAssetInformation selectTbAssetInformationById(Long id);
+
+    /**
+     * 查询资产信息列表
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 资产信息集合
+     */
+    public List<TbAssetInformation> selectTbAssetInformationList(TbAssetInformation tbAssetInformation);
+
+    /**
+     * 新增资产信息
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 结果
+     */
+    public int insertTbAssetInformation(TbAssetInformation tbAssetInformation);
+
+    /**
+     * 修改资产信息
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 结果
+     */
+    public int updateTbAssetInformation(TbAssetInformation tbAssetInformation);
+
+    /**
+     * 删除资产信息
+     * 
+     * @param id 资产信息主键
+     * @return 结果
+     */
+    public int deleteTbAssetInformationById(Long id);
+
+    /**
+     * 批量删除资产信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetInformationByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/mapper/TbLocationMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.mapper;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbLocation;
+
+/**
+ * 所属位置Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbLocationMapper 
+{
+    /**
+     * 查询所属位置
+     * 
+     * @param id 所属位置主键
+     * @return 所属位置
+     */
+    public TbLocation selectTbLocationById(Long id);
+
+    /**
+     * 查询所属位置列表
+     * 
+     * @param tbLocation 所属位置
+     * @return 所属位置集合
+     */
+    public List<TbLocation> selectTbLocationList(TbLocation tbLocation);
+
+    /**
+     * 新增所属位置
+     * 
+     * @param tbLocation 所属位置
+     * @return 结果
+     */
+    public int insertTbLocation(TbLocation tbLocation);
+
+    /**
+     * 修改所属位置
+     * 
+     * @param tbLocation 所属位置
+     * @return 结果
+     */
+    public int updateTbLocation(TbLocation tbLocation);
+
+    /**
+     * 删除所属位置
+     * 
+     * @param id 所属位置主键
+     * @return 结果
+     */
+    public int deleteTbLocationById(Long id);
+
+    /**
+     * 批量删除所属位置
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbLocationByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbAssetAdjustmentService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.service;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbAssetAdjustment;
+
+/**
+ * 资产调整Service接口
+ * 
+ * @author yuandongli
+ * @date 2023-05-15
+ */
+public interface ITbAssetAdjustmentService 
+{
+    /**
+     * 查询资产调整
+     * 
+     * @param id 资产调整主键
+     * @return 资产调整
+     */
+    public TbAssetAdjustment selectTbAssetAdjustmentById(Long id);
+
+    /**
+     * 查询资产调整列表
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 资产调整集合
+     */
+    public List<TbAssetAdjustment> selectTbAssetAdjustmentList(TbAssetAdjustment tbAssetAdjustment);
+
+    /**
+     * 新增资产调整
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 结果
+     */
+    public int insertTbAssetAdjustment(TbAssetAdjustment tbAssetAdjustment);
+
+    /**
+     * 修改资产调整
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 结果
+     */
+    public int updateTbAssetAdjustment(TbAssetAdjustment tbAssetAdjustment);
+
+    /**
+     * 批量删除资产调整
+     * 
+     * @param ids 需要删除的资产调整主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetAdjustmentByIds(Long[] ids);
+
+    /**
+     * 删除资产调整信息
+     * 
+     * @param id 资产调整主键
+     * @return 结果
+     */
+    public int deleteTbAssetAdjustmentById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbAssetCategoryService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.service;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbAssetCategory;
+
+/**
+ * 资产分类Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetCategoryService 
+{
+    /**
+     * 查询资产分类
+     * 
+     * @param id 资产分类主键
+     * @return 资产分类
+     */
+    public TbAssetCategory selectTbAssetCategoryById(Long id);
+
+    /**
+     * 查询资产分类列表
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 资产分类集合
+     */
+    public List<TbAssetCategory> selectTbAssetCategoryList(TbAssetCategory tbAssetCategory);
+
+    /**
+     * 新增资产分类
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 结果
+     */
+    public int insertTbAssetCategory(TbAssetCategory tbAssetCategory);
+
+    /**
+     * 修改资产分类
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 结果
+     */
+    public int updateTbAssetCategory(TbAssetCategory tbAssetCategory);
+
+    /**
+     * 批量删除资产分类
+     * 
+     * @param ids 需要删除的资产分类主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetCategoryByIds(Long[] ids);
+
+    /**
+     * 删除资产分类信息
+     * 
+     * @param id 资产分类主键
+     * @return 结果
+     */
+    public int deleteTbAssetCategoryById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbAssetInformationService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.service;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbAssetInformation;
+
+/**
+ * 资产信息Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetInformationService 
+{
+    /**
+     * 查询资产信息
+     * 
+     * @param id 资产信息主键
+     * @return 资产信息
+     */
+    public TbAssetInformation selectTbAssetInformationById(Long id);
+
+    /**
+     * 查询资产信息列表
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 资产信息集合
+     */
+    public List<TbAssetInformation> selectTbAssetInformationList(TbAssetInformation tbAssetInformation);
+
+    /**
+     * 新增资产信息
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 结果
+     */
+    public int insertTbAssetInformation(TbAssetInformation tbAssetInformation);
+
+    /**
+     * 修改资产信息
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 结果
+     */
+    public int updateTbAssetInformation(TbAssetInformation tbAssetInformation);
+
+    /**
+     * 批量删除资产信息
+     * 
+     * @param ids 需要删除的资产信息主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetInformationByIds(Long[] ids);
+
+    /**
+     * 删除资产信息信息
+     * 
+     * @param id 资产信息主键
+     * @return 结果
+     */
+    public int deleteTbAssetInformationById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/ITbLocationService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.asset.service;
+
+import java.util.List;
+import com.ruoyi.asset.domain.TbLocation;
+
+/**
+ * 所属位置Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbLocationService 
+{
+    /**
+     * 查询所属位置
+     * 
+     * @param id 所属位置主键
+     * @return 所属位置
+     */
+    public TbLocation selectTbLocationById(Long id);
+
+    /**
+     * 查询所属位置列表
+     * 
+     * @param tbLocation 所属位置
+     * @return 所属位置集合
+     */
+    public List<TbLocation> selectTbLocationList(TbLocation tbLocation);
+
+    /**
+     * 新增所属位置
+     * 
+     * @param tbLocation 所属位置
+     * @return 结果
+     */
+    public int insertTbLocation(TbLocation tbLocation);
+
+    /**
+     * 修改所属位置
+     * 
+     * @param tbLocation 所属位置
+     * @return 结果
+     */
+    public int updateTbLocation(TbLocation tbLocation);
+
+    /**
+     * 批量删除所属位置
+     * 
+     * @param ids 需要删除的所属位置主键集合
+     * @return 结果
+     */
+    public int deleteTbLocationByIds(Long[] ids);
+
+    /**
+     * 删除所属位置信息
+     * 
+     * @param id 所属位置主键
+     * @return 结果
+     */
+    public int deleteTbLocationById(Long id);
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetAdjustmentServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.asset.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.asset.mapper.TbAssetAdjustmentMapper;
+import com.ruoyi.asset.domain.TbAssetAdjustment;
+import com.ruoyi.asset.service.ITbAssetAdjustmentService;
+
+/**
+ * 资产调整Service业务层处理
+ * 
+ * @author yuandongli
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetAdjustmentServiceImpl implements ITbAssetAdjustmentService 
+{
+    @Autowired
+    private TbAssetAdjustmentMapper tbAssetAdjustmentMapper;
+
+    /**
+     * 查询资产调整
+     * 
+     * @param id 资产调整主键
+     * @return 资产调整
+     */
+    @Override
+    public TbAssetAdjustment selectTbAssetAdjustmentById(Long id)
+    {
+        return tbAssetAdjustmentMapper.selectTbAssetAdjustmentById(id);
+    }
+
+    /**
+     * 查询资产调整列表
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 资产调整
+     */
+    @Override
+    public List<TbAssetAdjustment> selectTbAssetAdjustmentList(TbAssetAdjustment tbAssetAdjustment)
+    {
+        return tbAssetAdjustmentMapper.selectTbAssetAdjustmentList(tbAssetAdjustment);
+    }
+
+    /**
+     * 新增资产调整
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetAdjustment(TbAssetAdjustment tbAssetAdjustment)
+    {
+        return tbAssetAdjustmentMapper.insertTbAssetAdjustment(tbAssetAdjustment);
+    }
+
+    /**
+     * 修改资产调整
+     * 
+     * @param tbAssetAdjustment 资产调整
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetAdjustment(TbAssetAdjustment tbAssetAdjustment)
+    {
+        return tbAssetAdjustmentMapper.updateTbAssetAdjustment(tbAssetAdjustment);
+    }
+
+    /**
+     * 批量删除资产调整
+     * 
+     * @param ids 需要删除的资产调整主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetAdjustmentByIds(Long[] ids)
+    {
+        return tbAssetAdjustmentMapper.deleteTbAssetAdjustmentByIds(ids);
+    }
+
+    /**
+     * 删除资产调整信息
+     * 
+     * @param id 资产调整主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetAdjustmentById(Long id)
+    {
+        return tbAssetAdjustmentMapper.deleteTbAssetAdjustmentById(id);
+    }
+}

+ 96 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetCategoryServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.asset.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.asset.mapper.TbAssetCategoryMapper;
+import com.ruoyi.asset.domain.TbAssetCategory;
+import com.ruoyi.asset.service.ITbAssetCategoryService;
+
+/**
+ * 资产分类Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetCategoryServiceImpl implements ITbAssetCategoryService 
+{
+    @Autowired
+    private TbAssetCategoryMapper tbAssetCategoryMapper;
+
+    /**
+     * 查询资产分类
+     * 
+     * @param id 资产分类主键
+     * @return 资产分类
+     */
+    @Override
+    public TbAssetCategory selectTbAssetCategoryById(Long id)
+    {
+        return tbAssetCategoryMapper.selectTbAssetCategoryById(id);
+    }
+
+    /**
+     * 查询资产分类列表
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 资产分类
+     */
+    @Override
+    public List<TbAssetCategory> selectTbAssetCategoryList(TbAssetCategory tbAssetCategory)
+    {
+        return tbAssetCategoryMapper.selectTbAssetCategoryList(tbAssetCategory);
+    }
+
+    /**
+     * 新增资产分类
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetCategory(TbAssetCategory tbAssetCategory)
+    {
+        tbAssetCategory.setCreateTime(DateUtils.getNowDate());
+        return tbAssetCategoryMapper.insertTbAssetCategory(tbAssetCategory);
+    }
+
+    /**
+     * 修改资产分类
+     * 
+     * @param tbAssetCategory 资产分类
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetCategory(TbAssetCategory tbAssetCategory)
+    {
+        tbAssetCategory.setUpdateTime(DateUtils.getNowDate());
+        return tbAssetCategoryMapper.updateTbAssetCategory(tbAssetCategory);
+    }
+
+    /**
+     * 批量删除资产分类
+     * 
+     * @param ids 需要删除的资产分类主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetCategoryByIds(Long[] ids)
+    {
+        return tbAssetCategoryMapper.deleteTbAssetCategoryByIds(ids);
+    }
+
+    /**
+     * 删除资产分类信息
+     * 
+     * @param id 资产分类主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetCategoryById(Long id)
+    {
+        return tbAssetCategoryMapper.deleteTbAssetCategoryById(id);
+    }
+}

+ 96 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetInformationServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.asset.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.asset.mapper.TbAssetInformationMapper;
+import com.ruoyi.asset.domain.TbAssetInformation;
+import com.ruoyi.asset.service.ITbAssetInformationService;
+
+/**
+ * 资产信息Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetInformationServiceImpl implements ITbAssetInformationService 
+{
+    @Autowired
+    private TbAssetInformationMapper tbAssetInformationMapper;
+
+    /**
+     * 查询资产信息
+     * 
+     * @param id 资产信息主键
+     * @return 资产信息
+     */
+    @Override
+    public TbAssetInformation selectTbAssetInformationById(Long id)
+    {
+        return tbAssetInformationMapper.selectTbAssetInformationById(id);
+    }
+
+    /**
+     * 查询资产信息列表
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 资产信息
+     */
+    @Override
+    public List<TbAssetInformation> selectTbAssetInformationList(TbAssetInformation tbAssetInformation)
+    {
+        return tbAssetInformationMapper.selectTbAssetInformationList(tbAssetInformation);
+    }
+
+    /**
+     * 新增资产信息
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetInformation(TbAssetInformation tbAssetInformation)
+    {
+        tbAssetInformation.setCreateTime(DateUtils.getNowDate());
+        return tbAssetInformationMapper.insertTbAssetInformation(tbAssetInformation);
+    }
+
+    /**
+     * 修改资产信息
+     * 
+     * @param tbAssetInformation 资产信息
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetInformation(TbAssetInformation tbAssetInformation)
+    {
+        tbAssetInformation.setUpdateTime(DateUtils.getNowDate());
+        return tbAssetInformationMapper.updateTbAssetInformation(tbAssetInformation);
+    }
+
+    /**
+     * 批量删除资产信息
+     * 
+     * @param ids 需要删除的资产信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetInformationByIds(Long[] ids)
+    {
+        return tbAssetInformationMapper.deleteTbAssetInformationByIds(ids);
+    }
+
+    /**
+     * 删除资产信息信息
+     * 
+     * @param id 资产信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetInformationById(Long id)
+    {
+        return tbAssetInformationMapper.deleteTbAssetInformationById(id);
+    }
+}

+ 96 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbLocationServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.asset.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.asset.mapper.TbLocationMapper;
+import com.ruoyi.asset.domain.TbLocation;
+import com.ruoyi.asset.service.ITbLocationService;
+
+/**
+ * 所属位置Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbLocationServiceImpl implements ITbLocationService 
+{
+    @Autowired
+    private TbLocationMapper tbLocationMapper;
+
+    /**
+     * 查询所属位置
+     * 
+     * @param id 所属位置主键
+     * @return 所属位置
+     */
+    @Override
+    public TbLocation selectTbLocationById(Long id)
+    {
+        return tbLocationMapper.selectTbLocationById(id);
+    }
+
+    /**
+     * 查询所属位置列表
+     * 
+     * @param tbLocation 所属位置
+     * @return 所属位置
+     */
+    @Override
+    public List<TbLocation> selectTbLocationList(TbLocation tbLocation)
+    {
+        return tbLocationMapper.selectTbLocationList(tbLocation);
+    }
+
+    /**
+     * 新增所属位置
+     * 
+     * @param tbLocation 所属位置
+     * @return 结果
+     */
+    @Override
+    public int insertTbLocation(TbLocation tbLocation)
+    {
+        tbLocation.setCreateTime(DateUtils.getNowDate());
+        return tbLocationMapper.insertTbLocation(tbLocation);
+    }
+
+    /**
+     * 修改所属位置
+     * 
+     * @param tbLocation 所属位置
+     * @return 结果
+     */
+    @Override
+    public int updateTbLocation(TbLocation tbLocation)
+    {
+        tbLocation.setUpdateTime(DateUtils.getNowDate());
+        return tbLocationMapper.updateTbLocation(tbLocation);
+    }
+
+    /**
+     * 批量删除所属位置
+     * 
+     * @param ids 需要删除的所属位置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbLocationByIds(Long[] ids)
+    {
+        return tbLocationMapper.deleteTbLocationByIds(ids);
+    }
+
+    /**
+     * 删除所属位置信息
+     * 
+     * @param id 所属位置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbLocationById(Long id)
+    {
+        return tbLocationMapper.deleteTbLocationById(id);
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetAllocationController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.change.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.change.domain.TbAssetAllocation;
+import com.ruoyi.change.service.ITbAssetAllocationService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产调拨Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/change/allocation")
+public class TbAssetAllocationController extends BaseController
+{
+    @Autowired
+    private ITbAssetAllocationService tbAssetAllocationService;
+
+    /**
+     * 查询资产调拨列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocation:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetAllocation tbAssetAllocation)
+    {
+        startPage();
+        List<TbAssetAllocation> list = tbAssetAllocationService.selectTbAssetAllocationList(tbAssetAllocation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产调拨列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocation:export')")
+    @Log(title = "资产调拨", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetAllocation tbAssetAllocation)
+    {
+        List<TbAssetAllocation> list = tbAssetAllocationService.selectTbAssetAllocationList(tbAssetAllocation);
+        ExcelUtil<TbAssetAllocation> util = new ExcelUtil<TbAssetAllocation>(TbAssetAllocation.class);
+        util.exportExcel(response, list, "资产调拨数据");
+    }
+
+    /**
+     * 获取资产调拨详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocation:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetAllocationService.selectTbAssetAllocationById(id));
+    }
+
+    /**
+     * 新增资产调拨
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocation:add')")
+    @Log(title = "资产调拨", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetAllocation tbAssetAllocation)
+    {
+        return toAjax(tbAssetAllocationService.insertTbAssetAllocation(tbAssetAllocation));
+    }
+
+    /**
+     * 修改资产调拨
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocation:edit')")
+    @Log(title = "资产调拨", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetAllocation tbAssetAllocation)
+    {
+        return toAjax(tbAssetAllocationService.updateTbAssetAllocation(tbAssetAllocation));
+    }
+
+    /**
+     * 删除资产调拨
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocation:remove')")
+    @Log(title = "资产调拨", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetAllocationService.deleteTbAssetAllocationByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetAllocationDetailController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.change.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.change.domain.TbAssetAllocationDetail;
+import com.ruoyi.change.service.ITbAssetAllocationDetailService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产调拨明细Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/change/allocationDetail")
+public class TbAssetAllocationDetailController extends BaseController
+{
+    @Autowired
+    private ITbAssetAllocationDetailService tbAssetAllocationDetailService;
+
+    /**
+     * 查询资产调拨明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocationDetail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        startPage();
+        List<TbAssetAllocationDetail> list = tbAssetAllocationDetailService.selectTbAssetAllocationDetailList(tbAssetAllocationDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产调拨明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocationDetail:export')")
+    @Log(title = "资产调拨明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        List<TbAssetAllocationDetail> list = tbAssetAllocationDetailService.selectTbAssetAllocationDetailList(tbAssetAllocationDetail);
+        ExcelUtil<TbAssetAllocationDetail> util = new ExcelUtil<TbAssetAllocationDetail>(TbAssetAllocationDetail.class);
+        util.exportExcel(response, list, "资产调拨明细数据");
+    }
+
+    /**
+     * 获取资产调拨明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocationDetail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetAllocationDetailService.selectTbAssetAllocationDetailById(id));
+    }
+
+    /**
+     * 新增资产调拨明细
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocationDetail:add')")
+    @Log(title = "资产调拨明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        return toAjax(tbAssetAllocationDetailService.insertTbAssetAllocationDetail(tbAssetAllocationDetail));
+    }
+
+    /**
+     * 修改资产调拨明细
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocationDetail:edit')")
+    @Log(title = "资产调拨明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        return toAjax(tbAssetAllocationDetailService.updateTbAssetAllocationDetail(tbAssetAllocationDetail));
+    }
+
+    /**
+     * 删除资产调拨明细
+     */
+    @PreAuthorize("@ss.hasPermi('change:allocationDetail:remove')")
+    @Log(title = "资产调拨明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetAllocationDetailService.deleteTbAssetAllocationDetailByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetLendController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.change.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.change.domain.TbAssetLend;
+import com.ruoyi.change.service.ITbAssetLendService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产借出Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/change/assetLend")
+public class TbAssetLendController extends BaseController
+{
+    @Autowired
+    private ITbAssetLendService tbAssetLendService;
+
+    /**
+     * 查询资产借出列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:assetLend:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetLend tbAssetLend)
+    {
+        startPage();
+        List<TbAssetLend> list = tbAssetLendService.selectTbAssetLendList(tbAssetLend);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产借出列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:assetLend:export')")
+    @Log(title = "资产借出", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetLend tbAssetLend)
+    {
+        List<TbAssetLend> list = tbAssetLendService.selectTbAssetLendList(tbAssetLend);
+        ExcelUtil<TbAssetLend> util = new ExcelUtil<TbAssetLend>(TbAssetLend.class);
+        util.exportExcel(response, list, "资产借出数据");
+    }
+
+    /**
+     * 获取资产借出详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('change:assetLend:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetLendService.selectTbAssetLendById(id));
+    }
+
+    /**
+     * 新增资产借出
+     */
+    @PreAuthorize("@ss.hasPermi('change:assetLend:add')")
+    @Log(title = "资产借出", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetLend tbAssetLend)
+    {
+        return toAjax(tbAssetLendService.insertTbAssetLend(tbAssetLend));
+    }
+
+    /**
+     * 修改资产借出
+     */
+    @PreAuthorize("@ss.hasPermi('change:assetLend:edit')")
+    @Log(title = "资产借出", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetLend tbAssetLend)
+    {
+        return toAjax(tbAssetLendService.updateTbAssetLend(tbAssetLend));
+    }
+
+    /**
+     * 删除资产借出
+     */
+    @PreAuthorize("@ss.hasPermi('change:assetLend:remove')")
+    @Log(title = "资产借出", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetLendService.deleteTbAssetLendByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetOrderController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.change.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.change.domain.TbAssetOrder;
+import com.ruoyi.change.service.ITbAssetOrderService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产单据Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/change/order")
+public class TbAssetOrderController extends BaseController
+{
+    @Autowired
+    private ITbAssetOrderService tbAssetOrderService;
+
+    /**
+     * 查询资产单据列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:order:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetOrder tbAssetOrder)
+    {
+        startPage();
+        List<TbAssetOrder> list = tbAssetOrderService.selectTbAssetOrderList(tbAssetOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产单据列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:order:export')")
+    @Log(title = "资产单据", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetOrder tbAssetOrder)
+    {
+        List<TbAssetOrder> list = tbAssetOrderService.selectTbAssetOrderList(tbAssetOrder);
+        ExcelUtil<TbAssetOrder> util = new ExcelUtil<TbAssetOrder>(TbAssetOrder.class);
+        util.exportExcel(response, list, "资产单据数据");
+    }
+
+    /**
+     * 获取资产单据详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('change:order:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetOrderService.selectTbAssetOrderById(id));
+    }
+
+    /**
+     * 新增资产单据
+     */
+    @PreAuthorize("@ss.hasPermi('change:order:add')")
+    @Log(title = "资产单据", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetOrder tbAssetOrder)
+    {
+        return toAjax(tbAssetOrderService.insertTbAssetOrder(tbAssetOrder));
+    }
+
+    /**
+     * 修改资产单据
+     */
+    @PreAuthorize("@ss.hasPermi('change:order:edit')")
+    @Log(title = "资产单据", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetOrder tbAssetOrder)
+    {
+        return toAjax(tbAssetOrderService.updateTbAssetOrder(tbAssetOrder));
+    }
+
+    /**
+     * 删除资产单据
+     */
+    @PreAuthorize("@ss.hasPermi('change:order:remove')")
+    @Log(title = "资产单据", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetOrderService.deleteTbAssetOrderByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetOrderDetailController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.change.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.change.domain.TbAssetOrderDetail;
+import com.ruoyi.change.service.ITbAssetOrderDetailService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产单据明细Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/change/orderDetail")
+public class TbAssetOrderDetailController extends BaseController
+{
+    @Autowired
+    private ITbAssetOrderDetailService tbAssetOrderDetailService;
+
+    /**
+     * 查询资产单据明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:orderDetail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        startPage();
+        List<TbAssetOrderDetail> list = tbAssetOrderDetailService.selectTbAssetOrderDetailList(tbAssetOrderDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产单据明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:orderDetail:export')")
+    @Log(title = "资产单据明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        List<TbAssetOrderDetail> list = tbAssetOrderDetailService.selectTbAssetOrderDetailList(tbAssetOrderDetail);
+        ExcelUtil<TbAssetOrderDetail> util = new ExcelUtil<TbAssetOrderDetail>(TbAssetOrderDetail.class);
+        util.exportExcel(response, list, "资产单据明细数据");
+    }
+
+    /**
+     * 获取资产单据明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('change:orderDetail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetOrderDetailService.selectTbAssetOrderDetailById(id));
+    }
+
+    /**
+     * 新增资产单据明细
+     */
+    @PreAuthorize("@ss.hasPermi('change:orderDetail:add')")
+    @Log(title = "资产单据明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        return toAjax(tbAssetOrderDetailService.insertTbAssetOrderDetail(tbAssetOrderDetail));
+    }
+
+    /**
+     * 修改资产单据明细
+     */
+    @PreAuthorize("@ss.hasPermi('change:orderDetail:edit')")
+    @Log(title = "资产单据明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        return toAjax(tbAssetOrderDetailService.updateTbAssetOrderDetail(tbAssetOrderDetail));
+    }
+
+    /**
+     * 删除资产单据明细
+     */
+    @PreAuthorize("@ss.hasPermi('change:orderDetail:remove')")
+    @Log(title = "资产单据明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetOrderDetailService.deleteTbAssetOrderDetailByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/controller/TbAssetReturnController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.change.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.change.domain.TbAssetReturn;
+import com.ruoyi.change.service.ITbAssetReturnService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资产归还Controller
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@RestController
+@RequestMapping("/change/return")
+public class TbAssetReturnController extends BaseController
+{
+    @Autowired
+    private ITbAssetReturnService tbAssetReturnService;
+
+    /**
+     * 查询资产归还列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:return:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbAssetReturn tbAssetReturn)
+    {
+        startPage();
+        List<TbAssetReturn> list = tbAssetReturnService.selectTbAssetReturnList(tbAssetReturn);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产归还列表
+     */
+    @PreAuthorize("@ss.hasPermi('change:return:export')")
+    @Log(title = "资产归还", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TbAssetReturn tbAssetReturn)
+    {
+        List<TbAssetReturn> list = tbAssetReturnService.selectTbAssetReturnList(tbAssetReturn);
+        ExcelUtil<TbAssetReturn> util = new ExcelUtil<TbAssetReturn>(TbAssetReturn.class);
+        util.exportExcel(response, list, "资产归还数据");
+    }
+
+    /**
+     * 获取资产归还详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('change:return:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tbAssetReturnService.selectTbAssetReturnById(id));
+    }
+
+    /**
+     * 新增资产归还
+     */
+    @PreAuthorize("@ss.hasPermi('change:return:add')")
+    @Log(title = "资产归还", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbAssetReturn tbAssetReturn)
+    {
+        return toAjax(tbAssetReturnService.insertTbAssetReturn(tbAssetReturn));
+    }
+
+    /**
+     * 修改资产归还
+     */
+    @PreAuthorize("@ss.hasPermi('change:return:edit')")
+    @Log(title = "资产归还", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbAssetReturn tbAssetReturn)
+    {
+        return toAjax(tbAssetReturnService.updateTbAssetReturn(tbAssetReturn));
+    }
+
+    /**
+     * 删除资产归还
+     */
+    @PreAuthorize("@ss.hasPermi('change:return:remove')")
+    @Log(title = "资产归还", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tbAssetReturnService.deleteTbAssetReturnByIds(ids));
+    }
+}

+ 237 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetAllocation.java

@@ -0,0 +1,237 @@
+package com.ruoyi.change.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产调拨对象 tb_asset_allocation
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetAllocation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 调拨单号 */
+    @Excel(name = "调拨单号")
+    private String orderNumber;
+
+    /** 调出部门 */
+    @Excel(name = "调出部门")
+    private String callOutDepartment;
+
+    /** 调出经办人 */
+    @Excel(name = "调出经办人")
+    private String callOutBy;
+
+    /** 调出日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "调出日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date callOutDate;
+
+    /** 调入部门 */
+    @Excel(name = "调入部门")
+    private String callInDepartment;
+
+    /** 调入经办人 */
+    @Excel(name = "调入经办人")
+    private String callInBy;
+
+    /** 调入日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "调入日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date callInDate;
+
+    /** 资产总原值(元) */
+    @Excel(name = "资产总原值", readConverterExp = "元=")
+    private String assetTotalOriginalValue;
+
+    /** 资产总净值(元) */
+    @Excel(name = "资产总净值", readConverterExp = "元=")
+    private String assetTotalNetValue;
+
+    /** 调拨说明 */
+    @Excel(name = "调拨说明")
+    private String reason;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String preparedBy;
+
+    /** 制单部门 */
+    @Excel(name = "制单部门")
+    private String preparedDepartment;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private String corporation;
+
+    /** 记录状态 */
+    @Excel(name = "记录状态")
+    private Long recordStatus;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setOrderNumber(String orderNumber) 
+    {
+        this.orderNumber = orderNumber;
+    }
+
+    public String getOrderNumber() 
+    {
+        return orderNumber;
+    }
+    public void setCallOutDepartment(String callOutDepartment) 
+    {
+        this.callOutDepartment = callOutDepartment;
+    }
+
+    public String getCallOutDepartment() 
+    {
+        return callOutDepartment;
+    }
+    public void setCallOutBy(String callOutBy) 
+    {
+        this.callOutBy = callOutBy;
+    }
+
+    public String getCallOutBy() 
+    {
+        return callOutBy;
+    }
+    public void setCallOutDate(Date callOutDate) 
+    {
+        this.callOutDate = callOutDate;
+    }
+
+    public Date getCallOutDate() 
+    {
+        return callOutDate;
+    }
+    public void setCallInDepartment(String callInDepartment) 
+    {
+        this.callInDepartment = callInDepartment;
+    }
+
+    public String getCallInDepartment() 
+    {
+        return callInDepartment;
+    }
+    public void setCallInBy(String callInBy) 
+    {
+        this.callInBy = callInBy;
+    }
+
+    public String getCallInBy() 
+    {
+        return callInBy;
+    }
+    public void setCallInDate(Date callInDate) 
+    {
+        this.callInDate = callInDate;
+    }
+
+    public Date getCallInDate() 
+    {
+        return callInDate;
+    }
+    public void setAssetTotalOriginalValue(String assetTotalOriginalValue) 
+    {
+        this.assetTotalOriginalValue = assetTotalOriginalValue;
+    }
+
+    public String getAssetTotalOriginalValue() 
+    {
+        return assetTotalOriginalValue;
+    }
+    public void setAssetTotalNetValue(String assetTotalNetValue) 
+    {
+        this.assetTotalNetValue = assetTotalNetValue;
+    }
+
+    public String getAssetTotalNetValue() 
+    {
+        return assetTotalNetValue;
+    }
+    public void setReason(String reason) 
+    {
+        this.reason = reason;
+    }
+
+    public String getReason() 
+    {
+        return reason;
+    }
+    public void setPreparedBy(String preparedBy) 
+    {
+        this.preparedBy = preparedBy;
+    }
+
+    public String getPreparedBy() 
+    {
+        return preparedBy;
+    }
+    public void setPreparedDepartment(String preparedDepartment) 
+    {
+        this.preparedDepartment = preparedDepartment;
+    }
+
+    public String getPreparedDepartment() 
+    {
+        return preparedDepartment;
+    }
+    public void setCorporation(String corporation) 
+    {
+        this.corporation = corporation;
+    }
+
+    public String getCorporation() 
+    {
+        return corporation;
+    }
+    public void setRecordStatus(Long recordStatus) 
+    {
+        this.recordStatus = recordStatus;
+    }
+
+    public Long getRecordStatus() 
+    {
+        return recordStatus;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("orderNumber", getOrderNumber())
+            .append("callOutDepartment", getCallOutDepartment())
+            .append("callOutBy", getCallOutBy())
+            .append("callOutDate", getCallOutDate())
+            .append("callInDepartment", getCallInDepartment())
+            .append("callInBy", getCallInBy())
+            .append("callInDate", getCallInDate())
+            .append("assetTotalOriginalValue", getAssetTotalOriginalValue())
+            .append("assetTotalNetValue", getAssetTotalNetValue())
+            .append("reason", getReason())
+            .append("preparedBy", getPreparedBy())
+            .append("preparedDepartment", getPreparedDepartment())
+            .append("corporation", getCorporation())
+            .append("recordStatus", getRecordStatus())
+            .toString();
+    }
+}

+ 121 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetAllocationDetail.java

@@ -0,0 +1,121 @@
+package com.ruoyi.change.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产调拨明细对象 tb_asset_allocation_detail
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetAllocationDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 调拨单号 */
+    @Excel(name = "调拨单号")
+    private String allocationOrderNumber;
+
+    /** 资产编号 */
+    @Excel(name = "资产编号")
+    private String assetNumber;
+
+    /** 旧管理人 */
+    @Excel(name = "旧管理人")
+    private String oldResponsiblePerson;
+
+    /** 旧功能位置编号 */
+    @Excel(name = "旧功能位置编号")
+    private String oldLocationNumber;
+
+    /** 新管理人 */
+    @Excel(name = "新管理人")
+    private String newResponsiblePerson;
+
+    /** 新功能位置编号 */
+    @Excel(name = "新功能位置编号")
+    private String newLocationNumber;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setAllocationOrderNumber(String allocationOrderNumber) 
+    {
+        this.allocationOrderNumber = allocationOrderNumber;
+    }
+
+    public String getAllocationOrderNumber() 
+    {
+        return allocationOrderNumber;
+    }
+    public void setAssetNumber(String assetNumber) 
+    {
+        this.assetNumber = assetNumber;
+    }
+
+    public String getAssetNumber() 
+    {
+        return assetNumber;
+    }
+    public void setOldResponsiblePerson(String oldResponsiblePerson) 
+    {
+        this.oldResponsiblePerson = oldResponsiblePerson;
+    }
+
+    public String getOldResponsiblePerson() 
+    {
+        return oldResponsiblePerson;
+    }
+    public void setOldLocationNumber(String oldLocationNumber) 
+    {
+        this.oldLocationNumber = oldLocationNumber;
+    }
+
+    public String getOldLocationNumber() 
+    {
+        return oldLocationNumber;
+    }
+    public void setNewResponsiblePerson(String newResponsiblePerson) 
+    {
+        this.newResponsiblePerson = newResponsiblePerson;
+    }
+
+    public String getNewResponsiblePerson() 
+    {
+        return newResponsiblePerson;
+    }
+    public void setNewLocationNumber(String newLocationNumber) 
+    {
+        this.newLocationNumber = newLocationNumber;
+    }
+
+    public String getNewLocationNumber() 
+    {
+        return newLocationNumber;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("allocationOrderNumber", getAllocationOrderNumber())
+            .append("assetNumber", getAssetNumber())
+            .append("oldResponsiblePerson", getOldResponsiblePerson())
+            .append("oldLocationNumber", getOldLocationNumber())
+            .append("newResponsiblePerson", getNewResponsiblePerson())
+            .append("newLocationNumber", getNewLocationNumber())
+            .toString();
+    }
+}

+ 208 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetLend.java

@@ -0,0 +1,208 @@
+package com.ruoyi.change.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产借出对象 tb_asset_lend
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetLend extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 借出单号 */
+    @Excel(name = "借出单号")
+    private String orderNumber;
+
+    /** 资产总原值(元) */
+    @Excel(name = "资产总原值", readConverterExp = "元=")
+    private String assetTotalOriginalValue;
+
+    /** 资产总净值(元) */
+    @Excel(name = "资产总净值", readConverterExp = "元=")
+    private String assetTotalNetValue;
+
+    /** 申请日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "申请日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date applicationDate;
+
+    /** 借出部门 */
+    @Excel(name = "借出部门")
+    private String lendDepartment;
+
+    /** 经手人 */
+    @Excel(name = "经手人")
+    private String bySponsor;
+
+    /** 往来单位 */
+    @Excel(name = "往来单位")
+    private String passingUnit;
+
+    /** 借用说明 */
+    @Excel(name = "借用说明")
+    private String reason;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String preparedBy;
+
+    /** 制单部门 */
+    @Excel(name = "制单部门")
+    private String preparedDepartment;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private String corporation;
+
+    /** 记录状态 */
+    @Excel(name = "记录状态")
+    private Long recordStatus;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setOrderNumber(String orderNumber) 
+    {
+        this.orderNumber = orderNumber;
+    }
+
+    public String getOrderNumber() 
+    {
+        return orderNumber;
+    }
+    public void setAssetTotalOriginalValue(String assetTotalOriginalValue) 
+    {
+        this.assetTotalOriginalValue = assetTotalOriginalValue;
+    }
+
+    public String getAssetTotalOriginalValue() 
+    {
+        return assetTotalOriginalValue;
+    }
+    public void setAssetTotalNetValue(String assetTotalNetValue) 
+    {
+        this.assetTotalNetValue = assetTotalNetValue;
+    }
+
+    public String getAssetTotalNetValue() 
+    {
+        return assetTotalNetValue;
+    }
+    public void setApplicationDate(Date applicationDate) 
+    {
+        this.applicationDate = applicationDate;
+    }
+
+    public Date getApplicationDate() 
+    {
+        return applicationDate;
+    }
+    public void setLendDepartment(String lendDepartment) 
+    {
+        this.lendDepartment = lendDepartment;
+    }
+
+    public String getLendDepartment() 
+    {
+        return lendDepartment;
+    }
+    public void setBySponsor(String bySponsor) 
+    {
+        this.bySponsor = bySponsor;
+    }
+
+    public String getBySponsor() 
+    {
+        return bySponsor;
+    }
+    public void setPassingUnit(String passingUnit) 
+    {
+        this.passingUnit = passingUnit;
+    }
+
+    public String getPassingUnit() 
+    {
+        return passingUnit;
+    }
+    public void setReason(String reason) 
+    {
+        this.reason = reason;
+    }
+
+    public String getReason() 
+    {
+        return reason;
+    }
+    public void setPreparedBy(String preparedBy) 
+    {
+        this.preparedBy = preparedBy;
+    }
+
+    public String getPreparedBy() 
+    {
+        return preparedBy;
+    }
+    public void setPreparedDepartment(String preparedDepartment) 
+    {
+        this.preparedDepartment = preparedDepartment;
+    }
+
+    public String getPreparedDepartment() 
+    {
+        return preparedDepartment;
+    }
+    public void setCorporation(String corporation) 
+    {
+        this.corporation = corporation;
+    }
+
+    public String getCorporation() 
+    {
+        return corporation;
+    }
+    public void setRecordStatus(Long recordStatus) 
+    {
+        this.recordStatus = recordStatus;
+    }
+
+    public Long getRecordStatus() 
+    {
+        return recordStatus;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("orderNumber", getOrderNumber())
+            .append("assetTotalOriginalValue", getAssetTotalOriginalValue())
+            .append("assetTotalNetValue", getAssetTotalNetValue())
+            .append("applicationDate", getApplicationDate())
+            .append("lendDepartment", getLendDepartment())
+            .append("bySponsor", getBySponsor())
+            .append("passingUnit", getPassingUnit())
+            .append("reason", getReason())
+            .append("preparedBy", getPreparedBy())
+            .append("preparedDepartment", getPreparedDepartment())
+            .append("corporation", getCorporation())
+            .append("recordStatus", getRecordStatus())
+            .toString();
+    }
+}

+ 180 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetOrder.java

@@ -0,0 +1,180 @@
+package com.ruoyi.change.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产单据对象 tb_asset_order
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetOrder extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 单据编号 */
+    @Excel(name = "单据编号")
+    private String orderNumber;
+
+    /** 资产总原值(元) */
+    @Excel(name = "资产总原值", readConverterExp = "元=")
+    private String assetTotalOriginalValue;
+
+    /** 资产总净值(元) */
+    @Excel(name = "资产总净值", readConverterExp = "元=")
+    private String assetTotalNetValue;
+
+    /** 申请日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "申请日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date applicationDate;
+
+    /** 申请部门 */
+    @Excel(name = "申请部门")
+    private String applicationDepartment;
+
+    /** 原因说明 */
+    @Excel(name = "原因说明")
+    private String reason;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String preparedBy;
+
+    /** 制单部门 */
+    @Excel(name = "制单部门")
+    private String preparedDepartment;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private String corporation;
+
+    /** 记录状态 */
+    @Excel(name = "记录状态")
+    private Long recordStatus;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setOrderNumber(String orderNumber) 
+    {
+        this.orderNumber = orderNumber;
+    }
+
+    public String getOrderNumber() 
+    {
+        return orderNumber;
+    }
+    public void setAssetTotalOriginalValue(String assetTotalOriginalValue) 
+    {
+        this.assetTotalOriginalValue = assetTotalOriginalValue;
+    }
+
+    public String getAssetTotalOriginalValue() 
+    {
+        return assetTotalOriginalValue;
+    }
+    public void setAssetTotalNetValue(String assetTotalNetValue) 
+    {
+        this.assetTotalNetValue = assetTotalNetValue;
+    }
+
+    public String getAssetTotalNetValue() 
+    {
+        return assetTotalNetValue;
+    }
+    public void setApplicationDate(Date applicationDate) 
+    {
+        this.applicationDate = applicationDate;
+    }
+
+    public Date getApplicationDate() 
+    {
+        return applicationDate;
+    }
+    public void setApplicationDepartment(String applicationDepartment) 
+    {
+        this.applicationDepartment = applicationDepartment;
+    }
+
+    public String getApplicationDepartment() 
+    {
+        return applicationDepartment;
+    }
+    public void setReason(String reason) 
+    {
+        this.reason = reason;
+    }
+
+    public String getReason() 
+    {
+        return reason;
+    }
+    public void setPreparedBy(String preparedBy) 
+    {
+        this.preparedBy = preparedBy;
+    }
+
+    public String getPreparedBy() 
+    {
+        return preparedBy;
+    }
+    public void setPreparedDepartment(String preparedDepartment) 
+    {
+        this.preparedDepartment = preparedDepartment;
+    }
+
+    public String getPreparedDepartment() 
+    {
+        return preparedDepartment;
+    }
+    public void setCorporation(String corporation) 
+    {
+        this.corporation = corporation;
+    }
+
+    public String getCorporation() 
+    {
+        return corporation;
+    }
+    public void setRecordStatus(Long recordStatus) 
+    {
+        this.recordStatus = recordStatus;
+    }
+
+    public Long getRecordStatus() 
+    {
+        return recordStatus;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("orderNumber", getOrderNumber())
+            .append("assetTotalOriginalValue", getAssetTotalOriginalValue())
+            .append("assetTotalNetValue", getAssetTotalNetValue())
+            .append("applicationDate", getApplicationDate())
+            .append("applicationDepartment", getApplicationDepartment())
+            .append("reason", getReason())
+            .append("preparedBy", getPreparedBy())
+            .append("preparedDepartment", getPreparedDepartment())
+            .append("corporation", getCorporation())
+            .append("recordStatus", getRecordStatus())
+            .toString();
+    }
+}

+ 66 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetOrderDetail.java

@@ -0,0 +1,66 @@
+package com.ruoyi.change.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产单据明细对象 tb_asset_order_detail
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetOrderDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 单据编号 */
+    @Excel(name = "单据编号")
+    private String orderNumber;
+
+    /** 资产编号 */
+    @Excel(name = "资产编号")
+    private String assetNumber;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setOrderNumber(String orderNumber) 
+    {
+        this.orderNumber = orderNumber;
+    }
+
+    public String getOrderNumber() 
+    {
+        return orderNumber;
+    }
+    public void setAssetNumber(String assetNumber) 
+    {
+        this.assetNumber = assetNumber;
+    }
+
+    public String getAssetNumber() 
+    {
+        return assetNumber;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("orderNumber", getOrderNumber())
+            .append("assetNumber", getAssetNumber())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 126 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/domain/TbAssetReturn.java

@@ -0,0 +1,126 @@
+package com.ruoyi.change.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 资产归还对象 tb_asset_return
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public class TbAssetReturn extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 借出单号 */
+    @Excel(name = "借出单号")
+    private String lendOrderNumber;
+
+    /** 资产编号 */
+    @Excel(name = "资产编号")
+    private String assetNumber;
+
+    /** 预计归还时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "预计归还时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date returnDate;
+
+    /** 实际归还时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date actualReturnDate;
+
+    /** 归还经手人 */
+    @Excel(name = "归还经手人")
+    private String bySponsor;
+
+    /** 记录状态 */
+    @Excel(name = "记录状态")
+    private Long recordStatus;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setLendOrderNumber(String lendOrderNumber) 
+    {
+        this.lendOrderNumber = lendOrderNumber;
+    }
+
+    public String getLendOrderNumber() 
+    {
+        return lendOrderNumber;
+    }
+    public void setAssetNumber(String assetNumber) 
+    {
+        this.assetNumber = assetNumber;
+    }
+
+    public String getAssetNumber() 
+    {
+        return assetNumber;
+    }
+    public void setReturnDate(Date returnDate) 
+    {
+        this.returnDate = returnDate;
+    }
+
+    public Date getReturnDate() 
+    {
+        return returnDate;
+    }
+    public void setActualReturnDate(Date actualReturnDate) 
+    {
+        this.actualReturnDate = actualReturnDate;
+    }
+
+    public Date getActualReturnDate() 
+    {
+        return actualReturnDate;
+    }
+    public void setBySponsor(String bySponsor) 
+    {
+        this.bySponsor = bySponsor;
+    }
+
+    public String getBySponsor() 
+    {
+        return bySponsor;
+    }
+    public void setRecordStatus(Long recordStatus) 
+    {
+        this.recordStatus = recordStatus;
+    }
+
+    public Long getRecordStatus() 
+    {
+        return recordStatus;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("lendOrderNumber", getLendOrderNumber())
+            .append("assetNumber", getAssetNumber())
+            .append("returnDate", getReturnDate())
+            .append("actualReturnDate", getActualReturnDate())
+            .append("bySponsor", getBySponsor())
+            .append("remark", getRemark())
+            .append("recordStatus", getRecordStatus())
+            .toString();
+    }
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetAllocationDetailMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.mapper;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetAllocationDetail;
+
+/**
+ * 资产调拨明细Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetAllocationDetailMapper 
+{
+    /**
+     * 查询资产调拨明细
+     * 
+     * @param id 资产调拨明细主键
+     * @return 资产调拨明细
+     */
+    public TbAssetAllocationDetail selectTbAssetAllocationDetailById(Long id);
+
+    /**
+     * 查询资产调拨明细列表
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 资产调拨明细集合
+     */
+    public List<TbAssetAllocationDetail> selectTbAssetAllocationDetailList(TbAssetAllocationDetail tbAssetAllocationDetail);
+
+    /**
+     * 新增资产调拨明细
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 结果
+     */
+    public int insertTbAssetAllocationDetail(TbAssetAllocationDetail tbAssetAllocationDetail);
+
+    /**
+     * 修改资产调拨明细
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 结果
+     */
+    public int updateTbAssetAllocationDetail(TbAssetAllocationDetail tbAssetAllocationDetail);
+
+    /**
+     * 删除资产调拨明细
+     * 
+     * @param id 资产调拨明细主键
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationDetailById(Long id);
+
+    /**
+     * 批量删除资产调拨明细
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationDetailByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetAllocationMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.mapper;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetAllocation;
+
+/**
+ * 资产调拨Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetAllocationMapper 
+{
+    /**
+     * 查询资产调拨
+     * 
+     * @param id 资产调拨主键
+     * @return 资产调拨
+     */
+    public TbAssetAllocation selectTbAssetAllocationById(Long id);
+
+    /**
+     * 查询资产调拨列表
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 资产调拨集合
+     */
+    public List<TbAssetAllocation> selectTbAssetAllocationList(TbAssetAllocation tbAssetAllocation);
+
+    /**
+     * 新增资产调拨
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 结果
+     */
+    public int insertTbAssetAllocation(TbAssetAllocation tbAssetAllocation);
+
+    /**
+     * 修改资产调拨
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 结果
+     */
+    public int updateTbAssetAllocation(TbAssetAllocation tbAssetAllocation);
+
+    /**
+     * 删除资产调拨
+     * 
+     * @param id 资产调拨主键
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationById(Long id);
+
+    /**
+     * 批量删除资产调拨
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetLendMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.mapper;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetLend;
+
+/**
+ * 资产借出Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetLendMapper 
+{
+    /**
+     * 查询资产借出
+     * 
+     * @param id 资产借出主键
+     * @return 资产借出
+     */
+    public TbAssetLend selectTbAssetLendById(Long id);
+
+    /**
+     * 查询资产借出列表
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 资产借出集合
+     */
+    public List<TbAssetLend> selectTbAssetLendList(TbAssetLend tbAssetLend);
+
+    /**
+     * 新增资产借出
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 结果
+     */
+    public int insertTbAssetLend(TbAssetLend tbAssetLend);
+
+    /**
+     * 修改资产借出
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 结果
+     */
+    public int updateTbAssetLend(TbAssetLend tbAssetLend);
+
+    /**
+     * 删除资产借出
+     * 
+     * @param id 资产借出主键
+     * @return 结果
+     */
+    public int deleteTbAssetLendById(Long id);
+
+    /**
+     * 批量删除资产借出
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetLendByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetOrderDetailMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.mapper;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetOrderDetail;
+
+/**
+ * 资产单据明细Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetOrderDetailMapper 
+{
+    /**
+     * 查询资产单据明细
+     * 
+     * @param id 资产单据明细主键
+     * @return 资产单据明细
+     */
+    public TbAssetOrderDetail selectTbAssetOrderDetailById(Long id);
+
+    /**
+     * 查询资产单据明细列表
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 资产单据明细集合
+     */
+    public List<TbAssetOrderDetail> selectTbAssetOrderDetailList(TbAssetOrderDetail tbAssetOrderDetail);
+
+    /**
+     * 新增资产单据明细
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 结果
+     */
+    public int insertTbAssetOrderDetail(TbAssetOrderDetail tbAssetOrderDetail);
+
+    /**
+     * 修改资产单据明细
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 结果
+     */
+    public int updateTbAssetOrderDetail(TbAssetOrderDetail tbAssetOrderDetail);
+
+    /**
+     * 删除资产单据明细
+     * 
+     * @param id 资产单据明细主键
+     * @return 结果
+     */
+    public int deleteTbAssetOrderDetailById(Long id);
+
+    /**
+     * 批量删除资产单据明细
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetOrderDetailByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetOrderMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.mapper;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetOrder;
+
+/**
+ * 资产单据Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetOrderMapper 
+{
+    /**
+     * 查询资产单据
+     * 
+     * @param id 资产单据主键
+     * @return 资产单据
+     */
+    public TbAssetOrder selectTbAssetOrderById(Long id);
+
+    /**
+     * 查询资产单据列表
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 资产单据集合
+     */
+    public List<TbAssetOrder> selectTbAssetOrderList(TbAssetOrder tbAssetOrder);
+
+    /**
+     * 新增资产单据
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 结果
+     */
+    public int insertTbAssetOrder(TbAssetOrder tbAssetOrder);
+
+    /**
+     * 修改资产单据
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 结果
+     */
+    public int updateTbAssetOrder(TbAssetOrder tbAssetOrder);
+
+    /**
+     * 删除资产单据
+     * 
+     * @param id 资产单据主键
+     * @return 结果
+     */
+    public int deleteTbAssetOrderById(Long id);
+
+    /**
+     * 批量删除资产单据
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetOrderByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/mapper/TbAssetReturnMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.mapper;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetReturn;
+
+/**
+ * 资产归还Mapper接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface TbAssetReturnMapper 
+{
+    /**
+     * 查询资产归还
+     * 
+     * @param id 资产归还主键
+     * @return 资产归还
+     */
+    public TbAssetReturn selectTbAssetReturnById(Long id);
+
+    /**
+     * 查询资产归还列表
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 资产归还集合
+     */
+    public List<TbAssetReturn> selectTbAssetReturnList(TbAssetReturn tbAssetReturn);
+
+    /**
+     * 新增资产归还
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 结果
+     */
+    public int insertTbAssetReturn(TbAssetReturn tbAssetReturn);
+
+    /**
+     * 修改资产归还
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 结果
+     */
+    public int updateTbAssetReturn(TbAssetReturn tbAssetReturn);
+
+    /**
+     * 删除资产归还
+     * 
+     * @param id 资产归还主键
+     * @return 结果
+     */
+    public int deleteTbAssetReturnById(Long id);
+
+    /**
+     * 批量删除资产归还
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetReturnByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetAllocationDetailService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.service;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetAllocationDetail;
+
+/**
+ * 资产调拨明细Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetAllocationDetailService 
+{
+    /**
+     * 查询资产调拨明细
+     * 
+     * @param id 资产调拨明细主键
+     * @return 资产调拨明细
+     */
+    public TbAssetAllocationDetail selectTbAssetAllocationDetailById(Long id);
+
+    /**
+     * 查询资产调拨明细列表
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 资产调拨明细集合
+     */
+    public List<TbAssetAllocationDetail> selectTbAssetAllocationDetailList(TbAssetAllocationDetail tbAssetAllocationDetail);
+
+    /**
+     * 新增资产调拨明细
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 结果
+     */
+    public int insertTbAssetAllocationDetail(TbAssetAllocationDetail tbAssetAllocationDetail);
+
+    /**
+     * 修改资产调拨明细
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 结果
+     */
+    public int updateTbAssetAllocationDetail(TbAssetAllocationDetail tbAssetAllocationDetail);
+
+    /**
+     * 批量删除资产调拨明细
+     * 
+     * @param ids 需要删除的资产调拨明细主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationDetailByIds(Long[] ids);
+
+    /**
+     * 删除资产调拨明细信息
+     * 
+     * @param id 资产调拨明细主键
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationDetailById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetAllocationService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.service;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetAllocation;
+
+/**
+ * 资产调拨Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetAllocationService 
+{
+    /**
+     * 查询资产调拨
+     * 
+     * @param id 资产调拨主键
+     * @return 资产调拨
+     */
+    public TbAssetAllocation selectTbAssetAllocationById(Long id);
+
+    /**
+     * 查询资产调拨列表
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 资产调拨集合
+     */
+    public List<TbAssetAllocation> selectTbAssetAllocationList(TbAssetAllocation tbAssetAllocation);
+
+    /**
+     * 新增资产调拨
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 结果
+     */
+    public int insertTbAssetAllocation(TbAssetAllocation tbAssetAllocation);
+
+    /**
+     * 修改资产调拨
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 结果
+     */
+    public int updateTbAssetAllocation(TbAssetAllocation tbAssetAllocation);
+
+    /**
+     * 批量删除资产调拨
+     * 
+     * @param ids 需要删除的资产调拨主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationByIds(Long[] ids);
+
+    /**
+     * 删除资产调拨信息
+     * 
+     * @param id 资产调拨主键
+     * @return 结果
+     */
+    public int deleteTbAssetAllocationById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetLendService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.service;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetLend;
+
+/**
+ * 资产借出Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetLendService 
+{
+    /**
+     * 查询资产借出
+     * 
+     * @param id 资产借出主键
+     * @return 资产借出
+     */
+    public TbAssetLend selectTbAssetLendById(Long id);
+
+    /**
+     * 查询资产借出列表
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 资产借出集合
+     */
+    public List<TbAssetLend> selectTbAssetLendList(TbAssetLend tbAssetLend);
+
+    /**
+     * 新增资产借出
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 结果
+     */
+    public int insertTbAssetLend(TbAssetLend tbAssetLend);
+
+    /**
+     * 修改资产借出
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 结果
+     */
+    public int updateTbAssetLend(TbAssetLend tbAssetLend);
+
+    /**
+     * 批量删除资产借出
+     * 
+     * @param ids 需要删除的资产借出主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetLendByIds(Long[] ids);
+
+    /**
+     * 删除资产借出信息
+     * 
+     * @param id 资产借出主键
+     * @return 结果
+     */
+    public int deleteTbAssetLendById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetOrderDetailService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.service;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetOrderDetail;
+
+/**
+ * 资产单据明细Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetOrderDetailService 
+{
+    /**
+     * 查询资产单据明细
+     * 
+     * @param id 资产单据明细主键
+     * @return 资产单据明细
+     */
+    public TbAssetOrderDetail selectTbAssetOrderDetailById(Long id);
+
+    /**
+     * 查询资产单据明细列表
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 资产单据明细集合
+     */
+    public List<TbAssetOrderDetail> selectTbAssetOrderDetailList(TbAssetOrderDetail tbAssetOrderDetail);
+
+    /**
+     * 新增资产单据明细
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 结果
+     */
+    public int insertTbAssetOrderDetail(TbAssetOrderDetail tbAssetOrderDetail);
+
+    /**
+     * 修改资产单据明细
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 结果
+     */
+    public int updateTbAssetOrderDetail(TbAssetOrderDetail tbAssetOrderDetail);
+
+    /**
+     * 批量删除资产单据明细
+     * 
+     * @param ids 需要删除的资产单据明细主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetOrderDetailByIds(Long[] ids);
+
+    /**
+     * 删除资产单据明细信息
+     * 
+     * @param id 资产单据明细主键
+     * @return 结果
+     */
+    public int deleteTbAssetOrderDetailById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetOrderService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.service;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetOrder;
+
+/**
+ * 资产单据Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetOrderService 
+{
+    /**
+     * 查询资产单据
+     * 
+     * @param id 资产单据主键
+     * @return 资产单据
+     */
+    public TbAssetOrder selectTbAssetOrderById(Long id);
+
+    /**
+     * 查询资产单据列表
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 资产单据集合
+     */
+    public List<TbAssetOrder> selectTbAssetOrderList(TbAssetOrder tbAssetOrder);
+
+    /**
+     * 新增资产单据
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 结果
+     */
+    public int insertTbAssetOrder(TbAssetOrder tbAssetOrder);
+
+    /**
+     * 修改资产单据
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 结果
+     */
+    public int updateTbAssetOrder(TbAssetOrder tbAssetOrder);
+
+    /**
+     * 批量删除资产单据
+     * 
+     * @param ids 需要删除的资产单据主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetOrderByIds(Long[] ids);
+
+    /**
+     * 删除资产单据信息
+     * 
+     * @param id 资产单据主键
+     * @return 结果
+     */
+    public int deleteTbAssetOrderById(Long id);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/ITbAssetReturnService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.change.service;
+
+import java.util.List;
+import com.ruoyi.change.domain.TbAssetReturn;
+
+/**
+ * 资产归还Service接口
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+public interface ITbAssetReturnService 
+{
+    /**
+     * 查询资产归还
+     * 
+     * @param id 资产归还主键
+     * @return 资产归还
+     */
+    public TbAssetReturn selectTbAssetReturnById(Long id);
+
+    /**
+     * 查询资产归还列表
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 资产归还集合
+     */
+    public List<TbAssetReturn> selectTbAssetReturnList(TbAssetReturn tbAssetReturn);
+
+    /**
+     * 新增资产归还
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 结果
+     */
+    public int insertTbAssetReturn(TbAssetReturn tbAssetReturn);
+
+    /**
+     * 修改资产归还
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 结果
+     */
+    public int updateTbAssetReturn(TbAssetReturn tbAssetReturn);
+
+    /**
+     * 批量删除资产归还
+     * 
+     * @param ids 需要删除的资产归还主键集合
+     * @return 结果
+     */
+    public int deleteTbAssetReturnByIds(Long[] ids);
+
+    /**
+     * 删除资产归还信息
+     * 
+     * @param id 资产归还主键
+     * @return 结果
+     */
+    public int deleteTbAssetReturnById(Long id);
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetAllocationDetailServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.change.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.change.mapper.TbAssetAllocationDetailMapper;
+import com.ruoyi.change.domain.TbAssetAllocationDetail;
+import com.ruoyi.change.service.ITbAssetAllocationDetailService;
+
+/**
+ * 资产调拨明细Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetAllocationDetailServiceImpl implements ITbAssetAllocationDetailService 
+{
+    @Autowired
+    private TbAssetAllocationDetailMapper tbAssetAllocationDetailMapper;
+
+    /**
+     * 查询资产调拨明细
+     * 
+     * @param id 资产调拨明细主键
+     * @return 资产调拨明细
+     */
+    @Override
+    public TbAssetAllocationDetail selectTbAssetAllocationDetailById(Long id)
+    {
+        return tbAssetAllocationDetailMapper.selectTbAssetAllocationDetailById(id);
+    }
+
+    /**
+     * 查询资产调拨明细列表
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 资产调拨明细
+     */
+    @Override
+    public List<TbAssetAllocationDetail> selectTbAssetAllocationDetailList(TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        return tbAssetAllocationDetailMapper.selectTbAssetAllocationDetailList(tbAssetAllocationDetail);
+    }
+
+    /**
+     * 新增资产调拨明细
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetAllocationDetail(TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        return tbAssetAllocationDetailMapper.insertTbAssetAllocationDetail(tbAssetAllocationDetail);
+    }
+
+    /**
+     * 修改资产调拨明细
+     * 
+     * @param tbAssetAllocationDetail 资产调拨明细
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetAllocationDetail(TbAssetAllocationDetail tbAssetAllocationDetail)
+    {
+        return tbAssetAllocationDetailMapper.updateTbAssetAllocationDetail(tbAssetAllocationDetail);
+    }
+
+    /**
+     * 批量删除资产调拨明细
+     * 
+     * @param ids 需要删除的资产调拨明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetAllocationDetailByIds(Long[] ids)
+    {
+        return tbAssetAllocationDetailMapper.deleteTbAssetAllocationDetailByIds(ids);
+    }
+
+    /**
+     * 删除资产调拨明细信息
+     * 
+     * @param id 资产调拨明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetAllocationDetailById(Long id)
+    {
+        return tbAssetAllocationDetailMapper.deleteTbAssetAllocationDetailById(id);
+    }
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetAllocationServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.change.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.change.mapper.TbAssetAllocationMapper;
+import com.ruoyi.change.domain.TbAssetAllocation;
+import com.ruoyi.change.service.ITbAssetAllocationService;
+
+/**
+ * 资产调拨Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetAllocationServiceImpl implements ITbAssetAllocationService 
+{
+    @Autowired
+    private TbAssetAllocationMapper tbAssetAllocationMapper;
+
+    /**
+     * 查询资产调拨
+     * 
+     * @param id 资产调拨主键
+     * @return 资产调拨
+     */
+    @Override
+    public TbAssetAllocation selectTbAssetAllocationById(Long id)
+    {
+        return tbAssetAllocationMapper.selectTbAssetAllocationById(id);
+    }
+
+    /**
+     * 查询资产调拨列表
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 资产调拨
+     */
+    @Override
+    public List<TbAssetAllocation> selectTbAssetAllocationList(TbAssetAllocation tbAssetAllocation)
+    {
+        return tbAssetAllocationMapper.selectTbAssetAllocationList(tbAssetAllocation);
+    }
+
+    /**
+     * 新增资产调拨
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetAllocation(TbAssetAllocation tbAssetAllocation)
+    {
+        return tbAssetAllocationMapper.insertTbAssetAllocation(tbAssetAllocation);
+    }
+
+    /**
+     * 修改资产调拨
+     * 
+     * @param tbAssetAllocation 资产调拨
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetAllocation(TbAssetAllocation tbAssetAllocation)
+    {
+        return tbAssetAllocationMapper.updateTbAssetAllocation(tbAssetAllocation);
+    }
+
+    /**
+     * 批量删除资产调拨
+     * 
+     * @param ids 需要删除的资产调拨主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetAllocationByIds(Long[] ids)
+    {
+        return tbAssetAllocationMapper.deleteTbAssetAllocationByIds(ids);
+    }
+
+    /**
+     * 删除资产调拨信息
+     * 
+     * @param id 资产调拨主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetAllocationById(Long id)
+    {
+        return tbAssetAllocationMapper.deleteTbAssetAllocationById(id);
+    }
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetLendServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.change.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.change.mapper.TbAssetLendMapper;
+import com.ruoyi.change.domain.TbAssetLend;
+import com.ruoyi.change.service.ITbAssetLendService;
+
+/**
+ * 资产借出Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetLendServiceImpl implements ITbAssetLendService 
+{
+    @Autowired
+    private TbAssetLendMapper tbAssetLendMapper;
+
+    /**
+     * 查询资产借出
+     * 
+     * @param id 资产借出主键
+     * @return 资产借出
+     */
+    @Override
+    public TbAssetLend selectTbAssetLendById(Long id)
+    {
+        return tbAssetLendMapper.selectTbAssetLendById(id);
+    }
+
+    /**
+     * 查询资产借出列表
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 资产借出
+     */
+    @Override
+    public List<TbAssetLend> selectTbAssetLendList(TbAssetLend tbAssetLend)
+    {
+        return tbAssetLendMapper.selectTbAssetLendList(tbAssetLend);
+    }
+
+    /**
+     * 新增资产借出
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetLend(TbAssetLend tbAssetLend)
+    {
+        return tbAssetLendMapper.insertTbAssetLend(tbAssetLend);
+    }
+
+    /**
+     * 修改资产借出
+     * 
+     * @param tbAssetLend 资产借出
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetLend(TbAssetLend tbAssetLend)
+    {
+        return tbAssetLendMapper.updateTbAssetLend(tbAssetLend);
+    }
+
+    /**
+     * 批量删除资产借出
+     * 
+     * @param ids 需要删除的资产借出主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetLendByIds(Long[] ids)
+    {
+        return tbAssetLendMapper.deleteTbAssetLendByIds(ids);
+    }
+
+    /**
+     * 删除资产借出信息
+     * 
+     * @param id 资产借出主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetLendById(Long id)
+    {
+        return tbAssetLendMapper.deleteTbAssetLendById(id);
+    }
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetOrderDetailServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.change.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.change.mapper.TbAssetOrderDetailMapper;
+import com.ruoyi.change.domain.TbAssetOrderDetail;
+import com.ruoyi.change.service.ITbAssetOrderDetailService;
+
+/**
+ * 资产单据明细Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetOrderDetailServiceImpl implements ITbAssetOrderDetailService 
+{
+    @Autowired
+    private TbAssetOrderDetailMapper tbAssetOrderDetailMapper;
+
+    /**
+     * 查询资产单据明细
+     * 
+     * @param id 资产单据明细主键
+     * @return 资产单据明细
+     */
+    @Override
+    public TbAssetOrderDetail selectTbAssetOrderDetailById(Long id)
+    {
+        return tbAssetOrderDetailMapper.selectTbAssetOrderDetailById(id);
+    }
+
+    /**
+     * 查询资产单据明细列表
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 资产单据明细
+     */
+    @Override
+    public List<TbAssetOrderDetail> selectTbAssetOrderDetailList(TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        return tbAssetOrderDetailMapper.selectTbAssetOrderDetailList(tbAssetOrderDetail);
+    }
+
+    /**
+     * 新增资产单据明细
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetOrderDetail(TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        return tbAssetOrderDetailMapper.insertTbAssetOrderDetail(tbAssetOrderDetail);
+    }
+
+    /**
+     * 修改资产单据明细
+     * 
+     * @param tbAssetOrderDetail 资产单据明细
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetOrderDetail(TbAssetOrderDetail tbAssetOrderDetail)
+    {
+        return tbAssetOrderDetailMapper.updateTbAssetOrderDetail(tbAssetOrderDetail);
+    }
+
+    /**
+     * 批量删除资产单据明细
+     * 
+     * @param ids 需要删除的资产单据明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetOrderDetailByIds(Long[] ids)
+    {
+        return tbAssetOrderDetailMapper.deleteTbAssetOrderDetailByIds(ids);
+    }
+
+    /**
+     * 删除资产单据明细信息
+     * 
+     * @param id 资产单据明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetOrderDetailById(Long id)
+    {
+        return tbAssetOrderDetailMapper.deleteTbAssetOrderDetailById(id);
+    }
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetOrderServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.change.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.change.mapper.TbAssetOrderMapper;
+import com.ruoyi.change.domain.TbAssetOrder;
+import com.ruoyi.change.service.ITbAssetOrderService;
+
+/**
+ * 资产单据Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetOrderServiceImpl implements ITbAssetOrderService 
+{
+    @Autowired
+    private TbAssetOrderMapper tbAssetOrderMapper;
+
+    /**
+     * 查询资产单据
+     * 
+     * @param id 资产单据主键
+     * @return 资产单据
+     */
+    @Override
+    public TbAssetOrder selectTbAssetOrderById(Long id)
+    {
+        return tbAssetOrderMapper.selectTbAssetOrderById(id);
+    }
+
+    /**
+     * 查询资产单据列表
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 资产单据
+     */
+    @Override
+    public List<TbAssetOrder> selectTbAssetOrderList(TbAssetOrder tbAssetOrder)
+    {
+        return tbAssetOrderMapper.selectTbAssetOrderList(tbAssetOrder);
+    }
+
+    /**
+     * 新增资产单据
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetOrder(TbAssetOrder tbAssetOrder)
+    {
+        return tbAssetOrderMapper.insertTbAssetOrder(tbAssetOrder);
+    }
+
+    /**
+     * 修改资产单据
+     * 
+     * @param tbAssetOrder 资产单据
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetOrder(TbAssetOrder tbAssetOrder)
+    {
+        return tbAssetOrderMapper.updateTbAssetOrder(tbAssetOrder);
+    }
+
+    /**
+     * 批量删除资产单据
+     * 
+     * @param ids 需要删除的资产单据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetOrderByIds(Long[] ids)
+    {
+        return tbAssetOrderMapper.deleteTbAssetOrderByIds(ids);
+    }
+
+    /**
+     * 删除资产单据信息
+     * 
+     * @param id 资产单据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetOrderById(Long id)
+    {
+        return tbAssetOrderMapper.deleteTbAssetOrderById(id);
+    }
+}

+ 93 - 0
ruoyi-admin/src/main/java/com/ruoyi/change/service/impl/TbAssetReturnServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.change.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.change.mapper.TbAssetReturnMapper;
+import com.ruoyi.change.domain.TbAssetReturn;
+import com.ruoyi.change.service.ITbAssetReturnService;
+
+/**
+ * 资产归还Service业务层处理
+ * 
+ * @author 原动力
+ * @date 2023-05-15
+ */
+@Service
+public class TbAssetReturnServiceImpl implements ITbAssetReturnService 
+{
+    @Autowired
+    private TbAssetReturnMapper tbAssetReturnMapper;
+
+    /**
+     * 查询资产归还
+     * 
+     * @param id 资产归还主键
+     * @return 资产归还
+     */
+    @Override
+    public TbAssetReturn selectTbAssetReturnById(Long id)
+    {
+        return tbAssetReturnMapper.selectTbAssetReturnById(id);
+    }
+
+    /**
+     * 查询资产归还列表
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 资产归还
+     */
+    @Override
+    public List<TbAssetReturn> selectTbAssetReturnList(TbAssetReturn tbAssetReturn)
+    {
+        return tbAssetReturnMapper.selectTbAssetReturnList(tbAssetReturn);
+    }
+
+    /**
+     * 新增资产归还
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 结果
+     */
+    @Override
+    public int insertTbAssetReturn(TbAssetReturn tbAssetReturn)
+    {
+        return tbAssetReturnMapper.insertTbAssetReturn(tbAssetReturn);
+    }
+
+    /**
+     * 修改资产归还
+     * 
+     * @param tbAssetReturn 资产归还
+     * @return 结果
+     */
+    @Override
+    public int updateTbAssetReturn(TbAssetReturn tbAssetReturn)
+    {
+        return tbAssetReturnMapper.updateTbAssetReturn(tbAssetReturn);
+    }
+
+    /**
+     * 批量删除资产归还
+     * 
+     * @param ids 需要删除的资产归还主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetReturnByIds(Long[] ids)
+    {
+        return tbAssetReturnMapper.deleteTbAssetReturnByIds(ids);
+    }
+
+    /**
+     * 删除资产归还信息
+     * 
+     * @param id 资产归还主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTbAssetReturnById(Long id)
+    {
+        return tbAssetReturnMapper.deleteTbAssetReturnById(id);
+    }
+}

+ 94 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java

@@ -0,0 +1,94 @@
+package com.ruoyi.web.controller.common;
+
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.FastByteArrayOutputStream;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.google.code.kaptcha.Producer;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.sign.Base64;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 验证码操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+public class CaptchaController
+{
+    @Resource(name = "captchaProducer")
+    private Producer captchaProducer;
+
+    @Resource(name = "captchaProducerMath")
+    private Producer captchaProducerMath;
+
+    @Autowired
+    private RedisCache redisCache;
+    
+    @Autowired
+    private ISysConfigService configService;
+    /**
+     * 生成验证码
+     */
+    @GetMapping("/captchaImage")
+    public AjaxResult getCode(HttpServletResponse response) throws IOException
+    {
+        AjaxResult ajax = AjaxResult.success();
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        ajax.put("captchaEnabled", captchaEnabled);
+        if (!captchaEnabled)
+        {
+            return ajax;
+        }
+
+        // 保存验证码信息
+        String uuid = IdUtils.simpleUUID();
+        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
+
+        String capStr = null, code = null;
+        BufferedImage image = null;
+
+        // 生成验证码
+        String captchaType = RuoYiConfig.getCaptchaType();
+        if ("math".equals(captchaType))
+        {
+            String capText = captchaProducerMath.createText();
+            capStr = capText.substring(0, capText.lastIndexOf("@"));
+            code = capText.substring(capText.lastIndexOf("@") + 1);
+            image = captchaProducerMath.createImage(capStr);
+        }
+        else if ("char".equals(captchaType))
+        {
+            capStr = code = captchaProducer.createText();
+            image = captchaProducer.createImage(capStr);
+        }
+
+        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+        // 转换流信息写出
+        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
+        try
+        {
+            ImageIO.write(image, "jpg", os);
+        }
+        catch (IOException e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+
+        ajax.put("uuid", uuid);
+        ajax.put("img", Base64.encode(os.toByteArray()));
+        return ajax;
+    }
+}

+ 163 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -0,0 +1,163 @@
+package com.ruoyi.web.controller.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.framework.config.ServerConfig;
+
+/**
+ * 通用请求处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/common")
+public class CommonController
+{
+    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+    @Autowired
+    private ServerConfig serverConfig;
+
+    private static final String FILE_DELIMETER = ",";
+
+    /**
+     * 通用下载请求
+     * 
+     * @param fileName 文件名称
+     * @param delete 是否删除
+     */
+    @GetMapping("/download")
+    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
+    {
+        try
+        {
+            if (!FileUtils.checkAllowDownload(fileName))
+            {
+                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
+            }
+            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+            String filePath = RuoYiConfig.getDownloadPath() + fileName;
+
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, realFileName);
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+            if (delete)
+            {
+                FileUtils.deleteFile(filePath);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("下载文件失败", e);
+        }
+    }
+
+    /**
+     * 通用上传请求(单个)
+     */
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(MultipartFile file) throws Exception
+    {
+        try
+        {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            // 上传并返回新文件名称
+            String fileName = FileUploadUtils.upload(filePath, file);
+            String url = serverConfig.getUrl() + fileName;
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("url", url);
+            ajax.put("fileName", fileName);
+            ajax.put("newFileName", FileUtils.getName(fileName));
+            ajax.put("originalFilename", file.getOriginalFilename());
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 通用上传请求(多个)
+     */
+    @PostMapping("/uploads")
+    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
+    {
+        try
+        {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            List<String> urls = new ArrayList<String>();
+            List<String> fileNames = new ArrayList<String>();
+            List<String> newFileNames = new ArrayList<String>();
+            List<String> originalFilenames = new ArrayList<String>();
+            for (MultipartFile file : files)
+            {
+                // 上传并返回新文件名称
+                String fileName = FileUploadUtils.upload(filePath, file);
+                String url = serverConfig.getUrl() + fileName;
+                urls.add(url);
+                fileNames.add(fileName);
+                newFileNames.add(FileUtils.getName(fileName));
+                originalFilenames.add(file.getOriginalFilename());
+            }
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 本地资源通用下载
+     */
+    @GetMapping("/download/resource")
+    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
+            throws Exception
+    {
+        try
+        {
+            if (!FileUtils.checkAllowDownload(resource))
+            {
+                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
+            }
+            // 本地资源路径
+            String localPath = RuoYiConfig.getProfile();
+            // 数据库资源地址
+            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
+            // 下载名称
+            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, downloadName);
+            FileUtils.writeBytes(downloadPath, response.getOutputStream());
+        }
+        catch (Exception e)
+        {
+            log.error("下载文件失败", e);
+        }
+    }
+}

+ 120 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java

@@ -0,0 +1,120 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysCache;
+
+/**
+ * 缓存监控
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/cache")
+public class CacheController
+{
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    private final static List<SysCache> caches = new ArrayList<SysCache>();
+    {
+        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
+        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
+        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
+        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
+        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
+        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
+        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info());
+        Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
+        Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize());
+
+        Map<String, Object> result = new HashMap<>(3);
+        result.put("info", info);
+        result.put("dbSize", dbSize);
+
+        List<Map<String, String>> pieList = new ArrayList<>();
+        commandStats.stringPropertyNames().forEach(key -> {
+            Map<String, String> data = new HashMap<>(2);
+            String property = commandStats.getProperty(key);
+            data.put("name", StringUtils.removeStart(key, "cmdstat_"));
+            data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
+            pieList.add(data);
+        });
+        result.put("commandStats", pieList);
+        return AjaxResult.success(result);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getNames")
+    public AjaxResult cache()
+    {
+        return AjaxResult.success(caches);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getKeys/{cacheName}")
+    public AjaxResult getCacheKeys(@PathVariable String cacheName)
+    {
+        Set<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        return AjaxResult.success(cacheKeys);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getValue/{cacheName}/{cacheKey}")
+    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
+    {
+        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
+        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
+        return AjaxResult.success(sysCache);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheName/{cacheName}")
+    public AjaxResult clearCacheName(@PathVariable String cacheName)
+    {
+        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheKey/{cacheKey}")
+    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
+    {
+        redisTemplate.delete(cacheKey);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheAll")
+    public AjaxResult clearCacheAll()
+    {
+        Collection<String> cacheKeys = redisTemplate.keys("*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+}

+ 27 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java

@@ -0,0 +1,27 @@
+package com.ruoyi.web.controller.monitor;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.Server;
+
+/**
+ * 服务器监控
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/server")
+public class ServerController
+{
+    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Server server = new Server();
+        server.copyTo();
+        return AjaxResult.success(server);
+    }
+}

+ 82 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java

@@ -0,0 +1,82 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.SysPasswordService;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.service.ISysLogininforService;
+
+/**
+ * 系统访问记录
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/logininfor")
+public class SysLogininforController extends BaseController
+{
+    @Autowired
+    private ISysLogininforService logininforService;
+
+    @Autowired
+    private SysPasswordService passwordService;
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysLogininfor logininfor)
+    {
+        startPage();
+        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
+        return getDataTable(list);
+    }
+
+    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysLogininfor logininfor)
+    {
+        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
+        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
+        util.exportExcel(response, list, "登录日志");
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "登录日志", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{infoIds}")
+    public AjaxResult remove(@PathVariable Long[] infoIds)
+    {
+        return toAjax(logininforService.deleteLogininforByIds(infoIds));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "登录日志", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        logininforService.cleanLogininfor();
+        return success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
+    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
+    @GetMapping("/unlock/{userName}")
+    public AjaxResult unlock(@PathVariable("userName") String userName)
+    {
+        passwordService.clearLoginRecordCache(userName);
+        return success();
+    }
+}

+ 69 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java

@@ -0,0 +1,69 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.service.ISysOperLogService;
+
+/**
+ * 操作日志记录
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/operlog")
+public class SysOperlogController extends BaseController
+{
+    @Autowired
+    private ISysOperLogService operLogService;
+
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysOperLog operLog)
+    {
+        startPage();
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        return getDataTable(list);
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysOperLog operLog)
+    {
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
+        util.exportExcel(response, list, "操作日志");
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.DELETE)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/{operIds}")
+    public AjaxResult remove(@PathVariable Long[] operIds)
+    {
+        return toAjax(operLogService.deleteOperLogByIds(operIds));
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        operLogService.cleanOperLog();
+        return success();
+    }
+}

+ 83 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java

@@ -0,0 +1,83 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.ISysUserOnlineService;
+
+/**
+ * 在线用户监控
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/online")
+public class SysUserOnlineController extends BaseController
+{
+    @Autowired
+    private ISysUserOnlineService userOnlineService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(String ipaddr, String userName)
+    {
+        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
+        for (String key : keys)
+        {
+            LoginUser user = redisCache.getCacheObject(key);
+            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
+            }
+            else if (StringUtils.isNotEmpty(ipaddr))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
+            }
+            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
+            }
+            else
+            {
+                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
+            }
+        }
+        Collections.reverse(userOnlineList);
+        userOnlineList.removeAll(Collections.singleton(null));
+        return getDataTable(userOnlineList);
+    }
+
+    /**
+     * 强退用户
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
+    @Log(title = "在线用户", businessType = BusinessType.FORCE)
+    @DeleteMapping("/{tokenId}")
+    public AjaxResult forceLogout(@PathVariable String tokenId)
+    {
+        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
+        return success();
+    }
+}

+ 133 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java

@@ -0,0 +1,133 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 参数配置 信息操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/config")
+public class SysConfigController extends BaseController
+{
+    @Autowired
+    private ISysConfigService configService;
+
+    /**
+     * 获取参数配置列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysConfig config)
+    {
+        startPage();
+        List<SysConfig> list = configService.selectConfigList(config);
+        return getDataTable(list);
+    }
+
+    @Log(title = "参数管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:config:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysConfig config)
+    {
+        List<SysConfig> list = configService.selectConfigList(config);
+        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
+        util.exportExcel(response, list, "参数数据");
+    }
+
+    /**
+     * 根据参数编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:query')")
+    @GetMapping(value = "/{configId}")
+    public AjaxResult getInfo(@PathVariable Long configId)
+    {
+        return success(configService.selectConfigById(configId));
+    }
+
+    /**
+     * 根据参数键名查询参数值
+     */
+    @GetMapping(value = "/configKey/{configKey}")
+    public AjaxResult getConfigKey(@PathVariable String configKey)
+    {
+        return success(configService.selectConfigByKey(configKey));
+    }
+
+    /**
+     * 新增参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "参数管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysConfig config)
+    {
+        if (!configService.checkConfigKeyUnique(config))
+        {
+            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
+        }
+        config.setCreateBy(getUsername());
+        return toAjax(configService.insertConfig(config));
+    }
+
+    /**
+     * 修改参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:edit')")
+    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysConfig config)
+    {
+        if (!configService.checkConfigKeyUnique(config))
+        {
+            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
+        }
+        config.setUpdateBy(getUsername());
+        return toAjax(configService.updateConfig(config));
+    }
+
+    /**
+     * 删除参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "参数管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{configIds}")
+    public AjaxResult remove(@PathVariable Long[] configIds)
+    {
+        configService.deleteConfigByIds(configIds);
+        return success();
+    }
+
+    /**
+     * 刷新参数缓存
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        configService.resetConfigCache();
+        return success();
+    }
+}

+ 132 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java

@@ -0,0 +1,132 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysDeptService;
+
+/**
+ * 部门信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dept")
+public class SysDeptController extends BaseController
+{
+    @Autowired
+    private ISysDeptService deptService;
+
+    /**
+     * 获取部门列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysDept dept)
+    {
+        List<SysDept> depts = deptService.selectDeptList(dept);
+        return success(depts);
+    }
+
+    /**
+     * 查询部门列表(排除节点)
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list/exclude/{deptId}")
+    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
+    {
+        List<SysDept> depts = deptService.selectDeptList(new SysDept());
+        depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
+        return success(depts);
+    }
+
+    /**
+     * 根据部门编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:query')")
+    @GetMapping(value = "/{deptId}")
+    public AjaxResult getInfo(@PathVariable Long deptId)
+    {
+        deptService.checkDeptDataScope(deptId);
+        return success(deptService.selectDeptById(deptId));
+    }
+
+    /**
+     * 新增部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:add')")
+    @Log(title = "部门管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDept dept)
+    {
+        if (!deptService.checkDeptNameUnique(dept))
+        {
+            return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        dept.setCreateBy(getUsername());
+        return toAjax(deptService.insertDept(dept));
+    }
+
+    /**
+     * 修改部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
+    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDept dept)
+    {
+        Long deptId = dept.getDeptId();
+        deptService.checkDeptDataScope(deptId);
+        if (!deptService.checkDeptNameUnique(dept))
+        {
+            return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        else if (dept.getParentId().equals(deptId))
+        {
+            return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
+        }
+        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
+        {
+            return error("该部门包含未停用的子部门!");
+        }
+        dept.setUpdateBy(getUsername());
+        return toAjax(deptService.updateDept(dept));
+    }
+
+    /**
+     * 删除部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
+    @Log(title = "部门管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{deptId}")
+    public AjaxResult remove(@PathVariable Long deptId)
+    {
+        if (deptService.hasChildByDeptId(deptId))
+        {
+            return warn("存在下级部门,不允许删除");
+        }
+        if (deptService.checkDeptExistUser(deptId))
+        {
+            return warn("部门存在用户,不允许删除");
+        }
+        deptService.checkDeptDataScope(deptId);
+        return toAjax(deptService.deleteDeptById(deptId));
+    }
+}

+ 121 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java

@@ -0,0 +1,121 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.system.service.ISysDictTypeService;
+
+/**
+ * 数据字典信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/data")
+public class SysDictDataController extends BaseController
+{
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictData dictData)
+    {
+        startPage();
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictData dictData)
+    {
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
+        util.exportExcel(response, list, "字典数据");
+    }
+
+    /**
+     * 查询字典数据详细
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictCode}")
+    public AjaxResult getInfo(@PathVariable Long dictCode)
+    {
+        return success(dictDataService.selectDictDataById(dictCode));
+    }
+
+    /**
+     * 根据字典类型查询字典数据信息
+     */
+    @GetMapping(value = "/type/{dictType}")
+    public AjaxResult dictType(@PathVariable String dictType)
+    {
+        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
+        if (StringUtils.isNull(data))
+        {
+            data = new ArrayList<SysDictData>();
+        }
+        return success(data);
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典数据", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setCreateBy(getUsername());
+        return toAjax(dictDataService.insertDictData(dict));
+    }
+
+    /**
+     * 修改保存字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictDataService.updateDictData(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictCodes}")
+    public AjaxResult remove(@PathVariable Long[] dictCodes)
+    {
+        dictDataService.deleteDictDataByIds(dictCodes);
+        return success();
+    }
+}

+ 131 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@@ -0,0 +1,131 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDictTypeService;
+
+/**
+ * 数据字典信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/type")
+public class SysDictTypeController extends BaseController
+{
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictType dictType)
+    {
+        startPage();
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典类型", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictType dictType)
+    {
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
+        util.exportExcel(response, list, "字典类型");
+    }
+
+    /**
+     * 查询字典类型详细
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictId}")
+    public AjaxResult getInfo(@PathVariable Long dictId)
+    {
+        return success(dictTypeService.selectDictTypeById(dictId));
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictType dict)
+    {
+        if (!dictTypeService.checkDictTypeUnique(dict))
+        {
+            return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setCreateBy(getUsername());
+        return toAjax(dictTypeService.insertDictType(dict));
+    }
+
+    /**
+     * 修改字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
+    {
+        if (!dictTypeService.checkDictTypeUnique(dict))
+        {
+            return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictTypeService.updateDictType(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictIds}")
+    public AjaxResult remove(@PathVariable Long[] dictIds)
+    {
+        dictTypeService.deleteDictTypeByIds(dictIds);
+        return success();
+    }
+
+    /**
+     * 刷新字典缓存
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        dictTypeService.resetDictCache();
+        return success();
+    }
+
+    /**
+     * 获取字典选择框列表
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
+        return success(dictTypes);
+    }
+}

+ 29 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java

@@ -0,0 +1,29 @@
+package com.ruoyi.web.controller.system;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 首页
+ *
+ * @author ruoyi
+ */
+@RestController
+public class SysIndexController
+{
+    /** 系统基础配置 */
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    /**
+     * 访问首页,提示语
+     */
+    @RequestMapping("/")
+    public String index()
+    {
+        return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
+    }
+}

+ 86 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -0,0 +1,86 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginBody;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.system.service.ISysMenuService;
+
+/**
+ * 登录验证
+ * 
+ * @author ruoyi
+ */
+@RestController
+public class SysLoginController
+{
+    @Autowired
+    private SysLoginService loginService;
+
+    @Autowired
+    private ISysMenuService menuService;
+
+    @Autowired
+    private SysPermissionService permissionService;
+
+    /**
+     * 登录方法
+     * 
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
+    /**
+     * 获取用户信息
+     * 
+     * @return 用户信息
+     */
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        // 角色集合
+        Set<String> roles = permissionService.getRolePermission(user);
+        // 权限集合
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("user", user);
+        ajax.put("roles", roles);
+        ajax.put("permissions", permissions);
+        return ajax;
+    }
+
+    /**
+     * 获取路由信息
+     * 
+     * @return 路由信息
+     */
+    @GetMapping("getRouters")
+    public AjaxResult getRouters()
+    {
+        Long userId = SecurityUtils.getUserId();
+        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
+        return AjaxResult.success(menuService.buildMenus(menus));
+    }
+}

+ 142 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

@@ -0,0 +1,142 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysMenuService;
+
+/**
+ * 菜单信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/menu")
+public class SysMenuController extends BaseController
+{
+    @Autowired
+    private ISysMenuService menuService;
+
+    /**
+     * 获取菜单列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return success(menus);
+    }
+
+    /**
+     * 根据菜单编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:query')")
+    @GetMapping(value = "/{menuId}")
+    public AjaxResult getInfo(@PathVariable Long menuId)
+    {
+        return success(menuService.selectMenuById(menuId));
+    }
+
+    /**
+     * 获取菜单下拉树列表
+     */
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return success(menuService.buildMenuTreeSelect(menus));
+    }
+
+    /**
+     * 加载对应角色菜单列表树
+     */
+    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(getUserId());
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
+        ajax.put("menus", menuService.buildMenuTreeSelect(menus));
+        return ajax;
+    }
+
+    /**
+     * 新增菜单
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:add')")
+    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        menu.setCreateBy(getUsername());
+        return toAjax(menuService.insertMenu(menu));
+    }
+
+    /**
+     * 修改菜单
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
+    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        else if (menu.getMenuId().equals(menu.getParentId()))
+        {
+            return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+        }
+        menu.setUpdateBy(getUsername());
+        return toAjax(menuService.updateMenu(menu));
+    }
+
+    /**
+     * 删除菜单
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
+    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{menuId}")
+    public AjaxResult remove(@PathVariable("menuId") Long menuId)
+    {
+        if (menuService.hasChildByMenuId(menuId))
+        {
+            return warn("存在子菜单,不允许删除");
+        }
+        if (menuService.checkMenuExistRole(menuId))
+        {
+            return warn("菜单已分配,不允许删除");
+        }
+        return toAjax(menuService.deleteMenuById(menuId));
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.domain.SysNotice;
+import com.ruoyi.system.service.ISysNoticeService;
+
+/**
+ * 公告 信息操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/notice")
+public class SysNoticeController extends BaseController
+{
+    @Autowired
+    private ISysNoticeService noticeService;
+
+    /**
+     * 获取通知公告列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysNotice notice)
+    {
+        startPage();
+        List<SysNotice> list = noticeService.selectNoticeList(notice);
+        return getDataTable(list);
+    }
+
+    /**
+     * 根据通知公告编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:query')")
+    @GetMapping(value = "/{noticeId}")
+    public AjaxResult getInfo(@PathVariable Long noticeId)
+    {
+        return success(noticeService.selectNoticeById(noticeId));
+    }
+
+    /**
+     * 新增通知公告
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:add')")
+    @Log(title = "通知公告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysNotice notice)
+    {
+        notice.setCreateBy(getUsername());
+        return toAjax(noticeService.insertNotice(notice));
+    }
+
+    /**
+     * 修改通知公告
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
+    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
+    {
+        notice.setUpdateBy(getUsername());
+        return toAjax(noticeService.updateNotice(notice));
+    }
+
+    /**
+     * 删除通知公告
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
+    @Log(title = "通知公告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{noticeIds}")
+    public AjaxResult remove(@PathVariable Long[] noticeIds)
+    {
+        return toAjax(noticeService.deleteNoticeByIds(noticeIds));
+    }
+}

+ 129 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java

@@ -0,0 +1,129 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.service.ISysPostService;
+
+/**
+ * 岗位信息操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/post")
+public class SysPostController extends BaseController
+{
+    @Autowired
+    private ISysPostService postService;
+
+    /**
+     * 获取岗位列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysPost post)
+    {
+        startPage();
+        List<SysPost> list = postService.selectPostList(post);
+        return getDataTable(list);
+    }
+    
+    @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:post:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysPost post)
+    {
+        List<SysPost> list = postService.selectPostList(post);
+        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
+        util.exportExcel(response, list, "岗位数据");
+    }
+
+    /**
+     * 根据岗位编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:query')")
+    @GetMapping(value = "/{postId}")
+    public AjaxResult getInfo(@PathVariable Long postId)
+    {
+        return success(postService.selectPostById(postId));
+    }
+
+    /**
+     * 新增岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:add')")
+    @Log(title = "岗位管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysPost post)
+    {
+        if (!postService.checkPostNameUnique(post))
+        {
+            return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+        }
+        else if (!postService.checkPostCodeUnique(post))
+        {
+            return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+        }
+        post.setCreateBy(getUsername());
+        return toAjax(postService.insertPost(post));
+    }
+
+    /**
+     * 修改岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:edit')")
+    @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysPost post)
+    {
+        if (!postService.checkPostNameUnique(post))
+        {
+            return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+        }
+        else if (!postService.checkPostCodeUnique(post))
+        {
+            return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+        }
+        post.setUpdateBy(getUsername());
+        return toAjax(postService.updatePost(post));
+    }
+
+    /**
+     * 删除岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:remove')")
+    @Log(title = "岗位管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{postIds}")
+    public AjaxResult remove(@PathVariable Long[] postIds)
+    {
+        return toAjax(postService.deletePostByIds(postIds));
+    }
+
+    /**
+     * 获取岗位选择框列表
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysPost> posts = postService.selectPostAll();
+        return success(posts);
+    }
+}

+ 141 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

@@ -0,0 +1,141 @@
+package com.ruoyi.web.controller.system;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.MimeTypeUtils;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 个人信息 业务处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController
+{
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 个人信息
+     */
+    @GetMapping
+    public AjaxResult profile()
+    {
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        AjaxResult ajax = AjaxResult.success(user);
+        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
+        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
+        return ajax;
+    }
+
+    /**
+     * 修改用户
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult updateProfile(@RequestBody SysUser user)
+    {
+        LoginUser loginUser = getLoginUser();
+        SysUser sysUser = loginUser.getUser();
+        user.setUserName(sysUser.getUserName());
+        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setUserId(sysUser.getUserId());
+        user.setPassword(null);
+        user.setAvatar(null);
+        user.setDeptId(null);
+        if (userService.updateUserProfile(user) > 0)
+        {
+            // 更新缓存用户信息
+            sysUser.setNickName(user.getNickName());
+            sysUser.setPhonenumber(user.getPhonenumber());
+            sysUser.setEmail(user.getEmail());
+            sysUser.setSex(user.getSex());
+            tokenService.setLoginUser(loginUser);
+            return success();
+        }
+        return error("修改个人信息异常,请联系管理员");
+    }
+
+    /**
+     * 重置密码
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword)
+    {
+        LoginUser loginUser = getLoginUser();
+        String userName = loginUser.getUsername();
+        String password = loginUser.getPassword();
+        if (!SecurityUtils.matchesPassword(oldPassword, password))
+        {
+            return error("修改密码失败,旧密码错误");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password))
+        {
+            return error("新密码不能与旧密码相同");
+        }
+        if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
+        {
+            // 更新缓存用户密码
+            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            tokenService.setLoginUser(loginUser);
+            return success();
+        }
+        return error("修改密码异常,请联系管理员");
+    }
+
+    /**
+     * 头像上传
+     */
+    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatar")
+    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception
+    {
+        if (!file.isEmpty())
+        {
+            LoginUser loginUser = getLoginUser();
+            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
+            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
+            {
+                AjaxResult ajax = AjaxResult.success();
+                ajax.put("imgUrl", avatar);
+                // 更新缓存用户头像
+                loginUser.getUser().setAvatar(avatar);
+                tokenService.setLoginUser(loginUser);
+                return ajax;
+            }
+        }
+        return error("上传图片异常,请联系管理员");
+    }
+}

+ 38 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java

@@ -0,0 +1,38 @@
+package com.ruoyi.web.controller.system;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.RegisterBody;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.service.SysRegisterService;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 注册验证
+ * 
+ * @author ruoyi
+ */
+@RestController
+public class SysRegisterController extends BaseController
+{
+    @Autowired
+    private SysRegisterService registerService;
+
+    @Autowired
+    private ISysConfigService configService;
+
+    @PostMapping("/register")
+    public AjaxResult register(@RequestBody RegisterBody user)
+    {
+        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
+        {
+            return error("当前系统没有开启注册功能!");
+        }
+        String msg = registerService.register(user);
+        return StringUtils.isEmpty(msg) ? success() : error(msg);
+    }
+}

+ 262 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -0,0 +1,262 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 角色信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/role")
+public class SysRoleController extends BaseController
+{
+    @Autowired
+    private ISysRoleService roleService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    @Autowired
+    private SysPermissionService permissionService;
+
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private ISysDeptService deptService;
+
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysRole role)
+    {
+        startPage();
+        List<SysRole> list = roleService.selectRoleList(role);
+        return getDataTable(list);
+    }
+
+    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:role:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysRole role)
+    {
+        List<SysRole> list = roleService.selectRoleList(role);
+        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
+        util.exportExcel(response, list, "角色数据");
+    }
+
+    /**
+     * 根据角色编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/{roleId}")
+    public AjaxResult getInfo(@PathVariable Long roleId)
+    {
+        roleService.checkRoleDataScope(roleId);
+        return success(roleService.selectRoleById(roleId));
+    }
+
+    /**
+     * 新增角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:add')")
+    @Log(title = "角色管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysRole role)
+    {
+        if (!roleService.checkRoleNameUnique(role))
+        {
+            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (!roleService.checkRoleKeyUnique(role))
+        {
+            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setCreateBy(getUsername());
+        return toAjax(roleService.insertRole(role));
+
+    }
+
+    /**
+     * 修改保存角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        if (!roleService.checkRoleNameUnique(role))
+        {
+            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (!roleService.checkRoleKeyUnique(role))
+        {
+            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setUpdateBy(getUsername());
+        
+        if (roleService.updateRole(role) > 0)
+        {
+            // 更新缓存用户权限
+            LoginUser loginUser = getLoginUser();
+            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
+            {
+                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
+                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+                tokenService.setLoginUser(loginUser);
+            }
+            return success();
+        }
+        return error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
+    }
+
+    /**
+     * 修改保存数据权限
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/dataScope")
+    public AjaxResult dataScope(@RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        return toAjax(roleService.authDataScope(role));
+    }
+
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        role.setUpdateBy(getUsername());
+        return toAjax(roleService.updateRoleStatus(role));
+    }
+
+    /**
+     * 删除角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:remove')")
+    @Log(title = "角色管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{roleIds}")
+    public AjaxResult remove(@PathVariable Long[] roleIds)
+    {
+        return toAjax(roleService.deleteRoleByIds(roleIds));
+    }
+
+    /**
+     * 获取角色选择框列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        return success(roleService.selectRoleAll());
+    }
+
+    /**
+     * 查询已分配用户角色列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/authUser/allocatedList")
+    public TableDataInfo allocatedList(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectAllocatedList(user);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询未分配用户角色列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/authUser/unallocatedList")
+    public TableDataInfo unallocatedList(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectUnallocatedList(user);
+        return getDataTable(list);
+    }
+
+    /**
+     * 取消授权用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/cancel")
+    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
+    {
+        return toAjax(roleService.deleteAuthUser(userRole));
+    }
+
+    /**
+     * 批量取消授权用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/cancelAll")
+    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
+    {
+        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
+    }
+
+    /**
+     * 批量选择用户授权
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/selectAll")
+    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
+    {
+        roleService.checkRoleDataScope(roleId);
+        return toAjax(roleService.insertAuthUsers(roleId, userIds));
+    }
+
+    /**
+     * 获取对应角色部门树列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/deptTree/{roleId}")
+    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
+        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
+        return ajax;
+    }
+}

+ 251 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -0,0 +1,251 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysPostService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 用户信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/user")
+public class SysUserController extends BaseController
+{
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private ISysRoleService roleService;
+
+    @Autowired
+    private ISysDeptService deptService;
+
+    @Autowired
+    private ISysPostService postService;
+
+    /**
+     * 获取用户列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectUserList(user);
+        return getDataTable(list);
+    }
+
+    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysUser user)
+    {
+        List<SysUser> list = userService.selectUserList(user);
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        util.exportExcel(response, list, "用户数据");
+    }
+
+    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        List<SysUser> userList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = userService.importUser(userList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        util.importTemplateExcel(response, "用户数据");
+    }
+
+    /**
+     * 根据用户编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = { "/", "/{userId}" })
+    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
+    {
+        userService.checkUserDataScope(userId);
+        AjaxResult ajax = AjaxResult.success();
+        List<SysRole> roles = roleService.selectRoleAll();
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        ajax.put("posts", postService.selectPostAll());
+        if (StringUtils.isNotNull(userId))
+        {
+            SysUser sysUser = userService.selectUserById(userId);
+            ajax.put(AjaxResult.DATA_TAG, sysUser);
+            ajax.put("postIds", postService.selectPostListByUserId(userId));
+            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
+        }
+        return ajax;
+    }
+
+    /**
+     * 新增用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:add')")
+    @Log(title = "用户管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysUser user)
+    {
+        if (!userService.checkUserNameUnique(user))
+        {
+            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setCreateBy(getUsername());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        return toAjax(userService.insertUser(user));
+    }
+
+    /**
+     * 修改用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        if (!userService.checkUserNameUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.updateUser(user));
+    }
+
+    /**
+     * 删除用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:remove')")
+    @Log(title = "用户管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userIds}")
+    public AjaxResult remove(@PathVariable Long[] userIds)
+    {
+        if (ArrayUtils.contains(userIds, getUserId()))
+        {
+            return error("当前用户不能删除");
+        }
+        return toAjax(userService.deleteUserByIds(userIds));
+    }
+
+    /**
+     * 重置密码
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/resetPwd")
+    public AjaxResult resetPwd(@RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.resetPwd(user));
+    }
+
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.updateUserStatus(user));
+    }
+
+    /**
+     * 根据用户编号获取授权角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping("/authRole/{userId}")
+    public AjaxResult authRole(@PathVariable("userId") Long userId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        SysUser user = userService.selectUserById(userId);
+        List<SysRole> roles = roleService.selectRolesByUserId(userId);
+        ajax.put("user", user);
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        return ajax;
+    }
+
+    /**
+     * 用户授权角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authRole")
+    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
+    {
+        userService.checkUserDataScope(userId);
+        userService.insertUserAuth(userId, roleIds);
+        return success();
+    }
+
+    /**
+     * 获取部门树列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/deptTree")
+    public AjaxResult deptTree(SysDept dept)
+    {
+        return success(deptService.selectDeptTreeList(dept));
+    }
+}

+ 183 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java

@@ -0,0 +1,183 @@
+package com.ruoyi.web.controller.tool;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * swagger 用户测试方法
+ * 
+ * @author ruoyi
+ */
+@Api("用户信息管理")
+@RestController
+@RequestMapping("/test/user")
+public class TestController extends BaseController
+{
+    private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
+    {
+        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
+        users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
+    }
+
+    @ApiOperation("获取用户列表")
+    @GetMapping("/list")
+    public R<List<UserEntity>> userList()
+    {
+        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
+        return R.ok(userList);
+    }
+
+    @ApiOperation("获取用户详细")
+    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
+    @GetMapping("/{userId}")
+    public R<UserEntity> getUser(@PathVariable Integer userId)
+    {
+        if (!users.isEmpty() && users.containsKey(userId))
+        {
+            return R.ok(users.get(userId));
+        }
+        else
+        {
+            return R.fail("用户不存在");
+        }
+    }
+
+    @ApiOperation("新增用户")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class),
+        @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class)
+    })
+    @PostMapping("/save")
+    public R<String> save(UserEntity user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+        {
+            return R.fail("用户ID不能为空");
+        }
+        users.put(user.getUserId(), user);
+        return R.ok();
+    }
+
+    @ApiOperation("更新用户")
+    @PutMapping("/update")
+    public R<String> update(@RequestBody UserEntity user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+        {
+            return R.fail("用户ID不能为空");
+        }
+        if (users.isEmpty() || !users.containsKey(user.getUserId()))
+        {
+            return R.fail("用户不存在");
+        }
+        users.remove(user.getUserId());
+        users.put(user.getUserId(), user);
+        return R.ok();
+    }
+
+    @ApiOperation("删除用户信息")
+    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
+    @DeleteMapping("/{userId}")
+    public R<String> delete(@PathVariable Integer userId)
+    {
+        if (!users.isEmpty() && users.containsKey(userId))
+        {
+            users.remove(userId);
+            return R.ok();
+        }
+        else
+        {
+            return R.fail("用户不存在");
+        }
+    }
+}
+
+@ApiModel(value = "UserEntity", description = "用户实体")
+class UserEntity
+{
+    @ApiModelProperty("用户ID")
+    private Integer userId;
+
+    @ApiModelProperty("用户名称")
+    private String username;
+
+    @ApiModelProperty("用户密码")
+    private String password;
+
+    @ApiModelProperty("用户手机")
+    private String mobile;
+
+    public UserEntity()
+    {
+
+    }
+
+    public UserEntity(Integer userId, String username, String password, String mobile)
+    {
+        this.userId = userId;
+        this.username = username;
+        this.password = password;
+        this.mobile = mobile;
+    }
+
+    public Integer getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Integer userId)
+    {
+        this.userId = userId;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getMobile()
+    {
+        return mobile;
+    }
+
+    public void setMobile(String mobile)
+    {
+        this.mobile = mobile;
+    }
+}

+ 125 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java

@@ -0,0 +1,125 @@
+package com.ruoyi.web.core.config;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.ruoyi.common.config.RuoYiConfig;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.models.auth.In;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.service.SecurityScheme;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+
+/**
+ * Swagger2的接口配置
+ * 
+ * @author ruoyi
+ */
+@Configuration
+public class SwaggerConfig
+{
+    /** 系统基础配置 */
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    /** 是否开启swagger */
+    @Value("${swagger.enabled}")
+    private boolean enabled;
+
+    /** 设置请求的统一前缀 */
+    @Value("${swagger.pathMapping}")
+    private String pathMapping;
+
+    /**
+     * 创建API
+     */
+    @Bean
+    public Docket createRestApi()
+    {
+        return new Docket(DocumentationType.OAS_30)
+                // 是否启用Swagger
+                .enable(enabled)
+                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
+                .apiInfo(apiInfo())
+                // 设置哪些接口暴露给Swagger展示
+                .select()
+                // 扫描所有有注解的api,用这种方式更灵活
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                // 扫描指定包中的swagger注解
+                // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
+                // 扫描所有 .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                /* 设置安全模式,swagger可以设置访问token */
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts())
+                .pathMapping(pathMapping);
+    }
+
+    /**
+     * 安全模式,这里指定token通过Authorization头请求头传递
+     */
+    private List<SecurityScheme> securitySchemes()
+    {
+        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
+        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
+        return apiKeyList;
+    }
+
+    /**
+     * 安全上下文
+     */
+    private List<SecurityContext> securityContexts()
+    {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
+                        .build());
+        return securityContexts;
+    }
+
+    /**
+     * 默认的安全上引用
+     */
+    private List<SecurityReference> defaultAuth()
+    {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+        return securityReferences;
+    }
+
+    /**
+     * 添加摘要信息
+     */
+    private ApiInfo apiInfo()
+    {
+        // 用ApiInfoBuilder进行定制
+        return new ApiInfoBuilder()
+                // 设置标题
+                .title("标题:若依管理系统_接口文档")
+                // 描述
+                .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
+                // 作者信息
+                .contact(new Contact(ruoyiConfig.getName(), null, null))
+                // 版本
+                .version("版本号:" + ruoyiConfig.getVersion())
+                .build();
+    }
+}

+ 1 - 0
ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties

@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson.*.jar

+ 61 - 0
ruoyi-admin/src/main/resources/application-druid.yml

@@ -0,0 +1,61 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            # 主库数据源
+            master:
+                url: jdbc:mysql://114.116.114.108:3306/rfid-hotel-manager?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: root
+                password: ydl@123456
+            # 从库数据源
+            slave:
+                # 从数据源开关/默认关闭
+                enabled: false
+                url: 
+                username: 
+                password: 
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置连接超时时间
+            connectTimeout: 30000
+            # 配置网络超时时间
+            socketTimeout: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter: 
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true

+ 131 - 0
ruoyi-admin/src/main/resources/application.yml

@@ -0,0 +1,131 @@
+# 项目相关配置
+ruoyi:
+  # 名称
+  name: RuoYi
+  # 版本
+  version: 3.8.5
+  # 版权年份
+  copyrightYear: 2023
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: D:/ruoyi/uploadPath
+  # 获取ip地址开关
+  addressEnabled: false
+  # 验证码类型 math 数组计算 char 字符验证
+  captchaType: math
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8080
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+
+# 日志配置
+logging:
+  level:
+    com.ruoyi: debug
+    org.springframework: warn
+
+# 用户配置
+user:
+  password:
+    # 密码最大错误次数
+    maxRetryCount: 5
+    # 密码锁定时间(默认10分钟)
+    lockTime: 10
+
+# Spring配置
+spring:
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  profiles: 
+    active: druid
+  # 文件上传
+  servlet:
+     multipart:
+       # 单个文件大小
+       max-file-size:  10MB
+       # 设置总上传的文件大小
+       max-request-size:  20MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  # redis 配置
+  redis:
+    # 地址
+    host: 114.116.114.108
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 2
+    # 密码
+    password: foobared
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+
+# token配置
+token:
+    # 令牌自定义标识
+    header: Authorization
+    # 令牌密钥
+    secret: abcdefghijklmnopqrstuvwxyz
+    # 令牌有效期(默认30分钟)
+    expireTime: 30
+  
+# MyBatis配置
+mybatis:
+    # 搜索指定包别名
+    typeAliasesPackage: com.ruoyi.**.domain
+    # 配置mapper的扫描,找到所有的mapper.xml映射文件
+    mapperLocations: classpath*:mapper/**/*Mapper.xml
+    # 加载全局的配置文件
+    configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper: 
+  helperDialect: mysql
+  supportMethodsArguments: true
+  params: count=countSql 
+
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping: /dev-api
+
+# 防止XSS攻击
+xss: 
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*

+ 24 - 0
ruoyi-admin/src/main/resources/banner.txt

@@ -0,0 +1,24 @@
+Application Version: ${ruoyi.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+//                          _ooOoo_                               //
+//                         o8888888o                              //
+//                         88" . "88                              //
+//                         (| ^_^ |)                              //
+//                         O\  =  /O                              //
+//                      ____/`---'\____                           //
+//                    .'  \\|     |//  `.                         //
+//                   /  \\|||  :  |||//  \                        //
+//                  /  _||||| -:- |||||-  \                       //
+//                  |   | \\\  -  /// |   |                       //
+//                  | \_|  ''\---/''  |   |                       //
+//                  \  .-\__  `-`  ___/-. /                       //
+//                ___`. .'  /--.--\  `. . ___                     //
+//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
+//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
+//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
+//      ========`-.____`-.___\_____/___.-`____.-'========         //
+//                           `=---='                              //
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
+//             佛祖保佑       永不宕机      永无BUG               //
+////////////////////////////////////////////////////////////////////

+ 38 - 0
ruoyi-admin/src/main/resources/i18n/messages.properties

@@ -0,0 +1,38 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=用户不存在/密码错误
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
+user.password.delete=对不起,您的账号已被删除
+user.blocked=用户已封禁,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+login.blocked=很遗憾,访问IP已被列入系统黑名单
+user.logout.success=退出成功
+
+length.not.valid=长度必须在{min}到{max}个字符之间
+
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.password.not.valid=* 5-50个字符
+ 
+user.email.not.valid=邮箱格式错误
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.register.success=注册成功
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

+ 93 - 0
ruoyi-admin/src/main/resources/logback.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 日志存放路径 -->
+	<property name="log.path" value="/home/ruoyi/logs" />
+    <!-- 日志输出格式 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+	<!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+	
+	<!-- 系统日志输出 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+	
+	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+			<!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+			<!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+	
+	<!-- 用户访问日志输出  -->
+    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/sys-user.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+	
+	<!-- 系统模块日志级别控制  -->
+	<logger name="com.ruoyi" level="info" />
+	<!-- Spring日志级别控制  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+    </root>
+	
+	<!--系统用户操作日志-->
+    <logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>
+</configuration> 

+ 86 - 0
ruoyi-admin/src/main/resources/mapper/asset/TbAssetAdjustmentMapper.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.asset.mapper.TbAssetAdjustmentMapper">
+    
+    <resultMap type="TbAssetAdjustment" id="TbAssetAdjustmentResult">
+        <result property="id"    column="id"    />
+        <result property="assetNumber"    column="asset_number"    />
+        <result property="originalAssetInfo"    column="original_asset_info"    />
+        <result property="reason"    column="reason"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="preparedBy"    column="prepared_by"    />
+        <result property="preparedDepartment"    column="prepared_department"    />
+        <result property="recordStatus"    column="record_status"    />
+    </resultMap>
+
+    <sql id="selectTbAssetAdjustmentVo">
+        select id, asset_number, original_asset_info, reason, order_number, prepared_by, prepared_department, record_status from tb_asset_adjustment
+    </sql>
+
+    <select id="selectTbAssetAdjustmentList" parameterType="TbAssetAdjustment" resultMap="TbAssetAdjustmentResult">
+        <include refid="selectTbAssetAdjustmentVo"/>
+        <where>  
+            <if test="assetNumber != null  and assetNumber != ''"> and asset_number = #{assetNumber}</if>
+            <if test="originalAssetInfo != null  and originalAssetInfo != ''"> and original_asset_info = #{originalAssetInfo}</if>
+            <if test="reason != null  and reason != ''"> and reason like concat('%', #{reason}, '%')</if>
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+            <if test="preparedBy != null  and preparedBy != ''"> and prepared_by like concat('%', #{preparedBy}, '%')</if>
+            <if test="preparedDepartment != null  and preparedDepartment != ''"> and prepared_department = #{preparedDepartment}</if>
+            <if test="recordStatus != null "> and record_status = #{recordStatus}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetAdjustmentById" parameterType="Long" resultMap="TbAssetAdjustmentResult">
+        <include refid="selectTbAssetAdjustmentVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetAdjustment" parameterType="TbAssetAdjustment" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_adjustment
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="assetNumber != null and assetNumber != ''">asset_number,</if>
+            <if test="originalAssetInfo != null and originalAssetInfo != ''">original_asset_info,</if>
+            <if test="reason != null">reason,</if>
+            <if test="orderNumber != null and orderNumber != ''">order_number,</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by,</if>
+            <if test="preparedDepartment != null">prepared_department,</if>
+            <if test="recordStatus != null">record_status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="assetNumber != null and assetNumber != ''">#{assetNumber},</if>
+            <if test="originalAssetInfo != null and originalAssetInfo != ''">#{originalAssetInfo},</if>
+            <if test="reason != null">#{reason},</if>
+            <if test="orderNumber != null and orderNumber != ''">#{orderNumber},</if>
+            <if test="preparedBy != null and preparedBy != ''">#{preparedBy},</if>
+            <if test="preparedDepartment != null">#{preparedDepartment},</if>
+            <if test="recordStatus != null">#{recordStatus},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetAdjustment" parameterType="TbAssetAdjustment">
+        update tb_asset_adjustment
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="assetNumber != null and assetNumber != ''">asset_number = #{assetNumber},</if>
+            <if test="originalAssetInfo != null and originalAssetInfo != ''">original_asset_info = #{originalAssetInfo},</if>
+            <if test="reason != null">reason = #{reason},</if>
+            <if test="orderNumber != null and orderNumber != ''">order_number = #{orderNumber},</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by = #{preparedBy},</if>
+            <if test="preparedDepartment != null">prepared_department = #{preparedDepartment},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetAdjustmentById" parameterType="Long">
+        delete from tb_asset_adjustment where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetAdjustmentByIds" parameterType="String">
+        delete from tb_asset_adjustment where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 81 - 0
ruoyi-admin/src/main/resources/mapper/asset/TbAssetCategoryMapper.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.asset.mapper.TbAssetCategoryMapper">
+    
+    <resultMap type="TbAssetCategory" id="TbAssetCategoryResult">
+        <result property="id"    column="id"    />
+        <result property="number"    column="number"    />
+        <result property="name"    column="name"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectTbAssetCategoryVo">
+        select id, number, name, remark, create_by, create_time, update_by, update_time from tb_asset_category
+    </sql>
+
+    <select id="selectTbAssetCategoryList" parameterType="TbAssetCategory" resultMap="TbAssetCategoryResult">
+        <include refid="selectTbAssetCategoryVo"/>
+        <where>  
+            <if test="number != null  and number != ''"> and number = #{number}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetCategoryById" parameterType="Long" resultMap="TbAssetCategoryResult">
+        <include refid="selectTbAssetCategoryVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetCategory" parameterType="TbAssetCategory" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_category
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="number != null and number != ''">number,</if>
+            <if test="name != null and name != ''">name,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="number != null and number != ''">#{number},</if>
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetCategory" parameterType="TbAssetCategory">
+        update tb_asset_category
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="number != null and number != ''">number = #{number},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetCategoryById" parameterType="Long">
+        delete from tb_asset_category where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetCategoryByIds" parameterType="String">
+        delete from tb_asset_category where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 281 - 0
ruoyi-admin/src/main/resources/mapper/asset/TbAssetInformationMapper.xml

@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.asset.mapper.TbAssetInformationMapper">
+    
+    <resultMap type="TbAssetInformation" id="TbAssetInformationResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="name"    column="name"    />
+        <result property="number"    column="number"    />
+        <result property="imageUrl"    column="image_url"    />
+        <result property="categoryNumber"    column="category_number"    />
+        <result property="specificationsModel"    column="specifications_model"    />
+        <result property="abcCategory"    column="abc_category"    />
+        <result property="manageStatus"    column="manage_status"    />
+        <result property="userDepartment"    column="user_department"    />
+        <result property="department"    column="department"    />
+        <result property="responsiblePerson"    column="responsible_person"    />
+        <result property="locationNumber"    column="location_number"    />
+        <result property="property"    column="property"    />
+        <result property="purchaseDate"    column="purchase_date"    />
+        <result property="commissioningDate"    column="commissioning_date"    />
+        <result property="originalValue"    column="original_value"    />
+        <result property="durableYears"    column="durable_years"    />
+        <result property="netValue"    column="net_value"    />
+        <result property="residualValue"    column="residual_value"    />
+        <result property="accumulatedDepreciation"    column="accumulated_depreciation"    />
+        <result property="lastDepreciationDate"    column="last_depreciation_date"    />
+        <result property="depreciationMethod"    column="depreciation_method"    />
+        <result property="contractNumber"    column="contract_number"    />
+        <result property="factoryNumber"    column="factory_number"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="supplier"    column="supplier"    />
+        <result property="purpose"    column="purpose"    />
+        <result property="maintenanceDate"    column="maintenance_date"    />
+        <result property="maintenanceTel"    column="maintenance_tel"    />
+        <result property="maintenanceUser"    column="maintenance_user"    />
+        <result property="corporation"    column="corporation"    />
+        <result property="recordStatus"    column="record_status"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="reservedColumnA"    column="reserved_column_a"    />
+        <result property="reservedColumnB"    column="reserved_column_b"    />
+        <result property="reservedColumnC"    column="reserved_column_c"    />
+        <result property="reservedColumnD"    column="reserved_column_d"    />
+        <result property="reservedColumnE"    column="reserved_column_e"    />
+        <result property="reservedColumnF"    column="reserved_column_f"    />
+        <result property="reservedColumnG"    column="reserved_column_g"    />
+        <result property="reservedColumnH"    column="reserved_column_h"    />
+        <result property="reservedColumnI"    column="reserved_column_i"    />
+        <result property="reservedColumnJ"    column="reserved_column_j"    />
+    </resultMap>
+
+    <sql id="selectTbAssetInformationVo">
+        select id, code, name, number, image_url, category_number, specifications_model, abc_category, manage_status, user_department, department, responsible_person, location_number, property, purchase_date, commissioning_date, original_value, durable_years, net_value, residual_value, accumulated_depreciation, last_depreciation_date, depreciation_method, contract_number, factory_number, manufacturer, supplier, purpose, maintenance_date, maintenance_tel, maintenance_user, corporation, record_status, remark, create_by, create_time, update_by, update_time, reserved_column_a, reserved_column_b, reserved_column_c, reserved_column_d, reserved_column_e, reserved_column_f, reserved_column_g, reserved_column_h, reserved_column_i, reserved_column_j from tb_asset_information
+    </sql>
+
+    <select id="selectTbAssetInformationList" parameterType="TbAssetInformation" resultMap="TbAssetInformationResult">
+        <include refid="selectTbAssetInformationVo"/>
+        <where>  
+            <if test="code != null  and code != ''"> and code = #{code}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="number != null  and number != ''"> and number = #{number}</if>
+            <if test="imageUrl != null  and imageUrl != ''"> and image_url = #{imageUrl}</if>
+            <if test="categoryNumber != null  and categoryNumber != ''"> and category_number = #{categoryNumber}</if>
+            <if test="specificationsModel != null  and specificationsModel != ''"> and specifications_model = #{specificationsModel}</if>
+            <if test="abcCategory != null  and abcCategory != ''"> and abc_category = #{abcCategory}</if>
+            <if test="manageStatus != null "> and manage_status = #{manageStatus}</if>
+            <if test="userDepartment != null  and userDepartment != ''"> and user_department = #{userDepartment}</if>
+            <if test="department != null  and department != ''"> and department = #{department}</if>
+            <if test="responsiblePerson != null  and responsiblePerson != ''"> and responsible_person = #{responsiblePerson}</if>
+            <if test="locationNumber != null  and locationNumber != ''"> and location_number = #{locationNumber}</if>
+            <if test="property != null  and property != ''"> and property = #{property}</if>
+            <if test="purchaseDate != null "> and purchase_date = #{purchaseDate}</if>
+            <if test="commissioningDate != null "> and commissioning_date = #{commissioningDate}</if>
+            <if test="originalValue != null  and originalValue != ''"> and original_value = #{originalValue}</if>
+            <if test="durableYears != null "> and durable_years = #{durableYears}</if>
+            <if test="netValue != null  and netValue != ''"> and net_value = #{netValue}</if>
+            <if test="residualValue != null  and residualValue != ''"> and residual_value = #{residualValue}</if>
+            <if test="accumulatedDepreciation != null  and accumulatedDepreciation != ''"> and accumulated_depreciation = #{accumulatedDepreciation}</if>
+            <if test="lastDepreciationDate != null "> and last_depreciation_date = #{lastDepreciationDate}</if>
+            <if test="depreciationMethod != null "> and depreciation_method = #{depreciationMethod}</if>
+            <if test="contractNumber != null  and contractNumber != ''"> and contract_number = #{contractNumber}</if>
+            <if test="factoryNumber != null  and factoryNumber != ''"> and factory_number = #{factoryNumber}</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer = #{manufacturer}</if>
+            <if test="supplier != null  and supplier != ''"> and supplier = #{supplier}</if>
+            <if test="purpose != null  and purpose != ''"> and purpose = #{purpose}</if>
+            <if test="maintenanceDate != null "> and maintenance_date = #{maintenanceDate}</if>
+            <if test="maintenanceTel != null  and maintenanceTel != ''"> and maintenance_tel = #{maintenanceTel}</if>
+            <if test="maintenanceUser != null  and maintenanceUser != ''"> and maintenance_user = #{maintenanceUser}</if>
+            <if test="corporation != null  and corporation != ''"> and corporation = #{corporation}</if>
+            <if test="recordStatus != null "> and record_status = #{recordStatus}</if>
+            <if test="reservedColumnA != null  and reservedColumnA != ''"> and reserved_column_a = #{reservedColumnA}</if>
+            <if test="reservedColumnB != null  and reservedColumnB != ''"> and reserved_column_b = #{reservedColumnB}</if>
+            <if test="reservedColumnC != null  and reservedColumnC != ''"> and reserved_column_c = #{reservedColumnC}</if>
+            <if test="reservedColumnD != null  and reservedColumnD != ''"> and reserved_column_d = #{reservedColumnD}</if>
+            <if test="reservedColumnE != null  and reservedColumnE != ''"> and reserved_column_e = #{reservedColumnE}</if>
+            <if test="reservedColumnF != null  and reservedColumnF != ''"> and reserved_column_f = #{reservedColumnF}</if>
+            <if test="reservedColumnG != null  and reservedColumnG != ''"> and reserved_column_g = #{reservedColumnG}</if>
+            <if test="reservedColumnH != null  and reservedColumnH != ''"> and reserved_column_h = #{reservedColumnH}</if>
+            <if test="reservedColumnI != null  and reservedColumnI != ''"> and reserved_column_i = #{reservedColumnI}</if>
+            <if test="reservedColumnJ != null  and reservedColumnJ != ''"> and reserved_column_j = #{reservedColumnJ}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetInformationById" parameterType="Long" resultMap="TbAssetInformationResult">
+        <include refid="selectTbAssetInformationVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetInformation" parameterType="TbAssetInformation" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_information
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="code != null">code,</if>
+            <if test="name != null">name,</if>
+            <if test="number != null and number != ''">number,</if>
+            <if test="imageUrl != null">image_url,</if>
+            <if test="categoryNumber != null">category_number,</if>
+            <if test="specificationsModel != null and specificationsModel != ''">specifications_model,</if>
+            <if test="abcCategory != null">abc_category,</if>
+            <if test="manageStatus != null">manage_status,</if>
+            <if test="userDepartment != null">user_department,</if>
+            <if test="department != null">department,</if>
+            <if test="responsiblePerson != null">responsible_person,</if>
+            <if test="locationNumber != null">location_number,</if>
+            <if test="property != null">property,</if>
+            <if test="purchaseDate != null">purchase_date,</if>
+            <if test="commissioningDate != null">commissioning_date,</if>
+            <if test="originalValue != null">original_value,</if>
+            <if test="durableYears != null">durable_years,</if>
+            <if test="netValue != null">net_value,</if>
+            <if test="residualValue != null">residual_value,</if>
+            <if test="accumulatedDepreciation != null">accumulated_depreciation,</if>
+            <if test="lastDepreciationDate != null">last_depreciation_date,</if>
+            <if test="depreciationMethod != null">depreciation_method,</if>
+            <if test="contractNumber != null">contract_number,</if>
+            <if test="factoryNumber != null">factory_number,</if>
+            <if test="manufacturer != null">manufacturer,</if>
+            <if test="supplier != null">supplier,</if>
+            <if test="purpose != null">purpose,</if>
+            <if test="maintenanceDate != null">maintenance_date,</if>
+            <if test="maintenanceTel != null">maintenance_tel,</if>
+            <if test="maintenanceUser != null">maintenance_user,</if>
+            <if test="corporation != null">corporation,</if>
+            <if test="recordStatus != null">record_status,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="reservedColumnA != null">reserved_column_a,</if>
+            <if test="reservedColumnB != null">reserved_column_b,</if>
+            <if test="reservedColumnC != null">reserved_column_c,</if>
+            <if test="reservedColumnD != null">reserved_column_d,</if>
+            <if test="reservedColumnE != null">reserved_column_e,</if>
+            <if test="reservedColumnF != null">reserved_column_f,</if>
+            <if test="reservedColumnG != null">reserved_column_g,</if>
+            <if test="reservedColumnH != null">reserved_column_h,</if>
+            <if test="reservedColumnI != null">reserved_column_i,</if>
+            <if test="reservedColumnJ != null">reserved_column_j,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="code != null">#{code},</if>
+            <if test="name != null">#{name},</if>
+            <if test="number != null and number != ''">#{number},</if>
+            <if test="imageUrl != null">#{imageUrl},</if>
+            <if test="categoryNumber != null">#{categoryNumber},</if>
+            <if test="specificationsModel != null and specificationsModel != ''">#{specificationsModel},</if>
+            <if test="abcCategory != null">#{abcCategory},</if>
+            <if test="manageStatus != null">#{manageStatus},</if>
+            <if test="userDepartment != null">#{userDepartment},</if>
+            <if test="department != null">#{department},</if>
+            <if test="responsiblePerson != null">#{responsiblePerson},</if>
+            <if test="locationNumber != null">#{locationNumber},</if>
+            <if test="property != null">#{property},</if>
+            <if test="purchaseDate != null">#{purchaseDate},</if>
+            <if test="commissioningDate != null">#{commissioningDate},</if>
+            <if test="originalValue != null">#{originalValue},</if>
+            <if test="durableYears != null">#{durableYears},</if>
+            <if test="netValue != null">#{netValue},</if>
+            <if test="residualValue != null">#{residualValue},</if>
+            <if test="accumulatedDepreciation != null">#{accumulatedDepreciation},</if>
+            <if test="lastDepreciationDate != null">#{lastDepreciationDate},</if>
+            <if test="depreciationMethod != null">#{depreciationMethod},</if>
+            <if test="contractNumber != null">#{contractNumber},</if>
+            <if test="factoryNumber != null">#{factoryNumber},</if>
+            <if test="manufacturer != null">#{manufacturer},</if>
+            <if test="supplier != null">#{supplier},</if>
+            <if test="purpose != null">#{purpose},</if>
+            <if test="maintenanceDate != null">#{maintenanceDate},</if>
+            <if test="maintenanceTel != null">#{maintenanceTel},</if>
+            <if test="maintenanceUser != null">#{maintenanceUser},</if>
+            <if test="corporation != null">#{corporation},</if>
+            <if test="recordStatus != null">#{recordStatus},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="reservedColumnA != null">#{reservedColumnA},</if>
+            <if test="reservedColumnB != null">#{reservedColumnB},</if>
+            <if test="reservedColumnC != null">#{reservedColumnC},</if>
+            <if test="reservedColumnD != null">#{reservedColumnD},</if>
+            <if test="reservedColumnE != null">#{reservedColumnE},</if>
+            <if test="reservedColumnF != null">#{reservedColumnF},</if>
+            <if test="reservedColumnG != null">#{reservedColumnG},</if>
+            <if test="reservedColumnH != null">#{reservedColumnH},</if>
+            <if test="reservedColumnI != null">#{reservedColumnI},</if>
+            <if test="reservedColumnJ != null">#{reservedColumnJ},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetInformation" parameterType="TbAssetInformation">
+        update tb_asset_information
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null">code = #{code},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="number != null and number != ''">number = #{number},</if>
+            <if test="imageUrl != null">image_url = #{imageUrl},</if>
+            <if test="categoryNumber != null">category_number = #{categoryNumber},</if>
+            <if test="specificationsModel != null and specificationsModel != ''">specifications_model = #{specificationsModel},</if>
+            <if test="abcCategory != null">abc_category = #{abcCategory},</if>
+            <if test="manageStatus != null">manage_status = #{manageStatus},</if>
+            <if test="userDepartment != null">user_department = #{userDepartment},</if>
+            <if test="department != null">department = #{department},</if>
+            <if test="responsiblePerson != null">responsible_person = #{responsiblePerson},</if>
+            <if test="locationNumber != null">location_number = #{locationNumber},</if>
+            <if test="property != null">property = #{property},</if>
+            <if test="purchaseDate != null">purchase_date = #{purchaseDate},</if>
+            <if test="commissioningDate != null">commissioning_date = #{commissioningDate},</if>
+            <if test="originalValue != null">original_value = #{originalValue},</if>
+            <if test="durableYears != null">durable_years = #{durableYears},</if>
+            <if test="netValue != null">net_value = #{netValue},</if>
+            <if test="residualValue != null">residual_value = #{residualValue},</if>
+            <if test="accumulatedDepreciation != null">accumulated_depreciation = #{accumulatedDepreciation},</if>
+            <if test="lastDepreciationDate != null">last_depreciation_date = #{lastDepreciationDate},</if>
+            <if test="depreciationMethod != null">depreciation_method = #{depreciationMethod},</if>
+            <if test="contractNumber != null">contract_number = #{contractNumber},</if>
+            <if test="factoryNumber != null">factory_number = #{factoryNumber},</if>
+            <if test="manufacturer != null">manufacturer = #{manufacturer},</if>
+            <if test="supplier != null">supplier = #{supplier},</if>
+            <if test="purpose != null">purpose = #{purpose},</if>
+            <if test="maintenanceDate != null">maintenance_date = #{maintenanceDate},</if>
+            <if test="maintenanceTel != null">maintenance_tel = #{maintenanceTel},</if>
+            <if test="maintenanceUser != null">maintenance_user = #{maintenanceUser},</if>
+            <if test="corporation != null">corporation = #{corporation},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="reservedColumnA != null">reserved_column_a = #{reservedColumnA},</if>
+            <if test="reservedColumnB != null">reserved_column_b = #{reservedColumnB},</if>
+            <if test="reservedColumnC != null">reserved_column_c = #{reservedColumnC},</if>
+            <if test="reservedColumnD != null">reserved_column_d = #{reservedColumnD},</if>
+            <if test="reservedColumnE != null">reserved_column_e = #{reservedColumnE},</if>
+            <if test="reservedColumnF != null">reserved_column_f = #{reservedColumnF},</if>
+            <if test="reservedColumnG != null">reserved_column_g = #{reservedColumnG},</if>
+            <if test="reservedColumnH != null">reserved_column_h = #{reservedColumnH},</if>
+            <if test="reservedColumnI != null">reserved_column_i = #{reservedColumnI},</if>
+            <if test="reservedColumnJ != null">reserved_column_j = #{reservedColumnJ},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetInformationById" parameterType="Long">
+        delete from tb_asset_information where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetInformationByIds" parameterType="String">
+        delete from tb_asset_information where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 86 - 0
ruoyi-admin/src/main/resources/mapper/asset/TbLocationMapper.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.asset.mapper.TbLocationMapper">
+    
+    <resultMap type="TbLocation" id="TbLocationResult">
+        <result property="id"    column="id"    />
+        <result property="number"    column="number"    />
+        <result property="name"    column="name"    />
+        <result property="company"    column="company"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectTbLocationVo">
+        select id, number, name, company, remark, create_by, create_time, update_by, update_time from tb_location
+    </sql>
+
+    <select id="selectTbLocationList" parameterType="TbLocation" resultMap="TbLocationResult">
+        <include refid="selectTbLocationVo"/>
+        <where>  
+            <if test="number != null  and number != ''"> and number = #{number}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="company != null  and company != ''"> and company = #{company}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbLocationById" parameterType="Long" resultMap="TbLocationResult">
+        <include refid="selectTbLocationVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbLocation" parameterType="TbLocation" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_location
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="number != null and number != ''">number,</if>
+            <if test="name != null">name,</if>
+            <if test="company != null and company != ''">company,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null and createBy != ''">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="number != null and number != ''">#{number},</if>
+            <if test="name != null">#{name},</if>
+            <if test="company != null and company != ''">#{company},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbLocation" parameterType="TbLocation">
+        update tb_location
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="number != null and number != ''">number = #{number},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="company != null and company != ''">company = #{company},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbLocationById" parameterType="Long">
+        delete from tb_location where id = #{id}
+    </delete>
+
+    <delete id="deleteTbLocationByIds" parameterType="String">
+        delete from tb_location where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 81 - 0
ruoyi-admin/src/main/resources/mapper/change/TbAssetAllocationDetailMapper.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.change.mapper.TbAssetAllocationDetailMapper">
+    
+    <resultMap type="TbAssetAllocationDetail" id="TbAssetAllocationDetailResult">
+        <result property="id"    column="id"    />
+        <result property="allocationOrderNumber"    column="allocation_order_number"    />
+        <result property="assetNumber"    column="asset_number"    />
+        <result property="oldResponsiblePerson"    column="old_responsible_person"    />
+        <result property="oldLocationNumber"    column="old_location_number"    />
+        <result property="newResponsiblePerson"    column="new_responsible_person"    />
+        <result property="newLocationNumber"    column="new_location_number"    />
+    </resultMap>
+
+    <sql id="selectTbAssetAllocationDetailVo">
+        select id, allocation_order_number, asset_number, old_responsible_person, old_location_number, new_responsible_person, new_location_number from tb_asset_allocation_detail
+    </sql>
+
+    <select id="selectTbAssetAllocationDetailList" parameterType="TbAssetAllocationDetail" resultMap="TbAssetAllocationDetailResult">
+        <include refid="selectTbAssetAllocationDetailVo"/>
+        <where>  
+            <if test="allocationOrderNumber != null  and allocationOrderNumber != ''"> and allocation_order_number = #{allocationOrderNumber}</if>
+            <if test="assetNumber != null  and assetNumber != ''"> and asset_number = #{assetNumber}</if>
+            <if test="oldResponsiblePerson != null  and oldResponsiblePerson != ''"> and old_responsible_person = #{oldResponsiblePerson}</if>
+            <if test="oldLocationNumber != null  and oldLocationNumber != ''"> and old_location_number = #{oldLocationNumber}</if>
+            <if test="newResponsiblePerson != null  and newResponsiblePerson != ''"> and new_responsible_person = #{newResponsiblePerson}</if>
+            <if test="newLocationNumber != null  and newLocationNumber != ''"> and new_location_number = #{newLocationNumber}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetAllocationDetailById" parameterType="Long" resultMap="TbAssetAllocationDetailResult">
+        <include refid="selectTbAssetAllocationDetailVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetAllocationDetail" parameterType="TbAssetAllocationDetail" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_allocation_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="allocationOrderNumber != null and allocationOrderNumber != ''">allocation_order_number,</if>
+            <if test="assetNumber != null and assetNumber != ''">asset_number,</if>
+            <if test="oldResponsiblePerson != null">old_responsible_person,</if>
+            <if test="oldLocationNumber != null">old_location_number,</if>
+            <if test="newResponsiblePerson != null">new_responsible_person,</if>
+            <if test="newLocationNumber != null">new_location_number,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="allocationOrderNumber != null and allocationOrderNumber != ''">#{allocationOrderNumber},</if>
+            <if test="assetNumber != null and assetNumber != ''">#{assetNumber},</if>
+            <if test="oldResponsiblePerson != null">#{oldResponsiblePerson},</if>
+            <if test="oldLocationNumber != null">#{oldLocationNumber},</if>
+            <if test="newResponsiblePerson != null">#{newResponsiblePerson},</if>
+            <if test="newLocationNumber != null">#{newLocationNumber},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetAllocationDetail" parameterType="TbAssetAllocationDetail">
+        update tb_asset_allocation_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="allocationOrderNumber != null and allocationOrderNumber != ''">allocation_order_number = #{allocationOrderNumber},</if>
+            <if test="assetNumber != null and assetNumber != ''">asset_number = #{assetNumber},</if>
+            <if test="oldResponsiblePerson != null">old_responsible_person = #{oldResponsiblePerson},</if>
+            <if test="oldLocationNumber != null">old_location_number = #{oldLocationNumber},</if>
+            <if test="newResponsiblePerson != null">new_responsible_person = #{newResponsiblePerson},</if>
+            <if test="newLocationNumber != null">new_location_number = #{newLocationNumber},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetAllocationDetailById" parameterType="Long">
+        delete from tb_asset_allocation_detail where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetAllocationDetailByIds" parameterType="String">
+        delete from tb_asset_allocation_detail where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 118 - 0
ruoyi-admin/src/main/resources/mapper/change/TbAssetAllocationMapper.xml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.change.mapper.TbAssetAllocationMapper">
+    
+    <resultMap type="TbAssetAllocation" id="TbAssetAllocationResult">
+        <result property="id"    column="id"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="callOutDepartment"    column="call_out_department"    />
+        <result property="callOutBy"    column="call_out_by"    />
+        <result property="callOutDate"    column="call_out_date"    />
+        <result property="callInDepartment"    column="call_in_department"    />
+        <result property="callInBy"    column="call_in_by"    />
+        <result property="callInDate"    column="call_in_date"    />
+        <result property="assetTotalOriginalValue"    column="asset_total_original_value"    />
+        <result property="assetTotalNetValue"    column="asset_total_net_value"    />
+        <result property="reason"    column="reason"    />
+        <result property="preparedBy"    column="prepared_by"    />
+        <result property="preparedDepartment"    column="prepared_department"    />
+        <result property="corporation"    column="corporation"    />
+        <result property="recordStatus"    column="record_status"    />
+    </resultMap>
+
+    <sql id="selectTbAssetAllocationVo">
+        select id, order_number, call_out_department, call_out_by, call_out_date, call_in_department, call_in_by, call_in_date, asset_total_original_value, asset_total_net_value, reason, prepared_by, prepared_department, corporation, record_status from tb_asset_allocation
+    </sql>
+
+    <select id="selectTbAssetAllocationList" parameterType="TbAssetAllocation" resultMap="TbAssetAllocationResult">
+        <include refid="selectTbAssetAllocationVo"/>
+        <where>  
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+            <if test="callOutDepartment != null  and callOutDepartment != ''"> and call_out_department = #{callOutDepartment}</if>
+            <if test="callOutBy != null  and callOutBy != ''"> and call_out_by = #{callOutBy}</if>
+            <if test="callOutDate != null "> and call_out_date = #{callOutDate}</if>
+            <if test="callInDepartment != null  and callInDepartment != ''"> and call_in_department = #{callInDepartment}</if>
+            <if test="callInBy != null  and callInBy != ''"> and call_in_by = #{callInBy}</if>
+            <if test="callInDate != null "> and call_in_date = #{callInDate}</if>
+            <if test="preparedBy != null  and preparedBy != ''"> and prepared_by = #{preparedBy}</if>
+            <if test="preparedDepartment != null  and preparedDepartment != ''"> and prepared_department = #{preparedDepartment}</if>
+            <if test="corporation != null  and corporation != ''"> and corporation = #{corporation}</if>
+            <if test="recordStatus != null "> and record_status = #{recordStatus}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetAllocationById" parameterType="Long" resultMap="TbAssetAllocationResult">
+        <include refid="selectTbAssetAllocationVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetAllocation" parameterType="TbAssetAllocation" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_allocation
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number,</if>
+            <if test="callOutDepartment != null">call_out_department,</if>
+            <if test="callOutBy != null">call_out_by,</if>
+            <if test="callOutDate != null">call_out_date,</if>
+            <if test="callInDepartment != null">call_in_department,</if>
+            <if test="callInBy != null">call_in_by,</if>
+            <if test="callInDate != null">call_in_date,</if>
+            <if test="assetTotalOriginalValue != null">asset_total_original_value,</if>
+            <if test="assetTotalNetValue != null">asset_total_net_value,</if>
+            <if test="reason != null">reason,</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by,</if>
+            <if test="preparedDepartment != null">prepared_department,</if>
+            <if test="corporation != null">corporation,</if>
+            <if test="recordStatus != null">record_status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">#{orderNumber},</if>
+            <if test="callOutDepartment != null">#{callOutDepartment},</if>
+            <if test="callOutBy != null">#{callOutBy},</if>
+            <if test="callOutDate != null">#{callOutDate},</if>
+            <if test="callInDepartment != null">#{callInDepartment},</if>
+            <if test="callInBy != null">#{callInBy},</if>
+            <if test="callInDate != null">#{callInDate},</if>
+            <if test="assetTotalOriginalValue != null">#{assetTotalOriginalValue},</if>
+            <if test="assetTotalNetValue != null">#{assetTotalNetValue},</if>
+            <if test="reason != null">#{reason},</if>
+            <if test="preparedBy != null and preparedBy != ''">#{preparedBy},</if>
+            <if test="preparedDepartment != null">#{preparedDepartment},</if>
+            <if test="corporation != null">#{corporation},</if>
+            <if test="recordStatus != null">#{recordStatus},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetAllocation" parameterType="TbAssetAllocation">
+        update tb_asset_allocation
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number = #{orderNumber},</if>
+            <if test="callOutDepartment != null">call_out_department = #{callOutDepartment},</if>
+            <if test="callOutBy != null">call_out_by = #{callOutBy},</if>
+            <if test="callOutDate != null">call_out_date = #{callOutDate},</if>
+            <if test="callInDepartment != null">call_in_department = #{callInDepartment},</if>
+            <if test="callInBy != null">call_in_by = #{callInBy},</if>
+            <if test="callInDate != null">call_in_date = #{callInDate},</if>
+            <if test="assetTotalOriginalValue != null">asset_total_original_value = #{assetTotalOriginalValue},</if>
+            <if test="assetTotalNetValue != null">asset_total_net_value = #{assetTotalNetValue},</if>
+            <if test="reason != null">reason = #{reason},</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by = #{preparedBy},</if>
+            <if test="preparedDepartment != null">prepared_department = #{preparedDepartment},</if>
+            <if test="corporation != null">corporation = #{corporation},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetAllocationById" parameterType="Long">
+        delete from tb_asset_allocation where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetAllocationByIds" parameterType="String">
+        delete from tb_asset_allocation where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 108 - 0
ruoyi-admin/src/main/resources/mapper/change/TbAssetLendMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.change.mapper.TbAssetLendMapper">
+    
+    <resultMap type="TbAssetLend" id="TbAssetLendResult">
+        <result property="id"    column="id"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="assetTotalOriginalValue"    column="asset_total_original_value"    />
+        <result property="assetTotalNetValue"    column="asset_total_net_value"    />
+        <result property="applicationDate"    column="application_date"    />
+        <result property="lendDepartment"    column="lend_department"    />
+        <result property="bySponsor"    column="by_sponsor"    />
+        <result property="passingUnit"    column="passing_unit"    />
+        <result property="reason"    column="reason"    />
+        <result property="preparedBy"    column="prepared_by"    />
+        <result property="preparedDepartment"    column="prepared_department"    />
+        <result property="corporation"    column="corporation"    />
+        <result property="recordStatus"    column="record_status"    />
+    </resultMap>
+
+    <sql id="selectTbAssetLendVo">
+        select id, order_number, asset_total_original_value, asset_total_net_value, application_date, lend_department, by_sponsor, passing_unit, reason, prepared_by, prepared_department, corporation, record_status from tb_asset_lend
+    </sql>
+
+    <select id="selectTbAssetLendList" parameterType="TbAssetLend" resultMap="TbAssetLendResult">
+        <include refid="selectTbAssetLendVo"/>
+        <where>  
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+            <if test="applicationDate != null "> and application_date = #{applicationDate}</if>
+            <if test="lendDepartment != null  and lendDepartment != ''"> and lend_department = #{lendDepartment}</if>
+            <if test="bySponsor != null  and bySponsor != ''"> and by_sponsor = #{bySponsor}</if>
+            <if test="passingUnit != null  and passingUnit != ''"> and passing_unit = #{passingUnit}</if>
+            <if test="preparedBy != null  and preparedBy != ''"> and prepared_by = #{preparedBy}</if>
+            <if test="preparedDepartment != null  and preparedDepartment != ''"> and prepared_department = #{preparedDepartment}</if>
+            <if test="corporation != null  and corporation != ''"> and corporation = #{corporation}</if>
+            <if test="recordStatus != null "> and record_status = #{recordStatus}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetLendById" parameterType="Long" resultMap="TbAssetLendResult">
+        <include refid="selectTbAssetLendVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetLend" parameterType="TbAssetLend" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_lend
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number,</if>
+            <if test="assetTotalOriginalValue != null">asset_total_original_value,</if>
+            <if test="assetTotalNetValue != null">asset_total_net_value,</if>
+            <if test="applicationDate != null">application_date,</if>
+            <if test="lendDepartment != null">lend_department,</if>
+            <if test="bySponsor != null and bySponsor != ''">by_sponsor,</if>
+            <if test="passingUnit != null and passingUnit != ''">passing_unit,</if>
+            <if test="reason != null">reason,</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by,</if>
+            <if test="preparedDepartment != null">prepared_department,</if>
+            <if test="corporation != null">corporation,</if>
+            <if test="recordStatus != null">record_status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">#{orderNumber},</if>
+            <if test="assetTotalOriginalValue != null">#{assetTotalOriginalValue},</if>
+            <if test="assetTotalNetValue != null">#{assetTotalNetValue},</if>
+            <if test="applicationDate != null">#{applicationDate},</if>
+            <if test="lendDepartment != null">#{lendDepartment},</if>
+            <if test="bySponsor != null and bySponsor != ''">#{bySponsor},</if>
+            <if test="passingUnit != null and passingUnit != ''">#{passingUnit},</if>
+            <if test="reason != null">#{reason},</if>
+            <if test="preparedBy != null and preparedBy != ''">#{preparedBy},</if>
+            <if test="preparedDepartment != null">#{preparedDepartment},</if>
+            <if test="corporation != null">#{corporation},</if>
+            <if test="recordStatus != null">#{recordStatus},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetLend" parameterType="TbAssetLend">
+        update tb_asset_lend
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number = #{orderNumber},</if>
+            <if test="assetTotalOriginalValue != null">asset_total_original_value = #{assetTotalOriginalValue},</if>
+            <if test="assetTotalNetValue != null">asset_total_net_value = #{assetTotalNetValue},</if>
+            <if test="applicationDate != null">application_date = #{applicationDate},</if>
+            <if test="lendDepartment != null">lend_department = #{lendDepartment},</if>
+            <if test="bySponsor != null and bySponsor != ''">by_sponsor = #{bySponsor},</if>
+            <if test="passingUnit != null and passingUnit != ''">passing_unit = #{passingUnit},</if>
+            <if test="reason != null">reason = #{reason},</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by = #{preparedBy},</if>
+            <if test="preparedDepartment != null">prepared_department = #{preparedDepartment},</if>
+            <if test="corporation != null">corporation = #{corporation},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetLendById" parameterType="Long">
+        delete from tb_asset_lend where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetLendByIds" parameterType="String">
+        delete from tb_asset_lend where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 65 - 0
ruoyi-admin/src/main/resources/mapper/change/TbAssetOrderDetailMapper.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.change.mapper.TbAssetOrderDetailMapper">
+    
+    <resultMap type="TbAssetOrderDetail" id="TbAssetOrderDetailResult">
+        <result property="id"    column="id"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="assetNumber"    column="asset_number"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTbAssetOrderDetailVo">
+        select id, order_number, asset_number, remark from tb_asset_order_detail
+    </sql>
+
+    <select id="selectTbAssetOrderDetailList" parameterType="TbAssetOrderDetail" resultMap="TbAssetOrderDetailResult">
+        <include refid="selectTbAssetOrderDetailVo"/>
+        <where>  
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+            <if test="assetNumber != null  and assetNumber != ''"> and asset_number = #{assetNumber}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetOrderDetailById" parameterType="Long" resultMap="TbAssetOrderDetailResult">
+        <include refid="selectTbAssetOrderDetailVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetOrderDetail" parameterType="TbAssetOrderDetail" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_order_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number,</if>
+            <if test="assetNumber != null and assetNumber != ''">asset_number,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">#{orderNumber},</if>
+            <if test="assetNumber != null and assetNumber != ''">#{assetNumber},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetOrderDetail" parameterType="TbAssetOrderDetail">
+        update tb_asset_order_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number = #{orderNumber},</if>
+            <if test="assetNumber != null and assetNumber != ''">asset_number = #{assetNumber},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetOrderDetailById" parameterType="Long">
+        delete from tb_asset_order_detail where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetOrderDetailByIds" parameterType="String">
+        delete from tb_asset_order_detail where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 98 - 0
ruoyi-admin/src/main/resources/mapper/change/TbAssetOrderMapper.xml

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.change.mapper.TbAssetOrderMapper">
+    
+    <resultMap type="TbAssetOrder" id="TbAssetOrderResult">
+        <result property="id"    column="id"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="assetTotalOriginalValue"    column="asset_total_original_value"    />
+        <result property="assetTotalNetValue"    column="asset_total_net_value"    />
+        <result property="applicationDate"    column="application_date"    />
+        <result property="applicationDepartment"    column="application_department"    />
+        <result property="reason"    column="reason"    />
+        <result property="preparedBy"    column="prepared_by"    />
+        <result property="preparedDepartment"    column="prepared_department"    />
+        <result property="corporation"    column="corporation"    />
+        <result property="recordStatus"    column="record_status"    />
+    </resultMap>
+
+    <sql id="selectTbAssetOrderVo">
+        select id, order_number, asset_total_original_value, asset_total_net_value, application_date, application_department, reason, prepared_by, prepared_department, corporation, record_status from tb_asset_order
+    </sql>
+
+    <select id="selectTbAssetOrderList" parameterType="TbAssetOrder" resultMap="TbAssetOrderResult">
+        <include refid="selectTbAssetOrderVo"/>
+        <where>  
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+            <if test="applicationDate != null "> and application_date = #{applicationDate}</if>
+            <if test="applicationDepartment != null  and applicationDepartment != ''"> and application_department = #{applicationDepartment}</if>
+            <if test="preparedBy != null  and preparedBy != ''"> and prepared_by = #{preparedBy}</if>
+            <if test="preparedDepartment != null  and preparedDepartment != ''"> and prepared_department = #{preparedDepartment}</if>
+            <if test="corporation != null  and corporation != ''"> and corporation = #{corporation}</if>
+            <if test="recordStatus != null "> and record_status = #{recordStatus}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetOrderById" parameterType="Long" resultMap="TbAssetOrderResult">
+        <include refid="selectTbAssetOrderVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetOrder" parameterType="TbAssetOrder" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_order
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number,</if>
+            <if test="assetTotalOriginalValue != null">asset_total_original_value,</if>
+            <if test="assetTotalNetValue != null">asset_total_net_value,</if>
+            <if test="applicationDate != null">application_date,</if>
+            <if test="applicationDepartment != null">application_department,</if>
+            <if test="reason != null">reason,</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by,</if>
+            <if test="preparedDepartment != null">prepared_department,</if>
+            <if test="corporation != null">corporation,</if>
+            <if test="recordStatus != null">record_status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">#{orderNumber},</if>
+            <if test="assetTotalOriginalValue != null">#{assetTotalOriginalValue},</if>
+            <if test="assetTotalNetValue != null">#{assetTotalNetValue},</if>
+            <if test="applicationDate != null">#{applicationDate},</if>
+            <if test="applicationDepartment != null">#{applicationDepartment},</if>
+            <if test="reason != null">#{reason},</if>
+            <if test="preparedBy != null and preparedBy != ''">#{preparedBy},</if>
+            <if test="preparedDepartment != null">#{preparedDepartment},</if>
+            <if test="corporation != null">#{corporation},</if>
+            <if test="recordStatus != null">#{recordStatus},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetOrder" parameterType="TbAssetOrder">
+        update tb_asset_order
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderNumber != null and orderNumber != ''">order_number = #{orderNumber},</if>
+            <if test="assetTotalOriginalValue != null">asset_total_original_value = #{assetTotalOriginalValue},</if>
+            <if test="assetTotalNetValue != null">asset_total_net_value = #{assetTotalNetValue},</if>
+            <if test="applicationDate != null">application_date = #{applicationDate},</if>
+            <if test="applicationDepartment != null">application_department = #{applicationDepartment},</if>
+            <if test="reason != null">reason = #{reason},</if>
+            <if test="preparedBy != null and preparedBy != ''">prepared_by = #{preparedBy},</if>
+            <if test="preparedDepartment != null">prepared_department = #{preparedDepartment},</if>
+            <if test="corporation != null">corporation = #{corporation},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetOrderById" parameterType="Long">
+        delete from tb_asset_order where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetOrderByIds" parameterType="String">
+        delete from tb_asset_order where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 85 - 0
ruoyi-admin/src/main/resources/mapper/change/TbAssetReturnMapper.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.change.mapper.TbAssetReturnMapper">
+    
+    <resultMap type="TbAssetReturn" id="TbAssetReturnResult">
+        <result property="id"    column="id"    />
+        <result property="lendOrderNumber"    column="lend_order_number"    />
+        <result property="assetNumber"    column="asset_number"    />
+        <result property="returnDate"    column="return_date"    />
+        <result property="actualReturnDate"    column="actual_return_date"    />
+        <result property="bySponsor"    column="by_sponsor"    />
+        <result property="remark"    column="remark"    />
+        <result property="recordStatus"    column="record_status"    />
+    </resultMap>
+
+    <sql id="selectTbAssetReturnVo">
+        select id, lend_order_number, asset_number, return_date, actual_return_date, by_sponsor, remark, record_status from tb_asset_return
+    </sql>
+
+    <select id="selectTbAssetReturnList" parameterType="TbAssetReturn" resultMap="TbAssetReturnResult">
+        <include refid="selectTbAssetReturnVo"/>
+        <where>  
+            <if test="lendOrderNumber != null  and lendOrderNumber != ''"> and lend_order_number = #{lendOrderNumber}</if>
+            <if test="assetNumber != null  and assetNumber != ''"> and asset_number = #{assetNumber}</if>
+            <if test="returnDate != null "> and return_date = #{returnDate}</if>
+            <if test="actualReturnDate != null "> and actual_return_date = #{actualReturnDate}</if>
+            <if test="bySponsor != null  and bySponsor != ''"> and by_sponsor = #{bySponsor}</if>
+            <if test="recordStatus != null "> and record_status = #{recordStatus}</if>
+        </where>
+    </select>
+    
+    <select id="selectTbAssetReturnById" parameterType="Long" resultMap="TbAssetReturnResult">
+        <include refid="selectTbAssetReturnVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTbAssetReturn" parameterType="TbAssetReturn" useGeneratedKeys="true" keyProperty="id">
+        insert into tb_asset_return
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="lendOrderNumber != null and lendOrderNumber != ''">lend_order_number,</if>
+            <if test="assetNumber != null and assetNumber != ''">asset_number,</if>
+            <if test="returnDate != null">return_date,</if>
+            <if test="actualReturnDate != null">actual_return_date,</if>
+            <if test="bySponsor != null and bySponsor != ''">by_sponsor,</if>
+            <if test="remark != null">remark,</if>
+            <if test="recordStatus != null">record_status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="lendOrderNumber != null and lendOrderNumber != ''">#{lendOrderNumber},</if>
+            <if test="assetNumber != null and assetNumber != ''">#{assetNumber},</if>
+            <if test="returnDate != null">#{returnDate},</if>
+            <if test="actualReturnDate != null">#{actualReturnDate},</if>
+            <if test="bySponsor != null and bySponsor != ''">#{bySponsor},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="recordStatus != null">#{recordStatus},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTbAssetReturn" parameterType="TbAssetReturn">
+        update tb_asset_return
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="lendOrderNumber != null and lendOrderNumber != ''">lend_order_number = #{lendOrderNumber},</if>
+            <if test="assetNumber != null and assetNumber != ''">asset_number = #{assetNumber},</if>
+            <if test="returnDate != null">return_date = #{returnDate},</if>
+            <if test="actualReturnDate != null">actual_return_date = #{actualReturnDate},</if>
+            <if test="bySponsor != null and bySponsor != ''">by_sponsor = #{bySponsor},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTbAssetReturnById" parameterType="Long">
+        delete from tb_asset_return where id = #{id}
+    </delete>
+
+    <delete id="deleteTbAssetReturnByIds" parameterType="String">
+        delete from tb_asset_return where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott