Jelajahi Sumber

Merge branch 'master' into 'main'

RFID酒店管理系统初步提交

See merge request rfid_hotel_manager_project/rfid_hotel_manager!1
林武泰 2 tahun lalu
induk
melakukan
985434de8f
100 mengubah file dengan 9705 tambahan dan 92 penghapusan
  1. 1 0
      .github/FUNDING.yml
  2. 47 0
      .gitignore
  3. 20 0
      LICENSE
  4. 97 92
      README.md
  5. 12 0
      bin/clean.bat
  6. 12 0
      bin/package.bat
  7. 14 0
      bin/run.bat
  8. TEMPAT SAMPAH
      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 - 92
README.md

@@ -1,92 +1,97 @@
-# rfid_hotel_manager
-
-
-
-## Getting started
-
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
-
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
-
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
-
-```
-cd existing_repo
-git remote add origin https://jihulab.com/rfid_hotel_manager_project/rfid_hotel_manager.git
-git branch -M main
-git push -uf origin main
-```
-
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://jihulab.com/rfid_hotel_manager_project/rfid_hotel_manager/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
-
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
-
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
-
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
-
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
-
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
-
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
-
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
-
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
-
-## License
-For open source projects, say how it is licensed.
-
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+<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

TEMPAT SAMPAH
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>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini