libin 3 yıl önce
işleme
f3473f45ae
100 değiştirilmiş dosya ile 9528 ekleme ve 0 silme
  1. 47 0
      .gitignore
  2. 20 0
      LICENSE
  3. 97 0
      README.md
  4. 12 0
      bin/clean.bat
  5. 12 0
      bin/package.bat
  6. 14 0
      bin/run.bat
  7. 255 0
      pom.xml
  8. 167 0
      ruoyi-admin/pom.xml
  9. 34 0
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  10. 18 0
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
  11. 165 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5HomeController.java
  12. 49 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5NoticeMessageController.java
  13. 347 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5OrderController.java
  14. 294 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5PersonalController.java
  15. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5ShopCarController.java
  16. 126 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5SystemController.java
  17. 133 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/dto/ResCommodityManage.java
  18. 94 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
  19. 163 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  20. 120 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
  21. 27 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
  22. 82 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  23. 69 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  24. 92 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  25. 134 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  26. 132 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  27. 121 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  28. 132 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  29. 29 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
  30. 86 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  31. 142 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
  32. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  33. 130 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  34. 144 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  35. 38 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  36. 264 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  37. 252 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  38. 24 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
  39. 183 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  40. 125 0
      ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
  41. 172 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/BusCompanyController.java
  42. 103 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/CompanyStatisController.java
  43. 141 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityCouponController.java
  44. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityJourneyInformationController.java
  45. 126 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityManageController.java
  46. 119 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityTypeController.java
  47. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerCollectionOrFootprintController.java
  48. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerCouponController.java
  49. 113 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerDistributionRecordController.java
  50. 112 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerDistributionSetController.java
  51. 106 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerIntegralRecordController.java
  52. 111 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerIntegralSetController.java
  53. 149 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerManageController.java
  54. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerNoticeController.java
  55. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerShoppingCartController.java
  56. 107 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TNoticeMessageController.java
  57. 112 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TOrderEvaluateController.java
  58. 249 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TOrderManageController.java
  59. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TOrderManageTotalController.java
  60. 76 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/BusCompany.java
  61. 54 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityCoupon.java
  62. 38 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityJourneyInformation.java
  63. 133 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityManage.java
  64. 38 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityType.java
  65. 52 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerCollectionOrFootprint.java
  66. 56 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerCoupon.java
  67. 57 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerDistributionRecord.java
  68. 39 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerDistributionSet.java
  69. 78 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerIntegralRecord.java
  70. 35 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerIntegralSet.java
  71. 65 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerManage.java
  72. 46 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerNotice.java
  73. 73 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerShoppingCart.java
  74. 40 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TNoticeMessage.java
  75. 69 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderEvaluate.java
  76. 123 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderManage.java
  77. 70 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderManageTotal.java
  78. 47 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TPurchasedDetailExportDo.java
  79. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/BusCompanyMapper.java
  80. 82 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityCouponMapper.java
  81. 62 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityJourneyInformationMapper.java
  82. 98 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityManageMapper.java
  83. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityTypeMapper.java
  84. 63 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerCollectionOrFootprintMapper.java
  85. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerCouponMapper.java
  86. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerDistributionRecordMapper.java
  87. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerDistributionSetMapper.java
  88. 63 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerIntegralRecordMapper.java
  89. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerIntegralSetMapper.java
  90. 70 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerManageMapper.java
  91. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerNoticeMapper.java
  92. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerShoppingCartMapper.java
  93. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TNoticeMessageMapper.java
  94. 63 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TOrderEvaluateMapper.java
  95. 89 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TOrderManageMapper.java
  96. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TOrderManageTotalMapper.java
  97. 61 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/IBusCompanyService.java
  98. 67 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/ITCommodityCouponService.java
  99. 62 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/ITCommodityJourneyInformationService.java
  100. 79 0
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/ITCommodityManageService.java

+ 47 - 0
.gitignore

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

+ 20 - 0
LICENSE

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

+ 97 - 0
README.md

@@ -0,0 +1,97 @@
+<p align="center">
+	<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
+</p>
+<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.3</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.3-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/已满-139821253-blue.svg)](https://jq.qq.com/?_wv=1027&k=njiWDmkj) [![加入QQ群](https://img.shields.io/badge/104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) 点击按钮入群。

+ 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

+ 255 - 0
pom.xml

@@ -0,0 +1,255 @@
+<?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.3</version>
+
+    <name>ruoyi</name>
+    <url>http://www.ruoyi.vip</url>
+    <description>一日游api</description>
+    
+    <properties>
+        <ruoyi.version>3.8.3</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.11</druid.version>
+        <bitwalker.version>1.21</bitwalker.version>
+        <swagger.version>3.0.0</swagger.version>
+        <kaptcha.version>2.3.2</kaptcha.version>
+        <mybatis-spring-boot.version>2.2.2</mybatis-spring-boot.version>
+        <pagehelper.boot.version>1.4.3</pagehelper.boot.version>
+        <fastjson.version>2.0.12</fastjson.version>
+        <oshi.version>6.2.2</oshi.version>
+        <commons.io.version>2.11.0</commons.io.version>
+        <commons.fileupload.version>1.4</commons.fileupload.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>
+
+            <!-- SpringBoot集成mybatis框架 -->
+            <dependency>
+                <groupId>org.mybatis.spring.boot</groupId>
+                <artifactId>mybatis-spring-boot-starter</artifactId>
+                <version>${mybatis-spring-boot.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>
+
+            <!-- 文件上传工具类 -->
+            <dependency>
+                <groupId>commons-fileupload</groupId>
+                <artifactId>commons-fileupload</artifactId>
+                <version>${commons.fileupload.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>
+
+            <!--     redis分布式工具   -->
+            <dependency>
+                <groupId>org.redisson</groupId>
+                <artifactId>redisson</artifactId>
+                <version>3.6.5</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>com.github.penggle</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>
+
+
+    <dependencies>
+
+    </dependencies>
+
+    <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>

+ 167 - 0
ruoyi-admin/pom.xml

@@ -0,0 +1,167 @@
+<?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.3</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>oneDay-tour</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>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</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.0.0</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+
+<!--            <plugin>-->
+<!--                <groupId>com.spotify</groupId>-->
+<!--                <artifactId>docker-maven-plugin</artifactId>-->
+<!--                <version>1.0.0</version>-->
+<!--                &lt;!&ndash;将插件绑定在某个phase执行&ndash;&gt;-->
+<!--                <executions>-->
+<!--                    <execution>-->
+<!--                        <id>build-image</id>-->
+<!--                        &lt;!&ndash;用户只需执行mvn package ,就会自动执行mvn docker:build&ndash;&gt;-->
+<!--                        <phase>package</phase>-->
+<!--                        <goals>-->
+<!--                            <goal>build</goal>-->
+<!--                        </goals>-->
+<!--                    </execution>-->
+<!--                </executions>-->
+
+<!--                <configuration>-->
+<!--                    &lt;!&ndash;指定生成的镜像名,这里是我们的作者名+项目名&ndash;&gt;-->
+<!--                    <imageName>lizhipeng/${project.artifactId}</imageName>-->
+
+<!--                    &lt;!&ndash;指定标签 这里指定的是镜像的版本,我们默认版本是latest&ndash;&gt;-->
+<!--                    <imageTags>-->
+<!--                        <imageTag>latest</imageTag>-->
+<!--                    </imageTags>-->
+
+<!--                    &lt;!&ndash;指定基础镜像jdk1.8&ndash;&gt;-->
+<!--                    <baseImage>java</baseImage>-->
+<!--                    &lt;!&ndash;-->
+<!--                    镜像制作人本人信息-->
+<!--                    <maintainer>bruceliu@email.com</maintainer>-->
+<!--                    &ndash;&gt;-->
+<!--                    &lt;!&ndash;切换到ROOT目录&ndash;&gt;-->
+<!--                    <workdir>/ROOT</workdir>-->
+
+<!--                    &lt;!&ndash;查看我们的java版本&ndash;&gt;-->
+<!--                    <cmd>["java", "-version"]</cmd>-->
+
+<!--                    &lt;!&ndash;${project.build.finalName}.jar是打包后生成的jar包的名字&ndash;&gt;-->
+<!--                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>-->
+
+<!--                    &lt;!&ndash;指定远程 docker api地址&ndash;&gt;-->
+<!--                    <dockerHost>http://119.45.134.58:12315</dockerHost>-->
+
+<!--                    &lt;!&ndash; 这里是复制 jar 包到 docker 容器指定目录配置 &ndash;&gt;-->
+<!--                    <resources>-->
+<!--                        <resource>-->
+<!--                            <targetPath>/</targetPath>-->
+<!--                            &lt;!&ndash;jar 包所在的路径  此处配置的 即对应 target 目录&ndash;&gt;-->
+<!--                            <directory>${project.build.directory}</directory>-->
+<!--                            &lt;!&ndash;用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 &ndash;&gt;-->
+<!--                            <include>${project.build.finalName}.jar</include>-->
+<!--                        </resource>-->
+<!--                    </resources>-->
+
+<!--                </configuration>-->
+<!--            </plugin>-->
+
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+
+</project>

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

@@ -0,0 +1,34 @@
+package com.ruoyi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 启动程序
+ * 
+ * @author ruoyi
+ */
+@EnableAsync
+@EnableScheduling
+@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);
+    }
+}

+ 165 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5HomeController.java

@@ -0,0 +1,165 @@
+package com.ruoyi.web.H5Api.api;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginCustomerManage;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.web.pcApi.domain.*;
+import com.ruoyi.web.pcApi.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * h5端-商品信息api
+ *
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/h5/home")
+@CrossOrigin
+public class H5HomeController extends BaseController {
+    @Autowired
+    private ITCommodityManageService commodityManageService;
+    @Autowired
+    private ITCommodityTypeService typeService;
+    @Autowired
+    private ITOrderEvaluateService orderEvaluateService;
+    @Autowired
+    private ITCustomerCouponService customerCouponService;
+    @Autowired
+    private ITCustomerCollectionOrFootprintService customerCollectionOrFootprintService;
+
+    /**
+     * 查询商品列表
+     * /优选列表  isPreferred='1'
+     * /推荐列表 isRecommend='1'
+     * /搜索查询  commodityName
+     * #param deptId  所属bus公司
+     *
+     * @return
+     */
+    @GetMapping("/selectPreferredList")
+    public AjaxResult selectPreferredList(TCommodityManage commodityManage) {
+        commodityManage.setStatus("0");
+        List<TCommodityManage> customerManages = commodityManageService.selectTCommodityManageList4H5(commodityManage);
+        return AjaxResult.success(customerManages);
+    }
+
+    /**
+     * 查询分类专区
+     *
+     * @return
+     */
+    @GetMapping("/selectTypeList")
+    public AjaxResult selectTypeList(TCommodityType commodityType) {
+        List<TCommodityType> commodityTypeList = typeService.selectTCommodityTypeList(commodityType);
+        return AjaxResult.success(commodityTypeList);
+    }
+
+    /**
+     * 查询销量排行前十
+     * #param deptId 所属bus公司
+     *
+     * @return
+     */
+    @GetMapping("/selectSalesTop10")
+    public AjaxResult selectSalesTop10(TCommodityManage commodityManage) {
+        commodityManage.setStatus("0");
+        List<TCommodityManage> commodityTypeList = commodityManageService.selectSalesTop10(commodityManage);
+        return AjaxResult.success(commodityTypeList);
+    }
+
+    /**
+     * 开放-查询商品详情
+     *
+     * @param id 商品id
+     * @return
+     */
+    @GetMapping("/getCommodity4H5Open/{id}")
+    public AjaxResult getCommodity4H5Open(@PathVariable("id") Long id) {
+        // 商品信息/商品旅程信息
+        TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(id);
+        // 评论信息
+        List<TOrderEvaluate> tOrderEvaluates = orderEvaluateService.selectTOrderEvaluateList4H5(TOrderEvaluate.builder().commodityId(id).build());
+        commodityManage.setOrderEvaluateList(tOrderEvaluates);
+        commodityManage.setCouponUser("0");
+        commodityManage.setCollectionUser("0");
+
+        // 同类型推荐列表
+        List<TCommodityManage> sameTypeList = commodityManageService.selectSameTypeCommodityTop5(id, commodityManage.getTypeId(),commodityManage.getDeptId());
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("commodity", commodityManage);
+        map.put("sameTypeList", sameTypeList);
+
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 代token-查询商品详情
+     *
+     * @param id 商品id
+     * @return
+     */
+    @GetMapping("/getCommodity4H5/{id}")
+    public AjaxResult getCommodity4H5(@PathVariable("id") Long id) {
+        // 商品信息/商品旅程信息
+        TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(id);
+        // 评论信息
+        List<TOrderEvaluate> tOrderEvaluates = orderEvaluateService.selectTOrderEvaluateList4H5(TOrderEvaluate.builder().commodityId(id).build());
+        commodityManage.setOrderEvaluateList(tOrderEvaluates);
+        commodityManage.setCouponUser("0");
+        commodityManage.setCollectionUser("0");
+
+        // 登陆用户
+        LoginCustomerManage loginCustomerManage = getLoginUser().getLoginCustomer();
+        /** 判断是否有优惠券*/
+        if (commodityManage.getCommodityCouponList() != null && commodityManage.getCommodityCouponList().size() > 0) {
+            List<TCustomerCoupon> tCustomerCoupons = customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().customerId(loginCustomerManage.getId()).couponId(commodityManage.getCommodityCouponList().get(0).getId()).build());
+            if (tCustomerCoupons.size() > 0) {
+                if (!tCustomerCoupons.get(0).getStatus().equals("0")) {
+                    commodityManage.setCouponUser("2");
+                } else {
+                    commodityManage.setCouponUser("1");
+                }
+
+            }
+        }
+
+        // 增加足迹
+        // 判断是否已有足迹,有则更新足迹时间
+        List<TCustomerCollectionOrFootprint> footprints = customerCollectionOrFootprintService.selectTCustomerCollectionOrFootprintList(TCustomerCollectionOrFootprint.builder().customerId(loginCustomerManage.getId()).commodityId(id).type("1").build());
+        if (footprints.size() > 0) {
+            customerCollectionOrFootprintService.updateTCustomerCollectionOrFootprint(footprints.get(0));
+        } else {
+            customerCollectionOrFootprintService.insertTCustomerCollectionOrFootprint(
+                    TCustomerCollectionOrFootprint.builder().
+                            customerId(loginCustomerManage.getId()).
+                            commodityId(id).
+                            deptId(loginCustomerManage.getDeptId()).type("1").createBy(loginCustomerManage.getUsername()).build());
+        }
+
+        // 判断是否已收藏
+        List<TCustomerCollectionOrFootprint> collections = customerCollectionOrFootprintService.selectTCustomerCollectionOrFootprintList(TCustomerCollectionOrFootprint.builder().customerId(loginCustomerManage.getId()).commodityId(id).type("2").build());
+        if (collections.size() > 0) {
+            commodityManage.setCollectionUser("1");
+        }
+
+        // 同类型推荐列表
+        List<TCommodityManage> sameTypeList = commodityManageService.selectSameTypeCommodityTop5(id, commodityManage.getTypeId(),commodityManage.getDeptId());
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("commodity", commodityManage);
+        map.put("sameTypeList", sameTypeList);
+
+        return AjaxResult.success(map);
+    }
+
+
+}

+ 49 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5NoticeMessageController.java

@@ -0,0 +1,49 @@
+package com.ruoyi.web.H5Api.api;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
+import com.ruoyi.web.pcApi.domain.*;
+import com.ruoyi.web.pcApi.service.*;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * h5端-通知信息api
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/h5/message")
+@CrossOrigin
+public class H5NoticeMessageController extends BaseController
+{
+    @Autowired
+    private ITNoticeMessageService noticeMessageService;
+    @Autowired
+    private ITCustomerNoticeService customerNoticeService;
+
+    /**
+     *  获取用户通知消息
+     * @return
+     */
+    @GetMapping("/getCustomerNotice")
+    public AjaxResult getShopCarList(){
+        List<TNoticeMessage> tNoticeMessages = noticeMessageService.selectTNoticeMessageList(TNoticeMessage.builder().deptId(getLoginUser().getLoginCustomer().getDeptId()).build());
+        List<TCustomerNotice> tCustomerNotices = customerNoticeService.selectTCustomerNoticeList(TCustomerNotice.builder().customerId(getLoginUser().getLoginCustomer().getId()).build());
+        Map<String,Object> map = new HashedMap();
+        map.put("notice",tNoticeMessages);
+        map.put("customerNotice",tCustomerNotices);
+        return AjaxResult.success(map);
+    }
+
+}

+ 347 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5OrderController.java

@@ -0,0 +1,347 @@
+package com.ruoyi.web.H5Api.api;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.web.pcApi.domain.*;
+import com.ruoyi.web.pcApi.mapper.TCommodityManageMapper;
+import com.ruoyi.web.pcApi.service.*;
+import org.apache.commons.collections.map.HashedMap;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpRequest;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.security.core.Authentication;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * h5端-订单信息api
+ *
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/h5/order")
+@CrossOrigin
+public class H5OrderController extends BaseController {
+    @Autowired
+    private ITCommodityManageService commodityManageService;
+    @Autowired
+    private ITCustomerCouponService customerCouponService;
+    @Autowired
+    private ITCustomerCollectionOrFootprintService customerCollectionOrFootprintService;
+    @Autowired
+    private ITCustomerShoppingCartService shoppingCartService;
+    @Autowired
+    private ITOrderManageService orderManageService;
+    @Autowired
+    private RedissonClient redissonClient;
+    @Autowired
+    private TCommodityManageMapper commodityManageMapper;
+    @Autowired
+    private ITOrderEvaluateService orderEvaluateService;
+    @Autowired
+    private ITCustomerDistributionRecordService customerDistributionRecordService;
+    @Autowired
+    private ITCustomerDistributionSetService customerDistributionSetService;
+    @Autowired
+    private ITCustomerManageService customerManageService;
+    @Autowired
+    private ITCustomerIntegralRecordService customerIntegralRecordService;
+    @Autowired
+    private ITCustomerNoticeService customerNoticeService;
+    @Autowired
+    private ITOrderManageTotalService orderManageTotalService;
+    @Autowired
+    private ITCustomerIntegralSetService customerIntegralSetService;
+
+    /**
+     * 增加收藏
+     *
+     * @param customerCollectionOrFootprint
+     * @return
+     */
+    @Log(title = "用户增加收藏", operatorType = OperatorType.MOBILE, businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/addCollection")
+    public AjaxResult selectPreferredList(@RequestBody TCustomerCollectionOrFootprint customerCollectionOrFootprint) {
+        customerCollectionOrFootprint.setType("2");
+        customerCollectionOrFootprint.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        customerCollectionOrFootprint.setDeptId(getLoginUser().getLoginCustomer().getDeptId());
+        customerCollectionOrFootprint.setCreateBy(getLoginUser().getLoginCustomer().getUsername());
+        return AjaxResult.success(customerCollectionOrFootprintService.insertTCustomerCollectionOrFootprint(customerCollectionOrFootprint));
+    }
+
+    /**
+     * 商品详情-移除收藏
+     *
+     * @param commodityId 商品id
+     * @return
+     */
+    @Log(title = "用户移除收藏", operatorType = OperatorType.MOBILE, businessType = BusinessType.DELETE)
+    @RepeatSubmit
+    @DeleteMapping("/delCollection/{commodityId}")
+    public AjaxResult delCollection(@PathVariable("commodityId") Long commodityId) {
+        int i = customerCollectionOrFootprintService.deleteByCustomerIdAndCommodityId(TCustomerCollectionOrFootprint.builder().commodityId(commodityId).customerId(getLoginUser().getLoginCustomer().getId()).type("2").build());
+        return AjaxResult.success(i);
+    }
+
+
+    /**
+     * 用户领取优惠券
+     *
+     * @param customerCoupon
+     * @return
+     */
+    @Log(title = "用户领取优惠券", operatorType = OperatorType.MOBILE, businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/receiveCoupon")
+    public AjaxResult receiveCoupon(@RequestBody TCustomerCoupon customerCoupon) {
+        customerCoupon.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TCustomerCoupon> tCustomerCoupons = customerCouponService.selectTCustomerCouponList(customerCoupon);
+        if (tCustomerCoupons.size() > 0) {
+            return AjaxResult.error("该用户已有该商品优惠券,无法重复领取");
+        }
+        customerCoupon.setStatus("0");
+        customerCoupon.setDeptId(getLoginUser().getLoginCustomer().getDeptId());
+        customerCoupon.setCreateBy(getLoginUser().getLoginCustomer().getUsername());
+        return AjaxResult.success(customerCouponService.insertTCustomerCoupon(customerCoupon));
+    }
+
+    /**
+     * 增加购物车
+     *
+     * @param shoppingCart
+     * @return
+     */
+    @Log(title = "用户添加购物车", operatorType = OperatorType.MOBILE, businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/addShoppingCar")
+    public AjaxResult addShoppingCar(@RequestBody TCustomerShoppingCart shoppingCart) {
+        shoppingCart.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        shoppingCart.setDeptId(getLoginUser().getLoginCustomer().getDeptId());
+        shoppingCart.setCreateBy(getLoginUser().getLoginCustomer().getUsername());
+
+        // 商品信息/商品旅程信息
+        TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(shoppingCart.getCommodityId());
+        // 判断是否有未使用的优惠券
+        shoppingCart.setIsCoupon("0");
+        if (commodityManage.getCommodityCouponList() != null && commodityManage.getCommodityCouponList().size() > 0) {
+            List<TCustomerCoupon> tCustomerCoupons = customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().customerId(getLoginUser().getLoginCustomer().getId()).couponId(commodityManage.getCommodityCouponList().get(0).getId()).status("0").build());
+            if (tCustomerCoupons.size() > 0) {
+                shoppingCart.setIsCoupon("1");
+            }
+        }
+        return AjaxResult.success(shoppingCartService.insertTCustomerShoppingCart(shoppingCart));
+    }
+
+    /**
+     * 提交订单(分布式)
+     *
+     * @param orderManageTotal
+     * @return
+     */
+    @Log(title = "用户提交订单", operatorType = OperatorType.MOBILE, businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/submitOrder")
+    public AjaxResult submitOrder(@RequestBody TOrderManageTotal orderManageTotal) {
+        orderManageTotal.setStatus("0");// 已支付
+        orderManageTotal.setPayDate(new Date());
+        orderManageTotal.setCreateBy(getLoginUser().getLoginCustomer().getUsername());
+        orderManageTotal.setDeptId(getLoginUser().getLoginCustomer().getDeptId());
+        orderManageTotal.setAipayNo(String.valueOf(new Date().getTime()));
+        orderManageTotalService.insertTOrderManageTotal(orderManageTotal);
+        for (TOrderManage order : orderManageTotal.getOrderList()) {
+            order.setCreateBy(getLoginUser().getLoginCustomer().getUsername());
+            order.setOrderNo(String.valueOf(new Date().getTime()));
+            order.setOrderTotalId(orderManageTotal.getId());
+            order.setCustomerId(getLoginUser().getLoginCustomer().getId());
+            order.setStatus("0");// 已支付
+            order.setPayDate(new Date());
+            order.setDeptId(getLoginUser().getLoginCustomer().getDeptId());
+            order.setOrderMoney(order.getMoney());
+
+            // 分布式redis锁
+            // 商品信息/商品旅程信息
+            TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(order.getCommodityId());
+            RLock lock = redissonClient.getLock("submitOrder@" + commodityManage.getId());
+            lock.lock();
+            try {
+                // 判断是否有未使用的优惠券
+                TCustomerCoupon customerCoupon = null;
+                if (commodityManage.getCommodityCouponList() != null && commodityManage.getCommodityCouponList().size() > 0) {
+                    List<TCustomerCoupon> tCustomerCoupons = customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().customerId(getLoginUser().getLoginCustomer().getId()).couponId(commodityManage.getCommodityCouponList().get(0).getId()).status("0").build());
+                    if (tCustomerCoupons.size() > 0) {
+                        order.setIsCoupon("1");
+                        customerCoupon = tCustomerCoupons.get(0);
+                    }
+                }
+
+                // 减掉库存
+                Integer orderNum = order.getAdultNum() + order.getChildNum();
+                if (commodityManage.getStock() - orderNum >= 0) {
+                    commodityManage.setStock(commodityManage.getStock() - orderNum);
+                    // 增加销售数量
+                    commodityManage.setSaleNum(commodityManage.getSaleNum() == null ? 0 + orderNum : commodityManage.getSaleNum() + orderNum);
+                    commodityManageMapper.updateTCommodityManage(commodityManage);
+                } else {
+                    return AjaxResult.error(commodityManage.getCommodityName() + "库存不足" + orderNum);
+                }
+
+
+                /**  优惠券失效*/
+                if (customerCoupon != null) {
+                    customerCoupon.setStatus("1");
+                    customerCoupon.setUpdateBy(order.getCreateBy());
+                    customerCouponService.updateTCustomerCoupon(customerCoupon);
+                }
+
+                orderManageService.insertTOrderManage(order);
+
+                // 删除购物车信息
+                if (order.getShopCarId() != null) {
+                    shoppingCartService.deleteTCustomerShoppingCartById(order.getShopCarId());
+                }
+            } catch (RuntimeException e) {
+                e.printStackTrace();
+                return AjaxResult.error("系统异常,请稍后再试");
+            } finally {
+                // 释放锁
+                lock.unlock();
+            }
+
+        }
+
+        Map<String,Object> map = new HashedMap();
+        map.put("totalId",orderManageTotal.getId());
+        map.put("orderList",orderManageTotal.getOrderList());
+
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 增加订单信息评价
+     *
+     * @param orderEvaluate
+     * @return
+     */
+    @Log(title = "增加订单信息评价", operatorType = OperatorType.MOBILE, businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/addOrderEvalute")
+    public AjaxResult addOrderEvalute(@RequestBody TOrderEvaluate orderEvaluate) {
+
+        // 更新订单状态
+        orderManageService.updateTOrderManage(TOrderManage.builder().id(orderEvaluate.getOrderId()).status("9").build());
+
+        orderEvaluate.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        orderEvaluate.setDeptId(getLoginUser().getLoginCustomer().getDeptId());
+        return AjaxResult.success(orderEvaluateService.insertTOrderEvaluate(orderEvaluate));
+    }
+
+    /**
+     * 支付回调接口,需接入支付接口后,填写该回调URL,进行订单支付
+     *
+     * @param orderManageTotal
+     * @return
+     */
+    @Log(title = "用户支付", operatorType = OperatorType.MOBILE, businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/aiPay")
+    public AjaxResult aiPay(@RequestBody TOrderManageTotal orderManageTotal) {
+        //TODO 接入支付接口
+
+        TCustomerManage customer = customerManageService.selectTCustomerManageById(getLoginUser().getLoginCustomer().getId());
+        // 多/单订单支付
+        for (TOrderManage order : orderManageTotal.getOrderList()) {
+            TOrderManage orderManage = orderManageService.selectTOrderManageById(order.getId());
+            /**  通知待使用*/
+            customerNoticeService.insertTCustomerNotice(TCustomerNotice.builder().customerId(customer.getId()).commodityId(order.getId())
+                    .content("您有一张" + orderManage.getCommodityName() + "商品待使用。").title("订单信息")
+                    .createBy(orderManage.getCreateBy()).status("0")
+                    .build());
+            // 若使用积分 则订单金额减去积分金额
+            if(orderManageTotal.getIntegralDeduction() != BigDecimal.ZERO && orderManageTotal.getIntegralDeduction() != null){
+                order.setOrderMoney(orderManage.getOrderMoney().subtract(orderManageTotal.getIntegralDeduction()));
+                order.setIntegralDeduction(orderManageTotal.getIntegralDeduction());
+            }
+            order.setStatus("1");// 已支付   支付状态,若接入支付回调,则变更为支付中状态-9,支付回调成功后变更为1-已支付
+            order.setPayDate(new Date());
+            orderManageService.updateTOrderManage(order);
+        }
+
+        // 获取场馆积分获取比例
+        List<TCustomerIntegralSet> tCustomerIntegralSets = customerIntegralSetService.selectTCustomerIntegralSetList(TCustomerIntegralSet.builder().deptId(getLoginUser().getLoginCustomer().getDeptId()).build());
+        BigDecimal orderIntegral = orderManageTotal.getOrderMoney();
+        if (tCustomerIntegralSets.size() > 0) {
+            // 计算分销人员奖励
+            BigDecimal proportion = new BigDecimal(tCustomerIntegralSets.get(0).getProportion()).divide(new BigDecimal("100"));
+            orderIntegral= (orderManageTotal.getOrderMoney().multiply(proportion)).setScale(0, BigDecimal.ROUND_DOWN);
+
+        }
+            // 记录用户积分
+        customerIntegralRecordService.insertTCustomerIntegralRecord(TCustomerIntegralRecord.builder().
+                supIntegral(customer.getIntegral()==null?"0":customer.getIntegral().toString()).integralNum(String.valueOf(orderIntegral.longValue())).integralType("1")
+                .createBy(getLoginUser().getLoginCustomer().getUsername()).orderId(orderManageTotal.getId()).customerId(customer.getId()).deptId(getLoginUser().getDeptId())
+                .build());
+        /**  增加用户积分*/
+        customer.setIntegral(customer.getIntegral()==null?0:customer.getIntegral() + orderIntegral.longValue());
+        customerManageService.updateTCustomerManage(customer);
+
+        // 会员减去积分
+        if(orderManageTotal.getIntegralDeduction() != null && orderManageTotal.getIntegralDeduction() != BigDecimal.ZERO){
+            customer.setIntegral(customer.getIntegral() - orderManageTotal.getIntegralDeduction().longValue());
+            customerManageService.updateTCustomerManage(customer);
+            // 记录减去用户积分
+            customerIntegralRecordService.insertTCustomerIntegralRecord(TCustomerIntegralRecord.builder().
+                    supIntegral(customer.getIntegral().toString()).integralNum(orderManageTotal.getIntegralDeduction().toString()).integralType("4")
+                    .createBy(getLoginUser().getLoginCustomer().getUsername()).orderId(orderManageTotal.getOrderList().get(0).getId()).customerId(customer.getId()).deptId(getLoginUser().getDeptId())
+                    .build());
+        }
+
+        // 是否有分销
+        if (orderManageTotal.getDistributionId() != null) {
+            // 获取场馆分销比例
+            List<TCustomerDistributionSet> tCustomerDistributionSets = customerDistributionSetService.selectTCustomerDistributionSetList(TCustomerDistributionSet.builder().deptId(getLoginUser().getLoginCustomer().getDeptId()).build());
+            if (tCustomerDistributionSets.size() > 0) {
+                // 计算分销人员奖励
+                BigDecimal proportion = new BigDecimal(tCustomerDistributionSets.get(0).getProportion()).divide(new BigDecimal("100"));
+                BigDecimal integral = (orderManageTotal.getOrderMoney().multiply(proportion)).setScale(0, BigDecimal.ROUND_DOWN);
+
+                // 增加用户积分
+                TCustomerManage customerManage = customerManageService.selectTCustomerManageById(orderManageTotal.getDistributionId());
+                customerManage.setIntegral(customerManage.getIntegral() + integral.longValue());
+                customerManageService.updateTCustomerManage(customerManage);
+
+                // 记录分销
+                customerDistributionRecordService.insertTCustomerDistributionRecord(
+                        TCustomerDistributionRecord.builder().customerId(orderManageTotal.getDistributionId()).deptId(getLoginUser().getLoginCustomer().getDeptId())
+                                .distributionIntegral(integral.toString()).createBy(getLoginUser().getLoginCustomer().getUsername()).orderId(orderManageTotal.getId()).build());
+            }
+        }
+
+        // 查询总订单下-是否还有未支付的信息
+        List<TOrderManage> orderManageList = orderManageService.selectTOrderManageList(TOrderManage.builder().
+                orderTotalId(orderManageTotal.getId()).status("0").build());
+        if(orderManageList.size() <= 0){
+            orderManageTotal.setStatus("1");
+            orderManageTotalService.updateTOrderManageTotal(orderManageTotal);
+        }
+
+        return AjaxResult.success();
+    }
+
+}

+ 294 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5PersonalController.java

@@ -0,0 +1,294 @@
+package com.ruoyi.web.H5Api.api;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+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.enums.OperatorType;
+import com.ruoyi.web.pcApi.domain.*;
+import com.ruoyi.web.pcApi.service.*;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * h5端-个人中心api
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/h5/personal")
+@CrossOrigin
+public class H5PersonalController extends BaseController
+{
+    @Autowired
+    private ITCustomerManageService customerManageService;
+    @Autowired
+    private ITOrderManageService orderManageService;
+    @Autowired
+    private ITCustomerIntegralRecordService tCustomerIntegralRecordService;
+    @Autowired
+    private ITCustomerNoticeService customerNoticeService;
+    @Autowired
+    private ITCustomerDistributionRecordService customerDistributionRecordService;
+    @Autowired
+    private ITCustomerCouponService customerCouponService;
+    @Autowired
+    private ITCustomerCollectionOrFootprintService collectionOrFootprintService;
+    @Autowired
+    private ITOrderEvaluateService orderEvaluateService;
+    @Autowired
+    private ITCommodityManageService commodityManageService;
+    @Autowired
+    private ITCommodityCouponService commodityCouponService;
+    @Autowired
+    private ITCustomerIntegralRecordService customerIntegralRecordService;
+
+    /**
+     *  完善用户信息
+     * @return
+     */
+    @Log(title = "完善用户信息",operatorType = OperatorType.MOBILE,businessType = BusinessType.UPDATE)
+    @RepeatSubmit
+    @PostMapping("/updateCustomer")
+    public AjaxResult getShopCarList(@RequestBody TCustomerManage customerManage){
+        customerManage.setId(getLoginUser().getLoginCustomer().getId());
+        customerManage.setUpdateBy(getLoginUser().getLoginCustomer().getUsername());
+        return AjaxResult.success(customerManageService.updateTCustomerManage(customerManage));
+    }
+
+    /**
+     *  获取用户订单信息
+     * @param orderManage
+     * #param             status 订单状态:0-待支付 1-已支付(待参加)2-已完成 9-已评价 99-已退款
+     * @return
+     */
+    @GetMapping("/getOrderList")
+    public AjaxResult getOrderList(TOrderManage orderManage){
+        orderManage.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TOrderManage> tOrderManages = orderManageService.selectTOrderManageList(orderManage);
+        return AjaxResult.success(tOrderManages);
+    }
+
+    /**
+     *  获取用户订单信息详情
+     * @return
+     */
+    @GetMapping("/getOrderDetail/{id}")
+    public AjaxResult getOrderList(@PathVariable("id") Long id){
+        TOrderManage orderManage = orderManageService.selectTOrderManageById(id);
+        // 查询订单评价
+        List<TOrderEvaluate> tOrderEvaluates = orderEvaluateService.selectTOrderEvaluateList(TOrderEvaluate.builder().orderId(id)
+                .customerId(getLoginUser().getLoginCustomer().getId()).build());
+        Map<String,Object> map = new HashMap<>();
+        map.put("order",orderManage);
+        map.put("orderEvaluate",tOrderEvaluates);
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 查询客户积分记录列表
+     *  integralType 积分记录类型:1-下单  2-转入 3-转出
+     */
+    @GetMapping("/getCustomerIntegralRecord")
+    public AjaxResult getCustomerIntegralRecord(TCustomerIntegralRecord tCustomerIntegralRecord)
+    {
+        tCustomerIntegralRecord.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TCustomerIntegralRecord> list = tCustomerIntegralRecordService.selectTCustomerIntegralRecordList(tCustomerIntegralRecord);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     *  删除待支付的订单
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/delOrder/{id}")
+    public AjaxResult delOrder(@PathVariable Long id){
+        TOrderManage orderManage = orderManageService.selectTOrderManageById(id);
+        // 减少销售数量
+        TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(orderManage.getCommodityId());
+        Integer orderNum = orderManage.getAdultNum() + orderManage.getChildNum();
+        commodityManage.setStock(commodityManage.getStock() + orderNum);
+        // 增加销售数量
+        commodityManage.setSaleNum(commodityManage.getSaleNum() - orderNum);
+        commodityManageService.updateTCommodityManage(commodityManage);
+        // 重置用户商品优惠券
+        if(orderManage.getIsCoupon().equals("1")){
+            List<TCommodityCoupon> commodityCouponList =
+                    commodityCouponService.selectTCommodityCouponList(TCommodityCoupon.builder().commodityId(commodityManage.getId()).build());
+            if(commodityCouponList.size()>0){
+                List<TCustomerCoupon> tCustomerCoupons =
+                        customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().couponId(commodityCouponList.get(0).getId()).customerId(orderManage.getCustomerId()).build());
+                // 有优惠券,且已使用,则重置
+                if(tCustomerCoupons.size()>0 && tCustomerCoupons.get(0).getStatus().equals("1")){
+                    customerCouponService.updateTCustomerCoupon(TCustomerCoupon.builder().id(tCustomerCoupons.get(0).getId()).status("0").build());
+                }
+            }
+        }
+        return AjaxResult.success(orderManageService.deleteTOrderManageById(id));
+    }
+
+    /**
+     *  退款
+     * @param id
+     * @return
+     */
+    @GetMapping("/returnPay/{id}")
+    public AjaxResult returnPay(@PathVariable Long id){
+        TOrderManage orderManage = orderManageService.selectTOrderManageById(id);
+        // 减少销售数量
+        TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(orderManage.getCommodityId());
+        Integer orderNum = orderManage.getAdultNum() + orderManage.getChildNum();
+        commodityManage.setStock(commodityManage.getStock() + orderNum);
+        // 增加销售数量
+        commodityManage.setSaleNum(commodityManage.getSaleNum() - orderNum);
+        commodityManageService.updateTCommodityManage(commodityManage);
+
+        // 减去增加的积分  订单金额为增加的积分数量
+        TCustomerManage customerManage = customerManageService.selectTCustomerManageById(orderManage.getCustomerId());
+        customerManage.setIntegral(customerManage.getIntegral() - orderManage.getOrderMoney().longValue());
+        // 加上用户使用的积分
+        customerManage.setIntegral(customerManage.getIntegral() + orderManage.getIntegralDeduction().longValue());
+        customerManageService.updateTCustomerManage(customerManage);
+
+        // 记录减去用户积分
+        customerIntegralRecordService.insertTCustomerIntegralRecord(TCustomerIntegralRecord.builder().
+                supIntegral(customerManage.getIntegral().toString()).integralNum(orderManage.getOrderMoney().toString()).integralType("9")// 退款类型
+                .createBy(getLoginUser().getLoginCustomer().getUsername()).orderId(orderManage.getId()).customerId(customerManage.getId()).deptId(getLoginUser().getDeptId())
+                .build());
+
+        // 重置用户商品优惠券
+        if(orderManage.getIsCoupon().equals("1")){
+            List<TCommodityCoupon> commodityCouponList =
+                    commodityCouponService.selectTCommodityCouponList(TCommodityCoupon.builder().commodityId(commodityManage.getId()).build());
+            if(commodityCouponList.size()>0){
+                List<TCustomerCoupon> tCustomerCoupons =
+                        customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().couponId(commodityCouponList.get(0).getId()).customerId(customerManage.getId()).build());
+                // 有优惠券,且已使用,则重置
+                if(tCustomerCoupons.size()>0 && tCustomerCoupons.get(0).getStatus().equals("1")){
+                    customerCouponService.updateTCustomerCoupon(TCustomerCoupon.builder().id(tCustomerCoupons.get(0).getId()).status("0").build());
+                }
+            }
+
+        }
+
+
+        return AjaxResult.success(orderManageService.updateTOrderManage(TOrderManage.builder().id(id)
+                .status("99").returnDate(new Date()).build()));
+    }
+
+    /**
+     *  积分转让
+     * @param phone
+     * @param integral
+     * @return
+     */
+    @Log(title = "用户积分转让",operatorType = OperatorType.MOBILE,businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/customerIntegralTurnOut")
+    public AjaxResult customerIntegralTurnOut(String phone, String integral) throws Exception
+    {
+        List<TCustomerManage> customerManages = customerManageService.selectTCustomerManageList(TCustomerManage.builder().username(phone).build());
+        if(customerManages.size()<=0){
+            return AjaxResult.error("未查询到该用户信息");
+        }
+        // 转入人
+        TCustomerManage turnIn = customerManages.get(0);
+        if(turnIn.getId() == getLoginUser().getLoginCustomer().getId()){
+            return AjaxResult.error("无法为自己转入");
+        }
+
+        // 转出人记录
+        TCustomerManage turnOut = customerManageService.selectTCustomerManageById(getLoginUser().getLoginCustomer().getId());
+        {
+            // 当前用户减去积分
+            if (turnOut.getIntegral() - Long.parseLong(integral) < 0) {
+                return AjaxResult.error("用户积分不足");
+            }
+            turnOut.setIntegral(turnOut.getIntegral() - Long.parseLong(integral));
+            customerManageService.updateTCustomerManage(turnOut);
+
+            // 增加转让记录
+            tCustomerIntegralRecordService.insertTCustomerIntegralRecord(TCustomerIntegralRecord.builder().supIntegral(turnOut.getIntegral().toString()).
+                    customerId(turnOut.getId()).integralNum(integral).integralType("3").supIntegral(turnOut.getIntegral().toString())
+                    .turnOutId(turnOut.getId()).deptId(turnOut.getDeptId()).turnInId(turnIn.getId()).createBy(turnOut.getUsername()).build());
+        }
+
+        // 转入人记录
+        {
+            turnIn.setIntegral(turnIn.getIntegral()==null?0:turnIn.getIntegral() + Long.parseLong(integral));
+            customerManageService.updateTCustomerManage(turnIn);
+
+            // 增加转入记录
+            tCustomerIntegralRecordService.insertTCustomerIntegralRecord(TCustomerIntegralRecord.builder().supIntegral(turnIn.getIntegral().toString()).
+                    customerId(turnIn.getId()).integralNum(integral).integralType("2").supIntegral(turnIn.getIntegral().toString())
+                    .turnOutId(turnOut.getId()).deptId(turnIn.getDeptId()).turnInId(turnIn.getId()).createBy(turnIn.getUsername()).build());
+
+            // 增加通知提醒
+            customerNoticeService.insertTCustomerNotice(TCustomerNotice.builder().customerId(turnIn.getId()).status("0").title("积分转入提醒")
+                                                    .content("您有"+integral+"积分转入,请注意查收").createBy(turnIn.getUsername()).build());
+
+        }
+
+        return AjaxResult.success();
+    }
+
+    /**
+     * 查询客户分销记录列表
+     */
+    @GetMapping("/customerDistributionList")
+    public AjaxResult getCustomerIntegralRecord(TCustomerDistributionRecord customerDistributionRecord)
+    {
+        customerDistributionRecord.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TCustomerDistributionRecord> tCustomerDistributionRecords = customerDistributionRecordService.selectTCustomerDistributionRecordList(customerDistributionRecord);
+        return AjaxResult.success(tCustomerDistributionRecords);
+    }
+
+    /**
+     * 查询客户优惠券信息列表
+     * status 状态:0-未使用 1-已使用  9-已过期
+     */
+    @GetMapping("/customerCouponList")
+    public AjaxResult customerCouponList(TCustomerCoupon customerCoupon)
+    {
+        customerCoupon.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TCustomerCoupon> tCustomerCoupons = customerCouponService.selectTCustomerCouponList(customerCoupon);
+        return AjaxResult.success(tCustomerCoupons);
+    }
+
+    /**
+     * 查询客户足迹或收藏信息列表
+     * type 类型:1-足迹  2-收藏
+     */
+    @GetMapping("/collectionOrFootprintList")
+    public AjaxResult collectionOrFootprintList(TCustomerCollectionOrFootprint collectionOrFootprint)
+    {
+        collectionOrFootprint.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TCustomerCollectionOrFootprint> collectionOrFootprints = collectionOrFootprintService.selectTCustomerCollectionOrFootprintList(collectionOrFootprint);
+        return AjaxResult.success(collectionOrFootprints);
+    }
+
+    /**
+     * 删除客户足迹或收藏信息
+     */
+    @Log(title = "删除客户足迹或收藏信息",operatorType = OperatorType.MOBILE,businessType = BusinessType.DELETE)
+    @RepeatSubmit
+    @DeleteMapping("/delCollectionOrFootprint/{id}")
+    public AjaxResult delCollectionOrFootprintList(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(collectionOrFootprintService.deleteTCustomerCollectionOrFootprintById(id));
+    }
+
+
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5ShopCarController.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.H5Api.api;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
+import com.ruoyi.web.pcApi.domain.*;
+import com.ruoyi.web.pcApi.mapper.TCommodityManageMapper;
+import com.ruoyi.web.pcApi.service.*;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * h5端-购物车信息api
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/h5/shopCar")
+@CrossOrigin
+public class H5ShopCarController extends BaseController
+{
+    @Autowired
+    private ITCustomerShoppingCartService shoppingCartService;
+
+
+    /**
+     *  获取用户购物车信息
+     * @param customerShoppingCart
+     * @return
+     */
+    @GetMapping("/getShopCarList")
+    public AjaxResult getShopCarList(TCustomerShoppingCart customerShoppingCart){
+        customerShoppingCart.setCustomerId(getLoginUser().getLoginCustomer().getId());
+        List<TCustomerShoppingCart> tCustomerShoppingCarts = shoppingCartService.selectTCustomerShoppingCartList(customerShoppingCart);
+        return AjaxResult.success(tCustomerShoppingCarts);
+    }
+
+    /**
+     *  移除购物车
+     * @param ids  多个id  逗号分隔
+     * @return
+     */
+    @Log(title = "移除购物车",operatorType = OperatorType.MOBILE,businessType = BusinessType.DELETE)
+    @RepeatSubmit
+    @DeleteMapping("removeShopCarList/{ids}")
+    public AjaxResult removeShopCarList(@PathVariable("ids") Long[] ids){
+        return AjaxResult.success(shoppingCartService.deleteTCustomerShoppingCartByIds(ids));
+    }
+
+
+
+}

+ 126 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5SystemController.java

@@ -0,0 +1,126 @@
+package com.ruoyi.web.H5Api.api;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginCustomerManage;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
+import com.ruoyi.common.utils.CommonUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.web.pcApi.domain.BusCompany;
+import com.ruoyi.web.pcApi.domain.TCustomerManage;
+import com.ruoyi.web.pcApi.service.IBusCompanyService;
+import com.ruoyi.web.pcApi.service.ITCustomerManageService;
+import com.ruoyi.web.pcApi.service.ITOrderManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * h5端-系统管理api
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/h5/system")
+@CrossOrigin
+public class H5SystemController extends BaseController
+{
+    @Autowired
+    private ITCustomerManageService customerManageService;
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private IBusCompanyService busCompanyService;
+
+    @Log(title = "用户注册",operatorType = OperatorType.MOBILE,businessType = BusinessType.INSERT)
+    @RepeatSubmit
+    @PostMapping("/register")
+    public AjaxResult register(@RequestBody TCustomerManage customerManage){
+        // 校验用户名是否存在
+        List<TCustomerManage> customerManages = customerManageService.selectTCustomerManageList4H5(TCustomerManage.builder().username(customerManage.getUsername()).build());
+        if(customerManages.size() > 0){
+            return AjaxResult.error("该用户已注册");
+        }
+        customerManage.setCustomerNo(CommonUtils.getStringSnowflakeId());
+        customerManage.setPassword(SecurityUtils.encryptPassword(customerManage.getPassword()));
+        customerManage.setCreateBy(customerManage.getUsername());
+        return AjaxResult.success(customerManageService.insertTCustomerManage(customerManage));
+    }
+
+    /**
+     *  app登陆
+     * #param username
+     * #param password
+     */
+    @Log(title = "用户登陆",operatorType = OperatorType.MOBILE,businessType = BusinessType.GRANT)
+    @PostMapping(value = "/login")
+    public AjaxResult Login(@RequestBody LoginCustomerManage loginCustomerManage)
+    {
+        LoginCustomerManage loginCustomer = customerManageService.selectLoginUser(loginCustomerManage);
+        if(loginCustomer == null){
+            return AjaxResult.error("用户名错误");
+        }
+
+        //验证密码正确性
+        Boolean flag = SecurityUtils.matchesPassword(loginCustomerManage.getPassword(),loginCustomer.getPassword());
+        if(!flag){
+            return AjaxResult.error("密码错误");
+        }
+
+        LoginUser loginUser = new LoginUser();
+        loginUser.setLoginCustomer(loginCustomer);
+        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser,null,loginUser.getAuthorities());
+        SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+        String token = tokenService.createToken(loginUser);
+
+        return AjaxResult.success(token);
+    }
+
+    /**
+     * 获取登陆用户信息
+     * @return
+     */
+    @GetMapping("/getH5User")
+    public AjaxResult getAppUser(){
+        LoginCustomerManage staffManagement = customerManageService.selectLoginUser(getLoginUser().getLoginCustomer());
+        return AjaxResult.success(staffManagement);
+    }
+
+    /**
+     *  退出登陆
+     * @return
+     */
+    @GetMapping("/logout")
+    public AjaxResult logout(){
+        // 删除用户缓存记录
+        tokenService.delLoginUser(getLoginUser().getToken());
+        return AjaxResult.success();
+    }
+
+    /**
+     *  获取所有bus公司
+     * @return
+     */
+    @GetMapping("/getBusCompanyList")
+    public AjaxResult getBusCompanyList(BusCompany busCompany){
+        busCompany.setParentId(101L);
+        List<BusCompany> busCompanies = busCompanyService.selectBusCompanyList(busCompany);
+        return AjaxResult.success(busCompanies);
+    }
+
+}

+ 133 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/dto/ResCommodityManage.java

@@ -0,0 +1,133 @@
+package com.ruoyi.web.H5Api.dto;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.web.pcApi.domain.TCommodityCoupon;
+import com.ruoyi.web.pcApi.domain.TCommodityJourneyInformation;
+import com.ruoyi.web.pcApi.domain.TOrderEvaluate;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 商品信息管理对象 t_commodity_manage
+ * 
+ * @author lzp
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResCommodityManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 商品类型id */
+    @Excel(name = "商品类型id")
+    private Long typeId;
+
+    /** 商品名称 */
+    @Excel(name = "商品名称")
+    private String commodityName;
+
+    /** 出发地(用顿号分隔) */
+    @Excel(name = "出发地", readConverterExp = "用顿号分隔")
+    private String departurePlace;
+
+    /** 成人价格 */
+    @Excel(name = "成人价格")
+    private BigDecimal adultPrice;
+
+    /** 儿童价格 */
+    @Excel(name = "儿童价格")
+    private BigDecimal childPrice;
+
+    /** 库存 */
+    @Excel(name = "库存")
+    private Long stock;
+
+    /** 儿童价格说明 */
+    @Excel(name = "儿童价格说明")
+    private String childPriceExplain;
+
+    /** 封面图片 */
+    @Excel(name = "封面图片")
+    private String faceImg;
+
+    /** 商品图片(用逗号分隔) */
+    @Excel(name = "商品图片", readConverterExp = "用=逗号分隔")
+    private String commodityImg;
+
+    /** 是否使用优惠卷(0-否  1-是) */
+    @Excel(name = "是否使用优惠卷(0-否  1-是)")
+    private String isCoupon;
+
+    /** 有效期开始 */
+    @Excel(name = "有效期开始")
+    private String periodStart;
+
+    /** 有效期结束 */
+    @Excel(name = "有效期结束")
+    private String periodEnd;
+
+    /** 有效期单日(用逗号分隔) */
+    @Excel(name = "有效期单日", readConverterExp = "用=逗号分隔")
+    private String periodWeek;
+
+    /** 出行目标人数 */
+    @Excel(name = "出行目标人数")
+    private Integer targetPeopleNum;
+
+    /** 提前结束时间 */
+    @Excel(name = "提前结束时间")
+    private Integer advancePeriod;
+
+    /** 注意事项 */
+    @Excel(name = "注意事项")
+    private String attention;
+
+    /** 概要说明 */
+    @Excel(name = "概要说明")
+    private String specification;
+
+    /** 购买数量 */
+    @Excel(name = "购买数量")
+    private Integer saleNum;
+
+    /** 是否推荐:0-否 1-是 */
+    @Excel(name = "是否推荐:0-否 1-是")
+    private String isRecommend;
+
+    /** 是否优选:0-否 1-是 */
+    @Excel(name = "是否优选:0-否 1-是")
+    private String isPreferred;
+
+    /** 上架状态:0-正常 1-取消上架 */
+    @Excel(name = "上架状态:0-正常 1-取消上架")
+    private String status;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    /** 删除标志:0-正常 1-删除 */
+    private String delFlag;
+
+    /** 商品旅程信息信息 */
+    private List<TCommodityJourneyInformation> commodityJourneyInformationList;
+    /** 优惠券信息*/
+    private List<TCommodityCoupon> commodityCouponList;
+    /** 评论信息*/
+    private List<TOrderEvaluate> orderEvaluateList;
+
+
+    // 临时字段
+    // 商品类型名称
+    private String typeName;
+}

+ 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 AjaxResult.success();
+    }
+}

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

@@ -0,0 +1,92 @@
+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))
+            {
+                if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
+                {
+                    userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
+                }
+            }
+            else if (StringUtils.isNotEmpty(ipaddr))
+            {
+                if (StringUtils.equals(ipaddr, user.getIpaddr()))
+                {
+                    userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
+                }
+            }
+            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
+            {
+                if (StringUtils.equals(userName, user.getUsername()))
+                {
+                    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 AjaxResult.success();
+    }
+}

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

@@ -0,0 +1,134 @@
+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.constant.UserConstants;
+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 AjaxResult.success(configService.selectConfigById(configId));
+    }
+
+    /**
+     * 根据参数键名查询参数值
+     */
+    @GetMapping(value = "/configKey/{configKey}")
+    public AjaxResult getConfigKey(@PathVariable String configKey)
+    {
+        return AjaxResult.success(configService.selectConfigByKey(configKey));
+    }
+
+    /**
+     * 新增参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "参数管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysConfig config)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
+        {
+            return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
+        {
+            return AjaxResult.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 AjaxResult.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 AjaxResult.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 AjaxResult.success(depts);
+    }
+
+    /**
+     * 根据部门编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:query')")
+    @GetMapping(value = "/{deptId}")
+    public AjaxResult getInfo(@PathVariable Long deptId)
+    {
+        deptService.checkDeptDataScope(deptId);
+        return AjaxResult.success(deptService.selectDeptById(deptId));
+    }
+
+    /**
+     * 新增部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:add')")
+    @Log(title = "部门管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDept dept)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
+        {
+            return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
+        {
+            return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        else if (dept.getParentId().equals(deptId))
+        {
+            return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
+        }
+        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
+        {
+            return AjaxResult.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 AjaxResult.error("存在下级部门,不允许删除");
+        }
+        if (deptService.checkDeptExistUser(deptId))
+        {
+            return AjaxResult.error("部门存在用户,不允许删除");
+        }
+        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 AjaxResult.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 AjaxResult.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();
+    }
+}

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

@@ -0,0 +1,132 @@
+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.constant.UserConstants;
+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 AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictType dict)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+        {
+            return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+        {
+            return AjaxResult.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 AjaxResult.success();
+    }
+
+    /**
+     * 获取字典选择框列表
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
+        return AjaxResult.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 AjaxResult.success(menus);
+    }
+
+    /**
+     * 根据菜单编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:query')")
+    @GetMapping(value = "/{menuId}")
+    public AjaxResult getInfo(@PathVariable Long menuId)
+    {
+        return AjaxResult.success(menuService.selectMenuById(menuId));
+    }
+
+    /**
+     * 获取菜单下拉树列表
+     */
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+        {
+            return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+        {
+            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        else if (menu.getMenuId().equals(menu.getParentId()))
+        {
+            return AjaxResult.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 AjaxResult.error("存在子菜单,不允许删除");
+        }
+        if (menuService.checkMenuExistRole(menuId))
+        {
+            return AjaxResult.error("菜单已分配,不允许删除");
+        }
+        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 AjaxResult.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));
+    }
+}

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

@@ -0,0 +1,130 @@
+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.constant.UserConstants;
+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 AjaxResult.success(postService.selectPostById(postId));
+    }
+
+    /**
+     * 新增岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:add')")
+    @Log(title = "岗位管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysPost post)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
+        {
+            return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
+        {
+            return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
+        {
+            return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
+        {
+            return AjaxResult.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 AjaxResult.success(posts);
+    }
+}

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

@@ -0,0 +1,144 @@
+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.constant.UserConstants;
+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())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        if (StringUtils.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+        {
+            return AjaxResult.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 AjaxResult.success();
+        }
+        return AjaxResult.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 AjaxResult.error("修改密码失败,旧密码错误");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password))
+        {
+            return AjaxResult.error("新密码不能与旧密码相同");
+        }
+        if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
+        {
+            // 更新缓存用户密码
+            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            tokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.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 AjaxResult.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);
+    }
+}

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

@@ -0,0 +1,264 @@
+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.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.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 AjaxResult.success(roleService.selectRoleById(roleId));
+    }
+
+    /**
+     * 新增角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:add')")
+    @Log(title = "角色管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysRole role)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
+        {
+            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
+        {
+            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setCreateBy(getUsername());
+        role.setDeptId(getDeptId());
+        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 (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
+        {
+            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
+        {
+            return AjaxResult.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 AjaxResult.success();
+        }
+        return AjaxResult.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 AjaxResult.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;
+    }
+}

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

@@ -0,0 +1,252 @@
+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.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.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 AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName())))
+        {
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+        {
+            return AjaxResult.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 (StringUtils.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+        {
+            return AjaxResult.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 AjaxResult.success(deptService.selectDeptTreeList(dept));
+    }
+}

+ 24 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java

@@ -0,0 +1,24 @@
+package com.ruoyi.web.controller.tool;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.ruoyi.common.core.controller.BaseController;
+
+/**
+ * swagger 接口
+ * 
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/tool/swagger")
+public class SwaggerController extends BaseController
+{
+    @PreAuthorize("@ss.hasPermi('tool:swagger:view')")
+    @GetMapping()
+    public String index()
+    {
+        return redirect("/swagger-ui.html");
+    }
+}

+ 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();
+    }
+}

+ 172 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/BusCompanyController.java

@@ -0,0 +1,172 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserService;
+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.web.pcApi.domain.BusCompany;
+import com.ruoyi.web.pcApi.service.IBusCompanyService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * bus公司Controller
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/busCompany/busCompany")
+public class BusCompanyController extends BaseController
+{
+    @Autowired
+    private IBusCompanyService busCompanyService;
+    @Autowired
+    private ISysUserService userService;
+    @Autowired
+    private SysUserMapper userMapper;
+    @Autowired
+    private ISysDeptService deptService;
+
+    /**
+     * 查询bus公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BusCompany busCompany)
+    {
+        startPage();
+        List<BusCompany> list = busCompanyService.selectBusCompanyList(busCompany);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出bus公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:export')")
+    @Log(title = "bus公司", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BusCompany busCompany)
+    {
+        List<BusCompany> list = busCompanyService.selectBusCompanyList(busCompany);
+        ExcelUtil<BusCompany> util = new ExcelUtil<BusCompany>(BusCompany.class);
+        util.exportExcel(response, list, "bus公司数据");
+    }
+
+    /**
+     * 获取bus公司详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:query')")
+    @GetMapping(value = "/{deptId}")
+    public AjaxResult getInfo(@PathVariable("deptId") Long deptId)
+    {
+        return AjaxResult.success(busCompanyService.selectBusCompanyByDeptId(deptId));
+    }
+
+    /**
+     * 新增bus公司
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:add')")
+    @Log(title = "bus公司", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BusCompany busCompany)
+    {
+        // 默认总公司下
+        busCompany.setParentId(101L);
+
+        // 新增bus公司管理员用户
+        if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(busCompany.getUsername())))
+        {
+            return AjaxResult.error("新增用户'" + busCompany.getUsername() + "'失败,登录账号已存在");
+        }
+        SysUser sysUser = new SysUser();
+        sysUser.setUserName(busCompany.getUsername());
+        sysUser.setNickName(busCompany.getDeptName());
+        sysUser.setPassword(SecurityUtils.encryptPassword(busCompany.getPassword()));
+        sysUser.setRoleIds(new Long[]{2L});
+        userService.insertUser(sysUser);
+
+        SysDept dept = new SysDept();
+        dept.setParentId(101L);
+        dept.setDeptName(busCompany.getDeptName());
+        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
+        {
+            return AjaxResult.error("新增bus公司'" + dept.getDeptName() + "'失败,公司名称已存在");
+        }
+
+        busCompany.setManager(sysUser.getUserId());
+        busCompany.setCreateBy(getUserId().toString());
+        busCompany.setAncestors("0,100,101");
+        busCompanyService.insertBusCompany(busCompany);
+
+        // 更新用户bus
+        sysUser.setDeptId(busCompany.getDeptId());
+        userMapper.updateUser(sysUser);
+
+        return AjaxResult.success();
+    }
+
+    /**
+     * 修改bus公司
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:edit')")
+    @Log(title = "bus公司", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BusCompany busCompany)
+    {
+        SysDept dept = new SysDept();
+        dept.setParentId(101L);
+        dept.setDeptName(busCompany.getDeptName());
+        dept.setDeptId(busCompany.getDeptId());
+        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
+        {
+            return AjaxResult.error("修改bus公司'" + dept.getDeptName() + "'失败,公司名称已存在");
+        }
+        busCompany.setUpdateBy(getUserId().toString());
+        return toAjax(busCompanyService.updateBusCompany(busCompany));
+    }
+
+    /**
+     * 重置bus公司密码
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:resetPassword')")
+    @Log(title = "bus公司", businessType = BusinessType.UPDATE)
+    @PutMapping("/resetPassword")
+    public AjaxResult resetPassword(@RequestBody BusCompany busCompany)
+    {
+        busCompany.setPassword(SecurityUtils.encryptPassword("123456"));
+        busCompany.setUpdateBy(getUserId().toString());
+        return toAjax(busCompanyService.updateBusCompany(busCompany));
+    }
+
+    /**
+     * 删除bus公司
+     */
+    @PreAuthorize("@ss.hasPermi('busCompany:busCompany:remove')")
+    @Log(title = "bus公司", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{deptIds}")
+    public AjaxResult remove(@PathVariable Long[] deptIds)
+    {
+        return toAjax(busCompanyService.deleteBusCompanyByDeptIds(deptIds));
+    }
+}

+ 103 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/CompanyStatisController.java

@@ -0,0 +1,103 @@
+package com.ruoyi.web.pcApi.controller;
+
+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.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.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.pcApi.domain.BusCompany;
+import com.ruoyi.web.pcApi.service.IBusCompanyService;
+import com.ruoyi.web.pcApi.service.ITCommodityManageService;
+import com.ruoyi.web.pcApi.service.ITOrderManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 统计管理
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@RestController
+@RequestMapping("/companyStatis/companyStatis")
+public class CompanyStatisController extends BaseController
+{
+    @Autowired
+    private ITOrderManageService orderManageService;
+
+    /**
+     * 不同商品销量排行 (只显示销量前十)
+     * @return money  销售额
+     * @return commodityName 商品名称
+     */
+    @PreAuthorize("@ss.hasPermi('statis:statis:commoditySaleStatis')")
+    @GetMapping("/commoditySaleStatis")
+    public AjaxResult commoditySaleStatis(String beginDate,String endDate)
+    {
+        List<Map<String,Object>> list = orderManageService.selectCommoditySaleStatisTop10(beginDate,endDate,getDeptId());
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 不同月份商品销量排行(当前年)
+     * @return money  销售额
+     * @return month 月份
+     */
+    @PreAuthorize("@ss.hasPermi('statis:statis:statisByMonth')")
+    @GetMapping("/statisByMonth")
+    public AjaxResult statisByMonth()
+    {
+        List<Map<String,Object>> list = orderManageService.selectCommoditySaleStatisByMonth(getDeptId());
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 不同出发地销量排行
+     * @return money  销售额
+     * @return departurePlace 出发地
+     */
+    @PreAuthorize("@ss.hasPermi('statis:statis:statis4Departure')")
+    @GetMapping("/statis4Departure")
+    public AjaxResult statis4Departure(String beginDate,String endDate)
+    {
+        List<Map<String,Object>> list = orderManageService.statis4Departure(beginDate,endDate,getDeptId());
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 不同类型商品销量展示
+     * @return money  销售额
+     * @return typeName 类型名称
+     */
+    @PreAuthorize("@ss.hasPermi('statis:statis:statis4Type')")
+    @GetMapping("/statis4Type")
+    public AjaxResult statis4Type(String beginDate,String endDate)
+    {
+        List<Map<String,Object>> list = orderManageService.statis4Type(beginDate,endDate,getDeptId());
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * bus公司销售额统计
+     * @return money  销售额
+     * @return busName bus公司
+     */
+    @PreAuthorize("@ss.hasPermi('statis:statis:statis4Bus')")
+    @GetMapping("/statis4Bus")
+    public AjaxResult statis4Bus(String beginDate,String endDate)
+    {
+        List<Map<String,Object>> list = orderManageService.statis4Bus(beginDate,endDate,getDeptId());
+        return AjaxResult.success(list);
+    }
+
+}

+ 141 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityCouponController.java

@@ -0,0 +1,141 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.List;
+import java.util.Map;
+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.web.pcApi.domain.TCommodityCoupon;
+import com.ruoyi.web.pcApi.service.ITCommodityCouponService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 商品优惠卷信息Controller
+ * 
+ * @author lzp
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/commodityCoupon/commodityCoupon")
+public class TCommodityCouponController extends BaseController
+{
+    @Autowired
+    private ITCommodityCouponService tCommodityCouponService;
+
+    /**
+     * 查询商品优惠卷信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCommodityCoupon tCommodityCoupon)
+    {
+        startPage();
+        List<TCommodityCoupon> list = tCommodityCouponService.selectTCommodityCouponList(tCommodityCoupon);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商品优惠卷信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:export')")
+    @Log(title = "商品优惠卷信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCommodityCoupon tCommodityCoupon)
+    {
+        List<TCommodityCoupon> list = tCommodityCouponService.selectTCommodityCouponList(tCommodityCoupon);
+        ExcelUtil<TCommodityCoupon> util = new ExcelUtil<TCommodityCoupon>(TCommodityCoupon.class);
+        util.exportExcel(response, list, "商品优惠卷信息数据");
+    }
+
+    /**
+     * 获取商品优惠卷信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCommodityCouponService.selectTCommodityCouponById(id));
+    }
+
+    /**
+     * 新增商品优惠卷信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:add')")
+    @Log(title = "商品优惠卷信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCommodityCoupon tCommodityCoupon)
+    {
+        return toAjax(tCommodityCouponService.insertTCommodityCoupon(tCommodityCoupon));
+    }
+
+    /**
+     * 修改商品优惠卷信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:edit')")
+    @Log(title = "商品优惠卷信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCommodityCoupon tCommodityCoupon)
+    {
+        return toAjax(tCommodityCouponService.updateTCommodityCoupon(tCommodityCoupon));
+    }
+
+    /**
+     * 删除商品优惠卷信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:remove')")
+    @Log(title = "商品优惠卷信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCommodityCouponService.deleteTCommodityCouponByIds(ids));
+    }
+
+
+    /**************************************************************优惠券汇总***************************************************************************/
+
+    /**
+     * 查询优惠券汇总列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:statisList')")
+    @GetMapping("/statisList")
+    public TableDataInfo statisList(TCommodityCoupon commodityCoupon)
+    {
+        startPage();
+        if(getDeptId() != 101L){
+            commodityCoupon.setDeptId(getDeptId());
+        }
+        List<Map<String,Object>> statisList = tCommodityCouponService.selectTCommodityCouponStatisList(commodityCoupon);
+        for (Map<String, Object> map : statisList) {
+            commodityCoupon.setId(Long.parseLong(map.get("id").toString()));
+            List<Map<String,Object>> detailList = tCommodityCouponService.selectTCommodityCouponStatisDetailList(commodityCoupon);
+            map.put("buyNum",detailList.size());
+        }
+        return getDataTable(statisList);
+    }
+
+    /**
+     * 查询优惠券汇总详情列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityCoupon:commodityCoupon:statisDetailList')")
+    @GetMapping("/statisDetailList")
+    public TableDataInfo statisDetailList(TCommodityCoupon commodityCoupon)
+    {
+        startPage();
+        List<Map<String,Object>> statisList = tCommodityCouponService.selectTCommodityCouponStatisDetailList(commodityCoupon);
+        return getDataTable(statisList);
+    }
+
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityJourneyInformationController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.web.pcApi.domain.TCommodityJourneyInformation;
+import com.ruoyi.web.pcApi.service.ITCommodityJourneyInformationService;
+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.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 商品旅程信息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/commodityJourneyInformation/commodityJourneyInformation")
+public class TCommodityJourneyInformationController extends BaseController
+{
+    @Autowired
+    private ITCommodityJourneyInformationService tCommodityJourneyInformationService;
+
+    /**
+     * 查询商品旅程信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityJourneyInformation:commodityJourneyInformation:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCommodityJourneyInformation tCommodityJourneyInformation)
+    {
+        startPage();
+        List<TCommodityJourneyInformation> list = tCommodityJourneyInformationService.selectTCommodityJourneyInformationList(tCommodityJourneyInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商品旅程信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityJourneyInformation:commodityJourneyInformation:export')")
+    @Log(title = "商品旅程信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCommodityJourneyInformation tCommodityJourneyInformation)
+    {
+        List<TCommodityJourneyInformation> list = tCommodityJourneyInformationService.selectTCommodityJourneyInformationList(tCommodityJourneyInformation);
+        ExcelUtil<TCommodityJourneyInformation> util = new ExcelUtil<TCommodityJourneyInformation>(TCommodityJourneyInformation.class);
+        util.exportExcel(response, list, "商品旅程信息数据");
+    }
+
+    /**
+     * 获取商品旅程信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityJourneyInformation:commodityJourneyInformation:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCommodityJourneyInformationService.selectTCommodityJourneyInformationById(id));
+    }
+
+    /**
+     * 新增商品旅程信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityJourneyInformation:commodityJourneyInformation:add')")
+    @Log(title = "商品旅程信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCommodityJourneyInformation tCommodityJourneyInformation)
+    {
+        return toAjax(tCommodityJourneyInformationService.insertTCommodityJourneyInformation(tCommodityJourneyInformation));
+    }
+
+    /**
+     * 修改商品旅程信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityJourneyInformation:commodityJourneyInformation:edit')")
+    @Log(title = "商品旅程信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCommodityJourneyInformation tCommodityJourneyInformation)
+    {
+        return toAjax(tCommodityJourneyInformationService.updateTCommodityJourneyInformation(tCommodityJourneyInformation));
+    }
+
+    /**
+     * 删除商品旅程信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityJourneyInformation:commodityJourneyInformation:remove')")
+    @Log(title = "商品旅程信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCommodityJourneyInformationService.deleteTCommodityJourneyInformationByIds(ids));
+    }
+}

+ 126 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityManageController.java

@@ -0,0 +1,126 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.List;
+import java.util.Locale;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.web.pcApi.mapper.TCommodityManageMapper;
+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.web.pcApi.domain.TCommodityManage;
+import com.ruoyi.web.pcApi.service.ITCommodityManageService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 商品信息管理Controller
+ * 
+ * @author lzp
+ * @date 2022-08-24
+ */
+@RestController
+@RequestMapping("/commodity/commodity")
+public class TCommodityManageController extends BaseController
+{
+    @Autowired
+    private ITCommodityManageService tCommodityManageService;
+    @Autowired
+    private TCommodityManageMapper commodityManageMapper;
+
+    /**
+     * 查询商品信息管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCommodityManage tCommodityManage)
+    {
+        startPage();
+        tCommodityManage.setDeptId(getDeptId());
+        List<TCommodityManage> list = tCommodityManageService.selectTCommodityManageList(tCommodityManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商品信息管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:export')")
+    @Log(title = "商品信息管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCommodityManage tCommodityManage)
+    {
+        List<TCommodityManage> list = tCommodityManageService.selectTCommodityManageList(tCommodityManage);
+        ExcelUtil<TCommodityManage> util = new ExcelUtil<TCommodityManage>(TCommodityManage.class);
+        util.exportExcel(response, list, "商品信息管理数据");
+    }
+
+    /**
+     * 获取商品信息管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCommodityManageService.selectTCommodityManageById(id));
+    }
+
+    /**
+     * 新增商品信息管理
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:add')")
+    @Log(title = "商品信息管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCommodityManage tCommodityManage)
+    {
+        tCommodityManage.setDeptId(getDeptId());
+        tCommodityManage.setCreateBy(getUserId().toString());
+        return toAjax(tCommodityManageService.insertTCommodityManage(tCommodityManage));
+    }
+
+    /**
+     * 修改商品信息管理
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:edit')")
+    @Log(title = "商品信息管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCommodityManage tCommodityManage)
+    {
+        tCommodityManage.setUpdateBy(getUserId().toString());
+        return toAjax(tCommodityManageService.updateTCommodityManage(tCommodityManage));
+    }
+
+    /**
+     * 修改商品信息状态
+     *  isRecommend 是否推荐:0-否 1-是
+     *  isPreferred 是否优选:0-否 1-是
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:edit')")
+    @PutMapping("/setStatus")
+    public AjaxResult setStatus(@RequestBody TCommodityManage tCommodityManage)
+    {
+        tCommodityManage.setUpdateBy(getUserId().toString());
+        return toAjax(commodityManageMapper.updateTCommodityManage(tCommodityManage));
+    }
+
+    /**
+     * 删除商品信息管理
+     */
+    @PreAuthorize("@ss.hasPermi('commodity:commodity:remove')")
+    @Log(title = "商品信息管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCommodityManageService.deleteTCommodityManageByIds(ids));
+    }
+}

+ 119 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCommodityTypeController.java

@@ -0,0 +1,119 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCommodityType;
+import com.ruoyi.web.pcApi.service.ITCommodityTypeService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 商品分类信息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@RestController
+@RequestMapping("/commodityType/commodityType")
+public class TCommodityTypeController extends BaseController
+{
+    @Autowired
+    private ITCommodityTypeService tCommodityTypeService;
+
+    /**
+     * 查询商品分类信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityType:commodityType:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCommodityType tCommodityType)
+    {
+        startPage();
+        tCommodityType.setDeptId(getDeptId());
+        List<TCommodityType> list = tCommodityTypeService.selectTCommodityTypeList(tCommodityType);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商品分类信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('commodityType:commodityType:export')")
+    @Log(title = "商品分类信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCommodityType tCommodityType)
+    {
+        List<TCommodityType> list = tCommodityTypeService.selectTCommodityTypeList(tCommodityType);
+        ExcelUtil<TCommodityType> util = new ExcelUtil<TCommodityType>(TCommodityType.class);
+        util.exportExcel(response, list, "商品分类信息数据");
+    }
+
+    /**
+     * 获取商品分类信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityType:commodityType:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCommodityTypeService.selectTCommodityTypeById(id));
+    }
+
+    /**
+     * 新增商品分类信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityType:commodityType:add')")
+    @Log(title = "商品分类信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCommodityType tCommodityType)
+    {
+        tCommodityType.setCreateBy(getUserId().toString());
+        tCommodityType.setDeptId(getDeptId());
+        return toAjax(tCommodityTypeService.insertTCommodityType(tCommodityType));
+    }
+
+    /**
+     * 修改商品分类信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityType:commodityType:edit')")
+    @Log(title = "商品分类信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCommodityType tCommodityType)
+    {
+        tCommodityType.setUpdateBy(getUserId().toString());
+        return toAjax(tCommodityTypeService.updateTCommodityType(tCommodityType));
+    }
+
+    /**
+     * 删除商品分类信息
+     */
+    @PreAuthorize("@ss.hasPermi('commodityType:commodityType:remove')")
+    @Log(title = "商品分类信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+
+        for (Long id : ids) {
+            // 判断当前数据是否为本bus公司数据
+            TCommodityType tCommodityType = tCommodityTypeService.selectTCommodityTypeById(id);
+            if(tCommodityType.getDeptId().equals(getDeptId())){
+                tCommodityType.setDelFlag("1");
+                tCommodityTypeService.updateTCommodityType(tCommodityType);
+            }else{
+                return AjaxResult.error("総店舗商品タイプは削除できません");
+            }
+        }
+        return AjaxResult.success();
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerCollectionOrFootprintController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerCollectionOrFootprint;
+import com.ruoyi.web.pcApi.service.ITCustomerCollectionOrFootprintService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户收藏或足迹Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/footprint/footprint")
+public class TCustomerCollectionOrFootprintController extends BaseController
+{
+    @Autowired
+    private ITCustomerCollectionOrFootprintService tCustomerCollectionOrFootprintService;
+
+    /**
+     * 查询客户收藏或足迹列表
+     */
+    @PreAuthorize("@ss.hasPermi('footprint:footprint:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint)
+    {
+        startPage();
+        List<TCustomerCollectionOrFootprint> list = tCustomerCollectionOrFootprintService.selectTCustomerCollectionOrFootprintList(tCustomerCollectionOrFootprint);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户收藏或足迹列表
+     */
+    @PreAuthorize("@ss.hasPermi('footprint:footprint:export')")
+    @Log(title = "客户收藏或足迹", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint)
+    {
+        List<TCustomerCollectionOrFootprint> list = tCustomerCollectionOrFootprintService.selectTCustomerCollectionOrFootprintList(tCustomerCollectionOrFootprint);
+        ExcelUtil<TCustomerCollectionOrFootprint> util = new ExcelUtil<TCustomerCollectionOrFootprint>(TCustomerCollectionOrFootprint.class);
+        util.exportExcel(response, list, "客户收藏或足迹数据");
+    }
+
+    /**
+     * 获取客户收藏或足迹详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('footprint:footprint:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerCollectionOrFootprintService.selectTCustomerCollectionOrFootprintById(id));
+    }
+
+    /**
+     * 新增客户收藏或足迹
+     */
+    @PreAuthorize("@ss.hasPermi('footprint:footprint:add')")
+    @Log(title = "客户收藏或足迹", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint)
+    {
+        return toAjax(tCustomerCollectionOrFootprintService.insertTCustomerCollectionOrFootprint(tCustomerCollectionOrFootprint));
+    }
+
+    /**
+     * 修改客户收藏或足迹
+     */
+    @PreAuthorize("@ss.hasPermi('footprint:footprint:edit')")
+    @Log(title = "客户收藏或足迹", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint)
+    {
+        return toAjax(tCustomerCollectionOrFootprintService.updateTCustomerCollectionOrFootprint(tCustomerCollectionOrFootprint));
+    }
+
+    /**
+     * 删除客户收藏或足迹
+     */
+    @PreAuthorize("@ss.hasPermi('footprint:footprint:remove')")
+    @Log(title = "客户收藏或足迹", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerCollectionOrFootprintService.deleteTCustomerCollectionOrFootprintByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerCouponController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerCoupon;
+import com.ruoyi.web.pcApi.service.ITCustomerCouponService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户优惠券信息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/customerCoupon/customerCoupon")
+public class TCustomerCouponController extends BaseController
+{
+    @Autowired
+    private ITCustomerCouponService tCustomerCouponService;
+
+    /**
+     * 查询客户优惠券信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerCoupon:customerCoupon:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerCoupon tCustomerCoupon)
+    {
+        startPage();
+        List<TCustomerCoupon> list = tCustomerCouponService.selectTCustomerCouponList(tCustomerCoupon);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户优惠券信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerCoupon:customerCoupon:export')")
+    @Log(title = "客户优惠券信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerCoupon tCustomerCoupon)
+    {
+        List<TCustomerCoupon> list = tCustomerCouponService.selectTCustomerCouponList(tCustomerCoupon);
+        ExcelUtil<TCustomerCoupon> util = new ExcelUtil<TCustomerCoupon>(TCustomerCoupon.class);
+        util.exportExcel(response, list, "客户优惠券信息数据");
+    }
+
+    /**
+     * 获取客户优惠券信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerCoupon:customerCoupon:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerCouponService.selectTCustomerCouponById(id));
+    }
+
+    /**
+     * 新增客户优惠券信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerCoupon:customerCoupon:add')")
+    @Log(title = "客户优惠券信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerCoupon tCustomerCoupon)
+    {
+        return toAjax(tCustomerCouponService.insertTCustomerCoupon(tCustomerCoupon));
+    }
+
+    /**
+     * 修改客户优惠券信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerCoupon:customerCoupon:edit')")
+    @Log(title = "客户优惠券信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerCoupon tCustomerCoupon)
+    {
+        return toAjax(tCustomerCouponService.updateTCustomerCoupon(tCustomerCoupon));
+    }
+
+    /**
+     * 删除客户优惠券信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerCoupon:customerCoupon:remove')")
+    @Log(title = "客户优惠券信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerCouponService.deleteTCustomerCouponByIds(ids));
+    }
+}

+ 113 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerDistributionRecordController.java

@@ -0,0 +1,113 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.web.pcApi.domain.TCustomerManage;
+import com.ruoyi.web.pcApi.service.ITCustomerManageService;
+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.web.pcApi.domain.TCustomerDistributionRecord;
+import com.ruoyi.web.pcApi.service.ITCustomerDistributionRecordService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户分销信息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@RestController
+@RequestMapping("/customerDistributionRecord/customerDistributionRecord")
+public class TCustomerDistributionRecordController extends BaseController
+{
+    @Autowired
+    private ITCustomerDistributionRecordService tCustomerDistributionRecordService;
+    @Autowired
+    private ITCustomerManageService customerManageService;
+
+
+    /**
+     * 查询客户分销信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionRecord:customerDistributionRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerManage customerManage)
+    {
+        startPage();
+        List<TCustomerManage> list = customerManageService.selectTCustomerDistributionRecordList(customerManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户分销信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionRecord:customerDistributionRecord:export')")
+    @Log(title = "客户分销信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerDistributionRecord tCustomerDistributionRecord)
+    {
+        List<TCustomerDistributionRecord> list = tCustomerDistributionRecordService.selectTCustomerDistributionRecordList(tCustomerDistributionRecord);
+        ExcelUtil<TCustomerDistributionRecord> util = new ExcelUtil<TCustomerDistributionRecord>(TCustomerDistributionRecord.class);
+        util.exportExcel(response, list, "客户分销信息数据");
+    }
+
+    /**
+     * 获取客户分销信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionRecord:customerDistributionRecord:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        TCustomerManage tCustomerManage = customerManageService.selectTCustomerManageById(id);
+        // 分销信息列表
+        tCustomerManage.setDistributionRecordList(tCustomerDistributionRecordService.selectTCustomerDistributionRecordList(TCustomerDistributionRecord.builder().customerId(id).build()));
+        return AjaxResult.success(tCustomerManage);
+    }
+
+    /**
+     * 新增客户分销信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionRecord:customerDistributionRecord:add')")
+    @Log(title = "客户分销信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerDistributionRecord tCustomerDistributionRecord)
+    {
+        return toAjax(tCustomerDistributionRecordService.insertTCustomerDistributionRecord(tCustomerDistributionRecord));
+    }
+
+    /**
+     * 修改客户分销信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionRecord:customerDistributionRecord:edit')")
+    @Log(title = "客户分销信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerDistributionRecord tCustomerDistributionRecord)
+    {
+        return toAjax(tCustomerDistributionRecordService.updateTCustomerDistributionRecord(tCustomerDistributionRecord));
+    }
+
+    /**
+     * 删除客户分销信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionRecord:customerDistributionRecord:remove')")
+    @Log(title = "客户分销信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerDistributionRecordService.deleteTCustomerDistributionRecordByIds(ids));
+    }
+}

+ 112 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerDistributionSetController.java

@@ -0,0 +1,112 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerDistributionSet;
+import com.ruoyi.web.pcApi.service.ITCustomerDistributionSetService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户分销奖励设定Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/customerDistributionSet/customerDistributionSet")
+public class TCustomerDistributionSetController extends BaseController
+{
+    @Autowired
+    private ITCustomerDistributionSetService tCustomerDistributionSetService;
+
+    /**
+     * 查询客户分销奖励设定列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionSet:customerDistributionSet:list')")
+    @GetMapping("/list")
+    public AjaxResult list(TCustomerDistributionSet tCustomerDistributionSet)
+    {
+        tCustomerDistributionSet.setDeptId(getDeptId());
+        List<TCustomerDistributionSet> list = tCustomerDistributionSetService.selectTCustomerDistributionSetList(tCustomerDistributionSet);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 导出客户分销奖励设定列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionSet:customerDistributionSet:export')")
+    @Log(title = "客户分销奖励设定", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerDistributionSet tCustomerDistributionSet)
+    {
+        List<TCustomerDistributionSet> list = tCustomerDistributionSetService.selectTCustomerDistributionSetList(tCustomerDistributionSet);
+        ExcelUtil<TCustomerDistributionSet> util = new ExcelUtil<TCustomerDistributionSet>(TCustomerDistributionSet.class);
+        util.exportExcel(response, list, "客户分销奖励设定数据");
+    }
+
+    /**
+     * 获取客户分销奖励设定详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionSet:customerDistributionSet:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerDistributionSetService.selectTCustomerDistributionSetById(id));
+    }
+
+    /**
+     * 新增或编辑客户分销奖励设定
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionSet:customerDistributionSet:add')")
+    @Log(title = "客户分销奖励设定", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerDistributionSet tCustomerDistributionSet)
+    {
+        if(tCustomerDistributionSet.getId() != null){
+            tCustomerDistributionSet.setUpdateBy(getLoginUser().getUserId().toString());
+            tCustomerDistributionSetService.updateTCustomerDistributionSet(tCustomerDistributionSet);
+        }else{
+            tCustomerDistributionSet.setDeptId(getDeptId());
+            tCustomerDistributionSet.setCreateBy(getLoginUser().getUserId().toString());
+            tCustomerDistributionSetService.insertTCustomerDistributionSet(tCustomerDistributionSet);
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 修改客户分销奖励设定
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionSet:customerDistributionSet:edit')")
+    @Log(title = "客户分销奖励设定", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerDistributionSet tCustomerDistributionSet)
+    {
+        return toAjax(tCustomerDistributionSetService.updateTCustomerDistributionSet(tCustomerDistributionSet));
+    }
+
+    /**
+     * 删除客户分销奖励设定
+     */
+    @PreAuthorize("@ss.hasPermi('customerDistributionSet:customerDistributionSet:remove')")
+    @Log(title = "客户分销奖励设定", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerDistributionSetService.deleteTCustomerDistributionSetByIds(ids));
+    }
+}

+ 106 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerIntegralRecordController.java

@@ -0,0 +1,106 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerIntegralRecord;
+import com.ruoyi.web.pcApi.service.ITCustomerIntegralRecordService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户积分记录Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/customerIntegralRecord/customerIntegralRecord")
+public class TCustomerIntegralRecordController extends BaseController
+{
+    @Autowired
+    private ITCustomerIntegralRecordService tCustomerIntegralRecordService;
+
+    /**
+     * 查询客户积分记录列表
+     *  customerId  用户id
+     *  integralType 积分记录类型:1-下单  2-转入 3-转出
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralRecord:customerIntegralRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerIntegralRecord tCustomerIntegralRecord)
+    {
+        startPage();
+        List<TCustomerIntegralRecord> list = tCustomerIntegralRecordService.selectTCustomerIntegralRecordList4Pc(tCustomerIntegralRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户积分记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralRecord:customerIntegralRecord:export')")
+    @Log(title = "客户积分记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerIntegralRecord tCustomerIntegralRecord)
+    {
+        List<TCustomerIntegralRecord> list = tCustomerIntegralRecordService.selectTCustomerIntegralRecordList(tCustomerIntegralRecord);
+        ExcelUtil<TCustomerIntegralRecord> util = new ExcelUtil<TCustomerIntegralRecord>(TCustomerIntegralRecord.class);
+        util.exportExcel(response, list, "客户积分记录数据");
+    }
+
+    /**
+     * 获取客户积分记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralRecord:customerIntegralRecord:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerIntegralRecordService.selectTCustomerIntegralRecordById(id));
+    }
+
+    /**
+     * 新增客户积分记录
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralRecord:customerIntegralRecord:add')")
+    @Log(title = "客户积分记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerIntegralRecord tCustomerIntegralRecord)
+    {
+        return toAjax(tCustomerIntegralRecordService.insertTCustomerIntegralRecord(tCustomerIntegralRecord));
+    }
+
+    /**
+     * 修改客户积分记录
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralRecord:customerIntegralRecord:edit')")
+    @Log(title = "客户积分记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerIntegralRecord tCustomerIntegralRecord)
+    {
+        return toAjax(tCustomerIntegralRecordService.updateTCustomerIntegralRecord(tCustomerIntegralRecord));
+    }
+
+    /**
+     * 删除客户积分记录
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralRecord:customerIntegralRecord:remove')")
+    @Log(title = "客户积分记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerIntegralRecordService.deleteTCustomerIntegralRecordByIds(ids));
+    }
+}

+ 111 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerIntegralSetController.java

@@ -0,0 +1,111 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerIntegralSet;
+import com.ruoyi.web.pcApi.service.ITCustomerIntegralSetService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户积分奖励设定Controller
+ * 
+ * @author lzp
+ * @date 2022-11-08
+ */
+@RestController
+@RequestMapping("/customerIntegralSet")
+public class TCustomerIntegralSetController extends BaseController
+{
+    @Autowired
+    private ITCustomerIntegralSetService tCustomerIntegralSetService;
+
+    /**
+     * 查询客户积分奖励设定列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerIntegralSet:customerIntegralSet:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerIntegralSet tCustomerIntegralSet)
+    {
+        startPage();
+        List<TCustomerIntegralSet> list = tCustomerIntegralSetService.selectTCustomerIntegralSetList(tCustomerIntegralSet);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户积分奖励设定列表
+     */
+    @Log(title = "客户积分奖励设定", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerIntegralSet tCustomerIntegralSet)
+    {
+        List<TCustomerIntegralSet> list = tCustomerIntegralSetService.selectTCustomerIntegralSetList(tCustomerIntegralSet);
+        ExcelUtil<TCustomerIntegralSet> util = new ExcelUtil<TCustomerIntegralSet>(TCustomerIntegralSet.class);
+        util.exportExcel(response, list, "客户积分奖励设定数据");
+    }
+
+    /**
+     * 获取客户积分奖励设定详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerIntegralSetService.selectTCustomerIntegralSetById(id));
+    }
+
+    /**
+     * 新增客户积分奖励设定
+     */
+    @Log(title = "客户积分奖励设定", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerIntegralSet tCustomerIntegralSet)
+    {
+        tCustomerIntegralSet.setDeptId(getDeptId());
+        tCustomerIntegralSet.setCreateBy(getLoginUser().getUserId().toString());
+        return toAjax(tCustomerIntegralSetService.insertTCustomerIntegralSet(tCustomerIntegralSet));
+    }
+
+    /**
+     * 修改客户积分奖励设定
+     */
+    @Log(title = "客户积分奖励设定", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerIntegralSet tCustomerIntegralSet)
+    {
+
+        if(tCustomerIntegralSet.getId() != null){
+            tCustomerIntegralSet.setUpdateBy(getLoginUser().getUserId().toString());
+            tCustomerIntegralSetService.updateTCustomerIntegralSet(tCustomerIntegralSet);
+        }else{
+            tCustomerIntegralSet.setDeptId(getDeptId());
+            tCustomerIntegralSet.setCreateBy(getLoginUser().getUserId().toString());
+            tCustomerIntegralSetService.insertTCustomerIntegralSet(tCustomerIntegralSet);
+        }
+
+        return toAjax(tCustomerIntegralSetService.updateTCustomerIntegralSet(tCustomerIntegralSet));
+    }
+
+    /**
+     * 删除客户积分奖励设定
+     */
+    @Log(title = "客户积分奖励设定", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerIntegralSetService.deleteTCustomerIntegralSetByIds(ids));
+    }
+}

+ 149 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerManageController.java

@@ -0,0 +1,149 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.web.pcApi.domain.TOrderManage;
+import com.ruoyi.web.pcApi.service.ITOrderManageService;
+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.web.pcApi.domain.TCustomerManage;
+import com.ruoyi.web.pcApi.service.ITCustomerManageService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户信息管理Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@RestController
+@RequestMapping("/customerManage/customerManage")
+public class TCustomerManageController extends BaseController
+{
+    @Autowired
+    private ITCustomerManageService tCustomerManageService;
+    @Autowired
+    private ITOrderManageService tOrderManageService;
+
+    /**
+     * 查询客户信息管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerManage tCustomerManage)
+    {
+        startPage();
+        List<TCustomerManage> list = tCustomerManageService.selectTCustomerManageList(tCustomerManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户信息管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:export')")
+    @Log(title = "客户信息管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerManage tCustomerManage)
+    {
+        List<TCustomerManage> list = tCustomerManageService.selectTCustomerManageList(tCustomerManage);
+        ExcelUtil<TCustomerManage> util = new ExcelUtil<TCustomerManage>(TCustomerManage.class);
+        util.exportExcel(response, list, "客户信息管理数据");
+    }
+
+    /**
+     * 获取客户信息管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerManageService.selectTCustomerManageById(id));
+    }
+
+    /**
+     * 新增客户信息管理
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:add')")
+    @Log(title = "客户信息管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerManage tCustomerManage)
+    {
+        return toAjax(tCustomerManageService.insertTCustomerManage(tCustomerManage));
+    }
+
+    /**
+     * 修改客户信息管理
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:edit')")
+    @Log(title = "客户信息管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerManage tCustomerManage)
+    {
+        return toAjax(tCustomerManageService.updateTCustomerManage(tCustomerManage));
+    }
+
+    /**
+     * 客户重置密码
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:resetPassword')")
+    @Log(title = "客户重置密码", businessType = BusinessType.UPDATE)
+    @PutMapping("/resetPassword")
+    public AjaxResult resetPassword(@RequestBody TCustomerManage tCustomerManage)
+    {
+        tCustomerManage.setPassword(SecurityUtils.encryptPassword("123456"));
+        return toAjax(tCustomerManageService.updateTCustomerManage(tCustomerManage));
+    }
+
+    /**
+     * 删除客户信息管理
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:remove')")
+    @Log(title = "客户信息管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerManageService.deleteTCustomerManageByIds(ids));
+    }
+
+
+    /**
+     * 获取用户订单信息
+     *  customerId 用户id
+     */
+    @PreAuthorize("@ss.hasPermi('customerManage:customerManage:orderList')")
+    @GetMapping ("/orderList")
+    public AjaxResult orderList(TOrderManage orderManage)
+    {
+        Map<String,Object> map = new HashMap<>();
+        // 用户订单信息
+        orderManage.setStatus("2");
+        List<TOrderManage> tOrderManages = tOrderManageService.selectTOrderManageList(orderManage);
+        // 用户总消费
+        BigDecimal payTotal = new BigDecimal("0");
+        tOrderManages.forEach(p ->{
+            payTotal.add(p.getOrderMoney());
+        });
+        map.put("orderList",tOrderManages);
+        map.put("payTotal",payTotal);
+        return AjaxResult.success(map);
+    }
+
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerNoticeController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerNotice;
+import com.ruoyi.web.pcApi.service.ITCustomerNoticeService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户通知信息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/customerNotice/customerNotice")
+public class TCustomerNoticeController extends BaseController
+{
+    @Autowired
+    private ITCustomerNoticeService tCustomerNoticeService;
+
+    /**
+     * 查询客户通知信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerNotice:customerNotice:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerNotice tCustomerNotice)
+    {
+        startPage();
+        List<TCustomerNotice> list = tCustomerNoticeService.selectTCustomerNoticeList(tCustomerNotice);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户通知信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerNotice:customerNotice:export')")
+    @Log(title = "客户通知信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerNotice tCustomerNotice)
+    {
+        List<TCustomerNotice> list = tCustomerNoticeService.selectTCustomerNoticeList(tCustomerNotice);
+        ExcelUtil<TCustomerNotice> util = new ExcelUtil<TCustomerNotice>(TCustomerNotice.class);
+        util.exportExcel(response, list, "客户通知信息数据");
+    }
+
+    /**
+     * 获取客户通知信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerNotice:customerNotice:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerNoticeService.selectTCustomerNoticeById(id));
+    }
+
+    /**
+     * 新增客户通知信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerNotice:customerNotice:add')")
+    @Log(title = "客户通知信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerNotice tCustomerNotice)
+    {
+        return toAjax(tCustomerNoticeService.insertTCustomerNotice(tCustomerNotice));
+    }
+
+    /**
+     * 修改客户通知信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerNotice:customerNotice:edit')")
+    @Log(title = "客户通知信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerNotice tCustomerNotice)
+    {
+        return toAjax(tCustomerNoticeService.updateTCustomerNotice(tCustomerNotice));
+    }
+
+    /**
+     * 删除客户通知信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerNotice:customerNotice:remove')")
+    @Log(title = "客户通知信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerNoticeService.deleteTCustomerNoticeByIds(ids));
+    }
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TCustomerShoppingCartController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TCustomerShoppingCart;
+import com.ruoyi.web.pcApi.service.ITCustomerShoppingCartService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 客户购物车Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/customerShoppingCart/customerShoppingCart")
+public class TCustomerShoppingCartController extends BaseController
+{
+    @Autowired
+    private ITCustomerShoppingCartService tCustomerShoppingCartService;
+
+    /**
+     * 查询客户购物车列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerShoppingCart:customerShoppingCart:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomerShoppingCart tCustomerShoppingCart)
+    {
+        startPage();
+        List<TCustomerShoppingCart> list = tCustomerShoppingCartService.selectTCustomerShoppingCartList(tCustomerShoppingCart);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户购物车列表
+     */
+    @PreAuthorize("@ss.hasPermi('customerShoppingCart:customerShoppingCart:export')")
+    @Log(title = "客户购物车", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomerShoppingCart tCustomerShoppingCart)
+    {
+        List<TCustomerShoppingCart> list = tCustomerShoppingCartService.selectTCustomerShoppingCartList(tCustomerShoppingCart);
+        ExcelUtil<TCustomerShoppingCart> util = new ExcelUtil<TCustomerShoppingCart>(TCustomerShoppingCart.class);
+        util.exportExcel(response, list, "客户购物车数据");
+    }
+
+    /**
+     * 获取客户购物车详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('customerShoppingCart:customerShoppingCart:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tCustomerShoppingCartService.selectTCustomerShoppingCartById(id));
+    }
+
+    /**
+     * 新增客户购物车
+     */
+    @PreAuthorize("@ss.hasPermi('customerShoppingCart:customerShoppingCart:add')")
+    @Log(title = "客户购物车", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomerShoppingCart tCustomerShoppingCart)
+    {
+        return toAjax(tCustomerShoppingCartService.insertTCustomerShoppingCart(tCustomerShoppingCart));
+    }
+
+    /**
+     * 修改客户购物车
+     */
+    @PreAuthorize("@ss.hasPermi('customerShoppingCart:customerShoppingCart:edit')")
+    @Log(title = "客户购物车", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomerShoppingCart tCustomerShoppingCart)
+    {
+        return toAjax(tCustomerShoppingCartService.updateTCustomerShoppingCart(tCustomerShoppingCart));
+    }
+
+    /**
+     * 删除客户购物车
+     */
+    @PreAuthorize("@ss.hasPermi('customerShoppingCart:customerShoppingCart:remove')")
+    @Log(title = "客户购物车", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCustomerShoppingCartService.deleteTCustomerShoppingCartByIds(ids));
+    }
+}

+ 107 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TNoticeMessageController.java

@@ -0,0 +1,107 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TNoticeMessage;
+import com.ruoyi.web.pcApi.service.ITNoticeMessageService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 通知消息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@RestController
+@RequestMapping("/noticeMessage/noticeMessage")
+public class TNoticeMessageController extends BaseController
+{
+    @Autowired
+    private ITNoticeMessageService tNoticeMessageService;
+
+    /**
+     * 查询通知消息列表
+     */
+    @PreAuthorize("@ss.hasPermi('noticeMessage:noticeMessage:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TNoticeMessage tNoticeMessage)
+    {
+        startPage();
+        List<TNoticeMessage> list = tNoticeMessageService.selectTNoticeMessageList(tNoticeMessage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出通知消息列表
+     */
+    @PreAuthorize("@ss.hasPermi('noticeMessage:noticeMessage:export')")
+    @Log(title = "通知消息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TNoticeMessage tNoticeMessage)
+    {
+        List<TNoticeMessage> list = tNoticeMessageService.selectTNoticeMessageList(tNoticeMessage);
+        ExcelUtil<TNoticeMessage> util = new ExcelUtil<TNoticeMessage>(TNoticeMessage.class);
+        util.exportExcel(response, list, "通知消息数据");
+    }
+
+    /**
+     * 获取通知消息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('noticeMessage:noticeMessage:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tNoticeMessageService.selectTNoticeMessageById(id));
+    }
+
+    /**
+     * 新增通知消息
+     */
+    @PreAuthorize("@ss.hasPermi('noticeMessage:noticeMessage:add')")
+    @Log(title = "通知消息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TNoticeMessage tNoticeMessage)
+    {
+        tNoticeMessage.setDeptId(getDeptId());
+        tNoticeMessage.setCreateBy(getUsername());
+        return toAjax(tNoticeMessageService.insertTNoticeMessage(tNoticeMessage));
+    }
+
+    /**
+     * 修改通知消息
+     */
+    @PreAuthorize("@ss.hasPermi('noticeMessage:noticeMessage:edit')")
+    @Log(title = "通知消息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TNoticeMessage tNoticeMessage)
+    {
+        tNoticeMessage.setUpdateBy(getUsername());
+        return toAjax(tNoticeMessageService.updateTNoticeMessage(tNoticeMessage));
+    }
+
+    /**
+     * 删除通知消息
+     */
+    @PreAuthorize("@ss.hasPermi('noticeMessage:noticeMessage:remove')")
+    @Log(title = "通知消息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tNoticeMessageService.deleteTNoticeMessageByIds(ids));
+    }
+}

+ 112 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TOrderEvaluateController.java

@@ -0,0 +1,112 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.Date;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.utils.SecurityUtils;
+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.web.pcApi.domain.TOrderEvaluate;
+import com.ruoyi.web.pcApi.service.ITOrderEvaluateService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 订单评价信息Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@RestController
+@RequestMapping("/orderEvaluate/orderEvaluate")
+public class TOrderEvaluateController extends BaseController
+{
+    @Autowired
+    private ITOrderEvaluateService tOrderEvaluateService;
+
+    /**
+     * 查询订单评价信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('orderEvaluate:orderEvaluate:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TOrderEvaluate tOrderEvaluate)
+    {
+        startPage();
+        List<TOrderEvaluate> list = tOrderEvaluateService.selectTOrderEvaluateList(tOrderEvaluate);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单评价信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('orderEvaluate:orderEvaluate:export')")
+    @Log(title = "订单评价信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TOrderEvaluate tOrderEvaluate)
+    {
+        List<TOrderEvaluate> list = tOrderEvaluateService.selectTOrderEvaluateList(tOrderEvaluate);
+        ExcelUtil<TOrderEvaluate> util = new ExcelUtil<TOrderEvaluate>(TOrderEvaluate.class);
+        util.exportExcel(response, list, "订单评价信息数据");
+    }
+
+    /**
+     * 获取订单评价信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('orderEvaluate:orderEvaluate:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tOrderEvaluateService.selectTOrderEvaluateById(id));
+    }
+
+    /**
+     * 新增订单评价信息
+     */
+    @PreAuthorize("@ss.hasPermi('orderEvaluate:orderEvaluate:add')")
+    @Log(title = "订单评价信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TOrderEvaluate tOrderEvaluate)
+    {
+        tOrderEvaluate.setDeptId(getDeptId());
+        return toAjax(tOrderEvaluateService.insertTOrderEvaluate(tOrderEvaluate));
+    }
+
+    /**
+     * 修改订单评价信息
+     */
+    @PreAuthorize("@ss.hasPermi('orderEvaluate:orderEvaluate:edit')")
+    @Log(title = "订单评价信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TOrderEvaluate tOrderEvaluate)
+    {
+        tOrderEvaluate.setUpdateBy(getUserId().toString());
+        tOrderEvaluate.setStatus("1");
+        tOrderEvaluate.setRebackUserId(getUserId());
+        tOrderEvaluate.setRebackTime(new Date());
+        return toAjax(tOrderEvaluateService.updateTOrderEvaluate(tOrderEvaluate));
+    }
+
+    /**
+     * 删除订单评价信息
+     */
+    @PreAuthorize("@ss.hasPermi('orderEvaluate:orderEvaluate:remove')")
+    @Log(title = "订单评价信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tOrderEvaluateService.deleteTOrderEvaluateByIds(ids));
+    }
+}

+ 249 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TOrderManageController.java

@@ -0,0 +1,249 @@
+package com.ruoyi.web.pcApi.controller;
+
+import java.util.*;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.web.pcApi.domain.*;
+import com.ruoyi.web.pcApi.service.*;
+import org.aspectj.weaver.loadtime.Aj;
+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.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 订单管理Controller
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@RestController
+@RequestMapping("/order/order")
+public class TOrderManageController extends BaseController
+{
+    @Autowired
+    private ITOrderManageService tOrderManageService;
+    @Autowired
+    private ITCommodityManageService commodityManageService;
+    @Autowired
+    private ITCommodityCouponService commodityCouponService;
+    @Autowired
+    private ITCustomerCouponService customerCouponService;
+    @Autowired
+    private ITCustomerManageService customerManageService;
+    @Autowired
+    private ITCustomerIntegralRecordService customerIntegralRecordService;
+
+    /**
+     * 查询订单管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TOrderManage tOrderManage)
+    {
+        startPage();
+        List<TOrderManage> list = tOrderManageService.selectTOrderManageList(tOrderManage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:export')")
+    @Log(title = "订单管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TOrderManage tOrderManage)
+    {
+        List<TOrderManage> list = tOrderManageService.selectTOrderManageList(tOrderManage);
+        ExcelUtil<TOrderManage> util = new ExcelUtil<TOrderManage>(TOrderManage.class);
+        util.exportExcel(response, list, "订单管理数据");
+    }
+
+    /**
+     * 获取订单管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tOrderManageService.selectTOrderManageById(id));
+    }
+
+    /**
+     * 新增订单管理
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:add')")
+    @Log(title = "订单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TOrderManage tOrderManage)
+    {
+        return toAjax(tOrderManageService.insertTOrderManage(tOrderManage));
+    }
+
+    /**
+     * 修改订单管理
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:edit')")
+    @Log(title = "订单管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TOrderManage tOrderManage)
+    {
+        return toAjax(tOrderManageService.updateTOrderManage(tOrderManage));
+    }
+
+    /**
+     * 删除订单管理
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:remove')")
+    @Log(title = "订单管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tOrderManageService.deleteTOrderManageByIds(ids));
+    }
+
+    /**
+     *  取消订单
+     * @param id
+     * @return
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:cancelOrder')")
+    @Log(title = "订单管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/cancelOrder/{id}")
+    public AjaxResult cancelOrder(@PathVariable("id") Long id){
+        TOrderManage orderManage = tOrderManageService.selectTOrderManageById(id);
+        // 待支付订单取消
+        if(orderManage.getStatus().equals("0")){
+            // 减少销售数量
+            TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(orderManage.getCommodityId());
+            Integer orderNum = orderManage.getAdultNum() + orderManage.getChildNum();
+            commodityManage.setStock(commodityManage.getStock() + orderNum);
+            // 增加销售数量
+            commodityManage.setSaleNum(commodityManage.getSaleNum() - orderNum);
+            commodityManageService.updateTCommodityManage(commodityManage);
+            // 重置用户商品优惠券
+            if(orderManage.getIsCoupon().equals("1")){
+                List<TCommodityCoupon> commodityCouponList =
+                        commodityCouponService.selectTCommodityCouponList(TCommodityCoupon.builder().commodityId(commodityManage.getId()).build());
+                if(commodityCouponList.size()>0){
+                    List<TCustomerCoupon> tCustomerCoupons =
+                            customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().couponId(commodityCouponList.get(0).getId()).customerId(orderManage.getCustomerId()).build());
+                    // 有优惠券,且已使用,则重置
+                    if(tCustomerCoupons.size()>0 && tCustomerCoupons.get(0).getStatus().equals("1")){
+                        customerCouponService.updateTCustomerCoupon(TCustomerCoupon.builder().id(tCustomerCoupons.get(0).getId()).status("0").build());
+                    }
+                }
+            }
+            tOrderManageService.deleteTOrderManageById(id);
+        }else if(orderManage.getStatus().equals("1")){// 已支付待完成订单取消
+            // 减少销售数量
+            TCommodityManage commodityManage = commodityManageService.selectTCommodityManageById(orderManage.getCommodityId());
+            Integer orderNum = orderManage.getAdultNum() + orderManage.getChildNum();
+            commodityManage.setStock(commodityManage.getStock() + orderNum);
+            // 增加销售数量
+            commodityManage.setSaleNum(commodityManage.getSaleNum() - orderNum);
+            commodityManageService.updateTCommodityManage(commodityManage);
+
+            // 减去增加的积分  订单金额为增加的积分数量
+            TCustomerManage customerManage = customerManageService.selectTCustomerManageById(orderManage.getCustomerId());
+            customerManage.setIntegral(customerManage.getIntegral() - orderManage.getOrderMoney().longValue());
+            // 加上用户使用的积分
+            customerManage.setIntegral(customerManage.getIntegral() + orderManage.getIntegralDeduction().longValue());
+            customerManageService.updateTCustomerManage(customerManage);
+
+            // 记录减去用户积分
+            customerIntegralRecordService.insertTCustomerIntegralRecord(TCustomerIntegralRecord.builder().
+                    supIntegral(customerManage.getIntegral().toString()).integralNum(orderManage.getOrderMoney().toString()).integralType("9")// 退款类型
+                    .createBy(getLoginUser().getUsername()).orderId(orderManage.getId()).customerId(customerManage.getId()).deptId(getLoginUser().getDeptId())
+                    .build());
+
+            // 重置用户商品优惠券
+            if(orderManage.getIsCoupon().equals("1")){
+                List<TCommodityCoupon> commodityCouponList =
+                        commodityCouponService.selectTCommodityCouponList(TCommodityCoupon.builder().commodityId(commodityManage.getId()).build());
+                if(commodityCouponList.size()>0){
+                    List<TCustomerCoupon> tCustomerCoupons =
+                            customerCouponService.selectTCustomerCouponList(TCustomerCoupon.builder().couponId(commodityCouponList.get(0).getId()).customerId(customerManage.getId()).build());
+                    // 有优惠券,且已使用,则重置
+                    if(tCustomerCoupons.size()>0 && tCustomerCoupons.get(0).getStatus().equals("1")){
+                        customerCouponService.updateTCustomerCoupon(TCustomerCoupon.builder().id(tCustomerCoupons.get(0).getId()).status("0").build());
+                    }
+                }
+
+            }
+
+            tOrderManageService.updateTOrderManage(TOrderManage.builder().id(id)
+                    .status("99").returnDate(new Date()).build());
+        }else{
+            return AjaxResult.error("已完成或已退款订单无法取消");
+        }
+
+        return AjaxResult.success();
+    }
+
+    /**********************************************************************已购买商品信息*****************************************************************************/
+
+    /**
+     *  查询已购买商品列表
+     * @param order
+     * @return
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:purchasedList')")
+    @GetMapping("/purchasedList")
+    public AjaxResult purchasedList(TOrderManage order){
+        List<Map<String,Object>> mapList= new ArrayList<>();
+
+        // 查询所有商品信息
+        List<Map<String,Object>> maps = tOrderManageService.selectPurchasedList(order);
+        for (Map<String, Object> map : maps) {
+            // 查询商品出行列表
+            List<Map<String,Object>> placeList = tOrderManageService.selectPlaceList(map.get("id").toString());
+            Map<String,Object> returnMap = new HashMap<>();
+            returnMap.put("title",map.get("commodityName").toString());
+            returnMap.put("list",placeList);
+            mapList.add(returnMap);
+        }
+
+        return AjaxResult.success(mapList);
+    }
+
+    /**
+     *  查询已购买商品详情列表
+     * @param order
+     * @return
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:purchasedDetailList')")
+    @GetMapping("/purchasedDetailList")
+    public AjaxResult purchasedDetailList(TOrderManage order){
+        startPage();
+        // 查询所有已购买商品详情列表
+        List<TPurchasedDetailExportDo> maps = tOrderManageService.purchasedDetailList(order);
+        return AjaxResult.success(getDataTable(maps));
+    }
+
+    /**
+     * 导出已购买商品详情列表
+     */
+    @PreAuthorize("@ss.hasPermi('order:order:purchasedDetailListExport')")
+    @Log(title = "订单管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/purchasedDetailListExport")
+    public void purchasedDetailListExport(HttpServletResponse response, TOrderManage tOrderManage)
+    {
+        List<TPurchasedDetailExportDo> maps = tOrderManageService.purchasedDetailList(tOrderManage);
+        ExcelUtil<TPurchasedDetailExportDo> util = new ExcelUtil<>(TPurchasedDetailExportDo.class);
+        util.exportExcel(response, maps, "订单管理数据");
+    }
+
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/controller/TOrderManageTotalController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.pcApi.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.web.pcApi.domain.TOrderManageTotal;
+import com.ruoyi.web.pcApi.service.ITOrderManageTotalService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 订单管理-总Controller
+ * 
+ * @author lzp
+ * @date 2022-09-20
+ */
+@RestController
+@RequestMapping("/OrderManageTotal")
+public class TOrderManageTotalController extends BaseController
+{
+    @Autowired
+    private ITOrderManageTotalService tOrderManageTotalService;
+
+    /**
+     * 查询订单管理-总列表
+     */
+    @PreAuthorize("@ss.hasPermi('OrderManageTotal:OrderManageTotal:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TOrderManageTotal tOrderManageTotal)
+    {
+        startPage();
+        List<TOrderManageTotal> list = tOrderManageTotalService.selectTOrderManageTotalList(tOrderManageTotal);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单管理-总列表
+     */
+    @PreAuthorize("@ss.hasPermi('OrderManageTotal:OrderManageTotal:export')")
+    @Log(title = "订单管理-总", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TOrderManageTotal tOrderManageTotal)
+    {
+        List<TOrderManageTotal> list = tOrderManageTotalService.selectTOrderManageTotalList(tOrderManageTotal);
+        ExcelUtil<TOrderManageTotal> util = new ExcelUtil<TOrderManageTotal>(TOrderManageTotal.class);
+        util.exportExcel(response, list, "订单管理-总数据");
+    }
+
+    /**
+     * 获取订单管理-总详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('OrderManageTotal:OrderManageTotal:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tOrderManageTotalService.selectTOrderManageTotalById(id));
+    }
+
+    /**
+     * 新增订单管理-总
+     */
+    @PreAuthorize("@ss.hasPermi('OrderManageTotal:OrderManageTotal:add')")
+    @Log(title = "订单管理-总", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TOrderManageTotal tOrderManageTotal)
+    {
+        return toAjax(tOrderManageTotalService.insertTOrderManageTotal(tOrderManageTotal));
+    }
+
+    /**
+     * 修改订单管理-总
+     */
+    @PreAuthorize("@ss.hasPermi('OrderManageTotal:OrderManageTotal:edit')")
+    @Log(title = "订单管理-总", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TOrderManageTotal tOrderManageTotal)
+    {
+        return toAjax(tOrderManageTotalService.updateTOrderManageTotal(tOrderManageTotal));
+    }
+
+    /**
+     * 删除订单管理-总
+     */
+    @PreAuthorize("@ss.hasPermi('OrderManageTotal:OrderManageTotal:remove')")
+    @Log(title = "订单管理-总", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tOrderManageTotalService.deleteTOrderManageTotalByIds(ids));
+    }
+}

+ 76 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/BusCompany.java

@@ -0,0 +1,76 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+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;
+
+/**
+ * bus公司对象 sys_dept
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BusCompany extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 部门id */
+    private Long deptId;
+
+    /** 父部门id */
+    @Excel(name = "父部门id")
+    private Long parentId;
+
+    /** 祖级列表 */
+    @Excel(name = "祖级列表")
+    private String ancestors;
+
+    /** 部门名称 */
+    @Excel(name = "部门名称")
+    private String deptName;
+
+    /** 显示顺序 */
+    @Excel(name = "显示顺序")
+    private Integer orderNum;
+
+    /** 负责人 */
+    @Excel(name = "负责人")
+    private String leader;
+
+    /** 联系电话 */
+    @Excel(name = "联系电话")
+    private String phone;
+
+    /** 邮箱 */
+    @Excel(name = "邮箱")
+    private String email;
+
+    /** 管理员用户Id */
+    @Excel(name = "管理员用户Id")
+    private Long manager;
+
+    /** 公司地址 */
+    @Excel(name = "公司地址")
+    private String address;
+
+    /** 部门状态(0正常 1停用) */
+    @Excel(name = "部门状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    // 临时字段
+    /** 用户名*/
+    private String username;
+    /** 密码*/
+    private String password;
+
+}

+ 54 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityCoupon.java

@@ -0,0 +1,54 @@
+package com.ruoyi.web.pcApi.domain;
+
+import java.math.BigDecimal;
+import com.ruoyi.common.annotation.Excel;
+import lombok.*;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 商品优惠卷信息对象 t_commodity_coupon
+ * 
+ * @author lzp
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCommodityCoupon extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 商品id */
+    @Excel(name = "商品id")
+    private Long commodityId;
+
+    /** 优惠券名称 */
+    @Excel(name = "优惠券名称")
+    private String couponName;
+
+    /** 优惠金额 */
+    @Excel(name = "优惠金额")
+    private BigDecimal discountPrice;
+
+    /** 开始时间 */
+    @Excel(name = "开始时间")
+    private String beginTime;
+
+    /** 结束时间 */
+    @Excel(name = "结束时间")
+    private String endTime;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    // 临时字段
+    /** 商品名称*/
+    private String commodityName;
+
+}

+ 38 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityJourneyInformation.java

@@ -0,0 +1,38 @@
+package com.ruoyi.web.pcApi.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.*;
+import lombok.*;
+
+/**
+ * 商品旅程信息对象 t_commodity_journey_information
+ * 
+ * @author lzp
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCommodityJourneyInformation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 商品id */
+    @Excel(name = "商品id")
+    private Long commodityId;
+
+    /** 旅程时间 */
+    @Excel(name = "旅程时间")
+    private String journeyTime;
+
+    /** 任务详情 */
+    @Excel(name = "任务详情")
+    private String detail;
+
+}

+ 133 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityManage.java

@@ -0,0 +1,133 @@
+package com.ruoyi.web.pcApi.domain;
+
+import java.math.BigDecimal;
+import java.util.List;
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 商品信息管理对象 t_commodity_manage
+ * 
+ * @author lzp
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCommodityManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 商品类型id */
+    @Excel(name = "商品类型id")
+    private Long typeId;
+
+    /** 商品名称 */
+    @Excel(name = "商品名称")
+    private String commodityName;
+
+    /** 出发地(用顿号分隔) */
+    @Excel(name = "出发地", readConverterExp = "用顿号分隔")
+    private String departurePlace;
+
+    /** 成人价格 */
+    @Excel(name = "成人价格")
+    private BigDecimal adultPrice;
+
+    /** 儿童价格 */
+    @Excel(name = "儿童价格")
+    private BigDecimal childPrice;
+
+    /** 库存 */
+    @Excel(name = "库存")
+    private Long stock;
+
+    /** 儿童价格说明 */
+    @Excel(name = "儿童价格说明")
+    private String childPriceExplain;
+
+    /** 封面图片 */
+    @Excel(name = "封面图片")
+    private String faceImg;
+
+    /** 商品图片(用逗号分隔) */
+    @Excel(name = "商品图片", readConverterExp = "用=逗号分隔")
+    private String commodityImg;
+
+    /** 是否使用优惠卷(0-否  1-是) */
+    @Excel(name = "是否使用优惠卷(0-否  1-是)")
+    private String isCoupon;
+
+    /** 有效期开始 */
+    @Excel(name = "有效期开始")
+    private String periodStart;
+
+    /** 有效期结束 */
+    @Excel(name = "有效期结束")
+    private String periodEnd;
+
+    /** 有效期单日(用逗号分隔) */
+    @Excel(name = "有效期单日", readConverterExp = "用=逗号分隔")
+    private String periodWeek;
+
+    /** 出行目标人数 */
+    @Excel(name = "出行目标人数")
+    private Integer targetPeopleNum;
+
+    /** 提前结束时间 */
+    @Excel(name = "提前结束时间")
+    private Integer advancePeriod;
+
+    /** 注意事项 */
+    @Excel(name = "注意事项")
+    private String attention;
+
+    /** 概要说明 */
+    @Excel(name = "概要说明")
+    private String specification;
+
+    /** 购买数量 */
+    @Excel(name = "购买数量")
+    private Integer saleNum;
+
+    /** 是否推荐:0-否 1-是 */
+    @Excel(name = "是否推荐:0-否 1-是")
+    private String isRecommend;
+
+    /** 是否优选:0-否 1-是 */
+    @Excel(name = "是否优选:0-否 1-是")
+    private String isPreferred;
+
+    /** 上架状态:0-正常 1-取消上架 */
+    @Excel(name = "上架状态:0-正常 1-取消上架")
+    private String status;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    /** 删除标志:0-正常 1-删除 */
+    private String delFlag;
+
+    /** 商品旅程信息信息 */
+    private List<TCommodityJourneyInformation> commodityJourneyInformationList;
+    /** 优惠券信息*/
+    private List<TCommodityCoupon> commodityCouponList;
+    /** 评论信息*/
+    private List<TOrderEvaluate> orderEvaluateList;
+
+
+    // 临时字段
+    // 商品类型名称
+    private String typeName;
+    /** 用户是否已领取优惠券状态   1-有  0-无  2-有且已使用*/
+    private String couponUser;
+    /** 用户是否收藏状态   1-有  0-无*/
+    private String collectionUser;
+}

+ 38 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCommodityType.java

@@ -0,0 +1,38 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 商品分类信息对象 t_commodity_type
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCommodityType extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 商品类型 */
+    @Excel(name = "商品类型")
+    private String typeName;
+
+    /** 商品类型 */
+    @Excel(name = "类型图片")
+    private String typeImg;
+
+    /** 删除标志:0-正常 1-删除 */
+    private String delFlag;
+
+    private Long deptId;
+
+}

+ 52 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerCollectionOrFootprint.java

@@ -0,0 +1,52 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 客户收藏或足迹对象 t_customer_collection_or_footprint
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerCollectionOrFootprint extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 商品id */
+    @Excel(name = "商品id")
+    private Long commodityId;
+
+    /** 类型:1-足迹  2-收藏 */
+    @Excel(name = "类型:1-足迹  2-收藏")
+    private String type;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+    /** 创建人*/
+    private String createBy;
+
+    // 临时字段
+    /**商品名称*/
+    private String commodityName;
+    /**商品类型*/
+    private String commodityTypeName;
+    /**商品图片*/
+    private String commodityImg;
+    /**商品封面图片*/
+    private String faceImg;
+}

+ 56 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerCoupon.java

@@ -0,0 +1,56 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 客户优惠券信息对象 t_customer_coupon
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerCoupon extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 优惠券id */
+    @Excel(name = "优惠券id")
+    private Long couponId;
+
+    /** 状态:0-未使用 1-已使用  9-已过期 */
+    @Excel(name = "状态:0-未使用 1-已使用  9-已过期")
+    private String status;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    // 临时字段
+    /** 商品名称*/
+    private String commodityName;
+    /** 优惠券名称*/
+    private String couponName;
+    /** 优惠券金额*/
+    private BigDecimal discountPrice;
+    /** 优惠券有效开始时间*/
+    private String beginTime;
+    /** 优惠券有效结束时间*/
+    private String endTime;
+
+
+}

+ 57 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerDistributionRecord.java

@@ -0,0 +1,57 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 客户分销信息对象 t_customer_distribution_record
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerDistributionRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    private Long orderId;
+
+    /** 奖励积分数量 */
+    @Excel(name = "奖励积分数量")
+    private String distributionIntegral;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+    /** 创建人 */
+    private String createBy;
+
+    // 临时字段
+
+    /** 用户姓名*/
+    private String customerName;
+    /** 订单编号*/
+    private String orderNo;
+    /** 商品类型*/
+    private String typeName;
+    /** 商品名称*/
+    private String commodityName;
+    /** 手机号*/
+    private String phone;
+    /** 金额*/
+    private String orderMoney;
+}

+ 39 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerDistributionSet.java

@@ -0,0 +1,39 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+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;
+
+/**
+ * 客户分销奖励设定对象 t_customer_distribution_set
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerDistributionSet extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 等级 */
+    @Excel(name = "等级")
+    private String level;
+
+    /** 佣金比例(%) */
+    @Excel(name = "佣金比例(%)")
+    private String proportion;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+}

+ 78 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerIntegralRecord.java

@@ -0,0 +1,78 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 客户积分记录对象 t_customer_integral_record
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerIntegralRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 积分记录类型:1-下单  2-转入 3-转出 */
+    @Excel(name = "积分记录类型:1-下单  2-转入 3-转出 4-积分抵扣 9-退款")
+    private String integralType;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    private Long orderId;
+
+    /** 积分数量 */
+    @Excel(name = "积分数量")
+    private String integralNum;
+
+    /** 转入客户Id */
+    @Excel(name = "转入客户Id")
+    private Long turnInId;
+
+    /** 转出客户id */
+    @Excel(name = "转出客户id")
+    private Long turnOutId;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+    /** 剩余积分*/
+    private String supIntegral;
+    /** 创建人*/
+    private String createBy;
+
+    // 临时字段
+
+    /** 订单编号*/
+    private String orderNo;
+    /** 订单金额*/
+    private String orderMoney;
+    /** 积分抵扣*/
+    private String integralDeduction;
+    /** 商品类型*/
+    private String typeName;
+    /** 商品名称*/
+    private String commodityName;
+    /** 转入姓名*/
+    private String turnInName;
+    /** 转入手机号*/
+    private String turnInPhone;
+    /** 转出姓名*/
+    private String turnOutName;
+    /** 转出手机号*/
+    private String turnOutPhone;
+
+}

+ 35 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerIntegralSet.java

@@ -0,0 +1,35 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+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;
+
+/**
+ * 客户积分奖励设定对象 t_customer_integral_set
+ * 
+ * @author lzp
+ * @date 2022-11-08
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerIntegralSet extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 积分比例(%) */
+    @Excel(name = "积分比例(%)")
+    private String proportion;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+}

+ 65 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerManage.java

@@ -0,0 +1,65 @@
+package com.ruoyi.web.pcApi.domain;
+
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.List;
+
+/**
+ * 客户信息管理对象 t_customer_manage
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 用户姓名 */
+    @Excel(name = "用户姓名")
+    private String name;
+
+    /** 登陆用户名(手机号) */
+    @Excel(name = "登陆用户名(手机号)")
+    private String username;
+
+    /** 密码 */
+    @Excel(name = "密码")
+    private String password;
+
+    /** 用户积分 */
+    @Excel(name = "用户积分")
+    private Long integral;
+
+    /** 删除标志:0-正常 1-已删除 */
+    private String delFlag;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    /** 用户编号 */
+    @Excel(name = "用户编号")
+    private String customerNo;
+
+    /** 用户昵称 */
+    @Excel(name = "用户昵称")
+    private String nickName;
+
+    // 临时字段
+    /** 分销奖励*/
+    private String totalNum;
+    /** 分销信息*/
+    private List<TCustomerDistributionRecord> distributionRecordList;
+
+}

+ 46 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerNotice.java

@@ -0,0 +1,46 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 客户通知信息对象 t_customer_notice
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerNotice extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 标题 */
+    @Excel(name = "标题")
+    private String title;
+
+    /** 通知内容 */
+    @Excel(name = "通知内容")
+    private String content;
+
+    /** 是否回复:0-未读  1-已读 */
+    @Excel(name = "是否回复:0-未读  1-已读")
+    private String status;
+
+    /** 创建人*/
+    private String createBy;
+    /** 商品id*/
+    private Long commodityId;
+
+}

+ 73 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TCustomerShoppingCart.java

@@ -0,0 +1,73 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 客户购物车对象 t_customer_shopping_cart
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TCustomerShoppingCart extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 商品id */
+    @Excel(name = "商品id")
+    private Long commodityId;
+
+    /** 出发地 */
+    @Excel(name = "出发地")
+    private String departurePlace;
+
+    /** 出发日期 */
+    @Excel(name = "出发日期")
+    private String departureDate;
+
+    /** 是否使用优惠券  0-否  1-是 */
+    @Excel(name = "是否使用优惠券  0-否  1-是")
+    private String isCoupon;
+
+    /** 成人数量 */
+    @Excel(name = "成人数量")
+    private Integer adultNum;
+
+    /** 儿童数量 */
+    @Excel(name = "儿童数量")
+    private Integer childNum;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    // 临时字段
+    /** 商品名称*/
+    private String commodityName;
+    /** 商品封面图片*/
+    private String faceImg;
+    /** 商品优惠券金额*/
+    private String couponMoney;
+    /** 成人票价*/
+    private BigDecimal adultPrice;
+    /** 儿童票价*/
+    private BigDecimal childPrice;
+    /** 库存*/
+    private Integer stock;
+
+}

+ 40 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TNoticeMessage.java

@@ -0,0 +1,40 @@
+package com.ruoyi.web.pcApi.domain;
+
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 通知消息对象 t_notice_message
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TNoticeMessage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 标题 */
+    @Excel(name = "标题")
+    private String title;
+
+    /** 消息类型:1-服务类型 2-活动类型 3-个人消息 */
+    @Excel(name = "消息类型:1-服务类型 2-活动类型 3-个人消息")
+    private String messageType;
+
+    /** 消息内容 */
+    @Excel(name = "消息内容")
+    private String content;
+
+    /** bus分公司id*/
+    private Long deptId;
+
+}

+ 69 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderEvaluate.java

@@ -0,0 +1,69 @@
+package com.ruoyi.web.pcApi.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 订单评价信息对象 t_order_evaluate
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TOrderEvaluate extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    private Long orderId;
+
+    /** 评价内容 */
+    @Excel(name = "评价内容")
+    private String content;
+
+    /** 回复评价 */
+    @Excel(name = "回复评价")
+    private String rebackContent;
+
+    /** 回复管理员id */
+    @Excel(name = "回复管理员id")
+    private Long rebackUserId;
+
+    /** 回复时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "回复时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date rebackTime;
+
+    /** 是否回复:0-未回复  1-已回复 */
+    @Excel(name = "是否回复:0-未回复  1-已回复")
+    private String status;
+
+    private Long deptId;
+
+    // 临时字段
+    /** 商品名称*/
+    private String commodityName;
+    /** 商品id*/
+    private Long commodityId;
+    /** 商品类型*/
+    private String typeName;
+    /** 回复人*/
+    private String rebackUserName;
+    /** 评价人*/
+    private String customerName;
+}

+ 123 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderManage.java

@@ -0,0 +1,123 @@
+package com.ruoyi.web.pcApi.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.*;
+
+/**
+ * 订单管理对象 t_order_manage
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TOrderManage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 订单编号 */
+    @Excel(name = "订单编号")
+    private String orderNo;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    /** 订单信息总id */
+    @Excel(name = "订单信息总id")
+    private Long orderTotalId;
+
+    /** 商品id */
+    @Excel(name = "商品id")
+    private Long commodityId;
+
+    /** 出发地 */
+    @Excel(name = "出发地")
+    private String departurePlace;
+
+    /** 出发日期 */
+    @Excel(name = "出发日期")
+    private String departureDate;
+
+    /** 是否使用优惠券  0-否  1-是 */
+    @Excel(name = "是否使用优惠券  0-否  1-是")
+    private String isCoupon;
+
+    /** 成人数量 */
+    @Excel(name = "成人数量")
+    private Integer adultNum;
+
+    /** 儿童数量 */
+    @Excel(name = "儿童数量")
+    private Integer childNum;
+
+    /** 订单金额 */
+    @Excel(name = "订单金额")
+    private BigDecimal orderMoney;
+
+    /** 积分抵扣金额 */
+    @Excel(name = "积分抵扣金额")
+    private BigDecimal integralDeduction;
+
+    /** 优惠券抵扣金额 */
+    @Excel(name = "优惠券抵扣金额")
+    private BigDecimal couponDeduction;
+
+    /** 支付宝支付号 */
+    @Excel(name = "支付宝支付号")
+    private String aipayNo;
+
+    /** 订单状态:0-待支付 1-已支付(待参加)2-已完成 9-已评价 99-已退款  */
+    @Excel(name = "订单状态:0-待支付 1-已支付 9-支付中", readConverterExp = "待=参加")
+    private String status;
+
+    /** 删除标识*/
+    private String delFlag;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date payDate;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "退款时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date returnDate;
+
+    // 临时字段
+    /** 商品类型*/
+    private String typeName;
+    /** 商品名称*/
+    private String commodityName;
+    /** 用户姓名*/
+    private String customerName;
+    /** 手机号*/
+    private String phone;
+    /** 出发地数组*/
+    private String departurePlaceArr;
+    /** 成人价格*/
+    private String adultPrice;
+    /** 儿童价格*/
+    private String childPrice;
+    /** 购物车id*/
+    private Long shopCarId;
+    /**封面图片*/
+    private String faceImg;
+    /**实际支付金额*/
+    private BigDecimal money;
+
+
+}

+ 70 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderManageTotal.java

@@ -0,0 +1,70 @@
+package com.ruoyi.web.pcApi.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+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;
+
+/**
+ * 订单管理-总对象 t_order_manage_total
+ * 
+ * @author lzp
+ * @date 2022-09-20
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TOrderManageTotal extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 积分抵扣金额 */
+    @Excel(name = "积分抵扣金额")
+    private BigDecimal integralDeduction;
+
+    /** 订单金额 */
+    @Excel(name = "订单金额")
+    private BigDecimal orderMoney;
+
+    /** 支付宝支付号 */
+    @Excel(name = "支付宝支付号")
+    private String aipayNo;
+
+    /** 订单状态:0-待支付 1-已支付 99-已退款  */
+    @Excel(name = "订单状态:0-待支付 1-已支付 99-已退款 ")
+    private String status;
+
+    /** 付款时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "付款时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date payDate;
+
+    /** 退款时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "退款时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date returnDate;
+
+    /** bus公司id */
+    @Excel(name = "bus公司id")
+    private Long deptId;
+
+    /** 删除标识:0-正常 1-删除 */
+    private String delFlag;
+
+    // 临时字段
+    private List<TOrderManage> orderList;
+
+    /** 分销人id*/
+    private Long distributionId;
+}

+ 47 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TPurchasedDetailExportDo.java

@@ -0,0 +1,47 @@
+package com.ruoyi.web.pcApi.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 订单管理对象 t_order_manage
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TPurchasedDetailExportDo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+    /** 商品名称*/
+    @Excel(name = "商品名称")
+    private String commodityName;
+    /** 用户姓名*/
+    @Excel(name = "用户姓名")
+    private String customerName;
+    /** 手机号*/
+    @Excel(name = "手机号")
+    private String phone;
+    /** 出发地 */
+    @Excel(name = "出发地")
+    private String departurePlace;
+    /** 出发日期 */
+    @Excel(name = "出发日期")
+    private String departureDate;
+    @Excel(name = "总人数")
+    private String totalNum;
+
+
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/BusCompanyMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.BusCompany;
+
+/**
+ * bus公司Mapper接口
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+public interface BusCompanyMapper 
+{
+    /**
+     * 查询bus公司
+     * 
+     * @param deptId bus公司主键
+     * @return bus公司
+     */
+    public BusCompany selectBusCompanyByDeptId(Long deptId);
+
+    /**
+     * 查询bus公司列表
+     * 
+     * @param busCompany bus公司
+     * @return bus公司集合
+     */
+    public List<BusCompany> selectBusCompanyList(BusCompany busCompany);
+
+    /**
+     * 新增bus公司
+     * 
+     * @param busCompany bus公司
+     * @return 结果
+     */
+    public int insertBusCompany(BusCompany busCompany);
+
+    /**
+     * 修改bus公司
+     * 
+     * @param busCompany bus公司
+     * @return 结果
+     */
+    public int updateBusCompany(BusCompany busCompany);
+
+    /**
+     * 删除bus公司
+     * 
+     * @param deptId bus公司主键
+     * @return 结果
+     */
+    public int deleteBusCompanyByDeptId(Long deptId);
+
+    /**
+     * 批量删除bus公司
+     * 
+     * @param deptIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBusCompanyByDeptIds(Long[] deptIds);
+}

+ 82 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityCouponMapper.java

@@ -0,0 +1,82 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.web.pcApi.domain.TCommodityCoupon;
+import com.ruoyi.web.pcApi.domain.TCommodityManage;
+
+/**
+ * 商品优惠卷信息Mapper接口
+ * 
+ * @author lzp
+ * @date 2022-08-25
+ */
+public interface TCommodityCouponMapper 
+{
+    /**
+     * 查询商品优惠卷信息
+     * 
+     * @param id 商品优惠卷信息主键
+     * @return 商品优惠卷信息
+     */
+    public TCommodityCoupon selectTCommodityCouponById(Long id);
+
+    /**
+     * 查询商品优惠卷信息列表
+     * 
+     * @param tCommodityCoupon 商品优惠卷信息
+     * @return 商品优惠卷信息集合
+     */
+    public List<TCommodityCoupon> selectTCommodityCouponList(TCommodityCoupon tCommodityCoupon);
+
+    /**
+     * 新增商品优惠卷信息
+     * 
+     * @param tCommodityCoupon 商品优惠卷信息
+     * @return 结果
+     */
+    public int insertTCommodityCoupon(TCommodityCoupon tCommodityCoupon);
+
+    /**
+     * 修改商品优惠卷信息
+     * 
+     * @param tCommodityCoupon 商品优惠卷信息
+     * @return 结果
+     */
+    public int updateTCommodityCoupon(TCommodityCoupon tCommodityCoupon);
+
+    /**
+     * 删除商品优惠卷信息
+     * 
+     * @param id 商品优惠卷信息主键
+     * @return 结果
+     */
+    public int deleteTCommodityCouponById(Long id);
+
+    /**
+     * 批量删除商品优惠卷信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityCouponByIds(Long[] ids);
+
+    /**
+     * 批量删除商品优惠卷信息
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityCouponByCommodityIds(Long[] ids);
+
+    /**
+     *  删除商品优惠卷信息-商品id
+     * @param commodityId  商品id
+     */
+    int deleteTCommodityCouponByCommodityId(Long commodityId);
+
+    List<Map<String, Object>> selectTCommodityCouponStatisList(TCommodityCoupon commodityCoupon);
+
+    List<Map<String, Object>> selectTCommodityCouponStatisDetailList(TCommodityCoupon commodityCoupon);
+}

+ 62 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityJourneyInformationMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import com.ruoyi.web.pcApi.domain.TCommodityJourneyInformation;
+
+import java.util.List;
+
+/**
+ * 商品旅程信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCommodityJourneyInformationMapper 
+{
+    /**
+     * 查询商品旅程信息
+     * 
+     * @param id 商品旅程信息主键
+     * @return 商品旅程信息
+     */
+    public TCommodityJourneyInformation selectTCommodityJourneyInformationById(Long id);
+
+    /**
+     * 查询商品旅程信息列表
+     * 
+     * @param tCommodityJourneyInformation 商品旅程信息
+     * @return 商品旅程信息集合
+     */
+    public List<TCommodityJourneyInformation> selectTCommodityJourneyInformationList(TCommodityJourneyInformation tCommodityJourneyInformation);
+
+    /**
+     * 新增商品旅程信息
+     * 
+     * @param tCommodityJourneyInformation 商品旅程信息
+     * @return 结果
+     */
+    public int insertTCommodityJourneyInformation(TCommodityJourneyInformation tCommodityJourneyInformation);
+
+    /**
+     * 修改商品旅程信息
+     * 
+     * @param tCommodityJourneyInformation 商品旅程信息
+     * @return 结果
+     */
+    public int updateTCommodityJourneyInformation(TCommodityJourneyInformation tCommodityJourneyInformation);
+
+    /**
+     * 删除商品旅程信息
+     * 
+     * @param id 商品旅程信息主键
+     * @return 结果
+     */
+    public int deleteTCommodityJourneyInformationById(Long id);
+
+    /**
+     * 批量删除商品旅程信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityJourneyInformationByIds(Long[] ids);
+}

+ 98 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityManageMapper.java

@@ -0,0 +1,98 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.web.pcApi.domain.TCommodityManage;
+import com.ruoyi.web.pcApi.domain.TCommodityJourneyInformation;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
+
+/**
+ * 商品信息管理Mapper接口
+ * 
+ * @author lzp
+ * @date 2022-08-24
+ */
+public interface TCommodityManageMapper 
+{
+    /**
+     * 查询商品信息管理
+     * 
+     * @param id 商品信息管理主键
+     * @return 商品信息管理
+     */
+    public TCommodityManage selectTCommodityManageById(Long id);
+
+    /**
+     * 查询商品信息管理列表
+     * 
+     * @param tCommodityManage 商品信息管理
+     * @return 商品信息管理集合
+     */
+    public List<TCommodityManage> selectTCommodityManageList(TCommodityManage tCommodityManage);
+
+    /**
+     * 新增商品信息管理
+     * 
+     * @param tCommodityManage 商品信息管理
+     * @return 结果
+     */
+    public int insertTCommodityManage(TCommodityManage tCommodityManage);
+
+    /**
+     * 修改商品信息管理
+     * 
+     * @param tCommodityManage 商品信息管理
+     * @return 结果
+     */
+    public int updateTCommodityManage(TCommodityManage tCommodityManage);
+
+    /**
+     * 删除商品信息管理
+     * 
+     * @param id 商品信息管理主键
+     * @return 结果
+     */
+    public int deleteTCommodityManageById(Long id);
+
+    /**
+     * 批量删除商品信息管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityManageByIds(Long[] ids);
+
+    /**
+     * 批量删除商品旅程信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityJourneyInformationByCommodityIds(Long[] ids);
+    
+    /**
+     * 批量新增商品旅程信息
+     * 
+     * @param tCommodityJourneyInformationList 商品旅程信息列表
+     * @return 结果
+     */
+    public int batchTCommodityJourneyInformation(List<TCommodityJourneyInformation> tCommodityJourneyInformationList);
+    
+
+    /**
+     * 通过商品信息管理主键删除商品旅程信息信息
+     * 
+     * @param id 商品信息管理ID
+     * @return 结果
+     */
+    public int deleteTCommodityJourneyInformationByCommodityId(Long id);
+
+
+    List<TCommodityManage> selectSameTypeCommodityTop5(@Param("id") Long id, @Param("typeId") Long typeId, @Param("deptId") Long deptId);
+
+    List<TCommodityManage> selectTCommodityManageList4H5(TCommodityManage commodityManage);
+
+    List<TCommodityManage> selectSalesTop10(TCommodityManage commodityManage);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCommodityTypeMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCommodityType;
+
+/**
+ * 商品分类信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+public interface TCommodityTypeMapper 
+{
+    /**
+     * 查询商品分类信息
+     * 
+     * @param id 商品分类信息主键
+     * @return 商品分类信息
+     */
+    public TCommodityType selectTCommodityTypeById(Long id);
+
+    /**
+     * 查询商品分类信息列表
+     * 
+     * @param tCommodityType 商品分类信息
+     * @return 商品分类信息集合
+     */
+    public List<TCommodityType> selectTCommodityTypeList(TCommodityType tCommodityType);
+
+    /**
+     * 新增商品分类信息
+     * 
+     * @param tCommodityType 商品分类信息
+     * @return 结果
+     */
+    public int insertTCommodityType(TCommodityType tCommodityType);
+
+    /**
+     * 修改商品分类信息
+     * 
+     * @param tCommodityType 商品分类信息
+     * @return 结果
+     */
+    public int updateTCommodityType(TCommodityType tCommodityType);
+
+    /**
+     * 删除商品分类信息
+     * 
+     * @param id 商品分类信息主键
+     * @return 结果
+     */
+    public int deleteTCommodityTypeById(Long id);
+
+    /**
+     * 批量删除商品分类信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityTypeByIds(Long[] ids);
+}

+ 63 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerCollectionOrFootprintMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerCollectionOrFootprint;
+
+/**
+ * 客户收藏或足迹Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCustomerCollectionOrFootprintMapper 
+{
+    /**
+     * 查询客户收藏或足迹
+     * 
+     * @param id 客户收藏或足迹主键
+     * @return 客户收藏或足迹
+     */
+    public TCustomerCollectionOrFootprint selectTCustomerCollectionOrFootprintById(Long id);
+
+    /**
+     * 查询客户收藏或足迹列表
+     * 
+     * @param tCustomerCollectionOrFootprint 客户收藏或足迹
+     * @return 客户收藏或足迹集合
+     */
+    public List<TCustomerCollectionOrFootprint> selectTCustomerCollectionOrFootprintList(TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint);
+
+    /**
+     * 新增客户收藏或足迹
+     * 
+     * @param tCustomerCollectionOrFootprint 客户收藏或足迹
+     * @return 结果
+     */
+    public int insertTCustomerCollectionOrFootprint(TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint);
+
+    /**
+     * 修改客户收藏或足迹
+     * 
+     * @param tCustomerCollectionOrFootprint 客户收藏或足迹
+     * @return 结果
+     */
+    public int updateTCustomerCollectionOrFootprint(TCustomerCollectionOrFootprint tCustomerCollectionOrFootprint);
+
+    /**
+     * 删除客户收藏或足迹
+     * 
+     * @param id 客户收藏或足迹主键
+     * @return 结果
+     */
+    public int deleteTCustomerCollectionOrFootprintById(Long id);
+
+    /**
+     * 批量删除客户收藏或足迹
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerCollectionOrFootprintByIds(Long[] ids);
+
+    int deleteByCustomerIdAndCommodityId(TCustomerCollectionOrFootprint customerCollectionOrFootprint);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerCouponMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerCoupon;
+
+/**
+ * 客户优惠券信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCustomerCouponMapper 
+{
+    /**
+     * 查询客户优惠券信息
+     * 
+     * @param id 客户优惠券信息主键
+     * @return 客户优惠券信息
+     */
+    public TCustomerCoupon selectTCustomerCouponById(Long id);
+
+    /**
+     * 查询客户优惠券信息列表
+     * 
+     * @param tCustomerCoupon 客户优惠券信息
+     * @return 客户优惠券信息集合
+     */
+    public List<TCustomerCoupon> selectTCustomerCouponList(TCustomerCoupon tCustomerCoupon);
+
+    /**
+     * 新增客户优惠券信息
+     * 
+     * @param tCustomerCoupon 客户优惠券信息
+     * @return 结果
+     */
+    public int insertTCustomerCoupon(TCustomerCoupon tCustomerCoupon);
+
+    /**
+     * 修改客户优惠券信息
+     * 
+     * @param tCustomerCoupon 客户优惠券信息
+     * @return 结果
+     */
+    public int updateTCustomerCoupon(TCustomerCoupon tCustomerCoupon);
+
+    /**
+     * 删除客户优惠券信息
+     * 
+     * @param id 客户优惠券信息主键
+     * @return 结果
+     */
+    public int deleteTCustomerCouponById(Long id);
+
+    /**
+     * 批量删除客户优惠券信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerCouponByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerDistributionRecordMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerDistributionRecord;
+
+/**
+ * 客户分销信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+public interface TCustomerDistributionRecordMapper 
+{
+    /**
+     * 查询客户分销信息
+     * 
+     * @param id 客户分销信息主键
+     * @return 客户分销信息
+     */
+    public TCustomerDistributionRecord selectTCustomerDistributionRecordById(Long id);
+
+    /**
+     * 查询客户分销信息列表
+     * 
+     * @param tCustomerDistributionRecord 客户分销信息
+     * @return 客户分销信息集合
+     */
+    public List<TCustomerDistributionRecord> selectTCustomerDistributionRecordList(TCustomerDistributionRecord tCustomerDistributionRecord);
+
+    /**
+     * 新增客户分销信息
+     * 
+     * @param tCustomerDistributionRecord 客户分销信息
+     * @return 结果
+     */
+    public int insertTCustomerDistributionRecord(TCustomerDistributionRecord tCustomerDistributionRecord);
+
+    /**
+     * 修改客户分销信息
+     * 
+     * @param tCustomerDistributionRecord 客户分销信息
+     * @return 结果
+     */
+    public int updateTCustomerDistributionRecord(TCustomerDistributionRecord tCustomerDistributionRecord);
+
+    /**
+     * 删除客户分销信息
+     * 
+     * @param id 客户分销信息主键
+     * @return 结果
+     */
+    public int deleteTCustomerDistributionRecordById(Long id);
+
+    /**
+     * 批量删除客户分销信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerDistributionRecordByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerDistributionSetMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerDistributionSet;
+
+/**
+ * 客户分销奖励设定Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCustomerDistributionSetMapper 
+{
+    /**
+     * 查询客户分销奖励设定
+     * 
+     * @param id 客户分销奖励设定主键
+     * @return 客户分销奖励设定
+     */
+    public TCustomerDistributionSet selectTCustomerDistributionSetById(Long id);
+
+    /**
+     * 查询客户分销奖励设定列表
+     * 
+     * @param tCustomerDistributionSet 客户分销奖励设定
+     * @return 客户分销奖励设定集合
+     */
+    public List<TCustomerDistributionSet> selectTCustomerDistributionSetList(TCustomerDistributionSet tCustomerDistributionSet);
+
+    /**
+     * 新增客户分销奖励设定
+     * 
+     * @param tCustomerDistributionSet 客户分销奖励设定
+     * @return 结果
+     */
+    public int insertTCustomerDistributionSet(TCustomerDistributionSet tCustomerDistributionSet);
+
+    /**
+     * 修改客户分销奖励设定
+     * 
+     * @param tCustomerDistributionSet 客户分销奖励设定
+     * @return 结果
+     */
+    public int updateTCustomerDistributionSet(TCustomerDistributionSet tCustomerDistributionSet);
+
+    /**
+     * 删除客户分销奖励设定
+     * 
+     * @param id 客户分销奖励设定主键
+     * @return 结果
+     */
+    public int deleteTCustomerDistributionSetById(Long id);
+
+    /**
+     * 批量删除客户分销奖励设定
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerDistributionSetByIds(Long[] ids);
+}

+ 63 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerIntegralRecordMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerIntegralRecord;
+
+/**
+ * 客户积分记录Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCustomerIntegralRecordMapper 
+{
+    /**
+     * 查询客户积分记录
+     * 
+     * @param id 客户积分记录主键
+     * @return 客户积分记录
+     */
+    public TCustomerIntegralRecord selectTCustomerIntegralRecordById(Long id);
+
+    /**
+     * 查询客户积分记录列表
+     * 
+     * @param tCustomerIntegralRecord 客户积分记录
+     * @return 客户积分记录集合
+     */
+    public List<TCustomerIntegralRecord> selectTCustomerIntegralRecordList(TCustomerIntegralRecord tCustomerIntegralRecord);
+
+    /**
+     * 新增客户积分记录
+     * 
+     * @param tCustomerIntegralRecord 客户积分记录
+     * @return 结果
+     */
+    public int insertTCustomerIntegralRecord(TCustomerIntegralRecord tCustomerIntegralRecord);
+
+    /**
+     * 修改客户积分记录
+     * 
+     * @param tCustomerIntegralRecord 客户积分记录
+     * @return 结果
+     */
+    public int updateTCustomerIntegralRecord(TCustomerIntegralRecord tCustomerIntegralRecord);
+
+    /**
+     * 删除客户积分记录
+     * 
+     * @param id 客户积分记录主键
+     * @return 结果
+     */
+    public int deleteTCustomerIntegralRecordById(Long id);
+
+    /**
+     * 批量删除客户积分记录
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerIntegralRecordByIds(Long[] ids);
+
+    List<TCustomerIntegralRecord> selectTCustomerIntegralRecordList4Pc(TCustomerIntegralRecord tCustomerIntegralRecord);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerIntegralSetMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerIntegralSet;
+
+/**
+ * 客户积分奖励设定Mapper接口
+ * 
+ * @author lzp
+ * @date 2022-11-08
+ */
+public interface TCustomerIntegralSetMapper 
+{
+    /**
+     * 查询客户积分奖励设定
+     * 
+     * @param id 客户积分奖励设定主键
+     * @return 客户积分奖励设定
+     */
+    public TCustomerIntegralSet selectTCustomerIntegralSetById(Long id);
+
+    /**
+     * 查询客户积分奖励设定列表
+     * 
+     * @param tCustomerIntegralSet 客户积分奖励设定
+     * @return 客户积分奖励设定集合
+     */
+    public List<TCustomerIntegralSet> selectTCustomerIntegralSetList(TCustomerIntegralSet tCustomerIntegralSet);
+
+    /**
+     * 新增客户积分奖励设定
+     * 
+     * @param tCustomerIntegralSet 客户积分奖励设定
+     * @return 结果
+     */
+    public int insertTCustomerIntegralSet(TCustomerIntegralSet tCustomerIntegralSet);
+
+    /**
+     * 修改客户积分奖励设定
+     * 
+     * @param tCustomerIntegralSet 客户积分奖励设定
+     * @return 结果
+     */
+    public int updateTCustomerIntegralSet(TCustomerIntegralSet tCustomerIntegralSet);
+
+    /**
+     * 删除客户积分奖励设定
+     * 
+     * @param id 客户积分奖励设定主键
+     * @return 结果
+     */
+    public int deleteTCustomerIntegralSetById(Long id);
+
+    /**
+     * 批量删除客户积分奖励设定
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerIntegralSetByIds(Long[] ids);
+}

+ 70 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerManageMapper.java

@@ -0,0 +1,70 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+
+import com.ruoyi.common.core.domain.model.LoginCustomerManage;
+import com.ruoyi.web.pcApi.domain.TCustomerManage;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 客户信息管理Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+public interface TCustomerManageMapper 
+{
+    /**
+     * 查询客户信息管理
+     * 
+     * @param id 客户信息管理主键
+     * @return 客户信息管理
+     */
+    public TCustomerManage selectTCustomerManageById(Long id);
+
+    /**
+     * 查询客户信息管理列表
+     * 
+     * @param tCustomerManage 客户信息管理
+     * @return 客户信息管理集合
+     */
+    public List<TCustomerManage> selectTCustomerManageList(TCustomerManage tCustomerManage);
+
+    /**
+     * 新增客户信息管理
+     * 
+     * @param tCustomerManage 客户信息管理
+     * @return 结果
+     */
+    public int insertTCustomerManage(TCustomerManage tCustomerManage);
+
+    /**
+     * 修改客户信息管理
+     * 
+     * @param tCustomerManage 客户信息管理
+     * @return 结果
+     */
+    public int updateTCustomerManage(TCustomerManage tCustomerManage);
+
+    /**
+     * 删除客户信息管理
+     * 
+     * @param id 客户信息管理主键
+     * @return 结果
+     */
+    public int deleteTCustomerManageById(Long id);
+
+    /**
+     * 批量删除客户信息管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerManageByIds(Long[] ids);
+
+    List<TCustomerManage> selectTCustomerDistributionRecordList(TCustomerManage customerManage);
+
+    LoginCustomerManage selectLoginUser(LoginCustomerManage loginCustomerManage);
+
+    List<TCustomerManage> selectTCustomerManageList4H5(TCustomerManage tCustomerManage);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerNoticeMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerNotice;
+
+/**
+ * 客户通知信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCustomerNoticeMapper 
+{
+    /**
+     * 查询客户通知信息
+     * 
+     * @param id 客户通知信息主键
+     * @return 客户通知信息
+     */
+    public TCustomerNotice selectTCustomerNoticeById(Long id);
+
+    /**
+     * 查询客户通知信息列表
+     * 
+     * @param tCustomerNotice 客户通知信息
+     * @return 客户通知信息集合
+     */
+    public List<TCustomerNotice> selectTCustomerNoticeList(TCustomerNotice tCustomerNotice);
+
+    /**
+     * 新增客户通知信息
+     * 
+     * @param tCustomerNotice 客户通知信息
+     * @return 结果
+     */
+    public int insertTCustomerNotice(TCustomerNotice tCustomerNotice);
+
+    /**
+     * 修改客户通知信息
+     * 
+     * @param tCustomerNotice 客户通知信息
+     * @return 结果
+     */
+    public int updateTCustomerNotice(TCustomerNotice tCustomerNotice);
+
+    /**
+     * 删除客户通知信息
+     * 
+     * @param id 客户通知信息主键
+     * @return 结果
+     */
+    public int deleteTCustomerNoticeById(Long id);
+
+    /**
+     * 批量删除客户通知信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerNoticeByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TCustomerShoppingCartMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TCustomerShoppingCart;
+
+/**
+ * 客户购物车Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TCustomerShoppingCartMapper 
+{
+    /**
+     * 查询客户购物车
+     * 
+     * @param id 客户购物车主键
+     * @return 客户购物车
+     */
+    public TCustomerShoppingCart selectTCustomerShoppingCartById(Long id);
+
+    /**
+     * 查询客户购物车列表
+     * 
+     * @param tCustomerShoppingCart 客户购物车
+     * @return 客户购物车集合
+     */
+    public List<TCustomerShoppingCart> selectTCustomerShoppingCartList(TCustomerShoppingCart tCustomerShoppingCart);
+
+    /**
+     * 新增客户购物车
+     * 
+     * @param tCustomerShoppingCart 客户购物车
+     * @return 结果
+     */
+    public int insertTCustomerShoppingCart(TCustomerShoppingCart tCustomerShoppingCart);
+
+    /**
+     * 修改客户购物车
+     * 
+     * @param tCustomerShoppingCart 客户购物车
+     * @return 结果
+     */
+    public int updateTCustomerShoppingCart(TCustomerShoppingCart tCustomerShoppingCart);
+
+    /**
+     * 删除客户购物车
+     * 
+     * @param id 客户购物车主键
+     * @return 结果
+     */
+    public int deleteTCustomerShoppingCartById(Long id);
+
+    /**
+     * 批量删除客户购物车
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerShoppingCartByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TNoticeMessageMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TNoticeMessage;
+
+/**
+ * 通知消息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+public interface TNoticeMessageMapper 
+{
+    /**
+     * 查询通知消息
+     * 
+     * @param id 通知消息主键
+     * @return 通知消息
+     */
+    public TNoticeMessage selectTNoticeMessageById(Long id);
+
+    /**
+     * 查询通知消息列表
+     * 
+     * @param tNoticeMessage 通知消息
+     * @return 通知消息集合
+     */
+    public List<TNoticeMessage> selectTNoticeMessageList(TNoticeMessage tNoticeMessage);
+
+    /**
+     * 新增通知消息
+     * 
+     * @param tNoticeMessage 通知消息
+     * @return 结果
+     */
+    public int insertTNoticeMessage(TNoticeMessage tNoticeMessage);
+
+    /**
+     * 修改通知消息
+     * 
+     * @param tNoticeMessage 通知消息
+     * @return 结果
+     */
+    public int updateTNoticeMessage(TNoticeMessage tNoticeMessage);
+
+    /**
+     * 删除通知消息
+     * 
+     * @param id 通知消息主键
+     * @return 结果
+     */
+    public int deleteTNoticeMessageById(Long id);
+
+    /**
+     * 批量删除通知消息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTNoticeMessageByIds(Long[] ids);
+}

+ 63 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TOrderEvaluateMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TOrderEvaluate;
+
+/**
+ * 订单评价信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-24
+ */
+public interface TOrderEvaluateMapper 
+{
+    /**
+     * 查询订单评价信息
+     * 
+     * @param id 订单评价信息主键
+     * @return 订单评价信息
+     */
+    public TOrderEvaluate selectTOrderEvaluateById(Long id);
+
+    /**
+     * 查询订单评价信息列表
+     * 
+     * @param tOrderEvaluate 订单评价信息
+     * @return 订单评价信息集合
+     */
+    public List<TOrderEvaluate> selectTOrderEvaluateList(TOrderEvaluate tOrderEvaluate);
+
+    /**
+     * 新增订单评价信息
+     * 
+     * @param tOrderEvaluate 订单评价信息
+     * @return 结果
+     */
+    public int insertTOrderEvaluate(TOrderEvaluate tOrderEvaluate);
+
+    /**
+     * 修改订单评价信息
+     * 
+     * @param tOrderEvaluate 订单评价信息
+     * @return 结果
+     */
+    public int updateTOrderEvaluate(TOrderEvaluate tOrderEvaluate);
+
+    /**
+     * 删除订单评价信息
+     * 
+     * @param id 订单评价信息主键
+     * @return 结果
+     */
+    public int deleteTOrderEvaluateById(Long id);
+
+    /**
+     * 批量删除订单评价信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTOrderEvaluateByIds(Long[] ids);
+
+    List<TOrderEvaluate> selectTOrderEvaluateList4H5(TOrderEvaluate build);
+}

+ 89 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TOrderManageMapper.java

@@ -0,0 +1,89 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.web.pcApi.domain.TOrderManage;
+import com.ruoyi.web.pcApi.domain.TPurchasedDetailExportDo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 订单管理Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface TOrderManageMapper 
+{
+    /**
+     * 查询订单管理
+     * 
+     * @param id 订单管理主键
+     * @return 订单管理
+     */
+    public TOrderManage selectTOrderManageById(Long id);
+
+    /**
+     * 查询订单管理列表
+     * 
+     * @param tOrderManage 订单管理
+     * @return 订单管理集合
+     */
+    public List<TOrderManage> selectTOrderManageList(TOrderManage tOrderManage);
+
+    /**
+     * 查询订单管理列表
+     *
+     * @param tOrderManage 订单管理
+     * @return 订单管理集合
+     */
+    public List<TOrderManage> selectTOrderManageList4H5(TOrderManage tOrderManage);
+
+    /**
+     * 新增订单管理
+     * 
+     * @param tOrderManage 订单管理
+     * @return 结果
+     */
+    public int insertTOrderManage(TOrderManage tOrderManage);
+
+    /**
+     * 修改订单管理
+     * 
+     * @param tOrderManage 订单管理
+     * @return 结果
+     */
+    public int updateTOrderManage(TOrderManage tOrderManage);
+
+    /**
+     * 删除订单管理
+     * 
+     * @param id 订单管理主键
+     * @return 结果
+     */
+    public int deleteTOrderManageById(Long id);
+
+    /**
+     * 批量删除订单管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTOrderManageByIds(Long[] ids);
+
+    List<Map<String, Object>> selectCommoditySaleStatisTop10(@Param("beginDate") String beginDate,@Param("endDate") String endDate,@Param("deptId") Long deptId);
+
+    List<Map<String, Object>> selectCommoditySaleStatisByMonth(@Param("deptId") Long deptId);
+
+    List<Map<String, Object>> statis4Departure(@Param("beginDate") String beginDate,@Param("endDate") String endDate,@Param("deptId") Long deptId);
+
+    List<Map<String, Object>> statis4Type(@Param("beginDate") String beginDate,@Param("endDate") String endDate,@Param("deptId") Long deptId);
+
+    List<Map<String, Object>> statis4Bus(@Param("beginDate") String beginDate,@Param("endDate") String endDate,@Param("deptId") Long deptId);
+
+    List<Map<String, Object>> selectPurchasedList(TOrderManage order);
+
+    List<Map<String, Object>> selectPlaceList(String id);
+
+    List<TPurchasedDetailExportDo> purchasedDetailList(TOrderManage order);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/mapper/TOrderManageTotalMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.mapper;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.TOrderManageTotal;
+
+/**
+ * 订单管理-总Mapper接口
+ * 
+ * @author lzp
+ * @date 2022-09-20
+ */
+public interface TOrderManageTotalMapper 
+{
+    /**
+     * 查询订单管理-总
+     * 
+     * @param id 订单管理-总主键
+     * @return 订单管理-总
+     */
+    public TOrderManageTotal selectTOrderManageTotalById(Long id);
+
+    /**
+     * 查询订单管理-总列表
+     * 
+     * @param tOrderManageTotal 订单管理-总
+     * @return 订单管理-总集合
+     */
+    public List<TOrderManageTotal> selectTOrderManageTotalList(TOrderManageTotal tOrderManageTotal);
+
+    /**
+     * 新增订单管理-总
+     * 
+     * @param tOrderManageTotal 订单管理-总
+     * @return 结果
+     */
+    public int insertTOrderManageTotal(TOrderManageTotal tOrderManageTotal);
+
+    /**
+     * 修改订单管理-总
+     * 
+     * @param tOrderManageTotal 订单管理-总
+     * @return 结果
+     */
+    public int updateTOrderManageTotal(TOrderManageTotal tOrderManageTotal);
+
+    /**
+     * 删除订单管理-总
+     * 
+     * @param id 订单管理-总主键
+     * @return 结果
+     */
+    public int deleteTOrderManageTotalById(Long id);
+
+    /**
+     * 批量删除订单管理-总
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTOrderManageTotalByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/IBusCompanyService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.web.pcApi.service;
+
+import java.util.List;
+import com.ruoyi.web.pcApi.domain.BusCompany;
+
+/**
+ * bus公司Service接口
+ * 
+ * @author lzp
+ * @date 2022-08-26
+ */
+public interface IBusCompanyService 
+{
+    /**
+     * 查询bus公司
+     * 
+     * @param deptId bus公司主键
+     * @return bus公司
+     */
+    public BusCompany selectBusCompanyByDeptId(Long deptId);
+
+    /**
+     * 查询bus公司列表
+     * 
+     * @param busCompany bus公司
+     * @return bus公司集合
+     */
+    public List<BusCompany> selectBusCompanyList(BusCompany busCompany);
+
+    /**
+     * 新增bus公司
+     * 
+     * @param busCompany bus公司
+     * @return 结果
+     */
+    public int insertBusCompany(BusCompany busCompany);
+
+    /**
+     * 修改bus公司
+     * 
+     * @param busCompany bus公司
+     * @return 结果
+     */
+    public int updateBusCompany(BusCompany busCompany);
+
+    /**
+     * 批量删除bus公司
+     * 
+     * @param deptIds 需要删除的bus公司主键集合
+     * @return 结果
+     */
+    public int deleteBusCompanyByDeptIds(Long[] deptIds);
+
+    /**
+     * 删除bus公司信息
+     * 
+     * @param deptId bus公司主键
+     * @return 结果
+     */
+    public int deleteBusCompanyByDeptId(Long deptId);
+}

+ 67 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/ITCommodityCouponService.java

@@ -0,0 +1,67 @@
+package com.ruoyi.web.pcApi.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.web.pcApi.domain.TCommodityCoupon;
+
+/**
+ * 商品优惠卷信息Service接口
+ * 
+ * @author lzp
+ * @date 2022-08-25
+ */
+public interface ITCommodityCouponService 
+{
+    /**
+     * 查询商品优惠卷信息
+     * 
+     * @param id 商品优惠卷信息主键
+     * @return 商品优惠卷信息
+     */
+    public TCommodityCoupon selectTCommodityCouponById(Long id);
+
+    /**
+     * 查询商品优惠卷信息列表
+     * 
+     * @param tCommodityCoupon 商品优惠卷信息
+     * @return 商品优惠卷信息集合
+     */
+    public List<TCommodityCoupon> selectTCommodityCouponList(TCommodityCoupon tCommodityCoupon);
+
+    /**
+     * 新增商品优惠卷信息
+     * 
+     * @param tCommodityCoupon 商品优惠卷信息
+     * @return 结果
+     */
+    public int insertTCommodityCoupon(TCommodityCoupon tCommodityCoupon);
+
+    /**
+     * 修改商品优惠卷信息
+     * 
+     * @param tCommodityCoupon 商品优惠卷信息
+     * @return 结果
+     */
+    public int updateTCommodityCoupon(TCommodityCoupon tCommodityCoupon);
+
+    /**
+     * 批量删除商品优惠卷信息
+     * 
+     * @param ids 需要删除的商品优惠卷信息主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityCouponByIds(Long[] ids);
+
+    /**
+     * 删除商品优惠卷信息信息
+     * 
+     * @param id 商品优惠卷信息主键
+     * @return 结果
+     */
+    public int deleteTCommodityCouponById(Long id);
+
+    List<Map<String, Object>> selectTCommodityCouponStatisList(TCommodityCoupon commodityCoupon);
+
+    List<Map<String, Object>> selectTCommodityCouponStatisDetailList(TCommodityCoupon commodityCoupon);
+}

+ 62 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/ITCommodityJourneyInformationService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.web.pcApi.service;
+
+import com.ruoyi.web.pcApi.domain.TCommodityJourneyInformation;
+
+import java.util.List;
+
+/**
+ * 商品旅程信息Service接口
+ * 
+ * @author ruoyi
+ * @date 2022-08-25
+ */
+public interface ITCommodityJourneyInformationService 
+{
+    /**
+     * 查询商品旅程信息
+     * 
+     * @param id 商品旅程信息主键
+     * @return 商品旅程信息
+     */
+    public TCommodityJourneyInformation selectTCommodityJourneyInformationById(Long id);
+
+    /**
+     * 查询商品旅程信息列表
+     * 
+     * @param tCommodityJourneyInformation 商品旅程信息
+     * @return 商品旅程信息集合
+     */
+    public List<TCommodityJourneyInformation> selectTCommodityJourneyInformationList(TCommodityJourneyInformation tCommodityJourneyInformation);
+
+    /**
+     * 新增商品旅程信息
+     * 
+     * @param tCommodityJourneyInformation 商品旅程信息
+     * @return 结果
+     */
+    public int insertTCommodityJourneyInformation(TCommodityJourneyInformation tCommodityJourneyInformation);
+
+    /**
+     * 修改商品旅程信息
+     * 
+     * @param tCommodityJourneyInformation 商品旅程信息
+     * @return 结果
+     */
+    public int updateTCommodityJourneyInformation(TCommodityJourneyInformation tCommodityJourneyInformation);
+
+    /**
+     * 批量删除商品旅程信息
+     * 
+     * @param ids 需要删除的商品旅程信息主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityJourneyInformationByIds(Long[] ids);
+
+    /**
+     * 删除商品旅程信息信息
+     * 
+     * @param id 商品旅程信息主键
+     * @return 结果
+     */
+    public int deleteTCommodityJourneyInformationById(Long id);
+}

+ 79 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/service/ITCommodityManageService.java

@@ -0,0 +1,79 @@
+package com.ruoyi.web.pcApi.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.web.pcApi.domain.TCommodityManage;
+
+/**
+ * 商品信息管理Service接口
+ * 
+ * @author lzp
+ * @date 2022-08-24
+ */
+public interface ITCommodityManageService 
+{
+    /**
+     * 查询商品信息管理
+     * 
+     * @param id 商品信息管理主键
+     * @return 商品信息管理
+     */
+    public TCommodityManage selectTCommodityManageById(Long id);
+
+    /**
+     * 查询商品信息管理列表
+     * 
+     * @param tCommodityManage 商品信息管理
+     * @return 商品信息管理集合
+     */
+    public List<TCommodityManage> selectTCommodityManageList(TCommodityManage tCommodityManage);
+
+    /**
+     * 新增商品信息管理
+     * 
+     * @param tCommodityManage 商品信息管理
+     * @return 结果
+     */
+    public int insertTCommodityManage(TCommodityManage tCommodityManage);
+
+    /**
+     * 修改商品信息管理
+     * 
+     * @param tCommodityManage 商品信息管理
+     * @return 结果
+     */
+    public int updateTCommodityManage(TCommodityManage tCommodityManage);
+
+    /**
+     * 批量删除商品信息管理
+     * 
+     * @param ids 需要删除的商品信息管理主键集合
+     * @return 结果
+     */
+    public int deleteTCommodityManageByIds(Long[] ids);
+
+    /**
+     * 删除商品信息管理信息
+     * 
+     * @param id 商品信息管理主键
+     * @return 结果
+     */
+    public int deleteTCommodityManageById(Long id);
+
+    /**
+     * 查询销量前十
+     * @param commodityManage
+     * @return
+     */
+    List<TCommodityManage> selectSalesTop10(TCommodityManage commodityManage);
+
+    /**
+     *  同类型商品top5 排除自己
+     * @param id
+     * @return
+     */
+    List<TCommodityManage> selectSameTypeCommodityTop5(Long id,Long typeId,Long deptId);
+
+    List<TCommodityManage> selectTCommodityManageList4H5(TCommodityManage commodityManage);
+}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor